对上机考试改错题的做题方法和总结,改错题的错误主要分为以下几类:
1、if或while语句
若错误行是if或者while语句,则要注意以下点:
1)首先判断是否正确书写if或while关键字
2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号
3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符
4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =)
5) 若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号
2、for语句
若错误行是for语句,则要注意以下几点:
1)首先判断for有没有书写正确
2)然后看for中的表达式是不是用分号()隔开,若不是则改为分号。
记住是分号(),不是逗号(,)!
3) 再者,分析for中的三个表达式,是否符合题意
第一个表达式表示起始条件,
第二个表达式表示终止条件,
第三个表达式表示循环变量的变化。
3、return语句
若错误行为return语句,则要注意以下几点:
1)首先看是不是正确书写return关键字
2)然后看是不是缺少分号,若是则加上分号即可
3)再者判断return后的变量或表达式是否正确
这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。
4、赋值语句
若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。
5、定义语句
若错误行是定义语句,则要注意:
1)首先分析变量类型名是否写对
2)然后分析给变量赋初值是否正确
3)若以上均不是,则看是不是少定义了某个变量或少了花括号
6、表达式错误问题:
若错误行中有整数1除以某个表达式或变量时,必须把整数1改为1.0若变量或表达式是整型时,则只能进行强制类型转换。
7、字符串类问题
若错误行中有字符串结束符,则特别要要注意结束符有没有写错。但是要区分清楚字符‘o’和数字’0’。
8、指针类问题
若错误行中有指针变量,并且该变量名之前没有指针运算符,则一般都是加上指针运算符
9、函数首部类问题:
若错误行是函数首部,则要注意:
1)首先看该行最后有没有分号,若有则删掉分号若中间有分号则要改为逗号
2)形参和实参类型不一致问题
①若实参是个地址或数组名或指针变量名,则对应的形参肯定是指针或数组
②若实参是二维数组名,则对应的形参应该是指针数组或是二维数组
③若后面用到某形参的时候有指针运算符,则该形参比为指针类型
④若形参是二维数组或指向M个元素的`指针变量,则该二维的长度必须与main中对于数组的第二维的长度相同。
3)函数类型不一致问题
①若函数中没有return语句,则函数类型为void
②若函数中有return语句,则函数的类型必须与rerun后的变量类型一致
记住,调用函数的类型与main中的该函数的类型一致!
10.语法错误问题:
1)语句缺少分号。若错误号中语句没有以分号结束则加上分号
2)变量名不一致。C语言是区分大小写的,若错误行中有大写字母一般都改为小写字母
11.逻辑错误问题:
这种题型主要是表达式错误,占的题量比较多而且我们没有统一的做题方法,需要我们具体问题具体分析。
12.书写错误问题:
特别注意我们的注释部分,注释是以/*开始,以*/结尾,不能有多余的,有也只能在/*和*/里面。注意,比如“/***注释部分*****/*/”是错误的!
已经添加注释:#include <math.h>
#include <string.h>
#include <stdio.h>
题目:将输入的十进制正整数转换为十六进制数,且用字符串存放该十六进制数
void main()
{
int x,b,i,j
char s[5]
printf("Input a number(Dec): ")
scanf("%d",&x)
/**/ i=1 /**/ i=0 //数组一般从下标为0开始存放数据
while(x>0)
{b=x%16
if(b>9)
s[i]=b-10+'A'
else
/**/ s[i]=b /**/s[i]=b+’0’ //数组中存放的是数字的ASCII码,所以+'0'
x=x/16
i++
}
printf("\nHex number is: ")
for(j=i-1j>=0j--)
putchar(/**/ s[i] /**/) s[j] //循环控制变量是j,从s[i-1]到s[0]输出
getch()
}
能编译,甚至可以运行,你可以看看运行玩所得到的答案是不是和题目给你的答案一样,如果一样,基本就是正确的了。但是,你也不能因为这样就投机取巧,题目给你的答案只是一组数据,如果你投机取巧的话,提交上去的答案会运行4组左右的数据,你一组数据对了是没有用的,需要4组数据都对才有用。当然,这只是我靠二级时候的样子,听说,现在改版,也不知道有什么变化,不过,编译是没有问题的。