程序功能:建立一个单向链表,头指针是list,链表中每个结点包含姓名、基本工资信息,编写count_list函数统计链表中超过平均基本工资的人数。要求在主函数中建立单向链表(注:当输入基本工资为0时,表示输入结束。),然后调用count_list函数统计链表中超过平均基本工资的人数,最后输出统计结果和平均基本工资。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct person {
char name[20];
double wage;
struct person* next;
};
struct person* AddNode(struct person* pNew,struct person* head)
{
struct person* p;
if (head == NULL)
{
head = pNew;
}
else
{
for (p = head; p->next != NULL; p = p->next);
p->next = pNew;
}
return head;
}
double cout_list(struct person* head)
{
double average = 0;
struct person* p;
int ct_over = 0, ct = 0;
if (head == NULL)
{
printf("无职工信息,统计失败!\n");
return 0;
}
else
{
for (p = head; p != NULL; p = p->next)
{
ct++;
average += p->wage;
}
average /= ct;
for (p = head; p != NULL; p = p->next)
{
if (p->wage > average)
ct_over++;
}
printf("平均基本工资为 %.2lf 元,有 %d 人超过平均值\n", average, ct_over);
}
return average;
}
int main()
{
struct person* head = NULL;
char n[20];
double m;
while (1)
{
struct person* p = (struct person*)malloc(sizeof(struct person));
printf("\n请输入工资(输入0结束):");
scanf("%lf", &m);
if (m == 0)
{
free(p);
break;
}
printf("请输入姓名:");
scanf("%s", n);
if (p == NULL)
break;
strcpy(p->name, n);
p->wage = m;
p->next = NULL;
head = AddNode(p, head);
}
cout_list(head);
return 0;
}