1. /*-------------------------------------------------------
    2. 【程序设计】
    3. ---------------------------------------------------------
    4. 题目:学生的记录由学号和成绩组成。N名学生的数据已放入主函数中的结构体数组s中,
    5. 请编写函数fun,其功能是:把高于等于平均分的学生数据放在b所指的数组中,
    6. 高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
    7. 注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
    8. 你编写的若干语句。
    9. -------------------------------------------------------*/
    10. #include <stdio.h>
    11. #define N 12
    12. void wwjt ( );
    13. typedef struct
    14. {
    15. char num[10];
    16. int s;
    17. } STREC;
    18. double fun( STREC *a, STREC *b, int *n )
    19. {
    20. /**********Program**********/
    21. int i;
    22. double av = 0.0;
    23. *n=0;
    24. for(i=0;i<N;i++)
    25. av = av+a[i].s;
    26. av = av/N;
    27. for(i=0;i<N;i++)
    28. if(av<=a[i].s){
    29. b[*n]=a[i];
    30. *n=*n+1;
    31. }
    32. return av;
    33. /********** End **********/
    34. }
    35. void main()
    36. {
    37. STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
    38. {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
    39. {"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
    40. STREC h[N];
    41. int i, n;
    42. double ave;
    43. ave=fun( s,h,&n );
    44. printf("The %d student data which is higher than %7.3f:\n",n,ave);
    45. for(i=0;i<n; i++)
    46. printf("%s %d\n",h[i].num,h[i].s);
    47. printf("\n");
    48. wwjt ( );
    49. }
    50. void wwjt( )
    51. {
    52. FILE *in, *out ;
    53. STREC h[N];
    54. int i,j, n;
    55. double ave;
    56. STREC s[N];
    57. in=fopen("in.dat","r");
    58. if(in==NULL)
    59. {
    60. printf("Please Verify The Currernt Dir..It May Be Changed");
    61. }
    62. out=fopen("out.dat","w");
    63. if(out==NULL)
    64. {
    65. printf("Please Verify The Current Dir.. It May Be Changed");
    66. }
    67. for(j=0;j<10;j++)
    68. {
    69. for(i=0; i<N; i++)
    70. {
    71. fscanf(in,"%s %d", &s[i].num, &s[i].s);
    72. }
    73. ave=fun( s,h,&n );
    74. fprintf(out, "%d\n%7.3f\n", n, ave);
    75. }
    76. fclose(in);
    77. fclose(out);
    78. }