c语言改错题及答案.docx
- 文档编号:27972610
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:24
- 大小:21.66KB
c语言改错题及答案.docx
《c语言改错题及答案.docx》由会员分享,可在线阅读,更多相关《c语言改错题及答案.docx(24页珍藏版)》请在冰豆网上搜索。
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分)
/*------------------------------------------------------功能:
根据整型形参
计算如下公式的值:
y=1+1/3+1/5+1/7+...+1/(2m-3)
------------------------------------------------------*/#includestdio.h
i;/**********found**********/for(i=3;im;i++)
/**********found**********/y+=1.0/(2i-3);return(y);}void
main(void){intn;clrscr();printf(entern:
);scanf(%d,
n);printf(\ntheresultis%1f\n,fun(n));getch();}答案:
m,
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的乘积例如:
输入下面的矩阵:
100200300400
500600700800900程序输出:
50010001500
200025003000350040004500-------------------------------------------
-----------*/#includestdio.hintfun(int
array[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#include
stdio.h#includestring.hmain(){inti;char
str[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(char
str[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#include
string.h
up1st(char*p){
/**********found**********/integerk=0;for(;*p;p++)if(k){
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();void
max_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;*m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 改错 答案