码迷,mamicode.com
首页 > 编程语言 > 详细

C++初学者常犯的错(持续更新)

时间:2019-03-05 13:57:31      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:switch   表示   play   scanf   main   lse   include   一点   print   

      对于一个初学者来说,常犯错是很正常的,就算是有了定功底的人也会犯一些低级错误,这很正常。现对我和学员常犯的错作一点整理,与大家共勉

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

C++初学者常犯的错(持续更新)

标签:switch   表示   play   scanf   main   lse   include   一点   print   

原文地址:https://www.cnblogs.com/wendcn/p/10476260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!