《C语言函数循环》PPT课件.ppt
讲授:汪瑾C C程序流程设计程序流程设计程序的三种基本结构选择型程序设计 循环型程序设计 辅助控制语句讲授:汪瑾n结构化程序设计结构化程序设计n基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)n结构化程序:由三种基本结构反复嵌套构成的程序n优点:结构清晰,易读,提高程序设计质量和效率n三种基本结构三种基本结构n顺序结构ABAB流程图N-S图程序的三种基本结构讲授:汪瑾PAB真假PBA真假A1A2AiAnk=k2k=k1k=knk=ki.l选择结构p二分支p多分支讲授:汪瑾l当型循环结构l直到型循环结构PA假真当P为真AAP真假A直到P为真循环结构讲授:汪瑾n概述C语言可实现循环的语句:用goto 和 if 构成循环while 语句do while 语句for 语句ngoto语句及用goto构成循环ngoto语句一般格式:goto语句标号;.标号:语句;循环型程序设计讲授:汪瑾v功能:无条件转移语句v说明:l 不能用整数作标号l 只能出现在goto所在函数内,且唯一l 只能加在可执行语句前面l 限制使用goto语句循环型程序设计讲授:汪瑾#includemain()inti,sum=0;i=1;loop:if(i=100)sum+=i;i+;gotoloop;printf(%d,sum);例例 用用if if 和和gotogoto语句构成循环语句构成循环讲授:汪瑾v一般形式:while(表达式)循环体语句;v执行流程:expr循环体假(0)真(非0)whilewhile语句讲授:汪瑾用用whilewhile循环求循环求#includemain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);例子例子讲授:汪瑾do循环体语句;while(表达式);v执行流程:do循环体expr假(0)真(非0)whiledowhile语句语句v一般形式:讲授:汪瑾v特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假(0)真(非0)循环体While循环dowhile语句特点和说明讲授:汪瑾v 一般形式:for(expr1;expr2;expr3)循环体语句;v 执行流程:expr2循环体假(0)真(非0)forexpr1expr3for语句讲授:汪瑾for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v说明:说明:lfor语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;forfor语句一般应用形式语句一般应用形式讲授:汪瑾例:#include main()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+);讲授:汪瑾v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while()while().(2)dodowhile();.while();(3)while()dowhile();.(4)for(;)dowhile();while().循环的嵌套讲授:汪瑾v嵌套循环的跳转禁止:l从外层跳入内层l跳入同层的另一循环l向上跳转讲授:汪瑾辅助控制语句nbreak语句n功能:在循环语句和switch语句中,终止并跳出循环体或开关体n说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中讲授:汪瑾辅助控制语句(图解1)exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while讲授:汪瑾expr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;.const1const2constndefaultcase辅助控制语句(图解2)讲授:汪瑾功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3continue语句讲授:汪瑾百马百担百马百担有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担,请列出所有的可能组合 for(i=1;i=100;i+)for(j=1;j0)x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/x2=x1;day-;printf(thetotalis%dn,x1);讲授:汪瑾古典问题:斐波那契数列 有一对兔子,从出生后第第3 3个月起每个月都个月起每个月都生一对兔子生一对兔子,小兔子长到第三个月后每个月第三个月后每个月又生一对兔子又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1,1,2,3,5,8,13,21.讲授:汪瑾main()longfn1,fn2,fn3;inti,n;printf(输入月数(少于40):“);scanf(%d,&n);if(n1)printf(M.2:%10ld“,fn2);for(i=3;i=n;i+)fn3=fn1+fn2;if(i%4=0)printf(n);printf(M.%2d:%10ld,i,fn3);fn1=fn2;fn2=fn3;讲授:汪瑾求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。main()int a,n,count=1;long int sn=0,tn=0;printf(please input a and nn“);scanf(%d,%d,&a,&n);printf(a=%d,n=%dn,a,n);while(count=n)tn=tn+a;sn=sn+tn;a=a*10;+count;printf(a+aa+.=%ldn“,sn);求和累加:讲授:汪瑾有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?age(intn)intc;if(n=1)c=10;elsec=age(n-1)+2;return(c);main()printf(%d,age(5);递归问题:讲授:汪瑾如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。亲密数穷举问题穷举问题讲授:汪瑾main()inta,i,b,n;for(a=1;a3000;a+)/*穷举3000以内的全部整数*/for(b=0,i=1;i=a/2;i+)if(!(a%i)b+=i;for(n=0,i=1;i=b/2;i+)if(!(b%i)n+=i;if(n=a&a!=b)printf(%4d.%4d,a,b);讲授:汪瑾两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a a说他不和说他不和x x比,比,c c说他不和说他不和x,zx,z比比,请编程序找出三队赛手的名单。main()char i,j,k;/*i是是a的对手,的对手,j是是b的对手,的对手,k是是c的对手的对手*/for(i=x;i=z;i+)for(j=x;j=z;j+)if(i!=j)for(k=x;k=z;k+)if(i!=k&j!=k)if(i!=x&k!=x&k!=z)printf(order is a-%ctb-%ctc-%cn,i,j,k);讲授:汪瑾输入一个长度不超过 100 的字符串,删除串中的重复字符。intalread_saved(charlastchar,charnewstr,intj)inti=0;while(ij)if(lastchar=newstri)return1;i+;return0;调试例题:讲授:汪瑾voidmain()charstr100;charnewstr100;intn,i,j;i=0;j=0;gets(str);while(stri!=0)if(!alread_saved(stri,newstr,j)newstrj=stri;j+;i+;newstrj=0;puts(newstr);