C语言程序改错总结 下载本文

难度3

1、考查点:符号常量定义,const常量的使用,指针变量的移位操作,程序D10.c的功能是将字符串str2显示在屏幕上。 #include

/*********Found************/

#define START //改为:#define START { /*********Found************/

#define NEXT //改为:#define NEXT }

int main(void) {

char *str2 = \ const int i = 0;

for (printf(\ START

putchar(str2[i]);

/*********Found************/ i++; //改为:str2++ NEXT

return 0;

}

2、考查点:字符数组下标控制,字符串结束标志,条件表达,程序D13.c的功能是从键盘输入最多10个字符(遇换行则停止输入)到数组Buf中,然后在屏幕上显示。 #include

int main(void) {

char c, Buf[11]; int pos;

/*********Found************/

for (pos = 1; pos <= 10; pos++) //改为:0和< {

/*********Found************/

if ((c = getchar() == '\\n') //改为:后面加) {

break; }

Buf[pos] = c;

}

/*********Found************/

___________ //改为:Buf[pos] = ‘\\0’; printf(\

return 0;

}

3、考查点:指针变量的使用,指针作函数参数,函数调用,程序D15.c的功能是调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值。 #include

void swap(int *x, int *y);

int main(void) {

int a = 3, b = 4;

/*********Found************/

swap(*a, *b); //改为: &a, &b /*********Found************/

printf(\ &a, &b); //去掉&

return 0;

}

void swap(int *x, int *y) {

int *tmp, tsX;

/*********Found************/ *tmp = x; //改为: tsX = *x *x = *y;

/*********Found************/ *y = *tmp; //改为: tsX

}

4、考查点:函数定义、字符数组、静态变量的使用、指针作函数参数,函数调用,程序D17.c的功能是函数userLogin的功能主要是统计并返回登录的用户数,用户名最长30字节。

#include

long userLogin(char *userName);

int main(void) {

/*********Found************/

char *userName31; //改为:userName31[31] long curUserCnt = 0;

while (1) {

printf(\ scanf(\

curUserCnt = userLogin(userName31); }

return 0;

}

long userLogin(char *userName) {

/*********Found************/

long userNum = 0; //改为:static long

userNum++;

printf(\ userName, userNum); /*********Found************/ return ; //改为: userNum;

}

5、考查点:函数返回值、字符变量、字符指针变量、字符串结束,程序D19.c的功能是将inBuf中字符串拆分成一个个的单词。 程序说明:

(1)单词之间的分隔符由串divChar,程序中定义为“;?!,.>/\\”。 (2)函数getStrFromBuf的功能是从Buf的开始处寻找第一个单词,将找到的单词作为一个字符串复制到Str处,divStr指明单词间的分隔符。GetStrFromBuf的返回值指向已找到单词的下一个字符。

(3)函数charInStr的功能是判断字符t是否出现在串Str中。 (4)主程序的功能是将inBuf中的所有单词在屏幕上显示出来。 #include

#define Yes 1 #define No 0

char *getStrFromBuf(char *Buf, char *Str, char *divStr); int charInStr(char *Str, char t);

int main(void) {

char inBuf[100] = \ char divChar[] = \

point = inBuf; while (*point) {

/*********Found************/

getStrFromBuf(point, oneWord, divChar); //右边加上:point= if (*oneWord) {

puts(oneWord); } }

return 0;

}

int charInStr(char *Str, char t) {

for (; *Str; Str++) {

/*********Found************/ if (*Str == *t) //改为:t {

/*********Found************/ return No; //改为:Yes } }

/*********Found************/ return Yes; //改为:No

}

char *getStrFromBuf(char *Buf, char *Str, char *divStr) {

for (; *Buf; Buf++) {

if (charInStr(divStr, *Buf) == No) {

break; }

}