文档介绍:第四章循环结构程序设计(深入讨论与训练)
11/11/2017
1
上次课提出的问题
现实生活中,如果一件事情重复去做,你会有什么感受?
对于循环结构,fortran中提供了几种形式?
每种形式各适用于什么场合?
每种形式的注意事项是什么?
怎样选择循环的形式?
编写程序时应考虑哪些问题?
结构化程序设计巩固训练
判断循环次数训练
程序逻辑一致性训练
程序填空训练
程序改错训练
编程训练
11/11/2017
3
判断循环次数训练
循环语句
do x=,-,-
所确定的循环次数为
循环语句
do i=4,2,2
所确定的循环次数为
循环体执行的总次数为
do t=,,
do i=1,10
<循环体>
enddo
enddo
循环体执行的总次数为
do j=1,10
do i=j,10
<循环体>
enddo
enddo
循环体执行的总次数为
do j=1,5,2
do i=10,3
<循环体>
enddo
enddo
0
9
70
55
0
程序逻辑一致性训练
请在下面程序的空白添入合适内容,使与上述程序等价
read (*,*) n
s=
[  (10)  ]
k=1
10 s=s+d
[  (11)   ]
d=/(k*(k+1))
if ( )  goto 10
write (*,*) ‘s=’,s
end
d =
k=k+1
阅读程序
read (*,*) n
s=
do  k=1,n
s=s+/(k*(k+1))
enddo
write(*,*) ‘s=’,s
end
程序填空训练1
do while () 
      (1)    
      (2)    
      (3)    
enddo
gcd=l
lcm=    (4)    
write(*,*)’n1,n2=’,n1,n2
write(*,*)’gcd=’,gcd
write(*,*)’lcm=’,lcm
end
k=mod(m,l)
m=l
integer gcd,lcm
integer n1,n2,m
write(*,*)’n1,n2=’
read(*,*)n1,n2
if()  then
    m=n1
l=n2
else
m=n2
l=n1
endif
k=mod(m,l)
l=k
n1*n2/l
求两个数n1,n2的最大公约数gcd,和最小公倍数lcm
参照P2-3的算法
程序填空训练2
ave= (5)
write(*,*) ‘ave=‘,ave
write(*,*) ‘amax=‘,amax
write(*,*) ‘amin=‘,amin
end
x>=
0
n= (1)
sum= (2)
read*,,x
amax=x
amin=x
do while ( (3) )
n=n+1
sum=sum+x
if (x>amax) amax=x
if ( (4) ) amin=x
read *,x
enddo
x<amin
从键盘输入一个班的学生成绩,计算平均成绩,
班上的最高与最低成绩,以输入负数结束输入.
sum/n
程序改错训练
logical p
read(*,*) n
p=.true.
k=2
do while (k<=n/2)
if (n/k==0) then
write(*,*) k
p=.false.
endif
k=k+1
enddo
if (.) write(*,*) n
end
if (mod(n,k)==0) then
输入一个正数,若该数是素数,则输出素数,
否则,输出该数的所有因子.
注意:书上p143有错
(答案k==0?!)
一般改错题
有1—2处错误
编程训练1
请编写一程序,功能:判断整数x是否是同构数
所谓“同构数”是指这样的数,它出现在它的平方数的右边
例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数
x的值从健盘读入,要求不大于100。
要求:
画出此程序的流程图(形式不限)
用fortran语言,编写此程序
编程训练2
牛顿法解方程。课本P59(重要的实际应用)
要求:
画出此程序的流程图(形式不限)
用fortran语言,编写此程序