标题:结构体排序问题求大神
只看楼主
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
结帖率:28.57%
已结贴  问题点数:20 回复次数:6 
结构体排序问题求大神
#include <stdio.h>
#include <string.h>
/*

*/
struct student
{
    int num;
    char name[20];
    float score;
} stu[3];

void score(student stu[]);
void number();



int main()
{
    int d, i;
    printf ("              学生成绩管理系统            \n");
    printf ("********************************************\n");
    printf ("请输入需要统计的学生信息:\n");
        
    do
    {
   
        for (i = 0; i < 3; i++)
        {
            printf ("请输入学生学号:");
            scanf  ("%d", &stu[i].num);
            
            printf ("请输入学生姓名:");
            scanf  ("%s", stu[i].name);
            
            printf ("请输入学生成绩:");
            scanf  ("%f", &stu[i].score);
            printf ("\n");
        }
        printf ("请选择操作:\n");
        printf ("1、按成绩排序:        ");
        printf ("2、按学号排序:        \n");
        
        scanf  ("%d",&d);
        switch(d)
        {
            case 1: score (stu); break;
            case 2: number (); break;
        }
   
    }while(stu[i].num!=0);
}

//成绩排序
void score(student stu[])
{
    int i,j;
    student swap;
    for (i = 0; i < 3; i++);
    {
        for (j = 0; j < 3 - i-1; j++)
        {
            if (stu[j].score < stu[j+1].score)
            {
                swap = stu[j];
                stu[j]= stu[j+1];
                stu[j+1] = swap;
                        
            }
        }
    }
    for (i = 0; i < 3; i++)
    {
        printf("%-10d:%-10s:%10f\n", stu[i].num, stu[i].name, stu[i].score);
    }
   
}

//学号排序
void number()
{
    int i,j;
    student swap;
    for (i = 0; i < 3; i++);
    {
        for (j = 0; j < 3 - i; j++)
        {
            if (stu[i].num > stu[i+1].num)
            {
                swap = stu[i];
                stu[i] = stu[i+1];
                stu[i+1] = swap;
               
            }
        }
    }
    for (i = 0; i < 3; i++)
    {
        printf("%-10d:%-10s:%10f\n", stu[i].num, stu[i].name, stu[i].score);
    }
   
}  

调用两个子函数实行对结构体里面的东东排序,但是输入了却没有排序,原样输出了,求大神指正
搜索更多相关主题的帖子: include 管理系统 number 结构体 统计 
2014-04-21 15:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
有2处for (i = 0; i < 3; i++);   后面多了个分号

总有那身价贱的人给作业贴回复完整的代码
2014-04-21 15:11
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 2 楼 embed_xuel
您看程序还有什么地方不对吗?为什么学生成绩和学号姓名之后原样输出了啊??没有进行排序
2014-04-21 15:15
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
得分:10 
我用VC编译的时候,报错了,改动了稍许:
void score(struct student stu[]);这个声明
void score(struct student stu[])
{
    int i,j;
    struct student swap; // 添加了个struct
void number()
{
    int i,j;
    struct student swap;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3 - i; j++)//这里应该是j < 3 - i-1

最后就是上面的两个分号。然后功能都可以实现了。
2014-04-21 15:52
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
得分:0 
for (i = 0; i < 2; i++)   //  <-----------//成绩排序和学号排序中  i的上界都错了
    {
        for (j = 0; j < 3 - i-1; j++)//  <-----------//学号排序中 j的上界错了



[ 本帖最后由 kwxx 于 2014-4-21 16:06 编辑 ]
2014-04-21 16:03
dongshimou
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:152
注 册:2014-1-8
得分:0 
#include<algorithm>
using namespace std;
bool cmpa(student a,student b)
{
    return a.score>b.score;
}
sort(stu,stu+n,cmpa);

STL用习惯了。
话说纯C可以用qsort
2014-04-21 21:39
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
得分:10 
回复 6 楼 dongshimou
“STL用习惯了”                  -->深深的被这句话惊呆了。

我表示现在还是看不懂“STL源码剖析”          大神我们做朋友吧,你教我STL可好?


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-04-22 22:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430404-1-1.html




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

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