![](https://i-blog.csdnimg.cn/blog_migrate/72c8e7044443e839ce8b8adacfe165db.png)
题目
解决代码及点评
/*
功能:设链表中每个结点包括学号、成绩、和指针三个字段, 试编程序将大于平均成绩的各个结点打印出来。
*/
#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)拷贝代码与运行
程序运行结果