C程序复习资料--语法改错
- 格式:doc
- 大小:41.00 KB
- 文档页数:3
C程序中常见错误分析
1.书写标识符时,忽略了大小写的区别
C语言认为大写和小写字母是两个不同的字符,如sum和SUM是不同的标识符。
在C编程时,习惯上,符号常量名用大写表示,变量名用小写表示。
2. 自定义标识符的错误
用户自定义的标识符只能是字母、数字和下划线组成且第一个字符必须是字母或下划线,不能与关键字相同。
如int if 是错误的。
3. 使用未定义的变量或变量使用前未赋值。
如:main()
{
int a,b=3;
printf(“%d,%d,%d”,a,b,c);
}
错误1:变量c未定义,错误2:变量a使用前未赋值
4. 忽略了变量类型,进行了不合法的运算
main()
{float a=3.4,b=0.4;
printf("%d",a%b);
}
%是求余运算, 只有整型变量a 和b 可以进行求余运算, 而实型变量则不允许进行“求余”运算.
5.将字符常量与字符串常量混淆
如char c;
c=”A”;
在这里就混淆了字符常量与字符串常量, 字符常量是由一对单引号括起来的单个字符, 字符串常量是一对双引号括起来的字符序列. C规定以“\0”作字符串结束标志, 它是由系统自动加上的, 所以字符串“a”实际上包含两个字
符: ‘a’和‘\0’, 而把它赋给一个字符变量是不符合语法要求的.
6忽略“=”与“= =”的区别
C语言中,“=”是赋值运算符,“==”是关系运算符。
例如:
if(a= =3) a=b;前者是进行比较a是否和3相等;后者表示,如果a和3相等,则把b赋给变量a.
7. 忘记加分号和多加分号
(1)语句后的分号问题
C语言中每条语句后都应有一分号.
例如:float fa, fb -----后无分号“;”
对于复合语句来说, 最后一个语句后的分号不能忽略不写
例如: { z=x+y;
printf("%f",t); }
但在复合语句的“}”后千万不能再加“; ”, 否则会画蛇添足.
(2)语句未结束加分号
例如: 在 a 大于b 时, 交换a 和b 内的值, 编制程序段如下:
if (a>b);
{ t=a;a=b;b=t;}
则不论 a 和 b 的关系如何, 都会交换 a 和 b 的值. 因为if (a>b)后出现了分号则认为if语句已经结束, 交换语句不受if条件的控制在什么情况下都会执行. 这种错误在以下几种语句中也经常出现:
while (… )
for (…; …; …)
switch (…)
在上面几个语句中括号后一般不应出现分号( 空语句除外) .
8.输入变量时忘记加地址运算符“&”,而在不应加时加了:“&”
(1).忘记加“&”
int a,b; scanf(“%d%d”,a,b);应该为:scanf(“%d%d”,&a,&b);
(2).多加“&”
int str[10]; scanf("%s",&str);应该为:scanf("%s",str);
C语言编译系统对数组名的处理是: 数组名代表该数组的起始地址. 在scanf函数中的输入项是字符数组名, 已经表示了数组的首地址, 不必再加地址符“&”.
9.输入数据的格式与要求格式不符
例如scanf(“%d%d”,&a,&b);
正确的输入数据方法为在两个数据间用空格、TAB键、回车键分隔, 若用其他符号分隔则数据不能正确读入变量中. 如果在引号中除格式说明符外出现了其他的字符或符号, 则必须原样输入, 否则数据也不能正确存入变量中.
例如: scanf( “a=%d,b=%d”,&a,&b); 正确的数据输入方法为: a=3,b=4
10.输入字符的格式与要求一致
在用“%c”格式输入字符时,“空格字符”和“转义字符”都将作为有效字符输入。
例如:scanf("%c%c%c",&c1,&c2,&c3);若想输入abc 则应输入abc而不应用空格隔开
a b c.
11.输入输出的数据类型与所用格式说明符不一致
例如:int a=3;float b=4.5;
printf("%f%d\n",a,b);————编译时不给出错误信息,但运行结果将与原意不符,这种错误犹要注意。
12.输入数据时,企图规定精度
scanf("%7.2f",&a);————不合法,输入数据不能规定精度。
13. 定义数组时误用变量
例如: int n;
scanf( “%d” ,&n);
数组名后用方括号括起来的是常量表达式, 可以包括常量和符号常量. 在无法确定数组的实际长度时, 定义成可能的最大长度, 但绝不允许对数组的大小作动态定义.
14. 使用数组越界
在定义数组时, 将定义的“元素个数”误认为是可使的最大下标值. 这样就会产生数组越界现象.
例如: static int a[10]={ 1,2,3,4,5,6,7,8,9,10} ;
printf( “%d” ,a[10]);
C语言规定: 定义时用a [10], 表示 a 数组有10 个元素. 其下标值由0 开始到9 结束。
15. 整型和实型的“/”运算区别
例如: float a;
a=1/2;
printf( “%f” ,a);
运行的结果是0.000000,而不是0.500000. 因为“/”号两边的数字是 1 和2,系统会当作整型处理, 因此出现这种情况, 解决办法是改为: a=1.0/2 或a=1/2.0 或 1.0/2.0. 16. 数学表达式a>b>c 在 C 语言中的写法
例如: int a=5,b=4,c=3,d; 若想在数学表达式a>b>c成立时例d=1,否则d=0. 编制的程序段如下:
if (a>b>c) d=1;
else d=0;
则不论a、b 的值为什么, 只要 c 大于1, d 的值都为0.因为C 语法在判断条件时先判断a>b 的真假, 若为真则a>b 的值为 1 , 否则为0. 然后再判断1>c 或0>c, 只要c是大于1 的数, 这两个表达式就为假, 所以执行else 后的
语句d=0. 此例正确的语句应为: if(a>b&&b>c) ….
17.注意int类型数据的取值范围
int a=40000; int类型的取值范围为:-32768~32767
18. 注意圆括号(双引号)使用不配对。
19. 对复合语句忘记加花括号{}
如:int i=1,sum=0;
while(i<=10)
sum=sum+i;
i++;
应为:int i=1,sum=0;
while(i<=10)
{ sum=sum+i;
i++; }。