| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2365 人关注过本帖
标题:二维整数数组按每行数据之和升序排列 (结构体类型)
只看楼主 加入收藏
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
结帖率:88.89%
收藏
已结贴  问题点数:15 回复次数:4 
二维整数数组按每行数据之和升序排列 (结构体类型)
【问题描述】将一个4*4二维整数数组按每行数据之和升序排列后输出,要求每行数据用结构体类型。(注:计算机二级考试下午试题)
【输入形式】分行输入各数,空格分开
【输出形式】分行输出各数和这行各数和,空格分开
【样例输入】
2 2 3 4
9 10 11 12
1 3 5 7
5 10 1 20
【样例输出】
2 2 3 4 11
1 3 5 7 16
5 10 1 20 36
9 10 11 12 42
【样例说明】输入的二维数组各行的和为11,42,16,36,按升序得11,16,36,42,对应的数组和各数的和输出就是:
2 2 3 4 11
1 3 5 7 16
5 10 1 20 36
9 10 11 12 42

———————————————以下是我写的代码,总是有一个数据错误(见附文),找不出原因,希望各位可以帮忙指正。万分感谢!——————————————

#include<stdio.h>

int main()
{
    struct st
    {
        int x[4];
        int sum;
    }s[4],t;
    int i,j,k;
    for (i=0;i<4;i++)
    {
        s[i].sum = 0;
        for (j=0;j<4;j++)
        {
            scanf("%d",&s[i].x[j]);
            s[i].sum+=s[i].x[j];
        }
    }
    for (i=0;i<3;i++)
    {
        k=i;
        for (j=i+1;j<4;j++)
            if  (s[i].sum>s[j].sum)
                k=j;
        if (k!=i)
        {
            t=s[i];
            s[i]=s[k];
            s[k]=t;
        }
        for (i=0;i<4;i++)
        {
            for (j=0;j<4;j++)
                printf("%d  ",s[i].x[j]);
            printf("%d\n",s[i].sum);
        }
        
        return  0;
}

————————————————————以下是错误的数据,仅供参考——————————————————————
错误输出:
1508049952 32765 1508049968 32765 9
5 10 1 20 36
9 10 11 12 42
9 10 11 12 42
期望输出:
2 2 3 4 11
1 3 5 7 16
5 10 1 20 36
9 10 11 12 42
搜索更多相关主题的帖子: 输出 sum for 数组 升序 
2020-05-13 23:11
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
收藏
得分:0 
刚学结构体,还不是很熟悉,可能犯了一些错误,请大家指正!谢谢你们了!

今天再晚也是早,明天再早也是晚
2020-05-13 23:14
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
收藏
得分:0 
我将 if 判断改为了

  s[i].sum>s[j].sum && k==i

最后结果有了一些改进,但还是有些错误。如下。

错误输出:
-1564459744 32766 -1564459728 32766 9
1 3 5 7 16
5 10 1 20 36
9 10 11 12 42
期望输出:
2 2 3 4 11
1 3 5 7 16
5 10 1 20 36
9 10 11 12 42

今天再晚也是早,明天再早也是晚
2020-05-13 23:21
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:15 
程序代码:
#include<stdio.h>
int main()
{
    struct st
    {
        int x[4];
        int sum;
    }s[4], t;
    int i, j, k;
    for (i = 0; i < 4; i++)
    {
        s[i].sum = 0;
        for (j = 0; j < 4; j++)
        {
            scanf("%d", &s[i].x[j]);
            s[i].sum += s[i].x[j];
        }
    }
    for (i = 0; i < 3; i++)
    {
        k = i;
        for (j = i + 1; j < 4; j++)
            if (s[k].sum > s[j].sum) //here
                k = j;
        if (k != i)
        {
            t = s[i];
            s[i] = s[k];
            s[k] = t;
        }
    } //here
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
            printf("%d  ", s[i].x[j]);
        printf("%d\n", s[i].sum);
    }

        return  0;
}


看看区别
涉及花括号
还有一个k

[此贴子已经被作者于2020-5-13 23:31编辑过]


对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-05-13 23:29
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
收藏
得分:0 
回复 4楼 forever74
谢谢你,我就感觉判断出了问题,就是没有想出来。

今天再晚也是早,明天再早也是晚
2020-05-13 23:49
快速回复:二维整数数组按每行数据之和升序排列 (结构体类型)
数据加载中...
 
   



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

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