计算机设计语言(c语言)4

上传人:今*** 文档编号:111826232 上传时间:2019-11-03 格式:PPT 页数:39 大小:343.50KB
返回 下载 相关 举报
计算机设计语言(c语言)4_第1页
第1页 / 共39页
计算机设计语言(c语言)4_第2页
第2页 / 共39页
计算机设计语言(c语言)4_第3页
第3页 / 共39页
计算机设计语言(c语言)4_第4页
第4页 / 共39页
计算机设计语言(c语言)4_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《计算机设计语言(c语言)4》由会员分享,可在线阅读,更多相关《计算机设计语言(c语言)4(39页珍藏版)》请在金锄头文库上搜索。

1、4 循环结构程序设计,循环结构是结构化程序设计的基本结构之一。,4.1 蜡烛燃烧之谜,一、提出问题 蜡烛燃烧之谜。苏联著名数学家R.H.别莱利曼在他的书中记录了一道题目:蜡烛燃烧之谜。题目是这样的: 房间里电灯突然熄灭:保险丝烧断了!我点燃了书桌上备用的两支蜡烛,在烛光下继续工作,直到电灯修好。 第二天,需要确定昨晚断电共有多长时间。我当时没有注意昨晚断电的时间,也没有注意什么时间来的电。我也不知道蜡烛的原始长度。我只记得两支蜡烛是一样长的,但粗细不同,其中粗的一支能用5小时(完全用完),细的一支能用4小时。两支蜡烛都是经我点燃的新烛。我没有找到蜡烛的剩余部分,家里人把它扔掉了。 “残烛几乎都

2、烧光了,不值得保留”。家里人这样回答。 “你还记得残余部分有多长吗?” “两支残烛不一样。一支残烛的长度等于另一支的4倍。” 我无法知道得更多了,只好根据以上资料,推算出停电的时间。,例如: x=y=1 ; while (y10) +y ; x+=y ; printf(“x=%d, y=%dn“, x, y);,4.1.2 while 语句,while 语句 用来实现“ 当型循环” 结构。 一般形式: while (表达式) 语句,“语句” 部分就是循环体, while循环 先判断表达式的值,后执行语句。 当“表达式”为 非0 值时执行该语句,直到“表达式”为 0 时跳出循环。,注意: 如果语

3、句部分包含一个以上的语句,应该用复合语句 “ ” 的形式。 在循环体中应有使循环趋于结束的语句。,x=11, y=10,x=55, y=10,例 2 用 while 语句构成循环,求 1+2+3+.+100。,main() int i , sum=0; i=1; while (i=100) sum=sum+i; i+; printf(“%dn“sum); ,循环体中有两个语句,要用 括起来。 其中 i+ 是改变条件表达式值的语句。,4-2 从键盘输入一系列数,求其和,直至连续两次输入的数等于0为止。,#include void main() int n = 3; float x, y, s =

4、 0; printf( “请输入第1个数:“); scanf(“%f“, ,蜡烛燃烧之谜程序解析,#include void main() float x=0, a, b; a=1-x / 5; b=4*( 1-x / 4 ); while (a b) x = x + 0.0001; a = 1-x / 5; b = 4 * ( 1- x / 4 ); printf( “停电时间:%f小时。“, x ); ,4.2 口令程序,1. 提出问题 口令程序。用户进入某系统,有3次键盘回答口令的机会。3次中任何一次回答正确均可进入系统(显示“You are welcome!”),否则不能进入系统(显示

5、“Sorry!”)。 (本例设口令是6位自然数123456) 2 运行结果 Please input password:12345 Please input password:12346 Please input password:12347 Sorry! 或者: Please input password:123456 You are welcome!,4.2 do-while 语句,do-while 语句用来实现 “直到型” 循环结构。 一般形式: do 循环体语句 while (表达式) ;,执行过程:先执行一次指定的 “循环体语句”,然后判别 “表达式”,当 “表达式”的值为 非0 时

6、,返回重新执行 “循环体语句”,如此反复,直到表达式的值等于0为止,此时循环结束。 即do-while 语句至少执行一次循环体。 注意: 当“语句”部分包含一个以上的语句时,应该用复合语句“ “的形式; 在循环体中应有使循环趋于结束的语句。,例3 用 do-while 语句构成循环,求 1+2+3+.+100,main() int i, sum=0; i=1; do sum=sum+i; i+; while(i=100) ; printf(“%dn“, sum) ; ,do-while 语句的while 语句后要加分号 “ ;”。 while 语句可能一次也不执行循环体, 但do-while

7、语句至少执行一次循环体。 对于同一个问题, 既可以用 while 语句 , 也可以用 do-while 语句处理。 do-while 结构可以转换成while 结构, 即do-while 结构由一个语句和一个while 结构构成。,说明:,在一般情况下,用while语句和用do-while处理同一问题时,若二者的循环体部分是一样的, 它们的结果也一样。 但是如果while 后面的表达式一 开始就为假(0),两种循环的结果是不同的。 亦即当while 后面的表达式第一次的值为真(非0)时,两种循环得到的结果相同。否则结果不同。,例6.4 while和do-while循环的比较。,(2) main

8、( ) int sun=0, i; scanf(“%d“, ,(1) main( ) int sum=0, i ; scanf(“%d”, ,运行情况如下: 1 ,再运行一次: 12 ,(1) sum=0 (2) sum=12,sum=55,例 42 口令程序。用户进入某系统,有3次键盘回答口令的机会。3次中任何一次回答正确均可进入系统(显示“You are welcome!”),否则不能进入系统(显示“Sorry!”)。 (本例设口令是6位自然数123456) 1. 分析 本例中输入密码和判断密码操作至少要执行一次,适于用“do-while”实现。循环控制条件最好选择用户回答口令的次数。,2

9、. 源代码 #include void main() long password; int i=0,flag=0; do printf(“nPlease input password: “); scanf(“%ld“, /* 一定是三次都答错 */ ,一般形式: for ( 表达式1; 表达式2; 表达式3 ) 语句,执行过程: 1. 求解表达式1; 2. 求解表达式2: 如果值为真(非0), 则执行“语句”部分;如果值为假( 0 ),则结束循环; 3. 当表达式2为真时, 在执行了“语句”部分后, 求解表达式3; 4. 转到第2步继续执行。 说明:当“语句”部分包含一个以上的语句时,应该用复

10、合语句 “ ” 的形式。,4.3 for 语句,for 语句既可用于循环次数已经确定的情况,也可用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。,for 语句最常用的形式: for ( 循环变量赋初值 ; 循环结束条件 ; 循环变量增值 ) 语句,main() int i, sum=0; for (i=1;i=100;i+) sum=sum+i ; printf(“%d“,sum) ; ,例如:用 for 语句构成循环, 求1+2+3+.+100。,for 循环语句也可以写为while 语句形式:,如果 “表达式2” 省略,即不判断循环条件,则认为 表达式 2 始终

11、为真,此时循环无法终止(死循环)。 for( i=1 ; ; i+) sum+=i ;,如果 “表达式3” 省略,则程序中必须有保证循环能正常结束的措施。,说明: 若循环变量在 for 语句之前已经赋初值,则for 语句的一般形式中的“表达式1”可以省略,但是“;” 不能省略。 例如: i=1 ; for( ; i=100 ; i+) sum+=i ;,for( i=1 ; i=100 ; ) sum+=i ; i+ ; ,三个表达式都省略,如 for( ; ; ) 语句 相当于 while(1) 语句 即不设初值,不判断条件(认为表达式2为真),循环变量不增值,无终止地执行循环体 (死循环)

12、 。,可以省略表达式1 和 表达式3,只有表达式2,即只给循环条件。 for( ; i=100 ; ) while (i=100) sum=sum+i ; 相当于 sum=sum+i; i+ i+ ,在这种情况下,for语句完全等同于while语句。 可见,for 语句比while 语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。,“表达式1” 既可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其它表达式。如 i=1 ; for(sum=0 ; i=100 ; i+) sum=sum+i ;,“表达式1” 和 “表达式3” 可以是一个简单的表达式,也可以是逗

13、号表达式。 例如: for (sum=0, i=1 ; i=100 ; i+) sum=sum+i; for (i=1 , j=100 ; i=j ; i+, j- -) k+=i+j;,在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如 for (sum=0, i=1 ; i=100 ; i+,i+) sum=sum+i; 相当于 for (sum=0, i=1 ; i=100 ; i+=2) sum=sum+i;,“表达式2”一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式, 只要其值非0,就执行循环体。 分析: for( i=0; (c=get

14、char( ) )!=n; i+=c ) ; 及 for( ; (c=getchar( ) )!=n ; ) putchar(c) ;,由于 for 语句功能很强,尽量按 for 语句的规范来写,也尽量不要把与循环控制无关的内容放到 for 语句中。,例. 分别用while、do-while、for 语句构成的循环求n!。,循环的嵌套,三种循环( while 循环、do-while 循环和 for 循环)可以互相嵌套。 (1) while( ) do for( ; ;) : : while( ) do for( ; ;) : : : : : while( ) ; while( ) ; (2) while( ) do( ) for( ; ;) : : : do for(;) while( ) while( ); . : while( ) ; : ,一个循环体内又包含另一个完整的循环结构时,称为循环的嵌套。内嵌的循环中还可以嵌套循环,即循环嵌套可以多于一层,这就是多层循环嵌套。,几种循环的比较,共有四种循环结构( if 与 goto 、 while、do-while 、for ) 四种循

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号