if语句和switch语句(分支结构)
if 语句
if语句的基本形式
if(表达式)
语句
当表达式结果不为零时(真),则语句执行;当表达式结果为零时(
假),则语句不执行。
if…else
if(表达式)
语句
else
当我们想知道一个整数是奇数还是偶数,可以通过if …else语句来实现
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
if (num % 2 == 0)
printf("%d 是偶数\n", num);
else
printf("%d 是奇数\n", num);
return 0;
}
分支包含多条语句
if和else语句默认都只控制一条语句,要想控制多条语句需使用{}将
代码括起来。
int main()
{
int month = 0;
printf("请输入月份:\n");
scanf("%d", &month);
if (month == 6 || month == 7 || month == 8)
printf("%d 月太热了!\n", month);
printf("%d 月是夏天。\n", month);
return 0;
}
通过对比会发现当输入9时输出错误了,这就证明此时if只控制if下的第一条语句
此时我们用{}将if下的两条printf语句括起来
if (month == 6 || month == 7 || month == 8)
{
printf("%d 月太热了!\n", month);
printf("%d 月是夏天。\n", month);
}
输出结果就正常了
嵌套if
在if …else语句中,else可与另一个if语句连用,构成多重判断。但在编写代码时要注意悬空else问题,记住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;
}
根据就近原则此代码输出什么都没有,但以后一个程序中if和else过多时,我们很容易出错,所以我们可以进行优化
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;
}
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;
}
大括号加上去,整个程序就十分清晰了。
##Switch
###switch语句
switch可以看作是一种特殊的if…else语句,将一些if…else语句改写成switch语句会使得程序更加简单
switch(expression)
{
case value1: statement
case value2: statement
default: statement
}
switch会根据表达式espression得到的不同值value去执行对应的case分支,如果没有对应的value,则执行default分支。
要注意:
- switch后的expression必须为整型表达式
- case后的value必须是整型常量表达式
- case和后面的value之间需要有空格
- 每个case语句执行后需有break才能跳出这个switch语句
switch中的break
!!!break在switch中十分重要。
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数是0\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
}
return 0;
}
我们将上面的程序中的break去除重新运行
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数是0\n");
case 1:
printf("余数为1\n");
case 2:
printf("余数为2\n");
}
return 0;
}
去除了break,就会发现,case语句没有了break后,可能会继续执行后面case语句中的代码,所以我们需要一个break才能结束我们此次的运行。当然,并不一定每个case语句我们都需要break,我们需要根据实际要求做出合理的分支效果。
switch中的default
在我们执行switch语句是,可能得到的vaule并没有相对应的case,我们对这种情况可以不处理或者加上default句子。
switch中的case和default是没有顺序要求的,只要满足你的实际需求就可以,通常我们可以将default语句放在最后。
来个程序来理解一下吧!!!
#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("一周只要有1到7天,铁汁你在仔细想想!!\n");
}
return 0;
}