C语言上机附加题附13答案.docx
《C语言上机附加题附13答案.docx》由会员分享,可在线阅读,更多相关《C语言上机附加题附13答案.docx(12页珍藏版)》请在冰豆网上搜索。
![C语言上机附加题附13答案.docx](https://file1.bdocx.com/fileroot1/2023-1/9/818e27e0-e6bc-44b9-998b-cad6f47e5a1e/818e27e0-e6bc-44b9-998b-cad6f47e5a1e1.gif)
C语言上机附加题附13答案
C语言--上机附加题-附1-3答案
七、附加题
附加题1
一、填空题
给定的程序中,函数fun的功能是:
在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的书用该中间数代替,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。
例如,有9个正整数:
1572387582145
按升序排列时的中间数为:
8
处理后主函数中的输出的数列为:
8882387882145
请在程序的下划线处天如正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
#defineN9
intfun(intx[])
{inti,j,k,t,mid,b[N];
for(i=0;ifor(i=0;i<=N/2;i++)
{k=i;
for(j=i+1;jb[j])k=j;
if(k!
=i)
{
/**********found**********/
t=b[i];b[i]=b[k];b[k]=t;
}
}
/**********found**********/
mid=b[N/2];
for(i=0;i/**********found**********/
if(x[i]returnmid;
}
main()
{inti,x[N]={1,5,7,23,87,5,8,21,45};
for(i=0;iprintf("\nThemiddatais:
%d\n",fun(x));
for(i=0;iprintf("\n");
}
二、改错题
给定程序MODI1.C中,fun函数的功能是,删除b所指数组中小于10的数据。
主函数中输出删除后数组中余下的数据。
请改正函数fun中制定部位的错误,使它能得出正确的结果。
注意,不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#defineN20
intfun(int*b)
{
/**********found**********/
intt[N],i,num=0;
for(i=0;iif(b[i]>=10)
/**********found**********/
t[num++]=b[i];
/**********found**********/
for(i=0;ib[i]=t[i];
return(num);
}
main()
{inta[N],i,num;
printf("a数组中的数据:
\n");
for(i=0;iprintf("\n");
num=fun(a);
for(i=0;iprintf("\n");
}
三、编程题
请编写函数fun其功能是:
统计s所指字符串中的数字字符个数,并作为函数值返回。
例如,s所指字符串中的内容是:
2def35adh253kjsdf7/kj8655x,
函数fun返回值为:
11
注意:
部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
voidNONO();
intfun(char*s)
{
inti=0,num=0;
while(*(s+i)!
=0)
{
if(*(s+i)>='0'&&*(s+i)<='9')num++;
i++;
}
returnnum;
}
main()
{char*s="2def35adh253kjsdf7/kj8655x";
printf("%s\n",s);
printf("%d\n",fun(s));
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
FILE*fp,*wf;
inti;
chars[256];
fp=fopen("C:
\\k01\\24010001\\in.dat","r");
wf=fopen("C:
\\k01\\24010001\\out.dat","w");
for(i=0;i<10;i++){
fgets(s,255,fp);
fprintf(wf,"%d\n",fun(s));
}
fclose(fp);
fclose(wf);
}
附加题2
一、填空题
给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun()的作用是,将a、b、c三个结点链接成一个单向链表,并输出链表节点中的数据。
请在程序的下划线处天如正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
typedefstructlist
{chardata;
structlist*next;
}Q;
voidfun(Q*pa,Q*pb,Q*pc)
{Q*p;
/**********found**********/
pa->next=pb;
pb->next=pc;
p=pa;
while(p)
{
/**********found**********/
printf("%c",p->data);
/**********found**********/
p=p->next;
}
printf("\n");
}
main()
{Qa,b,c;
a.data='E';b.data='F';c.data='G';c.next=NULL;
fun(&a,&b,&c);
}
二、改错题
给定程序MODI1.C中,函数fun()的功能是统计s所致一维数组中0的个数(存在变量zero中)和1的个数(存在变量one中),并输出结果。
请改正函数fun中制定部位的错误,使它能得出正确的结果。
注意,不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
voidfun(int*s,intn)
{
/**********found**********/
inti,one=0,zero=0;
for(i=0;i/**********found**********/
switch(s[i])
{
/**********found**********/
case0:
zero++;break;
case1:
one++;
}
printf("one:
%dzero:
%d\n",one,zero);
}
main()
{inta[20]={1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0},n=20;
fun(a,n);
}
三、编程题
请编写函数fun,其功能是将形参s所指定的字符串放入形参a所指定的字符数组中,使a中存放同样的字符串。
说明:
不得使用系统提供的字符串函数。
注意:
部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#defineN20
voidNONO();
voidfun(char*a,char*s)
{
inti;
while(*a++=*s++);
}
main()
{chars1[N],*s2="abcdefghijk";
fun(s1,s2);
printf("%s\n",s1);
printf("%s\n",s2);
//NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
FILE*fp,*wf;
inti;
chars1[256],s2[256];
fp=fopen("C:
\\k01\\24010001\\in.dat","r");
wf=fopen("C:
\\k01\\24010001\\out.dat","w");
for(i=0;i<10;i++){
fgets(s2,255,fp);
fun(s1,s2);
fprintf(wf,"%s",s1);
}
fclose(fp);
fclose(wf);
}
附加题3
一、填空题
函数fun的功能是:
输出a所致数组中的前n个数据,要求每行输出5个数。
请在程序的下划线处填入正确的内容并把下划线删除,是程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
#include
voidfun(int*a,intn)
{inti;
for(i=0;i{
/**********found**********/
if(i%5==0)
/**********found**********/
printf("\n");
/**********found**********/
printf("%d",a[i]);
}
}
main()
{inta[100]={0},i,n;
n=22;
for(i=0;ifun(a,n);
printf("\n");
}
二、改错题
给定程序MODI1.C中,函数fun的功能是,在任意给定的N个正整数中,从左到右依次逐个取三个数作为一组,按值大小找出该组数的中值。
用该中值替换与该组数对应的原三个数中的中间位置的数。
处理后原数列中首尾2个数不变。
处理后数列在主函数中输出。
例如,有10个正整数如下:
初始数列为:
657231858214538
第1组数为:
657中值为:
6
替换后的数列为:
667231858214538
第2组数为:
657中值为:
7
替换后的数列为:
667231858214538
第3组数为:
72318中值为:
18
替换后的数列为:
667181858214538
第4组数为:
23185中值为:
18
替换后的数列为:
667181858214538
第5组数为:
1858中值为:
8
替换后的数列为:
667181888214538
第6组数为:
5821中值为:
8
替换后的数列为:
667181888214538
第7组数为:
82145中值为:
21
替换后的数列为:
667181888214538
第8组数为:
214538中值为:
38
替换后的数列为:
667181888213838
最终结果为:
667181888213838
请改正函数fun中制定部位的错误,使它能得出正确的结果。
注意,不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#defineN10
intfindmid(inta,intb,intc)
{intt;
t=(a>b)?
(b>c?
b:
(a>c?
c:
a)):
((a>c)?
a:
((b>c)?
c:
b));
/**********found**********/
returnt;
}
voidfun(intx[])
{inti,a,b,c,t[N];
/**********found**********/
for(i=0;ifor(i=0;i{a=t[i];b=t[i+1];c=t[i+2];
/**********found**********/
x[i+1]=findmid(a,b,c);
}
}
main()
{inti,x[N]={6,5,7,23,18,5,8,21,45,38};
for(i=0;iprintf("\n");
fun(x);
for(i=0;iprintf("\n");
}
三、编程题
请编写函数fun,函数的功能是查找x在s所致数组中下标的位置作为函数值返回。
若x不存在,则返回-1.
注意:
部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#defineN15
voidNONO();
intfun(int*s,intx)
{
inti=0,t=-1;
while(*(s+i)!
=0)
{
if(*(s+i)==x)
{t=i;break;}
i++;
}
returnt;
}
main()
{inta[N]={29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;
printf("a数组中的数据:
\n");
for(i=0;iprintf("给x输入待查找的数:
");scanf("%d",&x);
index=fun(a,x);
printf("index=%d\n",index);
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
FILE*fp,*wf;
inti,j,a[10],x,index;
fp=fopen("C:
\\k01\\24010001\\in.dat","r");
wf=fopen("C:
\\k01\\24010001\\out.dat","w");
for(i=0;i<10;i++){
for(j=0;j<10;j++){
fscanf(fp,"%d",&a[j]);
}
fscanf(fp,"%d",&x);
index=fun(a,x);
fprintf(wf,"%d\n",index);
}
fclose(fp);
fclose(wf);
}