C语言程序设计教程 第5章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使本次循环提前结束,即跳过循环体中continrue
语句下面的尚未执行的循环体语句,但不结束整
个循环,继续进行下一次循环的条件判别,条件
为真,继续进行执行循环语句。该语句形式为: continue;
例5.4 显示输入的字符, 如果按的是Esc键, 则退出循环; 如果按的是Enter键, 则不做任何处理,继续输入下一个 字符。
8
注意:循环控制变量值在循环体内 必须有所改变。
例如: i=1; while (i<=100) putchar(„*‟); i++;
这个循环永远不会结束, 因为循环控制变量i没有 在循环体内被改变,i++; 不属于循环语句。
i++应该在循环体内改变:
i=1; while (i<=100) { putchar(‘*’); i++; }
}
26
循环嵌套举例
问题:输出图形 * *** ***** *******
27
循环嵌套
分析: 一共4行, 第i行输出的空格数为: (7-i+1)/2 第i行输出 i*2-1个‘*’, 算法: 当 i <= 7 do { 输出 (7-i+1)/2个空格 ; 输出i 个 ‘*’ 换行 ; i+=2 ; }
17
非结构化语句之break
它的作用是把流程转向所在结构之后。 在switch main( ) 分支结构中,使用break语句可以使流程跳出 { switch分支结构。 同样的,在循环结构中,使用 int s=0,i=1: break语句使流程跳出当前的循环层,转向执行该循 for (; ;) { s = s+i; i++; 环结构后面的语句。
31
5.6 复合程序结构举例
• 例1 • 目标:输入一个年号,判断是否为闰年。 • 算法:能被4整除且不是100的倍数,或 者能被400整除。
32
#include <stdio.h> void main ( ) {int year ,leap; printf (“Enter year:”); scanf(“%d ”,&year); if ( year%400 = = 0) leap =1; /*是闰年leap 置成1*/ else { if (year % 4 = = 0 && year % 100 != 0 ) leap=1; else leap=0; /*不是闰年leap 置成0*/ } if (leap = =1) printf (“%d: is a leap year.”, year); else printf (“%d is not a leap year”, year); }
28
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(); }
15
for(i=a,j=b; i<=j; i++,j--)
问题: 求 1/100+2/99+…+1 float s=0.0; for(i=1,j=100; i<=j; i++,j--) s = s + i/j;
举例
16
5.4 break、continue、goto语句
• 这一类语句的功能是改变程序的结构,使 程序从其所在的位置转向另一处。 • 这类语句是非结构化语句
4
while语句举例
问题: 求n个学生的平均成绩 算法: 1 输入 n ; i = 1 , average=0; 2 输入第 i 个学生的score; 3 average += score; i ++; 4 当 i<= n 重复做2; 5 average /= n ;
5
main( )
{ int n, score, i = 1 ; float average=0;
输出结果:
00 01 02 03 04 05 10 11 12 13 14 15 20 21 22 23 24 25 30 31 32 33 34 35 40 41 42 43 44 45 50 51 52 53 54 55
24
循环嵌套举例
问题:输出图形 * ** *** **** ***** ******
for(;;) (需要用break跳出)
14
逗号表达式
逗号运算符的主要应用就在for语句中。 for语句中的表达 式1和表达式3可以是逗号表达式,特别是有两个循环变量参
与对循环的控制时。表达式1和表达式3为逗号表达式,将使
程序显得非常清晰。
例: for( i=1, j=10 ;i<=j; i++, j--)
3
5.1 while语句
while 语句是通过判断循环控制条件是否满足 来决定是否继续循环的语句。
一般形式: while (表达式) 语句 表达式为循环控制条件,当表达式的值为非零(满 足循环条件),就执行语句, 当表达式的值为零,就 退出循环。
如果表达式的值一开始就为0, 则语句一次也会被不执行。
第五章 循环结构
1
5.1 while语句 5.2 do-while语句 5.3 for 语句 5.4 break、continue和goto语句 5.5 循环的嵌套 5.6 复合结构程序举例
C语言程序设计教程
2
C语言有while 、 do - while 、和for语 句三种循环结构语句。 前两个称为条件循环,即根据条件来决 定是否继续循环; 后一个称为计数循环,即根据设定的执 行次数来执行循环。
6
5.2 do—while语句
do—while 语句的一般形式是: do{ 语句 }while (表达式) 特点:
首先执行语句,再通过判断循环控制条件是否满足 来决定是否继续循环。
如果表达式的值一开始就为0,也会执行一次语句。
7
main( ) { int 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); }
19
20
非结构化语句之goto
goto被称为无条件转移语句。由两部分组成
goto 标号; 和 标号: 语句
它最大的好处就是可以一下子跳出多重循环, 而break却不能做到这点。
• • • • • • • • • • • • • •
#include “stdio.h” main( ) { float score , average=0; int n=0; scanf(“%f”, &score); /* 输入第一个学生的分数 */ if (score<0) goto end; /* 表达式为非0, 转移到end标号处 */ loop:average += score; n++; scanf(“%f”, &score); if (score>=0) /* 表达式为非0, 转移到loop标号处 */ goto loop; average = average /n ; /*求平均成绩average */ end:printf(“%6.2f”, average); /*输出平均成绩,保留两位小 数 */ • }
循环控制变量,修改表达式。
11
例: 求 1+2 +…+99
#include(stdio.h) main() {int i,s=0; / *s清0 */ for(i=1;i<100;i++) s=s+i; printf(“s=%d”,i;)
}
12
循环语句的多种表示
for( i=0; i<100; i++ ) s=s+i;
21
22源自文库
5.5 循环的嵌套
在循环体语句中又有另一个完整的循环结构的形
式,称为循环的嵌套。嵌套在循环体内的循环称语 句称为内循环,外面的循环语句称为外循环。如果 内循环体中又有嵌套的循环语句,称为多层循环。 While 、do-while、for三种循环都可以互相嵌套。
23
执行语句段: for(i=0;i<6;i++) { for(j=0;j<6;j++) printf(“%3d %3d”,i,j); putchar(„\n‟); }
13
for语句的表达式可以省略
如已先给变量赋过值。 则可以省略表达式1。 如果想在循环内部 改变变量的值,则 可以省略表达式3。 如果都省略的话就 相当于while。 for(;i<100;i++) for(i=0;i<100;) for(;i<100;) while(i<100)
全部省略就是死循环。
#include “conio.h” main( ) {char ch; for (; ;) {ch=getch(); /*字符输入函数 */ if (ch==27) /* Esc键的ACSII码为27*/ break; /*退出循环*/ if (ch==13) continue; /*按的是Enter:键,跳过字符输出语句*/ putch(ch); /*显示输入的字符*/ } getch( ); /*让程序停一下,拍任意键继续*/ }
9
5.3 for循环语句
这是C语言最有特点的循环语句。使用最为灵活 方便 一般形式: for(表达式1;表达式2;表达式3) 循环体语句
10
执行流程
先计算初值表达式,用于循环开 始前设置变量初值。 接着计算循环控制逻辑表达式, 控制循环条件,决定循环次数。 执行循环体语句,这个语句也可 以是其它循环。
if (i>100) break; /* 如果 i>100,则退出循环*/
} printf(“s=%d”,s); } 本程序中,当i>100时,强行终止for循环,继续执行for语 句下一条语句 简单的说就是跳出当前所在的结构
18
非结构化语句之continue
continue语句被称为继续语句。执行continue语句,
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”, average); }
25
分析: 一共6行, 每行的 ‘*’数目与行号相同 算法: 行用 i 表示 , int i,j; 当 i <= 6 do for ( i=1; i<7; i++) { 输出 i 个 ‘*’ { printf("\n"); 换行 for (j=1; j<=i; j++ ) } putchar('*');
main() {int i=1,s=0; do s=s+i; while (++i<100)
printf(“s=%d”,i); }
main() i=0 {int i,s=0; i=0; i<100 while(i<100) s=s+i {s=s+i; i++; i++ } printf(“s=%d”,i); }
29
复合程序结构
C语言允许循环语句与分支结构语句联用, 即在循环体包含一个完整的分支结构,这样的程 序结构被称为复合程序结构。复合程序结构同样
必须做到嵌套层次清楚,决不允许出现嵌套层次
之间相互交叉的情况。
30
例:给多个学生的成绩评级。
#include <stdio.h> #include <conio.h> main() { int i, score; scanf("%d" ,&score); while (score>=0) {switch (score /10) {case 10: case 9: printf("%d: A\n", score);break; case 8: case 7: printf("%d: B\n", score);break; case 6: printf("%d: C\n", score);break; default: printf("%d: D\n", score); } scanf(“%d”,& score); /*输入下一个学生的成绩*/ } } while 结构中嵌套了一个多分支选择结构。
相关文档
最新文档