N名学生的成绩己在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
注童:部分源程序给出如下.
请勿改动主函数main和其他函数中的任何内容,仅在函数6m的花括号中填入所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio. h>
#define N 8
struct slist
double s;
struct slist *next;
;
typedef struct slist STREC;
double fun(STREC *h)
STREC *creat(double *s)/*创建链表*/
STREC *h,*p, *q;
int i=0;
h=p= ( STREC*)malloc (sizeof (STREC));
p->s=0;
while (i<N)
q= ( STREC*)malloc (sizeof (STREC));
q->s=s Ii]; i++;p->next=q;p=q;
p->next=0;
return h;
outlist (STREC *h)
STREC *p;
p=h->next;
printf ("head ");
do
printf ("->%4. if ",p->s);
p=p->next; /*输出各成绩*/
while (p !=0)
main ()
double s [N] = 85,76, 69, 85, 91,72, 64,
87,ave;
STREC *h;
h=creat (s);
outlist (h);
ave=fun (h);
printf ("ave=%6.3f\n ", ave);
参考答案:double fun(STREC *h)
{
double av=0.0;
STREC *p-h->next; /*p直接指向“头结点”的下一个结点,即第—个成绩*/
while(p!=NULL)
{aY=ay+p->s; /*求总分数*/
p=p->next;
}
return ay/N; /*返回平均值*/
}
解析: 本题是关于链表问题,所以,一定要弄清表示出使指针变量p指向下一个“结点”的方法及表示结束的判断,本题中,因为“头结点”中没有数值,所以程序中让p直接指向“头结点”的下一个结点,使用语句STREC*p=h->next,当然也可将p一开始就指向“头结点”。