每日一题C语言3

题目:
实现一个六行六列的整型矩阵,初值的十位为行号,个位为列号,
(如第1行第6列的值为16,第3行第4列的值为34)
再将这个矩阵转置,即第一行元素放在第一列上,第二列的元素放在第二行上,以此类推

思路
创建一个结构体存储矩阵的行列数量,值的信息由二维数组来存储,
再对该矩阵进行初始化, m.data[i][j] = (i+1)*10+(j+1);
关于转置,其实就是把行列的数据互换 output.data[j][i] = input.data[i][j];
代码如下

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/**************************************************************/
typedef struct {
  /* 维度 */
  int rows;
  int cols;
  /* 内容 */
  int** data;
} Matrix;


/* 为矩阵分配初始空间 */
Matrix alloc_matrix(int rows, int cols) {
  Matrix m;
  int i;
  int j;
  m.rows = rows;
  m.cols = cols;
  m.data = (int**) malloc(sizeof(int*) * m.rows);

  for ( i = 0; i < m.rows; ++i) 
  {
    m.data[i] = (int*) malloc(sizeof(int) * m.cols);
    //assert(m.data[i]);
    for ( j = 0; j < m.cols; ++j) {
      m.data[i][j] = (i+1)*10+(j+1);
    }
  }
  return m;
}
/* 打印矩阵 */
void print_matrix(Matrix m) {
    int i;
    int j;
  for ( i = 0; i < m.rows; ++i) {
    for ( j = 0; j < m.cols; ++j) {
      if (j > 0) {
    printf(" ");
      }
      //printf("%6.2f", m.data[i][j]);
      printf("%6d", m.data[i][j]);
    }
    printf("\n");
  }
}

void transpose_matrix(Matrix input, Matrix output) {
    int i;
    int j;
    //int k;
  assert(input.rows == output.cols);
  assert(input.cols == output.rows);
  for ( i = 0; i < input.rows; ++i) {
    for ( j = 0; j < input.cols; ++j) {
      output.data[j][i] = input.data[i][j];
    }
  }
}
int main()
{
	Matrix a;
    Matrix b;
    a=alloc_matrix(6,6);
    b=alloc_matrix(6,6);
    print_matrix(a);
    transpose_matrix(a,b);
    printf("\n");
    print_matrix(b);
	return 0;
}

运行结果如下:
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值