C程序设计第四版第章.ppt
《C程序设计第四版第章.ppt》由会员分享,可在线阅读,更多相关《C程序设计第四版第章.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在现实生活在现实生活中中,需要进行判断和选择的,需要进行判断和选择的情况是很多的情况是很多的处理处理这些这些问题,关键在于进行条件判断问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断一个操作之前先进行条件判断C语言有两种选择语句语言有两种选择语句:(1)if语句语句,实现两个分支的选择结构,实现两个分支的选择结构(2)switch语句语句,实现多分支的选择结构,实现多分支的选择结构 例例4.1 在例在例3.5的基础上对程序进行改进。的基础上对程序进行改进。
2、题目要求题目要求是是求求 方程的根。方程的根。 由键盘输入由键盘输入a,b,c。假设。假设a,b,c的值任意,的值任意,并不保证并不保证 。需要在程序中进行。需要在程序中进行判别,如果判别,如果 ,就计算并输出方,就计算并输出方程的两个实根,程的两个实根,否则否则就输出就输出“方程无实根方程无实根”的信息。的信息。 02cbxax042 acb042 acb解题思路:解题思路:输入输入a,b,c计算计算discdisc0计算计算x1,x2输出无实根输出无实根输出输出x1,x2真真假假#include #include int main ( ) double a,b,c,disc,x1,x2,p
3、,q; scanf(%lf%lf%lf,&a,&b,&c); disc=b*b-4*a*c;计算计算b2-4ac,disc的值变为的值变为-15 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;-150为真为真#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; sc
4、anf(%lf%lf%lf,&a,&b,&c); disc=b*b-4*a*c;计算计算b2-4ac,disc的值变为的值变为8 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;80为假为假p的值变为的值变为-1q的值变为的值变为0.71x1的值变为的值变为-0.29x2的值变为的值变为-1.71 if (disc0) printf
5、(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;选择结构选择结构,用用if语句实现语句实现的的 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2
6、fn”,x1,x2); return 0;复合语句复合语句4.2.1 用用if语句处理选择结构举例语句处理选择结构举例4.2.2 if语句的一般形式语句的一般形式 例例4.2 输入两个实数,按代数值由小到输入两个实数,按代数值由小到大的顺序输出这两个数。大的顺序输出这两个数。解题思路:解题思路:u只需要做一次比较,然后进行一次交换即可只需要做一次比较,然后进行一次交换即可u用用if语句实现条件判断语句实现条件判断u关键是怎样实现两个变量值的互换关键是怎样实现两个变量值的互换AB互换前互换前AB互换后互换后ABCABCABC#include int main() float a,b,t; sca
7、nf(%f,%f,&a,&b); if(ab) t=a; a=b; b=t; printf(%5.2f,%5.2fn,a,b); return 0;将将a和和b的值互换的值互换如果如果ab#include int main() float a,b,t; scanf(%f,%f,&a,&b); if(ab) t=a; a=b; b=t; printf(%5.2f,%5.2fn,a,b); return 0;选择结构,用选择结构,用if语句实现的语句实现的 例例4.3 输入输入3个数个数a,b,c,要求按由小,要求按由小到大的顺序输出。到大的顺序输出。解题思路:可以先用伪代码写出算法:解题思路:可
8、以先用伪代码写出算法:uif ab,a和和b对换对换 (a是是a、b中的小者)中的小者)uif ac,a和和c对换对换 (a是三者中最小者)是三者中最小者)uif bc,b和和c对换对换 (b是三者中次小者是三者中次小者)u顺序输出顺序输出a,b,c#include int 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.2fn,a,b,c); return 0;如果如果
9、ab,将,将a和和b对换对换a是是a、b中的小者中的小者#include int 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.2fn,a,b,c); return 0;如果如果 ac,将,将a和和c对换对换a是是三者三者中的小者中的小者#include int main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&c); if(ab)
10、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.2fn,a,b,c); return 0;如果如果 bc,将,将b和和c对换对换b是是三者三者中的中的次次小者小者 if (表达式表达式) 语句语句1 else 语句语句2 关系表达式关系表达式逻辑表达式逻辑表达式数值表达式数值表达式方括号内的部分为可选的方括号内的部分为可选的 if (表达式表达式) 语句语句1 else 语句语句2 简单的语句简单的语句复合语句复合语句另一个另一个if语句语句等等最常用的最常用的3种种if语句语句形
11、式形式:1. if (表达式表达式) 语句语句1 (没有没有else子句子句)2. if (表达式表达式) 语句语句1 else 语句语句2 (有有else子句子句)3. if(表达式)(表达式) 语句语句 else if(表达式)(表达式) 语句语句 else if(表达式)(表达式) 语句语句 else if(表达式)(表达式) 语句语句 else 语句语句m+1 (在在else部分又嵌套了多层的部分又嵌套了多层的if语句语句)if(number 500) cost = 0.15;else if (number 300) cost = 0.10;else if (number 100) c
12、ost = 0.075;else if (number 50) cost = 0.05;else cost=0;if (number 500) cost = 0.15;else if (number 300) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) cost = 0.05; else cost = 0;等价于等价于分号不能丢分号不能丢说明:说明:(1)整个整个if语句可写在多行上,也可写在一行上语句可写在多行上,也可写在一行上 但但都是一个整体,属于同一个语句都是一个整体,属于同一个语句(2)“语句
13、语句1”“语句语句m”是是if中的内嵌语句中的内嵌语句 内嵌语句也可以是一个内嵌语句也可以是一个if语句语句(3)“语句语句1”“语句语句m”可以是简单的语句可以是简单的语句,也可以是复合语句,也可以是复合语句4.3.1关系运算符及其优先次序关系运算符及其优先次序4.3.2 关系表达式关系表达式关系运算符关系运算符:用来对两个数值进行比较用来对两个数值进行比较的的比较运算符比较运算符语言提供种关系运算符:语言提供种关系运算符: (小于小于) = (小于或等于小于或等于) (大于大于) = (大于或等于大于或等于) = (等于等于) != (不等于不等于) 优先级相同优先级相同 (高高)优先级相
14、同优先级相同 (低低)关系关系、算术算术、赋值运算符赋值运算符的优先级的优先级算术运算符算术运算符 (高高)赋值运算符赋值运算符 (低低)关系运算符关系运算符 ca+b 等效于等效于 c(a+b)ab=c 等效于等效于 (ab)=ca=bc 等效于等效于 a=(bc 等效于等效于 a=(bc)关系表达式关系表达式u用关系运算符将两个数值或数值表达式连用关系运算符将两个数值或数值表达式连接起来的式子接起来的式子u关系表达式的值是一个逻辑值,即关系表达式的值是一个逻辑值,即“真真”或或“假假”u在在C的逻辑运算中,以的逻辑运算中,以“”代表代表“真真”,以,以“”代表代表“假假”4.4.1 逻辑运
15、算符及其优先次序逻辑运算符及其优先次序4.4.2 逻辑表达式逻辑表达式4.4.3 逻辑型变量逻辑型变量3种逻辑运算符:种逻辑运算符:&(逻辑与逻辑与) |(逻辑或逻辑或) !(逻辑非逻辑非)&和和|是双目是双目(元元)运算符运算符!是一目是一目(元元)运算符运算符逻辑表达式逻辑表达式u用逻辑运算符将关系表达式或其他逻辑量连用逻辑运算符将关系表达式或其他逻辑量连接起来的式子接起来的式子判断判断年龄年龄在在13至至17岁岁之内?之内?age=13 & age=17判断判断年龄小于年龄小于12或大于或大于65?age65ab! a! ba & ba | b 真真真真假假假假真真真真真真假假假假真真假
16、假真真假假真真真真假假假假真真假假假假真真真真假假假假逻辑运算的真值表逻辑运算的真值表逻辑运算符的优先次序逻辑运算符的优先次序! & | (!为三者中最高为三者中最高)与其他运算符的优先次序与其他运算符的优先次序 ! (高)(高)算术运算符算术运算符关系运算符关系运算符 & 和和 |赋值运算符赋值运算符 (低)(低)逻辑表达式的值应该是逻辑量逻辑表达式的值应该是逻辑量“真真”或或“假假”编译系统在编译系统在表示表示逻辑运算逻辑运算结果结果时时u以数值以数值1代表代表“真真”,以,以0代表代表“假假”但在但在判断判断一个量是否为一个量是否为“真真”时时u以以0代表代表“假假”,以非,以非0代表代
17、表“真真”注意:注意:将一个非零的数值认作为将一个非零的数值认作为“真真”(1) 若若a=4,则,则!a的值为的值为0(2) 若若a=4,b=5,则,则a & b的值为的值为1(3) a和和b值分别为值分别为4和和5,则则a|b的值为的值为1(4) a和和b值分别为值分别为4和和5,则则!a|b的值为的值为1(5) 4 & 0 | 2的值为的值为1修改后的修改后的逻辑运算真值表逻辑运算真值表ab! a! ba & ba | b 非非0非非00011非非000101假假非非01001假假01100判别某一年是否闰年,判别某一年是否闰年,用用逻辑表达式表示逻辑表达式表示闰年的条件是符合下面二者之一
18、:闰年的条件是符合下面二者之一:能被能被4整除,但不能被整除,但不能被100整除,如整除,如2008能被能被400整除,如整除,如2000u(year % 4 = 0 & year 100 !=0) | year % 400 = 0u如果表达式值为如果表达式值为1,则闰年;否则为非闰年,则闰年;否则为非闰年这是这是C99所增加的一种数据类型所增加的一种数据类型可以将关系运算和逻辑运算的结果存到可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算一个逻辑型变量中,以便于分析和运算有一种有一种if语句,当被判别的表达式的值语句,当被判别的表达式的值为为“真真”或或“假假” 时,都执
19、行一个赋值时,都执行一个赋值语句且向同一个变量赋值语句且向同一个变量赋值如:如:if (ab) max=a; else max=b;max = (a b) ? a : b;条件运算符条件运算符有一种有一种if语句,当被判别的表达式的值语句,当被判别的表达式的值为为“真真”或或“假假” 时,都执行一个赋值时,都执行一个赋值语句且向同一个变量赋值语句且向同一个变量赋值如:如:if (ab) max=a; else max=b;max = (a b) ? a : b;条件条件表达式表达式条件表达式的一般形式为条件表达式的一般形式为表达式表达式?表达式表达式: 表达式表达式条件运算符的执行顺序:条件运
20、算符的执行顺序:u求解表达式求解表达式1u若为非若为非0(真)则求解表达式(真)则求解表达式2,此时表达,此时表达式式2的值就作为整个条件表达式的值的值就作为整个条件表达式的值u若表达式若表达式1的值为的值为0(假),则求解表达式(假),则求解表达式3,表达式,表达式3的值就是整个条件表达式的值的值就是整个条件表达式的值条件运算符优先于赋值运算符条件运算符优先于赋值运算符条件运算符的结合方向为条件运算符的结合方向为“自右至左自右至左”以下为合法的使用方法:以下为合法的使用方法:uab ? (max=a):(max=b);uab ? printf(“%d”,a): printf(“%d”,b);
21、 例例4.4 输入一个字符,判别它是否大写输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到如果不是,不转换。然后输出最后得到的字符。的字符。解题思路:用条件表达式来处理,当字解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不母是大写时,转换成小写字母,否则不转换转换#include int main() char ch; scanf(%c,&ch); ch=(ch=A & ch=Z)?(ch+32):ch; printf(%cn,ch); return 0;在在if语句中又包含一个或多个语句中又
22、包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套一般形式:一般形式:if( ) if( ) 语句语句1 else 语句语句2 else if( ) 语句语句3 else 语句语句4 内嵌内嵌ifelse总是与它上面最总是与它上面最近的未配对的近的未配对的if配对配对在在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套if () if () 语句语句1 else语句语句2内嵌内嵌if 限定了内嵌限定了内嵌if范围范围 例例4.5有一函数有一函数: 编一程序编一程序,输入一个输入一个x值值,要求输出相应要求输出相应的的y值。值。)0(1)0(0
23、)0(1xxxy解题思路:解题思路:u用用if语句检查语句检查x的值,根据的值,根据x的值决定赋予的值决定赋予y的值的值u由于由于y的可能值不是两个而是三个,因此不的可能值不是两个而是三个,因此不可能只用一个简单的可能只用一个简单的(无内嵌无内嵌if)的的if语句来语句来实现实现解题思路:解题思路:方法方法1(1) 先后用先后用3个独立的个独立的if语句处理:语句处理:输入输入x若若 x 0, 则则y = 1输出输出x和和yscanf(%d,&x);if(x0) y = 1;printf(x=%d,y=%dn,x,y);解题思路:解题思路:方法方法2(2) 用一个嵌套的用一个嵌套的if语句处理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第四 版第章
限制150内