题目:
实现一个六行六列的整型矩阵,初值的十位为行号,个位为列号,
(如第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;
}
运行结果如下: