注册 登录
编程论坛 C语言论坛

数据结构布置的一道题,求解决

DXJAXXY 发布于 2019-11-14 16:29, 2486 次点击

题目:实现对学生的成绩进行排序、查找,并统计各分数段的人数。
要求:
(1)分析需求,写出用到的数据结构;(诸如一个记录应包括哪些字段数据,每个字段的数据是什么类型的,应用什么数据结构来保存众多的记录)
(2)排序:按学生分数从高到低进行排序,采用冒泡法或其他快速算法,写出c程序实现;
(3)查找:按学生姓名进行查找,采用顺序查找或二分查找,并实现查找结构的打印,写出c程序实现;
(4)统计各分数段的人数(≥90分、80~89分、70~79分、60~69分、60分以下),打印统计的结果,写出c程序实现;
(5)加分项:给出代码运行的结果并分析。
3 回复
#2
葵青2019-11-14 17:51
我是新手,前来观摩观摩
#3
纯蓝之刃2019-11-14 19:07
程序代码:
#include <stdio.h>
#include <string.h>

struct chengji
{
    char name[20];
    float math;
    float chinese;
    float english;
    float sum;
    int rank;
};

struct fenshu
{
    int jiushi;
    int bashi;
    int qishi;
    int liushi;
    int bujige;
};

int main()
{
    struct chengji list[1000]={0};
    struct fenshu mark={0};
    char name[20]={0};

    int n,i,j;

    printf("请输入学生总数:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        printf("\n请输入第%d个学生姓名机成绩:",i);
        scanf("%s%f%f%f",list[i].name,&list[i].math,&list[i].chinese,&list[i].english);
        list[i].sum=list[i].math+list[i].chinese+list[i].english;
    }

    for (j=0;j<n-1;j++)
    {
        for (i=1;i<n-j;i++)
        {
            if(list[i].sum<list[i+1].sum)
            {
                memcpy(&list[0],&list[i+1],sizeof(list)/1000);
                memcpy(&list[i+1],&list[i],sizeof(list)/1000);
                memcpy(&list[i],&list[0],sizeof(list)/1000);
            }
        }
    }

    for (i=1;i<=n;i++)
    {
        list[i].rank=i;
        printf("\n第%d名    姓名:%s,数学:%.2f,语文:%.2f,英语:%.2f,总分:%.2f\n",list[i].rank,list[i].name,list[i].math,list[i].chinese,list[i].english,list[i].sum);

        switch((int)(list[i].sum/3/10))
        {
        case 9:mark.jiushi++;break;
        case 8:mark.bashi++;break;
        case 7:mark.qishi++;break;
        case 6:mark.liushi++;break;
        default:mark.bujige++;break;
        }
    }

    printf("\n平均分大于90分的有%d人,平均分80~90分的有%d人,平均分70~80分的有%d人,平均分60~70分的有%d人,平均分小于60分的有%d人。\n",mark.jiushi,mark.bashi,mark.qishi,mark.liushi,mark.bujige);

    printf("\n请输入学生姓名:");
    scanf("%s",name);

    for(i=1;i<=n;i++)
    {
        if(strstr(list[i].name,name))
        {
            printf("\n第%d名    姓名:%s,数学:%.2f,语文:%.2f,英语:%.2f,总分:%.2f\n",list[i].rank,list[i].name,list[i].math,list[i].chinese,list[i].english,list[i].sum);
            break;
        }
    }

    return 0;
}
#4
DXJAXXY2019-11-16 22:48
回复 4楼 纯蓝之刃
可以使用上数据结构的单链表的知识编写吗?
1