目录
1. if语句
1.1. if
if的标准格式如下:
1.if(条件){
2. 语句;
3.}
条件为真(非0)即执行语句,反之(为0)则不执行语句。
值得注意的是,当输入语句为单条时,if后的花括号可省略,但建议还是加上,保持代码的可读性与整齐度。
1.2. else
if...else...的标准格式如下:
1.if(条件){
2. 语句1;
3.}
4.else{
5. 语句2;
6.}
当条件符合时,执行语句1。反之则执行语句2。
要注意,else满足就近原则,即其指向的是距离最近且无其他else配对的if。
1.if(条件1){
2. 语句1;
3.}
4. if(条件2){
5. 语句2;
6. }
7.else{
8. 语句3;
9.}
在上图中,虽然else在位置上与第一个if对齐,但其实跟随的是第二个if。
2. 关系操作符
1.#define _CRT_SECURE_NO_WARNINGS
2.#include <stdio.h>
3.
4.int main() {
5. int a = 0;
6. int b = 1;
7. if (a == b) {
8. printf("√");
9. }
10. else {
11. printf("×");
12. }
13. return 0;
14.}
在上述代码中,由于a!=b,所以会执行else中的语句,则输出结果为×。
需要注意的是,多个关系操作符并不能连用,而是需要在中间使用逻辑操作符。
3. 条件操作符
在这里我们介绍的条件操作符即为三目操作符,标准格式如下:
1.exp1 ? exp2 : exp3
若exp1执行为真,则采取exp2;若exp1为假,则采取exp3。
4. 逻辑操作符:&& , || , !
4.1. 短路
1.if(a>1 && a<3)
对于以上代码,若a!>1,则左侧表达式为假(即0),此时整个表达式的结果为0,并不需要判断右侧表达式。
1.if(a>12 || a<6 || a==7)
如果a>12,则不用再判断右侧表达式,整个表达式的结果也为1。
5. switch语句
除if...else的方式外,我们还有一种代码,可以用来编写多分支情况,那就是switch...case语句。其标准格式如下:
1.switch (expression) {
2. case value1: statement
3. case value2: statement
4. default: statement
5.}
5.1. switch与break语句
我们可以把case value1视作一个入口,当case语句中没有break时,我们从入口进入,便像坐滑滑梯一样顺着滑下,继续执行case value2,case value3,default等等。而break则像滑梯的出口,当你从case value中进入,执行到break出口时,便跳出,不执行下面的语句。
1.#include <stdio.h>
2.int main()
3.{
4.int n = 0;
5.scanf("%d", &n);
6. switch(n%3)
7. {
8. case 0:
9. printf("整除,余数为0\n");
10. break;
11. case 1:
12. printf("余数是1\n");
13. break;
14. case 2:
15. printf("余数是2\n");
16. break;
17. }
18. return 0;
19.}
对上述代码,假设我们输入n=3,则进入case 0,则结果为
整除,余数为0
当我们把break去掉。
1.#include <stdio.h>
2.int main()
3.{
4.int n = 0;
5.scanf("%d", &n);
6. switch(n%3)
7. {
8. case 0:
9. printf("整除,余数为0\n");
10.
11. case 1:
12. printf("余数是1\n");
13.
14. case 2:
15. printf("余数是2\n");
16.
17. }
18. return 0;
19.}
同样输入n=3,结果则为
整除,余数为0
余数是1
余数是2
所以在使用switch语句时,是否需要在case后加入break是需要读者自我把握的。
最后说一嘴,在编写case与default时,他们的顺序并不影响你的结果。对于编译器而言,他们是倒着写还是逆着写都是一样的,顺序着写入case 1,case2,default等等只是为了让代码清晰明了。
6. while循环
标准格式:
1.while(表达式)
2. 语句;//如果循环体想包含更多的语句,可以加上⼤括号
与if相似。
我们直接上例题,更便于理解。
1.#include <stdio.h>
2.int main()
3.{
4. int i = 1;
5. while(i<=10)
6. {
7. printf("%d ", i);
8. i = i+1;
9. }
10. return 0;
11.}
7. for循环
标准格式:
1.for(表达式1; 表达式2; 表达式3)
2. 语句;//如果循环体想包含更多的语句,可以加上⼤括号
8. do-while循环
标准格式:
1.do{
2. 语句;
3.}while(表达式);
do...while像是人群中的劳动者,他们先干活,后判断。
9. break和continue语句
• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执行。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
执行结果为:
1 2 3 4
而当我们把break换为continue:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
printf("%d ", i);
i = i+1;
}
return 0;
}
执行结果为:
1 2 3 4 5 //此时陷入死循环
需要注意的是:
10. goto语句
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
执行结果为:
hehe
跳过了haha的打印
可以看出goto语句打散了我们原本的代码安排,所以我们尽量不去使用它,以免出错。
但是对于多层循环嵌套的函数,goto语句或许有奇效。