第四章:选择结构
C语言第四章.选择结构程序设计

case 常量表达式n: 语句n; default : 语句n+1; }
语句的执行过程:
先计算表达式的值,并逐个与其后的常量表达式值相 比较; 当表达式的值与某个常量表达式的值相等时,即执行
其后的语句;
然后不再进行判断,继续执行后面所有case后的语句;
如表达式的值与所有case后的常量表达式均不相同时,
a+b>c && x+y<b 等价于 ((a+b)>c) && ((x+y)<b)
2)逻辑运算的值: 逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”
来表示。
反过来在判断一个量是为“真”还是为“假”时,以“0” 的数值代表“假”,以非“0”的数值代表“真”。
3)逻辑运算的规则:
(1)与运算&&
条件运算符和条件表达式
条件表达式通常用于赋值语句之中。 例如条件语句:
if(a>b) max=a;
else max=b; 可用条件表达式写为 max=(a>b)?a:b;
执行该语句的语义是:如a>b为真,则把a 赋予max, 否则把b 赋予max。
注意以下几点:
条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。 因此 max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b
注意:
(3) 在if 语句的三种形式中,所有的语句应为单个语句,
如果要想在满足条件时执行一组(多个)语句,则必须
把这一组语句用{ } 括起来组成一个复合语句。 例如:交换两个变量 if (a>b) { t= a; a=b; b=t; }
第4章 选择结构程序设计《C语言程序设计(第三版)》-电子教案

【注意】
switch后跟的"表达式"允许为任何类型的表达式,其 后跟的"表达式"允许为任何类型的表达式, 后跟的 数据类型和case后面的常量表达式的数据类型一致. 后面的常量表达式的数据类型一致. 数据类型和 后面的常量表达式的数据类型一致 每一个case后的各常量表达式的值不允许重复,否则 后的各常量表达式的值不允许重复, 每一个 后的各常量表达式的值不允许重复 会报错. 会报错. 每一个case后允许有多条语句 可以不用花括号" 后允许有多条语句, 每一个case后允许有多条语句,可以不用花括号"{}" 括起来. 括起来. case和default子句出现的先后顺序可以变动,不会影 子句出现的先后顺序可以变动, 和 子句出现的先后顺序可以变动 响程序的执行结果. 子句也可以省略不用. 响程序的执行结果.default子句也可以省略不用. 子句也可以省略不用 多个case可以共用一组执行语句.例如: 可以共用一组执行语句. 多个 可以共用一组执行语句 例如: … case 'A': case 'B': case 'C':printf("Pass\n");break;
3<5 || ++b
【例4-2】测试短路现象 】
#include <stdio.h> void main() { int a,b; a=b=0; a || ++b; printf("%d,%d\n",a,b); a=b=1; a || ++b; printf("%d,%d\n",a,b); a=b=0; a && ++b; printf("%d,%d\n",a,b); a=b=1; a && ++b; printf("%d,%d\n",a,b); }
C语言 第4章 选择结构程序设计

#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) 如果 a>b,将a和b对换 , 和 对换 是 、 中的小者 { t=a; a=b; b=t; } a是a、b中的小者 if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }
if (disc<0) 8<0为假 为假 printf(“has not real roots\n”); else 的值变为-1 的值变为 { p=-b/(2.0*a); p的值变为 的值变为0.71 的值变为 q=sqrt(disc)/(2.0*a); q的值变为 x1=p+q; x1的值变为 的值变为-0.29 的值变为 x2=p-q; x2的值变为 的值变为-1.71 的值变为 printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; }
if (disc<0) printf(“has not real roots\n”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; 复合语句 }
C语言有两种选择语句: 语言有两种选择语句: 语言有两种选择语句 (1)if语句,实现两个分支的选择结构 语句, 语句 (2)switch语句,实现多分支的选择结构 语句, 语句
4.1第四章选择结构的程序设计

本章要点
算法和算法的表示 结构化程序设计的方法 语句的概念和种类 选择结构语句的表示
提出问题 根据学生分数判断是否及格? 根据学生分数如何进行分级? 如何解决? 自然语言:如果… 那么… 否则… C语言: 分支语句 二重分支的条件语句 if 多重分支的条件语句 switch
#include <stdio.h> main( ) /* 程序功能:求a和b的最大值 */ { int a,b,max; printf("Input a and b="); scanf("%d%d",&a, &b); /* input number a and b */ if ( a>b ) max=a; /* 如果a>b,则将a=>max */ else max=b; /* 否则, b=>max */ printf("The max of a and b : %d\n", max); }
if (exp_1) statement_1 else if(exp_2) statement_2 …… else if(exp_n-1) statement_n-1 else statement_n
表达式 1 非0
0
0 表达式 2 非0
n个分支需要n-1次比较
0
0
表达式n-1 非0 语句1 语句2 语句n-1 语句n
例:已知银行整存整取存款月息利率分别为:
一年期:0.63% 三年期:0.69% 八年期:0.84% 二年期:0.66% 五年期:0.75% 其它:0
要求输入存钱的本金和期限,求到期时利息与本金 合计。银行到期利息计算公式:
《C语言程序设计(第五版)》第4章选择结构程序的设计 PPT课件

►(b*b-4*a*c)>=0
b*b-4*a*c>=0
►z= (x>y+3)
z= x>y+3
►(a>b)= = c
a>b= =c
►a=(b!=c)
a=b!=c
当然为提高程序的可读性、可维护性你不妨多使用 括号,因为C语言中的有些优先级很容易让你不小心犯 错。
C语言程序设计
第4章 选择结构程序设计
第10页
“>”的结果为“假”,即条件不成立。
C语言程序设计
第4章 选择结构程序设计
第5页
4.1 关系运算及关系表达式
4.1.1 关系运算符及其优先次序
运算符
含义
> 大于
优先级
结合性
>= 大于或等于 这些关系运算符等优
< 小于
先级,但比下面的优 先级高
左结合性
<= 小于或等于
== 等于 != 不等于
这些关系运算符等优 先级,但比上面的优 先级低
C语言程序设计
第4章 选择结构程序设计
第4页
4.1 关系运算及关系表达式
所谓“关系运算”实际上就是“比较运算”, 即将两个数据进行比较,判定两个数据是否符合 给定的关系。例如,
► “x>y+3”中的“>”表示一个大于关系运算。 ➢如果a的值是5,b的值是1,则大于关系运算
“>”的结果为“真”,即条件成立; ➢如果a的值是2,b的值是1,则大于关系运算
因为按照自左至右的结合方向,先执行关系运算
“a>b”得值为1(“真”),再执行关系运算“1>c”, 得值为0(“假”),因此y为0。
C语言程序设计
C程序设计(第五版)-第4章选择结构程序设计课后习题答案

C程序设计(第五版)-第4章选择结构程序设计课后习题答案1. 什么是算术运算?什么是关系运算?什么是逻辑运算?【答案解析】算熟运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘⽅、开⽅等⼏种运算的统称。
其中加减为⼀级运算,乘除为⼆级运算,乘⽅、开⽅为三级运算。
在⼀道算式中,如果有多级运算存在,则应先进⾏⾼级运算,再进⾏低⼀级的运算。
C语⾔中的算熟运算符包括:+、-、*、/、++、--、%等种类。
如果只存在同级运算;则从左⾄右的顺序进⾏;如果算式中有括号,则应先算括号⾥边,再按上述规则进⾏计算。
⽰例:$ (1 + 1)^{2} * 4+5 * 3$解析:1. 先进⾏括号内运算1+1,然后进⾏乘⽅运算得到结果4.2. 接下来与4相乘,得到结果163. 因为乘法优先级⼤于加法,因此先进⾏5*3,得到结果154. 最终相加得到结果31结果:31关系运算:关系的基本运算有两类:⼀类是传统的集合运算(并、差、交等),另⼀类是专门的关系运算(选择、投影、连接、除法、外连接等),⽽在C语⾔中,关系运算通常被认为是⽐较运算,将两个数值进⾏⽐较,判断⽐较结果是否符合给定的条件。
常见的关系运算符包括:<、<=、>、>=、==、!=等种类。
其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。
⽽前4种⾼于后2种。
例如, >优先于==。
⽽>与<优先级相同。
并且,关系运算符的优先级低于算术运算符,关系运算符的优先级⾼于赋值运算符(=)。
逻辑运算:在逻辑代数中,有与、或、⾮三种基本逻辑运算。
表⽰逻辑运算的⽅法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。
⽽在C语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。
常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。
C语言程序设计实例教程(第2版)丁爱萍第4章 选择结构程序设计_百度文库

本文由xjsir2010贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
第4章 选择结构程序设计 章 第4章 选择结构程序设计 章 4.1 关系运算符及其表达式 4.2 逻辑运算符及其表达式 4.3 条件运算符 4.4 单条件选择if语句 单条件选择 语句 4.5 开关分支 开关分支switch语句 语句 习题4 第4章 选择结构程序设计 章 4.1 关系运算符及其表达式 关系表达式是由关系运算符连接表达式构成的。
1. 关系运算符 1) 关系运算符 关系运算符都是双目运算符,共有如下6种: >,<,>=,<=,==,!= 分别是大于、小于、大于或等于、小于或等于、 等于和不等于。
第4章 选择结构程序设计 章 2) 运算符的优先级和结合性 前4种关系运算符的优先级别相同,后2种也相同,前4 种高于后2种。
关系运算符具有自左至右的结合性。
关系运算符、算术运算符和赋值运算符之间的优先级次序 为:算术运算符优先级最高,关系运算符次之,赋值运算 符最低。
2. 关系表达式 1) 关系表达式 由关系运算符组成的表达式称为关系表达式。
关系运算符两边的运算对象可以是C语言中任意合法 的表达式。
例如,x>y,(x=5)<=y,x==y等。
第4章 选择结构程序设计 章 2) 关系表达式的值 关系表达式的值是整数0(代表结果为逻辑假)或 1(代表结果为逻辑真),在C语言中不存在专门的“逻 辑值”,此处请读者务必清楚。
例如,关系表达式 (x=3)>(y=4)的值为0。
关系表达式常用在条件语句和循环语句中。
3) 举例 一般情况下,关系表达式用在选择结构或循环结 构的关系判断中,并不需要输出关系表达式的值,这 里我们为了了解关系表达式的内部运行机制,在例4-1 中可以看到关系表达式的值只能是0或1。
第4章 选择结构程序设计 章 【例4-1】关系表达式示例。
#include "stdio.h" main( ) { char x='m' , y='n' ; int n ; n=x<y ; printf("%d\n" , n) ; n=x==y-1 ; printf("%d\n" , n) ; n=('y'!='Y')+(5<3)+(y-x==1) ; printf("%d\n" , n) ; } 第4章 选择结构程序设计 章 运行结果: 1 1 2 通过上面的程序可以看出:关系运算的结果为 “真”时,值等于1;结果为“假”时,值等于0。
C语言全国计算机二级等级考试教程第四章选择结构(章节带习题)

2
a a
2 1
b 1
b
1
4.2 if语句和用if语句构成的选择结构
4.2.1 if语句
C语言的if语言有两种形式: if(表达式) 语句 关键字 不满足 单分支if语句 不含else子句 关键字 if(表达式) 语句1 else 语句2 不满足 双分支if语句 含else子句
表达式 满足 语句
表达式 满足 语句1
表达式2
表达式1
真
假
表达式3
真
假
表达式4
真
语句1 语句2 语句3
假
语句n
真
语句4
4.2 if语句和用if语句构成的选择结构
4.2.2 嵌套的if语句
例4.5 编写程序,根据输入的学生成绩给出相应的等级,大于或等于90分以上 的等级为A,60分以下的等级为E,其余每10分为一个等级。 Enter g:72<CR> 成绩(g)大于等于90分以上(g>=90):A g=72:C 成绩(g)大于等于80分以上(g>=80):B 程序的意思为: 成绩(g)大于等于70分以上(g>=70):C Enter g:55<CR> 成绩(g)大于等于60分以上(g>=60):D g=55:E 成绩(g)不及格(g<60):E #include <stdio.h> 假 g>=90 main() {int g; 真 g>=80 假 printf("Enter g:");scanf("%d",&g) 真 printf("g=%d:",g); g>=70 假 if(g>=90) printf("A\n"); 真 假 g>=60 else if(g>=80) printf("B\n"); else if(g>=70) printf("C\n"); 真 else if(g>=60) printf("D\n"); 输出A 输出B 输出C 输出D 输出E else printf("E\n"); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(【1】) { s=(a+b+c)/2; area,area); if(【2】) printf(“等边三角形”); else if(【3】) printf(“等腰三角形”); else if((a*a+b*b==c*c)||(a*a+c*c==b*b)|| (b*b+c*c==a*a)) printf(“直角三角形”); else printf(“一般三角形”); } else printf(“不能组成三角形”); } 25. 某邮局对邮寄包裹有如下规定:若包裹的长宽高任一尺寸超 过1米或重量超过30千克,不予邮寄;对可以邮寄的包裹每 件收手续费0.2元,再加上根据下表按重量wei计算的邮资: 重量(千克) 收费标准 (元) wei<10 10<wei<=20 0.80 0.75
为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下 为‘E’。 9. 有一函数
请编程序计算y的值(x的值由键盘输入)。 10. 编写一个程序,功能是从键盘输入一个整数,判断它是否二 位数,如果是,就打印它,然后结束程序,否则继续要求输 入数。 11. 编写一个程序,功能是从键盘输入三个整数,打印出其中最 大的一个值。 12. 从键盘读入一个数,判断它的正负。是正数,则输出"+", 是负数,则输出"-" 13. 铁路托运行李规定:行李重不超过50公斤的,托运费按每公 斤0.15元计费;如超50公斤,超过部分每公斤加收0.10元。 编一程序完成自动计费工作。 14. 打印某年某月有多少天。(提示:A、闰年的计算方法:年 数能被4整除,并且不能被100整除;或者能被400整除的整 数年份。B、利用MOD运算可以判断一个数能否被另一个数整 除) 15. 某超市为了促销,规定:购物不足50元的按原价付款,超过 50不足100的按九折付款,超过100元的,超过部分按八折付 款。编一程序完成超市的自动计费的工作。 16. 编写一个程序,功能是从键盘输入1—12中的某一个数字, 由电脑打印出其对应的月份的英语名称。 17. 编程实现:输入一个整数,判断它能否被3,5,7整除,并 输出以下信息之一: (1)能同时被3,5,7整除; (2)能被其中两数(要指出哪两个)整除; (3)能被其中一个数(要指出哪一个)整除;
n+=31; case 8: n+=31; case 7: n+=30; case 6: n+=31; case 5: n+=30; case 4: n+=31; case 3: if(year%4==0&&year%100!=0||year%400==0) n+=29; //闰年2月是29天 else n+=28; //非闰年2月是28天。 case 2: n+=31; } printf("%d年%d月%d日是%d年的第%d天。 \n",year,month,day,year,n); }
float a,b,c,t,disc,twoa,term1,term2; printf(“enter a,b,c:”); scanf(“%f %f %f”,&a,&b,&c); if(【1】) if(【2】) printf(“no answer due to input error\n”); else printf(“the single root is %f\n”,-c/b); else { disc=b*b-4*a*c; twoa=2*a; term1=-b/twoa; t=abs(disc); term2=sqrt(t)/twoa; if() printf(“complex root\n real part=%f imag part=%f\n”, term1,term2); else printf(“real roots\n root1=%f root2=%f\n”, term1+term2,term1-term2); } } 23. 编程输入三个数据,判断这三个数据作为边长能否构成一个 三角形。不可以则输出“DATA WRONG”,可以则计算出三角 形边长之和并输出。 24. 以下程序根据输入的三角形的三边判断是否能组成三角形, 若可以则输出它的面积和三角形的类型。请在【】内填入正 确内容。 #include “math.h” main() { float a,b,c; float s,area; scanf(“%f %f %f”,&a,&b,&c);
else 【2】; if(f) printf(“%d is”,y); else printf(“%d is not”,y); printf(“a leap year\n”); } 28. 以下程序段针对输入的截止日期(年:yend,月:mend,日 dend:)和出生日期(yman,mman,dman),计算出实际年 龄。请在【】内填入正确内容。 设有:int yend,mend,dend,yman,mman,dman,age; age=yend-yman; if(mend【1】mman) age--; else if(mend【2】mman&&dend【3】dman) age--; 29. 使用分支语句设计一个程序,要求输入年月日以后,算出这 天是这一年的第几天。运行时输入情况如下: 请输入日期(例如:2005 2 28):2005 2 28 2005年2月28日是2005年的第59天。 提示:注意闰年,四年一润、百年不润、四百年又一润。使用 switch语句的时候要注意其break特性,尽量设计出较简洁的代 码。 参考程序: #include <stdio.h> void main() { int year,month,day,n; printf("请输入日期(例如:2005 2 28):"); scanf("%d%d%d",&year,&month,&day); n=day; switch(month) { case 12: //如果是12月,要将前11个月的天数加起来,没有 break语句,会顺序执行 n+=30; case 11: //如果是11月,要将前10个月的天数加起来 n+=31; case 10: //如果是10月,要将前9个月的天数加起来 n+=30; case 9:
4. 输入一个字符,判断它如果是小写字母输出其对应大写字 母;如果是大写字母输出其对应小写字母;如果是数字输出 数字本身;如果是空格,输出“space”;如果不是上述情 况,输出“other”。 5. 有三个数a、b、c,由键盘输入,输出其中最大的数。 6. 输入一个数,判断它能否被 3或者被 5整除, 如至少能被这两 个数中的一个整除则将此数打印出来,否则不打印,编出程 序。 7. 读入1到7之间的某个数,输出表示一星期中相应的某一天的单 词:Monday、 Tuesday等等,用switch语句做。 8. 给出一百分制成绩,要求输出成绩等 级‘A’,‘B’,‘C’,‘D’,‘E’,90分以上为‘A’,80~89分
20<wei<=30 0.70 请在程序的【】内填入正确内容。 main() { float len,wei,hei,wid,mon,r; scanf(“%f %f %f %f”,&len,&wid,&hei,&wei); if(len>1||wid>1||hei>1||wei>30) 【1】; else if(wei<10) r=0.8; else if(wei<=20) r=0.75; else if(wei<=30) 【2】;
(4)不能被3,5,7任一个整除。 18. 编程实现以下功能:读入两个运算数(data1和data2)及一 个运算符(op),计算表达式data1 op data2的值,其中op 可为+,-,*,/(用switch语句实现)。 19. 20. 以下程序对输入的一个小写字母,将字母循环后移5个位置 后输出。如‘a’变成‘f’,‘w’变成‘b’。请在【】内 填入正确内容。 #include “stdio.h” main() { char c; c=getchar(); if(c>=‘a’&&c<=‘u’) 【1】; else if(c>=‘v’&&c<=‘z’) 【2】; putchar(c); } 21. 输入一个字符,如果它是一个大写字母,则把它变成小写字 母;如果它是一个小写字母,则把它变成大写字母;其它字 符不变。请在【】内填入正确内容。 main() { char ch; scanf(“%c”,&ch); if(【1】) ch=ch+32; else if(ch>=‘a’&&ch<=‘z’) 【2】; printf(“%c”,ch); } 22. 以下程序的功能是计算一元二次方程 入正确内容。 #include “math.h” main() { 的根。请在【】内填