问答题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把指定分数范围之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函数值返回。
例如,输入的分数是80和89,则应当把分数低于80和高于89的学生数据进行输出,不包含80分和89分的学生数据。主函数中把80放在low中,把89放在heigh中。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序
#include <stdio.h>
#define N 16
typedef struct
char num[10];
int s;
STREC;
int fun(STREC *a,STREC *b,int 1,int h)

main ()

STREC s[N]="GA005",55,"GA003",96,
"GA002",80,"GA004",68,"GA001",88,
"GA007",74,"GA008",85,"GA006",99,
"GA015",90,"GA013",53,"GA012",66,
"GA014",82,"GA0ll",73,"GA017",69,
"GA018",64,"GA016",86;
STEC h[N],tt;
FILE *out;
int i,j,n,low,heigh,t;
printf("Enter 2 integer number low & heigh:");
scanf("%d%d",&low,&heigh);
if(heigh<low)

t=heigh;
heigh=low;
low=t;

n=fun(s,h,low,heigh);
printf("The student ’s data out%d--%d:\n",low,heigh);
for(i=0;i<n;i++)
printf("%s%4d\n",h[i].num,h[i].s);
/*输出指定分数范围内的学生记录*/
printf("\n");
out=fopen("out23.dat","w");
fprintf(out,"%d\n",n);
n=fun(s,h,70,79);
for(i=0;i<n-1;i++)
/*分数在70~79之外的学生记录按分数从低到高排列*/
for(j=i+l;i<n;j十+)
if(h[i].s>h[j].s)

tt=h[i];
h[i]=h[j];
h[j]=tt;

for(i=0;i<n;i++)
fprintf(out,"%4d\n",h[i].s);
fprintf(out,"\n");
fclose(out);

【参考答案】

int fun (STREC *a, STREC *b, int l, int h)
{
int ......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

填空题
下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从低到高的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include <conio.h> #include <string.h> #include <stdio.h> #include <alloc.h> #define N 10 typedef struct SS char num[10]; int s; STU; STU *fun(STU a[],int m) STU b[N],*t; int i, j,k; *************found************* *t=calloc(m,sizeof(STU)); for(i=0;i<N;i++) b[i]=a[i]; for(k=0;k<m;k++) *************found************* for (i=j=0;i<N;j++) if(b[i].s<b[j],s) j=i; *************found************* t[k].s=b[j].s; b[j].s=100; return t; outresult(STU a[],FILE *pf) int i; for(i=0;i<N;i++) fprintf(pf, NO=%S Mark=%d n , a[i].num,a[i].S); fprintf(pf, n n ); main() STU a[N]= A01 ,77, A02 ,85, A03 ,96, A04 ,65, A05 ,75, A06 ,96, A07 ,76, A08 ,63, A09 ,69, A10 ,78; STU *pOrder; int i,m; clrscr(); printf( *****THE RESULT***** n ); outresult(a,stdout); printf( nGive the number of the students who have lower score: ); scanf( %d ,&m); while(m>10) printf( nGive the number of the students who have lower score: ); scanf( %d ,&m); pOrder=fun(a,m); printf( *****THE RESULT***** n ); printf( The low: n ); for(i=0;i<m;i++) printf( %s %d n ,porder[i].num, porder[i].s); free(porder);