选择结构Word文档格式.docx
- 文档编号:20814056
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:16
- 大小:26.06KB
选择结构Word文档格式.docx
《选择结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《选择结构Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
1.0/3.0*3.0==1.0
在数学上显然应该是一个恒等式,但由于1.0/3.0得到的值的有效位数是有限的,并不等于0.3333333333333┅,因此上面关系表达式的值为0(假),并不为1(真)。
所以应避免对两个实数表达式作“相等”或“不相等”的判别。
上式可改写为:
fabs(1.0/3.0*3.0-1.0)<1e-5例题
a=2,b=2,c=1
关系表达式“(a>
b)==c”的值为“”
③应当注意:
(1)表达式5>2>7>8在数学上是不允许的,而在C中是允许的。
按自左而右的结合求解:
①5>2值为1;
②1>7值为0;
③0>8的值为0。
即整个关系表达式的值为0。
(2)由于关系表达式的值是整型数0或1,故也可以将其看成是一种整型表达式。
例如,若有:
inti=1,j=7,a;
a=i+(j%4!
=0);
由于j%4的值为3,而3!
=0的值为1(真),故a的值为2。
但这种表达式的含义不易被理解,初学时不宜多用。
二、逻辑运算符和逻辑表达式
1、C语言提供了3种逻辑运算符
(1)
(2)||(3)!
关于表达式的值
2、逻辑运算符中逻辑与和逻辑式是双目运算符,逻辑非是单目运算符,位于运算对象的左侧
!
01&
&
01|0
3、优先级
!
——||
4、逻辑运算符与赋值运算符、算术运算符、关系运算符之间的优先级别
!
算术运算符关系运算符逻辑与||赋值算符
5、逻辑表达式和逻辑表达式的值
1、由逻辑运算符和逻辑运算对象组成的表达式称为逻辑表达式,逻辑运算符对象可以是C语言中任意合法的表达式
6、逻辑表达式和逻辑表达式的值
1、逻辑表达式的结果是0(假)1(真)
2、逻辑运算真值表
a
b
a||b
a&
真
假
逻辑运算中有很多有趣的规律。
(1)在一个&
表达式中,若&
的一端为0,则不必再计算另一端,该表达式的值肯定为0(在C语言中由于&
是从左向右结合的,所以只考虑左端,即当&
号的左端为0时,不再计算其右端),可以把它记为:
0&
a=0
(m=a>
b)&
(n=c<
d)当a=1,b=2,c=3,d=4m和n和值
(2)在一个||表达式中,若||的一端为1,则不必计算另一端,该||表达式的值必为1。
现把它记为:
1||a=1
诸如此类关于表达式的值的规律有如下一些:
0||a==a1&
a==a1||a==10&
a==0a||!
a==10&
a==0
以及
a||a==aa&
a==a!
(a||b)==!
(a&
b)==!
a||!
b!
(!
a)==a
②要表示x在区间[a,b]中,在数学中使用表达式a≤x≤b。
但在C语言中使用表达式“a<=x<=b”会与原来的意义不同。
假设a=0;
b=0.5。
若x=0.3,则执行a<=x<=b时先求出“a<=x”的值得1(真),再计算“1<=b”得0(假)。
因此,为了判别x是否在[a,b]范围内,应写成:
a<=x&
x<=b
“&
”是下面将要介绍的逻辑运算符“与”。
a<=x的值为1(真)且x<=b的值亦为1(真),则整个表达式的值为1(真)。
7、例题
(1)若a=4则!
a的值?
0
(2)若a=4,b=5则a&
b值为?
(3)a=4,b=5a||b?
(4)a=4,b=5!
a||b?
(5)4&
0||2?
(6)5>
3&
2||8<
4-!
0
5>
4-11&
2||0
(7)判别润年
(1)能被4整除,但不能被100整除
(2)能被4整除,又不能被400整除
(year%4==0&
year%100)||year%400==0)
(year%4==0||(year%100)&
year%400==0)
二、选择语句
㈠1、if语句
①if(表达式)语句;
例:
if(x>
y)printf(“%d”,x);
if(a>
b){t=a;
a=b;
b=t;
}
②if(表达式)语句1;
else语句2;
(1)if(x>
elseprintf(“%d”,y);
(2)if(a!
=0)printf(“a!
=0”);
elseprintf(“a--=0”);
(2)说明
①两种形式的if语句中在if后面都有“表达式”,表达式类型可以是任意合法的C语言表达式,也可以是任意类型的数据;
在执行if语句时迁对表达式求解,若表达式的值0,按“假”处理,若表达式的值为非0,按“真”处理,执行指定的语句
例:
if(3)printf(“OK”);
合法
②if(x>
0)
printf(“%f”,x);
else
printf(“%f”,-x);
但应当注意,以上语句尽管各自后面都有一个括号,得属于一条语句
3if语句后只能接一条语句,注意“if语句的表达式后不能加分号则将成为空语句;
else后面不能接表达式
if(a>
b);
Printf(“%d“,a);
(4)如果子句中需在多个语句,则用花括号把一组语句括起来组成复合语句“}”后不加分号
b)
{
Pintf(”%d”,b);
Pintf(”%d”,a);
⑸:
例题
①输入两个数,分别放入x和y,若两个数不相等,则输出其中的大数,若两个数相等,则输出字符串“x==y”和x的值;
#include<
stdio.h>
main()
intx,y;
printf("
Enterx&
y\n"
);
scanf("
%d%d"
&
x,&
y);
xy:
%d%d\n"
x,y);
56
y)printf("
x=%d\n"
x);
2010
if(y>
x)printf("
y=%d\n"
y);
2020
if(x==y)printf("
x==y%d:
\n"
2输入三个整数,分别放入变量a,b,c中,程序把输入的数据重新按由小到大的顺序放在变量,a,b,c中,最后输出a,b,c的值
inta,b,c,t;
Entera,b,c\n"
%d%d%d"
a,&
b,&
c);
a,b,c:
%d%d%d\n"
a,b,c);
}
c){t=a;
a=c;
c=t;
if(b>
c){t=b;
b=c;
%4d%4d%4d\n"
3输入两个不相等的整数分别给x和y,输出其中的大数
x,y:
%d,%d\n"
max=x=%d"
else
max=y=%d"
④输入一个整数,判别它是否能被3整除;
intn;
printf("
Entern:
"
scanf("
%d"
n);
%d\n"
n);
if(n%3==0)printf("
n=%dYES"
else
n=%dNO"
4分析以下程序的输出结果
Ⅰ、
inta,b;
a);
b=1;
if(a==5)
{b=a+3;
b=6;
}
b);
Ⅱ
inta,b,t;
b)
t=a;
a=%d,b=%d"
a,b);
Ⅲ
intx=-1,y;
if(x!
=0)y=1;
if(x>
0)y=1;
else
y=0;
㈡、嵌套的if语句
⑴、嵌套if语句的格式
一般的语句的格式;
if(表达式)
语句1;
语句2;
若if和else的语句里在嵌套语句
if(表达式)
if(表达式)语句1;
if(表达式)语句3;
else语句4;
只在else是嵌套语句
if(表达式)语句1;
elseif(表达式)语句1;
elseif(表达式)语句2;
elseif(表达式)语句3;
例题:
①、输出的成绩分等级
90分以上为A级;
·
80分及以上,90分以下,B级;
70分及以上,80分以下,C级;
60分以下,D级。
intmain(void)
floatscore;
Inputascre:
%f"
score);
if(score>
=90)
printf("
%fisA\n"
score);
elseif(score>
=80)
%fisB\n"
=70)
%fisC\n"
=60)
%fisD\n"
%fisE\n"
return0;
②、求y的值
-1(x<
y=0(x=0)
1(x>
main(void)
intx,y;
x);
if(x<
0)y=-1;
elseif(x=0)y=0;
elsey=1;
三、条件表达式构成的先择结构
1、条件运算符
条件运算符由两面三个运算组成,他们是”?
:
”
这是C语言中的唯一一个三目运算符
2、条件表达式:
表达式样?
表达式2:
表达式3
3、结果
4、条件运算符的优先级
只高于赋值运算符
•max=(a>b?
a:
•a>
b?
b+1
5条件运算符的结合方式是“自右向左”
a>
c>
d?
c:
d相当于a>
a(c>
d)
6条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同
x?
’a’:
’b’
表达式的类型也可以不同,此时条件表达式的值的类型为二者中较高有类型
比较三个数的大小
floata,b;
input2relasplease:
scanf("
%f%f"
Themaxis%f\n"
a>
2、求绝对值的和
intmain(void)/*计算a+|b|的值*/
input2realsplease:
\n%f+|%f|=%f"
a,b,b>
=0?
a+b:
a-b);
四、switch语句以及用switch语句和break语句构成的选取择结构
1、switch语句格式
switch(表达式)
{case常量表达式1:
语句序列1
case常量表达式2:
语句序列2
case常量表达式n:
语句序列n
default:
语句序列n+1
注意∶如果switch的判断表达式的值与case常量表达式i的值相等(称为匹配),在执行后面的语句序列i之后,并不立即退出switch结构,而是继续执行语句序列i+1,语句序列i+2,┅.语句序列n.语句序列n+1.如图3.16所示,这种流程往往不是编程者所希望的。
编程者希望在执行匹配的常量表达式后面的语句序列i之后,应立即退出switch结构。
为了解决这一问题,可以在各语句序列后面加一条break语句,使流程脱离switch结构。
break;
┇
1、输出月份名称
voidmain()
intmonth;
请输入年份"
month);
switch(month)
case1:
January\n"
case2:
February\n"
case3:
March\n"
case4:
April\n"
case5:
May\n"
case6:
June\n"
case7:
Jauly\n"
case8:
August\n"
case9:
September\n"
case10:
October\n"
case11:
November\n"
case12:
December\n"
Illegalmonth\n"
使用switch结构须注意以下几点:
•
(1)一个switch结构的执行部分是一个由一些case子结构与一个可缺省的default子结构组成的复合语句,它们位于一对花括号之中。
•
(2)switch的判断表达式只能对整数求值,可以使用字符或整数,但不能使用浮点表达式。
case表达式应当是整型常数表达式,不能含有变量与函数的常数表达式。
例如可以是:
case3+4:
但不允许写为:
intx=3,y=4;
switch(z)
{
…
casex+y:
(3)一个switch结构中不可以出现两个具有相同值的常量表达式。
case3+2:
…
case8-3:
是不允许的。
•(4)switch的匹配测试,只能测试是否相等,不能测试关系或逻辑。
•(5)C89要求C编译系统应当实现∶一个switch最少可以包含257个case子结构,而C99要求最少支持1023个case子结构。
•(6)switch结构允许嵌套。
五、goto语句
1、语句标号:
在合法的标识符的后面加了一冒号就构也了语名标号dfd:
_fgg:
g1552:
2、goto语句称为无条件转向语句,形式为:
goto语标号必须与此goto语句同在一个函数内不提倡使用,滥用合程序无泰规律。
l:
printf(“%d”,a);
gotol;
二、课后习题及殿例题
1、以下程序和输出结果(B)
A、0B、1C、2D、3
inta=2,b=-1,c=2;
if(a<
{if(b<
0)c=0;
elsec+=1;
printf(“%d”,c);
2、下面程序片段所表示的数学函数的关系是()
0)1(x<
A、y=0(x=0)B、y=-1(x=0)
0)0(x>
0(x<
0)-1(x<
C、y=-1(x=0)D、y=1(x=0)
y=-1;
if(x!
=0)
0)y=1;
elsey=0;
3、已有定义语句intx=3,y=4,z=5;
则值为0的表达式是(A)
A:
x>
y++B、x<
++yC、x!
=y+z>
=y-zD、y%z>
=y-z
5、x为奇数时值为“真”,为偶数是值为“假”的表达式(C)
(x%2==1)B、x%2==0C、x%2D、!
(x%2)
6、已有定义语句intm=0,n=1;
执行表达式(m==5>
3)&
(n=7>
9)后n的值(A)
A、1B、2C、3D、4
7、已有语义语句:
intm=0,n=3;
执行表达式(m==5<
3)||(n=7>
9)后n的值(c)
8、以下结构不正确的if语句(C)
A、if(x<
y&
x!
=y);
B、if(x=4)x+=y;
C、if(x!
=y)D、if(0){x++;
y++;
9、已有定义结构:
intx=6,y=4,z=5;
执行以下语句后,能正确表示x,y值(C)646446466
y){z=x;
x=y;
y=z;
A、X=4,Y=5,Z=6B、X=4,Y=6,Z=6
C、X=4,Y=5,Z=5D、X=5,Y=6,Z=4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 选择 结构