C语言题库第8章 结构体和共同体文档格式.docx
《C语言题库第8章 结构体和共同体文档格式.docx》由会员分享,可在线阅读,更多相关《C语言题库第8章 结构体和共同体文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
}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"
GA013"
GA012"
GA014"
91},
GA011"
66},{"
GA017"
GA018"
GA016"
72}};
inti;
fun(s);
printf("
Thedataaftersorted:
\n"
);
for(i=0;
i<
N;
i++)
%s%4d\n"
s[i].num,s[i].s);
/******************************/
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"
fprintf(wf,"
fclose(wf);
fclose(in);
/*****************************/
return0;
【参考代码】
inti,j;
STRECt;
for(i=0;
i<
i++)
for(j=0;
j<
N-1-i;
j++)
if(a[j].s<
a[j+1].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。
注意:
#defineN8
doubles[N];
doubleave;
}STREC;
voidfun(STREC*p)
/************Begin*************/
/************End**************/
intmain()
{
STRECs={"
GA005"
85.5,76,69.5,85,91,72,64.5,87.5};
fun(&
s);
The%s'
sstudentdata:
s.num);
/*输出学号*/
i++)
%4.1f\n"
s.s[i]);
/*输出各科成绩*/
\nave=%7.3f\n"
s.ave);
/*输出平均分*/
in24.dat"
out24.dat"
%s\n"
s.num);
8;
%lf\n"
&
s.s[i]);
ave=%7.3f\n"
inti;
p->
ave=0.0;
for(i=0;
p->
ave=p->
ave+p->
s[i];
/*求各门成绩的总和*/
ave/N;
/*求平均分*/
3./*N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,它的功能是:
求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
*/
#include<
stdlib.h>
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));
s=0;
while(i<
N)
{q=(STREC*)malloc(sizeof(STREC));
q->
s=s[i];
i++;
next=q;
p=q;
next=0;
returnh;
outlist(STREC*h)
STREC*p;
p=h->
next;
head"
do
{printf("
->
%4.1f"
p->
p=p->
/*输出各成绩*/
while(p!
=NULL);
\n\n"
doubles[N]={85,76,69,85,91,72,64,87},ave;
STREC*h;
h=creat(s);
outlist(h);
ave=fun(h);
ave=%6.3f\n"
ave);
in25.dat"
%d\n"
s[i]);
h=creat(s);
out25.dat"
%6.3f\n"
doubleav=0.0;
STREC*p=h->
/*p直接指向"
头节点"
的下一个节点,即第一个成绩*/
=NULL)
{av=av+p->
s;
/*求总分数*/
}
returnav/N;
/*返回平均值*/
4./*已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。
请编写函数fun,
该函数的功能是:
找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。
已给出函数的首部,请完成该函数。
*/
string.h>
#defineN10
typedefstructss
ints;
}STU;
fun(STUa[],STU*s)
/***********Begin**************/
STUa[N]={{"
A01"
81},{"
A02"
89},{"
A03"
66},{"
A04"
87},{"
A05"
77},
{"
A06"
90},{"
A07"
79},{"
A08"
61},{"
A09"
80},{"
A10"
71}},m;
*****Theoriginaldata*****\n"
No=%sMark=%d\n"
a[i].num,a[i].s);
fun(a,&
m);
*****THERESULT*****\n"