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 "); 73 su *p = head->next; 74 while(p!=NULL) 75 { 76 printf("%d: %d ", 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(" Average = %f ", ave); 96 97 su *pa = head->next; 98 printf("成绩大于平均分的为 "); 99 while (pa != NULL) 100 { 101 if (pa->course > ave) // 打印分数大于平均分的学生科目信息 102 { 103 printf("id: %d, fuck= %d ", pa->id, pa->course); 104 } 105 pa = pa->next; 106 } 107 system("pause"); 108 }