- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
形式一: 格式:if(expression) Statement 执行过程: 例:if (x>y) printf(“%d”,x); 形式二: 格式:if (expression) statement1 例:if(x>y) max=x;else else max=y; statement2 执行过程:
22
/*功能:说明if 语句的格式。*/
程序运行情况如下: Please input three numbers:11,22,18↙ The three numbers are:11,22,18 max=22
本案例中的第1个if语句,可优化为如下不带else 子句的形式:
max=num1; if(num2>max) max=num2;
21
Y
x<0 N
y=-1
x== 0 N y=1
Y y=0
[例5.5] 键盘输入三个数,并取出最大值。
main() { int num1,num2,num3,max; printf("Please input three numbers:"); scanf("%d,%d,%d",&num1,&num2,&num3); if (num1>num2) max=num1; else max=num2; if (num3>max) max=num3; printf("The three numbers are:%d,%d,%d\n",num1,num2,num3); printf("max=%d\n",max); }
注意:
关于True和False 请记住,0被视为false,其他任何值都被视为 true,包括负数。
7
优先级
! (2)
结合性
!
高
: 从右向左
&& (11) || (12) 低
&&: 从左向右 || : 从左向右
例
a<=x && x<=b a>b && x>y a==b || x==y !a || a>b 5>3 && 8<4-!0 ‘c’ && ‘d’
5
二、逻辑运算符和逻辑表达式
逻辑运算符 运算优先级
a 真 真 假 假 b 真 假 真 假
!&&
||
!&& ||
!a 假 假 真 真 !b 假 假 真 真 a&&b 真 假 假 假 a||b 真 真 真 假
c语言
运算量: 运算结果:
0表示“假”,非0表示“真” 0表示“假”,1表示“真”
6 返回
24
要点:
1.if语句的一般格式
if(表达式) {语句组1;} [else {语句组2;} ] (1)if语句中的“表达式”必须用“(”和“)”括起来。 (2)else子句(可选)是if语句的一部分,必须与if配对使用,不能 单独使用。 (3)当if和else下面的语句组,仅由一条语句构成时,也可不使用 复合语句形式(即去掉花括号)。
第五章 选择结构程序设计
关系运算符和关系表达式 逻辑运算符和逻辑表达式 if语句 switch语句 程序举例
1
一、关系运算符和关系表达式
符号种类:< <= == >= > != 优先级7(低) 结合方向:自左向右 优先级别: 关系表达式的值:是逻辑值“真”或“假”, 用1和0表示
例 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 f=a>b>c //f=0 例 c>a+b a>b!=c a==b<c a=b>c //c>(a+b) //(a>b)!=c //a==(b<c) //a=(b>c)
这种优化形式的基本思想是:首先取一个数预 置为max(最大值),然后再用max依次与其余的数 逐个比较,如果发现有比max大的,就用它给max重 新赋值,比较完所有的数后,max中的数就是最大值 。这种方法,对从3个或3个以上的数中找最大值的 23 处理,非常有效。请各位仔细体会。
[例5.6]输入任意三个数num1、num2、num3,按从小到 大的顺序排序输出。 main() {int num1,num2,num3,temp; printf("Please input three numbers:"); scanf("%d,%d,%d",&num1,&num2,&num3); if (num1>num2) {temp=num1;num1=num2;num2=temp;} if (num2>num3) {temp=num2;num2=num3;num3=temp;} if (num1>num2) {temp=num1;num1=num2;num2=temp;} printf("Three numbers after sorted: %d,%d,%d\n",num1,num2,num3); }
内嵌if
内嵌if
if (expr1) if (expr2) else else if(expr3) else
statement1 内嵌if statement2 statement3 内嵌if statement4
15
[例5.2] 输入两数并判断其大小关系
/*ch5_2.c*/ #include <stdio.h> main() { int x,y; printf("Enter integer x,y:"); scanf("%d,%d",&x,&y); if(x!=y) if(x>y) printf("X>Y\n"); else printf("X<Y\n"); else printf("X==Y\n"); }
printf(“%d”,a>b?a:b);
如 x>0 ? 1:(x<0 ? -1:0) 优先级: 13 结合方向: 如 a>b ? a:c>d ? c:d a>b ? a:(c>d ? c:d) expr1、expr2、expr3类型可不同,表达式值取较 高的类型
9 返回
例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b);
statement n ]
expr1
非0 例: if (salary>1000) index=0.4; expr2 else if (salary>800) index=0.3; =0 非0 else if (salary>600)expr3 index=0.2; else if (salary>400) 非0 index=0.1; else statemnt2 index=0; statemnt1 statemnt3 statemntn
< <= > >= == !=
优先级6(高)
2 返回
运算符的优先级
优先级 运算符
1 2 3 4 5 6
()函数运算符,[ ]数组运算符, ! ,~ ,++,-- ,*(间接运算符),&(地址运 算符) size of, +(单目),- (单目) *(乘法),/,% +,<<>> <,<=,>,>=
main() { char ch; printf("Input a character: "); scanf("%c",&ch); ch=(ch>='A' && ch<='Z') ? (ch+32) : ch; printf("ch=%c\n",ch); }
11
四、选择结构程序设计
if语句(条件选择语句) if语句的三种形式
运行:Enter integer x,y:12,23 X<Y Enter integer x,y:12,6 X>Y Enter integer x,y:12,12 X==Y
16
if ~ else 配对原则:缺省{ }时,else总 是和它上面离它最近的未配对的if配对
if(……) if(……) if(……) else…... else…... else…...
13
说明: if后面的表达式类型任意 语句可以是复合语句 如: if(a==b&&x==y) printf(“a=b,x=y”); if(x) if(x!=0) if(3) printf( “OK”); if(!x) if(x==0) if( ‘ a’) printf(“%d”,’a’); [例5.1 ] 考虑下面程序的输出结果: #include <stdio.h> main() { int x,y; scanf(“%d,%d”,&x,&y); if(x>y) Compile Error! x=y; y=x; else x++; y++; printf(“%d,%d\n”,x,y); }
14
if语句嵌套: 一般形式:
if (expr1) if (expr2) statement1 else statement2 if (expr1) statement1 else if(expr3) statement3 else statement4 if (expr1) if (expr2) {if 内嵌if statement1 statement1} else statement3