/* 功能:设链表中每个结点包括学号、成绩、和指针三个字段, 试编程序将大于平均成绩的各个结点打印出来。 */ #include<stdio.h> #include<stdlib.h> #define N 10 //10名同学 struct student //创建链表 { int ID; int course; struct student *pNext; }; typedef struct student STU; STU *init(int id, int cur) //设置头结点 { STU *p = (STU *)malloc(sizeof(STU)); if (p == NULL)return NULL; p->ID = id; p->course = cur; p->pNext = NULL; return p; } void insert(STU *pHead, int id, int cur) //插入结点 { STU *pNode = (STU *)malloc(sizeof(STU)); if (pNode == NULL)exit; pHead->pNext = pNode; pNode->ID = id; pNode->course = cur; pNode->pNext = NULL; } int count(STU *pHead); //求和 void showAll(STU *pHead); double getAverage(STU *pHead,int n); void main() { STU *pHead = init(NULL,NULL); //头结点没有内容,next指向第一个学生 int i = 1; //学号 STU *p = pHead; //当前结点位置 while (i <= N) //总共创建10个结点,每个结点代表一个学生 { insert(p, i, rand() % 40 + 60); //插入一个学生信息 i++; p = p->pNext; //当前指针后移 } showAll(pHead); //输出链表信息,所有学生信息 double ave = getAverage(pHead,N); //获得平均分数 printf("\nAverage = %f\n",ave); STU *pa = pHead->pNext; while (pa != NULL) { if (pa->course > ave) // 打印分数大于平均分的学生科目信息 { printf("ID: %d,\tachi = %d\n",pa->ID,pa->course); } pa = pa->pNext; } system("pause"); } double getAverage(STU *pHead, int n) // 计算平均分 { return count(pHead)/(double)n; } void showAll(STU *pHead) // 打印所有学生信息 { STU *pa = pHead->pNext; while (pa != NULL) //输出链表信息 { printf("%d:\t%d\n", pa->ID, pa->course); pa = pa->pNext; } } int count(STU *pHead) // 计算成绩之和 { STU *pa = pHead->pNext; int sum = 0; while (pa != NULL) { sum += pa->course; pa = pa->pNext; } return sum; }
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行