c语言C程序的流程设计.ppt
《c语言C程序的流程设计.ppt》由会员分享,可在线阅读,更多相关《c语言C程序的流程设计.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、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、多条语句、若循环体为多条语句,应用,应用 括起来构成复合语句。括起来构成复合语句。2、循环体中应有使循环结束的、循环体中应有使循环结束的语句,否则会出现死循环。语句,否则会出现死循环。说说 明明循环结构循环结构while()语句语句dowhile()语句语句for()语句语句当当(条件条件)成立时成立时循环体循环体当当(条件条件)成立时成立时循环体循环体条件为真(非条件为真(非0即真)时,即真)时,执行循环体;然后再判断条执行循环体;然后再判断条件,为件,为真真时再执行循环体,时再执行循环体,直到条件为直到条件为假假时结束循环语时结束循环语句,执行后续语句。句,执行后续语句。先执行循环体,再判
3、断条件。先执行循环体,再判断条件。为真则执行循环体,然后再为真则执行循环体,然后再判断条件,为真时再执行循判断条件,为真时再执行循环体,直到条件为假时结束环体,直到条件为假时结束循环,执行后续语句。循环,执行后续语句。先判断后执行先判断后执行先执行后判断先执行后判断条件条件循环体循环体NY条件条件循环体循环体NYP98习题习题10:main()main()int n=0 int n=0;while while(n+=1n+=1)printfprintf(“%dt”,n%dt”,n););printfprintf(“%dn”,n%dn”,n););n=0+1n=1+12=1不成立不成立输出输出n
4、 的值的值输出输出n 的值的值输出输出n 的值的值n1230=1成立成立n=2+11=1成立成立n=00 1 2 3循环体为多个语句循环体为多个语句时要用时要用 括起来括起来应在条件表达式或应在条件表达式或循环体中改变条件循环体中改变条件表达式的值,否则表达式的值,否则会出现死循环。会出现死循环。2次次输出输出n 的值的值P98习题习题10用用do-while实现的对比:实现的对比:main()main()int n=0 int n=0;dodo printf printf(“%dt”,n%dt”,n););whilewhile(n+=1n+=1););printfprintf(“%dn”,n
5、%dn”,n););n=0+1n=1+12=1不成立不成立输出输出n 的值的值输出输出n 的值的值输出输出n 的值的值n0130=1成立成立n=2+11=1成立成立n=00 1 2 323次次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)
6、putchar(c);main()int c;c=getchar();while(c!=EOF);putchar(c);c=getchar();eehhz*1*2*312EOF为符号常数,在为符号常数,在stdio.h中定义:中定义:#define EOF 1(当键盘输入(当键盘输入Z或遇到或遇到文件结束标志时,其值为文件结束标志时,其值为-1)141516类似类似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=get
7、char()!=c);return();P83例例17:口令检查函数:口令检查函数将循环将循环体合并体合并到了条到了条件表达件表达式中式中P12例例6:求:求1+2+3+10main()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
8、/2=36)printf(“men:%d”,x);printf(“women:%d”,y);printf(“children:%dn”,z);y+;x+;36块砖,块砖,36人搬;男搬人搬;男搬4,女搬,女搬3,两个小孩抬一,两个小孩抬一砖。要求一次搬完,问男、砖。要求一次搬完,问男、女、小孩各若干?女、小孩各若干?穷穷举举法法设男、女、小孩各为设男、女、小孩各为x x、y y、z z人,则:人,则:4x+3y+z/2=36 x+y+z=36可得:可得:0 x9 0y12 2z36算法分析:算法分析:在某一范围内逐个在某一范围内逐个验证是否满足要求验证是否满足要求的方法称为穷举法的方法称为穷举
9、法P99习题习题7:百马百担问题:百马百担问题P99习题习题6:换零钱问题:换零钱问题P99习题习题8:客票问题:客票问题P99习题习题9:验证欧拉公式:验证欧拉公式类似问题:类似问题:若问有几种解决方法,若问有几种解决方法,则应如何修改程序?则应如何修改程序?用变量用变量k作为计数作为计数器,在器,在if语句中增语句中增加加“k+;”语句语句P87例例19:爱因斯坦阶梯问题。:爱因斯坦阶梯问题。设有一阶梯,每步跨设有一阶梯,每步跨2阶,最后余阶,最后余1阶;每步跨阶;每步跨3阶,最后余阶,最后余2阶;阶;每步跨每步跨5阶,最后余阶,最后余4阶;每步跨阶;每步跨6阶,最后余阶,最后余5阶;每步
10、跨阶;每步跨7阶,阶,正好到阶梯顶。问共有多少阶梯?正好到阶梯顶。问共有多少阶梯?穷举法穷举法设共有设共有x x个台阶,则:个台阶,则:x%2=x%2=1 x%3=1 x%3=2 x%5=2 x%5=4 x%6=4 x%6=5 x%7=5 x%7=0=0算法分析:算法分析:X是奇数是奇数X是是7 的倍数的倍数X:7,7+7,7+7+7,7+7+7+7,7+7+7+7+77,7+7,7+7+7,7+7+7+7,7+7+7+7+7X:7,7+14,7+14+147,7+14,7+14+14哪个哪个X X满足满足?要逐个验证要逐个验证当当中有一者不满足时,中有一者不满足时,便验证便验证X X的下一个
11、值是否满足的下一个值是否满足main()int x=7;while (x%3=2&x%5=4&x%6=5)x+=14;printf(“flight of stairs=%dn”,x);当当中有一者不满足时,中有一者不满足时,便验证便验证X X的下一个值是否满足的下一个值是否满足运行结果运行结果:flight of stairs=119(x%3!=2|x%5!=4|x%6!=5x%3!=2|x%5!=4|x%6!=5)X X取第一个值取第一个值7 7当当中有一者不满足时中有一者不满足时X X取下一个值取下一个值X+14X+14输出输出X X的值的值P87例例19(续):(续):程序中有程序中有无
12、错误无错误?P87例例20:欧几里德算法:欧几里德算法求非负整数求非负整数u和和v的最大公因数的最大公因数迭迭代代法法不断由旧值不断由旧值递推出新值递推出新值的方法的方法辗转相除辗转相除(设设u=24,v=15):115 2415 9int gcd(int u,int v)int r;r=u%v;while(r!=0)u=v;v=r;r=u%v;return(v);u=24v=15r=u%v=9u=v=15v=r=9r=u%v=6u=v=9v=r=6r=u%v=3u=v=6v=r=3r=u%v=0 1915 9 61696323660u=v=3v=r=0r=0时,时,v为所求为所求v=0时,时
13、,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=vv=rr=u%vP80例例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=12m=12亿,则:亿,则:1年后人口:年后人口:m
14、(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年年课后作业及上机任务v 教材P98习题:11、13(4)(6)(9)、2(3)(5)v 上机调试P98习题10、12v 编写并调试本节例题(1)1+3+5+99(2)2+4+6+100(3)1-2+3-4+99-100(4)(5)课后练习课后练习for(初始表达式初始表达式;条件表达式条件表达式;修正表达式修正表达式)循环体循环体;二、二、for语句语句Y条件表达
15、式条件表达式修正表达式修正表达式NY初始表达式初始表达式循环体循环体Ns=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、省略修正表达式时,、省略修正表达式时,循环体内应有改变条件循环体内应有改变条件表达式的值的语句。表达式的值的语句。说明:说明:形状形状
16、形状形状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 92 4 6 8 10 12 14 16 183 6 9 12 打印表头打印表头9个数字个数字打印虚线打印虚线打印打印表体表体for(i=1;i=9;i
17、+)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”,&n);for(m=2;m=n-1求求100200间的全部素数间的全部素数课后练习:课后练习:也可用也可用n/2或或sqrt(n)P80例例12:兔子繁殖问题(兔子繁殖问题(Fibonacci提出的)提出的)P94例例24:打印打印Fibonacci数列前数列前n项项main()int n,m
18、;long f1=1,f2=1,f3;scanf(“%d”,&n);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 2 3 4 5 6 7 8 1 1-1 11 11 11 11 11-11
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 流程 设计
限制150内