
第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香键继结#include//程序中要调用求平方根函数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 #include //程序中要调用求平方根函数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#includeint 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 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中的小者)#includeS2: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 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 算法步骤

if语句的一般形式形式1没有else子句部分if(表达式)语句1if(表达式)语句1【else语句2]形式2有else子句部分if (表达式)表达式“可以是关系表达式语句1逻辑表达式,甚至是数值表达else式语句2方括号内的部分(即else子句)为可选的,既可以有,也可以没形式3在else部分又嵌套了多层的if语句有语句1if(表达式1)语句2elseif(表达式2)语句1和语句2可以是一个简单语句3elseif(表达式3)的语句,也可以是一个复合语::句,还可以是另一个if语句语句melseif(表达式m)else语句m+1
if语句的一般形式 if (表达式) 语句 1 [ else 语句2 ] “表 达式 ”可以是关系表达式 、 逻辑表达式,甚至是数值表达 式 方括号内的部分 ( 即else子句 ) 为 可选的,既可以有,也可以 没 有 语句 1和语句 2可以是一个简单 的语句,也可以是一个复合语 句,还可以是另一个if语句 if(表达式 ) 语句 1 形式 1 没有else子句部分 if (表达式 ) 语句 1 else 语句 2 形式 2 有else子句部分 if(表达式 1 ) 语句 1 else if(表达式 2 ) 语句 2 else if(表达式 3 ) 语句 3 ⋮ ⋮ else if(表达式m) 语句 m else 语句m+ 1 形式 3 在else部分又嵌套了多层的if语句

关系运算符和关系表达式在C语言中,比较符(或称比较运算符)称为关系运算符。所谓关系运算”就是“比较运算”,将两个数值进行比较,判断其比较的结果是否符合给定的条件
关系运算符和关系表达式 在C语言中,比较符(或称比较运算符)称为关系运算符。所谓“关系运算”就 是“比较运算”,将两个数值进行比较,判断其比较的结果是否符合给定的 条件

关系运算符及其优先次序高算术前4种关系运算符的优先级别相同,后2种也相同。(小于)前4种高于后2种。运算符关系运算符的优先级低于算术运算符。(小于等于)优关系运算符的优先级高于赋值运算符。(大于)关系先运算符级(大于等于)>=c>a+b等效于c>(a+b)关系运算符的优先级低于算术运算符)(等于)a>b==c等效于(a>b)==c(大于运算符>的优先级高于相等运算符==)a==bc等效于a=(b>c(关系运算符的优先级高于赋值运算符)
关系运算符及其优先次序 < (小于) 关系 运算符 1 2 (大于) 4 >= (大于等于) 5 == (等于) 6 != (不等于) • 前4种关系运算符的优先级别相同,后2种也相同。 前4种高于后2种。 • 关系运算符的优先级低于算术运算符。 • 关系运算符的优先级高于赋值运算符。 算术 运算符 赋值 运算符 高 优 先 级 低 c>a+b等效于c>(a+b)(关系运算符的优先级低于算术运算符) a>b==c等效于(a>b)==c(大于运算符>的优先级高于相等运算符==) a==bc等效于a=(b>c)(关系运算符的优先级高于赋值运算符)

关系表达式用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。关系表达式的值是一个逻辑值,即真”或“假”。在C的逻辑运算中,以1”代表“真”,以“0”代表“假”若a=3.b=2,c=1,则:d=a>b,由于a>b为真,因此关系表达式a>b的值为1,所以赋值后d的值为1。f=a>b>c,则f的值为O。因为“>”运算符是自左至右的结合方向,先执行“a>b"得值为1,再执行关系运算1>c",得值0,赋给f,所以f的值为0
关系表达式 • 用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。 • 关系表达式的值是一个逻辑值,即“真”或“假”。 • 在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”。 若a=3,b=2,c=1,则: d=a>b,由于a>b为真,因此关系表达式a>b的值为1,所以赋值后d的值为1。 f=a>b>c,则f的值为0。因为“>”运算符是自左至右的结合方向,先执行“a>b”得值为 1, 再执行关系运算“1>c”,得值0,赋给f,所以f的值为0

逻辑运算符和逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式
逻辑运算符和逻辑表达式 用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式