C语言调试常见错误及修改方法(附习习题)_第1页
C语言调试常见错误及修改方法(附习习题)_第2页
C语言调试常见错误及修改方法(附习习题)_第3页
C语言调试常见错误及修改方法(附习习题)_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.调试C程序时常见的错误类型分析 一般情况下,错误主要分为两大类:一、语法错误。对于这种错误,用编译器很容易解决。所以,改错题的第一步是先编译,解决这类语法错误。下面总结了二级C语言上机改错题中常见的语法错误:(1)丢失分号,或分号误写成逗号。(2)关键字拼写错误,如本来小写变成大写。(3)语句格式错误,例如for语句中多写或者少写分号。(4)表达式声明错误,例如:少了()(5)函数类型说明错误。与main()函数中不一致。(6)函数形参类型声明错误。例如:少*等。(7)运算符书写错误,例如:/写成了。二、逻辑错误,或者叫语义错误,这和实现程序功能紧密相关,一般不能用编译器发现。对于逻辑错误

2、可以按这样的步骤进行查找。(1)先读试题,看清题目的功能要求。(2)通读程序,看懂程序中算法的实现方法。(3)细看程序,发现常见错误点。2.改错题的改错方式总结,当然这些总结只能对大部分改错行有效。 1、若错误行是函数首部,可分为以下几种情况: A、该行最后若有分号则删除,中间若有分号则改成逗号 B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同 C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须

3、与return后变量的类型一致。 2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。 3、若错误行中有if、while、for则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符 B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号 C、for中要用分号分隔表达式,而不是用逗号 4、语法错误 A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。 5、指针变量的运用,若错误行中

4、有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符 6、若错误行为return语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式) 7、若错误行中见到整型1除以某个表达式时,一概改成。但若是整型变量或表达式则只能用强制转换 8、复合运算符写错 9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第11题例外,因为该题是要将数字字符转换成对应的数字。 10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。 11、表达式

5、错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改) 12、若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。 例题/*1.下面给定的程序的功能是:读入一个整数k(2<=k<=10000),打印他所有的质因子(即所有为素数的的质因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。请改正程序中的错误,使程序得到正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1   #include <>2   #include <>3 &

6、#160; IsPrime(int n);4   5     int i,m;6     m=1;7     for(i=2;i<n;i+)8         if!(n%i)9         10        

7、;     m=0;break;11         12         return(m);13     14   main()15   16     int j,k;17     clrscr();18  

8、0;  printf("nPlease enter an integer nunber 2 and 10000:");scanf("%d",&k);19     printf("nnThe Prime factor(s) of %d is (are):",k);20     for(j=2;j<=k;j+)21         if(!(k%j)&

9、;&(IsPrime(j)22             printf("n %4d",j);23         printf("n");24   试题解答及分析错误一:第三行的末尾不需要分号,这并不是一个语句的结束,这是一个函数的头部;错误二:第八行应该该为if(!(n%i),这是由if语句的执行过程决定的,if语句先判断紧跟着

10、它的()里面的条件的真假,如果真执行下面的语句,如果是多条语句可以用括起来如果嫁就跳过直接执行下面的语句但这个if语句中把括号忘了。自然出错;程序整体分析我们的题目要求判断求出一个整数的所有质因子我们可以求出它所有的因子,再看这些因子中哪些是素数不就行了,程序先通过scanf("%d",%k);从键盘读入一个整数,接着我们开始循环,对于2到k之间的每一个j;用!(k%j)判断j是不是k的因子,如果是的话,k%j=0,则非0就是真的,再用一个判断它是不是素数的函数IsPrime(int n)来判断它是不是素数,如果是的话就是我们所求的。IsPrime()函数分析,函数语句的意

11、思是,只要2到n中有任意一个数有能被n整除的话,就返回0(假),否则返回1(真),我们看一下循环体if(!(n%i))这个语句的分析上面有,只要n能把i整除的话m=0,break语句会使程序立刻跳出循环体,执行return (m);语句。*/#include <>#include <>IsPrime(int n)int i,m;     m=1;     for(i=2;i<n;i+)         if

12、(!(n%i)                      m=0;break;                  return(m);        main() 

13、60;         int j,k;     clrscr();     printf("nPlease enter an integer nunber 2 and 10000:");scanf("%d",&k);     printf("nnThe Prime factor(s) of %d is (are):",k); &

14、#160;   for(j=2;j<=k;j+)         if(!(k%j)&&(IsPrime(j)             printf("n %4d",j);         printf("n");改错题集第1题给定程序中

15、函数 fun 的功能是:把在字符串s中出现的每个字符,紧随其后重复出现一次,形成一个新串放在t中,t中字符按原字符串中字符顺序排列。例如:当s中的字符串为:"ABAABBCCDDEE"。则t中的字符串应为:"AABBCCDDEE"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#include/*found*/void fun (char s,char t) /参考答案:void fun (char *s,char *t)/ int i, sl;sl =

16、strlen(s);for (i=0; i t2*i = si;t2*i+1 = si;/*found*/t2*sl = '0' /参考答案:t2*sl = '0'/main() char s100, t100;clrscr();printf("nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %sn", t);第2题给定程序中函数 fun 的功能是:把在字符串s中出现的每个字符,紧随其后重复出现一次,放

17、在一个新串t中,t中字符按原字符串中逆排列。例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为:"EEDDCCBBAA"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#includevoid fun (char *s, char *t) int i, sl;sl = strlen(s);/*found*/for (i=1; i t2*i = ssl-i-1;t2*i +1 = ssl-i-1;/*found*/t2*sl = '0/&#

18、39; /参考答案:t2*sl = '0'/main() char s100, t100;clrscr();printf("nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %sn", t);第3题给定程序中函数 fun 的功能是:将在字符串s中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符的顺序排列。(注意0为偶数)例如:当s中的字符串为:"ABCDE"时,

19、则t中的字符串应为:"AACCEE"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#includevoid fun (char *s, char *t) int i, j, sl;sl = strlen(s);/*found*/for (i=0, j=0; i t2*j = si;t2*j +1 = si;j+;/*found*/t2*sl = '0' /参考答案:t2*j='0'/main() char s100, t100;clrscr(

20、);printf("nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %sn", t);第4题给定程序中函数 fun 的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符的顺序排列。(注意0为偶数)例如:当s中的字符串为:"ABCDEF"时,则t中的字符串应为:"BBDDFF"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改

21、动main函数,不得增行或删行,也不得更改程序的结构!#include#include#includevoid fun (char *s, char *t) int i, j, sl;sl = strlen(s);/*found*/for (i=0, j=0; i t2*j = si;t2*j +1 = si;/*found*/j-; /参考答案:j+/t2*j = '0'main() char s100, t100;clrscr();printf("nPlease enter string s:"); scanf("%s", s);fu

22、n(s, t);printf("The result is: %sn", t);第5题给定程序中函数 fun 的功能是:将在字符串s中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。(注意0为偶数)例如:当s中的字符串为:"ABCDEF"时, 则t中的字符串应为:"EECCAA"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#includevoid fun (char *s, c

23、har *t) int i, j, sl;sl = strlen(s);if(sl%2)sl-; else sl-=2;/*found*/for (i=sl, j=0; i>=0; i-) /参考答案:for (i=sl, j=0; i>=0; i-=2)/ t2*j = si;t2*j +1 = si;j+;/*found*/t2*sl = '0' /参考答案:t2*j = '0'/main() char s100, t100;clrscr();printf("nPlease enter string s:"); scanf(&

24、quot;%s", s);fun(s, t);printf("The result is: %sn", t);第6题给定程序中函数 fun 的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。(注意0为偶数)例如:当s中的字符串为:"ABCDEFG"时,则t中的字符串应为:"FFDDBB"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#include

25、void fun (char *s, char *t) int i, j, sl;sl = strlen(s);/*found*/if(sl%2) Sl-=2; else Sl-; /参考答案:if(sl%2) sl-=2; else sl-;/for (i=sl, j=0; i>=0; i-=2) t2*j = si;t2*j +1 = si;j+;/*found*/t2*sl = '0' /参考答案:t2*j = '0'/main() char s100, t100;clrscr();printf("nPlease enter string

26、s:"); scanf("%s", s);fun(s, t);printf("The result is: %sn", t);第7题给定程序中函数 fun 的功能是:把在字符串s中出现的每个字符,紧随其后重复出现一次,形成一个新串放在t中,且在t中把原相邻字符的位置进行了交换。例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为:"BBAADDCCEE"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includ

27、e#includevoid fun (char *s, char *t)/*found*/int i, j; /参考答案:int i,j,sl;/sl = strlen(s);for (i=0, j=0; i if (i+1 < sl) t2*j = si+1; t2*j +1 = si+1;j+;t2*j = si; t2*j +1 = si;/*found*/j-; /参考答案:j+;/t2*sl = '0'main() char s100, t100;clrscr();printf("nPlease enter string s:"); scan

28、f("%s", s);fun(s, t);printf("The result is: %sn", t);第8题给定程序中函数 fun 的功能是:将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。例如:当s = "AABCDE",t = "BDFG"字符。u中的字符串为"AACE"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#inclu

29、de#include/*found*/void fun (char *s, char *t, char u) /参考答案:void fun (char *s, char *t, char *u) int i, j, sl, tl;sl = strlen(s); tl = strlen(t);for (i=0; i for (j=0; jif (si = tj) break;/*found*/if (j>tl) /参考答案:if (j>=tl)*u+ = si;*u = '0'main() char s100, t100, u100;clrscr();printf(&

30、quot;nPlease enter string s:"); scanf("%s", s);printf("nPlease enter string t:"); scanf("%s", t);fun(s, t, u);printf("the result is: %sn", u);第9题给定程序中函数 fun 的功能是:将未在字符串s中出现而在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。例如:当s = "ABCDE",t = "BDFGG"时,u中的字符串为"FGG"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#includevoid fun (char *s, char *t, char *u) int i, j, sl, tl;sl = strlen(s); tl = strlen(t);/*found*/for (i=0; i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论