资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,讲授:汪瑾,C,程序流程设计,程序的三种基本结构,选择型程序设计,循环型程序设计,辅助控制语句,结构化程序设计,基本思想,:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(,goto,),结构化程序,:由三种基本结构反复嵌套构成的程序,优点,:结构清晰,易读,提高程序设计质量和效率,三种基本结构,顺序结构,A,B,A,B,流程图,N-S,图,程序的三种基本结构,P,A,B,真,假,P,B,A,真,假,k,A1,A2,Ai,An,k=k2,k=k1,k=,kn,k=,ki,.,.,选择结构,二分支,多分支,当型循环结构,直到型循环结构,P,A,假,真,当,P,为真,A,A,P,真,假,A,直到,P,为真,循环结构,概述,C,语言可实现循环的语句:,用,goto,和,if,构成循环,while,语句,do while,语句,for,语句,goto,语句及用,goto,构成循环,goto,语句一般格式:,goto,语句标号,;,.,标号:语句,;,循环型程序设计,功能:,无条件转移语句,说明:,不能用整数作标号,只能出现在,goto,所在函数内,且唯一,只能加在可执行语句前面,限制使用,goto,语句,循环型程序设计,#include,main(),int,i,sum=0;,i=1;,loop:,if(i=100),sum+=i;,i+;,goto,loop,;,printf(%d,sum,);,例 用,if,和,goto,语句构成循环,一般形式,:,while(,表达式,),循环体语句;,执行流程,:,expr,循环体,假,(0),真,(,非,0),while,while,语句,用,while,循环求,#include,main(),int,i,sum=0;,i=1;,while(i,=100),sum=sum+i;,i+;,printf(%d,sum,);,例子,do,循环体语句;,while(,表达式,);,执行流程,:,do,循环体,expr,假,(0),真,(,非,0),while,dowhile,语句,一般形式,:,特点:先执行循环体,后判断表达式,说明:,至少执行一次循环体,dowhile,可转化成,while,结构,expr,循环体,假,(0),真,(,非,0),循环体,While,循环,dowhile,语句特点和说明,一般形式:,for(,expr1,;,expr2,;,expr3,),循环体语句;,执行流程:,expr2,循环体,假,(0),真,(,非,0),for,expr1,expr3,for,语句,for(,循环变量赋初值;循环条件;循环变量增值,),循环体语句;,说明:,for,语句中,expr1,expr2,expr3,类型任意,都可省略,但分号;不可省,无限循环,:for(;),for,语句可以转换成,while,结构,expr1;,while(expr2),循环体语句;,expr3;,for,语句一般应用形式,例,:,#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+),;,三种循环可互相嵌套,层数不限,外层循环可包含两个以上内循环,但不能相互交叉,嵌套循环的执行流程,(1)while(),while(),.,(2)do,do,while();,.,while();,(3)while(),do,while();,.,(4)for(;),do,while();,while(),.,循环的嵌套,嵌套循环的跳转,禁止:,从外层跳入内层,跳入同层的另一循环,向上跳转,辅助控制语句,break,语句,功能:在循环语句和,switch,语句中,终止并跳出循环体或开关体,说明:,break,只能终止并跳出,最近一层,的结构,break,不能用于循环语句和,switch,语句之外的任何其它语句之中,辅助控制语句(图解,1,),expr,break;,假,(0),真,(,非,0),while,do,break;,.,expr,假,(0),真,(,非,0),while,expr2,break;,.,假,(0),真,(,非,0),for,expr1,expr3,switch,expr,语句组,1,break;,语句组,2,break;,语句组,n,break;,语句组,break;,.,const 1,const 2,const n,default,case,辅助控制语句(图解,2,),功能:结束本次循环,跳过,循环体中,尚未执行的语句,进行下一次是否执行循环体的判断,仅用于循环语句中,expr,continue;,假,(0),真,(,非,0),while,真,(,非,0),do,continue;,.,expr,假,(0),while,expr2,continue;,.,假,(0),真,(,非,0),for,expr1,expr3,continue,语句,百马百担,有,100,匹马,驮,100,担货,其中大马驮,3,担,中马驮,2,担,两匹小马驮,1,担,请列出所有的可能组合,for(i=1;i=100;i+),for(j=1;j 0),x1=(x2+1)*2;,/*,第一天的桃子数是第,2,天桃子数加,1,后的,2,倍*,/,x2=x1;,day-;,printf,(the total is%,dn,x1);,古典问题:斐波那契数列,有一对兔子,从出生后,第,3,个月起每个月都生一对兔子,,小兔子长到,第三个月后每个月又生一对兔子,,假如兔子都不死,问每个月的兔子总数为多少?,1,1,2,3,5,8,13,21.,main(),long fn1,fn2,fn3;,int,i,n;,printf,(,输入月数,(,少于,40):“);,scanf,(%d,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,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(,int,n),int,c;,if(n=1)c=10;,else c=age(n-1)+2;,return(c,);,main(),printf,(%d,age(5);,递归问题:,如果整数,A,的全部因子,(,包括,1,,不包括,A,本身,),之和等于,B;,且整数,B,的全部因子,(,包括,1,,不包括,B,本身,),之和等于,A,,则将整数,A,和,B,称为亲密数。求,3000,以内的全部亲密数。,亲密数,穷举问题,main(),int,a,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,说他不和,x,比,,c,说他不和,x,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,的字符串,,删除串中的重复字符。,int,alread_saved,(char,lastchar,char,newstr,int,j),int,i=0;,while(i j),if(,lastchar,=,newstri,)return 1;,i+;,return 0;,调试例题:,void main(),char str100;char newstr100;,int,n,i,j;,i=0;j=0;,gets(,str,);,while(,stri,!=0),if(!,alread_saved,(,stri,newstr,j,),newstrj,=,stri,;j+;,i+;,newstr,j=0;,puts(,newstr,);,
展开阅读全文