C语言程序设计教程

上传人:xue****ang 文档编号:245342534 上传时间:2024-10-08 格式:PPT 页数:38 大小:307KB
返回 下载 相关 举报
C语言程序设计教程_第1页
第1页 / 共38页
C语言程序设计教程_第2页
第2页 / 共38页
C语言程序设计教程_第3页
第3页 / 共38页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C,语言程序设计教程,Huanghuai University Department of Computer Science,主讲:傅 丰,黄淮学院计算机科学系,高等教育出版社,谭浩强 张基温等编著,第三章,C,程序的流程设计,1,算法,2,C,语句概述,3,选择结构程序设计,3.1,双分支结构(,if-else,),3.13.2,多分支结构(,else if,、,switch,),4,循环结构程序设计,2,学时,2,学时,本节,4,学时,4,循环结构程序,一、,while,和,do-while,语句,while,(条件),循环体;,do,循环体;,while,(条件);,1,、若循环体为多条语句,,应用,括起来构成复合语句。,2,、循环体中应有使循环结束的,语句,否则会出现死循环。,说,明,循环结构,while(),语句,do,while(),语句,for(),语句,当,(,条件,),成立时,循环体,当,(,条件,),成立时,循环体,条件为真(非,0,即真)时,执行循环体;然后再判断条件,为,真,时再执行循环体,直到条件为,假,时结束循环语句,执行后续语句。,先执行循环体,再判断条件。为真则执行循环体,然后再判断条件,为真时再执行循环体,直到条件为假时结束循环,执行后续语句。,先判断后执行,先执行后判断,条件,循环体,N,Y,条件,循环体,N,Y,P98,习题,10,:,main(),int n=0,;,while,(,n+=1,),printf,(“,%dt”,n,);,printf,(“,%dn”,n,);,n=0+1,n=1+1,2=1,不成立,输出,n,的值,输出,n,的值,输出,n,的值,n,1,2,3,0=1,成立,n=2+1,1=1,成立,n=0,0,1,2,3,循环体为多个语句时要用,括起来,应在条件表达式或循环体中改变条件表达式的值,否则会出现死循环。,2,次,输出,n,的值,P98,习题,10,用,do-while,实现的对比:,main(),int n=0,;,do printf,(“,%dt”,n,);,while,(,n+=1,);,printf,(“,%dn”,n,);,n=0+1,n=1+1,2=1,不成立,输出,n,的值,输出,n,的值,输出,n,的值,n,0,1,3,0=1,成立,n=2+1,1=1,成立,n=0,0,1,2,3,2,3,次,P83,例,1416,:,main()int number=0;while(number=1)number+;printf(“%dn”,number);,main(),int number=0;,while(number+=1),printf(“*%dn”,number);,printf(“*%dn”,number);,#include,“,stdio.h,”,main()int c;while(c=getchar()!=EOF)putchar(c);,main()int c;,c=getchar();,while(c!=EOF);putchar(c);,c=getchar();,e,e,h,h,z,*,1*2*3,12,EOF,为符号常数,在,stdio.h,中定义:,#define EOF,1,(当键盘输入,Z,或遇到文件结束标志时,其值为,-1,),14,15,16,类似,P98,习题,10,(1)1+3+5+99(2)2+4+6+100(3)1-2+3-4+99-100,(4),(5),#include,“,stdio.h,”,void wait_a_char(char c)char ch;while(ch=getchar()!=c);return();,P83,例,17,:口令检查函数,将循环体合并到了条件表达式中,P12,例,6,:求,1+2+3+10,main()int s=0,i=1;,while(i=10)s=s+i;i=i+1;,printf(“s=%dn”,s);,课后练习,main()int s=0,i=1;,do s=s+i;i=i+1;while(i=10);,printf(“s=%dn”,s);,P85,例,18,:搬砖问题。,main()int x=0,y,z;,while(x=8)y=0;,while(y=11)z=36-x-y;if(4*x+3*y+z/2=36),printf(“men:%d”,x);printf(“women:%d”,y);printf(“children:%dn”,z);,y+;,x+;,36,块砖,,36,人搬;男搬,4,,女搬,3,,两个小孩抬一砖。要求一次搬完,问男、女、小孩各若干?,穷举法,设男、女、小孩各为,x,、,y,、,z,人,则:,4x+3y+z/2=36,x+y+z=36,可得:,0,x9,0,y12,2,z,36,算法分析:,在某一范围内逐个验证是否满足要求的方法称为穷举法,P99,习题,7,:百马百担问题,P99,习题,6,:换零钱问题,P99,习题,8,:客票问题,P99,习题,9,:验证欧拉公式,类似问题:,若问有几种解决方法,则应如何修改程序?,用变量,k,作为计数器,在,if,语句中增加“,k+;,”,语句,P87,例,19,:爱因斯坦阶梯问题。,设有一阶梯,每步跨,2,阶,最后余,1,阶;每步跨,3,阶,最后余,2,阶;每步跨,5,阶,最后余,4,阶;每步跨,6,阶,最后余,5,阶;每步跨,7,阶,正好到阶梯顶。问共有多少阶梯?,穷举法,设共有,x,个台阶,则:,x%2=,=1 x%3=,=2 x%5=,=4 x%6=,=5 x%7=,=0,算法分析:,X,是奇数,X,是,7,的倍数,X,:,7,7+7,7+7+7,7+7+7+7,7+7+7+7+7,X,:,7,7+14,7+14+14,哪个,X,满足,?,要逐个验证,当,中有一者不满足时,,便验证,X,的下一个值是否满足,main(),int x=7,;,while (,x%3,=,2&x%5,=,4&x%6,=,5,),x+=14,;,printf,(“,flight of stairs=%dn,”,x,),;,当,中有一者不满足时,,便验证,X,的下一个值是否满足,运行结果,:,flight of stairs=119,(,x%3!=2|x%5!=4|x%6!=5,),X,取第一个值,7,当中有一者不满足时,X,取下一个值,X+14,输出,X,的值,P87,例,19,(续):,程序中有无错误,?,P87,例,20,:欧几里德算法,求非负整数,u,和,v,的最大公因数,迭代法,不断由旧值递推出新值的方法,辗转相除,(,设,u=24,v=15,),:,1,15,24,15,9,int gcd(int u,int v)int r;r=u%v;while(r!=0)u=v;v=r;r=u%v;return(v);,u=24v=15,r=u%v=9,u=v=15v=r=9,r=u%v=6,u=v=9v=r=6,r=u%v=3,u=v=6v=r=3,r=u%v=0,1,9,15,9,6,1,6,9,6,3,2,3,6,6,0,u=v=3v=r=0,r=0,时,,v,为所求,v=0,时,,u,为所求,int gcd(int u,int v)int r;while(v!=0)r=u%v;u=v;v=r;return(u);,r=u%v,当,(r!=0),时,v,为所求,u=v,v=r,r=u%v,P80,例,11,:,人口增长问题。,main(),float m=12;,int n=1;,while(n=10),m=m*(1+0.02);,n=n+1;,printf(“%fn”,m);,按年,2%,的增长速度,现有,12,亿人,则,10,年后将有多少人?,算法分析:,迭代法,设现有人口为,m=12,亿,则:,1,年后人口:,m(1+2%),m,2,年后人口:,m(1+2%),m,3,年后人口:,m(1+2%),m,10,年后人口:,m(1+2%),m,因此:,初值:,m=12,迭代公式:,m=m(1+2%),终止条件:,10,年,课后作业及上机任务,教材,P98,习题:,11,、,13(4)(6)(9),、,2(3)(5),上机调试,P98,习题,10,、,12,编写并调试本节例题,(1)1+3+5+99(2)2+4+6+100(3)1-2+3-4+99-100,(4),(5),课后练习,for(,初始表达式,;,条件表达式,;,修正表达式,),循环体,;,二、,for,语句,Y,条件表达式,修正表达式,N,Y,初始表达式,循环体,N,s=0;for(i=1;i=10;i+)s=s+i;,s=0;i=1,;,for(;i=10;i+)s=s+i;,初始表达式;,while(,条件表达式,),循环体,;,修正表达式;,执行过程,for(s=0,i=1;i=10;)s=s+i;i+,s=0;i=1,;,while(i=10)s=s+i;i+;,1,、,省略初始表达式时,分号不能省。,2,、省略修正表达式时,循环体内应有改变条件表达式的值的语句。,说明:,形状,形状,main()int i,j;for(i=1;i=9;i+)printf(“%4d”,i);printf(“n”);for(i=1;i=9;i+)printf(“%c”,-);printf(“n”);for(i=1;i=9;i+)for(j=1;j=9;j+)printf(“%4d”,i*j);printf(“n”);,P91,例,22,:打印九九乘法表,形状,1 2 3 4 5 6 7 8 91,2,3 4 5 6 7 8 9,2 4,6,8 10 12 14 16 18,3 6 9,12,打印表头,9,个数字,打印虚线,打印,表体,for(i=1;i=9;i+)for(j=1;,j=i,;j+)printf(“%4d”,i*j);printf(“n”);,打印,表体,for(i=1;i=9;i+)for(j=0;j=i-1;j+)printf(“%4c”,);for(,j=i,;j3,是否为素数,main(),int n,m,yes=1;,scanf(“%d”,m=n-1,求,100200,间的全部素数,课后练习:,也可用,n/2,或,sqrt(n),P80,例,12,:,兔子繁殖问题(,Fibonacci,提出的),P94,例,24,:,打印,Fibonacci,数列前,n,项,main()int n,m;,long,f1=1,f2=1,f3;scanf(“%d”,printf(“%ld%ld”,f1,f2);,for(m=3;,m=n,;m+),f3=f1+f2;,f1=f2;,f2=f3;,printf(“%d”,f3);,printf(“n”);,设有一对新生兔子,从第,3,个月开始,每个月都生一对兔子。按此规律,若所有兔子都不死,问一年后共有多少对兔子?,迭代法,算法分析:,月,:1 2 3 4 5 6 7 8,1,-,1,1,1,1,1,1-1,1,1,-,1,1,1,-,1,1,1,1,1,-,1,1,1,-,1,1,1,1,1,1,1,1,-,1,1,1,1,1,兔,:1 1 2 3 5 8 13 21,f1 f2,1,1,f3=f1+f2,2,f1 f2,f3=f1+f2,3,f1 f2,f3=f1+f2,5,f1 f2,f3=,初始条件,终止条件,迭代公式,思考:,f1=f2,和,f2=f3,能否对换位置?不,main()int x,y,z;for(x=0;x20;x+)for(y=0;y33;y+)z=100-x-y;if(5*x+3*y+z/3=100)printf(“x=%d”,x);printf(“y=%d”,y);printf(“z=%dn”,z);,补充例题:百钱百鸡问题,P85,例,18,:搬砖问题,P99,习题,7,:百马百
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!