C程序上机改错题60道Word文件下载.docx

上传人:b****7 文档编号:22915948 上传时间:2023-02-06 格式:DOCX 页数:107 大小:55.10KB
下载 相关 举报
C程序上机改错题60道Word文件下载.docx_第1页
第1页 / 共107页
C程序上机改错题60道Word文件下载.docx_第2页
第2页 / 共107页
C程序上机改错题60道Word文件下载.docx_第3页
第3页 / 共107页
C程序上机改错题60道Word文件下载.docx_第4页
第4页 / 共107页
C程序上机改错题60道Word文件下载.docx_第5页
第5页 / 共107页
点击查看更多>>
下载资源
资源描述

C程序上机改错题60道Word文件下载.docx

《C程序上机改错题60道Word文件下载.docx》由会员分享,可在线阅读,更多相关《C程序上机改错题60道Word文件下载.docx(107页珍藏版)》请在冰豆网上搜索。

C程序上机改错题60道Word文件下载.docx

gc02.out"

w"

for(i=0;

i<

10;

i++){

fscanf(rf,"

%d,"

&

k);

fprintf(wf,"

}

fclose(rf);

fclose(wf);

试题解析:

在给定的程序中有二个标识行,因此本题共有二个错误。

本题要求考生根据题目要求和程序,找出错误行所在位置并修改。

错误点1:

第一个错误标识下一行。

错误点说明:

C语言中,If语句后的逻辑表达式需要用括号括起来,而本题的语句:

不符合该要求。

即该语句应改为:

“if(k>

0)”;

参考答案:

if(k>

0)

错误点2:

第二个错误标识下一行。

题目要求计算k!

,在程序的fun函数中,使用递归的算法来求k!

,并利用if块语句来判断k的值,当k为0时,则递归计算结束。

因此函数的语句:

elseif(k=0)

是判断当k的值等于0就结束递归;

在C语言中,“=”表示赋值运算,要判断两变量是否相等,应该用“==”运算符,因此该语句应改为“elseif(k==0)”;

elseif(k==0)或其他等效语句

2.

给定程序MODI1.C中fun函数的功能是:

将p所指字符串中每个单词的最后一个字母改成大写。

(这里的“单词”是指由空格隔开的字符串)。

例如,若输入"

Iamastudenttotaketheexamination."

,则应输出"

IaMAstudenTtOtakEthEexamination."

请修改程序中的错误之处,使它能得出正确的结果。

注意:

不要改动main函数,不得删行,也不得更改程序的结构!

ctype.h>

voidfun(char*p)

intk=0;

for(;

*p;

p++)

if(k)

{

/**********found***********/

if(p=='

'

k=0;

*(p-1)=toupper(*(p-1))

else

k=1;

charchrstr[64];

intd;

clrscr();

printf("

\nPleaseenteranEnglishsentencewithin63letters:

"

);

gets(chrstr);

d=strlen(chrstr);

chrstr[d]='

;

chrstr[d+1]=0;

\n\nBeforechanging:

\n%s"

chrstr);

fun(chrstr);

\nAfterchanging:

NONO();

/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。

chars1[81];

g05.in"

g05.out"

fgets(s1,80,rf);

fun(s1);

fprintf(wf,"

%s"

s1);

题目已经说明,各单词之间使用空格分隔,在程序中使用语句:

if(k){}

进行当到字符串结束后的判断,如果其后一个字符为空格的话,则该单词结束。

程序中使用:

语句来判断指针变量p所指向的存储单元内容是否为空格,要取指针p所指向的存储单元内容应该用“*p”,因此该语句应改为“if(*p=='

)”;

if(*p=='

)或其他等效语句。

C语言中,每个语句的最后必须有一个分号,因此应该在该语句后加一个分号“;

”,即该语句应改为“*(p-1)=toupper(*(p-1));

”。

*(p-1)=toupper(*(p-1));

3

给定程序MODI1.C中函数fun的功能是:

求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;

若未找到,则函数值为NULL。

例如,当字符串中的内容为:

"

abcdabfabcdx"

,t中的内容为:

ab"

时,输出结果应是:

abcdx。

当字符串中的内容为:

abd"

时,则程序输出未找到信息:

notbefound!

不要改动main函数,不得增行或删行,也不得更改程序的结构!

string.h>

char*fun(char*s,char*t)

char*p,*r,*a;

a=Null;

while(*s)

{p=s;

r=t;

while(*r)

if(r==p){r++;

p++;

elsebreak;

if(*r=='

\0'

)a=s;

s++;

returna;

chars[100],t[100],*p;

\nPleaseenterstringS:

scanf("

s);

\nPleaseentersubstringt:

t);

p=fun(s,t);

if(p)printf("

\nTheresultis:

%s\n"

p);

elseprintf("

\nNotfound!

\n"

);

C语言中,要使一个指针变量指向空,应将其赋为“NULL”而不是“Null”(因为在c语言中,区分大小写),因此该语句应改为“a=NULL;

a=NULL;

本题fun函数的内层while循环中,是用if语句判断指针r、p所指向的内存单元的内容是否相同,若相同,再判断r、p所指向内存单元的下一个单元的内容是否相同,直到r指向字符串的结束(即*r='

);

而不是判断指针r、p所指向的内存单元的地址是否相同,因此该语句应改为“if(*r==*p){r++;

}”。

if(*r==*p){r++;

}或其他等效语句

4.

由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。

例如,n=8时,输入:

193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763

所得平均值为:

195.838745,在平均值以上的实数个数应为:

5

请改正程序中的错误,使程序能输出正确的结果。

intfun(floatx[],intn)

intj,c=0;

floatxa=0.0;

for(j=0;

j<

n;

j++)

xa+=x[j]/n;

ave=%f\n"

xa);

if(x[j]=>

xa)

c++;

returnc;

main()

{floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};

clrscr();

%d\n"

fun(x,8));

C语言中,在定义函数时,函数体应该用大括号“{}”括起来,因此该语句的最开始处缺少“{”,即该语句应改为“{intj,c=0;

”;

{intj,c=0;

该语句是判断当x[j]的值大于等于xa时,计数变量就加1;

C语言中,表示“大于等于”的运算符是“>

=”,而不是“=>

”,因此该语句应改为“if(x[j]>

=xa)”;

if(x[j]>

=xa)或其他等效语句

5.

将tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。

例如,若输入"

Ab,cD"

,则输出"

AB,CD"

请改正程序中的错误,使它能统计出正确的结果。

char*fun(chartt[])

inti;

for(i=0;

tt[i];

i++)

if(('

a'

<

=tt[i])||(tt[i]<

='

z'

))

tt[i]+=32;

return(tt);

main()

chartt[81];

\nPleaseenterastring:

gets(tt);

\nTheresultstringis:

\n%s"

fun(tt));

/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。

chartt[81],ch;

g10.in"

g10.out"

fgets(tt,80,rf);

fun(tt);

tt);

根据题意知道,该if语句的条件表达式是“tt[i]>

'

”且“tt[i]<

”(注意其中的“且”),因此,该语句中的“||”(或)运算符应改为“&

&

”(与),即该语句应改为“if(('

=tt[i])&

(tt[i]<

))”;

if(('

ASCII码表中,小写字母的ASCII值比大写字母大,如'

的ASCII值是97,'

A'

的ASCII值是65,因此将一字符串中小写字母改为对应的大写字母,应将其ASCII值减去32,即该语句应改为“tt[i]-=32;

tt[i]-=32;

6.

给定程序MODI1.C中函数fun的功能是:

将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。

例如,字符串中的数据为:

AABBCCDDEEFF,

则输出应当是:

ABBCDDEFF。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

不要改动main函数,不得增行或删行,也不得更改程序的结构!

#defineN80

voidfun(char*s,chart[])

{inti,j=0;

for(i=0;

i<

strlen(s);

i++)

/***********found**********/

if(i%2&

s[i]%2==0)

t[j++]=s[i];

t[i]='

;

{chars[N],t[N];

\nPleaseenterstrings:

gets(s);

fun(s,t);

t);

题面中要求的是:

“将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中”,注意其中的“或”,因此该if语句条件表达式中的“&

”应改为“||”,即该语句应改为“if(i%2||s[i]%2==0)”;

if(i%2||s[i]%2==0)或其它等效语句

本题中,变量j中记录的是t所指数组中最后一个字符的下标,因此在t所指向数组的末尾加上‘\0’,应该用“t[j]='

”语句;

t[j]='

或其他等效语句

7.

从s所指字符串中删除所有小写字母c。

请改正程序中的错误,使它能计算出正确的结果。

voidfun(char*s)

{inti,j;

for(i=j=0;

s[i]!

='

if(s[i]!

c'

s[j]=s[i];

s[i]='

{chars[80];

Enterastring:

Theoriginalstring:

puts(s);

fun(s);

Thestringafterdeleted:

printf("

\n\n"

for循环中,变量j记录的是删除c后形成的新字符串最后一个字符在新数组中的下标,因此,当用“s[j]=s[i]”语句对s[j]赋值后,应该使该索引加1,以使再对s[j]赋值不是覆盖当前s[j]元素的值;

故“s[j]=s[i]”后应该新增语句“j++”,且两语句应用“{}”括起来,即改为“{s[j]=s[i];

j++;

}”,而且根据要求这两条语句必须写在同一行。

另一种简便的答案是“s[j++]=s[i];

{s[j]=s[i];

}或其它等效语句

for循环中,变量j记录的是删除c后形成的新字符串最后一个字符在新数组中的下标,因此在新字符串最后加上'

,应是对s[j]赋值,即该语句应改为“s[j]='

s[j]='

或其它等效语句

8.

计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;

并计算该值的个位、十位、百位上数字之和作为函数值返回。

例如,7的5次方是16807,其低3位数的和值是15。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

不要改动main函数,不得增行或删行,也不得更改程序的结构!

math.h>

intfun(intn,int*value)

{intd,s,i;

/**************found**************/

d=0;

s=0;

for(i=1;

=5;

i++)d=d*n;

*value=d;

=3;

{s=s+d%10;

d=d\10;

returns;

{intn,sum,v;

do

{printf("

\nEntern(2<

n<

8):

scanf("

%d"

&

n);

while(n<

=2||n>

=8);

sum=fun(n,&

v);

\n\nTheresult:

\nvalue=%dsum=%d\n\n"

v,sum);

本题是用for循环计算n的5次方,通过累乘的办法将结果保存在变量d中,因此变量d的初始值应为1而不是0,即该语句应改为“d=1;

d=1;

该语句的作用是:

在for循环中,通过除法运算求得n的5次方除以10后的商,而在C语言中,除法运算符是“/”而不是“\”,即该语句应改为“d=d/10;

d=d/10;

9.

从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。

规定,函数中a1放个位数,a2放十位数。

请改正程序中的错误,使它能得出正确结果。

不要改动main函数,不得增行或删行,也不得更改程序的结构。

fun(int*b)

{intk,a1,a2,i=0;

for(k=10;

k<

=55;

k++)

{a2=k/1O;

a1=k-a2*10;

if((k%3==0&

a2==5)||(k%3==0&

a1==5))

{b[i]=k;

i++;

returnk;

{inta[100],k,m;

m=fun(a);

Theresultis:

for(k=0;

m;

k++)printf("

%4d"

a[k]);

该语句的功能是将k除以10求得k的十位数,注意这里是“除以10”而不是“除以1O(O这里为字母)”,因此该语句应改为“a2=k/10;

a2=k/10;

本题fun函数的for循环中,k是循环变量,记录符合条件数的个数的变量是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1