结构力学 结构矩阵程序设计原理源程序代码

结构力学 结构矩阵程序设计原理源程序代码
结构力学 结构矩阵程序设计原理源程序代码

'===========================================

'Structural Analysis Program for Plane Frame

'===========================================

Option Explicit

Dim nn As Integer, ne As Integer, nd As Integer, ndf As Integer

Dim nf As Integer, npj As Integer, npe As Integer, n As Integer

Dim al(50) As Double, t(6, 6) As Double, x(40) As Double, y(40) As Double

Dim jl(50) As Integer, jr(50) As Integer, ea(50) As Double, ei(50) As Double

Dim c(6, 6) As Double, r(120, 120) As Double, p(120) As Double, pe(120) As Double

Dim ibd(20) As Integer, ii(6) As Integer, bd(20) As Double, ff(6) As Double

Dim mj(20) As Integer, qj(20, 3) As Double, f(6) As Double, dis(6) As Double

Dim mf(30) As Integer, ind(30) As Integer, aq(30) As Double, bq(30) As Double

Dim q1(30) As Double, q2(30) As Double

'===================================

'SUB-1 Read and Print Initial Data

'===================================

Sub input1()

Dim inti As Integer, intj As Integer, i As Integer, j As Integer, k As Integer

Dim dx, dy As Double

Print #2, "Plane Frame Structural Analysis"

Print #2, "****************************"

Print #2, "Input Data"

Print #2, "= = = = = = = "

Print #2,

Print #2, "Structural Control Data"

Print #2, "------------------------------"

Print #2, "nn"; Spc(3); "ne"; Spc(3); "nf"; Spc(3); "nd"; Spc(3); "ndf"; Spc(2); "npj"; Spc(2); "npe"; Spc(3); "n"

Input #1, nn, ne, nf, nd, ndf, npj, npe

n = 3 * (nn - nf)

Print #2, nn; Spc(2); ne; Spc(2); nf; Spc(2); nd; Spc(2); ndf; Spc(2); npj; Spc(2); npe; Spc(2); n Print #2,

Print #2, "Nodal Coordinates"

Print #2, "---------------------------"

Print #2, "Node"; Spc(2); "x"; Spc(5); "y"

i = nn

For inti = 1 To i

Input #1, inti, x(inti), y(inti)

Print #2, inti; Spc(2); x(inti); Spc(3); y(inti)

Next inti

Print #2,

Print #2, "Element Information"

Print #2, "-----------------------------"

Print #2, "Ele.No."; Spc(2); "jl"; Spc(2); "jr"; Spc(5); "ea"; Spc(7); "ei"; Spc(5); "al"

i = ne

For inti = 1 To i

Input #1, inti, jl(inti), jr(inti), ea(inti), ei(inti)

Next inti

For inti = 1 To i

If jl(inti) >= jr(inti) Then Stop

Next inti

For inti = 1 To i

j = jl(inti)

k = jr(inti)

dx = x(k) - x(j)

dy = y(k) - y(j)

al(inti) = Sqr(dx * dx + dy * dy)

Print #2, Spc(3); inti; Spc(4); jl(inti); Spc(3); jr(inti); Spc(2); ea(inti); Spc(2); ei(inti); Spc(2); al(inti)

Next inti

Print #2,

k = npj

If k <> 0 Then

Print #2, "Nodal Load"

Print #2, "---------------"

Print #2, "i"; Spc(3); "mj"; Spc(2); "xd"; Spc(2); "yd"; Spc(2); "md"

For inti = 1 To k

Input #1, inti, mj(inti), qj(inti, 1), qj(inti, 2), qj(inti, 3)

Print #2, inti; Spc(2); mj(inti); Spc(2); qj(inti, 1); Spc(2); qj(inti, 2); Spc(2); qj(inti, 3) Next inti

End If

Print #2,

i = npe

If i <> 0 Then

Print #2, "Element Loads"

Print #2, "-------------------"

Print #2, "i"; Spc(3); "mf"; Spc(2); "ind"; Spc(2); "aq"; Spc(2); "bq"; Spc(2); "q1"; Spc(3); "q2"

For inti = 1 To i

Input #1, inti, mf(inti), ind(inti), aq(inti), bq(inti), q1(inti), q2(inti)

Print #2, inti; Spc(2); mf(inti); Spc(3); ind(inti); Spc(2); aq(inti); Spc(2); bq(inti); Spc(2); q1(inti); Spc(3); q2(inti)

Next inti

End If

Print #2,

j = ndf

If j <> 0 Then

Print #2, "Boundary conditions"

Print #2, "--------------------------"

Print #2, "i"; Spc(3); "ibd"; Spc(3); "bd"

For inti = 1 To j

Input #1, inti, ibd(inti), bd(inti)

Print #2, inti; Spc(3); ibd(inti); Spc(3); bd(inti)

Next inti

End If

End Sub

'=================================================== 'SUB-2 Assemble Structural Stiffness Matrix {R}

'=================================================== Sub wstiff()

Dim i As Integer, j As Integer, ie As Integer, k1 As Integer, k2 As Integer

For i = 1 To n

For j = 1 To n

r(i, j) = 0

Next j

Next i

ie = 1

Do While ie <= ne

Call stiff(ie)

Call locat(ie)

For k1 = 1 To 6

i = ii(k1)

If i <= n Then

For k2 = k1 To 6

j = ii(k2)

If j <= n Then

r(i, j) = r(i, j) + c(k1, k2)

End If

Next k2

End If

Next k1

ie = ie + 1

Loop

For i = 2 To n

For j = 1 To (i - 1)

r(i, j) = r(j, i)

Next i

End Sub

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

'SUB-3 Set Up Stiffness Matrix [C] (Global Coordinate System)

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Sub stiff(ie)

Dim i As Integer, j As Integer

Dim cx As Double, cy As Double, b1 As Double, b2 As Double, b3 As Double, b4 As Double Dim s1 As Double, s2 As Double, s3 As Double, s4 As Double, s5 As Double, s6 As Double

i = jl(ie)

j = jr(ie)

cx = (x(j) - x(i)) / al(ie)

cy = (y(j) - y(i)) / al(ie)

b1 = ea(ie) / al(ie)

b2 = 12# * ei(ie) / al(ie) ^ 3

b3 = 6# * ei(ie) / al(ie) ^ 2

b4 = 2# * ei(ie) / al(ie)

s1 = b1 * cx ^ 2 + b2 * cy ^ 2

s2 = (b1 - b2) * cx * cy

s3 = b3 * cy

s4 = b1 * cy ^ 2 + b2 * cx ^ 2

s5 = b3 * cx

s6 = b4

c(1, 1) = s1

c(1, 2) = s2

c(1, 3) = s3

c(1, 4) = -s1

c(1, 5) = -s2

c(1, 6) = s3

c(2, 2) = s4

c(2, 3) = -s5

c(2, 4) = -s2

c(2, 5) = -s4

c(2, 6) = -s5

c(3, 3) = 2# * s6

c(3, 4) = -s3

c(3, 5) = s5

c(3, 6) = s6

c(4, 5) = s2

c(4, 6) = -s3

c(5, 5) = s4

c(5, 6) = s5

c(6, 6) = 2# * s6

For i = 2 To 6

For j = 1 To (i - 1)

c(i, j) = c(j, i)

Next j

Next i

End Sub

'= = = = = = = = = = = = = = = = = = = = = = = 'SUB-4 Set Up Element Location Vector{Ⅱ} '= = = = = = = = = = = = = = = = = = = = = = = Sub locat(ie)

Dim i As Integer, j As Integer

i = jl(ie)

j = jr(ie)

ii(1) = 3 * i - 2

ii(2) = 3 * i - 1

ii(3) = 3 * i

ii(4) = 3 * j - 2

ii(5) = 3 * j - 1

ii(6) = 3 * j

End Sub

'= = = = = = = = = = = = = = = = = = =

'SUB-5 Set Up Toal Nodal V ector {p}

'= = = = = = = = = = = = = = = = = = =

Sub load()

Dim i As Integer, j As Integer, k As Integer

i = 1

Do While i <= n

p(i) = 0#

i = i + 1

Loop

If npj > 0 Then

For i = 1 To npj

k = mj(i)

p(3 * k - 2) = qj(i, 1)

p(3 * k - 1) = qj(i, 2)

p(3 * k) = qj(i, 3)

Next i

End If

If npe <> 0 Then

Call eload

i = 1

Do While i <= n

p(i) = p(i) + pe(i)

i = i + 1

Loop

End If

End Sub

'= = = = = = = = = = = = = = = = = = = =

'SUB-6 Set Up Element Effective Load

'= = = = = = = = = = = = = = = = = = = =

Sub eload()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer, k2 As Integer, k3 As Integer

i = 1

Do While i <= n

pe(i) = 0#

i = i + 1

Loop

j = 1

Do While j <= npe

k = mf(j)

Call trans(k)

Call locat(k)

Call efix(j)

For k1 = 1 To 6

f(k1) = 0#

For k2 = 1 To 6

f(k1) = f(k1) + t(k2, k1) * ff(k2)

Next k2

Next k1

For k3 = 1 To 6

i = ii(k3)

If i <= n Then

pe(i) = pe(i) - f(k3)

End If

Next k3

j = j + 1

Loop

End Sub

'=====================

'SUB-7 Set Up Fixed-End Force Of Element

'=====================

Sub efix(i)

Dim j As Integer, k As Integer

Dim s1 As Double, a As Double, b As Double, p1 As Double, p2 As Double

Dim b1 As Double, b2 As Double, b3 As Double, c1 As Double, c2 As Double, c3 As Double Dim d1 As Double, d2 As Double

For j = 1 To 6

ff(j) = 0#

Next j

k = mf(i)

s1 = al(k)

a = aq(i)

b = bq(i)

p1 = q1(i)

p2 = q2(i)

b1 = s1 - (a + b) / 2#

b2 = b - a

b3 = (a + b) / 2#

c1 = s1 - (2# * b + a) / 3#

c2 = b2

c3 = (2# * b + a) / 3#

d1 = b ^ 3 - a ^ 3

d2 = b * b - a * a

Select Case ind(i)

Case 1

ff(2) = -p1 * (s1 - a) ^ 2 * (1# + 2# * a / s1) / s1 ^ 2

ff(3) = p1 * a * (s1 - a) ^ 2 / s1 ^ 2

ff(5) = -p1 - ff(2)

ff(6) = -p1 * a ^ 2 * (s1 - a) / s1 ^ 2

Case 2

ff(2) = -p1 * b2 * (12# * b1 ^ 2 * s1 - 8# * b1 ^ 3 + b2 ^ 2 * s1 - 2# * b1 * b2 ^ 2) / (4# * s1 ^ 3)

ff(3) = p1 * b2 * (12# * b3 * b1 ^ 2 - 3 * b1 * b2 ^ 2 + b2 ^ 2 * s1) / 12# / s1 ^ 2

ff(5) = -p1 * b2 - ff(2)

ff(6) = -p1 * b2 * (12# * b3 ^ 2 * b1 + 3# * b1 * b2 ^ 2 - 2# * b2 ^ 2 * s1) / 12# / s1 ^ 2 Case 3

ff(2) = -p2 * c2 * (18 * c1 ^ 2 * s1 - 12 * c1 ^ 3 + c2 ^ 2 * s1 - 2 * c1 * c2 ^ 2 - 4 * c2 ^ 3 / 45) / 12 / s1 ^ 3

ff(3) = p2 * c2 * (18# * c3 * c1 ^ 2 - 3# * c1 * c2 ^ 2 + c2 ^ 2 * s1 - 2# * c2 ^ 3 / 15#) / 36# / s1 ^ 2

ff(5) = -0.5 * p1 * c2 - ff(2)

ff(6) = -p2 * c2 * (18# * c3 ^ 2 * c1 + 3 * c1 * c2 ^ 2 - 2 * c2 ^ 2 * s1 + 2 * c2 ^ 3 / 15#) / 36# / s1 ^ 2

Case 4

ff(2) = -6# * p1 * a * (s1 - a) / s1 ^ 3

ff(3) = p1 * (s1 - a) * (3# * a - s1) / s1 ^ 2

ff(5) = -ff(2)

ff(6) = p1 * a * (2# * s1 - 3# * a) / s1 ^ 2

Case 5

ff(2) = -p1 * (3# * s1 * d2 - 2# * d1) / s1 ^ 3

ff(3) = p1 * (2# * d2 + (b - a) * s1 - d1 / s1) / s1

ff(5) = -ff(2)

ff(6) = p1 * (d2 - d1 / s1) / s1

Case 6

ff(1) = -p1 * (1# - a / s1)

ff(4) = -p1 * a / s1

Case 7

ff(1) = -p1 * (b - a) * (1# - (b + a) / (2# * s1))

ff(4) = -p1 * d2 / 2# / s1

Case 8

ff(3) = -a * (p1 - p2) * ei(k) / b

ff(6) = -ff(3)

End Select

End Sub

'=====================

'SUB-8 Set Up Coordinate Transfer Matrix [T]

'=====================

Sub trans(ie)

Dim i As Integer, j As Integer

Dim cx As Double, cy As Double

i = jl(ie)

j = jr(ie)

cx = (x(j) - x(i)) / al(ie)

cy = (y(j) - y(i)) / al(ie)

For i = 1 To 6

For j = 1 To 6

t(i, j) = 0#

Next i

For i = 1 To 4 Step 3

t(i, i) = cx

t(i, i + 1) = cy

t(i + 1, i) = -cy

t(i + 1, i + 1) = cx

t(i + 2, i + 2) = 1#

Next i

End Sub

'=================

'SUB-9 Introduce Support Conditions

'=================

Sub bound()

Dim i As Integer, j As Integer, k As Integer

Dim a As Double

If ndf <> 0 Then

For j = 1 To ndf

a = 1E+20

For i = 1 To ndf

k = ibd(i)

r(k, k) = a

p(k) = a * bd(i)

Next i

Next j

End If

End Sub

'==============================

'SUB-10 Solve Equations

'==============================

Sub gauss()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer, n1 As Integer Dim c As Double

n1 = n - 1

For k = 1 To n1

k1 = k + 1

For i = k1 To n

c = r(k, i) / r(k, k)

p(i) = p(i) - p(k) * c

For j = k1 To n

r(i, j) = r(i, j) - r(k, j) * c

Next i

Next k

p(n) = p(n) / r(n, n)

For i = 1 To n1

k = n - 1

k1 = k + 1

For j = k1 To n

p(k) = p(k) - r(k, j) * p(j)

Next j

p(k) = p(k) / r(k, k)

Next i

For k = 1 To ne

Call locat(k)

For k1 = 1 To 6

i = ii(k1)

If i > n Then

p(i) = 0#

End If

Next k1

Next k

Print #2,

Print #2, "Output Data"

Print #2, "=================="

Print #2,

Print #2, "Nodal Displacement"

Print #2, "------------------"

Print #2, "Node No.", "u", "v", "fai"

For i = 1 To nn

Print #2, i, p(3 * i - 2), p(3 * i - 1), p(3 * i)

Next

End Sub

'================================================ 'SUB-11 Calculate Member-End Forces Of Elements

'================================================ Sub nqm()

Dim i As Integer, j As Integer, ie As Integer, k As Integer

Dim fe(6) As Double, f1(6) As Double

Print #2, "Element No.&member-end force:"

Print #2, "================================"

Print #2,

Print #2, "Ele No.", "n(l)", "q(l)", "m(l)", "n(r)", "q(r)", "m(r)" Print #2, "----------------------------------------------"

ie = 1

Do While ie <= ne

Call trans(ie)

Call stiff(ie)

Call locat(ie)

For i = 1 To 6

dis(i) = 0#

j = ii(i)

If j <= n Then

dis(i) = p(j)

End If

Next i

For i = 1 To 6

fe(i) = 0#

For j = 1 To 6

fe(i) = fe(i) + c(i, j) * dis(j)

Next j

Next i

For i = 1 To 6

f(i) = 0#

For j = 1 To 6

f(i) = f(i) + t(i, j) * fe(j)

Next j

Next i

If npe <> 0 Then

i = 1

Do While i <= npe

k = mf(i)

If k = ie Then

Call efix(i)

For j = 1 To 6

f(j) = f(j) + ff(j)

Next j

End If

i = i + 1

Loop

End If

Print #2, ie, f(1), f(2), f(3), f(4), f(5), f(6)

ie = ie + 1

Loop

End Sub

Private Sub Form_Load()

'============

'Main Program

'============

'Sub frame()

Open "E:\mydata\fr.txt" For Input As #1 Open "E:\mydata\fw.txt" For Output As #2 Call input1

Call wstiff

Call load

Call bound

Call gauss

Call nqm

Close 1

Close 2

End Sub

循环结构程序设计(C语言实验报告)

仲恺农业工程学院实验报告纸 信息学院(院、系) 专业 班 C 语言程序设计 课 实验目的: (1)熟练掌握用三种循环语句实现循环的方法。 (2)掌握在程序设计中用循环方法实现的一些常用算法。 (3)进一步学习调试程序。 实验内容与总结: 编程练习 1、打印出所有“水仙花数”——教材P129-6.6 程序如下: #include void main() { int i,j,k,n; for(n=100;n<1000;n++) { i=n/100; j=(n-i*100)/10; k=n-i*100-j*10; if(n==i*i*i+j*j*j+k*k*k) printf("水仙花数为:%d\n",n); } } (1)程序编制要点: ①用for 语句实现循环; ②立方的表示; ③if 语句的表达。 (2)该题目涉及的知识点和难点: ①for 语句的输入与使用; ②if 语句的使用。 2、用迭代法求a x = 。求平方根的公式为:)(211n n n x a x x +=+ 程序如下:

#include #include void main () { float x1,x2=1,a; printf("请输入求平方跟的数a="); scanf("%f",&a); do { x1=x2; x2=(x1+a/x1)/2; } while (fabs(x2-x1)>1e-5); printf("x的平方根是:%f\n",x2); } (1)程序编制要点: ①用do…while语句实现循环; ②平方根公式的输入; ③前后两次求出的x的差的绝对值小于1E-5。 (2)该题目涉及的知识点和难点: ①scanf函数,求绝对值函数fabs; ②do…while语句的输入与使用。 3、猜数字:编程先由计算机“想”一个1到100之间的整数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。 程序如下: #include #include /*使用srand和rand函数*/ #include /*使用time函数*/ void main() { int magic,guess,count=0; srand(time(NULL)); magic = rand() % 100 + 1; /*magic得到一个1到100的随机数*/ printf("请输入一个1到100之间的数,你共有10次机会:\n"); do { scanf("%d",&guess); count++; if((guess<=0)||(guess>=100))

实验2-循环结构程序设计

实验2 循环结构程序设计 一、实验目的 1.学习循环语句for、while和do-while语句的使用方法。 2.学习用循环语句实现各种算法,例如穷举法、迭代法等。 3.进一步熟悉C语言集成环境的使用方法 二、实验内容 1.用while循环实现数据统计问题。:从键盘输入一批任意数量的整数,统 计其中不大于100的非负数数值的个数。 2.编写并调试程序,使用do-while循环控制语句实现上面的数据统计问 题。调试数据仍参照上面给出的几种情况设计使用。 3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。 4.阶乘累加问题。编写程序,求1+2!+3!+…+n!的值。 三、实验指导 1.用while循环实现数据统计问题。 ?编程分析 由于输入数据个数是不确定的,因此每次执行程序时,循环次数都是不确定的。在进行程序设计时,确定循环控制的方法是本实验的一个关键问题。循环控制条件可以有多种确定方法: (1).使用一个负数作为数据输入结束标志。 (2).输入一个数据后通过进行询问的方式决定是否继续输入下一个数 据。 ?参考程序 参考程序一 /* 使用负数作为数据输入结束标志的程序 */ #include "stdio.h" void main()

{ int m,counter=0; while(1) { printf("请输入一个整数:"); scanf("%d",&m); if(m<0) break; if(m<=100) counter++; printf("\n"); } printf("符合要求的整数个数为: %d\n",counter); } 参考程序二 /* 通过进行询问的方式决定是否继续输入下一个数据的程序 */ #include int main() { int m,counter=0; char ask; while(1) { printf("请输入一个整数:"); scanf("%d",&m); getchar(); if(m>=0&&m<=100) counter++; printf("继续输入下一个数据?(Y/N)"); ask=getchar();

循环结构程序设计代码

实验五代码: 基础能力落实: 1)编写一个程序,将用分钟表示的时间转化成以小时和分钟表示的时间。使用#define 或者const来创建一个代表60的字符常量。使用while循环来允许用户重复键入值,并且当键入一个小于等于0的时间时终止循环。要求用while语句 #include int main(void) { const int minperhour = 60; int minutes, hours, mins; printf("Enter the number of minutes to convert: "); scanf("%d", &minutes); while (minutes > 0 ) { hours = minutes / minperhour; mins = minutes % minperhour; printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins); printf("Enter next minutes value (0 to quit): "); scanf("%d", &minutes); } printf("Bye\n"); return 0; } 2)编写一个程序打印一个表,表的每一行都给出一个整数,它的平方以及它的立方,要求用户输入表的上限和下限。使用一个for循环。 #include int main( void ) { int lower, upper, index; int square, cube; printf("Enter starting integer: "); scanf("%d", &lower);

C语言循环结构程序设计实验报告

甘肃政法学院 本科生实验报告 ( 五) 姓名:赵明翔 学院:公安技术学院 专业:安全防范工程 班级: 2015级安全防范工程班 实验课程名称:程序设计 实验日期:2016年月日 开课时间:2015学年第二学期

(2)输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字李方和等于该数本身。例如,153是水仙花数,因为153=12+53+33程序如下: #include int main() { int i,j,k,n; printf("paicissus numbers are"); for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d",n); } printf("\n"); return 0; } 运行结果: (3)猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又

多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下了1个桃子了。求第一天共摘了多少桃子。 程序如下: #include int main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n",x1); return 0; } 运行结果: (4)①用牛顿迭代法求方程0634223=-+-x x x 在1.5附近的根. #include #include int main() {double x1,x0,f,f1; x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1;

《结构力学习题集》下矩阵位移法习题及答案 2

第七章 矩阵位移法 一、就是非题 1、单元刚度矩阵反映了该单元杆端位移与杆端力之间的关系。 2、单元刚度矩阵均具有对称性与奇异性。 3、局部坐标系与整体坐标系之间的坐标变换矩阵T 就是正交矩阵。 4、结构刚度矩阵反映了结构结点位移与荷载之间的关系。 5、用 矩 阵 位 移 法 计 算 连 续 梁 时 无 需 对 单 元 刚 度 矩 阵 作 坐 标 变 换。 6、结 构 刚 度 矩 阵 就是 对 称 矩 阵 ,即 有K i j = K j i ,这 可 由 位 移 互 等 定 理 得 到 证 明 。 7、结构刚度方程矩阵形式为:[]{}{}K P ?=,它就是整个结构所应满足的变形条件。 8、在直接刚度法的先处理法中,定位向量的物理意义就是变形连续条件与位移边界条件。 9、等效结点荷载数值等于汇交于该结点所有固端力的代数与。 10、矩阵位移法中,等效结点荷载的“等效原则”就是指与非结点荷载的结点位移相等。 11、矩阵位移法既能计算超静定结构,也能计算静定结构。 二、选择题 1、已知图示刚架各杆EI = 常数,当只考虑弯曲变形,且各杆单元类型相同时,采用先处理法进行结点位移编号,其正确编号就是: (0,1,2) (0,0,0) (0,0,0) (0,1,3) (0,0,0)(1,2,0) (0,0,0)(0,0,3) (1,0,2) (0,0,0) (0,0,0)(1,0,3) (0,0,0) (0,1,2) (0,0,0)(0,3,4) A. B. C. D. 2134123412341234 2、平面杆件结构一般情况下的单元刚度矩阵[]k 66?,就其性质而言,就是: A.非对称、奇异矩阵; B.对称、奇异矩阵; C.对称、非奇异矩阵; D.非对称、非奇异矩阵。 3、单元i j 在图示两种坐标系中的刚度矩阵相比: A.完全相同; B.第2、3、5、6行(列)等值异号;

循环结构程序设计典型例题

循环结构程序设计典型例题 例1有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一 项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1.初值i=2,j=3,s=0; 2.用n从1到30循环 3.s=s+ i/j; 4.c=i; i=j+1; j=c+j; 5输出s; 程序: #in clude mai n() { int i=2,j=3, n,c; float s=0; for(n=1; n<=30 ;n++) { s=s+(float)i/j; c=i; i=j+1; j=c+j; } printf( "n%f” ,s); } 此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。 例2:下面这个程序,想想它实现的是什么功能? #in clude mai n() { int i,s=0; for(i=1;i<=100;i++) {if(i%5==0) continue; s=s+i; } printf( n“d' ,s); } 在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。 例3:输出n~m中(0<*m)能被3整除,且至少有一个数字是5的所有数。 算法分析:

循环结构程序设计(汇编语言)

循环结构程序设计(汇编语言)

汇编语言实验报告 实验名称:循环结构程序设计 姓名: 学号: 班级:

一、实验内容 1. 用多种循环方法实现1+2+3+…+20的程序(至少二种方法); 2. 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z 或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做) 3、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。 4、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。 二、实验目的 1. 掌握循环程序的结构。 2. 掌握循环程序的设计、编写及调试方法。 3. 掌握循环程序设计的基本方法。主要掌握几种基本的循环程序设计技巧,如计数法程序设计、当循环、直到循环等程序设计技术。 三、实验结果 1、将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR1和ADDR2开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在RESULT 开始的两个字存储单元中。 实验代码:(1.ASM 1.OBJ 1.EXE) data segment buff dw 6,35,99,17,80,69,50,33 addr1 dw 8 dup(?) addr2 dw 8 dup(?) result dw 0,0 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,8d

循环结构程序设计练习题

第三单元循环结构练习题 选择题: 1、有以下程序执行后的输出结果是()。 main( ) { int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf("%d\n",s);} A.自然数1~9的累加和 B.自然数1~10的累加和 C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和 2、以下关于for语句的说法不正确的是()。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先判断表达式,后执行循环体语句 C. for循环中,可以用break跳出循环体 D. for循环体语句中,可以保含多条语句,但要用花括号括起来 3、若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++) printf("*****\n"); 下面关于语句执行情况的叙述中正确的是()。 A.循环体执行两次 B.循环体执行一次 C.循环体一次也不执行 D.构成无限循环 4、已知 int t=0; while(t=1){...} 则以下叙述正确的是()。 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 5、设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 6、设i,j,k均为int型变量,则执行完下面的for语句后,k的值为()。for(i=0, j=10; i<=j; i++, j- -) k=i+j; A.6 B.9 C.10 D.11 7、C语言中,break; 语句可以用于循环语句和( )语句中。 A.if B.switch C.for D.while 8、for(i=0; i<=15; i++) printf("%d", i ); 循环结束后,i 的值为()。 A.14 B.15 C.16 D.17 9、与语句“while(!x)”等价的语句是()。 A. while(x==0) B. while(x!=0) C. while(x==1) D. while(x!=1) 10、下述程序段中,while循环执行次数是()。 int k=0;

结构力学习题集(下)-矩阵位移法习题及答案

第七章 矩阵位移法 一、是非题 1、单元刚度矩阵反映了该单元杆端位移与杆端力之间的关系。 2、单元刚度矩阵均具有对称性和奇异性。 3、局部坐标系与整体坐标系之间的坐标变换矩阵T 是正交矩阵。 4、结构刚度矩阵反映了结构结点位移与荷载之间的关系。 5、用 矩 阵 位 移 法 计 算 连 续 梁 时 无 需 对 单 元 刚 度 矩 阵 作 坐 标 变 换。 6、结 构 刚 度 矩 阵 是 对 称 矩 阵 ,即 有K i j = K j i ,这 可 由 位 移 互 等 定 理 得 到 证 明 。 7、结构刚度程矩阵形式为:[]{}{}K P ?=,它是整个结构所应满足的变形条件。 8、在直接刚度法的先处理法中,定位向量的物理意义是变形连续条件和位移边界条件。 9、等效结点荷载数值等于汇交于该结点所有固端力的代数和。 10、矩阵位移法中,等效结点荷载的“等效原则”是指与非结点荷载的结点位移相等。 11、矩阵位移法既能计算超静定结构,也能计算静定结构。 二、选择题 1、已知图示刚架各杆EI = 常数,当只考虑弯曲变形,且各杆单元类型相同时,采用先处理法进行结点位移编号,其正确编号是: (0,1,2) (0,0,0) (0,0,0) (0,1,3) (0,0,0)(1,2,0) (0,0,0)(0,0,3) (1,0,2) (0,0,0) (0,0,0)(1,0,3) (0,0,0) (0,1,2) (0,0,0)(0,3,4) A. B. C. D. 2134123412341234 2、平面杆件结构一般情况下的单元刚度矩阵[]k 66?,就其性质而言,是: A .非对称、奇异矩阵; B .对称、奇异矩阵; C .对称、非奇异矩阵; D .非对称、非奇异矩阵。 3、单元i j 在图示两种坐标系中的刚度矩阵相比: A .完全相同;

实验5_循环结构程序设计2题目及解答

4.3 循环结构程序设计2 【注意事项: (1)题中页码均为《C语言程序设计教程》中的页码 (2)题后为原程序文件名 (3)仅提交名为【*.c】的源程序文件,可一起提交,也可逐题提交 调试程序中常见问题及处理方法: (1)出现死循环时:关闭运行窗口即可。 】 1、按照下面的流程图书程序,用for语句实现。 【提示:参见p97—例4.23 ,并按照下面的左流程图书写007张三511.c,右流程图书写007张三512.c 程序运行结果: s=2550 】 2、用for语句编程,求300~500之间的水仙花数(如135:153=13+53+33)。(007张三52.c) 【程序运行结果: 300~500之间的全部水仙花数如下:??370??371??407 】 3、判断输入的数是否为素数。【提示:素数是只能被1和其自身和整除的数,】(007张三53.c) 【提示:参见p114—例4.36 程序运行时:程序运行结果: 请输入一个正整数:25?25不是素数 请输入一个正整数:12?125不是素数 请输入一个正整数:13?13是素数 】 4、判断输入的一个不超过32767的正整数是几位数。(007张三54.c)【提示:按照右侧的N-S图编程 运行时:运行结果: 请输入一个正整数(1~32767): 135?135是3位数请输入一个正整数(1~32767): 1356?1356是4位数请输入一个正整数(1~32767): 28906?28906是5位数】

附加题: 1、求出100~200间的所有素数。(007张三5附加1.c )。 【 运行结果: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 】 2、根据以下公式求π值(直到最后一项小于10 –6 为止)(007张三5附加2.c ) 【 运行结果: pi=3.141590 】 3、百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?(007张三5附加3.c ) 【提示:在编程之前,需先根据题意列出方程, 如: 设鸡翁x 只,鸡母y 只,鸡雏z 只 则有下列方程: x+y+z=100 和 5x+3y+z/3=100 因为2个方程,3个未知数,故为不定方程,需用穷举法解题。 运行结果: x=0??? y=25??z=75?? x=4??? y=18??z=78?? x=8??? y=11??z=81?? x=12?? y=4???z=84?? 】 参考解答: 1、~2、略 3、 #include void main( ) { int x, I, k; printf(“请输入一个正整数:”); scanf("%d", &x); k=x/2; while ( i <=k ) { if( x%i ==0 ) break; } if ( i>k ) { printf(“%d is \n”, x); } ??????+???+??+?++=9 4 73523173523152313112π

循环结构程序设计典型例题

循环结构程序设计典型例题 例1:有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1. 初值i=2,j=3,s=0; 2. 用n从1到30循环 3. s=s+ i/j; 4. c=i; i=j+1; j=c+j; 5.输出s; 程序: #include<> main( ) { int i=2,j=3,n,c; float s=0; for(n=1;n<=30;n++) { s=s+(float)i/j; c=i; i=j+1; j=c+j; } printf(“\n%f”,s); } 此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。 例2:下面这个程序,想想它实现的是什么功能? #include<> main( ) { int i,s=0; for(i=1;i<=100;i++) {if(i%5==0) continue; s=s+i; } printf(“\n%d”,s); } 在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。 例3:输出n~m中(0

第三节:循环结构程序设计题目

1. 用 +-+-≈7 1513114π公式求π的近似值,直到发现某一项的绝对值小于10-6 为止(该项不累计加)。 #include #include int main() { int sign=1; double pi=0,n=1,term=1; while(fabs(term)>=1e-6) { pi=pi+term; n=n+2; sign=-sign; term=sign/n; } pi=pi*4; printf("pi=%10.8f\n",pi); return 0; } 2. 输入一个大于3的整数n ,判定它是否素数(prime ,又称质数) #include int main() { int n,i; printf(“n=?"); scanf("%d",&n); for (i=2;i<=n-1;i++) if(n%i==0) break; if(i int main() { int n,i,k; printf(“n=?"); scanf("%d",&n); k=sqrt(n); for (i=2; i<=k; i++) if(n%i==0) break; if(i<=k) printf("%d is not\n",n); else printf("%d is\n",n); return 0; } 3. 求100~200间的全部素数, 并控制换行。 #include "math.h" main( ) { int m, i, k, c=0; printf("\n"); for(m=101; m<200; m=m+2)

循环结构程序设计课后习题及答案

循环结构程序设计习题及答案1、循环语句的三要素分别 是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用是。 5、当循环条件一开始就为假时,对于while语句、do…while语句、for 语句,分别执行循环体次、次、 次。 6、下面程序段的执行次数: int a=0; while(a=0) { printf("good\n"); a--; } 7、下面程序段的执行次数: int a=0; while(a==0)

{ printf("good\n"); a--; } 8、下面程序段的执行次数: int a=1; while(a=1) { printf("good\n"); a++; } 9、下面程序段的执行次数: int a=1; while(a==1) { printf("good\n"); a++; } 10、下列程序段的运行结果是。 for(i=5;i>=0;i--) printf(“%d “,i); 11、下列程序段的运行结果是。 for(n=1;n<20;n=n+3) printf(“%d “,n); 12、下列程序段的运行结果是。

for( ch='a' ;ch<='e' ;ch++) printf(“%d“,ch-97); 13、下列程序段的运行结果是。 for(i=1,j=5 ; i

循环结构程序设计:三种循环语句

一、循环结构(Iteration Structure)的概述 1.目的 为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。 2.类型 (1)当型循环结构 (2)直到型循环结构 二、循环语句 1.while语句 ①功能:实现当型循环结构。 ②形式 while(表达式){ 循环体 } ③特点:先判断后执行。 ④举例:(累加和问题)编程计算整数1~100的和。 int i ; //循环变量 int sum = 0 ; //累加和清0 i = 1 ; //循环变量i赋初值 while( i <= 100){ sum = sum + i ; //循环变量累加到sum中 i = i + 1; //改变循环变量i的值 } 2.do-while语句 ①功能:实现直到型循环结构。 ②形式 do{ 循环体

}while(表达式); //注意最后的分号 ③特点:先执行后判断。 ④举例:修改上例。 /*利用do-while语句编程实现整数1~100的和。*/ int i ; //循环变量 int sum = 0 ; //累加和清0 i = 1 ; //循环变量i赋初值 do{ sum = sum + i ; //循环变量累加到sum中 i = i + 1; //改变循环变量i的值 }while(i<=100);//注意最后的分号 3.for语句 ①功能:实现当型循环结构。 ②形式 for(表达式1;表达式2;表达式3){ 循环体 } ③特点:先判断后执行;使用频率最高。 ④举例:修改上例。 /*使用for语句编程计算整数1~100的和。*/ int i ; //循环变量 int sum = 0 ; //累加和清0 for( i = 1 ; i <=100 ; i++ ){//第一个表达式完成循环变量i赋初值;第三个表达式实现改变循环变量i的值 sum = sum + i ; //循环变量累加到sum中 } 4.几种循环语句的比较 ①由于while语句和for语句均实现当型循环结构,两者是完全等价的。 for(表达式1;表达式2;表达式3){

《结构力学习题集》-矩阵位移法习题及答案

第八章 矩阵位移法 – 老八校 一、判断题: 1、单元刚度矩阵反映了该单元杆端位移与杆端力之间的关系。 2、单元刚度矩阵均具有对称性和奇异性。 3、局部坐标系与整体坐标系之间的坐标变换矩阵T 是正交矩阵。 4、结构刚度矩阵反映了结构结点位移与荷载之间的关系。 5、结构刚度方程矩阵形式为:[]{}{}K P ?=,它是整个结构所应满足的变形条件。 6、图示结构用矩阵位移法计算时(计轴向变形)未知量数目为8个。 7、在直接刚度法的先处理法中,定位向量的物理意义是变形连续条件和位移边界条件。 8、等效结点荷载数值等于汇交于该结点所有固端力的代数和。 9、矩阵位移法中,等效结点荷载的“等效原则”是指与非结点荷载的结点位移相等。 10、矩阵位移法既能计算超静定结构,也能计算静定结构。 11、已知图示刚架各杆EI = 常数,当只考虑弯曲变形,且各杆单元类型相同时,采用先处理法进行结点位移编号,其正确编号是: (0,1,2) (0,0,0) (0,0,0) (0,1,3) (0,0,0)(1,2,0) (0,0,0)(0,0,3) (1,0,2) (0,0,0) (0,0,0)(1,0,3) (0,0,0) (0,1,2) (0,0,0)(0,3,4) A. B. C. D. 2134123412341234 ( )

二、计算题: 12、用先处理法计算图示结构刚度矩阵的元素133322,,K K K 。 12 3l l 4 l 5EI 2EI EA (0,0,0) (0,0,1) (0,2,3) (0,0,0) (0,2,4)(0,0,0) EI 13、用先处理法计算图示刚架结构刚度矩阵的元素153422,,K K K 。EI ,EA 均为常数。 l 14、计算图示结构整体刚度矩阵的元素665544,,K K K 。E 为常数。 l l 1 3 4 2 A , I A A /222A I , 2A 15、写出图示结构以子矩阵形式表达的结构原始刚度矩阵的子矩阵 [][]K K 22 24 ,。 [][]k k 1112 [][] k k 2122 [] k = i i i i i 单刚分块形式为 :

《结构力学习题集》-矩阵位移法习题及标准答案

第八章 矩阵位移法 一、判断题: 1、单元刚度矩阵反映了该单元杆端位移与杆端力之间的关系。 2、单元刚度矩阵均具有对称性和奇异性。 3、局部坐标系与整体坐标系之间的坐标变换矩阵T 是正交矩阵。 4、结构刚度矩阵反映了结构结点位移与荷载之间的关系。 5、结构刚度方程矩阵形式为:[]{}{}K P ?=,它是整个结构所应满足的变形条件。 6、图示结构用矩阵位移法计算时(计轴向变形)未知量数目为8个。 7、在直接刚度法的先处理法中,定位向量的物理意义是变形连续条件和位移边界条件。 8、等效结点荷载数值等于汇交于该结点所有固端力的代数和。 9、矩阵位移法中,等效结点荷载的“等效原则”是指与非结点荷载的结点位移相等。 10、矩阵位移法既能计算超静定结构,也能计算静定结构。 11、已知图示刚架各杆EI = 常数,当只考虑弯曲变形,且各杆单元类型相同时,采用先处理法进行结点位移编号,其正确编号是: (0,1,2) (0,0,0) (0,0,0) (0,1,3) (0,0,0)(1,2,0) (0,0,0)(0,0,3) (1,0,2) (0,0,0) (0,0,0)(1,0,3) (0,0,0) (0,1,2) (0,0,0)(0,3,4) A. B. C. D. 2134123412341234 ( )

二、计算题: 12、用先处理法计算图示结构刚度矩阵的元素133322,,K K K 。 12 3l l 4 l 5EI 2EI EA (0,0,0) (0,0,1) (0,2,3) (0,0,0) (0,2,4)(0,0,0) EI 13、用先处理法计算图示刚架结构刚度矩阵的元素153422,,K K K 。EI ,EA 均为常数。 l 14、计算图示结构整体刚度矩阵的元素665544,,K K K 。E 为常数。 l l 1 3 4 2 A , I A A /222A I , 2A 15、写出图示结构以子矩阵形式表达的结构原始刚度矩阵的子矩阵 [][]K K 22 24 ,。 [][]k k 1112 [][] k k 2122 [] k = i i i i i 单刚分块形式为 :

2.2.10循环结构程序设计 - 循环结构程序设计_教学案例

【教学案例一】 1. 实验目的 熟练使用for语句控制循环。 2. 实验任务 (1)实验内容:打印输出所有"水仙花数"。所谓"水仙花数"是指一个三位的正整数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=13+53+33。 (2)实验要求:没有输入,输出所有"水仙花数"。 程序输出以下4个"水仙花数": 153 370 371 407 3. 实验分析 (1)问题分析:用循环语句循环测试每一个三位数是否符合"水仙花数"的规则。即对所有100至999的数,把每个数分解出个位数,十位数和百位数,再判断是否符合条件。 (2)实现要点:用一次穷举循环就可以了。因为是固定次数的循环,一般采用for语句。对于每个当前的整数,用取余和整除运算分解出各位的数字。对于三位的正整数n,个位数g = n%10,十位数s = (n%100)/10,百位数b = n/100。 4. 参考代码 #include int main(void) { int n, g, s, b; for (n=100; n<=999; n++) { b = n / 100; s = n / 10 % 10; g = n % 10; if ( g*g*g + b*b*b + s*s*s==n) printf("%d ",n); } return 0; } 5. 思考题 什么情况下采用穷举循环是比较合适的? 【教学案例二】 1. 实验目的 (1)熟练使用while 语句和理解该语句的执行顺序,掌握累加和计算的算法。 (2)熟练运用断点调试。 2. 实验任务 74

(1)实验内容:根据下面关系式,求π的值,直到最后一项的值小于epsilon 。epsilon 的值由键盘输入。 12!3!!12335357357n p =++++???????…+…(2n+1) (2)实验要求:改正下面的错误程序,达到满足如下表的运行示例结果。测试用例: /* 1 */ #include /* 2 */ int main(void)/* 3 */ { /* 4 */double sum,item;/* 5 */double epsilon;/* 6 */int i; /* 7 */printf("Enter Epsilon:");/* 8 */scanf("%lf",&epsilon);/* 9 */item = 1; /* 10*/sum = 0; /*调试时设置断点*//* 11*/while (item >= epsilon)/* 12*/{/* 13*/sum += item;/* 14*/i++;/* 15*/item *= i;/* 16*/item /=(2*i-1);/* 17*/} /* 18*/printf("Pi=%.6lf\n",2*sum); /*调试时设置断点*//* 19*/return 0; /* 20*/ } 3. 实验分析 (1)程序分析:这是一个求累加和的问题。为解决这个问题,首先抽取出具有共性的算式:sum=sum + item ,其中sum 存放累加和,item 表示第i 项的内容。题目没有显式地给出循环次数,只是提出了精度要求。在反复计算累加的过程中,一旦第i 项的绝对值小于Epsilon ,就达到了给定的精度,计算终止,这说明精度要求实际上给出了循环的结束条件,

实验三 循环结构程序设计(教案)

实验教案 一、实验目的 (1) 掌握while、do~while、for语句的使用。 (2) 掌握循环体内使用break、continue语句的作用。 (3) 掌握循环及嵌套循环结构的程序设计方法。 二、实验准备 1.C语言实现循环的方法 ①goto 和if 构成的循环:由于goto是无条件转向,不符合结构化程序设计思想,所以不建议使用。 ②while循环:实现“当型”循环,首先判断循环条件,当条件为真,执行循环体,再判断循环条件……此种循环有可能一次也不执行循环体。 ③do~while循环:实现“直到型”循环,与while循环的区别是先执行循环体,再判断循环条件,当循环条件为真,再执行循环体……此种循环至少执行一次循环体。 ④for循环:与while循环类似,一般用于知道循环变量初值、终值及步长值的循环。 2.break 和continue 语句 ①break 语句:可用在循环体或switch语句中,作用是跳出其所在的控制结构。若是在循环体中,则是跳出其所在的循环,使得循环不止一个出口。 ②continue语句:只能用在循环体中,其作用是结束本层本次循环,注意不是退出循环。 3.阅读以下程序,并分析其功能,调试运行程序后再分析其运行结果。 ①掌握三种方法求1到100的累加和。 文件名为ex3-1-1.c,内容如下: # include main() { int sum=0,i=1; while(i<=100) sum+=i++; // 等价于:{ sum=sum+i; i++; } printf("sum is %d\n",sum); } 文件名为ex3-1-2.c,内容如下: # include main() { int sum=0,i=1; do sum+=i++; while(i<=100); printf("sum is %d\n",sum); } 文件名为ex3-1-3.c,内容如下: # include main()

汇编语言循环结构程序设计

实验五循环结构程序设计 一、实验目的 熟悉程序框架;理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。 二、示例 阅读下面程序框架,并加以注释 DATA_SEG SEGMENT AT 0E000H ARRAY_B LABEL BYTE ARRAY_W DW50 DUP (?) DATA_SEG ENDS ;以上为定义数据段 STACK_SEG SEGMENT PARA STACK ‘STACK’ DW100H DUP (?) TOS LABEL WORD STACK_SEG ENDS ;以上为定义堆栈段 CODE_SEG SEGMENT MAIN PROC FAR ASSUME CS: CODE_SEG, DS: DATA_SEG, SS: STACK_SEG ORG1000H START: MOV AX, STACK_SEG MOV SS, AX

;给SS赋值 MOV SP, OFFSET TOS ;给SP赋值 PUSH DS 临时保存DS的值 SUB AX, AX PUSH AX MOV AX, DATA_SEG MOV DS, AX ;给DS赋值 ┇ ;程序段 RET MAIN ENDP CODE_SEG ENDS ;以上定义代码段 END START 三、实验题 1 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 2试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。 四、实验报告

实验6 循环结构程序设计(2)

实验6 循环结构程序设计(2) 一、实验目的: 1、继续熟悉循环程序设计,掌握不确定次数循环判定条件的设置; 2、掌握多重循环的使用,能够熟悉应用穷举法、迭代法、判定素数、求最大公约定等典型算法; 3、熟悉break语句和continue语句在循环中的应用,并区分两者的不同。 二、实验内容 1、(基础题)编写程序,输出从公元2000年到3000年所有闰年的年份,每行输出10个年份。判定闰年的条件是: (1)年份能被4整除,但不能被100整除,则是闰年; (2)年份能被400整除也是闰年。 (提示:循环变量从2000变化到3000,然后去判断每一个年份是否为闰年,若是,则输出。由于每行只能输出10年份,还要定义一个整型变量用于计数) 程序运行效果图如下图所示: 2、在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。请根据题目要求完善代码。

思路:①循环次数不确定,但最多循环1000次:在循环体中累计捐款总数,用if语句检查是否达到10万元,如果达到就不再继续执行循环,终止累加;②计算人均捐款数。 #include ______________//定义符号常量SUM,值为100000 int main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",_____);//输入用户捐款数额,存入amount变量 ___________;//用户捐款数额累加进total变量中 if(total>=SUM) //判断捐款数额是否已够 _______; } //计算平均每人捐款的数目 if(i>1000) //循环正常结束 aver=total/(i-1); else //循环提前结束 ________; printf("num=%d\naver=%10.2f\n",i,aver); return 0; }

相关文档
最新文档