下列程序的功能是:已知学生的记录由学号和三门学习成绩构成,N名学生的数据已有入 A数组中。找出各科及格的学生中总成绩最高的学生记录(假定最高成绩的记录中唯一的),通过形参返回。 请考生编写函数mmm(STUa[],STU*s)实现程序的要求,最后调用

admin2010-09-05  28

问题 下列程序的功能是:已知学生的记录由学号和三门学习成绩构成,N名学生的数据已有入 A数组中。找出各科及格的学生中总成绩最高的学生记录(假定最高成绩的记录中唯一的),通过形参返回。
   请考生编写函数mmm(STUa[],STU*s)实现程序的要求,最后调用函数readwritedat()把结果输出到文件out.dat中。
   例如:
   KS01  87  60  88
   KS09  97  59  99
   KS11  67  67  60
   则调用该函数后,输出
    the top:KS01,87, 60, 88
   # include <stdio.h>
   # include <string.h>
   # define N 10
   void readwritedat ();
   typedef struct ss{
      char num[10];
      int s1, s2, s3;
   }STU;
   mmm(STU a[],STU *s)
   {
   }
   main ( )
   {
     STU a[N]={
            { "01", 81, 93, 92},
            { "02", 89, 65, 91},
            { "03", 66, 55, 73},
            { "04", 87, 91, 99},
            { "05", 77, 65, 91},
            { "06", 90, 55, 73},
            { "07", 79, 65, 91},
            { "08", 61, 55, 73},
            { "09", 80, 93, 92},
            { "10", 71, 65, 91}
     }m;
     int i;
     for (i=0; i<N; i++ )
     printf ("No=%s Mark=%d\n",a .num, a .s1,a .s2,a.s3);
     mmm (a, &m);
     printf("the highest:  %s,%d\n",m.num,m.s1+m.s2+m.s3);
     readwritedat ( );
  }
  void readwritedat ( )
  {
     FILE *rf, *wf;
     STU a[N] ,m;
     int i;
     rf=fopen ( "in. dat", "r" );
     wf=fopen ( "out. dar", "w" );
     for (i=0; i<10; i++)
     fscanf (rf, "%s%d%d%d", a .hum, &a .s1, &a .s2, &a .s3);
     mmm(a, &m);
     fprintf(wf,"the top:  %s,%d,%d,%d\n",m.num,m.s1,m.s2,m.s3);
     fclose (rf);
     fclose (wf);
  }

选项

答案mmm(STU a[],STU*s) { int i; STU h; /*初始化最高记录*/ h.s1=0; h.s2=0; h.s3=0; /*遍历所有记录*/ for(i=0; i<10; i++) /*挑选合格记录*/ if(a[i].s1>=60&&a[i].s2>=60&&a[i].s3>=60) /*更新最高记录*/ if(h.s1+h.s2+h.s3<a[i].s1+a[i].s2+a[i].s3) h=a[i]; /*返回最高记录*/ *s=h; }

解析 类型:结构体操作。
关键点:根据题目条件进行结构体比较和赋值。
1.遍历结构体数组。
2.进行条件判断。
3.计算相关量。
4.返回结果结构体
转载请注明原文地址:https://kaotiyun.com/show/ruvZ777K
0

最新回复(0)