c语言实现:编写一个函数,该函数的功能是求一个m行n列矩阵的转置矩阵
时间: 2024-02-20 10:57:06 浏览: 75
可以使用二维数组来表示矩阵,下面是一个示例代码:
```c
void transpose(int mat[][n], int m, int n) {
int i, j, temp;
for (i = 0; i < m; i++) {
for (j = i+1; j < n; j++) {
temp = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = temp;
}
}
}
```
其中,`mat`表示输入的矩阵,`m`表示矩阵的行数,`n`表示矩阵的列数。函数中的两个循环分别遍历矩阵的上三角和下三角,将每个元素与其对称位置的元素进行交换,即可得到转置矩阵。
相关问题
用C语言编写一个程序,要求:编写一个矩阵转置函数,矩阵的行数和列数由输入数据给定。要求使用动态内存分 配实现。
以下是用C语言编写的矩阵转置函数程序,使用了动态内存分配:
```c
#include <stdio.h>
#include <stdlib.h>
void transpose(int **matrix, int rows, int cols) {
int i, j, temp;
// Transpose the matrix
for (i = 0; i < rows; i++) {
for (j = i+1; j < cols; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
int main() {
int i, j, rows, cols;
int **matrix;
printf("Enter the number of rows: ");
scanf("%d", &rows);
printf("Enter the number of columns: ");
scanf("%d", &cols);
// Allocate memory for the matrix
matrix = (int **)malloc(rows * sizeof(int *));
for (i = 0; i < rows; i++) {
matrix[i] = (int *)malloc(cols * sizeof(int));
}
// Read in the matrix
printf("Enter the matrix elements:\n");
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
scanf("%d", &matrix[i][j]);
}
}
// Transpose the matrix
transpose(matrix, rows, cols);
// Print the transposed matrix
printf("The transposed matrix is:\n");
for (i = 0; i < cols; i++) {
for (j = 0; j < rows; j++) {
printf("%d ", matrix[j][i]);
}
printf("\n");
}
// Free the memory
for (i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
```
该程序使用了一个名为 `transpose()` 的函数来执行矩阵转置操作。该函数接受一个二维整数指针、矩阵的行数和列数作为参数。在函数内部,使用两个循环来交换矩阵中对角线以下的元素和对角线以上的元素。最后,程序在 `main()` 函数中调用 `transpose()` 函数来转置输入的矩阵,并打印输出转置后的矩阵。程序还使用 `malloc()` 函数动态分配内存来创建矩阵。在程序结束时,使用 `free()` 函数释放分配的内存。
用C语言编写:编写函数求任意方阵每行、每列、对角线元素之和。
可以使用以下代码来实现:
```c
#include <stdio.h>
#define N 3 // 定义矩阵的维度
// 求矩阵每行、每列、对角线元素之和
void sumMatrix(int matrix[][N]) {
int rowSum, colSum, diagonalSum1 = 0, diagonalSum2 = 0;
for (int i = 0; i < N; i++) {
rowSum = 0;
colSum = 0;
for (int j = 0; j < N; j++) {
rowSum += matrix[i][j]; // 求每行元素之和
colSum += matrix[j][i]; // 求每列元素之和
if (i == j) {
diagonalSum1 += matrix[i][j]; // 求主对角线元素之和
}
if (i + j == N - 1) {
diagonalSum2 += matrix[i][j]; // 求副对角线元素之和
}
}
printf("第 %d 行元素之和为:%d\n", i + 1, rowSum);
printf("第 %d 列元素之和为:%d\n", i + 1, colSum);
}
printf("主对角线元素之和为:%d\n", diagonalSum1);
printf("副对角线元素之和为:%d\n", diagonalSum2);
}
int main(void) {
int matrix[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 定义矩阵
sumMatrix(matrix); // 求矩阵每行、每列、对角线元素之和
return 0;
}
```
这里定义了一个 `sumMatrix` 函数用来求任意方阵每行、每列、对角线元素之和。函数中使用了两个循环,分别用来遍历矩阵中的每一行和每一列,并且在循环中判断是否为主对角线或副对角线上的元素,从而求出对应的对角线元素之和。最后在函数中使用 printf 函数打印出每行、每列、对角线元素之和的值。在主函数中定义了一个 `matrix` 数组来存储矩阵的元素,调用 `sumMatrix` 函数求解矩阵每行、每列、对角线元素之和。
阅读全文
相关推荐
















