链表实现输出大于平均分的学生信息

  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 }

原文地址:https://www.cnblogs.com/lanjianhappy/p/6533400.html