学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。 例如,输入的分数是60和69,则应当把分数在60到69的学生

admin2010-09-14  34

问题 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
   例如,输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中把60放在low中,把69放在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", 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 } };
      STREC 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 between
                 %d--%d: \n ", low, heigh);
    for (i=0; i<n; i++)
     printf("%s %4d\n ",h .num, h.s);
     /*输出指定分数范围内的学生记录*/
   printf("\n ");
   out=fopen ("out74.dat ",  "w")
   fprintf(out, "%d\n ",n)-
   n=fun (s,h, 80, 98);
   for (i=0; i<n-1; i++)
  /* 分数在80~98之间的学生记录按他数从低到高排序*/
   for (j=i+l; j<n; j++)
     if (h .s>h [j] .s)
        {tt=h ;h [ii =h [j] ;h [j] =tt; }
for (i=0; i<n; i++)
   fprintf(out, "%4d\n ",h .s);
fprintf(out, "\n ");
fclose (out);
}

选项

答案int fun (STREC *a, STREC *b, int 1, int h ) { int i, j=0; for (i=0; i<N; i++) if (a [i]. s>-l&&a [i]. s<=h) /*将分数高于1,低于h的学生记录存在于结构体数组b中* / b[j++]=a[i]; return j; /*返回分数范围内的学生人数*/ }

解析 处理此类分段统计问题,可采用多分支选择语句或条件选择语句。此处采用条件选择语句解答,具体见参考答案。使用条件选择语句进行分段统计时应当注意分段范围。
转载请注明原文地址:https://jikaoti.com/ti/FIkiFFFM
0

随机试题
最新回复(0)