鱼C论坛

 找回密码
 立即注册
查看: 1559|回复: 9

[已解决]矩阵问题

[复制链接]
发表于 2019-12-9 16:36:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
#define maxSize 1024
using namespace std;

void func(int A[][maxSize])//应该如何写才能接收主函数传入的数组
{
        int i,j,count,temp;
        while(i<m)
        {
                count=0;
                for(j=0;j<n;j++)
                {
                        if(A[i][j]>A[i][j+1])
                        {
                                temp=A[i][j];
                                A[i][j]=A[i][j-1];
                                A[i][j-1]=A[i][j];
                                count++;
                        }
                }
                if(count==0)
                {
                        i++;
                }
        }
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        cout<<A[i][j];
                }
                cout<<'\n';
        }
}

int main()
{
        int m,n,,i,j;
        cout<<"请输入阶数:";
        cin>>m>>n; 
        int A[m][n];
        cout<<"请输入矩阵"<<endl; 
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        cin>>A[i][j];
                }
        }
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        cout<<A[i][j];
                }
                cout<<'\n';
        }
        func(A[m][n]);
        return 0;
} 

这个程序是实现输入m*n阶矩阵,每行元素从小到大排序输出的,但是现在这个程序的二维数组无法按我的想法传递(m和n无法传递到子函数中),应该如何修改啊。
最佳答案
2019-12-9 17:29:30
本帖最后由 bin554385863 于 2019-12-9 17:32 编辑
#include <iostream>
void func(int (*ptr)[3], int c)//二维数组做为函数的形参
{
    for (size_t i = 0; i < 3; i++)
    {
        for (size_t j = 0; j < c; j++)
        {
            std::cout << ptr[i][j];
        }
        std::cout<<std::endl;
    }
}
int main(int argc, char const *argv[])
{
    int arr[3][3] = {1,2,3,4,5,6,7,8,9};
    func(arr, 3);
    return 0;
}
-----------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-5l5uyoe2.wdh --stdout=Microsoft-MIEngine-Out-s4enc20k.axl --stderr=Microsoft-MIEngine-Error-qa5h0kwm.lzh --pid=Microsoft-MIEngine-Pid-ihivnbk2.0dg --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
123
456
789


E:\Users\admin\Documents\VScode\Code>  

==================================
对于二维数组int arr[m][n]来说,它的类型是int (*)[m].
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-9 16:40:54 | 显示全部楼层
既然是c++,建议直接上vector
#include <vector>

void func(vector<vector<int> > A){
...
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 17:29:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-12-9 17:32 编辑
#include <iostream>
void func(int (*ptr)[3], int c)//二维数组做为函数的形参
{
    for (size_t i = 0; i < 3; i++)
    {
        for (size_t j = 0; j < c; j++)
        {
            std::cout << ptr[i][j];
        }
        std::cout<<std::endl;
    }
}
int main(int argc, char const *argv[])
{
    int arr[3][3] = {1,2,3,4,5,6,7,8,9};
    func(arr, 3);
    return 0;
}
-----------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-5l5uyoe2.wdh --stdout=Microsoft-MIEngine-Out-s4enc20k.axl --stderr=Microsoft-MIEngine-Error-qa5h0kwm.lzh --pid=Microsoft-MIEngine-Pid-ihivnbk2.0dg --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
123
456
789


E:\Users\admin\Documents\VScode\Code>  

==================================
对于二维数组int arr[m][n]来说,它的类型是int (*)[m].
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 17:49:43 | 显示全部楼层
        cin>>m>>n;
        int A[m][n];
另外,c++不支持变长数组吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-9 19:59:59 | 显示全部楼层
Croper 发表于 2019-12-9 17:49
另外,c++不支持变长数组吧

我刚知道不支持变长数组,但是这样写可以在Dev C++上实现,应该是程序的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-9 20:00:46 | 显示全部楼层
bin554385863 发表于 2019-12-9 17:29
-----------------------------------------------------------------------------
Microsoft Windows [ ...

数组传入函数是必须用指针吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 20:07:03 | 显示全部楼层
本帖最后由 bin554385863 于 2019-12-9 20:16 编辑
forever33221 发表于 2019-12-9 20:00
数组传入函数是必须用指针吗


C风格数组做为参数只能用指针的形式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-9 20:10:15 | 显示全部楼层
bin554385863 发表于 2019-12-9 20:07
数组做为参数只能用指针的形式

好的,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-10 21:09:27 | 显示全部楼层
bin554385863 发表于 2019-12-9 20:07
C风格数组做为参数只能用指针的形式
#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char const *argv[])
{
        int m,n,i,j,h,count,temp;
        cout<<"请输入行数和列数";
        cin>>m>>n; 
    vector<vector<int> >swp(m,vector<int>(n));
    for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        cin>>swp[i][j];
                }
        }
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        cout<<swp[i][j];
                }
                cout<<'\n';
        }
        for(i=0;i<m;i++)//代码有问题处 
        {
                for(h=0;h<n;h++)
                {
                count=0;
                    for(j=0;j<n;j++)
                    {
                            if(swp[i][j]>swp[i][j+1])
                            {
                                    temp=swp[i][j];
                                    swp[i][j]=swp[i][j-1];
                                    swp[i][j-1]=swp[i][j];
                                    count=1;
                            }
                    }
                    if(count==0)
                    {
                            break;
                    }
            }
        }
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        cout<<swp[i][j];
                }
                cout<<'\n';
        }
    return 0;
}
麻烦问一下,我这个排序有什么问题啊,为什么不能按升序输出啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-11 14:32:19 | 显示全部楼层
bin554385863 发表于 2019-12-9 20:07
C风格数组做为参数只能用指针的形式

我知道了,j+1造成数组越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 01:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表