C程序设计-第7章.ppt

上传人:小飞机 文档编号:5426140 上传时间:2023-07-05 格式:PPT 页数:39 大小:344.50KB
返回 下载 相关 举报
C程序设计-第7章.ppt_第1页
第1页 / 共39页
C程序设计-第7章.ppt_第2页
第2页 / 共39页
C程序设计-第7章.ppt_第3页
第3页 / 共39页
C程序设计-第7章.ppt_第4页
第4页 / 共39页
C程序设计-第7章.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

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

1、1,第六章 循环结构程序设计,本章内容1.循环结构概述2.goto语句及用goto语句构成的循环3.While语句的使用4.Do While语句的使用5.For 语句的使用6.循环的嵌套7.Break语句和Continue语句的使用8.程序举例,2,输入10个整数,求它们的平均值,并输出大于平均值的个数。,main()int a,b,c,d,e,f,g,h,i,j,n=0;float average;scanf(“%d”,3,average=(a+b+c+d+e+f+g+h+i+j)/10;if(aaverage)n=n+1;if(baverage)n=n+1;if(caverage)n=n+

2、1;if(daverage)n=n+1;if(eaverage)n=n+1;if(faverage)n=n+1;if(gaverage)n=n+1;if(haverage)n=n+1;if(iaverage)n=n+1;if(javerage)n=n+1;printf(“n=%d,n);,4,6.1 概 述,循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。语言提供了多种循环语句,可以组成各种不同形式的循环结构。(1)用goto语句和if语句构成循环(2)用while语句(3)用do-whil

3、e语句(4)用for语句,5,表达式,语句,表达式,语句,a)当型循环,b)直到循环,非0,0,非0,0,6,6.2 goto语句及用goto语句构成的循环 一、无条件转移语句goto语句 一般格式:goto 语句标号;其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。如:label:i+;goto label;语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。,7,二、用goto语句与if语句实现循环用goto语句与if语句实现循环的形式:,形式1

4、:loop1:语句;if(表达式)goto loop1;,形式2:loop1:if(表达式)goto loop2;语句;goto loop1;loop2:,注意:在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。,8,例1:编程序求:s=1+2+3+100,main()int s=0,n=1;loop:s=s+n;n+;if(n=100)goto loop;printf(S=%d,s);,main()int s=0,n=1;loop1:if(n100)goto loop2;s=s+n;n+;goto loop1;loop2:printf(S=%d

5、,s);,9,例2:统计从键盘输入一行字符的个数。#includestdio.h void main()int n=0;printf(input a stringn);loop:if(getchar()!=n)n+;goto loop;printf(%d,n);,10,6.3 while 语句,执行过程是:计算表达式的值,当值为真(非0)时,执行循环体语句。如右上图。,while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体,若是多个语句则必须用 组成复合语句。,表达式,语句,非0,0,11,例1:编程序求:s=1+2+3+100,main()int s=0,n

6、=1;while(n=100)s=s+n;n+;printf(S=%d,s);,12,6.4 Dowhile语句 do-while语句的一般形式为:do 语句;while(表达式);其中:语句是循环体,表达式是循环条件。,表达式,语句,非0,0,执行过程:先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。,13,例1:编程序求:s=1+2+3+100,main()int s=0,n=1;do s=s+n;n+;while(n=100);printf(S=%d,s);,14,使用while和do-while语句应注意以下几点:1.在if语句,while语句中,表达式

7、后面都不能加分号,而在 do-while语句的表达式后面则必须加分号。2.do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。3.当循环体由多个语句组成时,也必须用括起来组成一个复合语句。4.如果循环至少要执行一次,while和do-while语句可以相互替换。,15,6.5 for语句,for语句是语言所提供的功能更强,使用更广泛的一种循环语句。一、使用一般形式为:for(表达式1;表达式2;表达式3)语句;其中:表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。表达式2通常是循环条件,一般为关系表达式或逻

8、辑表达式。表达式3通常可用来修改循环变量的值,一般是赋值语句。,16,for语句的执行过程:1.首先计算表达式1的值。2.再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。3.然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能多次执行,也可能一次都不执行。,表达式2,语句,非0,0,语句,求解表达式1,求解表达式3,for 语句的执行过程,17,例:用for语句计算s=1+2+3+.+99+100 main()int n,s=0;for(n=1;n=100;n+)s=s+n;printf(s=%

9、dn,s);本例for语句中的表达式3为n+,实际上也是一种赋值语句,相当于n=n+1,以改变循环变量的值。,18,二、在使用for语句中要注意以下几点:1.for语句中的各表达式都可省略,但分号间隔符不能少 如:for(;表达式2;表达式3)省去了表达式1。for(表达式1;表达式3)省去了表达式2。for(表达式1;表达式2;)省去了表达式3。for(;)省去了全部表达式。2.在循环变量已赋初值时,可省去表达式1。如省去表达式2或表达式3则将造成无限循环,这时应在循环体内设法结束循环。,19,main()int n=1,s=0;for(;n=100;n+)s=s+n;printf(s=%d

10、n,s);,main()int n=1,s=0;for(;n=100;)s=s+n;n+;printf(s=%dn,s);,省略表达式1和 3:,省略表达式1:,20,main()int n=1,s=0;for(;)s=s+n;n+;printf(s=%dn,s);,省略全部表达式:程序为死循环,main()int n=1,s=0;for(;)s=s+n;n+;if(n100)break;printf(s=%dn,s);,for(;)等效于while(1),21,3.for语句中的 三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。例:,main()int n,s;for(n=1

11、,s=0;n=100;n+)s=s+n;printf(s=%dn,s);,main()int n,s;for(n=1,s=0;n=100;s+=n,n+);printf(s=%dn,s);,这里为什么要加;,22,例:统计从键盘输入一行字符的个数。#includestdio.h void main()int n=0;printf(input a string:n);for(;getchar()!=n;n+);printf(%d,n);,说明:本例中,省去了for语句的表达式1,表达式3也不是用来修改循环变量,而是用作输入字符的计数。这样,就把本应在循环体中完成的计数放在表达式中完成了。因此循环

12、体是空语句。应注意的是,空语句后的分号不可少,如缺少此分号,则把后面的printf 语句当成循环体来执行。反过来说,如循环体不为空语句时,决不能在表达式的括号后加分号,这样又会认为循环体是空语句而不能执行循环体。,23,6.6 循环的嵌套,for语句也可与while,do-while语句相互嵌套,构成多重循环。以下形式都合法的嵌套。,(4)while()for(),(1)while()while(),(2)do do while()while();,(3)for()for(),24,(7)while()do while();,(5)for()while(),(6)dofor()while();

13、,(8)for()do while();,25,例:打印如下形式的九九乘法表.,main()int x,y;for(x=1;x=9;x+)for(y=1;y=9;y+)printf(%d*%d=%2d,x,y,x*y);printf(n);,26,6.7 几种循环语句的比较,27,6.8 break语句和continue语句,一、break语句 break语句只能用在switch 语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。由于break语句的转移方向是明确的,所以不需要语句标号与之配合。break语句的一般形式为:break;注意:break语句只能用于

14、循环语句和switch语句。,28,例:计算s=1+2+3+.+99+100 main()int n=1,s=0;while(1)if(n100)break;s=s+n;n+;printf(s=%dn,s);,29,分析下面程序的功能main()char a,b;printf(input a string:n);b=getchar();while(a=getchar()!=n)if(a=b)printf(same charactern);break;b=a;,功能是:检查输入的一行中有无相邻两字符相同。,30,done=0;for()for()while()if()done=1;break;i

15、f(done)break;if(done)break;,多层嵌套循环:可用goto退出;而break;只能退出本层循环。,31,main()int n;for(n=7;n=100;n+)if(n%7!=0)continue;printf(%d,n);,main()int n;for(n=7;n=100;n+)if(n%7=0)printf(%d,n);,二、continue语句 continue语句只能用在循环体中其一般格式是:continue;其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不

16、跳出循环。,32,6.9 程序举例,例6.6 教材Pg.124(略)fabs()例6.7 教材Pg.125,数列 1,1,2,3,5,8,13的前40 个数这是一个递推问题.该数列可以用下面的通式来表示f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n=3)程序如下,33,main()long f1,f2;int k;f1=1;f2=1;for(k=1;k=20;k+)printf(%12ld%12ld,f1,f2);if(k%2=0)printf(n);f1=f1+f2;f2=f2+f1;,34,例6.8 判断一个整数m是否是素数。素数是只能被1 和本身整除的数。教材Pg.12

17、6,35,#include math.hvoid main()int m,i,k;printf(Enter m=n);scanf(%d,输入m,当i=k,k=sqrt(m),m%i=0,i=2,Y,N,i=i+1,当ik,Y,N,打印Yes,break,打印No,程序流程图,36,例6.9 打印输出100200之间的素数。#include math.hvoid main()int n=0,i,k,m;for(m=101;mk)n+;printf(%d,m);if(n%10=0)printf(n);,37,例6.10 字符加密、解密 教材Pg.128,加密的思想是:将每个字母C加(或减)一序数k

18、,即用它后的第k个字母代替,变换式公式:c=c+k 例如序数k为4,这时“A”“E”,“a”“e”,“B”“F”当加序数后的字母超过“Z”或“z”则 c=c+k-26 例如:You are good Csy evi kssh 解密为加密的逆过程 将每个字母C减(或加)一序数k,即 c=c-k,例如序数k为4,这时“Z”“V”,“z”“v”,“Y”“U”当减序数后的字母小于“A”或“a”则 c=c-k+26,38,加密程序如下:#include stdio.hmain()char c;while(c=getchar()!=n)if(c=a,39,解密程序如下:#include stdio.hmain()char c;while(c=getchar()!=n)if(c=a,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号