1. 从机械执行到灵活思考的转变
刚开始接触C语言时,我总是习惯性地把代码写成一条直线式的指令序列。直到遇到第一个需要根据用户输入做出不同响应的练习——那个简单的"成绩等级判断"小程序,才真正意识到分支结构的重要性。记得当时用了一连串的if-else if,就像搭建了一个多层的决策树,每个条件判断都是树上的一个分叉点。
新手常见误区:很多人刚开始会写出类似 if(score>=60) {...} else if(score<60) {...} 这样的冗余判断。实际上else已经隐含了"不满足前述所有条件"的含义。
在实现一个简单的计算器时,switch-case结构给了我新的启发。当需要根据运算符字符(+、-、*、/)来执行不同运算时,switch语句就像是一个高效的分发中心:
c复制char operator;
scanf("%c", &operator);
switch(operator) {
case '+': printf("%.2f", num1+num2); break;
case '-': printf("%.2f", num1-num2); break;
//...其他运算符处理
default: printf("无效运算符");
}
这种结构特别适合处理枚举型的条件判断,比一连串的if-else更加清晰。但要注意的是,每个case末尾的break是容易忽略的关键点——没有它就会发生"case穿透",这是很多初学者调试时的噩梦。
2. 循环结构:从重复劳动到模式抽象
当我需要打印九九乘法表时,第一次体会到循环的威力。从最初笨拙地写81条printf语句,到使用嵌套循环优雅解决,这种思维跃迁令人难忘:
c复制for(int i=1; i<=9; i++) {
for(int j=1; j<=i; j++) {
printf("%d*%d=%-2d ", j, i, i*j);
}
printf("\n");
}
三种循环结构各有其适用场景:
- for循环:适合已知循环次数的场景,如数组遍历
- while循环:适合条件满足即执行的场景,如读取文件直到EOF
- do-while循环:至少执行一次的场景,如菜单交互
性
