1. 引言
作为一名大一新生,我在C语言的学习中先后接触了选择结构(if、switch)和循环结构(for、while、do-while),并逐步掌握了它们之间的嵌套使用,以及break、continue等跳转语句的灵活运用。这篇博客是我对这段时间学习内容的系统梳理与总结,既是对知识的复盘,也希望能为同样在路上的初学者提供一份参考。
2. 选择结构:让程序学会“判断”
选择结构是程序根据条件决定执行路径的基础。C语言中最常用的就是if系列和switch语句。
2.1 if 语句的三种形态
if语句根据条件的真假决定是否执行某段代码,常见有三种形态:
- 单分支:条件成立才执行。
- 双分支:条件成立走一个分支,否则走另一个分支。
- 多分支(else if):多个条件依次判断,命中即执行。
#include<stdio.h>intmain(){intscore=85;if(score>=90){printf("优秀\n");}elseif(score>=60){printf("及格\n");}else{printf("不及格\n");}return0;}2.2 switch 语句:多分支的另一种写法
当判断条件是基于某个整型或字符型变量的多个取值时,switch往往比else if更清晰。需要注意每个分支末尾的break,否则会发生“穿透”。
#include<stdio.h>intmain(){intday=3;switch(day){case1:printf("星期一\n");break;case2:printf("星期二\n");break;case3:printf("星期三\n");break;default:printf("无效输入\n");}return0;}3. 循环结构:让程序学会“重复”
循环结构用于处理需要重复执行的代码。C语言提供了三种循环语句:while、do-while和for。
3.1 while 循环
先判断条件,再执行循环体。如果一开始条件就不成立,循环体一次都不会执行。
#include<stdio.h>intmain(){inti=1;while(i<=5){printf("%d ",i);i++;}return0;}3.2 do-while 循环
先执行一次循环体,再判断条件。因此无论条件是否成立,循环体至少会执行一次。
#include<stdio.h>intmain(){inti=1;do{printf("%d ",i);i++;}while(i<=5);return0;}3.3 for 循环
for把初始化、条件判断和步长更新集中在一行,结构紧凑,适合循环次数已知的场景。
#include<stdio.h>intmain(){for(inti=1;i<=5;i++){printf("%d ",i);}return0;}4. 嵌套:选择与循环的组合拳
选择结构和循环结构可以互相嵌套,形成更强大的逻辑。常见的有循环内嵌选择、选择内嵌循环,以及多层循环嵌套。
4.1 循环内嵌选择:筛选满足条件的元素
#include<stdio.h>intmain(){for(inti=1;i<=10;i++){if(i%2==0){printf("%d 是偶数\n",i);}}return0;}4.2 选择内嵌循环:按条件执行不同次数的循环
#include<stdio.h>intmain(){intn=3;if(n>0){for(inti=0;i<n;i++){printf("执行第 %d 次\n",i+1);}}return0;}4.3 多层循环嵌套:打印九九乘法表
#include<stdio.h>intmain(){for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){printf("%d*%d=%-2d ",j,i,i*j);}printf("\n");}return0;}5. break 与 continue:循环的“刹车”与“跳过”
在循环中,break用于立即终止整个循环,而continue用于跳过本次循环的剩余语句、直接进入下一次迭代。
5.1 break:提前结束循环
#include<stdio.h>intmain(){for(inti=1;i<=10;i++){if(i==5){break;// 当 i 等于 5 时,跳出整个循环}printf("%d ",i);}return0;}5.2 continue:跳过本次迭代
#include<stdio.h>intmain(){for(inti=1;i<=10;i++){if(i%2==0){continue;// 跳过偶数,不打印}printf("%d ",i);}return0;}6. 综合实战:猜数字小游戏
把选择、循环、嵌套和跳转语句综合起来,写一个简单的猜数字游戏,加深对知识点的理解。
#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){inttarget,guess,attempts=0;srand((unsigned)time(NULL));target=rand()%100+1;// 生成 1~100 的随机数printf("猜一个 1~100 之间的数字:\n");while(1){scanf("%d",&guess);attempts++;if(guess>target){printf("太大了,再试一次:\n");}elseif(guess<target){printf("太小了,再试一次:\n");}else{printf("恭喜你!猜对了,共用了 %d 次。\n",attempts);break;}}return0;}7. 学习心得与常见坑
经过这段时间的学习,我总结了几点心得和容易踩的坑:
- switch 忘记 break:会导致分支穿透,执行多个 case,这是初学者最常见的错误。
- while 与 do-while 的区别:前者可能一次都不执行,后者至少执行一次,要根据场景选择。
- 嵌套层级不宜过深:嵌套太深会降低代码可读性,建议控制在 2~3 层以内。
- break 与 continue 的作用范围:它们只作用于当前所在的最近一层循环,多层嵌套时要注意。
- 循环变量的更新:忘记在循环体内更新循环变量,容易造成死循环。
8. 总结
选择结构让程序有了“判断力”,循环结构让程序有了“重复力”,而嵌套与break、continue则让这两种能力可以灵活组合,解决更复杂的实际问题。作为初学者,我最大的体会是:语法只是工具,真正的能力在于用它们去拆解问题、设计逻辑。接下来我打算继续练习更多综合性的题目,把基础打得更扎实。