二级C语言答案最新题库1.docx
《二级C语言答案最新题库1.docx》由会员分享,可在线阅读,更多相关《二级C语言答案最新题库1.docx(176页珍藏版)》请在冰豆网上搜索。
二级C语言答案最新题库1
第1套
1.程序中,函数fun的功能是将不带头结点的单向链表逆置。
即若原链表中从头至尾结点数据域依次为:
2、4、6、8、10,逆置后,从头至尾结点数据域依次为:
10、8、6、4、2。
#include
#include
#defineN5
typedefstructnode{
intdata;
structnode*next;
}NODE;
/**********found**********/
__1__fun(NODE*h)
{NODE*p,*q,*r;
p=h;
if(p==NULL)
returnNULL;
q=p->next;
p->next=NULL;
/**********found**********/
while(__2__)
{r=q->next;
q->next=p;
p=q;
/**********found**********/
q=__3__;
}
returnp;
}
NODE*creatlist(inta[])
{NODE*h,*p,*q;inti;
h=NULL;
for(i=0;i{q=(NODE*)malloc(sizeof(NODE));
q->data=a[i];
q->next=NULL;
if(h==NULL)h=p=q;
else{p->next=q;p=q;}
}
returnh;
}
voidoutlist(NODE*h)
{NODE*p;
p=h;
if(p==NULL)printf("ThelistisNULL!
\n");
else
{printf("\nHead");
do
{printf("->%d",p->data);p=p->next;}
while(p!
=NULL);
printf("->End\n");
}
}
main()
{NODE*head;
inta[N]={2,4,6,8,10};
head=creatlist(a);
printf("\nTheoriginallist:
\n");
outlist(head);
head=fun(head);
printf("\nThelistafterinverting:
\n");
outlist(head);
}
答案:
(1)NODE*
(2)q(3)r
2..给定程序MODI1.C中函数fun的功能是:
将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。
#include
#include
#defineN80
voidfun(char*s,chart[])
{inti,j=0;
for(i=0;i/***********found**********/
if(i%2&&s[i]%2==0)
t[j++]=s[i];
/***********found**********/
t[i]='\0';
}
main()
{chars[N],t[N];
printf("\nPleaseenterstrings:
");gets(s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}
答案:
(1)if(i%2||s[i]%2==0)
(2)t[j]=’\0’;
3.请编写函数fun,函数的功能是:
将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
#include
voidfun(int(*s)[10],int*b,int*n,intmm,intnn)
{
}
main()
{intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;
inta[100]={0},n=0;
printf("Thematrix:
\n");
for(i=0;i<3;i++)
{for(j=0;j<4;j++)printf("%3d",w[i][j]);
printf("\n");
}
fun(w,a,&n,3,4);
printf("TheAarray:
\n");
for(i=0;iNONO();
}
NONO()
{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。
*/
FILE*rf,*wf;inti,j,k;
intw[10][10],a[100],n=0,mm,nn;
rf=fopen("c:
\\test\\in.dat","r");
wf=fopen("c:
\\test\\out.dat","w");
for(k=0;k<5;k++){
fscanf(rf,"%d%d",&mm,&nn);
for(i=0;ifor(j=0;jfun(w,a,&n,mm,nn);
for(i=0;i}
fclose(rf);fclose(wf);
}
答案:
voidfun(int(*s)[10],int*b,int*n,intmm,intnn)
{
IntI,j,k=0;
for(j=0;jfor(i=0;ib[k++]=s[i][j];
*n=k;
}
第2套
1.通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。
例如:
b所指变量t中的学号、姓名和3门课的成绩依次是:
10002、“ZhangQi”、93、85、87,修改后输出t中的数据应为:
10004、“LiiJie”、93、85、87。
#include
structstudent{
longsno;
charname[10];
floatscore[3];
};
voidfun(structstudent*b)
{
/**********found**********/
b__1__=10004;
/**********found**********/
strcpy(b__2__,"LiJie");
}
main()
{structstudentt={10002,"ZhangQi",93,85,87};
inti;
printf("\n\nTheoriginaldata:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",t.sno,t.name);
for(i=0;i<3;i++)printf("%6.2f",t.score[i]);
printf("\n");
/**********found**********/
fun(__3__);
printf("\nThedataaftermodified:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",t.sno,t.name);
for(i=0;i<3;i++)printf("%6.2f",t.score[i]);
printf("\n");
答案:
1)->sno
(2)->name(3)&t
2.给定程序MODI1.C中函数fun的功能是:
应用递归算法求形参a的平方根。
#include
#include
/**********found**********/
doublefun(doublea,dounlex0)
{doublex1,y;
x1=(x0+a/x0)/2.0;
/**********found**********/
if(fabs(x1-xo)>0.00001)
y=fun(a,x1);
elsey=x1;
returny;
}
main()
{doublex;
printf("Enterx:
");scanf("%lf",&x);
printf("Thesquarerootof%lfis%lf\n",x,fun(x,1.0));
}
答案:
(1)doublefun(doublea,doublex0)
(2)if(fabs(x1-x0)>0.00001)
3.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。
请编写函数fun,它的功能是:
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
#include
#defineN12
typedefstruct
{charnum[10];
doubles;
}STREC;
doublefun(STREC*a,STREC*b,int*n)
{
}
main()
{STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
STRECh[N],t;FILE*out;
inti,j,n;doubleave;
ave=fun(s,h,&n);
printf("The%dstudentdatawhichishigherthan%7.3f:
\n",n,ave);
for(i=0;iprintf("%s%4.1f\n",h[i].num,h[i].s);
printf("\n");
out=fopen("c:
\\test\\out.dat","w");
fprintf(out,"%d\n%7.3f\n",n,ave);
for(i=0;ifor(j=i+1;jif(h[i].sfor(i=0;ifprintf(out,"%4.1f\n",h[i].s);
fclose(out);
}
答案:
doublefun(STREC*a,STREC*b,int*n)
{
inti,j;
doubleave,sum=0.0;
*n=0;
for(i=0;i{
sum+=a[i].s;
}
ave=sum/N;
for(i=0,j=0;i{
if(a[i].s>=ave)
{
b[j]=a[i];
j++;
(*n)++;
}
i++;
}
returnave;
}
第3套
1.程序中,函数fun的功能是计算下式,并把计算结果作为函数值返回。
#include
doublefun(doublee)
{inti;doubles,x;
/**********found**********/
s=0;i=__1__;
x=1.0;
while(x>e){
/**********found**********/
__2__;
/**********found**********/
x=(2.0*i-1)/((__3__)*(2.0*i));
s=s+x;
}
returns;
}
main()
{doublee=1e-3;
printf("\nTheresultis:
%f\n",fun(e));
}
答案:
(1)0
(2)i++(3)2.*i
2.给定程序MODI1.C中函数fun的功能是:
将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
#include
#include
/************found************/
voidfun(chars,chart)
{
inti,d;
d=strlen(s);
for(i=0;ifor(i=0;i/************found************/
t[2*d-1]='\0';
}
main()
{
chars[100],t[100];
printf("\nPleaseenterstringS:
");scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}
答案:
(1)voidfun(char*s,char*t)
(2)t[2*d]=’\0’;
3.函数fun的功能是:
将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所以字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。
#include
#include
voidfun(char*s,chart[])
{
}
main()
{
chars[100],t[100];voidNONO();
printf("\nPleaseenterstringS:
");scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
chars[100],t[100];
FILE*rf,*wf;
inti;
rf=fopen("c:
\\test\\in.dat","r");
wf=fopen("c:
\\test\\out.dat","w");
for(i=0;i<10;i++){
fscanf(rf,"%s",s);
fun(s,t);
fprintf(wf,"%s\n",t);
}
fclose(rf);
fclose(wf);
}
答案:
52.voidfun(char*s,chart[])
{
inti=0,j=0;
while(s[i])
{
if((i%2!
=0)&&(s[i]%2!
=0))
{
t[j]=s[i];
j++;
}
i++;
}
t[j]=0;
}
第4套
1.程序中,函数fun的功能是:
将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
defadhkjsdf3537。
#include
voidfun(char*s)
{inti,j=0,k=0;chart1[80],t2[80];
for(i=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
{
/**********found**********/
t2[j]=s[i];___1___;
}
elset1[k++]=s[i];
t2[j]=0;t1[k]=0;
/**********found**********/
for(i=0;i/**********found**********/
for(i=0;i<___3___;i++)s[k+i]=t2[i];
}
main()
{chars[80]="ba3a54j7sd567sdffs";
printf("\nTheoriginalstringis:
%s\n",s);
fun(s);
printf("\nTheresultis:
%s\n",s);
}
答案:
(1)j++
(2)s[i]=t1[i](3)j
2..给定程序MODI1.C中函数fun的功能是:
用冒泡法对6个字符串按由小到大的顺序进行排序。
#include
#include
#defineMAXLINE20
fun(char*pstr[6])
{inti,j;
char*p;
for(i=0;i<5;i++){
/**************found**************/
for(j=i+1,j<6,j++)
{
if(strcmp(*(pstr+i),*(pstr+j))>0)
{
p=*(pstr+i);
/**************found**************/
*(pstr+i)=pstr+j;
*(pstr+j)=p;
}
}
}
}
main()
{inti;
char*pstr[6],str[6][MAXLINE];
for(i=0;i<6;i++)pstr[i]=str[i];
printf("\nEnter6string(1stringateachline):
\n");
for(i=0;i<6;i++)scanf("%s",pstr[i]);
fun(pstr);
printf("Thestringsaftersorting:
\n");
for(i=0;i<6;i++)printf("%s\n",pstr[i]);
}
答案:
(1)for(j=i+1;j<6;j++)
(2)*(pstr+i)=*(pstr+j);
3.请编写函数fun,它的功能是:
求出ss所指字符串中指定字符的个数,并返回此值。
#include
#include
#defineM81
intfun(char*ss,charc)
{
}
main()
{chara[M],ch;
voidNONO();
printf("\nPleaseenterastring:
");gets(a);
printf("\nPleaseenterachar:
");ch=getchar();
printf("\nThenumberofthecharis:
%d\n",fun(a,ch));
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。
*/
inti;
FILE*rf,*wf;
chara[M],b[M],ch;
rf=fopen("c:
\\test\\in.dat","r");
wf=fopen("c:
\\test\\out.dat","w");
for(i=0;i<10;i++){
fscanf(rf,"%s",a);
fscanf(rf,"%s",b);
ch=*b;
fprintf(wf,"%c=%d\n",ch,fun(a,ch));
}
fclose(rf);
fclose(wf);
}
答案:
53.intfun(char*ss,charc)
{
intn=0,i=0;
while(ss[i])
{
if(ss[i]==c)
{
n++;
}
i++;
}
returnn;
}
第5套
1.程序中,函数fun的功能是:
有NxN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有下列矩阵:
123
456
789
计算结果为
100
650
10149
#include
#defineN4
/**********found**********/
voidfun(int(*t)___1___)
{inti,j;
for(i=1;i{for(j=0;j
{
/**********found**********/
___2___=t[i][j]+t[j][i];
/**********found**********/
___3___=0;
}
}
}
main()
{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
printf("\nTheoriginalarray:
\n");
for(i=0;i{for(j=0;jprintf("\n");
}
fun(t);
printf("\nTheresultis:
\n");
for(i=0;i{for(j=0;j