当前位置:文档之家› C语言调试常见错误及修改方法(附习题)

C语言调试常见错误及修改方法(附习题)


20 for(j=2;j<=k;j++)
21 if((!(k%j))&&(IsPrime(j)))
22
printf("\n %4d",j);
23 printf("\n");
24 }
试题解答及分析
错误一:第三行的末尾不需要分号,这并不是一个语句的结束,这是一个函数的头部;
错误二:第八行应该该为 if(!(n%i)),这是由 if 语句的执行过程决定的,if 语句先判断紧跟着
m=1; for(i=2;i<n;i++)
if(!(n%i)) {
m=0;break; } return(m); } main() { int j,k; clrscr(); printf("\nPlease enter an integer nunber 2 and 10000:");scanf("%d",&k); printf("\n\nThe Prime factor(s) of %d is (are):",k);
for(j=2;j<=k;j++) if((!(k%j))&&(IsPrime(j))) printf("\n %4d",j); printf("\n");
}
改错题集
第1题 给定程序 MODI1.C 中函数 fun 的功能是:把在字符串 s 中出现的每个字符,紧随其后重复 出现一次,形成一个新串放在 t 中,t 中字符按原字符串中字符顺序排列。
返回 0(假),否则返回 1(真),我们看一下循环体 if(!(n%i))这个语句的分析上面有,只
要 n 能把 i 整除的话 m=0,break 语句会使程序立刻跳出循环体,执行 return (m);语句。*/
#include <conio.h> #include <stdio.h> IsPrime(int n) { int i,m;
11、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修 改)
12、若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。
例题
/*1.下面给定的程序的功能是:读入一个整数 k(2<=k<=10000),打印他所有的 质因子(即所有为素数的的质因子)。例如,若输入整数 2310,则应输出:2、3、 5、7、11。 请改正程序中的错误,使程序得到正确的结果。
t[2*sl] = '0'; /参考答案:t[2*sl] = '\0';/
} main()
{ char s[100], t[100];
clrscr();
printf("\nPlease enter string s:"); scanf("%s", s);
fun(s, t);
printf("The result is: %s\n", t);
4、语法错误 A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。
5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是 加上指针运算符
6、若错误行为 return 语句,则首先看是否是缺少分号若是则加上分号即可;否则就是 return 后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)
它的()里面的条件的真假,如果真执行下面的语句,如果是多条语句可以用{}括起来如果
嫁就跳过直接执行下面的语句但这个 if 语句中把括号忘了。自然出错;
程序整体分析
我们的题目要求判断求出一个整数的所有质因子我们可以求出它所有的因子,再看这些因子
中哪些是素数不就行了,程序先通过 scanf("%d",%k);从键盘读入一个整数,接着我们开始循
main() { char s[100], t[100]; clrscr(); printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); }
第4题 给定程序 MODI1.C 中函数 fun 的功能是:将在字符串 s 中下标为奇数位置上的字符,紧随 其后重复出现一次,放在一个新串 t 中,t 中字符按原字符串中字符的顺序排列。(注意 0 为偶数) 例如:当 s 中的字符串为:"ABCDEF"时, 则 t 中的字符串应为:"BBDDFF"。 请改正函数 fun 中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行 或删行,也不得更改程序的结构! Modi1.c #include #include #include
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include <conio.h>
2 #include <stdio.h>
3 IsPrime(int n);
4{
5 int i,m;
6 m=1;
7 for(i=2;i<n;i++)
8 if!(n%i)
9{
10
m=0;break;
void fun (char s,char t) /参考答案:void fun (char *s,char *t)/
{ int i, sl; sl = strlen(s); for (i=0; i { t[2*i] = s[i]; t[2*i+1] = s[i]; }
/************found************/
例如:当 s 中的字符串为:"ABAABBCCDDEE"。
则 t 中的字符串应为:"AABBCCDDEE"。
请改正函数 fun 中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行 或删行,也不得更改程序的结构! Modi1.c #include #include #include /************found************/
main() { char s[100], t[100]; clrscr(); printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); } 第3题 给定程序 MODI1.C 中函数 fun 的功能是:将在字符串 s 中下标为偶数位置上的字符,紧随 其后重复出现一次,放在一个新串 t 中,t 中字符按原字符串中字符的顺序排列。(注意 0 为偶数) 例如:当 s 中的字符串为:"ABCDE"时, 则 t 中的字符串应为:"AACCEE"。 请改正函数 fun 中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行
} 第2题 给定程序 MODI1.C 中函数 fun 的功能是:把在字符串 s 中出现的每个字符,紧随其后重复 出现一次,放在一个新串 t 中,t 中字符按原字符串中逆排列。 例如:当 s 中的字符串为:"ABCDE"时, 则 t 中的字符串应为:"EEDDCCBBAA"。 请改正函数 fun 中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行 或删行,也不得更改程序的结构! Modi1.c #include #include #include void fun (char *s, char *t) { int i, sl; sl = strlen(s); /************found************/ for (i=1; i { t[2*i] = s[sl-i-1]; t[2*i +1] = s[sl-i-1]; } /************found************/ t[2*sl] = '0/'; /参考答案:t[2*sl] = '\0';/ }
或删行,也不得更改程序的结构! Modi1.c #include #include #include void fun (char *s, char *t) { int i, j, sl; sl = strlen(s); /************found************/ for (i=0, j=0; i { t[2*j] = s[i]; t[2*j +1] = s[i]; j++; } /************found************/ t[2*sl] = '\0'; /参考答案:t[2*j]='\0';/ }
2、若错误行是 if 或 while 语句,则首先看有没有用小括号将整个表达式括起,若没有则加 上小括号。
3、若错误行中有 if、while、for 则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符 B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进 行逆转或加一个等于号 C、for 中要用分号分隔表达式,而不是用逗号
7、若错误行中见到整型 1 除以某个表达式时,一概改成 1.0。但若是整型变量或表达式则只 能用强制转换
8、复合运算符写错
9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第 11 题例外,因为 该题是要将数字字符转换成对应的数字。
相关主题