鱼C论坛

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

[已解决]矩阵问题

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

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

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

x
  1. #include<iostream>
  2. #define maxSize 1024
  3. using namespace std;

  4. void func(int A[][maxSize])//应该如何写才能接收主函数传入的数组
  5. {
  6.         int i,j,count,temp;
  7.         while(i<m)
  8.         {
  9.                 count=0;
  10.                 for(j=0;j<n;j++)
  11.                 {
  12.                         if(A[i][j]>A[i][j+1])
  13.                         {
  14.                                 temp=A[i][j];
  15.                                 A[i][j]=A[i][j-1];
  16.                                 A[i][j-1]=A[i][j];
  17.                                 count++;
  18.                         }
  19.                 }
  20.                 if(count==0)
  21.                 {
  22.                         i++;
  23.                 }
  24.         }
  25.         for(i=0;i<m;i++)
  26.         {
  27.                 for(j=0;j<n;j++)
  28.                 {
  29.                         cout<<A[i][j];
  30.                 }
  31.                 cout<<'\n';
  32.         }
  33. }

  34. int main()
  35. {
  36.         int m,n,,i,j;
  37.         cout<<"请输入阶数:";
  38.         cin>>m>>n;
  39.         int A[m][n];
  40.         cout<<"请输入矩阵"<<endl;
  41.         for(i=0;i<m;i++)
  42.         {
  43.                 for(j=0;j<n;j++)
  44.                 {
  45.                         cin>>A[i][j];
  46.                 }
  47.         }
  48.         for(i=0;i<m;i++)
  49.         {
  50.                 for(j=0;j<n;j++)
  51.                 {
  52.                         cout<<A[i][j];
  53.                 }
  54.                 cout<<'\n';
  55.         }
  56.         func(A[m][n]);
  57.         return 0;
  58. }
复制代码


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

-----------------------------------------------------------------------------
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].
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. void func(vector<vector<int> > A){
  3. ...
  4. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 17:29:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-12-9 17:32 编辑
  1. #include <iostream>
  2. void func(int (*ptr)[3], int c)//二维数组做为函数的形参
  3. {
  4.     for (size_t i = 0; i < 3; i++)
  5.     {
  6.         for (size_t j = 0; j < c; j++)
  7.         {
  8.             std::cout << ptr[i][j];
  9.         }
  10.         std::cout<<std::endl;
  11.     }
  12. }
  13. int main(int argc, char const *argv[])
  14. {
  15.     int arr[3][3] = {1,2,3,4,5,6,7,8,9};
  16.     func(arr, 3);
  17.     return 0;
  18. }
复制代码

-----------------------------------------------------------------------------
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].
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 17:49:43 | 显示全部楼层
  1.         cin>>m>>n;
  2.         int A[m][n];
复制代码

另外,c++不支持变长数组吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我刚知道不支持变长数组,但是这样写可以在Dev C++上实现,应该是程序的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

数组传入函数是必须用指针吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


C风格数组做为参数只能用指针的形式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  4. int main(int argc, char const *argv[])
  5. {
  6.         int m,n,i,j,h,count,temp;
  7.         cout<<"请输入行数和列数";
  8.         cin>>m>>n;
  9.     vector<vector<int> >swp(m,vector<int>(n));
  10.     for(i=0;i<m;i++)
  11.         {
  12.                 for(j=0;j<n;j++)
  13.                 {
  14.                         cin>>swp[i][j];
  15.                 }
  16.         }
  17.         for(i=0;i<m;i++)
  18.         {
  19.                 for(j=0;j<n;j++)
  20.                 {
  21.                         cout<<swp[i][j];
  22.                 }
  23.                 cout<<'\n';
  24.         }
  25.         for(i=0;i<m;i++)//代码有问题处
  26.         {
  27.                 for(h=0;h<n;h++)
  28.                 {
  29.                 count=0;
  30.                     for(j=0;j<n;j++)
  31.                     {
  32.                             if(swp[i][j]>swp[i][j+1])
  33.                             {
  34.                                     temp=swp[i][j];
  35.                                     swp[i][j]=swp[i][j-1];
  36.                                     swp[i][j-1]=swp[i][j];
  37.                                     count=1;
  38.                             }
  39.                     }
  40.                     if(count==0)
  41.                     {
  42.                             break;
  43.                     }
  44.             }
  45.         }
  46.         for(i=0;i<m;i++)
  47.         {
  48.                 for(j=0;j<n;j++)
  49.                 {
  50.                         cout<<swp[i][j];
  51.                 }
  52.                 cout<<'\n';
  53.         }
  54.     return 0;
  55. }
复制代码

麻烦问一下,我这个排序有什么问题啊,为什么不能按升序输出啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我知道了,j+1造成数组越界了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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