基于visual Studio2013解决C语言竞赛题之0808打印链表




题目


解决代码及点评

/*
功能:设链表中每个结点包括学号、成绩、和指针三个字段, 试编程序将大于平均成绩的各个结点打印出来。

 
*/

#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)拷贝代码与运行


程序运行结果





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值