目录
前言
选择语句是C语言中的重要组成部分,包括if...else语句,switch...case语句,三目运算符语句。
一、if…else 语句
1. if 语句
1.1 流程图
1.2 语法结构
if (表达式)
{
语句块1;
}
当只有 if 的时候,表达式为真就执行语句块1,否则就跳过语句块的内容。
1.3 代码实例
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年了\n");
return 0;
}
1.4 代码结果
假如输入的值为15 -> 没有输出结果
假如输入的值为21 -> 成年了
2. if…else 语句
2.1 流程图
2.2 语法结构
if (表达式)
{
语句块1;
}
else
{
语句块2;
}
该语句的常见形式,当表达式为真(即表达式的结果是非0)的时候执行语句块1的内容,当表达式为假(即表达式的结果是0)的时候执行语句块2的内容。
2.3 代码实例
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else
printf("成年\n");
}
2.4 代码结果
假如输入的值为15 -> 未成年
假如输入的值为21 -> 成年
3. if…else if…else 语句
3.1 流程图
3.2 语法结构
if (表达式1)
语句块1;
else if (表达式2)
语句块2;
else if (表达式3)
语句块3;
...
else if (表达式n)
语句块n;
else
语句块n+1;
当表达式1为真的时候就只执行语句块1的内容,之后跳出if语句,其余语句块都不执行。当表达式1为假并且表达式2为真的时候就只执行语句块2的内容,之后跳出if语句,其余语句块不执行。当表达式1和表达式2都为假的时候执行语句块3的内容,之后跳出if语句,其余语句块不执行。以此类推
3.3 代码实例
#include <stdio.h>
int main()
{
int scores = 0;
printf("请输入您的成绩: ");
scanf("%d", &scores);
if (scores < 0) {
printf("没有成绩\n");
} else if (scores < 60) {
printf("成绩不及格\n");
} else if (scores < 80) {
printf("成绩中等\n");
} else if (scores <= 100) {
printf("成绩好\n");
} else {
printf("输入错误\n");
}
return 0;
}
3.4 代码结果
假如输入的值: 56
结果是:成绩不及格
4. if语句的嵌套
当 if 语句中的执行语句又是 if 语句时,则构成了 if 语句嵌套的情形。
4.1 语法结构
if(表达式1)
if(表达式2)
语句块1;
else
语句块2;
上述中的else,是跟if(表达式1)匹配呢,还是跟if(表达式2)匹配呢?
4.2. 嵌套逻辑
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf ("%d %d",&a,&b);
if (a==6)
if(b==7)
printf("A");
else
printf("B");
return 0;
}
假如输入的值: 7 6
真实结果是:无输入
C语言规定,else 总是与它前面最近的 if 配对。以上代码给人造成一种错觉,即当第一个if 同else 对齐时,else同第一个if自行配对。以至于得到的结果为“B”。其实不然,当无括号时,else将与最近的一个if配对。
要想上述的结果输入B,注意加上 "{ }",避免代码看似正确,实则逻辑混乱,而得不到想要的结果。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf ("%d %d",&a,&b);
if(a==6){
if(b==7)
printf("A");
}
else{
printf("B");
}
return 0;
}
假如输入的值: 7 6
真实结果是:B
二. switch...case 语句
1. 流程图
2.语法结构
switch(整型常量/整型变量/整型表达式){
case var1:
break;
case var2:
break;
case var2:
break;
default:
break;
}
执行流程:表达式1的结果一般是整形常量或字符常量。当表达式的结果和 case 后面的表达式结果一致时,就会执行对应的语句块的内容,否则,就会进入default中,执行语句块n 。然后在break的时候跳出大括号的内容。
注:
- 1、switch语句中的常量表达式必须是整型或者字符型,不能为浮点类型
- 2、case后的必须为常量表达式,不能为关系表达式,如x>0,x==1这样的表达式是不合法的。
- 3、switch语句中的default可以省略,省略后,当表达式的值与任何一个常量表达式都不行等时,就什么也不执行。
3.代码实例
#include <stdio.h>
int main()
{
int day = 0;
printf("请输入日期");
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期七\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
return 0;
}
4. 代码结果
假如输入:4
结果:星期四
switch...case语句常常用于多分支的情况,如果上述情况用if语句,会非常的繁琐。
三.条件表达式 语句
如果表达式1为真,则将表达式2的结果作为最终运算结果,否则就将表达式3的结果作为最终运算结果。
1.基本用法
1.1 语法结构
表达式1 ? 表达式2 : 表达式3
1.2 代码实例
#include <stdio.h>
int main()
{
int a = 0, b = 0, max = 0;
printf("请输入两个数: ");
scanf("%d %d", &a, &b);
max = a > b ? a : b;
printf("两数中较大的数是: %d", max);
return 0;
}
1.3 代码结果
假如输入:4 5
结果:5
2.条件表达式 语句的嵌套
2.1 代码实例
#include <stdio.h>
int main()
{
int a = 1 ,b = 2 , c = 3 , d = 4 ;
int min = 0;
min = ((a < b ? a : b) < (c < d ? c : d)) ? (a < b ? a : b) : (c < d ? c : d);
printf("最小值:%d\n",min);
return 0;
}
2.2 代码结果
最小值:1