您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第4章选择结构程序设计
第4章选择结构程序设计4.1选择结构和条件判断4.1.1if语句4.1.2switch语句4.2选择结构程序综合举例4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票处理这些问题,关键在于进行条件判断。由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断。4.1选择结构和条件判断C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构4.1.1选择结构和条件判断——if语句例4.1在例3.5的基础上对程序进行改进。题目要求是求方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证。需要在程序中进行判别:,计算并输出方程的两个实根。否则,输出“方程无实根”的信息。02cbxax20axbxc240bac240bac算法:输入a,b,c计算:disc=b2-4acdisc0计算x1,x2输出无实根输出x1,x2假真#includestdio.h#includemath.hintmain(){doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-15程序:if(disc0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}-150为真#includestdio.h#includemath.hintmain(){doublea,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为8if(disc0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}80为假p的值变为-1q的值变为0.71x1的值变为-0.29x2的值变为-1.71if(disc0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}选择结构,用if语句实现的if(条件表达式){语句序列1}else{语句序列2}if(disc0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}复合语句例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。4.1.1选择结构和条件判断——if语句解题思路:假设fa、fb为float变量,且的fa值较小的值只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●fafb互换前●★fafb互换后4.1.1选择结构和条件判断——if语句★●fafbfc★4.1.1选择结构和条件判断——if语句123★●#includestdio.hintmain(){floatfa,fb,ft;scanf(%f,%f,&fa,&fb);if(fafb){ft=fa;fa=fb;fb=ft;}printf(%5.2f,%5.2f\n,fa,fb);return0;}//将fa和fb的值互换//如果fafb#includestdio.hintmain(){floatfa,fb,ft;scanf(%f,%f,&fa,&fb);if(fafb){ft=fa;fa=fb;fb=ft;}printf(%5.2f,%5.2f\n,fa,fb);return0;}选择结构,用if语句实现的if(条件表达式){语句序列}例4.3输入3个数a,b,c,要求按由小到大的顺序输出。算法:假定a是三者中最小者,b是三者中次小者,c是三者中最大者。输入a,b,cab?abYNac?acYNbc?bcYNabc683ab?ac?63bc?86#includestdio.hintmain(){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);return0;}//如果ab,将a和b对换//a是a、b中的小者//如果bc,将b和c对换//b是三者中的次小者//如果ac,将a和c对换//a是三者中的小者例4.4编程实现分段函数19开始结束输入xx0?y=x+1x1?y=1y=x3YYNNifelseifelseif(x0)y=x+1;elseif(x1)y=1;elsey=x*x*x;31,01,011xxyxxx#includeiostreamusingnamespacestd;intmain(){doublex,y;printf(“Pleaseinputx=“);scanf(“%f”,&x);if(x0){y=x+1;printf(x=%fy=x+1=%f\n,x,y);}elseif(x1)//0≤x1{y=1;printf(x=%fy=%f\n,x,y);}else//1≤x{y=x*x*x;printf(x=%fy=x*x*x=%f\n,x,y);}return0;}20多个if语句嵌套时,else与最近的上一个if语句配对。if(条件表达式1){语句序列1}elseif(条件表达式2){语句序列2}else{语句序列3}比较下面两个程序://************************程序(1)************************if(i%3==0)if(i%7==0)couti“能被3、7整除”endl;elsecouti“能被3整除,但不能被7整除”endl;21//************************程序(2)************************if(i%3==0){if(i%7==0)couti“能被3、7整除”endl;}elsecouti“不能被3整除”endl;{//描述i①}{//描述i②}{//描述i③}{//描述i④}if语句的一般形式:格式2:if(表达式){语句序列1}else{语句序列2}22格式1:if(表达式){语句序列}格式3:if(表达式1){语句序列1}elseif(表达式2){语句序列2}elseif(表达式3){语句序列3}…else{语句序列n}如果语句序列仅有一条语句,则可省略大括号对{}。4.1.2多分枝选择——switch语句语句格式:switch(表达式){case数值1:语句序列1;…...case数值n:语句序列n;[default:语句序列n+1;]}表达式的值?计算表达式模块1模块2模块3模块n…数值1数值2数值3数值nswitch多分枝结构图整型、字符型、枚举型数值:常量表达式4.1.2多分枝选择——switch语句例4.6编写程序,将百分制的学生成绩转换为优秀、良好、中等、及格和不及格的5级制成绩。标准为:switch(成绩){case:优}case:良case:中case:及格default:不及格表达式:成绩/10#includeiostreamusingnamespacestd;intmain(){intold_grade;//声明变量,成绩coutPleaseinputthescore:;cinold_grade;return0;}25…switch(old_grade/10)//根据转换值进行分支选择{case10:case9:printf(“优秀\n“);break;case8:printf(“良\n“);break;case7:printf(“中\n“);break;case6:printf(“及格\n“);break;default:printf(“不及格\n“);}26break语句的作用case语句不改变控制流程,可加break语句提前退出switch结构。输入:100输出:优秀几点注意:例如:intc;switch(c){case‘A’:…case65:…}因为:常量表达式不能重复27例如:intc;switch(c){case10:case9:printf(“优\n”);}但case10,9:printf(“优\n”);•各个case(包括default)语句的次序无严格限定。例4.7编写程序,用switch语句处理菜单命令。解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。4.1.2多分枝选择——switch语句#includestdio.hintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;case'b':case‘B’:action2(a,b);break;default:putchar(‘\a’);}return0;}输入a或A调用action1函数,执行A操作voidaction1(intx,inty){printf(x+y=%d\n,x+y);}#includestdio.hintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;case'b':case‘B’:action2(a,b);break;default:putchar(‘\a’);}return0;}输入b或B调用action2函数,执行B操作voidaction2(intx,inty){printf(x*y=%d\n,x*y);}#includestdio.hintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;case'b':case‘B’:action2(a,b);break;default:putchar(‘\a’);}return0;}输入其他字符发出警告这是一个非常简单的示意程序实际应用中,所指定的操作可能比较复杂:A:输入全班学生各门课的成绩B:计算并输出每个学生各门课的平均成绩C:计算并输出各门课的全班平均成绩D:对全班学生的平均
本文标题:第4章选择结构程序设计
链接地址:https://www.777doc.com/doc-2195314 .html