1 //打印大于平均分的学生
2
3 //2017.3.9
4 #include <stdio.h>
5 #include <stdlib.h>
6
7 #define N 7
8 struct student
9 {
10 int id;
11 int course;
12 struct student *next;
13 };
14
15 typedef struct student su;
16
17 //头结点
18 su* init(int id, int cur)
19 {
20 su *p = (su *)malloc(sizeof(su));
21 if (NULL == p)
22 {
23 return NULL;
24 }
25 else
26 {
27 p->id = id;
28 p->course = cur;
29 p->next = NULL;
30 }
31 return p;
32 }
33
34 //插入结点
35 void insert(su *head, int id, int course)
36 {
37 su *p = (su *)malloc(sizeof(su));
38 if (NULL == p)
39 {
40 printf("error");
41 }
42 else
43 {
44 head->next = p;
45 p->id = id;
46 p->course = course;
47 p->next = NULL;//特别注意这里 不然会野指针
48 }
49 }
50 //计算学生成绩之和
51 int cout(su *head)
52 {
53 su *p = head->next;
54 int sum = 0;
55 while (p != NULL)
56 {
57 sum = sum + p->course;
58 p = p->next;
59 }
60 return sum;
61 }
62
63 //计算平均分
64 double getAvg(su *head, int n)
65 {
66 return cout(head) / (double)n;
67 }
68
69 //打印所有成绩
70 void print(su *head)
71 {
72 //printf("dfsfadf\n");
73 su *p = head->next;
74 while(p!=NULL)
75 {
76 printf("%d:\t%d\n", p->id, p->course);
77 p = p->next;
78 }
79 }
80 void main()
81 {
82 su *head = init(NULL, NULL); //头结点没有内容,next指向第一个学生
83 int i = 1; //学号
84 su *p = head; //当前结点位置
85 while (i <= N) //总共创建7个结点,每个结点代表一个学生
86 {
87 insert(p, i, rand() % 40 + 60); //插入一个学生信息
88 i++;
89 p = p->next; //当前指针后移
90 }
91
92 print(head); //输出链表信息,所有学生信息
93
94 double ave = getAvg(head, N); //获得平均分数
95 printf("\nAverage = %f\n", ave);
96
97 su *pa = head->next;
98 printf("成绩大于平均分的为\n");
99 while (pa != NULL)
100 {
101 if (pa->course > ave) // 打印分数大于平均分的学生科目信息
102 {
103 printf("id: %d,\tfuck= %d\n", pa->id, pa->course);
104 }
105 pa = pa->next;
106 }
107 system("pause");
108 }