资源预览内容
亲,该文档总共3页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C 语言常见错误分析语言常见错误分析1、书写标识符时,忽略了大小写字母的区别、书写标识符时,忽略了大小写字母的区别 C 语言认为大写字母和小写字母是两个不同的字符,如在编译程序过程中,系统会把 a 和 A 看做是两个不同的变量名。习惯上,符号常量名用大写表示,变量名用小写表示,以 增加程序的可读性。 2、忽略了变量的类型,进行了不合法的运算、忽略了变量的类型,进行了不合法的运算main() float a=3.4,b=0.4; printf(“%d”,a%b); %是求余运算符,得到 a/b 的余数。整形变量 a 和 b 可以进行求余运算,而实型变量则不 允许进行“求余”运算。 3、将字符常量与字符串常量混淆、将字符常量与字符串常量混淆char c;c=”a”; 这里就是混淆了字符常量和字符串常量,字符常量是由一对单引号括起来的单个字符,字 符串常量是由一对双引号括起来的字符序列。 4、忽略了、忽略了“=”与与“= =”的区别的区别C 语言中, “=”是赋值运算符, “= =”是关系运算符。例如:if(a= =3) a=b; if(a=3) a=b; 前者是进行比较运算,a 是否和 3 相等;后者表示如果 a 和 3 相等,把 b 的值赋给变量 a。 由于习惯问题,我们往往会犯这样的错误:if(a=3) a=b; 结果 a 总是等于 b 的值,原因是条 件 a=3 是给 a 赋值 3,判断条件非 0,总是执行 a=b。 5、忘记加分号或多加分号、忘记加分号或多加分号考试过程中应特别注意这种情况,分号是 C 语句中不可缺少的一部分,语句末尾必须有 分号,但也不能乱加。例如: #include float fun(int n) main() int n;float s;printf(“nPlease enter N:”); scanf(“%d”,s=fun(n);printf(“the result is : %fn”,s); 这是一个函数调用,在函数首部 float fun(int n)后是没有分号的。 少加或多加分号系统在编译时都会报错。还有一种情况在系统编译时并不会报错,但是程 序的执行顺序被改变了,如: if(a%3= =0) ; i+; 本意是如果 3 整除 a,则 i 加 1,但由于 if(a%3= =0)后多加了分号,即 if 语句后为空语句,程序将无条件执行 i+语句,不论 3 是否整除 a,i 都将自动加 1。 6、输入变量时忘记加地址运算符、输入变量时忘记加地址运算符“scanf(“%d%d”,a,b); 此时,无法正确给 a 和 b 读入数据。scanf 函数的作用是:按照 a、b 在内存中所分配 的地址将 a、b 的值存进去。 “ (2)多加“scanf(“%s”,C 语言编译系统对数组名的处理是:数组名代表该数组的起始地址,scanf 函数中的 输入项是字符数组名,因此不必再加地址运算符“C 语言规定:如果在“格式控制”字符串中,除了格式说明以外还有其他字符,则在输入 数据时应输入相同的字符。下面输入是合法的:3,4 此时若不用逗号而用空格或其他 字符是不对的,如:3 4 (中间为空格) 3:4 中间为冒号 8、输入字符的格式与要求不一致、输入字符的格式与要求不一致在用“%c”格式输入字符时, “空格字符”和“转义字符”都将作为有效字符输入。 例如:scanf(“%c%c%c”, 如输入:a b c 字符a送给了 c1,字符 (空格)送给了 c2,字符b送给了 c3, 因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔。 9、输入输出的数据类型与所用格式说明符不一致、输入输出的数据类型与所用格式说明符不一致例如:a 定义为整型,b 定义为实型。int a=3; float b=4.5;printf(“%f%dn”,a,b); 编译时不给出错信息提示,但运行结果将与意愿不符,这种错误尤其需要注意。 10、输入数据时,企图规定精度、输入数据时,企图规定精度scanf(“%7.2f”, 上述语句是不合法的,输入数据时不能规定精度。 11、switch 语句中漏写语句中漏写 break 语句语句例如:根据考试成绩的等级打印出百分制分数段 switch(grade) case A:printf(“85 100n”);case B:printf(“70 84n”);case C:printf(“60 69n”);case D:printf(“60n”);default:printf(“errorn”); 由于漏写了 break 语句,case 只起标号的作用,而不起判断的作用。因此,当 grade 值为 A 时,printf 函数在执行完第一个 printf 语句后接着执行后面的 printf 函数语句。正确的写 法应在每个分支后加上 break,应改为: switch(grade) case A:printf(“85 100n”);break;case B:printf(“70 84n”); break;、 、/case C:printf(“60 69n”); break;case D:printf(“60n”); break;default:printf(“errorn”); 12、在定义数组时,将定义的、在定义数组时,将定义的“元素个数元素个数”误认为是可使用的最大下标误认为是可使用的最大下标例如:main() static int a10=1,2,3,4,5,6,7,8,9,10;printf(“%d”,a10); C 语言规定:定义时用 a10表示数组 a 中有 10 个元素,其下标由 0 开始,所以数组元 素 a10是不存在的,这种错误称为“越界” 。 13、自加(、自加(+ +) ,自减(,自减(- -)运算符的使用)运算符的使用自加(减)运算符只能与变量相结合,其运算规则为:自加(减)后缀形式是先引用后 加(减)值;自加(减)前缀形式是先加(减)后引用。 14、if 与与 else 的匹配问题的匹配问题在考试过程中若不能准确确定 else 与其前面哪个 if 相匹配时,应遵循一原则:见到 else 后,要与它前面的离它最近的没有配对的那个 if 相匹配。 15、 “/”与与“”的混淆的混淆前者是除号,在进行相除运算时常会把“/”写成“” ,应特别注意。 16、C 语言关键字的拼写语言关键字的拼写如:mainmian(错误) printfpirntf(错误)returnretrun(错误) whileWhile(错误) 17、在做改错题时要注意数字与拼音的区别、在做改错题时要注意数字与拼音的区别字形相似的有:0(零)与 o(字母) ,1(数字)与 l(小写字母 L)等。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号