C语言第4章选择结构程序设计
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语句,实现多分支的选择结构 语句, 语句
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语言程序设计(第五版)》第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语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。
常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。
Ch04_选择结构程序设计
典型示例
求最大值 成绩等级 求方程解
作业/上机
作业(做在书上)
TP62 习题4:一、二、三 TP65 习题4:2,3,5,6
上机
4.1 关系表达式与逻辑表达式
关系运算符及优先级
4.1 关系表达式与逻辑表达式
关系表达式
用关系运算符将两个操作数(常量、变量或表达式)连 接起来,进行关系运算的式子,称为关系表达式。 例如,假设n1=5,n2=8,n3=10,则:
1)关系表达式n1==n2的值为0。 2)关系表达式n1<=n3的值为1。 3)关系表达式n1+n2>n3的值为1。 4)关系表达式n1== n2>n3的值等为0。
举例
if(a>b) max=a; else max=b;
<==>
max = (a > b) ? a : b
4.4 switch表达式
switch格式
switch (<表达式>) if (<表达式> == <数值1>) { <语句或语句组1>; case <数值1>: else if (<表达式> == <数值2>) [<语句或语句组1>;] <语句或语句组2>; <==> case <数值2>: …… [<语句或语句组2>;] else …… <语句或语句组>; [default: <语句或语句组>;] }
例:设a=4,b=5: !a的值为0 a || b的值为1 4 && 0 || 2的值为1
C语言程序设计第四章
运行情况: 1989↙ 1989is not a leap year.
2000↙
2000 is a leap year.
C程序设计
第五章
选择结构程序设计
例4.6 求
2 ax bx c 0 方程的解
#include "stdio.h" #include "math.h" main() {float a,b,c,d,disc,x1,x2,realpart,imagpart; scanf("%f,%f,%f",&a,&b,&c); printf("The equation"); if (fabs(a)<=1e-6) printf("is not a quadratic"); else disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("has two equal roots:%8.4f\n",-b/(2*a)); else if(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2); } else {realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } }
C语言知识点:第4章 选择结构
7. 分支结构程序设计
作用:根据条件控制程序流向。 条件的组成:各种类型的常量、变量、表达式(常用:关系/逻辑表达式)
8. 单分支 if 语句
1、如果令狐冲的 C 语言考试成绩大于 90 分,师父就奖励他一本武功秘笈 使用 if 条件结构可以解决 if 条件结构是根据条件判断之后再做处理 基本的 if 条件结构 if ( 条件 ) { //语句 ~2~
C 语言程序设计知识点
主讲教师:杨剑
第 4 章:选择结构
1. 本章目标
熟练使用多重 if 结构 熟练使用嵌套 if 结构 熟练使用 switch 结构 理解条件运算符的用法
2. 结构化程序设计的核心思想
采用顺序、选择和循环三种基本结构作为程序设计的基本单元 只有一个入口; 只有一个出口; 采用“自顶向下、逐步求精”和模块化的方法进行结构化程序设计
C 语言程序设计知识点
主讲教师:杨剑
case 3: printf ("出任峨嵋掌门"); default: printf ("被逐出师门"); } 如果需要每个 case 执行完后跳出, 在每个 case 后不要忘记写 break; int mingCi = 1; switch (mingCi){ case 1: printf ("出任武林盟主"); case 2: printf ("出任武当掌门"); case 2: printf ("出任峨嵋掌门"); default: printf ("被逐出师门"); } case 后面的常量必须各不相同
C 语言程序设计知识点
主讲教师:杨剑
D. y=sqrt(x>=0?x:-x); 答案:B
第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章 选择结构程序设计
c语言 第四章 选择结构课件
if (expr1) if (expr2) statement1 else statement2
内嵌if
if (expr1) if (expr2) statement1
else statement3
内嵌if
if (expr1) statement1
else if(expr3) statement3 else statement4
if ~ else 配对原则:缺省{ }时,else 总是和它上面离它最近的未配对的if配对
if(……) if(……) if(……) else…... else…...
else…...
例: if (a==b) if(b==c) printf("a==b==c");
else printf("a!=b");
if(x>y) printf("X>Y\n");
else printf("X<Y\n");
else printf("X==Y\n");
}
运行:Enter integer x,y:12,23 X<Y Enter integer x,y:12,6 X>Y Enter integer x,y:12,12 X==Y
内嵌if
if (expr1)
if (expr2) else
statement1 statement2
内嵌if
else
if(expr3) else
statement3 statement4
内嵌if
例 输入两数并判断其大小关系
main() { int x,y;
printf("Enter integer x,y:"); scanf("%d,%d",&x,&y); if(x!=y)
C语言课件 选择结构程序设计
述
4-3 switch语句和break语句
4.3.1 break语句(辅助控制语句)
break语句的格式:break; break语句不能单独使用,只能与switch和循环语句
结合使用。 功能:在循环语句和switch语句中,终止并跳出循环
体或开关体。
4.3.2 switch语句(开关语句)
格式: switch(表达式) { case E1: 语句组1;break;
C
语 言
关系运算注意:
程
序
例 应避免对实数作相等或不等的判断,而只能
设
使用“<”和“>”,原因在于舍入误差可能造
计
成
两个逻辑上应该相等的数不相等。
如 1.0/3.0*3.0==1.0
可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6
例 注意区分“=”与“==”
第 二 章 数 据 描 述
1表示“真”,
描
述
C
语 言
优先级与结合方向:
程
序
设 计
!
高
&& 低
||
! :从右向左
第
二
&& :从左向右
章
数
据
|| :从左向右
描
述
高
!(非) 算术运算符 关系运算符 &&和|| 赋值运算符=
低
C
语
言
程
逻辑表达式的值:
序
设
计
例 a=4;b=5;
!a
值为0
a&&b
值为1
a||b
值为1
!a||b
值为1
C语言第四章选择结构ppt课件
/* 求 x 的绝对值并赋给 y */
/* 输入 x 的值 */
/* 输出 x 的绝对值 */
/* 编译预处理:包含头文件 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写出以下语句:
表达式1 ? 表达式2 :表达式3
表达式1为真,结果为表达式2的值 表达式为假,结果为表达式3的结果; 运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右自左”。
例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a < b ) ? ( c + d ) : ( + + n )
if ( 表达式1 ) if ( 表达式2 ) 语句1; else 语句2;else if ( 表达式3 ) 语句3; else 语句4;
实现if ~ else 正确配对方法:加{ }
五、条件运算符
能否把两条语句合成一句,更好地体现这种逻辑关系呢?这就是 if ...... else 语句的功能。
简单的if 语句只能表达“如果 ,那么 ”的含义,而if ...... else 语句却能表达“如果 那么 否则 ”的含义。
If ( x>=0) y=x;if (x<0) y=-x;
a>b?a:c>d?c:d
a>b?a:(c>d?c:d)
表达式值为15,n=2
六、 switch 语句
switch 语句是多分支的选择语句又称开关语句。
第四章 选择(分支)结构程序设计
用一个逻辑表达式来表示一个复杂的条件。
例如:判断某一年是否闰年。 闰年:能被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!”);
第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、执行过程:
C语言程序设计教程:选择结构程序设计
4.2 switch语句
(5) case后面的语句块可以是一条语句或多条语句,也可 是空语句,但不需要用大括号括起来。
(6) 当case后面常量表达式与switch后面的表达式均不匹 配时,则执行default后面的语句块,default可以放在程序的 任何位置,不一定要位于最后。
(7) 多个case可以共用一个语句块。 例如: switch(n)
注意:当多分支中有多个表达式同时满足时,只执行第一个与之匹配的语句块。 因此要注意对多分支中条件表达式的书写次序,防止某些值被过滤掉。
15
4.1.1 if语句的三种形式
思考:若将例4.4中程序改为以下两种写法,结果分别会如何?
程序段一如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=90)
4.1.1 if语句的三种形式
程序段二如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=60)
printf("及格!\n "); else if(score>=70)
9
4.1.1 if语句的三种形式
2. 双分支选择结构
双分支结构语法的一般格式为:
if(表达式)
{
语句块1;
}
第4章 选择结构程序设计
(2)switch语句,实现多分支的选择结构
4.1 选择结构和条件判断
例4.1 在例3.5的基础上对程序进行改进。题目要求
2 求 ax bx c 0 方程的根。
由键盘输入a,b,c。假设a,b,c的值任意,并不保证
b2 4ac 0
b2 4ac 0 。需要在程序中进行判别,如果
例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。
解题思路:可以先用伪代码写出算法: if a>b,a和b对换 if a>c,a和c对换 if b>c,b和c对换 顺序输出a,b,c (a是a、b中的小者) (a是三者中最小者) (b是三者中次小者)
#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) { { { if(a>c) if(b>c) 如果 a>b,将a和b对换 } } } a是a、b中的小者 t=a; a=b; b=t; t=a; a=c; c=t; t=b; b=c; c=t;
a>b ? printf(“%d”,a): printf(“%d”,b);
4.5 条件运算符和条件表达式
例4.4 输入一个字符,判别它是否大写字母,如果是, 将它转换成小写字母;如果不是,不转换。然后输出最 后得到的字符。 解题思路:用条件表达式来处理,当字母是大写时,转 换成小写字母,否则不转换
if (disc<0) printf("This equation hav't real roots\n");
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最后一个分支的default语句后面可以不加“break;”语句。 根据程序的需要在语句后面加或不加“break”,可以使 多分支处理变得非常灵活。如果多种情况需要共用一个 执行语句,可用case的常量表达式将多种情况列出,在 最后一种情况之后,才安排需执行的语句。例如: switch(i) { case l: case 2: case 3: printf(″ABC\n″); break; case 4: printf(″D\n″); break; default: printf(″E\n″); } 当表达式的值为l,2,3中任一个值,都会输出:ABC。
例4.7 根据变量i的值,输出字符。 #include <stdio.h> void main() { int i; printf(″please input i:″); scanf(″%d″,&i); switch(i) { case l: printf(″A\n″); case 2: printf(″B\n″); case 3: printf(″C\n″); case 4: printf(″D\n″); default: printf(″E\n″); } }
为了使程序结构清晰,避免产生逻辑错误,可以加花括 号来确定配对关系。 例如: if(x<=0) { if(x<=-10) /*当x<=-10*/ y=2*x; else /*当-10<x<=0*/ y=2+x; } else /*当x>0时走这条分支*/ { if(x<=10) /*当0<x<=l 0*/ y=x-2; else /*当10<x*/ y=x/10; } 添加花括号后可以很清楚地表示出else与外层if的配对情况。
图4.1 单分支选择结构
例4.1 输入一个数,如果该数大于等于0, 则输出它的平方根,当它小于0,则不做 任何处理。 分析: (1)输入的数存入变量x; (2)使用选择if(x>=0)。
程序: #include <stdio.h> #include <math.h> main() { double x; scanf (″%lf″,&x), if ( x>=0) printf(″%10.6lf″,sqrt(x)); /* sqrt(x)开平方库函数调用*/ }
选择结构是根据运行时的情况自动选择要执行的 语句。在C语言中,用if语句或switch语句实现选择结 构。if语句称作条件语句,switch语句称作分情况语句。
如何表示条件,如何使用选择结构制程序流程,是学
习本章要掌握的主要内容。
§4.1
if 语句
先来看这样一个问题,计算分段函数: y= 3-x x≤0 2/x x>0 求解问题的流程如下: (1)输入x; (2)如果x<=0则y=3-x;否则y=2/x; (3)输出y的值。
注意: 虽说“表达式”可以是数值型,但由于浮点数 是用近似值表示的。“= =”用于两个浮点数的判断 时,由于存储误差,会得出错误的结果。 例如: 1.0/3.0 *3.0= =1.0 由于1.0/3.0得到的值用有限位保存,是近似 值,所以,1.0/3.0*3.0≠1.0。也就是说,“表达式” 中不可以是浮点数。
程序: void main() { int tall; char sex; printf(″input sex and tall:″); scanf(″%c%d″,&sex,&tall); if(sex==′F′) { if(tall>=150)printf(″A″); else printf(″B″); }
else { if(tall>=170)printf(″A″); else printf(″B″); } }
§4.2
switch 语句
switch语句是另一种分支控制语句, 其特点是可以根据一个表达式的多种值, 选择多个分支,因而也称为分情况语句 和开关语句。实际问题中常常需要用到 多分支结构,例如,学生成绩分档次(85 分以上为“A”等,70~84分为“B”等, 60~69分为“C”等……)。
多分支选择结构
多分支选择结构的if语句形式如下: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else …… if(表达式n) 语句n; else语句n+1;
执行多分支选择if语句时,如果表达式i的值为 非0,则执行语句i,后面的语句再不执行;否 则执行else后面的语句。 多分支选择的流程图如图4.3所示。
双分支if语句
双分支选择语句为if-else,语句的结构形 式为: if(表达式) 语句1 else 语句2 当表达式值为非0,则执行语句1;当表达 式值为0,则执行语句2。 控制流程如图4.2所示。
图4.2 双分支选择结构
在例4.1中,若输入的数据大于等于0,输出它的平方根; 否则,就输出数据出错信息,用if-else结构形式的选择语句 可以实现两种处理的分支。 编程如下: #include <stdio.h> #include <math.h> main() { double x; scanf(″%lf″,&x); if(x>=0) printf(″%10.6lf″,sqrt(x)); /*sqrt(x)开平方库函数调用*/ else printf(″Enter data error! ″); /*输出数据错误信息*/ }
若输入i的值为3,则与第3个常量相等,执行时会以 case3:为入口,执行此后的所有语句,其输出结果为: C D E 为了实现多分支,在执行了满足条件的语句后,就要使 流程跳出switch分支结构,而不执行其后续的case后面 的语句。因此,必须在常量表达式后面语句的最后,加 上“break"语句。具体形式如下: switch(i) { case l: printf(″A\n″); break; case 2: printf(″B\n″); break; case 3: printf(″C\n″); break; case 4: printf(″D\n″); break; default: printf(″E\n″); }
switch语句一般形式如下: switch(表达式) { case常量1:语句1; case常量2:语句2; case常量3:语句3; …… case常量n:语句n; default: 语句n+1; }
语句中的“表达式”可以是数值型或是字符型, 表达式的值称为开关值。语句结构中各个case后常 量表达式的值必须互不相同,否则执行时将出现矛 盾,即同一个开关值,将对应多种执行方案。
当表达式的值与某一个常量相等时,就执行常 量后面的语句。 case常量起的是语句标号的作用,程序并不在 此进行判断。当程序执行某个标号的语句,就会按 顺序执行以后的语句,直到遇到break语句或switch 语句结束。
若表达式的值与所有常量表达式的值都不相 等,则执行default:后面的语句。default语句一般 放在最后,否则会出现逻辑错误。
显然程序的流程必须由x的值确定。这类程序 结构又称为分支结构,分支的依据是根据某 个变量或表达式的值做出判定,以决定执行 哪些语句和跳过哪些语句。分支流程控制可 以用if语句实现。 C语言的if语句有3种形式: 单分支选择if语句 双分支选择if语句 多分支选择if语句。
单分支if语句
单分支选择语句if的形式为: if(表达式) 语句 执行单分支选择语句时,首先判断表达 式的值,若表达式值为非0,则执行表达式后 面的语句;若表达式值为0,则不执行表达式 后面的语句。 控制流程如图4.1所示。
图4.3 多分支选择的流程
例4.4 计算分段函数: 2*x x≤-10 y= 2+x -10<x≤0 x-2 0<x≤10 x/10 x>10 分析: 此多分支结构可用图4.4所示的流程图表 示。
图4.4 例题4.3的流程图
分支选择结构语句如下: if(x<=-10) y=2*x; else /*x>-10*/ if(x<=0) /*看x是否小于等于0*/ y=2+x; else /*当x>0*/ if(x<=10) /*看x是否小于等于10*/ y=x-2; else /*x>10*/ y=x/10;
例4.2 输入两个整数,求出大的数并输出。 #include <stdio.h> main() { int a,b,max; scanf (″%d,%d″, &a,&b); max=b; /*首先假设b为大的一个数*/ if ( a>b) max=a; /* 如果b不为大的一个数,则a是大的一个数*/ printf(″%d″, max); }
例4.6 编程实现:根据两个数sex和tall分类,如 果sex为′F′,当tall大于等于150时,输出″A″,否 则输出″B″;若sex不为′F′,当tall大于等于170时, 输出A,否则输出B。 分析: (1)输入sex和tall (2)根据sex分支 (3)在sex为′F′的分支中判断tall≥150否 (4)在sex不为′ F′的分支中判断tall≥170否
图4.5 例题4.3的两层嵌套流程图
在if语句的嵌套结构中并不需要对称, 只根据需要决定嵌套的形式。在写if语句 的嵌套结构时,要注意else与if配对的规 则,else与同一层最接近它而又没有其他 else语句与之相匹配的if语句配对。如果 忽略了else与if配对,就会发生逻辑错误。 如果读者采用较好的编程习惯,即缩进形 式,那么if与else的配对也许就更明了 。
例4.3 输入两个数,比较其大小,将较大的数输出。 在例4.2中,我们用单分支实现过这个程序。现在我们用双分支 实现。流程分析: (1)输入两个数据a,b; (2)如果a>b则输出a;否则,输出b。 使用if-else选择结构进行双分支,程序设计如下: #include <stdio.h> main() {loat a,b; scanf(″%f,%f″,&a,&b); if(a>b) printf(″%f″,a); else printf(″%f″,b); } 注意:else之前有一分号。如无此分号,则会出现语法错误。