第4章 选择结构程序设计pptConvertorWord文档格式.docx
《第4章 选择结构程序设计pptConvertorWord文档格式.docx》由会员分享,可在线阅读,更多相关《第4章 选择结构程序设计pptConvertorWord文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
![第4章 选择结构程序设计pptConvertorWord文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/25/24b04d5d-0bc0-40b7-8af8-4389c3a75272/24b04d5d-0bc0-40b7-8af8-4389c3a752721.gif)
{
doublea,b,c,disc,x1,x2,p,q;
scanf("
%lf%lf%lf"
&
a,&
b,&
c);
disc=b*b-4*a*c;
计算b2-4ac,disc的值变为-15
if(disc<
0)
printf(“hasnotrealroots\n”);
else
{p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf(“realroots:
\nx1=%7.2f\n
x2=%7.2f\n”,x1,x2);
}
return0;
}
-15<
0为真
计算b2-4ac,disc的值变为8
8<
0为假
p的值变为-1
q的值变为0.71
x1的值变为-0.29
x2的值变为-1.71
选择结构,用if语句实现的
复合语句
4.2.1用if语句处理选择结构举例
4.2.2if语句的一般形式
例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。
只需要做一次比较,然后进行一次交换即可
用if语句实现条件判断
关键是怎样实现两个变量值的互换
★
●
A
B
互换前
互换后
C
intmain()
{floata,b,t;
%f,%f"
b);
if(a>
b)
{t=a;
a=b;
b=t;
printf("
%5.2f,%5.2f\n"
a,b);
将a和b的值互换
如果a>
b
例4.3输入3个数a,b,c,要求按由小到大的顺序输出。
可以先用伪代码写出算法:
ifa>
b,a和b对换(a是a、b中的小者)
c,a和c对换(a是三者中最小者)
ifb>
c,b和c对换(b是三者中次小者)
顺序输出a,b,c
{floata,b,c,t;
%f,%f,%f"
}
c)
a=c;
c=t;
if(b>
c)
{t=b;
b=c;
%5.2f,%5.2f,%5.2f\n"
a,b,c);
如果a>
b,将a和b对换
a是a、b中的小者
c,将a和c对换
a是三者中的小者
如果b>
c,将b和c对换
b是三者中的次小者
if(表达式)语句1
[else语句2]
关系表达式
逻辑表达式
数值表达式
方括号内的部分为可选的
简单的语句
另一个if语句等
最常用的3种if语句形式:
1.if(表达式)语句1(没有else子句)
2.if(表达式)语句1
else语句2(有else子句)
3.if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
┆
elseif(表达式m)语句m
else语句m+1
(在else部分又嵌套了多层的if语句)
if(number>
500)cost=0.15;
elseif(number>
300)cost=0.10;
100)cost=0.075;
50)cost=0.05;
elsecost=0;
if(number>
else
if(number>
elsecost=0;
等价于
分号不能丢
说明:
(1)整个if语句可写在多行上,也可写在一行上
但都是一个整体,属于同一个语句
(2)“语句1”…“语句m”是if中的内嵌语句
内嵌语句也可以是一个if语句
(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句
4.3.1关系运算符及其优先次序
4.3.2关系表达式
关系运算符:
用来对两个数值进行比较的比较运算符
C语言提供6种关系运算符:
①<(小于)②<=(小于或等于)
③>(大于)④>=(大于或等于)
⑤==(等于)⑥!
=(不等于)
优先级相同(高)
优先级相同(低)
关系、算术、赋值运算符的优先级
c>
a+b等效于c>
(a+b)
a>
b==c等效于(a>
b)==c
a==b<
c等效于a==(b<
a=b>
c等效于a=(b>
用关系运算符将两个数值或数值表达式连接起来的式子
关系表达式的值是一个逻辑值,即“真”或“假”
在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”
4.4.1逻辑运算符及其优先次序
4.4.2逻辑表达式
4.4.3逻辑型变量
3种逻辑运算符:
&
(逻辑与)||(逻辑或)!
(逻辑非)
和||是双目(元)运算符
!
是一目(元)运算符
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子
判断年龄在13至17岁之内?
age>
=13&
age<
=17
判断年龄小于12或大于65?
age<
12||age>
65
a
a
b
a&
a||b
逻辑运算的真值表
逻辑运算符的优先次序
→&
→||(!
为三者中最高)
与其他运算符的优先次序
(高)
算术运算符
关系运算符
&
和||
赋值运算符(低)
逻辑表达式的值应该是逻辑量“真”或“假”
编译系统在表示逻辑运算结果时
以数值1代表“真”,以0代表“假”
但在判断一个量是否为“真”时
以0代表“假”,以非0代表“真”
注意:
将一个非零的数值认作为“真”
(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
修改后的逻辑运算真值表
非0
1
判别某一年是否闰年,用逻辑表达式表示
闰年的条件是符合下面二者之一:
①能被4整除,但不能被100整除,如2008
②能被400整除,如2000
(year%4==0&
year100!
=0)
||year%400==0
如果表达式值为1,则闰年;
否则为非闰年
这是C99所增加的一种数据类型
可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算
有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值
如:
if(a>
max=a;
max=b;
条件运算符
max=(a>
b)?
a:
b;
条件表达式
条件表达式的一般形式为
表达式1?
表达式2:
表达式3
条件运算符的执行顺序:
求解表达式1
若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值
若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值
条件运算符优先于赋值运算符
条件运算符的结合方向为“自右至左”
以下为合法的使用方法:
b?
(max=a):
(max=b);
printf(“%d”,a):
printf(“%d”,b);
例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;
如果不是,不转换。
然后输出最后得到的字符。
用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换
{
charch;
%c"
ch);
ch=(ch>
='
A'
ch<
Z‘)?
(ch+32):
ch;
%c\n"
ch);
在if语句中又包含一个或多个if语句称为if语句的嵌套
一般形式:
if()
if()语句1
else语句2
else
if()语句3
else语句4
内嵌if
else总是与它上面最近的未配对的if配对
if()
{
if()语句1
}
else语句2
{}限定了内嵌if范围
例4.5有一函数:
编一程序,输入一个x值,要求输出相应的y值。
用if语句检查x的值,根据x的值决定赋予y的值
由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现
方法1
(1)先后用3个独立的if语句处理:
输入x
若x<
0,则y=-1
若x=0,则y=0
若x>
0,则y=1
输出x和y
scanf("
%d"
x);
if(x<
0)y=-1;
if(x==0)y=0;
if(x>
0)y=1;
printf("
x=%d,y=%d\n"
x,y);
方法2
(2)用一个嵌套的if语句处理:
若x<
0,则y=-1
否则
若x=0,则y=0
否则y=1
0)y=-1;
if(x==0)y=0;
elsey=1;
if(x>
if(x>
0)y=1;
elsey=0;
elsey=-1;
提倡内嵌if放在else中
switch语句用来实现多分支选择结构
学生成绩分类
85分以上为’A’等
70~84分为’B’等
60~69分为’C’等
……
人口统计分类
按年龄分为老、中、青、少、儿童
例4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。
成绩的等级由键盘输入。
判断出这是一个多分支选择问题
根据百分制分数将学生成绩分为4个等级
如果用if语句,至少要用3层嵌套的if,进行3次检查判断
用switch语句进行一次检查即可得到结果
{chargrade;
grade);
Yourscore:
"
);
switch(grade)
{case'
:
85~100\n"
break;
case'
B'
70~84\n"
C'
60~69\n"
D'
<
60\n"
default:
enterdataerror!
\n"
值为A
不能少
值为C
gra