流程控制语句
条件语句
1. if与if-else
1 2 3 4 5 6 7 8
| if(表达式1){ 语句1; }else if(表达式2){ 语句2; }else if(表达式3){ 语句3; }
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<stdio.h> int main() { int a = 9; int b = 10; int c = 55555; int d = 183443265;
if(a > b){ printf("a > b"); } if(a < b){ printf("a < b"),printf("a < b"),printf("a < b"); }else if(a == b){ printf("a == b"); }else{ printf("a > b"); }
if(a < b){ if(c < d){ printf("c < d"); }else{ printf("c > d"); } }else{
} return 0; }
|
细心的同学可能已经发现了,在使用 if
语句的时候不写括号,它似乎也按照我们预想的一样。实际上并不是。编译器会默认把下一个分号之前的所有语句算成是这个 if
语句的内容。
为了程序的可读性,也为了方便我们后期的修改维护,强烈建议使用 if 语句的时候加上大括号。
2. switch语句
switch
语句是C语言中比较常用的语句,它跟 if
语句有点像。
光说有点抽象,我们直接看个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> int main() { int a = 7; switch(a){ case 1: printf("%d\n",a + 3); break; case 2: printf("%d\n",a + 2); break; default: printf("%d\n",a + 1); break; } if(a == 1){ printf("%d\n",a + 3); }else if(a == 2){ printf("%d\n",a + 2); }else { printf("%d\n",a + 1); } }
|
::: warning
如果我们不写 break
的话,switch
语句会从符合条件的位置开始,往下一直执行下去,直到遇到 break
为止。就像下面这个例子展示的那样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> int main() { int a = 7; switch(a){ case 1: printf("%d\n",a + 3);
case 2: printf("%d\n",a + 2);
default: printf("%d\n",a + 1); break; } if(a == 1){ printf("%d\n",a + 3); printf("%d\n",a + 2); printf("%d\n",a + 1); }else if(a == 2){ printf("%d\n",a + 2); printf("%d\n",a + 1); }else { printf("%d\n",a + 1); } }
|
:::
3. goto语句
作用:让程序跳转到指定的位置。
程序运行时是主函数从上到下逐行执行代码,而 goto
语句能让程序直接跳到指定的位置,并从那个位置接着往下逐行执行代码。
goto
语句有两部分:goto
和 标签名。标签的命名遵循变量命名规则。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<stdio.h> int main(){ int a = 7; double b = 9; float c = 11.777; char d = 'D';
part1: printf("%d,%lf,c = %f,d = %c\n",a,b,c,d); printf("%5d\n%-5d,%1.0f",a,a,c); if(a >= 7){ a -= 4; goto part1; } return 0; }
|
原则上,不建议在C语言中使用 goto
语句,我们可以使用 if
语句、while
循环等来代替它。
循环语句
1. while循环
while
循环是C语言中比较常用的循环语句,它跟 if
语句有点像。
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h> int main(){ int a = 7; while(a <= 10) { printf("%d ",a); a++; }
return 0; }
|
2. do-while循环
do-while
循环跟 while
循环很像,不同的是 do-while
循环会先执行一次循环体,再进行判断,如果条件成立就继续执行循环体,否则跳出循环。
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h> int main(){ int b = 9; do { printf("%d ",b); b++; }while(b <= 15);
return 0; }
|
3. for循环
for
循环用于在满足特定条件的情况下重复执行一段代码。for
循环通常用在已经知道循环次数的地方。
1 2 3
| for (initialization; condition; increment) { }
|
:::info initialization
初始化部分,在循环开始前执行一次,用于初始化循环控制变量。
:::
:::info condition
条件部分,在每次迭代开始前进行测试。如果条件为真(非零),则执行循环体;如果条件为假(零),则终止循环。
:::
:::info increment
增量部分,在每次循环体执行完毕后执行,用于更新循环控制变量。
:::
1 2 3 4 5 6 7
| #include<stdio.h> int main(){ for (int i = 0; i < 10; i++) { printf("%d ",i); } return 0; }
|
for
循环的初始化部分、条件部分、增量部分都是可省略的,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> int main(){ int i = 3; for (;i < 7;) { printf("%d ",i++); } for(;;){ if(i == 17){ printf("循环终止\n"); break; } i++; } return 0; }
|
::: warning
一定要检查有没有写合适的循环终止条件,避免出现死循环。
:::
4. break和continue
刚才我们提过,break
用来跳出一层循环,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> int main(){ for(int i = 0;i < 10;i++){ printf("%d ",i); } for(int i = 0;;i++){ if(i >= 10){ break; } else { printf("%d ",i); } } return 0; }
|
你可能注意到我强调了一层循环,因为我们有时候可能会用到嵌套的循环,例如:
1 2 3 4 5 6 7 8 9 10 11
| #include<stdio.h> int main(){ for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ printf("%d ",i); break; } } return 0; }
|
continue
的作用是用来跳过本次循环,继续下一次循环。
1 2 3 4 5 6 7 8 9 10
| #include<stdio.h> int main(){ for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ printf("%d ",i); continue; printf("%d ",j); } } }
|