标题:一个超级简单的问题求解
只看楼主
guchao2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:101
专家分:106
注 册:2009-4-13
结帖率:77.78%
已结贴  问题点数:0 回复次数:10 
一个超级简单的问题求解
//编写一个函数,将一个3行4列矩阵转置,在主函数中对该矩阵进行输入输出
#include<iostream>

using namespace std;
void main()
{
    int a[3][4];
    int i,j,tmp;
    cout<<"请输入一个3行4列矩阵(输入一个数请按下回车键方便操作):"<<endl;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            cin>>a[i][j];
        }
    }
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"您输入的3行4列矩阵:"<<endl;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            cout<<a[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"转置后的3行4列矩阵:"<<endl;
    for(i=0;i<4;i++)
    {
        for(j=0;j<4&&j<i;j++)
        {
            tmp=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=tmp;
        }
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            cout<<a[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
}

搜索更多相关主题的帖子: 问题求解 超级 
2009-12-25 19:58
guchao2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:101
专家分:106
注 册:2009-4-13
得分:0 
补充说明:为什么会出现应用程序错误?
2009-12-25 20:00
英英
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:29
专家分:133
注 册:2009-3-3
得分:10 
我也不太清楚,估计跟内存分配有关吧
以前写这个程序的时候声明了两个数组,一个是用来存储转置后的数组的
不过这个程序只要稍微改一下就可以了
将转置的循环语句改为:
 for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
           b[i][j]=a[j][i];
        }
    }
最后输出改为b[j][i]就可以了
2009-12-25 21:33
飘到心海
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:79
专家分:145
注 册:2009-5-3
得分:0 
楼上的的确可以解决问题啊,可为什么楼主的会出现那种错误呢,期待高手
2009-12-25 22:08
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
得分:5 
你定义的是一个int a[3][4]数组,数组最后一个数应该是a[2][3]
而你这里
for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            cout<<a[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
}
又用到了a[i][j]数组,i的值你取0-3,这就超出了你定义的a数组的行下标的上限了。。。有点废话了,简单说就是下面那个循环出现了a[3][j]这些,而这些内存空间是不存在的,从新定义一个数组b[4][3]装装置的矩阵就没事了。。。。不好意思,我也刚学了2个月c++,总结起来有点乱,希望你看得懂
2009-12-25 22:25
ymzhaojian
Rank: 2
等 级:论坛游民
帖 子:30
专家分:15
注 册:2009-11-13
得分:0 
楼上的说的似乎对啊!
2009-12-26 08:45
guchao2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:101
专家分:106
注 册:2009-4-13
得分:0 
//编写一个函数,将一个3行4列矩阵转置,在主函数中对该矩阵进行输入输出
#include<iostream>

using namespace std;
void main()
{
    int a[3][4],b[3][4];
    int i,j,tmp;
    cout<<"请输入一个3行4列矩阵(输入一个数请按下回车键方便操作):"<<endl;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            cin>>a[i][j];
        }
    }
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"您输入的3行4列矩阵:"<<endl;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            cout<<a[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"转置后的3行4列矩阵:"<<endl;
    for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            b[i][j]=a[j][i];
        }
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            cout<<b[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
}



(根据3楼的)这个是正解,不过那个原因说不出来,只是感觉那样不对(正如5楼所说).
2009-12-26 13:01
guchao2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:101
专家分:106
注 册:2009-4-13
得分:0 
扩展程序/////////////////////////////////////////////////////////////////

//编写一个函数,将一个×行×列矩阵转置,在主函数中对该矩阵进行输入输出
#include<iostream>

using namespace std;
#define maxsize1 ×
#define maxsize2 ×
void main()
{
    int a[maxsize1][maxsize2],b[maxsize1][maxsize2];
    int i,j,tmp;
    cout<<"请输入一个×行×列矩阵(输入一个数请按下回车键方便操作):"<<endl;
    for(i=0;i<maxsize1;i++)
    {
        for(j=0;j<maxsize2;j++)
        {
            cin>>a[i][j];
        }
    }
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"您输入的3行4列矩阵:"<<endl;
    for(i=0;i<maxsize1;i++)
    {
        for(j=0;j<maxsize2;j++)
        {
            cout<<a[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////////"<<endl;
    cout<<"转置后的3行4列矩阵:"<<endl;
    for(i=0;i<maxsize2;i++)
    {
        for(j=0;j<maxsize1;j++)
        {
            b[i][j]=a[j][i];
        }
    }
    for(i=0;i<maxsize2;i++)
    {
        for(j=0;j<maxsize1;j++)
        {
            cout<<b[i][j];
            cout<<"   ";
        }
        cout<<endl;
    }
}

2009-12-26 13:08
编我的
Rank: 1
等 级:新手上路
帖 子:36
专家分:6
注 册:2009-8-1
得分:0 
数组越界问题额!!这问题模糊。。
2009-12-26 13:10
wlsj
Rank: 2
等 级:论坛游民
帖 子:49
专家分:28
注 册:2009-5-18
得分:0 
5楼的正确
2009-12-26 21:45



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




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

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