C语言上机题库百科园第八章南信大.docx
《C语言上机题库百科园第八章南信大.docx》由会员分享,可在线阅读,更多相关《C语言上机题库百科园第八章南信大.docx(37页珍藏版)》请在冰点文库上搜索。
C语言上机题库百科园第八章南信大
第八章
以下叙述中正确的是()
若有以下语句
typedefstructS
{intg;charh;}T;
A.可用T定义结构体变量
B.T是structS类型的变量
C.可用S定义结构体变量
D.S是struct类型的变量
当定义一个结构体变量时,系统分配给它的内存是()。
A.结构体中最后一个成员所需内存量
B.成员中占内存量最大的容量
C.结构体中第一个成员所需内存量
D.各成员所需内存量的总和
若有以下定义:
structlink
{
intdata;
structlink*next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。
则能把c插入到a和b之间形成新的链表的语句是()
A.p->next=&c;q->next=p->next;
B.p.next=q;q.next=p.next;
C.p->next=q;q->next=&b;
D.a.next=c;c.next=b;
/*N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,它的功能是:
求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
#defineN8
structslist
{doubles;
structslist*next;
};
typedefstructslistSTREC;
doublefun(STREC*h)
{
/***********Begin***************/
/***********End**************/
}
STREC*creat(double*s)/*创建链表*/
{
STREC*h,*p,*q;
inti=0;
h=p=(STREC*)malloc(sizeof(STREC));
p->s=0;
while(i{q=(STREC*)malloc(sizeof(STREC));
q->s=s[i];i++;p->next=q;p=q;
}
p->next=0;
returnh;
}
outlist(STREC*h)
{
STREC*p;
p=h->next;
printf("head");
do
{printf("->%4.1f",p->s);
p=p->next;/*输出各成绩*/
}
while(p!
=NULL);
printf("\n\n");
}
voidmain()
{
FILE*wf;
doubles[N]={85,76,69,85,91,72,64,87},ave;
STREC*h;
h=creat(s);
outlist(h);
ave=fun(h);
printf("ave=%6.3f\n",ave);
/******************************/
wf=fopen("debug\\out25.dat","w");
fprintf(wf,"%6.3f\n",ave);
fclose(wf);
/*****************************/
}
【参考代码】
doubleav=0.0;
STREC*p=h->next;
/*p直接指向"头节点"的下一个节点,即第一个成绩*/
while(p!
=NULL)
{av=av+p->s;/*求总分数*/
p=p->next;
}
returnav/N;/*返回平均值*/
/*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,该函数的功能是:
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#defineN12
typedefstruct
{charnum[10];
doubles;
}STREC;
doublefun(STREC*a,STREC*b,int*n)
{
/*************Begin************/
/*************End*************/
}
voidmain()
{
FILE*wf;
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;
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");
for(i=0;ifor(j=i+1;jif(h[i].s{t=h[i];h[i]=h[j];h[j]=t;}/*分数从高到低排列*/
/******************************/
wf=fopen("debug\\out29.dat","w");
fprintf(wf,"%d%7.3f\n",n,ave);
for(i=0;ifprintf(wf,"%s%4.1f\n",h[i].num,h[i].s);
fclose(wf);
/*****************************/
}
【参考代码】
inti;
doubleav=0.0;
*n=0;
for(i=0;iav=av+a[i].s;
av=av/N;
/*求平均值*/
for(i=0;iif(av<=a[i].s)
{b[*n]=a[i];*n=*n+1;}
/*将高于等于平均分的学生存入b所指存储单元中,并统计人数*/
returnav;
/*返回平均分*/
/*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,
它的功能是:
把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。
主函数中把60放在low中,把69放在heigh中。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b,intl,inth)
{
/************Begin*************/
/************End************/
}
voidmain()
{
FILE*wf;
STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},
{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};
STRECh[N],tt;
inti,j,n,low,heigh,t;
printf("Enter2integernumberlow&heigh:
");
scanf("%d%d",&low,&heigh);
if(heigh{t=heigh;heigh=low;low=t;}
n=fun(s,h,low,heigh);
printf("Thestudent'sdatabetween%d--%d:
\n",low,heigh);
for(i=0;iprintf("%s%4d\n",h[i].num,h[i].s);/*输出指定分数范围内的学生记录*/
printf("\n");
/******************************/
n=fun(s,h,80,98);
for(i=0;ifor(j=i+1;jif(h[i].s>h[j].s)
{tt=h[i];h[i]=h[j];h[j]=tt;}
wf=fopen("debug\\out26.dat","w");
for(i=0;ifprintf(wf,"%s%4d\n",h[i].num,h[i].s);
fclose(wf);
/*****************************/
}
【参考代码】
inti,j=0;
for(i=0;iif(a[i].s>=l&&a[i].s<=h)
/*将分数高于l,低于h的学生记录存于结构体数组b中*/
b[j++]=a[i];
returnj;
/*返回分数范围内的学生人数*/
/*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。
请编写fun函数,它的功能是:
求出该学生的平均分放在记录的ave成员中。
请自己定义正确的形参。
例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#defineN8
typedefstruct
{charnum[10];
doubles[N];
doubleave;
}STREC;
voidfun(STREC*p)
{
/************Begin*************/
/************End**************/
}
voidmain()
{
FILE*wf;
STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
inti;
fun(&s);
printf("The%s'sstudentdata:
\n",s.num);/*输出学号*/
for(i=0;iprintf("%4.1f\n",s.s[i]);/*输出各科成绩*/
printf("\nave=%7.3f\n",s.ave);/*输出平均分*/
/******************************/
wf=fopen("debug\\out24.dat","w");
fprintf(wf,"ave=%7.3f\n",s.ave);
fclose(wf);
/*****************************/
}
【参考代码】
inti;
p->ave=0.0;
for(i=0;ip->ave=p->ave+p->s[i];
/*求各门成绩的总和*/
p->ave=p->ave/N;/*求平均分*/
/*已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。
请编写函数fun,
该函数的功能是:
找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。
已给出函数的首部,请完成该函数。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
#include
#defineN10
typedefstructss
{charnum[10];
ints;
}STU;
fun(STUa[],STU*s)
{
/***********Begin**************/
/***********End**************/
}
voidmain()
{
FILE*wf;
STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;
inti;
printf("*****Theoriginaldata*****\n");
for(i=0;iprintf("No=%sMark=%d\n",a[i].num,a[i].s);
fun(a,&m);
printf("*****THERESULT*****\n");
printf("Thelowest:
%s,%d\n",m.num,m.s);
/******************************/
wf=fopen("debug\\out28.dat","w");
fprintf(wf,"%s%d\n",m.num,m.s);
fclose(wf);
/*****************************/
}
【参考代码】
inti;
*s=a[0];/*先认为第1个值最小*/
for(i=0;iif(s->s>a[i].s)
*s=a[i];
/*学生的记录由学生和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是:
把分数最低的学生数据放在h所指的数组中。
注意:
分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b)
{
/************Begin************/
/************End**************/
}
voidmain()
{
STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},
{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},
{"GA012",64},{"GA014",91},{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};
STRECh[N];
inti,n;
FILE*out;
n=fun(s,h);
printf("The%dlowestscore:
\n",n);
for(i=0;iprintf("%s%4d\n",h[i].num,h[i].s);
printf("\n");
/******************************/
out=fopen("debug\\out22.dat","w");
fprintf(out,"%d\n",n);
for(i=0;ifprintf(out,"%4d\n",h[i].s);
fclose(out);
/******************************/
}
【参考代码】
inti,j=0,n=0,min;
min=a[0].s;
for(i=0;iif(a[i].smin=a[i].s;
for(i=0;iif(a[i].s==min)
{
*(b+j)=a[i];j++;n++;
}
returnn;
/*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#defineN8
typedefstruct
{charnum[10];
doubles;
}STREC;
doublefun(STREC*a,STREC*b,int*n)
{
/************Begin************/
/************End***************/
}
voidmain()
{
FILE*wf;
STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};
STRECh[N];
inti,n;
doubleave;
ave=fun(s,h,&n);
printf("The%dstudentdatawhichislowerthan%7.3f:
\n",n,ave);
for(i=0;iprintf("%s%4.1f\n",h[i].num,h[i].s);
printf("\n");
/******************************/
wf=fopen("debug\\out30.dat","w");
fprintf(wf,"%d%7.3f\n",n,ave);
for(i=0;ifprintf(wf,"%s%4.1f\n",h[i].num,h[i].s);
fclose(wf);
/*****************************/
}
【参考代码】
inti,j=0;
doubleav=0.0;
for(i=0;iav=av+a[i].s;
av=av/N;
/*求平均值*/
for(i=0;iif(a[i].s/*将低于平均值的学生记录存入结构体b中*/
*n=j;
/*指针传回低于平均值的学生人数*/
returnav;
/*返回平均值*/
/*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把分数最高的学生数据放在b所指的数组中,注意:
分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
注意:
部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
*/
#include
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b)
{
/**************Begin*************/
/*************End***************/
}
intmain()
{STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};
STRECh[N];
inti,n;FILE*out;
n=fun(s,h);
printf("The%dhighestscore:
\n",n);
for(i=0;iprintf("%s%4d\n",h[i].num,h[i].s);
printf("\n");
out=fopen("debug\\out.dat","w");
for(i=0;ifprintf(out,"%s%d\n",h[i].num,