N名学生的成绩己在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:求出平均分,由函数值返回。 例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。 注童:部分源程

admin2010-09-14  23

问题 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一开始就指向“头结点”。
转载请注明原文地址:https://kaotiyun.com/show/5WID777K
0

最新回复(0)