c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)

《C语言调试常见错误及修改方法(附习题)》由会员分享,可在线阅读,更多相关《C语言调试常见错误及修改方法(附习题)(12页珍藏版)》请在人人文库网上搜索。

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除以某个表达式时,一概改成1.0。但若是整型变量或表达式则只能用强制转换 8、复合运算符写错 9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第11题例外,因为该题是要将数字字符转换成对应的数字。 10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。 11、。

5、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改) 12、若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。 例题/*1.下面给定的程序的功能是:读入一个整数k(22 #include 3 IsPrime(int n);4 5 int i,m;6 m=1;7 for(i=2;i#include IsPrime(int n)int i,m;m=1;for(i=2;i=0; i-) /参考答案:for (i=sl, j=0; i=0; i-=2)/ t2*j = si;t2*j +1 = si;j+;/*found*/t2*sl = 0; /参考答案:t。

6、2*j = 0;/main() char s100, t100;clrscr();printf(nPlease enter string s:); scanf(%s, s);fun(s, t);printf(The result is: %sn, t);第6题给定程序MODI1.C中函数 fun 的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。(注意0为偶数)例如:当s中的字符串为:ABCDEFG时,则t中的字符串应为:FFDDBB。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增。

7、行或删行,也不得更改程序的结构!Modi1.c#include#include#includevoid 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(nP。

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

9、ar *s, char *t)/*found*/int i, j; /参考答案:int i,j,sl;/sl = strlen(s);for (i=0, j=0; i if (i+1 tl) /参考答案:if (j=tl)*u+ = si;*u = 0;main() char s100, t100, u100;clrscr();printf(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);。

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

11、ound*/for (i=0; i/*found*/ for (j=0; jif (ti = sj) break;if (j=sl) *u+ = ti;/*found*/u = 0; /参考答案 *u = 0;main() char s100, t100, u100;clrscr();printf(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);第10题给定程序MODI1.C中函数 fun。

12、 的功能是:将既在字符串s中出现又在字符串t中出现的字符构成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。例如:当s=ABBCDE,t=BDFG时,u中的字符串为:BBD。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!Modi1.c#include#include#includevoid 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*u+ = si;/*found*/*u = 0; /参考答案*u = 0;main() char s100, t100, u100;clrscr();printf(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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值