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

上传人:牧羊曲112 文档编号:6504104 上传时间:2023-11-07 格式:PPT 页数:38 大小:203KB
返回 下载 相关 举报
C语言程序设计教程第5章.ppt_第1页
第1页 / 共38页
C语言程序设计教程第5章.ppt_第2页
第2页 / 共38页
C语言程序设计教程第5章.ppt_第3页
第3页 / 共38页
C语言程序设计教程第5章.ppt_第4页
第4页 / 共38页
C语言程序设计教程第5章.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《C语言程序设计教程第5章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程第5章.ppt(38页珍藏版)》请在三一办公上搜索。

1、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(表达式)语句表达式为循环控制条件,当表达式的值为非零(满足循环条件),就执行语句,当表达式的值为

2、零,就退出循环。,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,#includevoid main()int n,score,i=1;float average=0;printf(“n Enter n:”);scanf(“%d”,7,5

3、.2 dowhile语句,dowhile 语句的一般形式是:do 语句 while(表达式)特点:首先执行语句,再通过判断循环控制条件是否满足来决定是否继续循环。,8,dowhile语句执行流程,首先执行语句,再计算表达式。,如果表达式的值为非零,继续下一次循环,如果表达式的值为0,则跳出循环,如果表达式的值一开始就为0,也会执行一次语句。,9,#includevoid main()int n,score,i=0;float average=0;do printf(“n Enter score:”);scanf(“%d”,10,注意:循环控制变量值在循环体内必须有所改变。,例如:i=1;whi

4、le(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,#inclu

5、de”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+),如果想在循环内部改变变量的值,则可以省略表达式

6、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”

7、,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(;

8、)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键,则不做任何处理,继续输入下

9、一个字符。,#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,非结构化语句之g

10、oto,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 循环的嵌套,

11、在循环体语句中又有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。While、do-while、for三种循环都可以互相嵌套。循环嵌套的程序中,要求内循环必须完全包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。,27,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+)fo

12、r(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

13、;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,/*输入下一个学生的成绩

14、*/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(fl

15、ag=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为止。#include math.hmain()int f=1;float pi=0,t=1,v=1;while(fabs(t)1e-6)pi=pi+t;v+=2;f=-f;t=f/v;pi*=4;printf(n pi=%10.8f,pi);,38,例3:电文加密。已知电文加密规律为:将字母变成其后面的第四个字母,其他字符保持不变。#includestdio.hmain()char ch;while(ch=getchar()!=n)if(ch=a,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号