广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 13365 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
Kain
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x6
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++] 请问依学生成绩做名次排列印出的问题
不好意思...我有个期中考的考题延伸
卡在不会排序跟比较传值的部份
想请大家帮忙解答一下

Q:求四位同学2科成绩之总分,并排分数高低排序,标名次

(这一段总分是程式自己算的,我是用二维阵列方式代出总分)
  国 英 总分
(一) 80 70 150
(二) 70 90 160
(三) 80 90 170
(四) 40 50 90
----------------------------------------
但最后印出时应如下:(以总分做排名,相同分数以国文优先)
   国 英 总分 名次
(三) 80 90 170  1
(二) 70 90 160  2
(一) 80 70 150  3
(四) 40 50 90  4

==
我会用气泡排列
但是只会用在一维阵列(就是一堆数字比大小)
二维阵列该怎么用我就不知道了

我用二维阵列只写得出上面那个
下面那个就 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容




献花 x0 回到顶端 [楼 主] From:未知地址 | Posted:2005-06-14 10:52 |
Freelife
数位造型
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x2 鲜花 x60
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

那你可以用阵列sum来做排序,

如果sum[1]的值,和sum[2]交换的时候~
就把a[1][ * ]的所有值,和a[2][ * ]的所有值交换(*表示所有的阵列元素)~

当你把sum变成由大排到小,二维阵列a的值,也会依照总分作排序~
然后再印出来,就是答案了~ 表情


献花 x0 回到顶端 [1 楼] From:台湾中华电信 | Posted:2005-06-14 15:18 |
codeboy 手机
个人文章 个人相簿 个人日记 个人地图
社区建设奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x6 鲜花 x331
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

图 1.



刚好有空就稍微写了一下...用的方法比较笨一些..你可以参考一下! 表情
应该有更好的方法!在想想搂~ 表情

复制程式
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int a[4][4]={{1,70,80,88},{2,88,78,90},{3,92,70,86},{4,86,90,60}};
    int b[4]={1,2,3,4};
    int g;
    float sum[4],sum2[4],aveg[4],temp;
    
    for(int c=0;c<4;c++)
    {
            sum[c]=a[c][1]+a[c][2]+a[c][3];
            sum2[c]=sum[c];
            aveg[c]=sum[c]/3;
    }

    for(int j=0;j<4;j++)
    {
            for(int k=j;k<4;k++)
            {
                    if(sum2[j]<sum2[k])
                    {
                             temp=sum2[j];
                             sum2[j]=sum2[k];
                             sum2[k]=temp;
                             
                             g=b[j];
                             b[j]=b[k];
                             b[k]=g;
                    }
            }
    }
    cout<<"编号| 国文 | 英文 | 数学 | 总合 | 平均    | 排名"<<endl;
    for(int n=0;n<4;n++)
    {
                int tempI;
                cout<<a[n][0]<<"   |  "<<a[n][1]<<"  |  "<<a[n][2]<<"  |  "<<a[n][3]<<"  |  "<<sum[n]<<" | "<<aveg[n];
                
                for(int d=0;d<4;d++)
                {
                     if(b[d]==(n+1))
                     {
                        tempI=(d+1);
                     }
                }
                cout<<" | "<<tempI<<endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}



coding by dev-c++ 4.9.9.1


[ 此文章被codeboy在2005-06-14 16:26重新编辑 ]



连结有问题请来信,我会尽快修正~^^
通报时请附上是"哪一篇失效"...这样我才能去修正~麻烦各位好心人士了~

[连结失效通报][ 网页.伺服.程式 讨论区]
----------------------在世界中心呼喊爱情----------------------
深深思念一个人的时候,我们不知不觉的地活在世界的中心...
献花 x0 回到顶端 [2 楼] From: | Posted:2005-06-14 16:11 |
Kain
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x6
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用Freelife于2005-06-14 15:18发表的 :
那你可以用阵列sum来做排序,

如果sum[1]的值,和sum[2]交换的时候~
就把a[1][ * ]的所有值,和a[2][ * ]的所有值交换(*表示所有的阵列元素)~

.......

不好意思....有点不太懂
能请您说得详细一点吗?

sum是直行阵列值....请问这样的话该怎么排序呢


献花 x0 回到顶端 [3 楼] From:台湾中华电信 | Posted:2005-06-14 23:55 |
Freelife
数位造型
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x2 鲜花 x60
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

你的阵列sum是用来存放总分的~
sum[0]是第1个人的,sum[1]是第2个人的.......

而你的阵列a是存放每个人的各科成绩~
a[0][0]、a[0][1]、 a[0][2]、a[0][3]分别存放=>第1位、国文、英文、数学~
a[1][0]、a[1][1]、 a[1][2]、a[1][3]分别存放=>第2位、国文、英文、数学~
    :
    :

假设阵列sum排序的结果是,sum[2]、sum[1]、sum[0]、sum[3]
并且把这个结果重新存入阵列sum之中~
也就是把sum[0]的值,和sum[2]的值交换~
同一时间,你也把a[0][0]、a[0][1]、a[0][2]、a[0][3]的值和
a[2][0]、a[2][1]、a[2][2]、a[2][3]的值交换~

排完之后,再把阵列内的值印出来,
自然就会印出:
第3位................................名次1
第2位................................名次2
第1位................................名次3
第4位................................名次4


这个前提是,你自己会将阵列sum重新排列(由大排到小)~


献花 x1 回到顶端 [4 楼] From:台湾中华电信 | Posted:2005-06-15 10:35 |
codeboy 手机
个人文章 个人相簿 个人日记 个人地图
社区建设奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x6 鲜花 x331
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用Freelife于2005-06-15 10:35发表的 :
你的阵列sum是用来存放总分的~
sum[0]是第1个人的,sum[1]是第2个人的.......

而你的阵列a是存放每个人的各科成绩~
a[0][0]、a[0][1]、 a[0][2]、a[0][3]分别存放=>第1位、国文、英文、数学~
.......
哈哈...刚刚才发现我误会意思了....我之前写的是固定编号所名次没有照顺序
原来他要照顺序的喔...那就比较容易了~ 表情



连结有问题请来信,我会尽快修正~^^
通报时请附上是"哪一篇失效"...这样我才能去修正~麻烦各位好心人士了~

[连结失效通报][ 网页.伺服.程式 讨论区]
----------------------在世界中心呼喊爱情----------------------
深深思念一个人的时候,我们不知不觉的地活在世界的中心...
献花 x1 回到顶端 [5 楼] From: | Posted:2005-06-15 14:24 |
andyz 手机 会员卡
数位造型
个人文章 个人相簿 个人日记 个人地图
社区建设奖
头衔:恶灵退散 o(╬ ̄皿 ̄)=○ &nb ..恶灵退散 o(╬ ̄皿 ̄)=○ &nb ..
分类版主
级别: 分类版主 该用户目前不上站
版区: 塑胶模型, 电脑资讯
推文 x55 鲜花 x168
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

复制程式
#include <iostream.h>
void main()
{
cout<<"   国文 "<<"英文 "<<"数学 "<<" 总分 "<<"平均 "<<endl;
float a[4][6]={{1,70,80,88,0,0},{2,88,78,90,0,0},{3,92,70,86,0,0},{4,86,90,60,0,0}},b[4][6];
int j,k;
for ( k=0;k<4;k++){
for ( j=1;j<4;j++){
       a[k][4]+=a[k][j];}
a[k][5]=a[k][4]/3;
}

for (k=0;k<6;k++){
       b[0][k]=a[0][k];}

for(j=0;j<3;j++){//因为a只[4]所以做到3就可以了
if(b[j][4]>a[j+1][4]){
       for (k=0;k<6;k++){
              b[j+1][k]=a[j+1][k];}}
else if(b[j][4]<a[j+1][4]){
       for (k=0;k<6;k++){
              b[j+1][k]=b[j][k];
              b[j][k]=a[j+1][k];
              }}
else if(b[j][4]==a[j+1][4]){
       if(b[j][1]>a[j+1][1]){
              for (k=0;k<6;k++){
                     b[j+1][k]=a[j+1][k];}}
       else if(b[j][1]<a[j+1][1]){
              for (k=0;k<6;k++){
                     b[j][k]=a[j+1][k];
                     b[j+1][k]=a[j][k];}}}

}
for ( k=0;k<4;k++){
for ( j=0;j<6;j++){
       cout<<b[k][j]<<"   ";}
cout<<endl;}

}

小弟的愚解
好像只适用于本题
改数字后就...
改天再修改吧
复制程式
#include <iostream.h>
void main()
{
cout<<"   国文 "<<"英文 "<<"数学 "<<" 总分 "<<"平均 "<<endl;
float a[4][6]={{1,70,80,88,0,0},{2,88,78,90,0,0},{3,92,70,86,0,0},{4,86,90,60,0,0}},temp[6];
int i,j,k,flag;
for ( k=0;k<4;k++){
for ( j=1;j<4;j++){
   a[k][4]+=a[k][j];}
   a[k][5]=a[k][4]/3;
}
flag=0;  
for (i=0;i<4&&(!flag);i++)
   {
    flag=1;
    for (j=0;j<3-i;j++){
    if (a[j][4]<a[j+1][4]) 
      {
        for (k=0;k<6;k++){
                temp[k]=a[j][k];
       a[j][k]=a[j+1][k];
       a[j+1][k]=temp[k];}
       flag=0;}}
   }

for ( k=0;k<4;k++){
for ( j=0;j<6;j++){cout<<a[k][j]<<"   ";}
cout<<endl;}
}
改成这样就没问题了


[ 此文章被andyz在2005-06-28 11:58重新编辑 ]


回文原则(以下只适用在我的管理区)
1.我不回太白目的问题
2.还有娘家文
3.看不懂得也是
4.我很懒得把你的问题(也就是文字叙述)想成我要看到的画面(也就是萤幕上出现的画面)。纯文字叙述者,看不懂在说啥就不回。想要解答就先下点功夫,来个图文并茂的文章吧。
5.想到再打

何谓白目问题
1.看不懂英文的,要求翻译
2.没经过爬文就问
3.给个问题(题目)就要求解答。例如:请问XXX怎么写。自己的CODE都没有贴上来就要求别人帮你写,不如你的作业我帮你作、你的书我帮你读好了
4.想到再打
献花 x1 回到顶端 [6 楼] From:台湾数位联合 | Posted:2005-06-22 00:09 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.126172 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言