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

下载本文档

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

文档简介

从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构,选择结构,循环结构。这三种基本结构可以组成所有的各种复杂程序。 3.4 顺序程序控制结构 3.5 选择程序控制结构 3.6 循环程序控制结构,循环的逻辑含义:当满足某个特定条件时,重复执行某段程序,直到条件不满足为止。两种循环结构:, 当型循环结构。 当P条件成立时,反复执行A操作。直到P为“假”时才停止循环。 先判断,后执行。,图1 当型循环结构, 直到型循环结构。 先执行A操作; 再判断P是否为”真”; 若P为“真”,则执 行A,如此反复; 直到P为“假”为止。 先执行,再判断。,3.6.1 while 语句(当型循环结构) 3.6.2 do-while 语句(直到型循环结构) 3.6.3 for 语句(多功能型循环结构) 3.6.4 循环结构的嵌套,3.6 循环程序控制结构,1、while语句的形式:,while(表达式) 循环体;,需要重复执行的动作,3.6.1 while 语句,用来判别是否执行循环体,执行过程: 先求表达式的值; 当表达式值为非0时,执行循环体中的语句。 再判定表达式的值,再执行循环体。 直到表达式值为0,结束循环。,【例】 #include main( ) int k=4; while (k2) printf(“*“); k-; printf(“k=%dn“,k); ,运行结果为:*k=2,循环体可以是单语句、多语句或空语句;若为多语句,则必须用一对大括号括起来。,2019/9/11,【例】 k4; while(k2) printf(” * ”); kk+1; printf( ” kd”,k);,循环体中应该有不断修改表达式的值,使循环能够趋于结束,否则将造成死循环。,【例】用while语句,求1+2+3+99+100,#include main( ) int i=1,sum=0; while (i101) sum+=i ; i+; printf(“sum=%dn“,sum); ,【例】用while语句,求1*2*3*99*100,sum=1; i=1;,sum*= i;,【例】用while语句逆序输出26个小写字母。,include ,main(), char ch;,ch=z;,while (ch=a), printf(“%c”,ch);,ch-; ,2019/9/11,【例】对键盘输入的字符进行统计并输出其中数字字符的个数,约定用换行符结束循环。,输出数字字符的个数,include,main(), int n=0;char c;,c=getchar( );,while(c!=n),if(c=0,c=getchar( );,printf(“n=%dn”,n);,3.6.2 do-while语句(直到型),do-while语句的形式为:,do 循环体; while(表达式);,特点: 先执行循环体,再判断条件是否成立。,do-while循环结构,直到表达式值为假,2019/9/11,#include main( ) int i=0,sum=0; do i+; sum=sum+i ; while(i3) ; printf(“sum=%d”,sum); ,程序的运行结果为:sum6,【例】阅读程序写出程序运行结果。,2019/9/11,用while语句改写do-while语句: #include main( ) int i=0,sum=0; while(i3) i+; sum=sum+i ; printf(“sum=%d”,sum); 运行结果为:sum6,2019/9/11,运行结果:,2)while与do-while循环的比较,sum=6,2019/9/11,【思考题】对于下面的这个程序,如果循环体改为i+; sum=sum+i;后,结果会一样吗?,【例】dowhile语句逆序输出26个小写字母:,include ,main(), char ch;,do ,printf(“%c”,ch);,ch-;,while(ch= a);,ch=z;,for语句可以用于循环次数已经确定的情况,还可用于循环次数不确定而只给出循环结束条件的情况,它可以代替while和do-while语句。 1)for语句的语法形式和语义 for( 表达式1 ; 表达式2 ; 表达式3) 循环体;,给循环控制变量赋初值,结束循环的控制条件,修改循环变量值,3.6.3 for语句,for语句一般形式中的“表达式1”可以省略,此时应在 for语句之前给循环变量赋初值。,循环体,【例1】for( i=1; i4; i+ ) product=product*i;,【例2】 for( ; i3; i+ ) product=product*i;,i=1;,表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。,【例3】 i=1; for(product=1; i3; i+ ) product=product*i;,2019/9/11,【例4】 i=1; for( ; i5; ) product=product*i; i+; ,可以省略表达式1和表达式3,只有表达式2,即只给循环条件,在这种情况下,完全等同于while语句,因此在循环体内必须有改变循环变量的语句。,i=1; for( ; ; ) if(i5) product=product*i; i+; ,for语句的各表达式都可以省略,但分号间隔符不能少;三个表达式都可省略;但在循环体有控制循环结束的语句。,【例5】,【例】编写求n!的程序,即计算1*2*3*4*n的值,并输出。,输入n,定义变量区域,设计一个循环结构来 计算1*2*n的值,输出最终的结果,#include ,main( ),int i,n,result=1;,/*提高程序的可读性*/ printf(“Enter n:”);,scanf(“%d”,for(i=1;i=n;i+),result=result*i;,printf(“%d!=%dn”,n,result);,循环结构:循环变量的初值、循环结束条件、修改循环变量的表达式、循环体的内容。,3.6.4 循环结构的嵌套 一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、dowhile循环和for循环)可以互相嵌套。例如,下面几种都是合法的形式:,# include main( ) int i, n, p, s; s=0; n=1; while(n=4) p=1; for(i=1;i=n;i+) p=p*i; s=s+p; n+; printf(“s=%dn”, s); ,n=4,Y,N,求解i=1,p=1;,i=n,p=p*i,i+,Y,N,s=s+p; n+;,功能:求1!+2!+3!+ 4!,百鸡问题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡翁、母、雏各几何?,公鸡5块钱/只,母鸡3块钱/只,小鸡3只1块钱。问: 100块钱买100只鸡,每只鸡各买多少只。,公鸡:cock 母鸡:hen 小鸡:chick,分析: cocks=0 当cocks=19时 hens=0 当hens=33时 chicks=100-cocks-hens 如果(5*cocks+3*hens+1/3*chicks=100)则输出 hens加1 cocks加1,公鸡5块钱/只,母鸡3块钱/只,小鸡3只1块钱。 问: 100块钱买100只鸡,每只鸡各买多少只。,公鸡5元/只,母鸡3元/只,小鸡3只1元。问: 100块钱买100只鸡,每只鸡各买多少只。,#include “stdio.h“ main() int cocks,hens,chicks; cocks=0; while(cocks20) hens=0; while(hens33) chicks=100-cocks-hens; if(5*cocks+3*hens+1/3*chicks=100) printf(“%d,%d,%dn“,cocks,hens,chicks); hens+; cocks+; ,#include “stdio.h“ main() int cocks,hens,chicks; for(cocks=0;cocks20;cocks+) for(hens=0;hens33;hens+) chicks=100-cocks-hens; if(5*cocks+3*hens+1/3*chicks=100) printf(“%d,%d,%dn“,cocks,hens,chicks); ,公鸡5元/只,母鸡3元/只,小鸡3只1元。问: 100块钱买100只鸡,每只鸡各买多少只。,换零钱问题:将100块整钱兑换成1元,5元,10元的零钱,共有多少种不同的换法?(每种钱至少一个),#include “stdio.h“ main() int s,w,c=0; for(s=1;s=9;s+) for(w=1;w=(100-s*10)/5-1;w+) printf(“%d,%d,%dn“,s,w,100-10*s-5*w); c+; printf(“n%dn“,c); ,s:十块钱的个数,w:五块钱的个数,c:次数,3.7 控制转移语句,3.7.1 break 语句 3.7.2 continue 语句 3.7.3 goto 语句,3.7.1 break语句 形式: if(表达式) break;,【例】 while(1) while( 1 ) break; ,功能:用在当前循环中,使程序跳出最近一层的循环体,终止当前的循环;,注意:break语句只能用在switch语句和循环语句中,不能出现在其他地方。,【例】for (x=1,y=3;x3) break; printf(“y=%dn”,y);,当for循环执行到y=y+x时,y的值已经大于3,此时执行break语句,直接跳出for循环,执行for循环下面的打印语句。,【例】从键盘输入10个数,并求和。如果输入的是负数,则提前结束循环。,main( ),# include, int x, n=0,s=0;,while (n10),if (x0) break;,scanf(“%d”,s+=x;,printf(“和s=%d”, s);,n+;,for ( ; n10; n+),3.7.2 continue语句,形式:if(表达式)continue;,功能:结束本次循环,转入下一次循环条件的判断与执行,即开始下一轮循环,并不结束循环;,只能用于循环体结构中。,while(表达式1) if(表达式2) continue; ,do if(表达式1) continue; while(表达式2),for(exp1;exp2;exp3) if(表达式4) continue; ,【例】从键盘输入10个数,求其中的非负数之和。,main( ),# include, int x, n=0,s=0;,while (n10),if (x0) continue;,scanf(“%d”,s+=x;,printf(“非负数之和s=%d”, s);,n+;,for ( ; n10; n+),【例】统计并输出1到200之间能被3整除的数及其个数。,main( ),# include, int i, count=0;,for (i=1; i=200; i+), if (i%3!=0) continue;,count+;,printf(“%d ” , i);,printf(“ncount=%d”, count);,3.7.3 goto语句(了解) 形式:goto 语句标号;,功能:程序流程无条件地转移到标号语句处往下执行。 说明: goto语句常与条件语句配合使用,用来实现条件转移、构成循环、跳出循环等功能。 注意: goto语句不能跳到本函数外,也不能从循环体外跳转到循环体内。,语句标号用标识符表示,放在某一语句行的前面,标号后加冒号“:”。,例:用goto语句,求s=1+2+3+100的值。,#include “stdio.h“ main() int s=0,i=1; loop:s=s+I; i=i+1; if(i=100) goto loop; printf(“s=%dn”,s); ,break,continue和goto语

温馨提示

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

评论

0/150

提交评论