对于一个初学者来说,常犯错是很正常的,就算是有了定功底的人也会犯一些低级错误,这很正常。现对我和学员常犯的错作一点整理,与大家共勉
1、一个变量未初始化就开始使用(如果定义在全局,变量会自动初始化,不在此列)。比如
int a,sum; cin>>a; sum+=a; cout<<sum;
2、相等判断“日常化”。比如比较两数大小
if(a>b)cout<<">"; else if(a=b)cout<<"="; (应该是if(a==b)) else cout<<"<";
3、忘记写输入语句或输入语句放在了计算之后。比如int a,b,c; if(a>b)c=0; cin>>a>>b;
4、输入语句错误用法。比如cin>>a>>‘ ‘>>b>>endl;(这把输出的格式搞到输入); cin>>a,b,c; cin>>a(0<a<100);(把数据范围也加进了输入语句中),还有就是scanf输入格式与后面变量类型不匹配,忘记加&等
5、if语句嵌套错误。比如
//比较两数大小关系 int a,b; cin>>a>>b; if(a>b)cout<<">"; if(a<b)cout<<"<"; else cout<<"=";
比较两数大小
错误原因:当遇到分支不只两种时,不想写else或漏写else。如上例上就会出现输入的数a>b,结果将会是输出了“>”和"="两个符号。这与switch语句中漏写break语句的结果相似。
6、数据类型不正确使用。比如
一本通网站1013:温度表达转化 【题目描述】 利用公式 C=5×(F−32)÷9C=5×(F−32)÷9(其中CC表示摄氏温度,FF表示华氏温度)进行计算转化,输入华氏温度FF,输出摄氏温度CC,要求精确到小数点后55位。 【输入】 输入一行,包含一个实数FF,表示华氏温度。(F≥−459.67)(F≥−459.67) 【输出】 输出一行,包含一个实数,表示对应的摄氏温度,要求精确到小数点后55位。 【输入样例】 41 【输出样例】 5.00000
温度表达转换
#include<cstdio> int main(){ int f; float c; scanf("%d",&f); c=5*(f-32)/9; printf("%.5f",c); return 0; }#include<cstdio> int main(){ int f; float c; scanf("%d",&f); c=5*(f-32)/9; printf("%.5f",c); return 0; }
错误代码一
错误原因:公式中都是整数运算,结果当然是整数,输出的虽然是有小数位,但那是运算结果取整后再加小数。
#include<cstdio> int main(){ int f; float c; scanf("%d",&f); c=float(5*(f-32)/9); printf("%.5f",c); return 0; }
错误代码二
错误原因:虽然的类型转换,但这个转换跟没有一样效果。因为转换前全是整数,运算出来的也自然是整数,再加上类型转换为时己晚。
修改方法:最好第一次运算就先提升数据类型或损失精度前转换。比如运算式改为c=5*(1.0*f-32)/9或者c=5.0*(f-32)/9都是可以的。注意1.0*f实际上是把整个的数据类型隐形转换成了float。
7、循环变量书写错。比如把for(int j=1;i<100;j++)写成for(int j=1;i<100;j++)或者for(int j=1;j<100;i++),还有把for(int i=100;i>0;i--)错误地写成for(int i=100;i>0;i++)等,这些都很容易陷入死循环。
8、在使用float类型,特别是double类型时不注意这类数的误差而造成错误。可参看https://www.cnblogs.com/wendcn/p/10475883.html。
在float或double类型的数据相等时一般用|a-b|<1e-12的类似方式,而不适合直接用a==b进行判断。
9、广搜时标记不及时的错。详情参看一道广搜的错https://www.cnblogs.com/wendcn/p/10441543.html
原文地址:https://www.cnblogs.com/wendcn/p/10476260.html
时间: 2024-10-12 01:01:03