刷题:n*n的矩阵转置,矩阵个元素随机生成

1 篇文章 0 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


题目

编写函数、完成n*n矩阵的转置操作,矩阵各元素随机生成。


一、思想

首先需要对nn矩阵实现初始化,使用动态数组,并随即进行数
组元素生成。动态二维数组的每一元素包含的是动态一维数组。使用数组指针,
分配一个指针数组、int**arr=new int
[n],再为每一元素循环分配数组,
使用arr[i]=new int[n]。此时二维数组的声明结束,元素的初始化可以使
用rand()%100来产生0-99赋值给动态二维数组。对于矩阵的转置,因为
题目要求是方阵,因此只需要通过对上下三角内元素进行交换即可实现。遍历矩
阵的上三角或下三角,将arr[i][j]元素与arr[j][i]进行交换即可。

二、代码实操

代码如下(示例):

#include<stdio.h>
#include <iostream>
#include <cstdlib>
#include <ctime>


using namespace std;
const int N = 3; // 定义矩阵的大小为3*3,可以根据需要修改
int main()
{
    int a[N][N], b[N][N]; // 定义原矩阵a和转置后的矩阵b
    srand(time(NULL)); // 设置随机数种子
    // 随机生成矩阵a的元素
    cout << "矩阵a为:" << endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            a[i][j] = rand() % 100;
                cout << a[i][j] << " ";
        }
        cout << endl;
    }
    // 进行矩阵转置
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            b[j][i] = a[i][j]; // 将原矩阵中的行和列对调
        }
    }
    // 输出转置后的矩阵b
    cout << "矩阵b为:" << endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << b[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}


代码分析

代码分析:

  1. 首先定义了一个常量N表示矩阵的大小,这里设为3。
  2. 定义了两个二维数组a和b,分别表示原矩阵和转置后的矩阵。
  3. 通过srand和time函数设置随机数种子,以便生成随机数。
  4. 随机生成矩阵a的元素,并输出到屏幕上。
  5. 进行矩阵转置,即将原矩阵中的行和列对调,得到转置后的矩阵b。
  6. 输出转置后的矩阵b到屏幕上。
    值得注意的是,这里采用了“行优先”的存储方式,即在二维数组中,第一维是行数,第二维是列数。在进行矩阵转置时,需要将原矩阵中的行和列对调,因此循环中第一个循环变量i用于遍历行,第二个循环变量j用于遍历列,而在对二维数组进行访问时,第一个下标表示行,第二个下标表示列。因此,在将原矩阵中的a[i][j]转置到b[j][i]时,需要将第一个下标j放在前面,第二个下标i放在后面。这样就可以得到转置后的矩阵b了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

popcorn_min

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值