C语言程序编写中常见错误的分析
摘 要:C语言是高校学生的必修课程,也是计算机专业学生入学后要修的第一门基础课程,学生在C语言的编程实践中经常会出现一些错误,对于初学者来说要查找这些错误比较困难。本文通过一些实例对C语言编程过程中经常出现的一些错误简单地列举和分析,并依据C语言上机操作的语法格式和编程规则对错误进行说明和纠正。有助于学生在学习过程中识别和避免,并能提高学习效率,更好地打好编程的基础。
关键词:C语言;编译;调试;格式错误;逻辑错误
C语言作为计算机类专业的一门基础性学科,以其功能丰富、表达能力强、使用方便灵活、应用面广、目标程序效率高等特点被广泛的认同和应用,并已经成为大多数高校开设的第一门高级程序设计语言课程。由于绝大多数学生没有编程的经历,加之C语言在编译程序时对语法限制不太严格,编写程序的自由度较大,所以很多学生在不经意间就会出现错误,发现程序不能执行时也找不到错误出现的位置,经常对着屏幕束手无策。那么以下就分析几类常见的错误类型和原因,并介绍一下解决的方法。
语法书写格式错误
这是刚刚接触C语言的学生经常犯的一个错误,由于对书写的格式和编程的规则不是特别熟悉和细心,所以经常会出现这样的错误。
1.书写主函数的错误
main
{
printf(“Hello World!”);
}
此程序在编译时会提示:Declaration syntax error。出现这个提示说明在源文件中,可能丢失了某些符号或者输入了多余的符号。此程序就是丢失了main函数后面的“()”。主函数的正确写法是main()。
2. 语句后面漏写分号的错误
main()
{
int a=10
printf(“%d”,a);
}
此程序在编译的时候会提示:Statement missing ; in function main。错误出现在语句“int a=10”的后面少了一个“;”。在C语言中“;”是语句的间隔符,因为在C语言中语句书写比较自由,可以一个语句占多行,也可以一行写多个语句。而C语言的编译系统就是以“;”来判定当前的语句是否已经结束,所以一旦分号漏写,系统在编译时就无法完成相应的操作。
3. 语句循环无法终止的错误
main()
{
int sum=0,i=1;
while (i<=10)
sum=sum+i;
}
此程序在编译运行时无法终止,因为在这个程序中没有更新循环控制变量i,而使这个循环得不到终止的命令而造成了死循环。在C语言中循环正常退出有五种方式,除了当循环条件不满足的时候结束循环体外还有利用C语言中的break、continue、exit、return语句来结束循环。这四种方式又有所区别:break表示完全退出循环;continue表示退出本次循环,继续下次循环;exit表示退出整个程序;return表示在子函数中退出函数体,在main函数中退出整个程序。所以,应该在循环体内再加一个语句:“i=i+1;”。
编程中常见的逻辑错误
1. 输入输出数据的类型与所用格式说明符不一致
main()
{
int x;float y;
scanf(“%f,%d”,&x,&y);
printf(“%f %dn”,x,y);
}
此段程序中x定义为整型,y定义为实型,而在输入输出x,y时用的格式说明符为%f,%d,这显然与定义不符,程序运行时并不提示语法错误,但是不能得出正确的结果。因此,输入、输出函数语句分别应改为:“scanf(“%d,%f”,&x,&y);printf(“%d %fn”,x,y);”
2. 定义数组时误用变量的错误
程序段: int x;
scanf(“%d”,&x);
int b[x];
在C语言中数组名后用中括号括起来的是常量表达式,可以包括常量和符号常量,但是不能包含变量,也就是说本程序段中的数组定义有错误,C语言不允许对数组的大小做动态定义。所以只要将本程序段中数组定义语句内的x定义为一个常量即可,具体的数字大小可根据程序的情况而定,例如:“int b[10]”。
3. 函数参数定义的位置错误
程序段: int f(a,b) /* 定义了函数f() */
{
int a,b,c;
if(a>b) c=1;
else if(a==b) c=0;
else c=2;
return(c);
}
在此程序中形参变量a,b的定义错误,因为在C语言中,形参应该定义在函数体,而局部变量定义在函数体内。所以应该改为:“int f(int a,int b)”。
4. 引用指针变量时的错误
main()
{
int i=1;
int *p;
*p=i;
printf(“%d”,*p);
}
指针变量必须先赋值再使用,此程序只定义了一个指针变量p,但他们并未指向任何一个整型变量,所以程序在编译的时候指针变量p所指向的是一个随机的值,而不是源程序中定义的数字1。应该改为:
int i=1,k;
int *p;
p=&k;*p=i;
以上通过一些在实际编程中的例子,列举了C语言学习者经常犯得一些语法错误和逻辑错误,并根据C语言的语法格式和编程规则对出现错误的原因进行了分析,同时给出了纠正的方法。那么我们在实践的过程中所碰到的问题应该远不止这些,其余更多的问题我们要通过系统的编译提示对程序中的一些语法错误进行修改。所谓熟能生巧,只要我们多做多练,自然解决这样的问题也会越来越熟练。