| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 597 人关注过本帖
标题:想按平均值排序的,加了以后出错了,请指教下怎么改
只看楼主 加入收藏
如果可能的话
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-9-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
想按平均值排序的,加了以后出错了,请指教下怎么改
#include<stdio.h>
struct student
{
    int ave;
    int num;
    char name[20];
    int score1;
    int score2;
    int score3;
}student[3];


int main()
{
    int i,j;
    struct student temp;
    int ave[3];
    for(i=0;i<3;i++)
    {
        printf("请输入学生%d的资料:\n",i+1);
        printf("学号为:");
            scanf("%d",&student[i].num);
        printf("姓名是:");
            scanf("%s",&student[i].name);
        printf("第一门成绩是:");
        scanf("%d",&student[i].score1);
        printf("第二门成绩是:");
        scanf("%d",&student[i].score2 );
        printf("第三们成绩是:");
        scanf("%d",&student[i].score3 );
        printf("\n");
        student[i].ave =(student[i].score1 +student[i].score2 +student[i].score3 )/3 ;
    }

    printf("学号\t姓名\t语文\t数学\t英语平均分\n");

  
   for(i=0;i<3;i++)
   {
    for(j=0;j<3;i++)
    {
        if(student[j].ave <student[i].ave)
        {
            temp = student[j] ;
            student[j] = student[i];
            student[i] = temp;
        }
    }
   }

for(i=0;i<3;i++)
{
printf("%d\t",student[i].num);
printf("%s\t",student[i].name );
printf("%d\t",student[i].score1 );
printf("%d\t",student[i].score2 );
printf("%d\t",student[i].score3 );
printf("%d\t",student[i].ave );
printf("\n=*=*=*=*=*=*=*=*+*+*+*+*+*+*\n");
}

}
搜索更多相关主题的帖子: 姓名 include 平均值 资料 
2011-09-14 20:01
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:10 
程序代码:
   for(i=0;i<2;i++)
   {
    for(j=0;j<2-i;j++)
    {
        if(student[j].ave <student[j+1].ave)
        {
            temp = student[j] ;
            student[j] = student[j+1];
            student[j+1] = temp;
        }
    }
   }
你的排序用的是什么方法。
我用冒泡写了一个
2011-09-14 20:31
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
楼主这段排序不是冒泡也不是选择,而且只有三个学生,感觉不用这样双重循环的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-14 20:35
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:0 
回复 3楼 pauljames
看错了
2011-09-14 20:43
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:0 
scanf("%s",&student[i].name);            //这里不用加&号吧
2011-09-14 20:46
如果可能的话
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-9-10
收藏
得分:0 
回复 2楼 czsbc
谢谢,知道哪里错了
2011-09-14 21:06
如果可能的话
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-9-10
收藏
得分:0 
回复 5楼 czsbc
你不加试试,昨天看你的说了,我改了,后来忘记了,害我弄半天
2011-09-15 15:22
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:0 
试过了,加不加都一样。
不知道你的出了什么问题,如果给你带来麻烦,那对不起了。
2011-09-15 16:44
如果可能的话
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-9-10
收藏
得分:0 
回复 8楼 czsbc
你那个是结构体中的加的吗?是这样的吗student[i].score2,我也不是很懂啦,呵呵
2011-09-15 16:49
如果可能的话
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-9-10
收藏
得分:0 
回复 8楼 czsbc
#include<stdio.h>
#include<stdlib.h>
struct student
{
    int ave;
    int num;
    char name[20];
    int score1;
    int score2;
    int score3;
}s[3];



int cmp(const void *a,const void *b)
{
    struct student *aa=(student *)a;
    struct student *bb=(student *)b;
    if((aa->ave )!= (bb->ave))
        return(((aa->ave) > (bb->ave))? 1:-1);
    else
        return((aa->ave) - (bb->ave));
}


int main()
{
    int i,j;


    for(i=0;i<3;i++)
    {
        printf("请输入学生%d的资料:\n",i+1);
        printf("学号为:");
            scanf("%d",&s[i].num);
        printf("姓名是:");
            scanf("%s",&s[i].name);
        printf("第一门成绩是:");
        scanf("%d",&s[i].score1);
        printf("第二门成绩是:");
        scanf("%d",&s[i].score2 );
        printf("第三们成绩是:");
        scanf("%d",&s[i].score3 );
        printf("\n");
        s[i].ave =(s[i].score1 +s[i].score2 +s[i].score3 )/3 ;
    }

    printf("学号\t姓名\t语文\t数学\t英语\t平均分\n");

    qsort(s,3,sizeof(s[0]),cmp);



  
   

   

for(i=0;i<3;i++)
{
printf("%d\t",s[i].num);
printf("%s\t",s[i].name );
printf("%d\t",s[i].score1 );
printf("%d\t",s[i].score2 );
printf("%d\t",s[i].score3 );
printf("%d\t",s[i].ave );
printf("\n=*=*=*=*=*=*=*=*+*+*+*+*+*+*\n");
}

}



我改好后的,你去掉运行试试,呵呵,行的话,告诉我下,谢谢
2011-09-15 16:54
快速回复:想按平均值排序的,加了以后出错了,请指教下怎么改
数据加载中...
 
   



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

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