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