c 常见错误
- 格式:doc
- 大小:53.50 KB
- 文档页数:18
c++常见错误.txt逆风的方向,更适合飞翔。
我不怕万人阻挡,只怕自己投降。
你发怒一分钟,便失去60分钟的幸福。
忙碌是一种幸福,让我们没时间体会痛苦;奔波是一种快乐,让我们真实地感受生活;疲惫是一种享受,让我们无暇空虚。
生活就像"呼吸""呼"是为出一口气,"吸"是为争一口气。
第一章 C/C++程序设计概述返回1. 为什么语句末要加分号“;”?分号是C语句的组成部分,不能漏掉或忘记。
例如:double r // 该语句编译时就会出现语法错误。
并提示错误信息:cin>>r ; // error C2146: syntax error : missing ';' before identifier 'cin'2. 为什么变量要先定义后使用?C/C++规定任何变量都必须在使用前定义,否则编译时会出错。
例如:main ( ){int x=3,y=5; //变量z没有定义就使用,编译时会出错。
z=x+y; //编译时提示错误信息:error C2065: 'z' : undeclared identifier}3. 标识符大小写有什么区别?C/C++严格区分大小字符,标识符大小写也有严格区别。
例如:double r;cin>>R;C/C++将小写变量r和大写变量R看作两个不同的变量,所以编译时将提示错误信息:error C2065: 'R' : undeclared identifier。
4. 为什么要加预处理命令(头文件)?在输入、输出、函数调用时必须在#include命令中包含相应的头文件*.h。
void main(){ int x,y,t;cout<<"输入 x y:"<<endl;cin>>x>>y;if (x<y)t=x;elsey=t;cout<<x<<">"<<y<<endl;}由于缺少#include "iostream.h"命令,编译时的出错信息:error C2065: 'cout' : undeclared identifiererror C2065: 'endl' : undeclared identifier初学者常用的头文件:(1)用cout、cin进行输入输出时,需要头文件:iostream.h(2)用scanf( )、printf( ) 进行输入输出时,需要头文件:stdio.h(3)使用sqrt( )、abs( )等数学函数时,需要头文件:math.h(4)使用gets( )、puts( )等有关字符处理函数时,需要头文件:string.h第二章数据类型和运算符返回1. 关于求余运算符“%”的问题?%是求余运算符;C/C++规,定a%b运算中变量a和b必须为整形。
如:8%3的结果是2;而8.6%3是非法运算。
2. 关于整除运算“/”的问题?整除运算的结果依然为整型数。
例如:9/2的结果为4,而9.0/2的结果为4.5。
特别注意:1/3+1/3+1/3的结果为0。
3. 字符常量与字符串常量有何区别?字符常量是由单引号括起的一个字符,如:'s'。
而"s"是字符串常量,由双引号括起,包含两个字符:'s'和'\'。
使用时不能混淆,例如:char c, p;p='s'; //正确c="s"; //错误,字符变量c和p只能存放一个字符4. 输入输出时要注意的问题?(1)输入输出格式符要与数据类型保持一致;否则会输出莫名其妙的结果。
例如:float a=3.7, b=4.2; printf("a=%d, b=%d\n", a,b);输出结果为:a=-1610612736, b=1074633113 显然是错的(2)不能忘记使用地址符号“&”。
例如:错误的输入语句:scanf ("%d%d",a,b);正确的语句:scanf ("%d%d",&a,&b);(3)输入数据的方式与格式要求要相符例如:scanf("a=%d,b=%d",&a,&b);输入数据的形式为:a=20,b=675. “=”与“= =”有何区别?“=”是赋值运算符,“= =”是关系运算符;误用会造成严重后果。
例如:if (a= =3) a=b; 表示如果a等于3,将b值赋给a。
若误成:if (a=3) a=b; 无论a为何值,条件总是成立,即b值总是赋给a。
这与本意不符。
6. ++和--运算要注意哪些问题?(1)++和--运算只能适用于整型变量;例如:n*m++ 正确的,而(n * m)++是错误的;因为(n * m)是表达式。
(2)前置和后置有区别:int n = 2, post, pre;post = n++; //执行后post为2,n为3pre = ++n; //执行后post为3,n为3第三章结构化程序设计返回1. 为何if语句中的条件总是成立或不成立?在排除可能出现的逻辑错误外,有可能与条件表达式书写不正确有关。
例如:条件语句if (x=3) x=x+8; 这时的条件x=3始终成立,语句x=x+8也总是执行。
要判断x是否等于3就必须写成x = = 3。
又如:条件语句if (x=0) x=x+8; 这时条件x=0总是不成立,语句x=x+8永远不执行。
要判断x是否等于0就必须写成x= =0。
同样,在其它使用条件的语句中也要注意类似问题。
2. 为什么会出现if-else不匹配?这种错误的原因可能比较复杂;总的原则是:(1)有一个else必有一个if,所以首先在数量上要匹配(2)逻辑关系要合理;若执行的是复合语句,不要漏掉复合语句标志{ }。
例如: if (x<y) t=a; a=b; b=t; else t=m; 编译时就会提示出错信息:error C2181: illegal else without matching if;即if-else不匹。
正确的写法:if (x<y) {t=a; a=b; b=t;} else t=m;(3)若条件不成立时要求执行的语句有多条,else后必须为复合语句。
例如:if (x<y) {t=a; a=b; b=t;} else {t=m; m=n; n=t;}3. if-else if语句中多分支问题?(1)多边选择ElseIf子句的关键字Else If之间必须有空格。
(2)在多个条件表达式的表示时,应从最小或最大的条件依次表示,以避免条件的过滤。
例如,已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下:有以下几种表示方式,语法上都没有错,但执行后结果有所不同,请读者分析哪些正确?哪些错误?方法一:if (mark >= 90)cout<< "优";else if (mark >= 80)cout<< "良";else if (mark >= 70)cout <<"中";else if (mark >= 60)cout <<"及格";elsecout <<"不及格";方法二:if (mark < 60)cout "不及格";elseif (mark < 70)cout<< "及格";elseif (mark < 80)cout<< "中";elseif (mark < 90)cout<< "良";elsecout<< "优";方法三:if ( mark >= 60)cout<< "及格";else if (mark >= 70)cout<< "中";else if (mark >= 80)cout<< "良";else if (mark >= 90)cout<< "优";elsecout<< "不及格";上述答案中,方法一、二的执行结果正确,三的执行结果错误。
下面的两个方法中有一个是正确的,请读者分析各自的原因。
方法四:if (mark >= 90)cout<< "优";else if (80 <= mark < 90)cout<< "良";else if (70 <= mark < 80)cout<< "中";else if (60 <= mark < 70)cout<< "及格";elsecout<< "不及格";方法五:if (mark >= 90)cout<< "优";else if (80 <= mark and mark < 90)cout<< "良";else if (70 <= mark and mark < 80)cout<< "中";else if (60 <= mark and mark < 70)cout<< "及格";elsecout<< "不及格";4. 为什么for循环体不运行?若for语句的有关条件设置正确,问题可能出在for语句后加了分号“;”。
例如:sum=0;for (k=0;k<10;k++);sum+=k;设计者有意无意中在for后加了“;”,循环体就变成了空语句分号“;”语句sum+=k;没有参与循环。
同样:while(k<10); 只有空语句分号“;”进行循环。