if语句
1. if
if语句的语法形式如下:
if (表达式)
语句
若表达式为真,则语句执行;若表达式为假,则语句不执行。
在C语言中,0为假,非0为真。也就是说如果表达式的结果为0,则语句不执行;表达式的结果不为0,则语句执行。
例子:输入一个整数,判断是否为单数
下面是表达式结果为假(0)的运行结果(没有输出)下面是表达式结果为真(非0)的运行结果
2.else
如果一个数不是单数,便是双数。如果是非黑即白的条件下,我们该如何表达出我们的判断呢?
那就得用上我们的 if…else语句了。
if…else语句的语法形式如下
1 if (表达式)
2 语句1
3 else
4 语句2
例子:输入一个整数,判断是否为单数,若为单数则打印是单数,否则打印是双数。
#include <stdio.h>
int main()
{
int num=0;
scanf("%d是单数\n",num);
if(num%2==1)
printf("%d是单数\n",num);
else
printf("%d是双数\n",num);
return 0;
}
3.分支中包含多条分支语句
默认在if语句和else语句后面只能控制一条语句,若想控制多条语句,则要用{ }括起来,表示一个整体。否则第二条打印的语句,就不关if的事情了。比如:输入一个小于18的数,它还是会运行出来第二条语句(正常情况下,if语句表达式结果为假,是不会打印的)
#include <stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
{
printf("你已经成年了\n");
printf("你要为你自己的行为负责了\n");
}
return 0;
}
4.if的嵌套问题和if与else对应问题
if的嵌套可以完成更为复杂的逻辑判断,例子如下:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年人\n");
else
{
if (age <= 44)
printf("青年人\n");
else
{
if (age<=59)
printf("中年人\n");
else
{
if (age <= 74)
printf("年轻的老年人\n");
else
{
if (age <= 89)
printf("老年人\n");
else
printf("长寿老年人\n");
}
}
}
}
return 0;
}
但if与else有对应的原则,就是就近对应原则,所以我们要用好{ },这样才不会出错。
下面举一个出错的例子:
#include <stdio.h>
int main()
{
int a = 0;
int b = 6;
if (a == 1)
if (b == 6)
printf("xixixixi\n");
else
printf("hehehehe\n");
return 0;
}
运行结果啥都没有输出,而不是我们认为的输出"hehehehe”。因为我们的else是对应了第二条 if 语句而不是第一条 if 语句,然后我们第二条 if 语句是第一条语句的嵌套,第一条if语句表达式为假所以不执行,故没有结果输出。
然而你加了{ }之后,代码如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 6;
if (a == 1)
{
if (b == 6)
printf("xixixixi\n");
}
else
printf("hehehehe\n");
return 0;
}
输出的结果便是“hehehhe”了。
switch语句
2.switch语句
switch语句跟if语句表达形式有点相似,下面代码可以看出它们之间的关系。
//if语句
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 5 == 0)
printf("余数是0");
else if (a % 5 == 1)
printf("余数是1");
else if (a % 5 == 2)
printf("余数是2");
else if (a % 5 == 3)
printf("余数是3");
else
printf("余数是4");
return 0;
}
//switch语句
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a % 5)
{
case 1: printf("余数是1"); break;
case 2: printf("余数是2"); break;
case 3: printf("余数是4"); break;
case 4: printf("余数是4"); break;
case 0:printf("余数是0"); break;
}
return 0;
}
我们从中可以观察到,if的表达式与switch有所不同,else if 变成了 case()。
值得注意的是: switch的表达式必须是整型表达式,而且case 后的值,必须是整型常量表达式。而常量表达式正好要匹配整型表达式的值。否则将会发生错误。比如:将case 0 :改为 case 5:则会发生错误。
谈到这里,相信会有些小伙伴可能会有这样的疑惑:如果有些情况是switch后面的值无法匹配到case语句中去,但又不得不做处理,那该怎么办呢?
这个时候就得我们的default出场了。
例子如下:
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1: printf("周一"); break;
case 2: printf("周二"); break;
case 3: printf("周三"); break;
case 4: printf("周四"); break;
case 5: printf("周五"); break;
case 6: printf("周六"); break;
case 7: printf("周日"); break;
default: printf("请输入1-7");
}
return 0;
}
如果我们输入的数字不是1-7,像上文讲到的只有case的便会没有输出结果,而有了的default,我们便可以将不匹配的情况做了处理。
还有一个需要注意的点是什么呢?
1.case和后面的数字一定要有个空格,然后给个冒号。
2. case语句后面一定要跟着个break,不然它会一直读下去的。
3. 如果有几个case 引发后面的结果都是一样的话,那前面的结果可以省写,在最后的那个case写出来即可。(我的表达可能不是很好,希望你可以通过以下代码get我的意思)
代码如下:
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
case 2:
case 3:
case 4:
case 5: printf("工作日"); break;
case 6:
case 7: printf("休息日");break;
}
return 0;
}