C语言程序设计(第四章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else
非0 index=0;
statemnt1 statemnt2 statemnt3 statemntn
说明: if后面的表达式类型任意
语句可以是复合语句 如:if(ifx()a==b&if(&xx!==0=)y) printf(“a=b,x=y”);
if(if!(x3)) priinf(tfx(=“=O0K)”);
a>b!=c //(a>b)!=c
– 关系表达a式==的b<值c :是//逻a=辑=(值b<“c)真”或“假”,用1和0表
示
a=b>c //a=(b>c)
例 int a=3,b=2,c=1,d,f;
a>b
//表达式值1
(a>b)==c //表达式值1 b+c<a //表达式值0
d=a>b //d=1
内嵌if
else
if(expr3) else
statement3 statement4
内嵌if
例 输入两数并判断其大小关系
/*ch4_4.c*/
#include <stdio.h>
main()
{ int x,y;
运行:Enter integer x,y:12,23
printf("Enter integer x,y:");
结合方向:自右向左
取expr2值
如 a>b?a:c>d?c:d a>b?a:(c>d?c:d)
取expr3值
expr1、expr2、expr3类型可不同,表达式值取较高的 类型
例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5
! :从右向左 && :从左向右 || :从左向右
例 a<=x && x<=b // (a<=x) && (x<=b)
a>b&&x>y //(a>b)&&(x>y)
a==b||x==y //(a==b)||(x==y)
!a||a>b
//(!a)||(a>b)
优先级: 结合方向:
! (2) 高
&& (11) || (12) 低
选择型程序设计
– if语句(条件选择语句)
if语句的三种形式 – 形式一: • 格式:if (expression)
=0 expr
非0 statement
statement
• 执行过程:
例形:式if 二(x>:y) 格p式rin:tf(i“f %(edx”p,rxe)s;sion)
非0
=0
expr
执行过程:
…... [ else
statementn ]
=0
例:ifex(spar1lary>1000)
index=0.4;
非el0se if (salareyx>p8r200) =0 index=0.3;
else if (salary>600) else if (sala非ry0>400)
index=0=0.2; expinr3dex=0.1;
}
例 求一个数的绝对值
/*ch4_1.c*/ #include <stdio.h> main() { int x,y;
printf("Enter an integer:"); scanf("%d",&x); y=x; if(y<0)
y= -y; printf("\ninteger:%d--->absolute value:%d\n",x,y); }
printf(“score>60\n”);
break;
……..
break语句(也称为中断语句) 形式:break;(只能用于switch结构或者循环结构之中) 作用:中止switch结构或循环结构的执行,转去执行相应结构 的下一条语句。
goto语句 形式:goto 标识符 作用:无条件去执行标识符所指的语句,然后顺着那条语 句往下执行。
statement1
else
statement1
statement2
statement2
执行过程:例:if (x>y) max=x;
else max=y;
– 形式三: • 格式:
if ( expr1 ) else if (expr2 ) else if (expr3 )
statement1 statement2 statement3
f=a>b>c //f=0
– 关系运算注意:
例 若a=0; b=0.5; x=0.3; 则 a<=x<=b的值为 0
例 5>2>7>8在C中是允许的, 值为 0
例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 2
例 ‘a’>0 结果为1 ‘A’>100 结果为0
– 关系运算注意:
例 a||b||c
//只在a为假时,才判别b的值;
只在a、b都为假时,才判别 c的值
例 a=1;b=2;c=3;d=4;m=1;n=1;
< > (m=a>b)&&(n=c>d) //结果m=0,n=1
– 条件运算符与表达式
一般形式: expr1 ? expr2 : expr3
执行过程
功能:相当于条件语句,但不能取代一般if语句 例例如例条优求(件先pi(((efaxxxcrl(=%>>>isna运级ap=e==p0t>+2rfb0‘ri?(ab=|n:算i)“b)n1’)?=ta?|tf&:1’(f+1x符(Y(“3&:x)|“%-b’?%:x<可’|c1dN=d0<:”%0’”?,=嵌,a-b‘d)z1);\套’;:n)0?”,)cb->’a0’+?’aA+’:bc:a-bp);r非in0tf(“%dex”,par>1b?a:b=)0;
X<Y
scanf("%d,%d",&x,&y); if(x!=y)
Enter integer x,y:12,6 X>Y Enter integer x,y:12,12
if(x>y) printf("X>Y\n");
X==Y
else printf("X<Y\n");
else
printf("X==Y\n");
说明:(1)goto语句后的标识符表示转移的目的地,在程 序中该标识符必须存在。
(2)在目的地处的标识符后必须有冒号。 (3)因此在结构化程序设计中要慎用,最好不用goto语句。
例 switch(score) { case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); }
第四章
选择结构程序设计
• 关系表达式 • 逻辑表达式 • 条件表达式 • if 语句 • switch 语句
关系运算符和表达式
关系运算符
<
– 种类:< <= == >= > != – 结合方向:自左向右
<= >
优先级6(高)
– 优先级别: 例 c>a+b
//c>(a+b)
>=
== !=
优先级7(低)
内嵌if
if (expr1) if (expr2) statement1
else statement3
内嵌if
if (expr1) statement1
else if(expr3) statement3 else statement4
内嵌if
if (expr1)
if (expr2) else
statement1 statement2
运行:Enter an integer:-12 integer:-12--->absolute value :12
例 输入两个数并判断两数相等否
/*ch4_2.c*/ #include <stdio.h> main() { int a,b;
printf("Enter integer a:"); scanf("%d",&a); printf("Enter integer b:"); scanf("%d",&b); if(a==b)
}
– 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 (a==b) { if(b==c) printf(“a==b==c”); } else printf(“a!=b”);
实现if ~ else 正确配对方法:加{ }
来自百度文库
例 考虑下面程序输出结果: main() { int x=100,a=10,b=20; int v1=5,v2=0; if(a<b) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); }
[default:
语句组 ;
break;]
❖执行过程:
}
❖说明: E1,E2,…En是常量表达式,且值必须互不相同 语句标号作用,必须用break跳出 case后可包含多个可执行语句,且不必加{ } switch可嵌套 多个case可共用一组执行语句
如: ……
case ‘A’:
case ‘B’:
case ‘C’:
结果:-1
switch语句(开关分支语句)
❖一般形式:
switch( 表达式)
{ case E1:
语句组 1;
switch
break;
case E2:
表达式
语句组 2;
case
break;
E1
E2
En
defaul…t ….
语句组1
语句组2 …... 语句组n
语句组 case En: 语句组 n;
break;
&& (11) || (12) 低
! :从右向左 && :从左向右 || :从左向右
– 短路特性:逻辑表达式求解时,并非所有的逻辑运算 符都被执行,只是在必须执行下一个逻辑运算符才能 求出表达式的解时,才执行该运算符
例 a&&b&&c //只在a为真时,才判别b的值;
只在a、b都为真时,才判别 c的值
例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 0 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6
例 注意区分“=”与“==” int a=0,b=1; if(a==b) printf(“a equal to b”); else printf(“a not equal to b”);
printf("a==b\n"); else
printf("a!=b\n"); }
运行:Enter integer a:12 Enter integer b:12 a==b
运行:Enter integer a:12 Enter integer b:9 a!=b
❖if语句嵌套: 一般形式:
if (expr1) if (expr2) statement1 else statement2
运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!
例 void main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++; break; case 3: a++;b++; } printf(“\na=%d,b=%d”,a,b); }
例 考i虑f(‘下a’)面p程ri序ntf的(“%输d出”,结’a’果); :
#include <stdio.h>
main()
{ int x,y;
scanf(“%d,%d”,&x,&y);
if(x>y)
x=y; y=x;
Compile Error!
else
x++; y++;
printf(“%d,%d\n”,x,y);
– 逻辑运算符和表达式
逻辑运算符
– 种类: ! && || – 逻辑运算真值表
a
b
!a
!b
真
真
假
假
真
假
假
真
假
真
真
假
假
假
真
真
a&&b a||b
真
真
假
真
假
真
假
假
–C语言中,运算量: 运算结果:
0表示“假”, 非0表示“真”, 0表示“假”, 1表示“真”,
优先级: 结合方向:
! (2) 高
&& (11) || (12) 低
! :从右向左 && :从左向右 || :从左向右
例 a=4;b=5;
!a a&&b a||b
值为0 值为1 值为1
!a||b
值为1
4&&0||2 值为1 5>3&&2||8<4-!0 //(5>3)&&2||(8<(4-(!0))) 值为1 ‘c’&&‘d’ 值为1
优先级: 结合方向:
! (2) 高