高级语言程序设计:ch05-流程控制

举报
资源描述
第五章第五章 流程控制流程控制n顺序结构顺序结构n分支结构分支结构n循环结构循环结构n程序设计实例程序设计实例n本章小结本章小结顺序结构顺序结构n属性属性某部分若执行某部分若执行,则语句顺序全部被执行则语句顺序全部被执行若不执行,则全部语句一个也不执行若不执行,则全部语句一个也不执行n形式形式 DS DS DS 分支结构分支结构逻辑分支结构逻辑分支结构n语法语法if语句语句 if (表达式表达式)语句语句 if (表达式表达式)语句语句 else 语句语句n形式形式if(e)S1 else S2if(e)Sn执行过程与执行过程与PAD图图 if(e)S1 else S2eS1FS2TS1eS2n例例5.1 float max(float a,float b)if(ab)return a;elsereturn b;return aabreturn bn形式二形式二if (e)SeSF Seif语句应注意的问题语句应注意的问题n布尔表达式布尔表达式n可以嵌套可以嵌套nelse归属问题归属问题if (ab)if (bc)x=0;else x=1;abx=1 x=0bcabx=1 x=0bcnelse 属于最前边的属于最前边的 if,则,则if (ab)if (bc)x=0;else x=1;相当于相当于 if(ab)if(bc)x=0;else x=1;n前述的问题的答案是前述的问题的答案是:若若 ab 且且 bbx=1 x=0bcnelse 属于第二个属于第二个 if,则,则 if (ab)if (bc)x=0;else x=1;相当于相当于if (ab)if (bc)x=0;else x=1;n上述的问题的答案是上述的问题的答案是 若若 ab 且且 bbx=1 x=0bcn两义性两义性C标准规定标准规定:else部分与前面最邻近的一个没有配对部分与前面最邻近的一个没有配对 的的 if 配对配对第二种方案解释。第二种方案解释。若想描述第一种方案的结构只好用若想描述第一种方案的结构只好用 、将中间将中间的的“if()语句语句”括起来,构成复合语句。括起来,构成复合语句。abx=1 x=0bcn例例5.3 求方程求方程 ax2+bx+c=0 的根的根是一元二次方程是一元二次方程(a0)有实根有实根(0)两个不同的实根两个不同的实根(0)两个相同的实根两个相同的实根(=0)有虚根有虚根(0)是一元一次方程是一元一次方程(a=0,b0)是恒等式是恒等式(a=0,b=0)恒等式成立恒等式成立(c=0)恒等式不成立恒等式不成立(c0)解二次方程解二次方程读入读入 a,b,c求解求解 x1,x2输出输出 x1,x2结束结束二次方程二次方程a0b0一次方程一次方程退化退化0=0c=0矛盾矛盾c=0一次方程一次方程常数等式常数等式x=c/b=0两实根两实根:x1=x2两虚根两虚根:x1,x2二实根二实根:x1,x20计算计算否则否则if(a!=0)delta=b*b-4*a*c;if(delta0)printf(x1=%g,x2=%gn,(-b+sqrt(delta)/(2*a),(-b-sqrt(delta)/(2*a);else if(delta=0)printf(x1=x2=%fn,-b/(2*a);elseprintf(x1=%g+%gi,x2=%g-%gin,-b/(2*a),sqrt(-delta)/(2*a),-b/(2*a),sqrt(-delta)/(2*a);else /以下处理以下处理a=0的情况的情况 if(b!=0)printf(x=%gn,-c/b);elseif(c=0)printf(0=0!n);else printf(%g=0n,c);演示例演示例5.3程序程序算术值控制多分支结构算术值控制多分支结构switch (e)case C1:S1 break;case C2:S2 break;.case Cn:Sn break;default:S0 switch (e)case C1:S1 case C2:S2 .case Cn:Sn default:S0第一种形式多分支第一种形式多分支第二种形式多分支第二种形式多分支switch (e)case C1:S1 break;case C2:S2 break;.case Cn:Sn break;default:S0 其他其他计算计算 e 值值e=?S1 S2 S3 S4 S5S0C1C2C3C4C5结束结束计算计算 e 值值e=C1S1e=C2S2e=C3S3e=C4S4e=C5S5S0switch (e)case C1:S1 case C2:S2 .case Cn:Sn default:S0S1S2S3S4S5e=?C1C2C3C4C5S6其它其它S1S2S3S4S5e=?C1C2C3C4C5S6其它其它n例例5.4 高速公路每公里的收费标准按不同种类汽车如下高速公路每公里的收费标准按不同种类汽车如下:小汽车(小汽车(car)0.50 元元 卡车(卡车(truck)1.00 元元 大客车(大客车(bus)1.50 元元编程序,为某高速公路收费站计算各种车辆的收费额。编程序,为某高速公路收费站计算各种车辆的收费额。单价单价=0.50单价单价=1.00单价单价=1.50车型车型小汽车小汽车卡车卡车大客车大客车录入车型、行驶里程录入车型、行驶里程输出:行驶费单价输出:行驶费单价里程里程#include stdio.henum tsort car,truck,bus sort;/车种说明车种说明int i;float mileage,price ;/里程、费用里程、费用void main()/输入车种输入车种 printf (“please choose(1.car 2.truck 3.bus):”);scanf(“%d”,&i);switch(i)case 1:sort =car;break;case 2:sort =truck;break;case 3:sort =bus;printf(“please input mileage:“);/输入里程输入里程 scanf(“%f”,&mileage);switch (sort)/计算计算 case car:price =0.50;break;case truck:price =1.00;break;case bus:price =1.50;printf(“cost=%.2fn”,price*mileage);/输出输出 演示例演示例5.4程序程序n计算数列计算数列 的前的前n项和。项和。s=0;k=1;开始开始k=n结结束束FTs=s+ak;k=k+1;s=0;k=1;s=s+ak;k=k+1;开始开始k=n结束结束FT循环结构循环结构n循环循环指程序的某部分被反复的重复执行多次指程序的某部分被反复的重复执行多次n循环程序设计循环程序设计编写重复执行的程序编写重复执行的程序n循环体循环体被重复执行的部分被重复执行的部分nC 的三种不同的重复性语句的三种不同的重复性语句,它们是它们是while 语句语句 先判断条件的循环;先判断条件的循环;do 语句语句 后判断条件的循环;后判断条件的循环;for 语句语句 也是先判断条件的循环。也是先判断条件的循环。n需要弄清楚的需要弄清楚的循环控制方式是什么?循环控制方式是什么?控制条件是什么?控制条件是什么?重复执行部分(称为重复执行部分(称为“循环体循环体”)是什么?)是什么?先判断条件的循环结构先判断条件的循环结构n语法语法 while 语句语句 while (表达式表达式)语句语句n一般形式一般形式while(e)SSeFwhile eSn计算数列计算数列 的前的前n项和。项和。s=0;k=1;开始开始k=n结结束束FTs=s+ak;k=k+1;s=0;while k=ns+=1/(k*(k+1);开始开始结束束k=1;k+=1;void main()int n,k=1;float s=0;printf(“please input n:n”);scanf(“%d”,&n);while(keps结结束束FTe=e+r;n=n+1;r=r/n;e=1;n=1;r=1;while r epse=e+r;开始开始结束束r=r*1/n;n=n+1;float logari(float eps)int n;float e,r;e=1.0;n=1;r=1.0;while(reps)e=e+r;n=n+1;r=r/n;return e;e=1.0;n=1;r=1.0;e=2.0;n=2;r=0.5;e=2.5;n=3;r=0.1667;e=2.6667;n=4;r=0.0417;.后判断条件的循环结构后判断条件的循环结构n语法语法do 语句语句 do 语句语句 while(表达式表达式);n一般形式一般形式do S while(e);SeTdo-while eS 例例5.6 考虑本节开始的问题,编一个函数考虑本节开始的问题,编一个函数 s(n),计算数列的计算数列的ak的前的前 n 项和项和 sum=0;k=1;do-while k=n返回返回s(n)return sumsum+=1/(k*(k+1);k=k+1sum=0;k=1;sum+=ak;k=k+1;开始开始k=n结束结束FTfloat s(int n)int k;float sum;sum=0;k=1;do sum+=1.0/(k*(k+1);k+;while(k 0yy=yy+4开始开始结束结束求求 yy 后第一个闰年后第一个闰年yy 是闰年是闰年输出输出yyn=n-1/*PROGRAM find leap year*/#include stdio.hvoid main()int yy,n;printf(please input begin year:);scanf(%d,&yy);printf(please input the number of the leap year:);scanf(%d,&n);yy=(yy/4+1)*4;doif(yy%4=0)&(yy%100!=0)|(yy%400=0)printf(year%dt,yy);n-;yy=yy+4;while(n0);演示例演示例5.7程序程序例例5.8 简单迭代法简单迭代法g(x)=0 x=f(x)等价变换等价变换n采用迭代法方法求解采用迭代法方法求解x=f(x)方程的根方程的根选定一个选定一个 x的初值的初值 x0;以以 x0 代入右端计算出一个值代入右端计算出一个值 x1=f(x0)若若 x1 等于等于x0,显然,显然 x0 为根,转向为根,转向否则若否则若 x1x0 则令则令 x0=x1,转向,转向结束,停止计算结束,停止计算f(x)y=xf(x0)x0 x1f(x1)x*x2可以使用简单迭代的情况可以使用简单迭代的情况f(x2)f(x)y=xf(x1)x2x1f(x0)x*x0不可以使用简单迭代的情况不可以使用简单迭代的情况f(x2)n简单迭代方法使用条件简单迭代方法使用条件 对于方程对于方程xf(x),当任意当任意x(a,b)存在存在0 L 1,使,使|f(x)|L1 则方程则方程x=f(x)在在(a,b)上有唯一的根上有唯一的根x*且对任意初值且对任意初值x0 (a,b)时时 迭代序列迭代序列xk+1=f(xk)(k=0,1,)收敛于收敛于x*n在实际工作中,决大部分计算都是近似计算,只要在实际工作中,决大部分计算都是近似计算,只要求求 X1X0 即即X1-X0X0=X1X1=f(X0)开始开始结束结束#include stdio.h#include math.h#define eps 1e-6void main()float x0,x1;x0=0.0;x1=0.0;do x0=x1;x1=2*x0*x0*x0+0.5*x0*x0+0.093;while(fabs(x1-x0)eps);printf(x=%fn,x0);演示例演示例5.8程序程序比
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号