在现实世界中,每件事情都是可以由顺序结构、分支结构和循环结构解决的,真的很佩服设计这些结构的人,总结出世界的规律,浓缩其精华,本章将介绍C语言中的分支语句。
一、分支结构
在c语言中我们用if语句和switch语句实现分支结构。
1.1 if语句
if语句的语法:
if(表达式)
语句
表达式为真,语句执行;表达式为假,语句不执行。C语言中,0表示假,非0表示真。
举个例子:输入一个整数,判断是否为奇数
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
if (num % 2 != 0)
printf("%d是奇数\n", num);
return 0;
}
因为奇数%2不等于0,所以if后面的表达式为该条件,该条件为真就输出,该条件为假就不输出。
该代码运行结果即,输入奇数即输出,输入偶数不输出。
1.2 else
if....else...语法
if(表达式)
语句1
else
语句2
仅仅使用if不能实现选择分支,所以C语言引入了else与if搭配使用,实现二分支。
举个例子:输入一个整数,判断其是奇数还是偶数。
#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;
}
在else后面不需要再指明num%2 == 0,因为num%2只有0和非0的结果,所以如果if后面的表达式判断为假,则num会到else里来输出偶数。
1.2.1 分支语句中包含多条语句的情况
在上面的例子中,只演示了if和else下面只有一条语句的情况,但现实生活中往往不仅限于一条语句,在某个条件下需要执行的不止一条语句,那我们怎么办?
答案很简单,只要在if和else下面加上花括号{},使之成为代码块,让编译器知道如果为真,则执行{}里所有的语句。
举个例子:
#include<stdio.h>
int main()
{
int age = 0;
printf("请输入一个年龄:\n");
scanf("%d",&age);
if (age > 18)
{
printf("年龄为:%d\n",age);
printf("可以带手机去大学了\n");
}
else
{
printf("年龄为:%d\n", age);
printf("不能谈恋爱\n");
}
return 0;
}
代码结果为:
因为if只能控制一条语句,如果不在if下面加花括号{},则只打印年龄为25,所以当if和else下面有多条语句时,需要用花括号{}括起来,将其封装为一个整体。
1.3 嵌套if
if...else...中,else可以嵌套另一个if
举个例子:输入一个整数,判断其是0,是负数还是正数
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
if (num == 0)
printf("输入的数字是%d\n", num);
else
if (num > 0)
printf("%d是正数\n", num);
else
printf("%d是负数\n", num);
return 0;
}
结果为:
其实在else里嵌套的if可以提上来,组成else if,效果可以参考下面。
int main()
{
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
if (num == 0)
printf("输入的数字是%d\n", num);
else if (num > 0)
printf("%d是正数\n", num);
else
printf("%d是负数\n", num);
return 0;
运行结果不会出错,也不会变,这样看起来更简洁,更具备可读性,在C语言中也是经常这么写,在这里就是为了说明else if实质上是在else里又嵌套了一个if语句。
1.4 悬空else问题
看这个例子:
运行结果:
为什么运行结果什么也没有呢?看这段代码小伙伴们是不是认为应该输出haha,这么想就错了哦。大家记住一个重要原则,else总是与距离最近的if匹配。
也就是说2和3应该是匹配的,可只看这个代码的话,让人以为认为1和3是匹配的,如果要让1和3匹配输出haha,需要在if上面加花括号{},再将else与1对齐即可。
1.4表明了我们在写代码的时候,要注重代码的可读性,该缩进缩进,该加括号加括号,注意代码的格式。
二、switch语句
除if语句外,C语言还提供了switch语句实现分支结构,它主要用于分支过多,使用if语句繁琐的时候,switch语句更加简洁。
switch语句的语法为:
switch(expression)
case value1:statement
case value2:statement
default: statement
其中,expression必须是整形表达式,value必须是整形常量表达式,case和后面的数字之间必须有空格。
字符是以ASCII码值的形式进行存储的,ASCII码是整数,字符属于整形家族,如果找不到对应的值,就执行default分支。
举例子:用switch语句,输⼊任意⼀个整数值,计算除3之后的余数。
#include <stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
switch (num % 3)
{
case 0:
printf("余数为0\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
default:
printf("输入错误!\n");
return 0;
}
return 0;
}
2.1 switch语句里的break语句
break语句用于当符合某一个case条件后,执行该case语句,并跳出,不执行该case语句下面其他的case语句。
如果不加break语句,上面代码会是怎样的呢?
#include <stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:\n");
scanf("%d", &num);
switch (num % 3)
{
case 0:
printf("余数为0\n");
case 1:
printf("余数为1\n");
case 2:
printf("余数为2\n");
default:
printf("输入错误!\n");
return 0;
}
return 0;
}
可以看到,25%3等于1,但是结果却把下面的case2和default语句也输出了。就是因为缺失了break语句,输出符合条件的case语句后没有跳出来,导致下面的case语句也都一并输出。
先说这些,咱下期再聊一下循环结构。