c语言错误调试语言Word格式文档下载.docx
- 文档编号:15746635
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:12
- 大小:24.84KB
c语言错误调试语言Word格式文档下载.docx
《c语言错误调试语言Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言错误调试语言Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。
如在BASIC程序中
可以写if(a=3)then…但C语言中,“=”是赋值运算符,“==”是关系运算符。
如:
if(a==3)a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。
由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。
改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{z=x+y;
t=z/100;
%f"
t);
}对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
又如:
if(a%3==0);
I++;
本是如果3整除a,则I加1。
但由于if(a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for(I=0;
I<
5;
I++);
{scanf("
&
x);
x);
}本意是先后输入5个数,每输入一个数后再将它输出。
由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“&
”。
inta,b;
scanf("
%d%d"
a,b);
这是不合法的。
Scanf函数的作用是:
按照a、b在内存的地址将a、b的值存进去。
“&
a”指a在内存中的地址。
8.输入数据的方式与要求不符。
①scanf("
a,&
b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf("
%d,%d"
C规定:
如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。
下面输入是合法的:
3,4此时不用逗号而用空格或其它字符是不对的。
343:
4又如:
a=%d,b=%d"
输入应如以下形式:
a=3,b=4
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
%c%c%c"
c1,&
c2,&
c3);
如输入abc字符“a”送给c1,字符“”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型a=3;
b=4.5;
%f%d\n"
编译时不给出出错信息,但运行结果将与原意不符。
这种错误尤其需要注意。
11.输入数据时,企图规定精度。
%7.2f"
a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:
根据考试成绩的等级打印出百分制数段。
switch(grade){case'
A'
:
85~100\n"
);
case'
B'
70~84\n"
C'
60~69\n"
D'
<
60\n"
default:
error\n"
由于漏写了break语句,case只起标号的作用,而不起判断作用。
因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。
正确写法应在每个分支后再加上“break;
例如case'
break;
13.忽视了while和do-while语句在细节上的区别。
(1)main(){inta=0,I;
I);
while(I<
=10){a=a+I;
}printf("
a);
}
(2)main(){inta=0,I;
do{a=a+I;
}while(I<
=10);
}可以看到,当输入I的值小于或等于10时,二者得到的结果相同。
而当I>
10时,二者结果就不同了。
因为while循环是先判断后执行,而do-while循环是先执行后判断。
对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。
14.定义数组时误用变量。
intn;
n);
inta[n];
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。
即C不允许对数组的大小作动态定义。
15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。
main(){staticinta[10]={1,2,3,4,5,6,7,8,9,10};
a[10]);
}C语言规定:
定义时用a[10],表示a数组有10个元素。
其下标值由0开始,所以数组元素a[10]是不存在的。
16.初始化数组时,未使用静态存储。
inta[3]={0,1,2};
这样初始化数组是不对的。
C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。
应改为:
staticinta[3]={0,1,2};
17.在不应加地址运算符&
的位置加了地址运算符。
%s"
str);
C语言编译系统对数组名的处理是:
数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&
。
str);
18.同时定义了形参和函数中的局部变量。
intmax(x,y)intx,y,z;
{z=x>
y?
x:
y;
return(z);
}形参应该在函数体外定义,而局部变量应该在函数体内定义。
intmax(x,y)intx,y;
{intz;
z=x>
}
2
C语言常见错误及解决方法
(注:
红色粗体是常见的错误,请大家检查自己的程序,并注意尽量不要犯这些常见的错误。
其余它体是避免错误的方法和正确的写法)
一、基础知识和数据类型、表达式
1、{},[],(),‘’,“”不配对。
解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。
2、忘记在语句的末尾加分号,或在预处理命令后多加分号。
记住:
每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。
3、混淆/和\;
注释对应的符号是/**/,而转义字符是以\开头,除号是/。
4、printf()和scanf()的参数设置有误,主要表现在以下几方面:
●类型不匹配的问题。
(例如:
有floata=3.5,但输出的时候printf(“a=%d”,a);
则屏幕上会显示出a=0.00000或者提示其它运行错误)。
基本原则是:
float对应%f,int对应%d,char对应%c。
●个数不匹配。
无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,表示输出格式。
剩下的n-1个是输出的变量或者输入的变量的地址。
需要注意的是,如果后边有n-1个参数,那么前边一定对应n-1个%f一类的格式说明符。
●scanf()中变量前忘了加&。
scanf()中变量前要有&(但后边学到的字符数组名和指针前不用加)
5、定义标识符的时候经常出现使用非法字符的情况,例如:
标识符中不能用空格,也就是说不能有这样的定义:
intradiumofcircle;
一般情况下可用下划线将三个单词连接在一起。
6、在使用变量前未定义,或未初始化。
若下边的sum未定义,则在编译时会提示相应的错误信息,而若未初始化为0,则求和的结果一定是错误的。
voidmain()
{intI,a[10],sum=0;
/*只要下边要用,这个定义就必须要有,一般情况下也要有初始值*/
for(I=0;
10;
I++)sum+=a[I];
printf(“%d”,sum);
}
7、计算错误。
主要注意:
++,――和其它运算符一起运算时,除根据优先级进行计算时,还要考虑先后位置的特殊含义;
数据类型不一致时发生的自动转换也会导致计算的误差;
还要注意求模结果的符号与被除数相同;
某些特殊情况下 使用懒惰求值法。
8、不能除以0,要做合法性检查;
9、类型溢出。
记住每种数据类型的取值范围,确保数据在所定义类型范围之内;
10、数学表达式的格式有误。
常见的有:
(1)数学与C语言运算表达式的混淆(例如:
=表示赋值,而==才表示我们数学中的相等关系)。
(2)、忽略了运算的优先级。
解决这个问题的最好方法就是写数学表达式时不要从左到右,而是按优先级的顺序写,写完优先级高的一个表达式后加上()再写下一级的表达式,例如:
计算梯形的面积时,要s=((a+b)*h)/2,不要1/2*a+b*h.(3)忽略了计算和赋值时的自动转换。
floathalf=1/2;
这样,因为=右边是整数相除的结果为整数0,不会得到0.5存入half,进而会影响下边的计算结果。
要想不在这儿绊跟头,当计算不同类型的数据时,一定注意会不会出现引起错误的自动转换,建议最好加上强制转换。
(4)赋值号左边不是变量,例如:
若有#definePI3.14,程序中又出现PI=3.14159。
又例如:
f(n)=f(n-1)*n(这是典型的数学语言,在C语言中右边的乘积不能正确存储,而左边又是一个函数调用)。
11、使用库函数前忘了加#include<
?
.h>
二、流程控制
1、丢掉语句结束标记“;
”,尤其是for语句中表达式后或do-while语句后的分号,或在预处理命令后边、while()后、for()后加“;
”;
2、If语句或循环语句中逻辑表达式或关系表达式书写错误。
一定要注意C语言的条件与数学表达式的区别(例如我们数学中经常写到的0≤x≤9,在C语言中应该写成x>
=0&
&
x<
=9)。
3、if-else嵌套时不配对。
最好在写每个条件时要用两个{}分别将两个分支先括起来,再添加其中的语句,以保证其配对不易错。
4、switch()语句中的格式不正确。
()中的表达式结果一定是一些明确的值,不能是区间;
表达式的所有可能结果要列在case后边,case与常量之间有一空格,不要丢掉必要的break;
5、随意修改循环控制变量i的值,导致循环次数的改变,尤其是当循环有嵌套时。
在循环体中,不要将循环控制变量进行另外的改变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 错误 调试
![提示](https://static.bdocx.com/images/bang_tan.gif)