《C程序设计05选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C程序设计05选择结构程序设计.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 在C程序的三种结构中,分支结构是一重要结构,其中的P为条件问题:条件如何表达?逻辑运算、关系运算5.1 5.1 关系运算符关系运算符 关系运算比较运算,如:a3为一比较运算,当a=5,a3成立。结果称为“真”,否则,如:a=1,a3不成立,为假。上述表达式a3称为关系表达式。关系运算符及其优先次序关系运算符及其优先次序1.,=为同一优先级,=,!=等为同一优先级,但前者高于后者。2.关系运算符优先级低于算术运算符。C语言提供了六种关系运算符 =!=优先级为:3.关系运算符优先级高于赋值运算符。如下图:算术运算符赋值运算符关系运算符高低举例:ca+b c(a+b)ab!=c (ab)!=ca=
2、bc a=(bc a=(bc)关系表达式关系表达式关系表达式的结果值规定为1或0.如:ab,a+bb+c,(a=3)(b=5),a b,(ab)(bb)=c 成立 1b+cb 则ab值为1,所以d=1.f=abc ab为1,abc为0,所以f=0.5.2 5.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 用逻辑运算符将关系表达式、逻辑量连接起来的式子逻辑表达式。逻辑运算符及优先级 a b !a !b a&b a b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假三种:&(与),(或)!(非)其意义见真值表a&b 当a,b均为1时,才为1a b
3、 当a,b中有一个为1时,才为1!a 当a为1,!a为0,反之为1.由此看到:和&为双目运算符,!为单目运算符。优先级定义:2.&和低于关系运算符。!高于算术运算符1.!(非)优先于&(与).&优先于即:!&例:!a&b xy&c (!a)&b)(xy)&c)逻辑表达式 1.逻辑表达式的值与关系表达式值一样,真为1,假为0。例:a=4 则!a 值为0.此处只要a 0,为真.则!a值为0.a=4,b=5 a&b为1 前面已定义了逻辑表达式,以下看一看逻辑表达式的值及具体的运算。4&0 2 为1.总之,在逻辑运算中,非0值参加逻辑运算时被看成1处理.a=4,b=5 a b为1 a=4,b=5!a
4、b为12.一个逻辑表达式中的逻辑运算符并不是一定全部执行.一个实际的例子:判断年号是否为润年。如:a&b&c.则当a=0(假)时,b,c不需判断。当a=1,b=0,则不需判c.又如:a b c.当a=1时,b,c均不必判别。润年的定义:能被4整除且又能被400整除。年号能被4整除但不能被100整除。当(year%4!=0)(year%100=0&year%400!=0)为1时,year为非润年。设用变量year表示年号 当(year%4=0&year%100!=0)year%400=0)为1时,year为润年,否则为非润年。如果要判别非润年可在上述表达式前加非(!)运算符.当!(year%4=
5、0&year%100!=0)year%400=0)为1时,year为非润年。或者:即:则:5.3 if 5.3 if 语句语句条件判条件判断断5.3.1 if5.3.1 if的三种形式的三种形式 功能:当表达式值非0时,执行语句A,否则不执行语句A.表达式语句A00例如:if(xy)printf(%d,x);形式1 if(表达式)语句A其流程图:形式2 if(表达式)语句A else 语句B功能:表达式为非0,执行语句A 表达式为0,执行语句B表达式 0=0语句A语句B例:if(xy)printf(%d,x);else printf(%d,y);形式3 if(表达式1)语句1 else if(
6、表达式2)语句2else if(表达式3)语句3 else if(表达式n)语句nelse 语句n流程:表达1表达2表达3表达n语句1语句2语句3语句n语句n+1 0=0=0 0 0 0如:if(3)prinft(o.k);if(a)1.表达式可以是逻辑、关系,甚至是算术表达式。2.上述形式中的语句必须以分号结束 3.上述形式中的语句可以是由 括起来的复合语句。此时,在 外可以不用分号.注意的问题:main()float a,b,t;scabf(%f,%f,&a,&b);if(ab)t=a;a=b;b=t;printf(%5.2f,%5.2f,a,b);例5.1 输入两个实数,按代数值由小到大
7、次序输出这两个数。3.6,3.2 3.20,3.60运行情况如下:例5.2 输入三个数,按大小顺序输出。main()float a,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,a,b,c);运行情况如下:3,7,11.00,3.00,7.005.3.2.if语句的嵌套if(表达式1)内嵌ifelse内嵌if注意:else与最近的if 配对.一般形式 在上述形式的if语句中,又可以是if语句称为嵌套。if(表达式2)语句1
8、if(表达式3)语句3else 语句2else 语句4例:if()if()语句2else 语句3if ()if()语句1 else 所以:必要时加.if()语句1else例5.3 有一函数y=1 (x0)编一程序,输入一个x值,输出y值。有以下几种写法,请判断哪些是正确的?程序1:main()int x,y;scanf(d,&x);if(x=0)if(x0)y=1;else y=0;else y=1;程序3:将上述if语句改为:y=1;if(x!=0)if(x0)y=1;else y=0;程序4:y=0;if(x=0)if(x0)y=1;else y=1;5.3.3 5.3.3 条件运算符条件
9、运算符 C语言提供了一个简单的条件赋值语句或条件表达式。问题:当判断条件不论是“真”是“假”,均给同一变量赋值时,能否简化语句书写?条件运算符为?:三目运算符。功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。一般形式表达式1?表达式2:表达式3 max=ab?a:b;当ab.max a.否则maxb注:1.条件运算符优先于赋值运算符.例:max=(ab?a:b)可去掉()2.条件运算符低于关系运算符和算术运算符。例:max=ab?a:b+1 max=ab?a:(b+1)并不是 max=(ab?a:b)+1 3.条件运算符结合性为从右至左.如:ab?a:cd?c:d 相当于
10、ab?a:(cd?c:d)4.条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if.if(ab)printf(%d,a);else printf(%d,b);由于printf不是表达式,故不可用条件表达式,但可为:printf(%d,ab?a:b);5.表达式1、表达式2、表达式3可类型不同。main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%c,ch);例5.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。运行结果如下:A a
11、5.4 switch 5.4 switch 语句语句开关语句开关语句 问题:当某一表达式有n个取值,每一取值执行一语句,则如果用内嵌if十分繁锁,而用switch简单.一般形式:switch(表达式)case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default :语句n+1 例:根据成绩等级打印百分数段.switch(grade)case A:printf(85100n);case B:printf(7084n);case C:printf(6069n);case D:printf(60n);break;case D:printf(0真假p=-
12、b/(2*a)q=sqrt(delt)/(2*a)x1=p+qx2=p-qp=-b/(2*a)q=sqrt(-delt)/(2*a)输出两个相等实根:-b/(2a)delt=b*b-4*a*c输出“非二次”方程#include#include main()float a,b,c,delta,x1,x2,p,q;printf(Please input a,b,c:n);scanf(%f,%f,%f,&a,&b,&c);printf(The equation);if(fabs(a)=1e-6)printf(is not a quadratic);else delta=b*b-4*a*c;if(fabs(delta)1e-6)p=-b/(2*a);q=sqrt(delta)/(2*a);x1=p+q;x2=p-q;printf(have distinct real roots:%8.4f and%8.4fn,x1,x2);else p=-b/(2*a);q=sqrt(-delta)/(2*a);printf(has complex roots:n);printf(x1=%8.4f+%8.4fin,p,q);printf(x2=%8.4f-%8.4fin,p,q);getch();