一、if else语句
1.if语句
if语句的语法格式如下
if(表达式)
语句
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("%d是奇数",num);
return 0;
}
2.else语句
如果一个数不是奇数,那就是偶数了,对于任意一个整数,如果要判断是奇数还是偶数该怎么表示呢?
这就需要用到 if.....else.... 语句了,语法格式如下
if(表达式)
语句1
else
语句2
练习1:输入一个整数,判断是否为奇数,如果是奇数打印奇数,否则打印偶数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("%d是奇数\n", num);
else
printf("%d是偶数\n", num);
return 0;
}
练习2:输入一个年龄,>=18岁就输出:成年,否则就输出未成年
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
3.分支中包含多条语句
默认在if else语句中只包含一条语句
比如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年\n");
printf("可以谈恋爱了\n");
return 0;
}
这个代码无论输入的是>=18还是<18,"可以谈恋爱了"都会打印在屏幕中
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)//if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else//else 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
4.嵌套if
在if else语句中,else还可以与另一个if语句连用构成多重判断
比如:要求输入一个整数,判断输入的整数是0,还是整数或者是负数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("输入的数字是0\n");
else if (num > 0)//这里的if相当于嵌套在else语句中,形成嵌套结构
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
练习:
5.悬空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;
}
输出结果是什么呢?
很多初学者,可能会判断成 :a不等于1,不执行else字语句打印haha
而实际上是
#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语句
1.switch语句
除了if语句,C语言提供了switch语句来实现分支结构。switch语句是一种特殊的形式的if....else....结构,用于判断条件有多个结果的情况。
语法格式如下:
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
上面代码中,根据表达式expression不同的值,执行相应的case分支,如果找不到对应的值,就会执行default分支。
注意:
1、swtich括号里面的值必须是整形表达式
2、case后的值,必须是整形常量表达式
3、字符类型也被归类到整形家族
2.if语句和switch语句的对比
练习:输入一个整数值,计算除3之后的余数
使用if语句完成,代码如下:
#include <stdio.h>
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 <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)//()里面只能是整型表达式 char属于整型表达式家族
{
case 0:
printf("余数为0\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
}
return 0;
}
注意:
1.case和后面的数字之间必须要有空格
2.每一个case语句中的代码执行完成后需要加上break,才能跳出switch语句
2.switch语句中的break
上述代码如果去掉case中的break会出现什么情况呢
7除3余数为1,但是程序运行的结果中多了一行"余数是2"的打印。
这是为什么呢?
原因是只有在switch语句中使用break才能跳出switch语句,如果某一个case语句中没有break语句,代码会继续往下执行,有可能执行其他的case语句中的代码,直到遇到break或者switch语句结束。
当然也不算所有的case语句都需要break,这就需要根据实际情况来看了。
练习:输入1-7的数字,打印对应的星期几
例如:输入 1 输出 星期一
代码如下:
#include <stdio.h>
//练习:输入1~7的数字,打印对应的星期几
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-5,输出"工作日"
输入6-7,输出"休息日"
代码如下:
#include <stdio.h>
//需求变化为输入1~5,输出“工作日”,输入6~7,输出“休息日”
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;
}
3.switch语句中的default语句
如果switch后表达式的值无法匹配代码中的case语句的时候,这个时候就要用到default语句了
语法格式如下:
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
比如前面做的打印星期几的练习,如果day输入的不是1-7的数字,如果我们要提示:输入错误,则可以这样完成代码:
//switch语句中的default
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5://输入的数字在1~5的范围内都会进入这个语句
printf("工作日\n");
break;
case 6:
case 7://输入的数字在6~7的范围内都会进入这个语句
printf("休息日\n");
break;
default://数据大于7或小于1的时候执行该语句
printf("输入的数据有误,应该输入1~7的数字\n");
break;
}
return 0;
}
最后一个问题:switch语句中的case语句和default顺序问题
case 语句和 default 语句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。 不过我们通常是把 default 语句放在最后处理的。