一、if语句陷阱
if语句注意事项
非零为真
if条件后面别加;
判断相等时,将常量写在左边
规范:if匹配else < 可读性差>
if条件中的运算符优先级(加上括号)
零值比较
整型 if(0 == num) if(0 != num)
布尔型 if(flag) if(!flag)
指针 if(NULL == *ptr) if(NULL !=*ptr)
浮点型 if(x >=-EPSINON)&&(x <= EPSINON)
EPSINON是允许的误差(即精度)
二、循环语句
死循环 while(1)/for(;😉
whlie条件没有==;==
循环体里不要直接修改循环变量==!!!==
程序优化(嵌套),把长循环放在内层;逻辑判断放在外层
编码规范:即使只有一条语句也加上{}
switch语句
条件:整数或者字符 表达式
格式:不管case下语句有多少条,都要加{}
default:每个switch语句必须加入default
流程:只要匹配到case,如果case里没有break,会一直往下执行
break VS continue
continue(只在循环体):结束当前这次循环,进行下次循环
break:结束当前全部循环
goto语法
loop:
goto
goto使用注意事项
尽可能的少用goto语句:goto语句会破坏代码结构;导致代码可读性差
标签和goto语句之间切记不要出现变量的定义
goto的使用场景:异常处理
快速处理掉异常
附
do while(0)的作用 避免else混用,避免goto
程序训练
题目1~n,数字中,有多少个’9’
#include <stdio.h> int main() { int num,sum = 0,temp_i,i; scanf("%d",&num); for(i = 0; i <= num; i++) { temp_i = i; while(0 != temp_i) { if(9 == (temp_i % 10)) { sum++; } temp_i = temp_i / 10; } } printf("sum = %d",sum); return 0; }
题目2
题目:有n个人围成一圈,顺序排号,从第一一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.(提示:用数组完成)
题目3
输入5个数(含负数、小数)将他们按小到大的顺序排列起来(提示:需要排数的数字通过参数传递进来)