C语言程序设计教程第5章.ppt_第1页
C语言程序设计教程第5章.ppt_第2页
C语言程序设计教程第5章.ppt_第3页
C语言程序设计教程第5章.ppt_第4页
C语言程序设计教程第5章.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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语句三种循环结构语句。 前两个称为条件循环,即根据条件来决定是否继续循环; 后一个称为计数循环,即根据设定的执行次数来执行循环。,3,5.1 while语句,while 语句是通过判断循环控制条件是否成立来决定是否继续循环的语句。 一般形式: while (表达式) 语句 表达式为循环控制条件,当表达式的值为非零(满足循环条件),就执行语句, 当表达式的值为零,就退出循环。,4,while语句执行流程,首先计算表达式,如果表达式的值为非零,执行语句,重新计算表达式,如果表达式的值为0,则跳出循环,如果表达式的值一开始就为0,则语句一次也会被不执行。,5,while语句举例,问题: 求n个学生的平均成绩 算法: 1 输入 n ; i = 1 , average=0; 2 输入第 i 个学生的score; 3 average += score; i +; 4 当 i= n 重复做2; 5 average /= n ;,6,#include void main( ) int n, score, i = 1 ; float average=0; printf (“ n Enter n:” ); scanf( “%d” , ,7,5.2 dowhile语句,dowhile 语句的一般形式是: do 语句 while (表达式) 特点: 首先执行语句,再通过判断循环控制条件是否满足来决定是否继续循环。,8,dowhile语句执行流程,首先执行语句, 再计算表达式。,如果表达式的值为非零, 继续下一次循环,如果表达式的值为0,则跳出循环,如果表达式的值一开始就为0,也会执行一次语句。,9,#include void main( ) int n, score, i = 0; float average=0; do printf (“ n Enter score:” ); scanf( “%d” , ,10,注意:循环控制变量值在循环体内必须有所改变。,例如: i=1; while (i=100) putchar(*); i+;,这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i+; 不属于循环语句。,i+应该在循环体内改变:,i=1; while (i=100) putchar(*); i+; ,11,5.3 for循环语句,for(表达式1;表达式2;表达式3) 循环体语句,这是C语言最有特点的循环语句。使用最为灵活方便 一般形式:,12,先计算表达式1,用于循环开始前设置变量初值。 接着计算循环控制逻辑表达式2,控制循环条件,决定循环次数。 执行循环体语句,这个语句也可以是其它循环。 表达式3:循环控制变量,修改表达式。,执行流程,13,例: 求 1+2 +99,#include”stdio.h” main() int i,s=0; / *s清0 */ for(i=1;i100;i+) s=s+i; printf(“s=%d”,s); ,14,循环语句的多种表示,for( i=0; i100; i+ ) s=s+i;,main() int i=1,s=0; do s=s+i; while (+i100) printf(“s=%d”,s); ,main() int i,s=0; i=1; while(i100) s=s+i; i+; printf(“s=%d”,s); ,15,for语句的表达式可以省略,如已先给变量赋过值。则可以省略表达式1。,for(;i100;i+),如果想在循环内部改变变量的值,则可以省略表达式3。,for(i=0;i100;),如果都省略的话就相当于while。,for(;i100;) while(i100),全部省略就是死循环。,for(;) (需要用break跳出),16,逗号表达式,逗号运算符的主要应用就在for语句中。 for语句中的表达式1和表达式3可以是逗号表达式,特别是有两个循环变量参与对循环的控制时。表达式1和表达式3为逗号表达式,将使程序显得非常清晰。,例: for( i=1, j=10 ;i=j; i+, j-),17,for(i=a,j=b; i=j; i+,j-) 举例,main() int I,j; for( i=1, j=10 ;i=j; i+, j-) printf(“i=%d,j=%dn”,i,j); ,18,循环语句流程图,语句,表达式,while循环 dowhile循环 for循环,19,循环语句流程图的统一格式。,20,5.4 break、continue、goto语句,这一类语句的功能是改变程序的结构,使程序从其所在的位置转向另一处。 这类语句是非结构化语句,21,非结构化语句之break,它的作用是把流程转向所在结构之后。 在switch分支结构中,使用break语句可以使流程跳出switch分支结构。 同样的,在循环结构中,使用break语句使流程跳出当前的循环层,转向执行该循环结构后面的语句。,简单的说就是跳出当前所在的结构,main( ) int s=0,i=1: for (; ;) s = s+i; i+; if (i100) break; /* 如果 i100,则退出循环*/ printf(“s=%d”,s); 本程序中,当i100时,强行终止for循环,继续执行for语句下一条语句,22,非结构化语句之continue,continue语句被称为继续语句。执行continue语句,使本次循环提前结束,即跳过循环体中continue语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。该语句形式为: continue;,23,例5.4 显示输入的字符, 如果按的是Esc键, 则退出循环; 如果按的是Enter键, 则不做任何处理,继续输入下一个字符。,#include “conio.h” main( ) char ch; for (; ;) ch=getch(); /*字符输入函数 */ if (ch=27) /* Esc键的ACSII码为27*/ break; /*退出循环*/ if (ch=13) continue; /*按的是Enter:键,跳过字符输出语句*/ putch(ch); /*显示输入的字符*/ getch( ); /*让程序停一下,拍任意键继续*/ ,getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码,出错返回-1。,24,非结构化语句之goto,goto被称为无条件转移语句。由两部分组成 goto 标号; 和 标号: 语句,它最大的好处就是可以一下子跳出多重循环,而break却不能做到这点。,25,#include “stdio.h” main( ) float score , average=0; int n=0; scanf(“%f”, &score); /* 输入第一个学生的分数 */ if (score=0) /* 表达式为非0, 转移到loop标号处 */ goto loop; average = average /n ; /*求平均成绩average */ end:printf(“%6.2f”, average); /*输出平均成绩,保留两位小数 */ ,26,5.5 循环的嵌套,在循环体语句中又有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。While 、do-while、for三种循环都可以互相嵌套。 循环嵌套的程序中,要求内循环必须完全包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。,27,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,输出结果:,执行语句段: for(i=0;i6;i+) for(j=0;j6;j+) printf(“%3d %3d”,i,j); putchar(n); ,28,循环嵌套举例,问题:输出图形 * * * * * *,29,分析: 一共6行, 每行的 *数目与行号相同 算法: 行用 i 表示 , 当 i 7 do 输出 i 个 * 换行 ,int i,j; for ( i=1; i7; i+) printf(“n“); for (j=1; j=i; j+ ) putchar(*); ,30,循环嵌套举例,问题:输出图形 * * * *,31,循环嵌套,分析: 一共4行, 第i行输出的空格数为: (7-i+1)/2 第i行输出 i*个*, 算法: 当 i = 7 do 输出 (7-i+1)/2个空格 ; 输出i 个 * 换行 ; i+=2 ; ,32,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(); ,33,复合程序结构,C语言允许循环语句与分支结构语句联用,即在循环体包含一个完整的分支结构,这样的程序结构被称为复合程序结构。复合程序结构同样必须做到嵌套层次清楚,决不允许出现嵌套层次之间相互交叉的情况。,34,例:给多个学生的成绩评级。 #include #include main() int i, score; scanf(“%d“ , /*输入下一个学生的成绩*/ while 结构中嵌套了一个多分支选择结构。,35,5.6 复合程序结构举例,例1 目标:找出3至1000内的全部的质数。 算法:从i= 1 开始做 分别用2,3,4,i-1 除i(用2,3,sqrt(i)除i)。 如果i被某个数整除 , i不是素数。 i+; 测试下一个i;,36,#include main( ) int i, j ,count,flag; /* 用flag作标志 */ count=0; for(i=3; i=1000; i+) flag = 0; /* 设标志为0 */ for(j=2; j=sqrt(i); j+) if (i % j = =0) /* 用 j 测试 i */ flag = 1; /* 不是素数,设标志为1 */ /* i 测试完毕 */ if(flag = = 0) /* i是素数 */ printf(“%4d, ”, i ); count+; if (count % 8 = = 0) printf(“n” ); /* 每输出8个素数就换行 */ /* 测试下一个 i */ ,37,例2:用公式/4=1-1/3+1/5-1/7+,求得近似值,直到最后一项的绝对值小于10-6为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论