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

admin2018-09-27  32

问题 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 struct 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);
36  printf(’’ave=%6.3f\n’’,ave);
38  NONO();
39  }
40  void NONO()
41  {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
42  FILE *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=p0>next;/*到下一个结点位置*/ 7 n++; /*人数加1*/ 8 } 9 av/=n; /*计算成绩平均值*/ 10 return av; /*返回成绩平均值*/

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

最新回复(0)