一、条件判断
1、关系运算符和关系表达式
x > 0
age >= 70
a + b > c
b * b - 4 * a * c > 0
'a' > 'v'
上面这些表达式称为 关系表达式 ,用来进行比较大小的符号称为 关系运算符
1)关系运算符及其优先次序
C 语言提供 6 种关系运算符:
说明:
- 关系运算符的优先级低于算术运算符
- 关系运算符的优先级高于赋值运算符
2)关系表达式
用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为 关系表达式
C 语言没有提供逻辑型数据(C ++ 有逻辑型变量和逻辑性常量,以 True 表示“真”,以 False 表示 “假”)
为了表示逻辑量,C 语言规定:对关系运算的结果,用数值 “1” 代表 “真”,以“0” 代表 “假”
C 99 增加了逻辑型数据,用关键字 bool 定义逻辑型变量
由于用了 1 和 0 代表真和假,而 1 和 0 又是数值,所以在 C 程序中还允许把关系运算的结果看作和其他数值型数据一样,可以参加数值运算,或把它赋值给数值型变量
2、逻辑运算符和逻辑表达式
1)逻辑运算符及其优先次序
C 语言提供 3 种逻辑运算符:
- && (逻辑与)
- || (逻辑或)
- ! (逻辑非)
&& 和 || 是 双目运算符 ,要求在运算符的两侧各有一个运算对象
!是 一目运算符 ,只要求在右侧有一个运算对象
优先次序:
- ! > && > ||
- && 、 || 低于关系运算符,! 高于算术运算符
2)逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子就是 逻辑表达式
C 语言编译系统在表示逻辑运算结果时,以数值 1 代表 “真”,以 0 代表 “假”,但在判断一个量是否为 “真” 时,以 0 代表 “假”,以非 0 代表 “真”
实际上,逻辑运算符两侧的运算对象不但可以 0 和 1,或者 0 和 非 0 的整数,也可以是字符型(ASCII 码)、实型或指针型等。系统最终以 0 和 非0 来判定真假
二、用 if 语句实现选择结构
1、用 if 语句实现选择结构举例
输入两个学生 a 和 b 的成绩,输出其中高的成绩
#include <stdio.h>
int main(){
float a,b,max;
printf("Please enter a and b:");
scanf("%f,%f",&a,&b);
if(a > b) max = a;
if(a < b) max = b;
printf("max = %6.2f\n",max);
return 0;
}
运行结果:
Please enter a and b:99,99.5
max = 99.50
输入 3 个成绩 a,b,c,要求从高到低输出
#include <stdio.h>
int main(){
float a,b,c,t;
printf("Please enter a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
if(a<b){
t = a;
a = b;
b = t;
}
if(a < c){
t = a;
a = c;
c = t;
}
if(b < c){
t = b;
b = c;
c = t;
}
printf("%6.2f,%6.2f,%6.2f\n",a,b,c);
return 0;
}
运行结果:
Please enter a and b:73.5,82.5,99
99.00,82.50,73.50
2、if 语句的一般形式
// 形式一
if(表达式)
C 语句;
// 形式二
if(表达式)
C 语句 1;
else
C 语句 2;
3、if 语句使用的说明
- if 语句中在关键字后面都有一个表达式,一般为逻辑表达式或关系表达式
- 表达式的类型不限于逻辑表达式,可以是任意的数值类型
- if 语句中有内嵌语句,每个内嵌语句必须以分号结束
- else 语句不能作为语句单独使用 ,它必须是 if 语句的一部分
- 在 if 和 else 的后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用 {} 将几个语句括起来成为一个复合语句
#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,s,area;
printf("please enter a,b,c:");
scanf("%lf,%lf,%lf",&a,&b,&c);
if( a + b > c && b + c > a && c + a > b){
s = 0.5 * (a + b + c);
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("area = %6.2f\n",area);
} else
printf("It is not a trilateral.\n");
return 0;
}
运行结果:
please enter a,b,c:2,3,4
area = 2.90please enter a,b,c:2,3,6
It is not a trilateral.
4、使用嵌套的 if 语句实现多层条件判断
有的选择结构中又包含一个或多个选择结构,这称为 选择结构的嵌套
注意:
else 总是与它上面的最近的为匹配的 if 配对
如果 if 和 else 数目不一样,为实现程序设计者的企图,可以加大括号来确定配对关系
三、利用 switch 语句实现多分支选择结构
- switch 后面括号内的“表达式”,可以是数值型或字符型类型数据
- 当表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句,若所有的case 中的常量表达式的值都没有与表达式的值匹配的,就执行 default 后面的语句
- 每一个 case 的常量表达式的值必须互不相同;否则就会出现互相矛盾的现象
- 各个 case 和 default 的出现次序不影响执行结果
- 执行完一个 case 后面的语句后,流程控制转移到下一个case继续执行。“case 常量表达式”只是起语句标号作用,并不是在该处进行条件判断
- 可使用 break 语句结束当前分支
- 多个 case 可以共用一组执行语句
四、程序综合举例
1、判断某一年是否闰年
#include <stdio.h>
int main(){
int year,leap;
printf("please enter a year:");
scanf("%d",&year);
if(year % 4 == 0){
if(year % 100 == 0){
if(year % 400 == 0){
leap = 1;
} else {
leap = 0;
}
} else {
leap = 1;
}
} else {
leap = 0;
}
if(leap){
printf("%d is ",year);
} else {
printf("%d is not ",year);
}
printf("a leap year.\n");
return 0;
}
2、计算运费
#include <stdio.h>
int main(){
int c,s;
double p,w,d,f;
printf("请输入单价、重量和距离:");
scanf("%lf,%lf,%d",&p,&w,%s);
if(s >= 3000){
c =12;
}else {
c = s / 250;
}
switch(c){
case 0:
d = 0;
break;
case 1:
d = 2;
break;
case 2:
case 3:
d = 5;
break;
case 4:
case 5:
case 6:
case 7:
d = 8;
break;
case 8:
case 9:
case 10:
case 11:
d = 10;
break;
case 12:
d = 15:
break;
}
f = p * w * s * (1 - d / 100.0);
printf("运费:%10.2f元\n",f);
return 0;
}
补充:
条件表达式1 ? 条件表达式2 : 条件表达式3 : C 语言中唯一的三元(目)运算符
条件表达式是一种特殊的选择结构
一 叶 知 秋,奥 妙 玄 心