问答题 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记录的ave成员中。例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#define N 8typedef struct{char num[10];double s[N];double ave;}STREC;void fun(STREC*a){}main(){STREC s={''GA005'',85.5,76,69.5,85,91,72,64.5,87.5};int i;void NONO();fun(&s);printf(''The%s'sstudentdata:\n''s.num);for(i=0;i<N;i++)printf(''%4.1f\n'',s.s[i]);printf(''\nave=%7.3f\n'',s.ave);NONO();}void NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*out;int i,j;STREC s[10]={{''GA005'',85.5,76,69.5,85,91,72,64.5,87.5},{GA001'',82.5,66,76.5,76,89,76,46.5,78.5},{''GA002'',72.5,56,66.5,66,79,68,46.5,58.5},{''GA003'',92.5,76,86.5,86,99,86,56.5,88.5},{''GA004'',82,66.5,46.5,56,76,75,76.5,63.5},{''GA006'',75.5,74,71.5,85,81,79,64.5,71.5},{''GA007'',92.5,61,72.5,84,79,75,66.5,72.5},{''GA008'',72.5,86,73.5,80,69,63,76.5,53.5},{''GA009'',66.5,71,74.5,70,61,82,86.5,58.5},{''GA010'',76,66.5,75.5,60,76,71,96.5,93.5},};out=fopen(''out.dat'',''W'');for(i=0;i<10;i++)fun(&s[i]);fprintf(out,''%7.3f\n'',s[i].ave);fclose(out);}
【正确答案】正确答案:void fun(STREC*a) } int i: a一>ave=0.0; for(i=0;i<N;i++) a一>ave=a一>ave+a一>s[i];/*求各门成绩的总和*/ a一>ave=a→ave/N;/*求平均分*/ }
【答案解析】解析:本题考查自定义形参的相关知识点,程序流程是这样的:在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a,此时,引用成员的方式可以使用指向运算符,即 a一>ave和a一>s[i],当然也可用(*a).ave和(*a).s[i]。