C语言使用中常见错误解析


C语言使用中常见错误解析

 

【正文】:

C语言是通用的计算机程序设计语言。许多职业学校,在高职学生和中职学生中都开设了《C语言程序设计》课程。该语言具有数据类型多样、函数丰富、运算灵活、生成目标程序效率高、应用面广、可移植性好等优点而受到广泛的欢迎,但是由于书写比较灵活,语法限制不严,故对于部分学生尤其是初学者来说,容易出错依据本人的实际教学经验,现对学生容易出现的一些问题,进行了归纳总结,希望能给初学者带来一定启发和帮助。

1、 系统设置错误

如果反复检查程序本身没有错误,但在编译时出现错误信息“Unable to open input file ‘COS.OBJ’”或是“Unable to open include file ‘stdio.h’”。这说明连接目录错误。

改正方法:在菜单“Option”“Directories”需重新设置“Includedirectories”“Librarydirecto-ries”“Turbocdirectories”,如果TC安装在D:\TC目录下,那么以上三项分别应设置为“D:\TC\INCLUDE”“D:\TC\LIB”“D:\TC\TC”,然后使用菜单“Option”→“Saveoptions”保存当前的设置。这种错误常发生在TC不是安装在C盘的根目录下,因为系统默认是C盘的设置。

2、输入函数scanf中忘加“&

scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。这是C语言与其他高级语言不同之处,许多初学者常在此出错。

例如:从键盘上输入ab两个整数,则scanf(“%d%d”,ab);是不对的,应将“ab”改为“&a&b”。

3、 忘写分号或花括号

C语言规定,C程序的函数体由花括号“{}”括起,而且花括号必须成对出现。分号“;”则是语句结束的标志。

如:main 

{int  ab

    a=34

    b=a+1

printf(“%d%d”,ab);}

但要注意的是在“}”之后的分号,如一个类型的定义之后必须使用分号,包括结构体、联合体和枚举。如:structst{intx*y}

4、 大小写错误

C语言规定,所有的关键字必须小写,而标识符中的字母则既可以大写,也可以小写,标识符不能与关键字相同,并区分大小写字母。

例如:else是关键字,不能作为标识符使用,而ELSE可以作为标识符使用。

还有要注意的就是,在书写变量标识符的时候不要忽略大小写的区别以及英文字目“o”和数字“0”的区别。

例如:int  a=3

a=A+5

5、 混淆“=”与“==”的区别

C语言中“=”是赋值运算符,而“==”是关系运算符,比较两个数据是否相等,并且“==”的优先级要高于“=”。

例如:main(  )

{int   x=1y=2

printf(%d\n”,x=y==x+1)}

分析:按照优先级的顺序,我们先做y==x+1,比较y的值与x+1的值是否相等,结果发现y的值为2x+1的值也为2,故两者相等,所以y==x+1为真,值为1,最后将数值1赋给变量x。因而输出结果为:1

6、 混淆字符常量和字符串常量的区别

C语言中,字符常量是由一对单引号括起来的单个字符,而字符串常量则是由一对双引号括起来的字符序列,并且以“\0”作为结束标志。

7、 符号数与无符号数的相互转换

C语言类型转换,有时会遇上将有符号的数据转换成无符号的数据。期间我们首先要弄清数据在计算机中是如何存储的。数据在机器中的存储是以二进制补码形式存储,正数的符号“+”用二进制数“0表示,而负数的符号“-”用“1来表示。正数的原码补码相同,但是负数的补码是其原码的二进制位取反加1

例如:若int类型占两个字节,则执行以下语句输出的结果是:___

int  k=-1

printf“%d,%u\n”,k,k);

分析:本题是将“-1”以两种形式输出来,第一种是普通的有符号“%d”形式,输出的结果是本身-1,第二种是以无符号“%u”的形式输出,就应该将1的二进制码取反加1,最后再换算成十进制形式。在计算的过程中一共有16位二进制数转换成十进制,很容易出现错误。这里总结出一个很简单的公式,计算起来特别方便。对于有符号和无符号数的相互转换归纳如下:有符号数d转化成无符号数uu=d+65536,而无符号数u转换成有符号数dd=u-65536。故本题中-1转换成无符号数应该是65535

8、多个格式描述字符“%”的连续使用

C语言中“%”作为格式描述字符用在输入输出语句中,如果我们将多个“%”一起使用则会出现什么样的结果?

例如:#include<stdio.h>

main()

   { int a=2,b=3

     printf(“a=%%d,b=%%d\n”,a,b)

     printf(“a=%%%d,b=%%%d\n”,a,b)

    }

分析:本题中的第一个输出语句中使用的是两个“%”,而在C语言中两个连续%在一起则不作为格式描述符号使用,而是作为一个“%”字符输出,后面的d作为非格式字符原样输出。所以第一个输出语句结果是:a=%d,b=%d

对于第二个输出语句中一共有3个“%”,那么在使用的时候同样也是将前面的两个连续的“%”作为一个字符“%”输出,而后面剩下的“%d”又作为格式描述字符处理,所以最后的输出结果是:a=%2,b=%5。举一反三,当有456或多个“%”的时候,也同样如此。

 

以上这些知识点只是C语言的一部分,要想学好这门课程,我们不仅要在学习过程中善于总结经验,善于发现问题,还需要多上机调试,仔细进行推敲琢磨。只有这样才能真正掌握C语言这门课程。