1.C语言中的控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成。
c语言中常用的控制语句
- 条件判断语句也叫分支语句:if语句、switch语句;
- 循环执行语句:do while语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句
2.分支语句
2.1 if语句
2.1.1 if
if的使用如下
if(表达式)
{
语句
}
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏ 。
也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。
2.1.2 else
else的使用要配合if,方法如下
if(表达式)
{
语句1
}
else
语句2
如果表达式为假,则进行语句2.
2.1.3分⽀中包含多条语句
if语句本身只能控制一个语句,当if后面有多条语句时,只能执行一条
例如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
return 0;
}
以上程序需要判断是否成年给出能否谈恋爱的文字,但不管输入的数是多少,均会打印出可以谈恋爱。
此时可以看出if无法控制多条语句,我们需要吧if所控制的语句加上花括号({})进行操作。
例如:
#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;
}
这样子可以实现if的多条语句控制。
2.1.4嵌套if
在使用if语句的时候,往往会判断不止一个数据,此时一个if貌似已经力不从心了。这时候我们引入嵌套if。
嵌套if:在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
例如:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
我们利用以上代码可以更快速的判断一个数的所属范围
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
3.1 switch语句
除了 if
语句外,C语⾔还提供了
switch
语句来实现分⽀结构。
switch 语句是⼀种特殊形式的
if...else
结构,⽤于判断条件有多个结果的情况。它把多重
的
else if
改成更易⽤、可读性更好的形式。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
上⾯代码中,根据表达式
expression
不同的值,执⾏相应的
case
分⽀。如果找不到对应的值,
就执⾏
default
分⽀。
注:
•
switch
后的
expression
必须是整型表达式
•
case
后的值,必须是整形常量表达式
3.1.2switch语句中的break
使用c语言写出一个switch语句
:输⼊任意⼀个整数值,计算除3之后的余数
#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;
}
前⾯的代码中,如果我们去掉case语句中的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;
}
我们发现,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印。
这是为什么呢?
原因是
switch
语句也是分⽀效果的,只有在
switch
语句中使⽤
break
才能在跳出
switch
语
句,如果某⼀个
case
语句的后边没有
break
语句,代码会继续玩下执⾏,有可能执⾏其他
case
语句中的代码,直到遇到
break
语句或者
switch
语句结束。就⽐如上⾯的代码就执⾏了
case
2
中的语句。
所以在
switch
语句中
break
语句是⾮常重要的,能实现真正的分⽀效果。
当然,
break
也不是每个
case
语句都得有,这就得根据实际情况来看了。
3.1.3 switch语句中的case和default的顺序问题
在
switch
语句中
case
⼦句和
default
⼦句有要求顺序吗?
default
只能放在最后吗?
其实,在
switch
语句中
case
语句和
default
语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把
default
⼦句放在最后处理的。