第4章选择(分支)结构程序设计(精)
C语言程序设计第4章选择结构程序设计ppt课件

8
printf("grade is E" );
9 else if (score >=60 && score<70 )
10
printf( "grade is D");
11 else if (score >=70 && score<80 )
12
printf( "grade is C");
13 else if (score>=80 && score<90 )
printf("a,b="); scanf("%d,%d",&a,&b); if (a>b) max=a; else max=b; printf("max=%d\n",max); }
结束
8
3.if-else if-else语句
(1)语句格式:
if (表达式1) 语句1
else if (表达式2) 语句2
不再判断,顺序执 行下面的语句
21
4.2 switch语句
switch (表达式) {case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n [default:语句n+1] }
注意:
1. <表达式>可以是整型或字 符型表达式; 2. case后面必须是常量表达 式,不能包含变量; 3. 每个常量表达式的值应互 不相同; 4. case语句先后顺序随意; 5.若从上至下没有找到与表 达式的值相匹配的case,含有 default子句时,执行语句n+1。
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; }
C语言-第4章 选择结构程序设计

第4章选择结构程序设计注:选择结构的考点,最重要的有两个,一个是逻辑表达式的值,另一个是分支界限。
弄明白这两个知识点,就能够以不变应万变了。
一、单项选择题1. 在C语言中,能代表逻辑值"真"的是。
A) true B)大于0的数C)非0整数D)非0的数2. 表示关系x<=y<=z的c语言表达式为。
A) (x<=y)&&(y<=z) B) (x<=y)AND(y<=z) C) (x<=y<=z) D) (x<=y)&(y<=z)3. 能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是。
A) a>=10 or a<=0 B) a>=0|a<=10 C) a>=10 &&a<=0 D) a>=10‖a<=04、判断char型变量c1是否为大写字母的表达式为。
A)’A’<=c1<=’Z’ B)(c1>=’A’) & (c1<=’Z’)C)(’A’<=c1)AND (‘Z’>=c1) D)(c1>=’A’)&& (c1<=’’Z’)5. 有定义char c; c=getchar(); 判断字符变量c为大写字母的正确表达式为。
A) ‘A’=<c<=’Z’ B)c>=‘A’&& c<=’Z C)A=<c<=Z D) c>=A && c<=Z6. 设有语句“int a=4;b=3,c=-2,d=2;”,则逻辑表达式“a>0&&b&&c<0&&d>0”的值是。
A)1B)0 C)-1 D)出错7. 设a为整型变量,则不能正确表达数学关系10<a<15的C语言表达式是。
第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章 选择结构程序设计

图4-2 程序的运行结果 根据程序的运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main()
{ float a,b,c,t; printf("请输入三个数 a,b and c:\n"); scanf ("%f%f%f",&a,&b,&c); printf("输入的三个数为:"); printf ("%6.2f,%6.2f,%6.2f\n",a,b,c); if(a>b) {t=a;a=b;b=t;} if(a>c) ___________________________________ if(b>c) {t=b;b=c;c=t;} printf("排序后的三个数为:"); printf ("%6.2f,%6.2f,%6.2f\n",a,b,c); getch(); } 2.编程实现:根据性别sex和身高tall给某数据分类,如果sex为‘F’,当 tall>=150时,输出A,否则输出B;若sex不为‘F’,当tall>=172时,输出 A,否则输出B。程序的运行结果如图4-3所示。
_________________________________________ else printf("B"); } else { if(tall>=172) printf("A"); else printf("B"); } getch(); }
4.2 switch语句
【学习目标】 (1)掌握switch语句的语句格式与应用 (2)掌握switch语句中break语句的用法
第四章 结构化程序设计的三种结构

第四章结构化程序设计的三种结构4.1 顺序结构程序设计一、结构化程序设计的程序结构顺序结构、分支结构/选择结构、循环结构二、C语言语句1、9种控制语句2、表达式语句3、特殊语句三、格式化输出--printf()函数printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。
printf()函数的一般格式printf("格式字符串" [,输出项表]);1、"格式字符串"也称"转换控制字符串",可以包含三种字符(1)格式指示符。
格式指示符的一般形式如下:%[标志][宽度][.精度][F|N|h|L][类型]常用的标志字符如表3-1所示,常用的宽度指示符如表3-2所示,常用的精度指示符如表3-3所示,长度修饰符如表3-4所示,类型转换字符如表3-5所示。
(2)转义字符'\n'就是转义字符,输出时产生一个"换行"操作。
转义字符通常起控制作用(3)普通字符──除格式指示符和转义字符之外的其它字符。
格式字符串中的普通字符,原样输出。
例如printf("radius=%f\n", radius);语句中的"radius="是普通字符。
2.输出项表输出项表是可选的。
如果要输出的数据不止1个,相邻2个之间用逗号分开。
下面的printf()函数都是合法的:(1)printf("I am a student.\n");(2)printf("%d",3+2);(3)printf("a=%f b=%5d\n", a, a+3);必须强调:"格式字符串"中的格式指示符,必须与"输出项表"中、输出项的数据类型一致,否则会引起输出错误3、格式指示符输出不同类型的数据,要使用不同的类型转换字符。
C语言程序设计第四单元选择结构程序设计

思路指导
输入:输入学生的成绩存储到变量score中 输出:根据学生的成绩输出学生的等级 条件判断:判断学生成绩符合哪个范围 处理:根据判断,输出学生的等级
相关知识
1.多重if(多分支if语句)的语法格式 if(表达式1)
{语句体1} else if(表达式2)
{语句体2} else if(表达式3)
/*母亲身高*/
printf("你是男孩(b) 还是女孩(g)?");
scanf("%1s", &sex);
printf("你输入你爸爸的身高(cm):");
scanf("%f", &faheight);
printf("你输入你妈妈的身高(cm):");
scanf("%f", &moheight);
条件1 条件2
语句组1 语句组2
条件
语句组n+1 语句组n
语句组n 语句组n+1
相关知识
(二)解决选择问题的基本步骤和方法
选择结构是结构化程序设计的三种结构之一,也是常用的一种 结构,在大多数的程序中都包含有选择结构,一般来说解决这样 的问题用以下的方法和步骤:
1. 判断解决的问题是否是选择问题。 2. 若是选择问题,则判断是哪种选择结构类型,是单分支、双 分支还是多分支结构。 3. 若是选择问题,确定选择结构,确定选择条件、执行过程与 结束过程。 4. 用C语言描述。
此外,如果喜爱体育锻炼,那么可增高身高2%;如果有良 好的卫生饮食习惯,那么可增加身高1.5%。
思路指导
输入:性别(用字符型变量sex存储,输入字母g表示女性, 输入字符b表示男性)、父母身高(用实型变量存储, faheight为其父身高,moheight 为其母身高)、是否喜爱体 育锻炼(用字符型变量sports存储,输入字符y表示喜爱,输 入字符n表示不喜爱)、是否有良好的饮食习惯(用字符型变 量diet存储,输入字符y表示喜爱,输入字符N表示不喜爱)。 输出:身高 处理:利用给定公式和身高预测方法对身高进行预测。 判断条件:性别男还是女、是否喜爱体育锻炼、是否有良好 的饮食习惯。
C语言程序设计第四章 选择结构程序设计

辑量。
Page 4
4.1 逻辑量
逻辑表达式 1.逻辑运算符 逻辑运算符有以下3种:&&(逻辑与)、||(逻辑或)、!(逻辑非) “&&”和“||”是双目运算符,“!”是单目运算符,逻辑运算的运算对 象是逻辑量。其中“!”的优先级别高于“&&”,“&&”的优先级高于
“||”。“&&”和“||”是左结合运算符,“!”是右结合运算符。
Page 6
4.1 逻辑量
逻辑运算的短路 2.逻辑表达式 &&”和“||”在运算时,存在运算的短路。 ① “&&”运算的短路规则。 例如:a&&b
当左目a为逻辑假时,有当左目a为逻辑真时,才运算右目b。
Page 7
4.1 逻辑量
逻辑运算的短路 2.逻辑表达式 &&”和“||”在运算时,存在运算的短路。 ②“||”运算的短路规则。 例如:a||b
逗号运算符高,结合性为右结合。
Page 12
4.2 if语句
条件表达式 2.条件表达式 用条件运算符将运算对象连接起来的符合C语言规则的表达式称为条 件表达式。 条件表达式的运算过程为:先判断第1目逻辑量,如果逻辑量为真,
选取第2目的结果作为整个表达式的值,否则选取第3目结果作为整个
表达式的值。 条件表达式中存在类型的自动转换,条件表达式的值的类型是第2目
立的表达式对待。
Page 14
4.2 if语句
if语句的嵌套 从if语句的格式来看,if( )~else只能解决双分支问题。如果要解决多 分支问题,则需使用if语句的嵌套。 例如多分支函数:
1 x0 y= 0 x 0 1 x 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语言程序设计实例教程(第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。
第4章 分支结构程序设计

4.1 分支结构的设计思想 4.2 实现分支结构判断条件的构成 4.3 实现分支结构程序设计的语句 4.4 分支结构程序设计举例
4.1 分支结构的设计思想
根据不同的条件,执行不同的程序流程,这就形成了所谓 的“分支”结构。 分支结构程序的设计要考虑两个方面的问题: –判断条件 判断条件是分支结构设计的关键。一个判断条件的结果只 有两种可能:条件成立和条件不成立,并由此决定了程序流程 的走向。 –实现分支结构语句的构成及选择 分支结构程序的设计就是要正确描述判断的条件,并将其 与要实现的具体工作放在分支结构语句中,实现要完成的处理。 。
首页 上一页
4.2 实算符及其优先顺序
表4.1是关系运算符种类、功能及优先级别顺序。 • 关系运算符优先级低于算术运算符,高于赋值运算符 • 关系运算符 >=、<=、==、!=在书写时,不要用空格将 其分开,否则会产生语法错误。
–关系表达式
4.3 实现分支结构程序设计的语句
• if语句
–if语句的简单形式
if(表达式) if(表达式) 语句 语句的执行过程见图4.2: 例4.2
–if语句标准形式
if(表达式) 语句1 if(表达式) 语句1 语句2 else 语句2 语句的执行过程见图4.3: 例4.3 首页 上一页
–if语句的嵌套形式
例4.5
– 关于Switch结构的注意事项:
• switch后表达式的类型,一般为整型、字符型或枚举 类型。 • 每个case后面常量表达式的值必须互不相同。 • 把default放在最后是一种良好的程序设计习惯。 • 多个case可共有一组执行语句。 • case后常量表达式仅起语句标号的作用,并不进行条 件判断。 • switch语句中仅需执行一个分支时,须在该case后面 的语句中加上break语句,让其跳出switch结构。 • 当case后包含多条执行语句时,可以不用花括号括起 来,系统会自动识别并顺序执行所有语句。 上一页
c语言第4章 选择结构程序设计习题答案

第4章选择结构程序设计习题(P111)4.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?答:C语言中用1表示真,0表示假;系统按照“非0为真,0为假”判断一个逻辑量的真假。
4.3 写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
(1)a+b>c&&b==c (2)a||b+c&&b-c (3)!(a>b)&&!c||1(4)!(x=a)&&(y=b)&&0 (5)!(a+b)+c-1&&b+c/2解:该题在求解过程中注意:一、优先级。
逻辑运算符(&&和||)低于算术运算符和关系运算符而高于赋值运算符,在逻辑运算符中,逻辑非最高,逻辑与其次,逻辑或最低;二、逻辑表达式的求值规则。
(P94)所以得以上表达式的值分别为:(1)0 (2)1 (3)1 (4)0 (5)14.4有3个整数a、b、c,由键盘输入,输出其中最大的数。
分析:这是一个规模较小的求最值的算法,习题1.6用函数的方法实现。
该题不用函数调用实现,但方法类似。
法一:先求前两个数的最值,再用前两个数的最值和第三个数比较即得结果。
法二:先假设第一个数是最值,再依次和第二、第三个数比较得结果。
其中都要用到单分支或双分支选择结构语句。
参考程序如下:法一:main(){ int a,b,c,max; /*定义4个整型变量,其中a,b,c存原始数据,max存最值*/ printf("\ninput the value of a,b,c:"); /*提示输入*/scanf("%d%d%d",&a,&b,&c); /*格式符之间无分隔符,输入时可以以空格、回车、跳格分隔*/if(a>b) max=a;else max=b;if(max<c) max=c;printf("\nmax=%d\n",max);}法二:main(){ int a,b,c,max;printf("\ninput the value of a,b,c:");scanf("%d%d%d",&a,&b,&c);max=a;if(max<b) max=b;if(max<c) max=c;printf("\nmax=%d\n",max);}4.6有一个函数:写一段程序,输入x,输出y的值。
第4章 选择结构程序设计

章节:
C语言程序设计→第4章 选择结构程序设计
练一练
问题:编一程序,从键盘输入一个正整数,判 断它的奇偶性。如果输入的是奇数,输出“奇 数”,如果输入的是偶数,则输出“偶数”。
章节: C语言程序设计→第4章 选择结构程序设计
本章的学习难点
1. 单分支与双分支选择结构程序设计; 2. 多分支选择结构程序设计 ; 3. 条件语句的嵌套。
章节: C语言程序设计→第4章 选择结构程序设计
本章目录
1. 选择结构和条件判断 2. 用if语句实现选择结构 3. 关系运算符和关系表达式 4. 逻辑运算符和逻辑表达式 5. 条件运算符和条件表达式 6. 选择结构的嵌套 7. 用switch语句实现多分支选择结构 8. 选择结构程序综合举例
章节: C语言程序设计→第4章 选择结构程序设计
4.1.2逻辑运算符与逻辑表达式
逻辑运算符
&&
逻辑与(并且)
||
逻辑或(或者)
!
逻辑非
章节:
C语言程序设计→第4章 选择结构程序设计
逻辑运算符
章节: C语言程序设计→第4章 选择结构程序设计
逻辑运算真值表
章节: C语言程序设计→第4章 选择结构程序设计
反数。所以,如果iX<0,则iY= -iX,否则不需要 做什么;
5.输出iX和iY。
章节:
C语言程序设计→第4章 选择结构程序设计
流程图
章节:
C语言程序设计→第4章 选择结构程序设计
第四章 选择(分支)结构程序设计

用一个逻辑表达式来表示一个复杂的条件。
例如:判断某一年是否闰年。 闰年:能被4整除,但不能被100整除;或能被 400整除。
(year%4==0&&year%100!=0)||year%400==0
表达式为“真”,闰年条件成立,是闰年,否则 非 闰年。
复合语句的形式:
{ 语句1; 语句2; 语句3; ……
}
4.3 if语句
4.3.1 if语句三种形式
复合语句在选择结构,循环结构中经常用到。 我们在逻辑上把复合语句看成是一条语句。
4.3 if语句
4.3.1 if语句三种形式
例:要求用户输入一个实数,然后求出这个实数 的绝对值。
4.3 if语句
逻辑运算的真值表:
a b a&&b
a||b
真真 真
真
真假 假
真
假真 假
真
假假 假
假
a
!a
真
假
假
真
4.2 逻辑运算符和逻辑表达式
4.2.1 逻辑运算符及其优先顺序
例:逻辑运算举例 a&&b 若a、b为真,则a&&b为真。 a||b 若a、b之一为真,则a||b为真。 !a 若a为真,则!a为假,反之若a为假,
4.3.1 if语句三种形式
▪ 在C语言中,表达式P的值是非0时,系统均按真 值处理。
例(1) if (‘a’) printf(“ok!”); (2) x=-5; if(x) printf(“ok!”); (3) y=0; if(y==0) printf(“ok!”); if(y) printf(“ok!”);
915145-C语言程序设计-第4章 选择结构程序设计

老年人
票价分类 两日联票
65周岁及以上
选择两日联票
• 常见错误
– 条件表示时,“==” 运算符误写作“=”运算符 – 数值0、1、…、9与数字字符’0’、’1’、…、’9’的混淆
4.2.2 逻辑运算
• • • 逻辑运算符
– 逻辑非(!)、逻辑与(&&)和逻辑或(||)
• 逻辑表达式求值方法
– 在逻辑表达式的求值过程中,按其操作数从左至右的 计算顺序,当某个操作数的值可以确定整个逻辑表达 式的值时,其余的操作数不再计算
4.2.3 短路求值
例如:假如有变量定义为 int x,y,z; 求下列表达式执行后,表达式的值和变量的值
序号
① ② ③ ④ ⑤ ⑥
变量初始值
x=y=z=1; x=2,y=0,z=1; x=y=z=1; x=0,y=1,z=2; x=0,y=1,z=2; x=0,y=1,z=2;
单分支 双分支 多分支 综合决策
– 选择控制结构
• 即根据条件进行判断选择执行相应操作的 问题,也称为分支控制结构 • 一般分为单分支、双分支和多分支三种结 构
• 实现的关键
– 判断条件的合法描述 – 选择操作流程的合理设计
4.1 门票价格问题
表4-1 上海迪士尼主题乐园的门票价格表
平日票
370
4.2 条件的表示
微视频:短路求值示例
4.3 单分支结构
• 问题
– 迪士尼门票规则
• 老年人:65周岁以上 平日票:280元,高峰日票:375元
分析 – 需要对条件(年龄大于等于65)进行判断
如果为真,则享受优惠票价 平日票:280元,高峰日票:375元
计算机二级C语言第4章 选择结构程序设计

①应当注意if与else的配对关系。原则是else总是与它上面最近的、未
配对的if配对。
②如果if与else的数目不一样,为了避免在if与else配对时出错,建议
读者使用“{}”来限定了内嵌if语句的范围。如下形式的嵌套语句:
if(表达式1)
{if(表达式2)语句1} /*内嵌if*/
这时形成了阶梯形的嵌套if语句,此形式的语句可以用以下语句形式
表示,看起来层次比较分明。
4.4.2 if语句的嵌套
if(表达式1)
…
语句1
…
else if(表达式2)
else if(表达式n-1)
语句2
语句n-1
else if(表达式3)
else
语句3
语句n
嵌套选择结构主要用于处理多条件的问题。设计嵌套选择结构时,应
②只在else子句中嵌套if语句,形式如下:
if(表达式1)
语句1
else
if(表达式2) 语句2
else 语句3
③不断在else子句中嵌套if语句就形成多层嵌套,形式如下:
if(表达式1) 语句3
语句1
…
else
if(表达式n)
if(表达式2) 语句n
语句2
else(表达式n)
else(表达式3) 语句n
case常量表达式2: 语句2
…
case常量表达式n: 语句n
default:
语句n+1
}
【说明】
①switch后面的表达式必须用圆括号括起来,其取值必须是整型或字
符型。switch语句后面用花括号“{}”括起来的部分称为switch语句体,
第4章 C语言选择结构程序设计

《 C语言程序设计》
流程图
真 (非0) 表达式
假(0)
语句1
语句2
《 C语言程序设计》
例4.1
【例4.1】试用if…else语句编写程序,判断学生成绩 是否合格。
判断方法: ①如果成绩大于等于60,输出及格 ②否则输出成绩不及格
《 C语言程序设计》
4.2 if语句 if语句
C语言中if条件语句有三种结构形式,分别是: if结构(单分支结构) if if-else if-else结构(双分支结构) if-else-if结构 (多分支结构) if-else-if
《 C语言程序设计》
例4.5 设计一个应用程序,判断某一年是否为闰年
判断方法: ①如果该年能被4整除而不能被100整除,则为闰年; ②或者能被400整除也是闰年。 如: 1996年、2000年是闰年 1996年 2000年是闰年
1998年 1900年不是闰年 1998年、1900年不是闰年
逻辑表达式为: year%4==0 && year%100!=0 || year%400==0
4.4 条件运算符和条件表达式
条件运算符: 1、条件运算符:?:是C语言中惟一的一个三 目运算符。 一般形式为: 2、一般形式为: 表达式1 ? 表达式2 : 表达式3 3、操作过程:如果表达式1成立,则表达式2的 操作过程: 值就是此条件表达式的值;否则,表达式3 的值是此条件表达式的值。
《 C语言程序设计》
《 C语言程序设计》
4.2.2 if-else结构 if-else结构
1、格式: if(条件表达式 语句1 条件表达式) if(条件表达式) 语句1; 真 (非0) else 语句2; 语句 ; 语句1 2、执行过程:
第4章选择结构程序设计.ppt

材料与能源学院
2019/10/19
C语言程序设计
4.2.1 用if语句处理选择结构举例
例4.2 输入两个实数,按代数值由小到大 的顺序输出这两个数。
解题思路:
只需要做一次比较,然后进行一次交换即可 用if语句实现条件判断 关键是怎样实现两个变量值的互换
互换前 A ★
●B
互换后 A ●
表达式值为真(1)是非闰年,否则为闰年。
材料与能源学院
2019/10/19
Page21
C语言程序设计
4.5 条件运算符和条件表达式
条件运算符 格式:表达式1?表达式2:表达式3
功能:判断表达式1的值,如果成立就执行表达式2,否 则就执行表达式3
使用场合:若在if语句中,当被判别的表达式的值为“真” 或“假” 时,都执行一个赋值语句且向同一个变量赋值 时,可以用一个条件运算符来处理。
内嵌if 内嵌if
匹配规则:else总是
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;
材料与能源学院
2019/10/19
Page14
为(ch+32),即相应的小写字母。如果ch的值不是大 写字母,则条件表达式的值为ch,即不进行转换。
scanf("%c",& ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章选择(分支)结构程序设计 C语言中实现选择结构的控制语句有两种:条件分支语句if和开关分支语句switch。
一.if语句的三种形式:1、if(表达式)语句;即:条件为真,执行语句12、if(表达式) /* if 和 else是关键字,要小写 */语句1;else语句2;即:条件为真,执行语句1,否则执行语句23、 if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;…else if(表达式n)语句n;注意以下几点:①if 后面的条件可以是如下类型:● 关系表达式,如x>y● 逻辑表达式,如x>y&&y>z● 算术表达式,如x+y● 赋值表达式,如x=y● 变量,如x● 常量,如-5②如果语句1或语句2是一条语句,则{}一对花括号可以省略③if….else 是一条语句,else 不能单独出现,要注意else 与 if的搭配问题(既:else与其上面最近的且没使用的if搭配)二.开关分支语句switch1、形式switch(表达式){ case 常量表达式1: 语句1;break;case 常量表达式2: 语句2;break;case 常量表达式3: 语句3;break;……case 常量表达式n: 语句n;break;default : 语句n+1;}2、执行过程当表达式的值等于“常量表达式1”时,执行语句1;当表达式的值等于“常量表达式2” 时,执行语句2;……当表达式的值等于“常量表达式n”时,执行语句n;当表达式的值与“常量表达式1、常量表达式2……常量表达式n”谁都不等时,就执行default后的语句.注意以下几点:1、表达式应该有括号,注意大括号一定要有并且注意配对。
2、表达式可以是整型常量或变量、字符常量或变量、关系表达式、逻辑表达式、整型的算术表达式,总之是整数,但是通常用整型或字符型。
C语言计算表达式的值,然后找常量表达式的值匹配。
3、 break 是C语言的一种语句,其作用是跳出switch语句。
如果没有break,将会从某个语句组起顺次执行完所有的语句组。
有时我们希望这样,有时我们不希望这样。
因此可以通过break调整程序的走向。
4、switch和case是关键字,要小写5、case要和后面的常量表达式用空格分开,且这个常量表达式必须是整型常量或字符常量,不是变量。
6、default可以放在任何位置,不一定在最后,也可以没有练习题一、选择题1.假定所有变量均已正确定义,下列程序段运行后y的值是()。
int a=0, y=10;if (a=0) y--; else if(a>0)y++;else y+=y;A. 20B. 11C. 9D. 02.假定所有变量均已正确定义,下列程序段运行后x的值是()。
a=b=c=0; x=35;if (!a) x--; else if(b); if(c) x=3; else x=4;A. 34B. 4C. 35D. 33.下面的程序片段所表示的数学函数关系是()。
y=-1;if(x!=0) if(x>0) y=1; else y=0;4. 假定i和j为int型变量,则执行以下语句后j的值为()。
int i=1;switch(i++){case 1: for(j=0;j<9;j++) if (i==1) break;case 2: for(j=1;j<10;j++) if (i==2) break;case 3: printf(“i=%d\n”,i);}A. 0B. 1C. 9D. 105. 在C语言的语句中,用来决定分支流程的表达式是()。
A. 可用任意表达式B. 只能用逻辑表达式或关系表达式C. 只能用逻辑表达式D. 只能用关系表达式4.为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。
A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前未配对的最近的ifD.同一行上的if5.逻辑运算符两侧运算对象的数据类型()。
A.只能是0或1B.只能是0或非0正数C.只能是整型或字符型数据D.可以是任何类型的数据6.以下关于运算符优先顺序的描述中正确的是()。
A.关系运算符<算术运算符<赋值运算符<逻辑与运算符B.逻辑与运算符<关系运算符<算术运算符<赋值运算符C.赋值运算符<逻辑与运算符<关系运算符<算术运算符D.算术运算符<关系运算符<赋值运算符<逻辑与运算符7.下列运算符中优先级最高的是()。
A.< B.&& C.+ D.!=8.选择出合法的if语句(设int x,a,b,c;)()。
A.if(a=b) c++;B.if(a=<b) c++;C.if(a<>b) c++;D.if(a=>b) c++;9.能正确表示“当x的取值在[-58,-40]和[40,58]范围内为真,否则为假”的表达式是()。
A.(x>= -58) && (x<= -40) && (x>=40) && (x<=58)B.(x>= -58) || (x<= -40) || (x>=40) || (x<=58)C.(x>= -58) && (x<= -40) || (x>=40) && (x<=58)D.(x>= -58) | |(x<= -40) && (x>=40) || (x<=58)10.若希望当x的值为奇数时,表达式的值为“真”,x的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是()。
A.x%2==1 B.!(x%2==0)C.!(x%2) D.x%211.已知x=45, y=’a’, z=0; 则表达式(x>=z && y<’z’ || !y)的值是()。
A.0 B.语法错C.1 D.“假”12.逻辑运算符两侧运算对象的数据类型()。
A.只能是0或1B.只能是0或非0正数C.只能是整型或字符型数据D.可以是任何类型的数据二、填空题1.若从键盘输入58,则输出结果是________。
#include ”stdio.h”main(){int a;scanf(”%d”, &a);if (a>50) printf(”%d”, a);if (a>40) printf(”%d”,a);if (a>30) printf(”%d”,a);}2.设int x=9,y=8;表达式x==y+1的结果是________。
3.定义int x,y;执行y=(x=1,++x,x+2);后, y的值是________。
4.定义int x=10,y,z; 执行y=z=x; x=y==z;后, x的结果是________。
5.设int a=1,b=2,c,d,e; 执行c=(-a++)+(++b);d=(b--)+(++a)-a;e=(a/(++b))-(a/(--a));请问a,b,c,d,e的结果是:________。
6.设int a=2,b=3,c,d,e,f; 执行c=(a++>= --b);d=(a==++b);e=(a--!=b);f=(++a>b--);请问a,b,c,d,e,f的结果是:________。
7.以下程序的运行结果是________。
#include ”stdio.h”main(){int a,b,c,s,w,t;s=w=t=0;a= -1; b=3; c=3;if (c>0) s=a+b;if (a<=0){ if (b>0)if (c<=0) w=a-b;}else if (c>0) w=a-b;else t=c;printf(”%d %d %d”, s,w,t);}8.以下程序的运行结果是________。
#include ”stdio.h”main(){int a, b= 250, c;if ((c=b)<0) a=4;else if (b=0) a=5;else a=6;printf(”\t%d\t%d\n”,a,c);if (c=(b==0))a=5;printf(”\t%d\t%d\n”,a,c);if (a=c=b) a=4;printf(”\t%d\t%d\n”,a,c);}9.以下程序是对用户输入的字母进行大小写转换。
请在【】内填入正确内容。
#include ”stdio.h”main(){char ch;printf(”please input a letter:”);scanf(”%c”,&ch);ch=ch+32;else if (ch>=’a’ && ch<=’z’);printf(” the converted letter is: %c\n”,ch);}10.以下程序是对从键盘输入的任何三个整数,求出其中的最小值。
请在【】内填入正确内容。
#include ”stdio.h”main(){int a,b,c,min;printf(”please input three numbers:”);scanf(”%d%d%d”,&a,&b,&c);min=b;elsemin=a;if (min>c) printf(”min=%d\n”,min);}11.以下程序段的运行结果是________。
#include ”stdio.h”main(){char ch1=’a’,ch2=’A’;switch (ch1){ case ’a’:switch (ch2){case ’A’: printf(”good!\n”); break;case ’B’: printf(”bad!\n”); break;}case ’b’: printf(”joke\n”);}}12.以下程序运行后的输出结果是_____________。
#include ”stdio.h”main(){int x=10, y=20, t=0;if (x==y) t=x; x=y; y=t;printf(”%d,%d\n”,x,y);}13.执行以下语句后,x、y和z 的值分别为_____________。
int x,y,z;x=y=z=0;++x || ++y && ++z;三、编程题1.将任意三个整数a、b、c按从大到小的顺序输出2.将百分制成绩划分为五段输出,用switch语句实现。