第6章循环结构程序设计.ppt
《第6章循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第6章循环结构程序设计.ppt(35页珍藏版)》请在三一文库上搜索。
1、第6章 循环结构程序设计,循环结构可以完成重复性、规律性的操作.在人们所需处理的运算任务中,常常需要用到循环,例如:1100的累加和等。在语言中有三种循环语句:while、dowhile、for。用goto语句和if语句也能构成循环。 6.1 goto语句 goto语句 为无条件转向语句。 格式:goto ; 功能:程序执行到goto语句时,转到语句标号指定的语句去执行。,说明: (1)语句标号必须用标识符表示,不能整数作为标号。 (2)与if语句一起构成循环结构。 例题6.1 求s=1+2+3+100 main() int i=1,s=0; loop: if(i=100) /* loop是一
2、个语句标号*/ s=s+i; i+; goto loop; printf(“s=%dn”,s); ,6.2 for语句,注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。 6.2 for语句 1for语句的一般格式 for(变量赋初值;循环继续条件;循环变量增值) 循环体语句组;,2for语句的执行过程,(1)求解“变量赋初值”表达式。 (2)求解“循环继续条件”表达式。如果其值非0,执(3) ;否则,转至(5)。 (3)执行循环体语句组, (4)求解“循环变量增值”表达式,然后转向(2)。 (5)执行for语句的下一条语句。 例如:f
3、or (n=1;n=20;n+) s=s+n;,for语句执行过程图,3说明,(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。 i=1; for(;i=100;i+) s=s+i; for中缺省变量赋初值,但是在for前面要有i=1; for(i=1; ;i+) s=s+i; for中缺省“循环继续条件”,相当于条件永远为真,无限循环。 for( ; ; ) 语句; 全部缺省即不设初值,不判断条件,循环变量不增值。无终止地执行循环体。,3说明,(2)当循环体语句组仅由一条语句构成时,可以不使用 号括,但是当循环体语句组由多条语句构成时必
4、须用 号括起来。 (3)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。 例如: for(sum=0,i=1;i=100;i+) sum += i; (4)“循环继续条件”部分是一个逻辑量,除一般的关系表达式(如 n=20)或逻辑表达式(ab&xy)外,也允许是数值(或字符)表达式,只要其值为非0(真),就执行循环体。,3说明,例如:for(n=0; (c=getchar()!=n; n+=c); 在循环继续条件中先从键盘接收一个字符给c,然后判断值是否不等于n(换行符),如果不等于,就执行循环体,此语句最后有“;”说明循环体为空语
5、句,所以执行n+=c即把字符的ASCII码累加存入n变量。 此语句的作用是:不断输入字符,将它们的码相加,直到输入一个“换行”符为止,例题,例题6.2 求1100的累计和。 /*程序功能:求1100的累计和*/ main() int i,sum=0; /*将累加器sum初始化为0*/ for(i=1; i=100; i+) sum += i; /*实现累加*/ printf(“sum=%dn“,sum); ,程序运行情况如下: sum=5050,例题,例题6.3 求t=1*2*3*4*5*n main() int n, i; double t=1.0; /*所求累乘值很大,所以用double型
6、且初始化为1 */ printf(“input n:”); scanf(“%d”, /*用指数形式输出双精度类型的t变量的值*/ ,运行结果: input n: 5 t=1.200000e+02 此程序t 放的是n!,当n较大时阶乘数会很大,所以定义为double型。,例题,例6.4 求s=1+1/2+1/3+1/n main() int i,n; float s=1; printf(“input n:”); scanf(“%d”, ,此程序注意求1/2、1/3时,如果两个操作数都是int型,完成的是整除得0,则最后s的是1,这是错误的。应使除数和被除数其中有一个为实型才可以,如:s=s+1.
7、0/i;或i定义为float,则 s=s+1/i。,运行结果: input n:4 s=2.083333,6.3 while语句,(1)一般格式 while(循环继续条件) 循环体语句组; (2)执行过程,例题,例题6.5用while语句求1100的累计和。 main() int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i=100 ) sum += i; /*实现累加*/ i+; /*循环控制变量i增1*/ printf(“sum=%dn”,sum); ,此程序while 语句的循环体有两个语句sum += i; i+;所以要用 号括起来以复合语句形式出
8、现。,程序运行情况如下: sum=5050,6.4 do while 语句,1一般格式 do 循环体语句组; while(循环继续条件); /*本行的分号不能缺省*/,例题,例题6.6 用do-while语句求解1100的累计和。 main() int i=1, sum=0; /*定义并初始化循环控制变量i,以及累计器sum*/ do sum += i; /*累加*/ i+; while(i=100);/*循环继续条件:i=100*/ printf(“sum=%dn”,sum); ,程序运行情况如下: sum=5050,例题,例题6.7统计从键盘上输入整数的个数(输入0时结束,0不计在内) m
9、ain( ) int n,x=0; do scanf(“%d”, ,运行结果及分析,运行情况: 2 4 6 34 0 x=4 此程序用do while语句一开始不做判断进入循环,用scanf()输入整数,输入一个整数,x加一次1,然后判断是否输入的是表示结束的0,一直重复直到输入0停止循环。由于do while语句是后判断循环继续条件,最后输入的0也计算在个数内,所以输出时,要输出x-1的值。,例题,例题 6.8 while和 dowhile循环的比较 (1) (2) main() main() int s=0,i; int s=0,i; scanf (“%d”, 运行情况: 运行情况: 1
10、1 s=55 s=55 再运行一次 再运行一次 11 11 s=0 s=11,例6.8解析,可以看到:当输入i的值小于或等于10时,二者得到结果相同。而当i10时,二者结果就不同了。这是因为此时对while 循环来说,一次也不执行循环体,而对dowhile循环语句来说则要执行一次循环体。while 循环是前判断,而dowhile循环是后判断。,6.5 循环的嵌套,3种循环(while、dowhile、for) 可以互相嵌套。 (1) while( ) (2)while( ) do while( ) while( ); (3) do (4) for( ; ; ) do while( ) whil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 结构 程序设计
链接地址:https://www.31doc.com/p-2578166.html