c语言程序设计教程第4章

上传人:shaoy****1971 文档编号:111930229 上传时间:2019-11-04 格式:PPT 页数:39 大小:400.81KB
返回 下载 相关 举报
c语言程序设计教程第4章_第1页
第1页 / 共39页
c语言程序设计教程第4章_第2页
第2页 / 共39页
c语言程序设计教程第4章_第3页
第3页 / 共39页
c语言程序设计教程第4章_第4页
第4页 / 共39页
c语言程序设计教程第4章_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《c语言程序设计教程第4章》由会员分享,可在线阅读,更多相关《c语言程序设计教程第4章(39页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计教程* 1 C语言程序设计教程* 4.1 关系运算及其表达式 所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比 较,判定两个数据是否符合给定的关系。关系操作数可以是数值类 型数据和字符型数据。 一、 关系运算符及其优先次序 1关系运算符 C语言提供6种关系运算符: = != 注意:在语言中,“等于”关系运算符是双等号“= =”,而不 是单等号“= ”(赋值运算符)。 2优先级 (1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个 高于后2个。 ()( = != ) (2)与其它种类运算符的优先级关系 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 a+

2、b b+c 等效于 (a+b)(b+c)。 (2+a)=(b-a) 等效于2+a = b-a。 2 C语言程序设计教程* 3.结合性:自左至右; 例如: int a=2,b=3,c=1; abb,值是0 , 再计算 033 ,值是1 , 再计算 1b,a+bc-d,(a=3)=b,(ab)= =(bc) 2关系表达式的值:若为真,则结果为1; 若为假,则结果为0。 由于语言没有逻辑型数据,所以用整数“”表示“逻 辑真”,用整数“”表示“逻辑假”。 3 C语言程序设计教程* 例如,假设num1=3,num2=4,num3=5,则: (1)num1num2的值=0。 (2)(num1num2)!=

3、num3的值=1。 (3)num1=0”、同时“x=0) float b=3.5; !a (0) !(a b?a:b max及赋值表达式的值 均为5; a赋值 又如: -a = b+ ? a+ : b+ (a=a-1;)4 = 3(b=b+1;)?a+:b+ a为4 b为4 0 4(b=b+1;) 表达式值为4,b为5 a值为4,b值为5,条件表达式的值为4。 结合性:自右至左; y = x10 ? x/10 : x10 ? x/10 :(x=A else max=num2; if (num3max) max=num3; printf(“Thethreenumbersare:%d,%d,%dn

4、“,num1,num2,num3); printf(“max=%dn“,max); 16 C语言程序设计教程* 程序运行情况如下: Please input three numbers:11,22,18 The three numbers are:11,22,18 max=22 本案例中的第1个if语句,可优化为如下不带else子句的形 式: max=num1; if(num2max) max=num2; 这种优化形式的基本思想是:首先取一个数预置为max( 最大值),然后再用max依次与其余的数逐个比较,如果发 现有比max大的,就用它给max重新赋值,比较完所有的数 后,max中的数就是最

5、大值。这种方法,对从3个或3个以上 的数中找最大值的处理,非常有效。请读者仔细体会。 17 C语言程序设计教程* 表达式1 先判断表达式1的值 真 语句1 非0就执行下面的语句 假 表达式2 为0就执行下一个判断 表达式3 语句4语句3语句2 真 真 假 假一直这样做下去 直到得出最后结果 3阶梯式if-else-if语句 一般形式:if (表达式1) 语句1 else if (表达式2) 语句2 else (表达式3) 语句3 18 C语言程序设计教程* 案例4.3从键盘上输入一个百分制成绩score,按下列原则 输出其等级:score90,等级为A;80score=0) if (x0) y

6、=1; else y=0; else y=-1; printf (“x=%d,y=%dn”,x,y); main() int x,y; scanf(“%d”, if (x0) y=1; printf (“x=%d,y=%dn”,x,y); 要求:(1)用无嵌套的if语句 ; (2)用嵌套的if语句编 程。 21 C语言程序设计教程* 三、说明 (1)if语句中的“表达式”必须用“(”和“)”括起来 , “表达式”除常见的关系表达式或逻辑表达式外,也 允许是其它类型的数据,如整型、实型、字符型等。 (2)执行语句可以是一条简单语句、空语句或复合语句 ,也可以嵌套其它流程控制语句 。 务必牢记:不

7、管是简单语句,还是复合语句中的各个语句 ,每个语句后面的分号必不可少! 例如,案例4.2中的: if (num1num2) max=num1; else max=num2;语句: if行后面的赋值语句“max=num1;”分号不能省略。但不 要误认为if和else是2个独立的语句,它们都属于if语句 中的一部分,else是if语句的子句。 22 C语言程序设计教程* (3) else子句(可选)是if语句的一部分,必须与if 配对使用,不能单独使用。 (4)if语句允许嵌套,但嵌套的层数不宜太多。在实际 编程时,应适当控制嵌套层数(23层)。 (5)if语句嵌套时,else子句与if的匹配原则

8、:与在它 上面、距它最近、且尚未匹配的if配对。 为明确匹配关系,避免匹配错误,强烈建议:将内嵌的 if语句,一律用花括号括起来。 23 C语言程序设计教程* 案例4.5 写一程序,从键盘上输入1年份year(4位十进 制数),判断其是否闰年。闰年的条件是:能被4整除、 但不能被100整除,或者能被400整除。 算法设计要点: (1)如果能被整除,则余数为,即如果的 值等于,则表示能被整除! (2)首先将是否闰年的标志leap预置为0(非闰年), 这样仅当year为闰年时将leap置为1即可。这种处理两种状 态值的方法,对优化算法和提高程序可读性非常有效, 请读者仔细体会。参考程序如下: ma

9、in() int year,leap=0;/* leap=0:预置为非闰年*/ printf(“Please input the year:“); scanf(“%d“, 24 C语言程序设计教程* if (year % 4=0) else if (year%400=0) leap=1; if (leap) printf(“%d is a leap year.n“,year); else printf(“%d is not a leap year.n“,year); 利用逻辑运算能描述复杂条件的特点,可将上述程序优化如下 : main() int year; printf(“Please in

10、put the year:“); scanf(“%d“, if (year%4=0 else printf(“%d is not a leap year.n“,year); 25 C语言程序设计教程* 4.4 switch语句 C语言提供了switch语句直接处理多分支选择。switch语 句是多分支选择结构,它与break语句配合使用可以构成 多分支开关结构。 switch(表达式) case 常量表达式1:语句组1 case 常量表达式2:语句组2 case 常量表达式n:语句组n default: 语句组n+1 26 C语言程序设计教程* 流程如图 switch 表达式求值 表达式=常量

11、式1? 表达式=常量式2? 表达式=常量式n? 语句组n+1 语句组1 语句组2 语句组n 真 假 真 假 真 假 27 C语言程序设计教程* 如果在每个case分支的语句组之后加上一条break 语句,则就得到了多分支开关结构的switch语句,即 : switch(表达式) case 常量表达式1:语句组1 break; case 常量表达式2: 语句组2 break; case 常量表达式n: 语句组n break; default: 语句组n+1 28 C语言程序设计教程* 控制流程图 switch 表达式求值 表达式=常量式1? 表达式=常量式2? 表达式=常量式n? 语句组n+1

12、真 假 真 假 真 假 语句组1break 语句组2break 语句组nbreak 29 C语言程序设计教程* 执行过程 (1)当switch后面“表达式”的值,与某个case 后面的“常量表达式”的值相同时,就执行该 case后面的语句(组);当执行到break语句时, 跳出switch语句,转向执行switch语句的下一条 。 (2)如果没有任何一个case后面的“常量表达式 ”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的 下一条。 30 C语言程序设计教程* switch(i) case 1:printf(An); case 2:pr

13、intf(Bn); case 3:printf(Cn); case 4:printf(Dn); default: printf(En); 看下面的例子: 假设i=3时,则会从i=3时 做起的语句。 运行结果为: C D E 如果给每条语句加上 break; break; break; break; break; 这样就只执行一条语 句 当表达式的值与某一个常量相等时,就执行后面的语句 ;若无break语句,执行该语句后,流程控制转移到下一 个分支: 继续执行这一个分支的语句,一至到最后下个 语句执行完。 运行结果为: C 31 C语言程序设计教程* 案例4.6 从键盘上输入一个百分制成绩sco

14、re,按下列原则 输出其等级:score90,等级为A;80score90,等级为B ;70score80,等级为C;60score70,等级为D; score60,等级为E。 main() int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, grade = score/10; /*将成绩整除10,转化成switch语句中的case标号*/ switch (grade) case 10: case 9: printf(“grade=An”); break; case 8: printf(“grade=Bn“); brea

15、k; case 7: printf(“grade=Cn“); break; case 6: printf(“grade=Dn“); break; case 5: case 4: 32 C语言程序设计教程* case 3: case 2: case 1: case 0: printf(“grade=En”); break; default: printf(“The score is out of range!n”); 程序运行情况如下: Input a score(0100): 85 grade=B 3说明 (1)switch后面的“表达式”,可以是int、char和枚举型 中的一种。 (2)每个case后面“常量表达式”的值,必须各不相同, 否则会出现相互矛盾的现象(即对表达式的同一值,有两 种或两种以上的执行方案)。 33 C语言程序设计教程* (3)case后面的常量表达式仅起语句标号作用,并不进行条 件判断。系统一旦找到入口标号,就从此标号开始执行,不 再进行标号判断,所以必须加上break语句,以便结束switch 语句。 思考题:如果去掉案例4.6程序中的所有break语句,且输 入的成绩为75,输出会如何? (4)各case及default子句的先后次序,不影响程序执行结

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号