| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1954 人关注过本帖
标题:平均成绩排序 请大神帮忙看看那里错了
只看楼主 加入收藏
哈罗德的路
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2020-4-28
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
平均成绩排序 请大神帮忙看看那里错了
假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的 结构类型。输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息。如果 平均分相同,按输入的先后顺序排列。输入样例:在这里给出一组输入。例如:
3
101 Zhang 78 87 85
102 Wang 91 88 90
103 Li 75 90 84
输出样例:在这里给出相应的输出。例如:
102 Wang 89.67
101 Zhang 83.33
103 Li 83.00


代码:
#include "stdio.h"
struct Student
{
    int num;
    char name[20];
    int score[3];
    float aver;
};
struct Student stud[50];//定义结构体数组
void average (struct Student stud[],int n)
{
    int i,j,c[20];
    float sum=0;
    for(i=0;i<n;i++)
    {
        scanf("%d%s",&stud[i].num,stud[i].name);
        for(j=0;j<3;j++)
            scanf("%d",&stud[i].score[j]);
        sum=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
        stud[i].aver=sum/3;   
    }
}
void sort(struct Student stud[],int n)//定义函数的括号内用结构体变量,不能用成员名
{
    struct Student temp;//定义中间变量,使排序后的成绩所在的变量(包含姓名,学号)整体,在交换位置时全部交换
    int i,j,k;
    average(stud,n);
    for(i=0;i<n-1;i++)//冒泡法
    {        
        for(j=0;j<n-i-1;j++)
            k=j+1;
            if(stud[j].aver<stud[k].aver)
                k=j;
        if(k!=i)//将排序后的成绩所在的变量(包含姓名,学号)整体,进行全部交换  
        {
            temp=stud[k];
            stud[k]=stud[i];
            stud[i]=temp;
        }
    }        
}

int main()
{
    int n,i;
    scanf("%d",&n);            
    sort(stud,n);
    for(i=0;i<n;i++)
    {
        printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].aver);
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: struct score int Student 成绩 
2020-05-09 23:19
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:7 
冒泡不对,sort函数的第二个for语句
2020-05-10 08:23
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:566
专家分:3690
注 册:2019-7-29
收藏
得分:7 
程序代码:
#include <stdio.h>
#include <stdlib.h>

struct Student
{
    int num;
    char name[20];
    int score[3];
    float aver;
};

void average (struct Student stud[],int n)
{
    int i,j;
    float sum=0;
    for(i=0; i<n; i++)
    {
        sum=0;
        scanf("%d%s",&stud[i].num,stud[i].name);
        for(j=0; j<3; j++)
        {
            scanf("%d",&stud[i].score[j]);
            sum+=stud[i].score[j];
        }
        stud[i].aver=sum/3;
    }
}

int comp(const void *a,const void *b)
{
    float rs;
    rs=(*( struct Student *)b).aver-(*( struct Student *)a).aver;

    return rs>0?1:-1;
}

void sort(struct Student stud[],int n)//定义函数的括号内用结构体变量,不能用成员名
{
    average(stud,n);

    qsort(stud,n,sizeof(struct Student),comp);
}

int main()
{
    int n,i;
    struct Student stud[50];//定义结构体数组

    scanf("%d",&n);
    sort(stud,n);
    for(i=0; i<n; i++)
    {
        printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].aver);
    }

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-05-10 08:48
哈罗德的路
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2020-4-28
收藏
得分:0 
回复 3楼 纯蓝之刃
谢谢👍👍
2020-05-10 23:01
qing_yx
Rank: 2
等 级:论坛游民
威 望:1
帖 子:25
专家分:70
注 册:2020-4-26
收藏
得分:7 
void sort(struct Student stud[], int n)//定义函数的括号内用结构体变量,不能用成员名
{
    struct Student temp;//定义中间变量,使排序后的成绩所在的变量(包含姓名,学号)整体,在交换位置时全部交换
    int i, j, k;
    average(stud, n);
    for (i = 0; i<n - 1; i++)//冒泡法
    {
        for (j = 0; j < n - i - 1; j++)
        {
            k = j + 1;
            if (stud[j].aver < stud[k].aver)
            {
                temp = stud[k];
                stud[k] = stud[j];
                stud[j] = temp;
            }
        }
    }
}
2020-05-11 11:05
田心乡隹
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2020-5-9
收藏
得分:0 
#include<stdio.h>
struct cj
{
    int a1;               /*学号*/
    char a2[10];          /*名字*/
    int a3;               /*语*/
    int a4;               /*数*/
    int a5;               /*英*/
    int a6;               /*平均*/

}chj[50];
void Spread(int n,struct cj chj[])
{
    int i,j,p;
    struct cj temp;
    for(j=0;j<n;j++)
    {
        for(i=j,temp=chj[i],p=i;i<n;i++)
        {
            if(temp.a6<chj[i].a6)
            {
                temp=chj[i];
                p=i;
            }
        }
        chj[p]=chj[j];
        chj[j]=temp;
        
        

    }
}
int main()
{
    int i,n;
   
    struct cj chj[50];
   
   
    printf("请输入学生人数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("请输入每个学生学号、姓名、语文分数、数学分数、英语分数(中间用空格分开回车结束例:1 Zhang 78 87 85):");
        scanf("%d %s %d %d %d",&chj[i].a1,&chj[i].a2,&chj[i].a3,&chj[i].a4,&chj[i].a5);
        chj[i].a6=(chj[i].a3+chj[i].a4+chj[i].a5)/3;
    }
    Spread(n,chj);                   /*从大到小排列*/
    printf("学生的平均分从大到小是:\n");
    for(i=0;i<n;i++)
    {
        printf("%d %s %d\n",chj[i].a1,chj[i].a2,chj[i].a6);
    }
    return 0;

}
新手试试。。。
2020-05-17 18:28
快速回复:平均成绩排序 请大神帮忙看看那里错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017094 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved