在C语言当中的分支语句(又叫选择结构)有 if 和 switch 两种。
if 语句
如果好好学习,校招时拿一个好offer,就能获得很好的成就。如果不好好学习,找不到好工作,就不会开心。 这就是一个选择语句。
if语句的语法:
if(表达式)
语句;
if(表达式)
语句;
else if(表达式2)
语句2;
else
语句3;
这样就是一个简单的 if 语句,如果好好学习,校招时就能拿一个好offer。如果不好好学习,就找不到好工作。用代码实现:
int main()
{
int a = 0;
printf("是否要好好学习,是 请输入1,不是 请输入其它数字\n");
scanf("%d", &a);
if (1 == a)
printf("好offer\n");
else
printf("找不到好工作");
return 0;
}
悬空 else
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
这个程序不会输出结果的,因为C语言语法规定,else 只与离它最近的 if 所匹配。所以这里的 else 是和第二个 if 匹配。这一套 if else 都在第一个 if 里面。所以,只有第一个 if 判断为真,才会执行里面的 if 或者 else 。所以这里什么也不输出。
所以我们写代码的时候,一定要加上大括号,这样既是代码的规范性,也便于阅读,便于维护。
年龄不够18岁,就叫少年,18-30叫青年,30-50叫中年,50-80叫老年,80以上叫寿星。代码实现如下:
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("中年\n");
}
else if(age>=50 && age<80)
{
printf("老年\n");
}
else
{
printf("寿星\n");
}
return 0;
}
这里主要用到逻辑与 (&&) 操作符,也就是两边都要判断为真程序才会执行。在C语言当中:0 表示假,一切的非 0 表示真。
练习
练习一:判断一个数是否为奇数
做题思路就是,知道奇数的判断条件是不会被 2 整除。所以,如果模 2 等于 0 ,就说明这个数是偶数。代码如下:
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 2 != 0)
{
printf("这个数是奇数\n");
}
return 0;
}
练习二: 输出1-100之间的奇数。
这道题的做法和上一道题的做法一样。不过是把输入一个数变成循环了。
int main()
{
int a = 0;
for (a = 1; a <= 100; a++)
{
if (a % 2 != 0)
{
printf("%d ",a);
}
}
return 0;
}
当然,还能优化,因为奇数之间相差 2 ,而且第一个奇数是 1 ,所以从 1 开始,每次自增 2 。
int main()
{
int a = 0;
for (a = 1; a <= 100; a+=2)
{
printf("%d ",a);
}
return 0;
}
这里就是优化过后的代码,更简洁。
switch语句
switch语句用于多分支的情况。比如:
输入1,输出星期一 输入2,输出星期二 输入3,输出星期三 输入4,输出星期四 输入5,输出星期五 输入6,输出星期六 输入7,输出星期日
当然,也能写成 if 但是那样太麻烦了。所以用 switch 。switch 语句的语法:
switch(整型表达式)
{
语句项;
}
语句项就是一些 case 语句,不过 case 语句后面要加整型常量表达式,然后是语句。
case 整形常量表达式:
语句;
在 switch 语句当中一定要用 break
如果在switch当中,不用 break 的话,就会继续执行其它的 case 情况,不能实需求。所以实现星期一,二,三,就可以这样写代码。
int main()
{
int day = 0;
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;
}
return 0;
}
上面这个就是通过输入 1,2,3,4,5,6,7。输出星期一,二…。
假设现在的需求是输入 1-5 输出的是 “weekday” 。输入 6-7 输出的是 “weekend” 。
因为之前说过,如果不写 break 的话,就会继续执行下面的case情况,所以对这种情况的话,就可以在 case 5 后面输出 weekend 然后 break 。同理在 case 7 后面加上 weekend 然后break 就好了。代码如下:
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
break 语句的实际效果是把语句列表划分为不同的部分。
default语句
default 语句用于 switch 语句,当所有的 case 条件都不满足时,就执行,default ,也就是说,default 是case情况外的所有情况。所以在上面的 weekday 和 weekend 后面就还能再加一种 default 情况,显示:输入错误
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
switch语句也可以嵌套使用
计算下面程序的 m 是多少:
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
m 的值是 5 因为第一个 switch 语句 n = 1 就进入了 case 1 m加1 m等于3 ,因为没有 break 所以继续执行 case 2 n等于2 然后进入 case 3 因为 n 等于2 所以进入嵌套的 switch 的 case 2 m 等于 4 n 等于3 然后 break 跳出循环 因为 case 3 没有 break 所有继续执行 case 4 m等于5 n等于3。下面用图片来解释:  结果就是上面这张图片。
|