if(表达式)//注意if语句后不加分号
语句
if语句中表达式(为真),则语句执行,表达式不成立(为假),则语句不执行。
#include
int main()
{
int a = 0;
//输入
scanf("%d",&a);
//判断
if(a % 2 == 1)
{
printf("%d是奇数",a);
}
return 0;
}
if语句分为单分支语句和多分支语句。单分支语句就是执行单个语句,if语句和else语句也可以多个同时使用(多分支语句),但是无论有多少个if语句或else语句,程序只会执行其中的一个语句。
现在输出的值,当它不是奇数时,也能告知我们了。可以注意到程序中{}的存在,为了不引起歧义,建议在对应的if,else后都加上其所有的{},以免语句过多时,自己分不清该执行的语句。
#include
int main()
{
int a = 0;
//输入
scanf("%d",&a);
//判断
if(a % 2 == 1)
{
printf("%d是奇数",a);
}
else
{
printf("%d不是奇数",a);
}
return 0;
}
在if-else语句中,else可以与另一个if语句连用,构成多重判断。
if()//现在if-else语句时不时很多?如果不用花括号括起来很难分辨吧
{
if()
else()//如果不用{},并将else顶格显示出来,你觉得他是和那个if搭配?
}//正确答案是即使else的格式与他和哪个if搭配无关
else
{//他会优先与距离自己最近的if组成if-else语句(这就是常说的悬空else问题)
if()
else()
}
if()
else if()
else()
除了if语句,C语言还提供了switch语句来实现分支结构。
switch语句是一种特殊形式的if…else结构,用于判断条件有多个结果的情况,它把多重的else if改成更易用、可读性更好的形式。
switch (expression){
case value1:statement
case value2:statement
default:statement
}
根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值就执行default分支。
【注】
break的作用是跳出switch循环,如果某个case语句的后边没有break语句,代码会继续玩下执行,有可能执行其他case语句中的代码,直到遇到break语句或者switch语句结束。
#include
int main()
{
int n = 0;
scanf("%d",&n);
if(n%3 == 0)
printf("余数为0\n");
else if(n%3 == 1)
printf("余数为1\n");
else
printf("余数为2\n");
return 0;
}
使用switch语句改写:
#include
int main()
{
int n = 0;
scanf("%d",&n);
switch(n%3)
{
case 0://case和后面的数字要有空格
printf("余数为0\n");
break;
case 1:
printf("余数为0\n");
break;
case 2:
printf("余数为0\n");
break;
}//每个case语句中的代码执行完成,需加上break,才能跳出switch语句
return 0;
}
如果去掉break,switch的每个语句都会往下滑执行遇到的语句,直到遇到break语句或者switch语句结束。break的存在并不是每个case语句都得有,要根据实际情况来看。
:::info
比如,打印出1到7对应的星期几。
:::
#include
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;
}
如果需求发生变化,变为:
:::info
1.输入1-5,输出的是“工作日”
2.输入6-7,输出“休息日”
:::
参考代码如下:
#include
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;
}
return 0;
}
在使用switch语句的时候,我们经常可能遇到一种情况,比如switch后的表达式中的值无法匹配代码中的case语句的时候,这时候要不就不做处理,要不就得在switch语句中加入default子句。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行default 子句。
:::info
如果day的输入不是1-7的值,如果我们要提示:输入错误。
:::
#include
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:
ptintf("输入错误\n")
break;
}
return 0;
}
在switch语句中case子句和default子句的顺序是没有要求的,只要最后达到需求即可。
不过我们通常把default子句放在最后处理。