C语言 统计成绩

统计成绩

给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计算法:
(1) 查找最高分和最低分的学生,并列出其姓名与分数
(2) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次

数据结构的设计

顺序列表有利于数据的添加,删除和查找,而且容易编写代码。
创建链表、排序、输出函数
void create_xu( )
功能:创建学生信息数组,进行排序和输出需要的相关信息。
具体实现:首先创建链表,将学生信息存入该链表中,经过冒泡排序法将无序的学生信息进行按分数降序排序,在输出该数组的第一个和最后一个学生的信息(分数最高、最低),最输出每个学生信息。

源代码

#define m 40//定义m的大小,并且为全局变量
#include<stdio.h>//引用输入输出库
#include<malloc.h>

typedef struct//创建链表
{
	char name[15];//定义name[]类型
	int score;//定义score类型
}student;//链表简写为student

typedef struct//创建链表
{
	student ci[m];//ci类型为student
	int n;//n为int类型,主要用来说明学生数量
}shuzu;//链表简写为shuzu

void create_xu(  )//创建函数
{
	int i,j,k;//定义i,j,k类型
	shuzu *p;//创建一个shuzu类型的空链表p
	p=(shuzu *)malloc(sizeof(shuzu));//给p存储空间大小
	printf("输入学生人数:");//输出
	scanf("%d",&p->n);//输入学生人数
	k=p->n;//赋值
	for(i=0;i<k;i++)//输入学生的相关信息
	{
		printf("输入第%d个学生的名字:",i+1);
		scanf("%s",p->ci[i].name);
		
		printf("输入第%d个学生的分数:",i+1);
		scanf("%d",&p->ci[i].score); 
	}
	
	for(i=0;i<k-1;i++)//将学生的信息按分数利用冒泡进行降序排列
	{
		for (j=i+1;j<k;j++)
		{
			if(p->ci[i].score < p->ci[j].score)
			{
				p->ci[k]=p->ci[i];
				p->ci[i]=p->ci[j];
				p->ci[j]=p->ci[k];
			}
		}
	}

	//输出学生的第一名和最后一名
	printf("输出分数最高和最低:\n");
	printf("%s %d \n",p->ci[0].name,p->ci[0].score);
	printf("%s %d \n",p->ci[k-1].name,p->ci[k-1].score);

	//将所有学生信息按降序输出
	printf("输出排完序的成绩:\n");
	for (i=0;i<k;i++)
	{
		printf("%s %d \n",p->ci[i].name,p->ci[i].score);
	}
}
main()
{
	
	create_xu();//引用创建的函数
}

结果

在这里插入图片描述

  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值