1.分支语句
分支语句也叫做选择结构,常见的语句有if语句、switch语句。在生活中我们处处面对选择,程序亦是如此。相关语句详解心得如下。
1.1 if语句
if语句的语法结构
if语句的语法结构大致3种如下:
1.if(表达式)
语句;
2.if(表达式1)
语句1;
else if(表达式2)
语句2;
3.if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
解释一下:如果表达式为真,则语句执行。在C语言中0表式假,非0表示真。
代码实例演示:
#include <stdio.h>
//代码1
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
}
//代码2
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
}
//代码3
#include <stdio.h>
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");
}
}
关于if语句的悬空else问题
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
对于初学者而言这段代码的阅读很容易产生歧义,因为我们会在else与哪个if匹配的问题上产生困惑。先说结论:else与离它最近的if匹配。
我们把代码稍微更改一下。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
这样更改之后就变得很清楚,其实代码什么都不会输出。同时也在提醒我们良好的代码风格也是很重要的。
1.2 switch语句
switch语句的语法结构
switch语句作为另一种选择结构,经常运用于多分支的情况。
switch语句的语法结构如下:
switch(整型表达式)
{
语句项;//语句项是一些case语句
}
case:整型常量表达式;
语句;
举一个例子:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期天
如果还是用上面提到的if语句也是可以实现的,只是会有些繁琐。相比之下这种情况使用switch语句会方便很多。
代码实例演示:
#include <stdio.h>
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;
}
break的作用
代码中break的作用是实现真正的分支。如果没有break会产生下面的结果。
如果我们想要改变需求
输入1-5,输出工作日
输入6、7,输出休息日
输入其他值, 输出错误
结合上面对于break作用的介绍,代码如下:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("错误");
break;
}
return 0;
}
代码中的default可以写在任何一个 case 标签可以出现的位置。每个switch语句中只能出现一次default子句。当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
结果如下: