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

admin2021-02-25  28

问题 N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。
    例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1  #include<stdio.h>
2  #include<stdlib.h>
3  #define N 8
4  struct slist
5  {double s;
6  struct slist *next;
7  };
8    typedef struer slist STREC;
9  double fun(STREC *h)
10  {
11
12  }
13   STREC * creat(double * s)
14  {STREC *h,*p,*q;int i=0;
15   h=p=(STREC *)malloc(sizeof(STREC));p->s=0;
16    while(i<N)
17  {q=(STREC *) malloc(sizeof(STREC));
18   q->s=s;i++;p->next=q;p=q;
19   }
20   p->next=0;
21    return h;
22  }
23   outlist(STREC *h)
24  {STREC *p;
25  p=h->next;printf(’’head’’);
26   do
27  {printf(’’->%4.1f’’,p->s);p=p-> next;)
28   while(p!=0);
29   printf(’’\n\n’’);
30  }
31  main()
32  {double s[N]={85,76,69,85,91,72,64,87},ave;
33   void NONO();
34    STREC *h;
35  h=creat(s);outlist(h);
36     ave=fun(h);
37  printf(’’ave=%6.3f\n’’,ave);
38   NONO();
39  }
40  void NONO()
41  {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。  */
42    FTLE *in,*out;
43   int i,j;double s[N],ave;
44   STREC *h;
45  in=fopen(’’in.dat’’,’’r’’);
46   out=fopen(’’out.dat’’,’’w’’);
47    for(i=0;i<10;i++)  {
48  for(j=0 ; j<N;j++)fscanf(in,’’%1f,’’,&s[j]);
49  h=creat(s);
50     ave=fun(h);
51  fprintf(out,’’%6.31f\n’’,ave);
52   }
53   fclose(in);
54   fclose(out);}

选项

答案1 STREC *p=h->next; /*由于头结点中没有存放数据*/ 2 double av=0.0; /*对计算成绩平均值的变量进行初始化*/ 3 int n=0; 4 while(p!=NULL) {/*判断链表是否结束*/ 5 av=av+p->s; /*对成绩进行累加*/ 6 p=p->next; /*到下一个结点位置*/ 7 n++; /*人数加1 */ 8 } 9 av/=n; /*计算成绩平均值*/ 10 return av; /*返回成绩平均值*/

解析 (1)首先定义存放平均值的变量,并对其初始化。(2)在循环中,依次取链表中存放的成绩,并对其求和。(3)最后计算平均值,并返回值。
转载请注明原文地址:https://kaotiyun.com/show/OItp777K
0

最新回复(0)