精华内容
下载资源
问答
  • C++二维数组转置

    2021-11-13 21:47:37
    第一种:N*N列矩阵 ...void ReverseArray(int a[N][N]){//数组转置 int t; for(int i = 0; i < N; i++){ for(int j = i; j < N; j++){ if(i != j){//主对角线上的数组转之后为本身,所以进行交换

    第一种:N*N列矩阵

    #include <iostream>
    #define N 3
    using namespace std;
    
    void ReverseArray(int a[N][N]){//数组转置
        int t;
        for(int i = 0; i < N; i++){
            for(int j = i; j < N; j++){
                if(i != j){//主对角线上的数组转之后为本身,所以进行交换
                    t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;
                }
            }
        }
    }
    int main() {
        int a[N][N] = {{1,2,3},{4,5,6},{7,8,9}};
        cout<<"原始数组:\n";
        for(int i = 0; i < N; i++){//打印数组
            for(int j = 0; j < N; j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
        ReverseArray(a);
        cout<<"\n转置后的数组为:\n";
        for(int i = 0; i < N; i++){//转置数组
            for(int j = 0; j < N; j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
        
        return 0;
    }
    

    第二种:N*M列矩阵
    只改动了一点,在转置的时候补全整个矩阵

    #include <iostream>
    #define N 3
    #define M 4
    using namespace std;
    
    void ReverseArray(int a[N][M]){//数组转置
        int t;
        int m = M>N?M:N;
        //这里的思路是取M和N的最大值,补全整个m*m矩阵然后再进行转置
        //在输出的时候输出M*N
        for(int i = 0; i < m; i++){
            for(int j = i; j < m; j++){
                if(i != j){
                    t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;
                }
            }
        }
    }
    int main() {
        int max = N>M?N:M;
        
        int a[M][M] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        cout<<"原始数组:\n";
        for(int i = 0; i < N; i++){//打印数组
            for(int j = 0; j < M; j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
        ReverseArray(a);
        cout<<"\n转置后的数组为:\n";
        for(int i = 0; i < M; i++){//转置数组
            for(int j = 0; j < N; j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
        
        return 0;
    }
    
    展开全文
  • 我们常用的数据叫做一维数组,是一串连续的内存空间,二维数组是在一维数组的基础上,相当于每一个元素又是一个一维数组 二维数组的定义也很简单 //定义一个十行十列的二维数组,也可以说是一个连续的拥有10个大小...

    我们常用的数据叫做一维数组,是一串连续的内存空间,二维数组是在一维数组的基础上,相当于每一个元素又是一个一维数组
    在这里插入图片描述
    二维数组的定义也很简单

    //定义一个十行十列的二维数组,也可以说是一个连续的拥有10个大小为10的一维数组
    int a[10][10]
    

    二维数组使用的话需要借助与循环嵌套,比如输入

    for(h=0;h<5;h++)
    	{
    		for(l=0;l<5;l++)
    		{
    			printf("输入a[%d][%d]",h,l);
    			scanf("%d",&a[h][l]);
    		}
    	}
    

    那什么是转置呢?

    转置,其实说的是行变列,列边行的一种倒置,效果见下面的代码

    #include"stdio.h"
    main(){
    	int a[10][10],h,l;
    	for(h=0;h<5;h++)
    	{
    		for(l=0;l<5;l++)
    		{
    			printf("输入a[%d][%d]",h,l);
    			scanf("%d",&a[h][l]);
    		}
    	}
    	printf("\n");
    	for(h=0;h<5;h++)
    	{
    		for(l=0;l<5;l++)
    		{
    			printf("%d",a[h][l]);
    		}
    		printf("\n");
    	}
    	printf("\n");
    	printf("\n");
    	for(l=0;l<5;l++)
    	{
    		for(h=0;h<5;h++)
    		{
    			printf("%d",a[h][l]);
    		}
    		printf("\n");
    	}
    }
    

    效果

    输入a[0][0]1
    输入a[0][1]2
    输入a[0][2]3
    输入a[0][3]4
    输入a[0][4]5
    输入a[1][0]6
    输入a[1][1]7
    输入a[1][2]8
    输入a[1][3]9
    输入a[1][4]0
    输入a[2][0]11
    输入a[2][1]12
    输入a[2][2]13
    输入a[2][3]14
    输入a[2][4]15
    输入a[3][0]16
    输入a[3][1]17
    输入a[3][2]18
    输入a[3][3]19
    输入a[3][4]20
    输入a[4][0]21
    输入a[4][1]22
    输入a[4][2]23
    输入a[4][3]24
    输入a[4][4]25
    
    12345
    67890
    1112131415
    1617181920
    2122232425
    
    
    16111621
    27121722
    38131823
    49141924
    50152025
    
    展开全文
  • 以下实现的是矩阵的转置 一、 数组的维度已知时 1. 用普通方法定义,可以用 a [ i ] [ j ]的方式访问数组的数据,传参时发送数组名,接收时写完整数组的形式。 #include<iostream> using namespace std; ...

    以下实现的是矩阵的转置

    一、 数组的维度已知时

    1. 用普通方法定义,是以二维的方式定义的,可以用 a [ i ] [ j ] 这种二维的方式访问数组的数据,传参时发送数组名,接收时写完整数组的形式。

    #include<iostream>
    using namespace std;
    
    void reverse(int a[3][3] ){
    	int c=0;
    	
    	for(int i=0;i<3;i++){
    		for(int j=i;j<3;j++){
    			c = a[i][j];
    			a[i][j]=a[j][i];
    			a[j][i]=c;
    
    		}
    	}
    }
    
    void main(){
    	int a[3][3];
    	cout<<"请输入数据:"<<endl;
    	int i,j;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cin>>a[i][j];
    		}
    	}
    
    
    	cout<<"----------------原数组为------------------"<<endl;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cout<<a[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	reverse(a);
    
    
    	cout<<"----------------转置后数组为------------------"<<endl;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cout<<a[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    }
    

     2. 动态定义数组

    也是以二维的动态方式定义的数组,所以访问时可以用 a [ i ] [ j ] 这种二维的方式访问数组的数据

    #include<iostream>
    using namespace std;
    
    void reverse(int (*a)[3] ){
    	int c=0;
    	
    	for(int i=0;i<3;i++){
    		for(int j=i;j<3;j++){
    			c = a[i][j];
    			a[i][j]=a[j][i];
    			a[j][i]=c;
    
    		}
    	}
    }
    
    
    
    void main(){
    	int(*a)[3]=new int[3][3];//指针数组,左边的数字同列相同(三维数组等号左边的数字是等号右边的两个数字)
    
    	cout<<"请输入数据:"<<endl;
    	int i,j;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cin>>a[i][j];
    		}
    	}
    
    
    	cout<<"----------------原数组为------------------"<<endl;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cout<<a[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	reverse(a);
    
    
    	cout<<"----------------转置后数组为------------------"<<endl;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cout<<a[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    }
    
    

     

     二、数组维度未知时

    这种方法允许用户定义数组维度,普通数组在定义时,方括号内的必须是常数,所以此处必须动态定义数组

    并且要以一维的方式定义,因为动态定义的二维数组指针要返回到一个一维指针数组中,但是这个一维指针数组定义时方括号内也需要常数,如果将此数组指针也动态定义,比较复杂。所以一个n阶矩阵的元素个数就是n * n 个。

    既然是一维数组访问数据 a [ i ] [ j ] 时就要用 a [ i * n + j ] 的方法,传递和接收参数时,用指针,并且同时传递维度 n

    #include<iostream>
    using namespace std;
    
    void reverse(int *p,int n ){
    	int c=0;
    	
    	for(int i=0;i<n;i++){
    		for(int j=i;j<n;j++){
    			c = *(p + i*n + j);
    			*(p + i*n + j) = *(p + j*n + i);
    			*(p + j*n + i) = c;
    		}
    	}
    }
    
    
    
    void main(){
    	int row;
    	cout<<"矩阵维度:";//矩阵是正方形
    	cin>>row;
    
    
    	int *a = new int[row*row];
    	cout<<"请输入数据:"<<endl;
    	int i,j;
    	for(i=0;i<row;i++){
    		for(j=0;j<row;j++){
    			cin>>a[i*row+j];
    		}
    	}
    
    
    	cout<<"----------------原数组为------------------"<<endl;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cout<<a[i*row+j]<<" ";
    		}
    		cout<<endl;
    	}
    	reverse(a,row);
    
    
    	cout<<"----------------转置后数组为------------------"<<endl;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cout<<a[i*row+j]<<" ";
    		}
    		cout<<endl;
    	}
    }
    

     

    展开全文
  • 二维数组转置

    千次阅读 2020-02-15 15:20:20
    二维数组转置 输入一个n行m列的数组,输出他的转置,具体来说: 输出的第i行第j个数字,应是输入的第j行第i个数字。 1 <= n <= 100 1 <= m <= 100 1 <= aij <= 1000 Input 第一行两个整数n, m...

    二维数组转置

    输入一个n行m列的数组,输出他的转置,具体来说:
    输出的第i行第j个数字,应是输入的第j行第i个数字。
    1 <= n <= 100
    1 <= m <= 100
    1 <= aij <= 1000

    Input

    第一行两个整数n, m表示数组的行数和列数 接下来n行,每行m个整数表示数组内容。

    Output

    第一行先输出m, n。 接下来输出转置的结果,共m行n列。 其中第i行第j个数字,应是输入的第j行第i个数字。

    Sample Input

    3 2
    1 2
    3 4
    5 6

    Sample Output

    2 3
    1 3 5
    2 4 6

    AC代码:

    #include<iostream>
    using namespace std;
    int main()
    {
        int m,n,a[100][100];
        cin>>m>>n;
        for(int i=0; i<m; i++)
            for(int j=0; j<n; j++)
                cin>>a[i][j];
        cout<<n<<' '<<m<<endl;
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
                cout<<a[j][i]<<' ';//每一行没有要求不能有多余空格,所以可以这么写。
            cout<<endl;
        }
        return 0;
    }
    
    

    永远相信美好🎈

    展开全文
  • void Transpose(int (*p1)[N],int (*p2)[N],int r,int c) //转置函数 { int i,j; for(i=0;i<r;i++) for(j=0;j<c;j++) p2[j][i]=p1[i][j]; } int main() { int sz1[M][N],sz2[N][M],
  • vc+ 用指针实现二维数组转置,通过指针实现对二维数组转置操作
  • 二维数组转置C语言详解

    千次阅读 多人点赞 2020-03-01 14:48:05
    转置:简单的说就是行列互换 编译环境:vc++6.0 代码 #include <stdio.h> #define M 3 #define N 4 int Transpose(int arry1[][N],int arry2[][M]) //转置函数 { for(int i=0;i<M;i++) for(int j=0;j&...
  • 输入一个n行m列的数组,输出他的转置,具体来说 输出的第i行第j个数字,应是输入的第j行第i个数字。...特别注意,你并不能声明一个二维数组,两维的大小都是20000。(回顾课件中,数组不能太大,二...
  • 输入一个n行m列的矩阵A,输出它的转置A^T。 输入 第一行包含两个整数n和m,表示矩阵A的行数和列数(1≤n≤100,1≤m≤100)。 接下来n行,每行m个整数,表示矩阵A的元素。相邻两个整数之间用单个空格隔开,每个元素均...
  • package homework1_1; /** * @description: ${description} * @create: 2019-02-03 **/ public class LineAndColumnChange { public static double[][] tran1(double[][] a){ int q=a.length;...
  • 有下面这样的一个二维表,请将其使用二维数组输出 姓名 语文 数学 英语 张三 80 70 90 李四 40 50 90 王五 90 98 100 题解 与几位童鞋交流了一下发现他们都把汉字单独拿出来了,只用数组存储的成绩,...
  • System.out.println("---转置---" ); 24 int [][] B = transpose(A); 25 26 // 方法一:传统的for循环 27 // for (int i = 0; i ; i++) { 28 // for (int j = 0; j [i].length; j++) 29 // ...
  • 二维数组实现转置

    千次阅读 2019-05-07 11:48:00
    转置数组行数最大值为a数组列数 29 { 30 for (j= 0 ;j;j++) // 转置数组列数最大值为a数组行数 31 printf( " \t%d " ,b[i][j]); /* 输出转置数组元素 */ 32 printf( " \n " ); /* 每输出一行...
  • 输入一个(3*3)整数二维数组转置后输出。 输入描述 在一行输入9个整数,以空格分开 输出描述 输出转置后的(3*3)二维数组 输入样例 1 2 3 4 5 6 7 8 9 输出样例 1 4 7 2 5 8 3 6 9 import java.util.Scanner; ...
  • C++维数组实现矩阵的转置与乘法

    千次阅读 2018-10-24 21:34:36
    矩阵的构建策略 为保证多数据的兼容性,以及广泛性。本篇笔者使用C++模板进行书写。同时变量定义使用了“()”进行初始化操作。 首先是构造可变长数组的策略:使用...//使用此方法进行一可变长数组的构造 int ...
  • //1、定义一个3*3的二维数组 //2、输入内容,并在屏幕中输出 //3、运用for循环嵌套将数组转置,并输出   (1)我的程序:运用中间量交换 -错误版:转置算法有问题,需要好好模拟一下
  • 1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换Time Limit:1 SecMemory Limit:128 MBSubmit:154Solved:112[Submit][Status][Web Board]Description写一个函数,使给定的一个二维数组(3×3)转置...
  • C++/C------二维数组转一维数组

    千次阅读 2020-03-13 21:07:37
    初始化 int a[3][3];//方式1 int b[][3];//方式2 占用内存 int Memory_usage = sizeof(a);//Memory_usage 为数组占用的内存空间 int Single_usage = sizeof(a[0]...二维数组转一位数组 法1: #include <iostrea...
  • C++每天一题:二维数组中的查找题目描述调试结果C++代码 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...
  • 二维数组之间的行列对换 #include<iostream> #include<iomanip> using namespace std; int fun(int array[3][3]) { int i, j, t; for (i=0;i<3;i++) for (j = 0; j < i; j++) { t = ...
  • 二维数组转置。(行变列、列变行) num[5][5] = { {1,6,2,3,7}, {2,7,3,2,2}, {3,2,5,2,6}, {3,2,6,4,2}, {4,3,7,4,8} }; */ #include #include #include #define H 5 #define L 5 int main...
  • 刚看到网上一篇博文里用sql实现了行列转置。sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现。提到转置,立刻想起还在求学阶段曾经...1、二维数组转置  class Program { p...
  • C++中二维数组传参的方法详解 首先需要明确,C++中其实没有多维数组,所谓的多维数组,其实就是数组的数组; 另外,数组中元素的个数也是数组类型的一部分。...1. 将给定第二维长度的二维数组作为形参传递 #inclu
  • 废话不多说,直接上代码 代码如下:#include <iostream>using namespace std; const int N = 5; int matrix[5][5] ={ 1,2,3,4,5, 1,2,3,4,5, 1,2,3,4,5, 1,2,3,4,5, 1,2,3,4,5}; void swap(int &a,int &b){ a=a...
  • 一、二维数组的介绍 当数组元素具有两个下标时, 该数组称为二维数组。 二维谁可以看做具有行和列的平面数据结构。二、二维数组的定义 定义二维数组的形式: 数据类型 数组名[常量表达式1][常量表达式2] ; 数据类型是...
  • }//这个指针形式的二维数组的输入可以考虑考虑成三个一维数组。 } ///程序填空,请将该函数填写完整 } void transpose(int *p) { int i,j=0; int t[9]; for(i=0,j=0;i;i++,j++){ t[j]=*(p+j); } *p=t[0]; *(p+1)=t...
  • 如何实现一个二维数组转置

    千次阅读 2016-04-26 15:26:55
    我们知道,如果将二维数组作为函数参数传入,需要指定二维数组的列数,如下所示。但是为了提高程序的可扩展性,我们不希望指定二维数组的行列数,所以我们想到传递给函数的是一维数组,以及数组的行数和列数。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,058
精华内容 1,223
关键字:

c++二维数组转置

c++ 订阅