#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double s[N]={85,76,69,85,91,72,64,87};
double fun( STREC *h )
{
double ave=0.0;
STREC *p=h->next;
while(p!=NULL)
{
ave=ave+p->s;
p=p->next;
}
return ave/N;
}
/*
题目要求求链表中数据域的平均值,应首先使用循环语句遍历链表,
求各节点数据域中数值的和,再对和求平均分。遍历链表时应定义
一个指向节点的指针p,因为头结点中没有数值,所以程序中让p直接
指向头节点的下一个节点,使用语句STREC *p=h->next.
*/
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[i]; i++; p->next=q; p=q;
}
p->next=0;
return h;
}
int outlist( STREC *h)
{ STREC *p;
p=h->next; printf("head");
do
{ printf("->%4.1f",p->s);p=p->next;}
while(p!=0);
printf("\n\n");
}
main()
{ double s[N]={85,76,69,85,91,72,64,87},ave;
void NONO ( );
STREC *h;
h=creat( s ); outlist(h);
ave=fun( h );
printf("ave= %6.3f\n",ave);
NONO();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i,j ; double s[N],ave;
STREC *h ;
in = fopen("..\\in.dat","r") ;
out = fopen("..\\out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
for(j=0 ; j < N; j++) fscanf(in, "%lf,", &s[j]) ;
h=creat( s );
ave=fun( h );
fprintf(out, "%6.3lf\n", ave) ;
}
fclose(in) ;
fclose(out) ;
}
求链表数据域的平均值
最新推荐文章于 2023-10-06 11:39:32 发布
该博客主要展示了如何创建一个链表结构,计算链表中数据域的平均值,并进行文件读写操作。程序首先通过`creat`函数生成链表,然后使用`fun`函数计算链表中元素的平均值。最后,`main`函数调用这些功能,读取文件中的数据,计算平均值并输出到另一个文件中。
摘要由CSDN通过智能技术生成