选择结构程序设计典型例题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1选择结构程序设计举例C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构2例1求方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证。需要在程序中进行判别,如果,就计算并输出方程的两个实根,否则就输出“方程有耳共轭复根”的信息。(教材P85例4.14)02cbxax042acb042acb3求ax2+bx+c=0方程的解首先要注意的问题:1、a=0,方程不是二次方程2、b2-4ac=0,有两个相等的实根3、b2-4ac0,有两个不相等的实根4、b2-4ac0,有两个共轭复根5、如何判断实数为零(或大于零,或小于零)特殊条件的处理4解题思路:输入a,b,c计算discdisc0计算两实根x1,x2计算输出两共轭虚根输出x1,x2真假5#includestdio.h#includemath.hvoidmain(){doublea,b,c,disc,x1,x2,p,q;printf(“输入方程的3个系数(a,b,c):\n”);scanf(%lf%lf%lf,&a,&b,&c);if(fabs(a)=1e-6)//判断a是否为零{printf(“\n该方程不是一个二次方程!\n”);return;}elsedisc=b*b-4*a*c;6if(fabs(disc)=1e-6)printf(“方程有两个相等实根:%8.4f\n”,-b/(2*a));elseif(disc1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(“方程有两个相等实根:\n”);printf(“x1=%7.2f\nx2=%7.2f\n”,x1,x2);}else{p=-b/(2*a);q=sqrt(-disc)/(2*a);printf(“方程有两个共轭复根:\n”);printf(“x1=%7.2f+%7.2fi\n”,p,q);//打印虚根;printf(“x2=%7.2f-%7.2fi\n”,p,q);}}7例2输入两个实数,按代数值由小到大的顺序输出这两个数。8解题思路:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●AB互换前●★AB互换后9★●ABC★10★●ABC★●11ABC★●★●12#includestdio.hvoidmain(){floata,b,t;scanf(%f,%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f\n,a,b);}将a和b的值互换如果ab13#includestdio.hvoidmain(){floata,b,t;scanf(%f,%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f\n,a,b);}选择结构,用if语句实现的14例3输入3个数a,b,c,要求按由小到大的顺序输出。15解题思路:可以先用伪代码写出算法:ifab,a和b对换(a是a、b中的小者)ifac,a和c对换(a是三者中最小者)ifbc,b和c对换(b是三者中次小者)顺序输出a,b,c16#includestdio.hvoidmain(){floata,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);}如果ab,将a和b对换a是a、b中的小者17#includestdio.hvoidmain(){floata,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);}如果ac,将a和c对换a是三者中的小者18#includestdio.hvoidmain(){floata,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);}如果bc,将b和c对换b是三者中的次小者19例4写一程序,判断某一年是否闰年。解题思路:在前面已介绍过判别闰年的方法本例用不同的方法编写程序20例4写一程序,判断某一年是否闰年。设:leap代表闰年信息,leap=1闰年,leap=0非闰年不能被4整除非润年被4整除,但不能被100整除润年被100整除,又能被400整除润年其他,非闰年非润年21判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表达式值为1,则闰年;否则为非闰年22用变量leap代表是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息23解法1#includestdio.hvoidmain(){intyear,leap=0;scanf(“%d”,&year);/*输入年份值*/if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap==1)printf(“%disleap”,year);elseprintf(“%disnotleap”,year);}24解法2:#includestdio.hvoidmain(){intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.\n);}标志变量与if(leap!=0)含义相同25#includestdio.hintmain(){intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.\n);return0;}采取锯齿形式26#includestdio.hvoidmain(){intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.\n);}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;27#includestdio.hvoidmain(){intyear,leap;printf(enteryear:);scanf(%d,&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.\n);}if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;28例5运输公司对用户计算运输费用。路程(skm)越远,每吨·千米运费越低。标准如下:s250没有折扣250≤s5002%折扣500≤s10005%折扣1000≤s20008%折扣2000≤s300010%折扣3000≤s15%折扣29解题思路:设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d总运费f的计算公式为f=p×w×s×(1-d)30折扣的变化规律:折扣的“变化点”都是250的倍数在横轴上加一种坐标c,c的值为s/250c代表250的倍数当c1时,表示s250,无折扣1≤c2时,表示250≤s500,折扣d=2%2≤c4时,d=5%;4≤c8时,d=8%;8≤c12时,d=10%;c≥12时,d=15%31#includestdio.hvoidmain(){intc,s;floatp,w,d,f;printf(pleaseenterprice,weight,discount:);scanf(%f,%f,%d,&p,&w,&s);if(s=3000)c=12;elsec=s/250;输入单价、重量、距离32switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}33f=p*w*s*(1-d/100);printf(“freight=%10.2f\n”,f);}34例6(教材P89例4.18)依法纳税问题。标准如下:应纳税额=(收入-3500)应纳税额≤15003%1500应纳税额≤450010%4500应纳税额≤900020%9000应纳税额25%35解题思路:设个人收入:income应纳税额:s个人纳税:tax36税率的变化规律:税率的“变化点”都是1500的倍数设整型变量c,c的值为s/1500向上取整c代表1500的倍数当c=0时,税率=0.0;当c=1时,税率=0.03;1c≤3时,税率=0.10;3c≤6时,税率=0.20;c6时,税率=0.25;37#includestdio.h#include“math.h”voidmain(){intc;floatincome,s,tax,t1,t2,t3;printf(pleaseenteryourincome:\n);scanf(%f,&income);if(income=3500)s=0;elses=incomme-3500;c=ceil(s/1500);//函数ceil(x),求=x的最小整数t1=1500*0.03;//0---1500段纳税t2=3000*0.10;//1500---4500段纳税t3=4500*0.20;//4500---9000段纳税38switch(c){case0:tax=0;break;case1:tax=s*0.03;break;case2:case3:tax=t1+(s-1500)*0.10;break;case4:case5:case6:tax=t1+t2+(s-

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功