C语言目录:
默认情况下,程序运行后,系统会从上到下顺序执行程序中的每一行代码。
5.1 顺序结构
![](https://img-blog.csdnimg.cn/7dc2ab55e7dd4c06be094a08a1501ba3.png)
5.2 选择结构
![](https://img-blog.csdnimg.cn/189980520d2b4c4ca8664b75fcb966db.png)
5.2.1 if
if(表达式){
语句1;
}else if(表达式2){
语句2;
}else{
表达式3;
}
后续语句;
约定 :==
或 !=
比较变量和值是否相等时,把常量卸载前面
#include <stdio.h>
int main(){
int a = 8;
// if(a == 10){// 错误写法, 但不会报错
if (10 == a){
printf("a的值是10\n");
}else{
printf("a的值不是10\n");
}
}
5.2.2 switch
switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
注意
-
switch
的表达式及case
的值 的类型必须是int
,或者可以被提升为整型的值(char
,short
) -
case
的值不能相同 -
每个
case
要以break
结尾,否则会出现穿透问题 -
default
不一定要放在case
最后,只有等到所有case
不匹配才会执行。
5.3 循环结构
![](https://img-blog.csdnimg.cn/d1b7b92324024a809ae7748bc0e76397.png)
循环条件 成立时,会反复执行 循环体 ,直到条件不成立位置
5.3.1 while
while(循环控制条件) {
循环体中的语句;
能够让循环结束的语句;
....
}
-
循环控制条件:循环退出的主要依据,来控制循环到底什么时候退出
-
循环体:循环的过程中重复执行的代码段
-
循环终止语句(递增、递减、真、假等):能够让循环条件为假的依据,否则退出循环
注意
如果 while
省略了大括号,则后面不能定义变量
#include <stdio.h>
int main(){
while (1) // 死循环
int num = 10; // 报错
// 没有能够让循环结束的语句
}
5.3.2 do while
do {
循环体中的语句;
能够让循环结束的语句;
....
} while(循环控制条件);
a. 应用场景:口令校验
#include<stdio.h>
int main()
{
int num = -1;
do{
printf("请输入密码,验证您的身份\n");
scanf("%d", &num);
}while(123456 != num);
printf("主人,您终于回来了\n");
}
do...while
和 while
的区别
do...while
至少执行一次while
可能一次都不执行
5.3.3 for
for(初始化表达式;循环条件表达式;循环后的操作表达式) {
循环体中的语句;
}
对比 while
来说, for
更节约内存空间
5.3.4 循环优化
在多重循环中,应当将最长的循环放在最内存,最短的循环放在最外层,减少CPU跨循环层切换的次数
for (row=0; row<100; row++) {
// 低效率:长循环在最外层
for ( col=0; col<5; col++ ) {
sum = sum + a[row][col];
}
}
for (col=0; col<5; col++ ) {
// 高效率:长循环在最内层
for (row=0; row<100; row++) {
sum = sum + a[row][col];
}
}
5.4 四大跳转
5.4.1 break
立刻跳出当前语句或循环
一个 break
只向外跳一层
同一层, break
后面的语句不会执行
5.4.2 continue
结束 本轮 ,进入 下一轮 循环
5.4.3 goto
仅在本函数内实现跳转,不能实现跨函数跳转
#include <stdio.h>
int main(){
int num = 0;
// loop:是定义的标记
loop:if(num < 10){
printf("num = %d\n", num);
num++;
// goto loop代表跳转到标记的位置
goto loop;
}
}
#include <stdio.h>
int main(){
while (1) {
while(true){
goto out;
}
}
out:printf("跳过了所有循环");
}
5.4.4 return
结束当前函数,将结果返回给调用者