1. 分支语句
C语言中可以利用if和switch语句,来实现分支结构,也就是我们C语言的选择结构。
1.1 if语句
当我们需要经过某些条件来判断语句是否执行时,可以用if(具体条件的表达式),后加上语句来进行处理,表达式为真则执行。如下图1使用if语句判断输入的数是否能被五整除,能则打印出“YES”:
图1
1.2 else的用法
如果if中的条件表达式不满足,则可以使用else来表示if表达式不满足条件时,所执行的其他语句,也如图1中,若不能被5整除,则会打印“NO”。
1.3 if多条语句以及嵌套情况
1.3.1 if包含了多条语句
在实际使用if来进行语句执行时,我们往往会遇到需要执行多条语句的情况,然而值得注意的是,我们的if与else语句在执行中,默认是只能控制执行一条语句,所以,我们在实际操作中如果想要执行多条语句,就需要利用“{ }”来将我们所要执行的多条语句放在一起,例如图2:
图2
我们可以从图2中看到在if(a>b)的条件下加入"{ }"就放入了多条语句。
1.3.2 if的嵌套
从图2,我们不仅可以if能包含多条语句,还能看出if语句里面可以对if与else语句进行嵌套的操作,当我们满足了第一个if的条件时,如果在第一个条件的基础下,也有不同的条件,例如在(a>b)z中,还分为了其他三种情况,所以我们在其中又利用了if与else来进行处理,这就是嵌套。
我们还可以发现的是图2中使用了许多else if的操作,实际上else if中的if是被嵌套在else语句中的,只是为了表达地更为简洁,所以才采用了else if来替代了用多个"{ }"来进行嵌套处理的操作。
1.4 switch语句
为了代替使用多个else if来进行分支,我们还可以利用switch语句来进行分支得到更易读的选择结构。switch语句的实现为switch(表达式),根据表达式后的结果n,执行case value n :后的表达式,并在每个case中加入break来跳出循环,若n的值不属于任何一个case,则执行default语句。具体的案例如下代码,判断输入的数为奇数或者偶数,余数为1为奇数,0为偶数,或输入错误。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int m = 0;
scanf("%d", &m);
switch(m % 2)
{
case 1:
printf("奇数");
break;
case 0:
printf("偶数");
break;
default:
printf("输入错误,请输入数字");
break;
}
return 0;
}
1.5 if语句与switch语句的注意事项
第一,无论是if,else,还是switch以及后面的循环语句,首先这些关键字加上表达式后,不用加分号,只有大括号里面的语句才加入“;”。
第二,一般情况下else与离他最近的if相匹配(else if中的else是与前面的if相匹配而不是else if中的if),如果不想和最近的匹配,则需要加入大括号,分成不同的代码块,使得不是最近的也能匹配到,比如上面图2中的else if(a>c)中的else,它就会与上面的else if(a>b)相互匹配,表达的就是当a>c不成立时且a>b的情况。
第三,switch中的条件表达式必须为整形表达式,而case中的value必须为整形常量表达式,且case与后面的value之间一定要有空格。
第四,当case value中没有break,则不会跳出,而会继续执行下面的case代码,直至break。
2.循环语句
循环语句能实现C语言中的循环结构,使用到的语句包括while语句,for语句,do while语句。
2.1 while语句
while语句的表达就是while(条件表达式),再加语句,与if类似,但如果条件为假,则会跳出while循环,例如在上文代码的基础上,我们加入while语句,就可以实现循环输入的判断奇偶数,如下代码,因为加入了while,所以可以再次进行输入进行判断。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int m = 0;
while (scanf("%d", &m)!=EOF)
{
switch (m % 2)
{
case 1:
printf("奇数");
break;
case 0:
printf("偶数");
break;
default:
printf("输入错误,请输入数字");
break;
}
}
return 0;
}
2.2 for语句
for语句的使用是三大循环中最常用的,是因为for不仅可以直接在表达式中就进行了初始化,而且其表达式中也包括了对变量的一个调整。其结构是for(表达式1;表达式2;表达式3)再跟语句,表达式1代表1初始化,表达式2是条件的判断,表达式3是调整,见下图3例子,通过for循环打印出0到100之间是3倍数的整数。
图3
2.3 do while语句
do while语句类似于while语句,其区别在于其结构是do加语句,再跟while加(条件表达式),也就是说都do while语句是先执行语句再进行条件的判断。例子如下代码,打印出1-10的数字。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
2.4 循环语句的嵌套
类似于前文中的分支语句,循环语句通过加“{ }”的方式也能进行嵌套,如下图4案例,打印出100-200的质数。
图4
从图4看出,我们利用了两个for语句进行了嵌套,其中还穿插了if语句的使用。
2.5 循环语句注意事项
第一,在for循环中,初始化部分只会执行一次。
第二,for循环中的调整表达式,会在for中语句执行完后,再进行调整,具体顺序为表达式1,表达式2,执行语句,最后才是表达式3,也就是我们的调整表达式。
第三,while与 do while最大的区别在于,do while中的循环体至少会执行一次,但do while在实际情况中使用的机会确实要相对少一些。
第四,其实还包括goto语句可以跳转到指定标记进行循环,具体用法为“goto 标记名:“”,“标记名:语句”,不过用得很少。
3.break与continue
第一,break的用法是完全跳出当前代码块的循环,也就是只会跳出当前“{ }”中的循环,所以实际操作中要注意在不同的位置加上break来跳出循环。
第二,continue的用法是停止这一次的循环体的进行,也就是不再执行之后的循环体代码,然后再进入循环之中,不会跳出当前循环。