如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。C编译程序对语法的检查不如其他高级语言那样严格。因此,往往要由程序设计者自己设法保证程序的正确性。调试一个C程序要比调试一个其它程序更困难一些。需要不断积累经验,提高程序设计和调试程序的水平。C语言有些语法规定和其他高级语言不同,学习过其他高级语言的读者往往按照使用其他高级语言的习惯来写C程序,这也是出错的一个原因。1、忘记定义变量:main(){x=3;y=6;printf("%d\n",x+y);}2、I/O数据的类型与格式说明符不一致。例如,若a已定义为整型,b已定义为实型。a=3;b=4.5;printf("%f,%d\n",a,b);编译时不给出出错信息,但运行结果将与原意不符,输出为:0.000000,16402它们并不是按照赋值的规则进行转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出)。3、未注意int型数据的数值范围。一般的C编译系统对一个整型数据分配两个字节。因此一个整数的范围为:-215~215-1,即-32768~32767。常见这样程序段:intnum;num=89101;printf("%d",num);得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。见图1。即将超过低16位的数截去。即将89101减去216(即16位二进制所形成的模)。89101-65536=23565。图1有时还会出现负数。例如num=196607;输出得-1。因为196607的二进制形式为00000000000000101111111111111111去掉高位10,低16位的值是-1(-1的补码是:1111111111111111)。对于超过整个范围的数,要用long型,即:longintnum;num=89101;printf("%ld",num);请注意,如果只定义num为long型,而在输出时仍用“%d”说明符,仍会出现以上错误。4、输入变量时忘记使用地址符。如:scanf("%d%d",a,b);应写成scanf("%d%d",&a,&b);5、输入时数据的组织与要求不符。scanf("%d%d",&a,&b);有人按下面的方法输入数据:3,4这是错的。应该用以下方法输入:34如果scanf函数为scanf("%d,%d",&a,&b);对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入。因此,应按以下方法输入:3,4还应注意,不能企图用scanf("inputa&b:%d,%d",&a,&b);想在屏幕上显示一行信息:inputa&b:然后在其后输入a和b的值,这是不行的。如果想在屏幕上得到所需的提示信息,可以另加一个printf函数语句:printf("inputa&b:");scanf("%d,%d",&a,&b);6、误把“=”作为“等于”比较符。在C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成:if(a=b)printf("aequaltob");C编译系统将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否零,若为非零,则作为“真”;若为零作为假。如果a的值为3,b的值为4,a≠b,按原意不应输出“aequaltob”。而现在先将b的值赋给a,a也为4,赋值表达式的值为4。if语句中的表达式值为真(非零),因此输出“aequaltob”。这种错误在编译时是检查不出来的,但运行结果往往是错的。7、语句后面漏分号。没有分号不是语句。a=3b=4编译时,编译程序在“a=3”后面未发现分号,就把下一行“b=4”也作为上一行的语句的一部分,这就出现语法错误。如复合语句,往往漏写最后一个语句的分号,如:{t=a;a=b;b=t}8、在不该加分号的地方加了分号。例如:if(a>b);printf("aislargerthanb\n");本意为当a>b时输出“aislargerthanb”的信息。但由于在if(a>b)后加了分号,因此if语句到此结束。即当(a>b)为真时,执行一个空语句。本来想a≤b时不输出上述信息,但现在printf函数语句并不从属于if语句,而是与if语句平行的语句。不论a>b还是a≤b,都输出“aislargerthanb”。又如:for(i=0;i<10;i++);{scanf("%d",&x);printf("%d\n",x*x);}本意为