《C语言程序设计教程第5章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程第5章.ppt(38页珍藏版)》请在金锄头文库上搜索。
1、第五章 循环结构 5.1 while语句5.2 do-while语句5.3 for 语句5.4 break、continue和goto语句5.5 循环的嵌套5.6 复合结构程序举例C C语言程序设计教程语言程序设计教程1 1C语言程序设计教程 第5章 循环程序设计 C语言有while 、 do - while 、和for语句三种循环结构语句。 前两个称为条件循环,即根据条件来决定是否继续循环; 后一个称为计数循环,即根据设定的执行次数来执行循环。2 2C语言程序设计教程 第5章 循环程序设计5.1 while语句 while 语句是通过判断循环控制条件是否成立来决定是否继续循环的语句。一般形式
2、:while (表达式) 语句表达式为循环控制条件,当表达式的值为非零(满足循环条件),就执行语句, 当表达式的值为零,就退出循环。3 3C语言程序设计教程 第5章 循环程序设计while语句执行流程表达式语句真假表达式首先计算表达式语句如果表达式的值为非零,执行语句表达式重新计算表达式如果表达式的值为0,则跳出循环如果表达式的值一开始就为0,则语句一次也会被不执行。4 4C语言程序设计教程 第5章 循环程序设计while语句举例问题: 求n个学生的平均成绩算法: 1 输入 n ; i = 1 , average=0; 2 输入第 i 个学生的score; 3 average += score
3、; i +; 4 当 i= n 重复做2; 5 average /= n ;5 5C语言程序设计教程 第5章 循环程序设计#includevoid main( ) int n, score, i = 1 ; float average=0; printf (“ n Enter n:” ); scanf( “%d” ,&n); while (i = n ) printf (“ n Enter score:” ); scanf( “%d” ,&score); average += score; i +; average /= n ; printf (“ n average= %f”, averag
4、e); 6 6C语言程序设计教程 第5章 循环程序设计5.25.2 dowhile语句 dowhile 语句的一般形式是:do 语句 while (表达式) 特点:特点: 首先执行语句,再通过判断循环控制条件是否满足来决定是否继续循环。7 7C语言程序设计教程 第5章 循环程序设计dowhile语句执行流程首先执行语句,再计算表达式。如果表达式的值为非零,继续下一次循环如果表达式的值为0,则跳出循环如果表达式的值一开始就为如果表达式的值一开始就为0 0,也会执行一次语句。,也会执行一次语句。语句表达式8 8C语言程序设计教程 第5章 循环程序设计#includevoid main( ) int
5、 n, score, i = 0; float average=0;do printf (“ n Enter score:” ); scanf( “%d” ,&score); average += score; i +; while (score = 0 ); average /= -i ; printf (“ n average= %f”, average); 9 9C语言程序设计教程 第5章 循环程序设计注意:循环控制变量值在循环体内必须有所改变。 例如:i=1;while (i=100) putchar(*);i+; 这个循环永远不会结束这个循环永远不会结束, ,因为循环控制变量因为循环
6、控制变量i i没有没有在循环体内被改变,在循环体内被改变,i+; i+; 不属于循环语句。不属于循环语句。i+i+应该在循环体内改变应该在循环体内改变: :i i= =1 1; ;while (i=while (i=100100) ) putcharputchar(*);(*); i i+;+; 1010C语言程序设计教程 第5章 循环程序设计 5.3 for循环语句 for(表达式1;表达式2;表达式3) 循环体语句这是这是C语言最有特点的循环语句。使用最为灵活方便语言最有特点的循环语句。使用最为灵活方便 一般形式:一般形式:1111C语言程序设计教程 第5章 循环程序设计先计算表达式先计算
7、表达式1,用于循环开始前,用于循环开始前设置变量初值。设置变量初值。接着计算循环控制逻辑表达式接着计算循环控制逻辑表达式2,控制循环条件,决定循环次数。控制循环条件,决定循环次数。执行循环体语句,这个语句也可执行循环体语句,这个语句也可以是其它循环。以是其它循环。表达式表达式3:循环控制变量,修改表:循环控制变量,修改表达式。达式。表达式1表达式2循环体表达式3执行流程执行流程1212C语言程序设计教程 第5章 循环程序设计例例: 求求 1+2 +99#include”stdio.h”main()int i,s=0; / *s清清0 */ for(i=1;i100;i+) s=s+i; pri
8、ntf(“s=%d”,s);i=0i100s=s+ii+1313C语言程序设计教程 第5章 循环程序设计循环语句的多种表示for( i=0; i100; i+ ) s=s+i;main()int i=1,s=0; do s=s+i; while (+i100) printf(“s=%d”,s);i=0i100s=s+ii+main()int i,s=0; i=1; while(i100) s=s+i; i+; printf(“s=%d”,s); 1414C语言程序设计教程 第5章 循环程序设计for语句的表达式可以省略如已先给变量赋过值。则可以省略表达式1。for(;i100;i+)如果想在循
9、环内部改变变量的值,则可以省略表达式3。for(i=0;i100;)如果都省略的话就相当于while。for(;i100;) while(i100)全部省略就是死循环。for(;) (需要用break跳出)1515C语言程序设计教程 第5章 循环程序设计逗号表达式 逗号运算符的主要应用就在for语句中。 for语句中的表达式1和表达式3可以是逗号表达式,特别是有两个循环变量参与对循环的控制时。表达式1和表达式3为逗号表达式,将使程序显得非常清晰。 例: for( i=1, j=10 ;i=j; i+, j-)1616C语言程序设计教程 第5章 循环程序设计for(i=a,j=b; i=j; i
10、+,j-) 举例main()int I,j; for( i=1, j=10 ;i100) break; /* 如果 i100,则退出循环*/ printf(“s=%d”,s);本程序中,当i100时,强行终止for循环,继续执行for语句下一条语句2121C语言程序设计教程 第5章 循环程序设计非结构化语句之continuecontinue语句被称为继续语句。执行continue语句,使本次循环提前结束,即跳过循环体中continue语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。该语句形式为:continue;2222C语言程序
11、设计教程 第5章 循环程序设计例例5.4 5.4 显示输入的字符显示输入的字符, , 如果按的如果按的是是EscEsc键键, , 则退出循环;则退出循环; 如果按的是如果按的是EnterEnter键键, , 则不做任何处理,继续输入下一个字符。则不做任何处理,继续输入下一个字符。#include “#include “conio.hconio.h” ” main( )main( )char char chch; for (for (; ;) ) chch= =getchgetch() (); /* /*字符输入函数字符输入函数 * */ / if ( if (chch=27) /* Esc=2
12、7) /* Esc键的键的ACSIIACSII码为码为27*/27*/ breakbreak; /* /*退出循环退出循环* */ / if ( if (chch=13)=13) continuecontinue; /* /*按的是按的是Enter:Enter:键,跳过字符输出语句键,跳过字符输出语句* */ / putch(chputch(ch) ); /* /*显示输入的字符显示输入的字符* */ / getchgetch( )( ); /* /*让程序停一下,拍任意键继续让程序停一下,拍任意键继续* */ / getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不
13、等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码,出错返回-1。2323C语言程序设计教程 第5章 循环程序设计非结构化语句之gotogoto被称为无条件转移语句被称为无条件转移语句。由两部分组成由两部分组成goto 标号标号; 和和 标号标号: 语句语句它最大的好处就是可以一下子跳出多重循环,而break却不能做到这点。2424C语言程序设计教程 第5章 循环程序设计#include “#include “stdio.hstdio.h” ”main( )main( ) float score , average=0 float score ,
14、average=0; intint n=0 n=0; scanf(“%fscanf(“%f”, &score)”, &score); /* /* 输入第一个学生的分数输入第一个学生的分数 * */ /if if (score0score=0) /* if (score=0) /* 表达式为非表达式为非0, 0, 转移到转移到looploop标号处标号处 * */ / gotogoto loop loop; average = average /n average = average /n ; /* /*求平均成绩求平均成绩average */average */endend:printf(“%
15、6.2f”, average)printf(“%6.2f”, average); /* /*输出平均成绩输出平均成绩, ,保留两位小数保留两位小数 * */ / 2525C语言程序设计教程 第5章 循环程序设计 5.5 循环的嵌套 在循环体语句中又有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。While 、do-while、for三种循环都可以互相嵌套。 循环嵌套的程序中,要求内循环必须完全包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。2626C语言程序设计教程 第5章
16、 循环程序设计00 01 02 03 04 0510 11 12 13 14 1520 21 22 23 24 2530 31 32 33 34 3540 41 42 43 44 4550 51 52 53 54 55输出结果:执行语句段:执行语句段:for(i=0;i6;i+) for(j=0;j6;j+) printf(“%3d %3d”,i,j); putchar(n);2727C语言程序设计教程 第5章 循环程序设计循环嵌套举例问题:输出图形 * * * * * *2828C语言程序设计教程 第5章 循环程序设计分析: 一共6行, 每行的 *数目与行号相同算法: 行用 i 表示 , 当
17、 i 7 do 输出 i 个 * 换行 int i,j; for ( i=1; i7; i+) printf(n); for (j=1; j=i; j+ ) putchar(*); 2929C语言程序设计教程 第5章 循环程序设计循环嵌套举例问题:输出图形 * * * 3030C语言程序设计教程 第5章 循环程序设计循环嵌套分析分析: : 一共一共4 4行,行, 第第i i行输出的空格数为行输出的空格数为: (7-i+1)/2: (7-i+1)/2 第第i i行输出行输出 i* i*个个*, 算法算法: : 当当 i = 7 doi = 7 do 输出输出 (7-i+1)/2(7-i+1)/2
18、个空格个空格 ; ; 输出输出i i 个个 * * 换行换行 ; i+=2 ; i+=2 ; 3131C语言程序设计教程 第5章 循环程序设计main() int i,j; for ( i=1; i=7; i+=2) printf(“n”); for (j=1;j=(7-i+1)/2 ; j+) putchar( ); /*输出 (7-i+1)/2个空格*/ for (j=1;j=i;j+ ) putchar(*); /* 输出i 个 * */ getch(); 3232C语言程序设计教程 第5章 循环程序设计复合程序结构 C语言允许循环语句与分支结构语句联用,即在循环体包含一个完整的分支结构
19、,这样的程序结构被称为复合程序结构。复合程序结构同样必须做到嵌套层次清楚,决不允许出现嵌套层次之间相互交叉的情况。3333C语言程序设计教程 第5章 循环程序设计 例:给多个学生的成绩评级例:给多个学生的成绩评级。 #include #include main() int i, score; scanf(%d ,&score); while (score=0) switch (score /10) case 10: case 9: printf(%d: An, score);break; case 8: case 7: printf(%d: Bn, score);break; case 6:
20、printf(%d: Cn, score);break; default: printf(%d: Dn, score); scanf(“%d”,& score); /*输入下一个学生的成绩输入下一个学生的成绩*/ while 结构中嵌套了一个多分支选择结构。结构中嵌套了一个多分支选择结构。3434C语言程序设计教程 第5章 循环程序设计5.6 复合程序结构举例例例1目标:找出3至1000内的全部的质数。算法:从i= 1 开始做分别用2,3,4,i-1 除i(用2,3,sqrt(i)除i)。如果i被某个数整除 , i不是素数。i+; 测试下一个i;3535C语言程序设计教程 第5章 循环程序设计
21、#include main( ) int i, j ,count,flag; /* 用flag作标志 */ count=0; for(i=3; i=1000; i+) flag = 0; /* 设标志为0 */ for(j=2; j1e-6)1e-6) pi= pi=pi+tpi+t; ; v+=2; v+=2; f=-f; f=-f; t= t=f/vf/v; ; pi*=4; pi*=4; printf(nprintf(n pi=%10.8f,pi); pi=%10.8f,pi); 3737C语言程序设计教程 第5章 循环程序设计例例3 3:电文加密。已知电文加密规律为:将字母变:电文加密。已知电文加密规律为:将字母变成其后面的第四个字母,其他字符保持不变。成其后面的第四个字母,其他字符保持不变。# #includestdio.hincludestdio.h main()main()char char chch; ; while(chwhile(ch= =getchargetchar()!=n)()!=n) if(chif(ch=a&cha&ch=A&chA&ch=Z)Z&chZ&chz)z) chch-=26;-=26; printf(%c,chprintf(%c,ch); ); 3838