《c循环程序流程设计实用.pptx》由会员分享,可在线阅读,更多相关《c循环程序流程设计实用.pptx(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言可实现循环的语句:用goto 和 if 构成循环while 语句do while 语句for 语句goto语句及用goto构成循环goto语句一般格式:goto 语句标号;.标号:语句;v功能:无条件转移语句v说明:l不能用整数作标号l只能出现在goto所在函数内,且唯一l只能加在可执行语句前面l限制使用goto语句第1页/共37页例 用if 和goto语句构成循环,求/*ch5_1.c*/#include main()int i,sum=0;i=1;loop:if(i=100)sum+=i;i+;goto loop;printf(%d,sum);sum=0+1sum=1+2=3sum=
2、3+3=6sum=6+4sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体第2页/共37页例 从键盘输入一组数据,以0结束输入,求数据和/*ch5_11.c*/#include main()int number,sum=0;read_loop:scanf(%d,&number);if(!number)goto print_sum;sum+=number;goto read_loop;print_sum:printf(The total sum is%dn,sum);第3页/共37页while语句v一般形式:while(表达式)循环体语句;v执行流程:expr循环体假(
3、0)真(非0)while第4页/共37页v特点:先判断表达式,后执行循环体v说明:l循环体有可能一次也不执行l循环体可为任意类型语句l下列情况,退出while循环u条件表达式不成立(为零)u循环体内遇break,return,gotol无限循环:while(1)循环体;第5页/共37页例 用while循环求/*ch5_2.c*/#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环终值循环变量增值循环条件循环体第6页/共37页例 显示110的平方/*ch5_21.c*/#include main
4、()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100第7页/共37页dowhile语句v一般形式:do 循环体语句;while(表达式);v执行流程:do循环体expr假(0)真(非0)while第8页/共37页v特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假(0)真(非0)循环体While循环第9页/共37页例 用dowhile循环求/*ch5_3.
5、c*/#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);第10页/共37页例 while和dowhile比较/*ch5_4.c*/#include main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);第11页/共37页for语句v一般形式:for(expr1;expr2;expr3
6、)循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr3第12页/共37页vfor语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v说明:lfor语句中expr1,expr2,expr3 类型任意,都可省略,但分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;例 用for循环求#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);第13页/共37页例:#include main
7、()int i=0;for(i=0;i10;i+)putchar(a+i);运行结果:abcdefghij例:#include main()int i=0;for(;i10;i+)putchar(a+i);例:#include main()int i=0;for(;i10;)putchar(a+(i+);例:#include main()int i=0;for(;i10;putchar(a+i),i+);第14页/共37页main()int i,j,k;for(i=0,j=100;i=j;i+,j-)k=i+j;printf(%d+%d=%dn,i,j,k);#includemain()cha
8、r c;for(;(c=getchar()!=n;)printf(%c,c);#include main()int i,c;for(i=0;(c=getchar()!=n;i+=3)printf(%c,i+c);第15页/共37页例 (f0r)梯形法求数值积分0yxa a+ha+ih a+(i+1)hbf(x)第16页/共37页循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do whil
9、e();while().内循环外循环内循环v嵌套循环的跳转禁止:l从外层跳入内层l跳入同层的另一循环l向上跳转第17页/共37页例 循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.ij/*ch5_5.c*/#include main()int i,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);第18页/共37页i10printf假(0)真(非0
10、)i=1j+j=1j10真(非0)假(0)i+for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环内循环第19页/共37页例6-5 打印九九乘法表双重循环程序举例main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%3d ,i*j);printf(n);printf(%d*%d=%-3d ,j,i,i*j);返回例5-9 打印图形:先编程打印一行十个“*”;再修改成打印十行十列“*”;最后修改成打印“*”形三角形图案。第20页/共37页循环结构程序设计-小结本本讲讲通通过过多多个
11、个实实例例介介绍绍了了循循环环控控制制结结构构在在解解决决实实际际问问题题中中的的应应用用,不不同同的的问问题题有有不不同同的的处处理理方方法法,现对程序设计的一般过程小结如下:现对程序设计的一般过程小结如下:1 1问题分析,明确需要重复处理的核心问题;问题分析,明确需要重复处理的核心问题;2 2将循环问题粗略地划分为几个相对独立的阶段;将循环问题粗略地划分为几个相对独立的阶段;3 3用流程图或用流程图或N-SN-S图进行算法描述;图进行算法描述;4 4确定循环控制条件,选定循环控制类型;确定循环控制条件,选定循环控制类型;5 5编写循环控制程序。编写循环控制程序。对于多重循环,内循环体通常用
12、于具体操作,而对于多重循环,内循环体通常用于具体操作,而外循环体则用于循环控制。外循环体则用于循环控制。第21页/共37页 4.5 辅助控制语句break语句功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中第22页/共37页exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while第23页/共37页expr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句
13、组nbreak;语句组break;.const 1const 2const ndefaultcase 第24页/共37页例 break举例:输出圆面积,面积大于100时停止#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);第25页/共37页例 break举例:小写字母转换成大写字母,直至输入非字母字符#include main()int i,j;char c;while(1)c=getchar();if(c=a&c=z)putchar(c-a+A);else br
14、eak;第26页/共37页continue语句v功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断v仅用于循环语句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3第27页/共37页例 求输入的十个整数中正数的个数及其平均值/*ch5_12.c*/#include main()int i,num=0,a;float sum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;su
15、m+=a;printf(%d plus integers sum:%6.0fn,num,sum);printf(Mean value:%6.2fn,sum/num);第28页/共37页程序举例t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:1,-1,1,-1分母:1,3,5,7,.第29页/共37页例 求Fibonacci数列:1,1,2,3,5,8,的前40个数f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f115342331597109467502551422935245782
16、41578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155第30页/共37页例 判断m是否素数读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”第31页/共37页 有3636块砖,一次需要3636人同时搬运,男青年每人搬4 4块,女青年每人搬3 3块,儿童两人搬1 1块。要求编写程序,把可能的搬运方案都
17、找出来。问题分析:问题分析:设男青年、女青年、儿童数分别为设男青年、女青年、儿童数分别为x x,y y,z z,则可得如下方程组:则可得如下方程组:x+y+z=36x+y+z=36 4x+3y+z/2=36 4x+3y+z/2=36算法设计:采用穷举法。使用双重循环设计程序。算法设计:采用穷举法。使用双重循环设计程序。搬砖问题(不定解方程)返回第32页/共37页main()int x,y,z;printf(men women childrenn);for(x=0;x=8;x+)for(y=0;y=11;y+)z=36-x-y;if(4*x+3*y+z/2=36)printf(%3d,x);pr
18、intf(%8d,y);printf(%10dn,z);返回虚解问题:原因在于:z/2if(4*x+3*y+z/2.0=36.0)例6-6 搬砖问题的程序设计(穷举法)第33页/共37页例6-7 把100200之间的所有的素数输出返回 事事实实上上,已已经经证证明明,如如果果k k不不能能被被从从2 2到到sqrt(K)sqrt(K)之之间间的所有整数除尽,则的所有整数除尽,则k k必是素数。必是素数。由素数的定义,很容易确定判定素数的方法:对于自然数k,只要依次测试能否被2,3,k-1整除即可,在测试中,若遇到能够整除的情况,则k不是素数,测试过程即可停止,否则k是素数。程序1程序2第34页
19、/共37页#include math.h#include stdio.hmain()int i,k,sk,flag,count=0;for(k=100;k=200;k+)flag=1;sk=sqrt(k);for(i=2;i=sk;i+)if(k%i=0)flag=0;break;if(flag=1)count+;printf(%5d,k);if(count%12=0)printf(n);返回main()int i,k,flag;printf(Input k:);scanf(%d,&k);flag=1;for(i=2;i=k-1;i+)if(k%i=0)flag=0;break;if(flag=1)printf(%d is a prime number!n,k);else printf(%d is not a prime number!n,k);例6-7_1 判断一个数是素数。例6-7 把100200之间的所有的素数输出第35页/共37页例 译密码例如 Hello,world!译成密码:Lipps,asvph!第36页/共37页感谢您的欣赏!第37页/共37页
限制150内