编程易错点
1 常量声明的格式
-
主函数中: const double pi = 3.1415926
-
主函数前: #define pi 3.1415926
(const pi=3.14,不加类型,默认整型)
2 小数点的四舍五入
-
常用:小数点后保留2位有效数字,一般不用去管,用%.2f截断即可(自动多余部分四舍五入)
-
小数点后保留2位有效数字,多余部分四舍五入,代码实现
double c=1.643; c=(int)(c*100+0.5); c/=100;
3 整数的商
1. 常用:有小数,注意顺序,无效写法:c=a/b*1.0;
int a,b; double c; c=a*1.0/b;
4 闰年的判断
if(a%4==0 && a%100!=0 || a%400==0) printf("yes");
5 利用数组简化程序
数组下标的自然顺序,依次对应月份
6 自增自减
i++ 先赋值再自增;++i 先自增再赋值
7 while的条件
-
常用:while(n>0)
-
while(i--) i首先自减1再进入循环,当i==0时跳出循环
8 switch语句(特征:开关)
-
与if语句比较:if:一条件只对应一可能,一一 对应 switch: 单条件对应多可能,一对多
-
单条件对应的各类可能,打包为一模块,结构紧凑
switch(grade){ case"A":score=100;break; case"B":score=90;break; case"C":score=80;break; case"D":score=70;break; default:printf("Iuput error!\n"); exit(-1); }
9 Fn亮,可在DevC++里用快捷键
10 利用temp量
尽量与题设条件一致,不要自己对数值进行转换,便于检查,尤其是多分支的条件语句,别平添烦恼
11 求最大公因数gcd
-
辗转相除法
while(c!=0){ c=b%a; b=a; a=c; }
2. for循环
for(i=a;i>0;i--){ if(b%i==0 && a%i==0){ printf("%d",i); break; } }
3. 熟练函数的写法(模块化)
int gcd(int a,int b){ int i; for(i=a;i>0;i--){ if(a%i==0 &&b%i==0) break; } return i; }
12 输入多个数据
注意最后一个数据单独讨论,不然若最后有空格,则需输入空格再回车方可运行
for(i=0;i<n;i++){ if(i<(n-1)) scanf("%d ",&p[i]); else scanf("%d",&p[i]); }
13 if语句块一定要有{}
错误写法:if(n==0) min=0;ws=1; ws=1不在if里,是必会运行的,写法要规范
正确写法:
if(n==0){ min=0; ws=1; }
14 输入格式固定
scanf("%d",&a);
输入:3 5 1 7 6
依然有效输出,最后图快可以尝试,平时不建议,最好规范写
15 考试建议
当调试多次(提交次数>3),分数75,不知哪组数据有问题时,建议换种逻辑重新写一个以免浪费时间
16 寻找普适性
发现共同点,普遍性规律,整合统一的思想不容易错
若多个条件用逻辑符号叠加,容易出错且不易察觉,因为人思维的盲区会漏可能性