c语言改错题及答案.docx

上传人:b****8 文档编号:9121015 上传时间:2023-02-03 格式:DOCX 页数:21 大小:21.76KB
下载 相关 举报
c语言改错题及答案.docx_第1页
第1页 / 共21页
c语言改错题及答案.docx_第2页
第2页 / 共21页
c语言改错题及答案.docx_第3页
第3页 / 共21页
c语言改错题及答案.docx_第4页
第4页 / 共21页
c语言改错题及答案.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

c语言改错题及答案.docx

《c语言改错题及答案.docx》由会员分享,可在线阅读,更多相关《c语言改错题及答案.docx(21页珍藏版)》请在冰豆网上搜索。

c语言改错题及答案.docx

c语言改错题及答案

c语言改错题及答案

【篇一:

c语言二级上机(t填空,改错,编程)题库及答案】

100套题目(每套题

目包含3道题:

一道程序填空题、一道程序修改题、一道程序设计题),真实考试的时候,

考生输入准考证后计算机随机为你抽取一套考试,每个考生考试时只需考一套题目(包含三道题)

二级c语言上机试题汇编

※※※※※※※※※※※※※※※※※※※※※※※

第01套:

给定程序中,函数fun的功能是:

将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回

所指变量。

例如,输入一个数:

27638496,新的数:

为739。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的blank1.c中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#includestdio.h

voidfun(unsignedlong*n)

{unsignedlongx=0,i;intt;

i=1;

while(*n)

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

{t=*n%__1__;

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

if(t%2!

=__2__)

{x=x+t*i;i=i*10;}

*n=*n/10;

}

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

*n=__3__;

}

main()

{unsignedlongn=-1;

while(n99999999||n0)

{printf(pleaseinput(0n100000000):

);scanf(%ld,n);}

fun(n);printf(\ntheresultis:

%ld\n,n);

}

【参考答案】

(1)10

(2)0(3)x

解题思路:

第一处:

t是通过取模的方式来得到*n的个位数字,所以应填:

10。

第二处:

判断是否是奇数,所以应填:

0。

第三处:

最后通形参n来返回新数x,所以应填:

x。

***************************************************

给定程序modi1.c中函数fun的功能是:

计算n!

例如,给n输入5,则输出120.000000。

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

注意:

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

给定源程序:

#includestdio.h

doublefun(intn)

{doubleresult=1.0;

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

ifn==0

return1.0;

while(n1n170)

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

result*=n--

returnresult;

}

main()

{intn;

printf(inputn:

);

scanf(%d,n);

printf(\n\n%d!

=%lf\n\n,n,fun(n));

}

解题思路:

第一处:

条件语句书写格式错误,应改为:

if(n==0)。

第二处:

语句后缺少分号。

***************************************************

请编写一个函数fun,它的功能是:

将一个数字字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。

例如,若输入字符串-1234,则函数把它转换为整数值-1234。

函数fun中给出的语句仅供参考。

注意:

部分源程序存在文件prog1.c文件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

给定源程序:

#includestdio.h

#includestring.h

longfun(char*p)

{

}

main()/*主函数*/

{chars[6];voidnono();

longn;

printf(enterastring:

\n);

gets(s);

n=fun(s);

printf(%ld\n,n);

nono();

}

voidnono()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

file*fp,*wf;

inti;

chars[20];

longn;

fp=fopen(in.dat,r);

wf=fopen(out.dat,w);

for(i=0;i10;i++){

fscanf(fp,%s,s);

n=fun(s);

fprintf(wf,%ld\n,n);

}

fclose(fp);

fclose(wf);

}

解题思路:

本题是将一个数字字符串转换为一个整数。

参考答案二:

longfun(char*p)

{

/*以下代码仅供参考*/

inti,len,t;/*len为串长,t为正负标识*/

longx=0;

len=strlen(p);

if(p[0]==-)

{t=-1;len--;p++;}

elset=1;

/*以下完成数字字符串转换为一个数字*/

while(*p)x=x*10-48+(*p++);

returnx*t;

}*/

注意:

由于nono()这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开

始均省略nono()

※※※※※※※※※※※※※※※※※※※※※※※※※

第02套:

给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的blank1.c中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#includestdio.h

voidfun(char*s,inta,doublef)

{

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

__1__fp;

charch;

fp=fopen(file1.txt,w);

fprintf(fp,%s%d%f\n,s,a,f);

fclose(fp);

fp=fopen(file1.txt,r);

printf(\ntheresult:

\n\n);

ch=fgetc(fp);

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

while(!

feof(__2__)){

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

putchar(__3__);ch=fgetc(fp);}

putchar(\n);

fclose(fp);

}

main()

{chara[10]=hello!

;intb=12345;

doublec=98.76;

fun(a,b,c);

}

【参考答案】

(1)file*

(2)fp(3)ch

解题思路:

本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕

上。

第一处:

定义文本文件类型变量,所以应填:

file*。

第二处:

判断文件是否结束,所以应填:

fp。

第三处:

显示读出的字符,所以应填:

ch。

***************************************************

给定程序modi1.c中函数fun的功能是:

依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。

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

注意:

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

给定源程序:

#includestdio.h

voidfun(char*s)

{inti,j;

for(i=0,j=0;s[i]!

=\0;i++)

if(s[i]=0s[i]=9)

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

s[j]=s[i];

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

s[j]=\0;

}

main()

{charitem[80];

printf(\nenterastring:

);gets(item);

printf(\n\nthestringis:

\%s\\n,item);

fun(item);

printf(\n\nthestringofchangingis:

\%s\\n,item);

}

【参考答案】

(1)s[j++]=s[i];

(2)s[j]=\0;

解题思路:

第一处:

要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j

来控制新字符串的位置,所以应改为:

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

第二处:

置新字符串的结束符,所以应改为:

s[j]=\0;.

***************************************************

请编写函数fun,函数的功能是:

将m行n列的二维数组中的字符数据,按列的

顺序依次放到一个字符串中。

例如,二维数组中的数据为:

wwww

ssss

【篇二:

c语言程序改错题库】

━━━━━━━━━

一、程序改错共138题(共计1380分)

━━━━━━━━━━━━━━━━━━

第2题(10.0分)

/*------------------------------------------------------第1题(10.0分)

/*------------------------------------------------------功能:

根据整型形参m,计算如下公式的值:

y=1+1/3+1/5+1/7+...+1/(2m-3)

------------------------------------------------------*/#includestdio.hdoublefun(intm){/**********found**********/doubley=1inti;/**********found**********/for(i=3;im;i++)/**********found**********/y+=1.0/(2i-3);return(y);}voidmain(void){intn;clrscr();printf(entern:

);scanf(%d,n);printf(\ntheresultis%1f\n,fun(n));getch();}答案:

1).doubley=1;2).for(i=3;i=m;i++)或for(i=3;im+1;i++)功能:

用选择法对数组中的n个元素按从小到大的顺序进行排序。

------------------------------------------------------*/#includestdio.h#definen20voidfun(inta[],intn){inti,j,t,p;for(j=0;jn-1;j++){/**********found**********/p=jfor(i=j;in;i++)/**********found**********/if(a[i]a[p])/**********found**********/p=j;t=a[p];a[p]=a[j];a[j]=t;}}main(){inta[n]={9,6,8,3,-1},i,m=5;printf(排序前的数据:

);for(i=0;im;i++)printf(%d,a[i]);

printf(\n);fun(a,m);

printf(排序后的数据:

);for(i=0;im;i++)

printf(%d,a[i]);printf(\n);getch();}答案:

1).p=j;2).if(a[i]a[p])或if(a[p]a[i])

3).p=i;第3题(10.0分)

/*------------------------------------------------------功能:

编写一个程序,从键盘接收一个字符

串,然后按照字符顺

序从小到大进行排序,并删除重复的

字符。

------------------------------------------------------*/#includestdio.h#includestring.hvoidmain(){charstr[100],*p,*q,*r,c;printf(输入字符串:

);

gets(str);/**********found**********/for(p=str;p;p++){for(q=r=p;*q;q++)if(*r*q)r=q;/**********found**********/if(r==p){/**********found**********/c=r;*r=*p;*p=c;}}for(p=str;*p;p++){for(q=p;*p==*q;q++);strcpy(p+1,q);

}printf(结果字符串:

%s\n\n,str);

getch();}答案:

1).for(p=str;*p;p++)

2).if(r!

=p)3).c=*r;第4题(10.0分)

/*------------------------------------------------------功能:

编写程序,求矩阵(3行3列)与5的乘积例如:

输入下面的矩阵:

100200300400500600700800900程序输出:

50010001500

200025003000350040004500------------------------------------------------------*/#includestdio.hintfun(intarray[3][3]){/**********found**********/inti;j;/**********found**********/for(i=1;i3;i++)for(j=0;j3;j++)/**********found**********/array[i][j]=array[i][j]/5;

}main(){inti,j;intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};clrscr();for(i=0;i3;i++){for(j=0;j3;j++)printf(%7d,array[i][j]);printf(\n);}fun(array);printf(convertedarray:

\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%7d,array[i][j]);printf(\n);}getch();}答案:

1).inti,j;2).for(i=0;i3;i++)3).array[i][j]=array[i][j]*5;第5题(10.0分)

/*------------------------------------------------------功能:

用起泡法对连续输入的十个字符排

序后按从小到大的次序输出.

------------------------------------------------------*/#definen10#includestdio.h#includestring.hmain(){inti;charstr[n];/***********found***********/for(i=0;in;i++)scanf(%c,str[i]);/***********found***********/sort(str[n]);for(i=0;in;i++)printf(%c,str[i]);printf(\n);}sort(charstr[n]){inti,j;chart;for(j=1;jn;j++)/***********found***********/for(i=0;in-j;i--)/***********found***********/if(str[i]str[i+1]){

t=str[i];str[i]=str[i+1];str[i+1]=t;}}答案:

1).for(i=0;in;i++)scanf(%c,str[i]);2).sort(str);3).for(i=0;in-j;i++)4).if(str[i]str[i+1])或if(str[i+1]str[i])

第6题(10.0分)

/*------------------------------------------------------功能:

读入一行英文文本,将其中每个单词

的最后一个字母改成

大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。

例如:

若输入“iamastudenttotaketheexamination.”,则应输出“iamastudenttotaketheexamination.”。

------------------------------------------------------*/

#includeconio.h#includestdio.h#includectype.h#includestring.h

up1st(char*p){

/**********found**********/integerk=0;for(;*p;p++)if(k){

/**********found**********/if(*p=){

k=0;

/**********found**********/*(p-1)=toupper(*(p-1);}}

elseif(*p!

=)k=1;

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

main(){

charchrstr[81];clrscr();

printf(\npleaseenterastring:

);gets(chrstr);

printf(\n\nbeforechanging:

\n%s,chrstr);

up1st(chrstr);printf(\nafterchanging:

\n%s,chrstr);}

答案:

1).intk=0;

2).if(*p==)

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

第7题(10.0分)

/*------------------------------------------------------

功能:

在一个一维整型数组中找出其中最大的数及其下标。

------------------------------------------------------*/

#definen10

/**********found**********/floatfun(int*a,int*b,intn){

int*c,max=*a;

max=*c;

/**********found**********/b=c-a;}

returnmax;}

voidmain(void){

inta[n],i,max,p=0;

printf(pleaseenter10integers:

\n);for(i=0;in;i++)

/**********found**********/get(%d,a[i]);

/**********found**********/m=fun(a,p,n);

printf(max=%d,position=%d,max,p);}答案:

1).intfun(int*a,int*b,intn)2).*b=c-a;3).scanf(%d,a[i]);或scanf(%d,a

+i);4).max=fun(a,p,n);第8题(10.0分)

/*------------------------------------------------------功能:

为一维数组输入10个整数;将其中

最小的数与第一个数

对换,将最大的数与最后一个数对

换,输出数组元素。

------------------------------------------------------*/voidmain(void){inta[10];voidinput();voidoutput();voidmax_min();input(a,10);max_min(a,10);output(a,10);}voidinput(int*arr,intn){int*p,i;p=arr;printf(pleaseenter10integers:

\n);for(i=0;in;i++)/**********found**********/scanf(%d,p);}voidmax_min(int*arr,intn){int*min,*max,*p,t;

min=max=arr;for(p=arr+1;parr+n;p++)/**********found**********/

if(*p*max)max=p;elseif(*p*min)min=p;t=*arr;*arr=*min;*min=t;/*

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

当前位置:首页 > 高等教育 > 医学

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

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