第4章选择结构程序设计
4 选择结构程序设计 第 章
选择结构和条件判断C语言有两种选择语句条件if语句,用来实现两个分支的选择结构Bswitch语句,用来实现多分支的选择结构
选择结构和条件判断 条件 A B C语言有两种选择语句 • if语句,用来实 现两个分支的选 择结构 • switch语句,用 来实现多分支的 选择结构
if语句例题口CAWINDOWS1system32/cmd.exeX【例4.1】在例3.5的基础上对程序进行改进。题目要求解得ax2+bx+c=0eguation hasn'treal roots音键继绣台按方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证b2-4ac≥0需要在程序中进行判别,如果b2-4ac≥0,就计算并输出方程的两个实根C:AWINDOWS)system32)cmd.exe口X如果b2-4ac<0就输出“此方程无实根”的信息。alroots-0.29#include<stdio.h>香键继结#include<math.h>//程序中要调用求平方根函数sqrtint main()doublea,b.c.discx1,x2.p.g://disc是判别式sqrt(b*b-4ac)1输入a.b.cScanf("%lf%lf%lf"&a.&b.&c)://输入双精度浮点型变量的值要用格式声明"%lf"disc=b*b-4*a*c;计算disc=b2-4acif(disc<0)//若b*b-4ac<0NVprintf("Thisequationhasntrealroots\n")://输出此方程无实根disc<0else//b*b-4ac≥0p=-b/(2.0*a);计算×1,X2q=sqrt(disc)/(2.0+a):输出此万程无x1=p+qx2=p-q:/求出方程的两个根护程序中的缺陷如何输出X1X2printf("realroots:/nx1=%7.2f/nx2=%7.2f/n"x1.x2)继续改进?学return 0;7结束
if语句例题 【例4.1】在例3.5的基础上对程序进行改进。题目要求解得ax2+bx+c=0 方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证b2-4ac≥0。 需要在程序中进行判别,如果b2-4ac≥0,就计算并输出方程的两个实根, 如果b2-4ac<0,就输出“此方程无实根”的信息。 #include<stdio.h> #include<math.h> //程序中要调用求平方根函数sqrt int main() { double a,b,c,disc,x1,x2,p,q; //disc是判别式sqrt(b*b-4ac) scanf("%lf%lf%lf",&a,&b,&c); //输入双精度浮点型变量的值要用格式声明"%lf" disc=b*b-4*a*c; if(disc<0) //若b*b-4ac<0 printf("This equation hasn't real roots\n"); //输出“此方程无实根” else //b*b-4ac≥0 { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q;x2=p-q; //求出方程的两个根 printf("real roots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2); //输出方程的两个根 } return 0; } 结束 输出x1 ,x2 N Y 计算disc=b2-4ac 计算x1 ,x2 输入a,b,c disc<0 输出“此方程无 程序中的缺陷如何 根” 继续改进?
用if语句实现选择结构【例4.2】输入两个实数,按由小到大的顺序输出这两个数,解题思路:只要做一次比较,然后进行一次交换即可。用if语句实现条件判断。OC:AWINDOWSIsystem32/cmd.exe#include<stdio.h>int main()3.60任意键继续float a,b,t:scanf("%f.%f"&a.&b)if(a>b)t//将a和b的值互换两个变量值的互换t=a;a=b;//把变量b的值赋给变量a,a的值等于b的值a=b;b=a://再把变量a的值赋给变量b,变量值没有改变b=t;S因此,为了实现互换,必须借助于第三个变量printf("%5.2f.%5.2f\n",a.b):retum 0;能不能不借助第三个变量实7现互换?
用if语句实现选择结构 【例4.2】输入两个实数,按由小到大的顺序输出这两个数。 #include <stdio.h> int main() { float a,b,t; scanf("%f,%f",&a,&b); if(a>b) { //将a和b的值互换 t=a; a=b; b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; } 解题思路: 只要做一次比较,然后进行一次交换即可。用if语句 实现条件判断。 两个变量值的互换 因此,为了实现互换,必须借助于第三个变量 a=b; //把变量b的值赋给变量a,a的值等于b的值 b=a; //再把变量a的值赋给变量b,变量b值没有改变 能不能不借助第三个变量实 现互换?
算法步骤用if语句实现选择结构S1:ifa>b,将a和b对换【例4.3】输入3个数a,b,c,要求按由小到大的顺序输出(交换后,a是a、b中的小者)#include<stdio.h>S2:ifa>C,将a和c对换intmaino)(交换后,a是a、c中的小者1因此a是三者中最小者)floata,b,c,t;scanf("%f.%f.%f&a.&b.&c);S3:ifb>c,将b和c对换if(a>b)(交换后,b是b、c中的小者tt=a;//借助变量t,实现变量a和变量b互换值也是三者中次小者)a=b;b=tS4:顺序输出a.b,c1//互换后,a小于或等于bif(a>c)Ct=a;//借助变量t,实现变量a和变量c互换值a=c;在经过第1次互换值后,a≤b,经过第2次互换值后c=t,a≤c,这样a已是三者中最小的(或最小者之一),但//互换后,a小于或等于c是b和c谁大还未解决,还需要进行比较和互换。经if(b>c)//还要过第3次互换值后,a≤b≤c。//借助变量t,实现变量b和变量c互换值1t=b;b=c;c=t;口C:AWINDOWS)system32(cmd.exeX1/互换后,b小于或等于c1printf("%5.2f.%5.2f.%5.2f/n",a.b.c)://顺序输出a,b.c的值3.007.00请按任意键继续return 0;
用if语句实现选择结构 【例4.3】输入3个数a,b,c,要求按由小到大的顺序输出。 #include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) { t=a; //借助变量t,实现变量a和变量b互换值 a=b; b=t; } //互换后,a小于或等于b if(a>c) { t=a; //借助变量t,实现变量a和变量c互换值 a=c; c=t; } //互换后,a小于或等于c if(b>c) //还要 { t=b; //借助变量t,实现变量b和变量c互换值 b=c; c=t; } //互换后,b小于或等于c printf("%5.2f,%5.2f,%5.2f\n",a,b,c); //顺序输出a,b,c的值 return 0; } 在经过第1次互换值后,a≤b,经过第2次互换值后 a≤c,这样a已是三者中最小的(或最小者之一),但 是b和c谁大还未解决,还需要进行比较和互换。经 过第3次互换值后,a≤b≤c。 S1: if a>b,将a和b对换 (交换后,a是a、b中的小者) S2: if a>c,将a和c对换 (交换后,a是a、c中的小者, 因此a是三者中最小者) S3: if b>c,将b和c对换 (交换后,b是b、c中的小者, 也是三者中次小者) S4: 顺序输出a,b,c 算法步骤