| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:大家看看我的写法哪里错了,求不出正常值,关于冒泡排序
只看楼主 加入收藏
ctl184762651
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2014-5-31
结帖率:93.75%
收藏
已结贴  问题点数:14 回复次数:3 
大家看看我的写法哪里错了,求不出正常值,关于冒泡排序
题目是这样的。
输入5个学生的数学成绩和英语成绩。
并有合格A,B,2种成绩
合格A=数学成绩*1.2+英语成绩*0.8。取最大的前2个人,打印出这2个人的原来位置。
合格B=数学成绩*0.8+英语成绩*1.2。除去合格A的2个人,打印出合格B的成绩的分数最大的2个人。
剩下一个人就是不合格,也就是说5个人里面有4个是合格的。
下面是我写的,合格A的值能出来。B的值出来是错的。然后不合格的出来也是错的。
#include<stdio.h>
void main()
{
    int math[5];   //输入的数学成绩
        int english[5];//英语成绩
        int score[5];  //合格者A的成绩
        int scoreb[5]; //合格者B的成绩
            int s[5];//把合格者A的成绩带入这个,为了求原来的位置
             int m[5];//同上,为了求合格者B原来的位置
    int i,j,x,max,n;
    for(i=0;i<5;i++)
    {
        printf("%d人目の数学の点数:",i+1);  //输入数学成绩
    scanf_s("%d",&math[i]);
    }
    printf("\n");
    for(i=0;i<5;i++)
    {
        printf("%d人目の英語の点数:",i+1); //输入英语成绩
    scanf_s("%d",&english[i]);
    }
   
   
    for(i=0;i<5;i++)
    {
        score[i]=math[i]*1.2+english[i]*0.8;//求合格A的所有人的成绩
    }
    for(i=0;i<5;i++)
    {s[i]=score[i];}
   

   
    for(i=0;i<4;i++)
    for(j=0;j<4-i;j++)    //A排序开始
        {
            if(score[j]<=score[j+1])
                {
                    x=score[j];
            score[j]=score[j+1];
            score[j+1]=x;
                }
            
        }
for(i=0;i<2;i++)
    {
        for(j=0;j<5;j++)
    {
        if(score[i]==s[j])     //输出合格A的分数最大的2个人的原来位置
            
        printf("%d人目 ",j+1);
        math[j]=0;            /* 打印出最大的2个人后,把这2个人的数学和英语成绩置0,等下求合格者B的时候就可以算出除去这2个人以外的最大分数的2个人 /*
        english[j]=0;
    }
     }
   
printf("\n合格者B:");

for(i=0;i<5;i++)
    {
        scoreb[i]=math[i]*0.8+english[i]*1.2;//合格者B所有成绩计算
    }
for(i=0;i<5;i++)
{m[i]=scoreb[i];}
for(i=0;i<4;i++)
    for(j=0;j<4-i;j++)
        {
            if(scoreb[j]<=scoreb[j+1])
                {
                    x=scoreb[j];    //B排序开始
            scoreb[j]=scoreb[j+1];
            scoreb[j+1]=x;
                }
            
        }

    for(i=0;i<2;i++)
        for(j=0;i<5;j++)
        {
            if(scoreb[i]==m[j])        // 输出合格B的分数最大的2个人。并且将这2个人的数学分数置0
            {
        printf("%d人目 ",j+1);
        math[j]=0;
        
            }
        }
        max=math[0];
        for(i=1;i<5;i++)         //比较所有人的数学分数,因为前面4个人的数学分数都置0了,所以最大的就是不合格者。
          {
              if(max<math[i])
               {
                   max=math[i];
                   n=i+1;
               }

        }
        printf("%d人目 ",n);       //输出不合格者




}
搜索更多相关主题的帖子: 英语成绩 english include 最大的 数学 
2014-06-04 23:12
ctl184762651
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2014-5-31
收藏
得分:0 
@xsw07122269
2014-06-04 23:15
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:14 
回复 2 楼 ctl184762651
先更正一下你的错误:你看下最后几行
    for(i=0;i<2;i++)
        for(j=0;i<5;j++)            //这里是j<5
        {
            if(scoreb[i]==m[j])        // 输出合格B的分数最大的2个人。并且将这2个人的数学分数置0
            {
        printf("%d人目 ",j+1);
        math[j]=0;
        
            }
        }
        max=math[0];
        for(i=1;i<5;i++)         //比较所有人的数学分数,因为前面4个人的数学分数都置0了,所以最大的就是不合格者。
          {
              if(max<math[i])
               {
                   max=math[i];
                   n=i+1;            //n没有赋初值
               }

        }
        printf("%d人目 ",n);       //输出不合格者




}
2014-06-05 16:40
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:0 
回复 2 楼 ctl184762651
按照你的方法我改了一下你的程序,可以得出正确的结果。
#include<stdio.h>
void main()
{
    int math[5]={50,60,70,80,90};   //输入的数学成绩
    int english[5]={50,60,70,80,90};//英语成绩
        int score[5];  //合格者A的成绩
        int scoreb[5]; //合格者B的成绩
            int s[5];//把合格者A的成绩带入这个,为了求原来的位置
             int m[5];//同上,为了求合格者B原来的位置
    int i,j,x,max,n;


    for(i=0;i<5;i++)
    {
        score[i]=math[i]*1.2+english[i]*0.8;//求合格A的所有人的成绩
    }
    for(i=0;i<5;i++)
    {s[i]=score[i];}
   

   
    for(i=0;i<4;i++)
    for(j=0;j<4-i;j++)    //A排序开始
        {
            if(score[j]<=score[j+1])
                {
                    x=score[j];
            score[j]=score[j+1];
            score[j+1]=x;
                }
            
        }
        printf("合格者A:");
for(i=0;i<2;i++)
    {
        for(j=0;j<5;j++)
    {
        if(score[i]==s[j])     //输出合格A的分数最大的2个人的原来位置
        {
            
        printf("%d人目 ",j+1);
        math[j]=0;           
        english[j]=0;
        }
    }
     }
   
printf("\n合格者B:");

for(i=0;i<5;i++)
    {
        scoreb[i]=math[i]*0.8+english[i]*1.2;//合格者B所有成绩计算
    }
for(i=0;i<5;i++)
{m[i]=scoreb[i];}
for(i=0;i<4;i++)
    for(j=0;j<4-i;j++)
        {
            if(scoreb[j]<=scoreb[j+1])
                {
                    x=scoreb[j];    //B排序开始
            scoreb[j]=scoreb[j+1];
            scoreb[j+1]=x;
                }
            
        }

    for(i=0;i<2;i++)
        for(j=0;j<5;j++)
        {
            if(scoreb[i]==m[j])        // 输出合格B的分数最大的2个人。并且将这2个人的数学分数置0
            {printf("%d人目 ",j+1);
            math[j]=0;
        
            }
        }
        putchar('\n');
        n=1;
        max=math[0];
        for(i=1;i<5;i++)         //比较所有人的数学分数,因为前面4个人的数学分数都置0了,所以最大的就是不合格者。
          {
              if(max<math[i])
               {
                   max=math[i];
                   n=i+1;
               }

        }
        printf("%d人目\n",n);       //输出不合格者
}
2014-06-05 16:41
快速回复:大家看看我的写法哪里错了,求不出正常值,关于冒泡排序
数据加载中...
 
   



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

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