C语言题库第8章 结构体和共同体.docx
- 文档编号:28038398
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:35
- 大小:32.49KB
C语言题库第8章 结构体和共同体.docx
《C语言题库第8章 结构体和共同体.docx》由会员分享,可在线阅读,更多相关《C语言题库第8章 结构体和共同体.docx(35页珍藏版)》请在冰豆网上搜索。
C语言题库第8章结构体和共同体
第八章结构体和共同体
一、单项选择
1.若有以下定义:
structlink
{
intdata;
structlink*next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。
则能把c插入到a和b之间形成新的链表的语句是(C)
2.若有以下程序段:
inta=1,b=2,c=3;
structdent{
intn;int*m;
}s[3]={{101,&a},{102,&b},{103,&c}};
structdent*p=s;
则以下表达式中值为2的是(D)。
3.下面程序的运行结果是(D)。
#iunclude
intmain(){
structcomplx{
intx;inty;
}cnum[2]={1,3,2,7};
printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);
return0;
}
二、程序设计
1./*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,
它的功能是:
按分数的高低排列学生的记录,高分在前。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
voidfun(STRECa[])
{
/*********Begin*********/
/*********End**********/
}
intmain()
{
FILE*wf,*in;
STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};
inti;
fun(s);
printf("Thedataaftersorted:
\n");
for(i=0;i printf("%s%4d\n",s[i].num,s[i].s); printf("\n"); /******************************/ in=fopen("in001.dat","r"); i=0; while(! feof(in)) { fscanf(in,"%s%d",s[i].num,&s[i].s); i++; } fun(s); wf=fopen("out.dat","w"); for(i=0;i fprintf(wf,"%s%4d\n",s[i].num,s[i].s); fclose(wf); fclose(in); /*****************************/ return0; } 【参考代码】 inti,j; STRECt; for(i=0;i for(j=0;j if(a[j].s {t=a[j];a[j]=a[j+1];a[j+1]=t;} 2./*某学生的记录由学号、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**************/ } intmain() { FILE*wf,*in; 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;i printf("%4.1f\n",s.s[i]);/*输出各科成绩*/ printf("\nave=%7.3f\n",s.ave);/*输出平均分*/ /******************************/ in=fopen("in24.dat","r"); wf=fopen("out24.dat","w"); fscanf(in,"%s\n",s.num); for(i=0;i<8;i++) fscanf(in,"%lf\n",&s.s[i]); fun(&s); fprintf(wf,"ave=%7.3f\n",s.ave); fclose(in); fclose(wf); /*****************************/ return0; } 【参考代码】 inti; p->ave=0.0; for(i=0;i p->ave=p->ave+p->s[i]; /*求各门成绩的总和*/ p->ave=p->ave/N;/*求平均分*/ 3./*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"); } intmain() { FILE*wf,*in; doubles[N]={85,76,69,85,91,72,64,87},ave; inti; STREC*h; h=creat(s); outlist(h); ave=fun(h); printf("ave=%6.3f\n",ave); /******************************/ in=fopen("in25.dat","r"); i=0; while(! feof(in)) { fscanf(in,"%d\n",&s[i]); i++; } h=creat(s); outlist(h); ave=fun(h); wf=fopen("out25.dat","w"); fprintf(wf,"%6.3f\n",ave); fclose(wf); fclose(in); /*****************************/ return0; } 【参考代码】 doubleav=0.0; STREC*p=h->next; /*p直接指向"头节点"的下一个节点,即第一个成绩*/ while(p! =NULL) {av=av+p->s;/*求总分数*/ p=p->next; } returnav/N;/*返回平均值*/ 4./*已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。 请编写函数fun, 该函数的功能是: 找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。 已给出函数的首部,请完成该函数。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include #include #defineN10 typedefstructss {charnum[10]; ints; }STU; fun(STUa[],STU*s) { /***********Begin**************/ /***********End**************/ } intmain() { FILE*wf,*in; 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;i printf("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); /******************************/ in=fopen("in28.dat","r"); i=0; while(! feof(in)) { fscanf(in,"%s%d\n",a[i].num,&a[i].s); i++; } fun(a,&m); wf=fopen("out28.dat","w"); fprintf(wf,"%s%d\n",m.num,m.s); fclose(wf); fclose(in); /*****************************/ return0; } 【参考代码】 inti; *s=a[0];/*先认为第1个值最小*/ for(i=0;i if(s->s>a[i].s) *s=a[i]; 5./*学生的记录由学生和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是: 把分数最低的学生数据放在h所指的数组中。 注意: 分数最低的学生可能不止一个,函数返回分数最低的学生的人数。 注意: 部分源程序给出如下。 请勿改动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",91},{"GA017",64},{"GA018",64},{"GA016",72}}; STRECh[N]; inti,n; FILE*out,*in; n=fun(s,h); printf("The%dlowestscore: \n",n); for(i=0;i printf("%s%4d\n",h[i].num,h[i].s); printf("\n"); /******************************/ in=fopen("in22.dat","r"); out=fopen("out22.dat","w"); i=0; while(! feof(in)) { fscanf(in,"%s%d\n",h[i].num,&h[i].s); i++; } n=fun(s,h); fprintf(out,"%d\n",n); for(i=0;i fprintf(out,"%4d\n",h[i].s); fclose(in); fclose(out); /******************************/ return0; } 【参考代码】 inti,j=0,n=0,min; min=a[0].s; for(i=0;i if(a[i].s min=a[i].s; for(i=0;i if(a[i].s==min) { *(b+j)=a[i];j++;n++; } returnn; 6./*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun, 它的功能是: 把分数最高的学生数据放在h所指的数组中。 注意: 分数高的学生可能不只一个,函数返回分数最高学生的人数。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #defineN16 typedefstruct {charnum[10]; ints; }STREC; intfun(STREC*a,STREC*b) { /*************Begin*************/ /*************End*************/ } intmain() { FILE*wf,*in; STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}}; STRECh[N]; inti,n; n=fun(s,h); printf("The%dhighestscore: \n",n); for(i=0;i printf("%s%4d\n",h[i].num,h[i].s);/*输出最高分学生的学号和成绩*/ printf("\n"); /******************************/ in=fopen("in27.dat","r"); i=0; while(! feof(in)) { fscanf(in,"%s%d\n",s[i].num,&s[i].s); i++; } n=i; n=fun(s,h); wf=fopen("out27.dat","w"); fprintf(wf,"%d\n",n); for(i=0;i fprintf(wf,"%s%4d\n",h[i].num,h[i].s); fclose(wf); fclose(in); /*****************************/ return0; } 【参考代码】 inti,j=0,max=a[0].s;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言题库第8章 结构体和共同体 语言 题库 结构 共同体
![提示](https://static.bdocx.com/images/bang_tan.gif)