C语言把 2. 文件matrix.txt中第一行为一个矩阵的行数和列数,接下来的m行存放了每一列的数据,即存储了整个矩阵的值。使用malloc动态地创建一个m行n列的二维数组,编写程序从文件中读取这个矩阵,调用函数max_value来返回矩阵中的最大值,并输出到matrix.txt文件中,并且,在接下来的n行中,输出这个矩阵的转置。
时间: 2023-06-18 16:06:43 浏览: 92
以下是实现该功能的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 返回矩阵中的最大值
int max_value(int **matrix, int m, int n) {
int max = matrix[0][0];
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(matrix[i][j] > max) {
max = matrix[i][j];
}
}
}
return max;
}
int main() {
FILE *fp;
int m, n;
int **matrix = NULL;
// 从文件中读取矩阵
fp = fopen("matrix.txt", "r");
if(fp == NULL) {
printf("Error opening file!\n");
return 1;
}
fscanf(fp, "%d %d", &m, &n);
matrix = (int **)malloc(m * sizeof(int *));
for(int i = 0; i < m; i++) {
matrix[i] = (int *)malloc(n * sizeof(int));
for(int j = 0; j < n; j++) {
fscanf(fp, "%d", &matrix[i][j]);
}
}
fclose(fp);
// 计算矩阵最大值
int max = max_value(matrix, m, n);
// 将最大值写入文件
fp = fopen("matrix.txt", "a");
if(fp == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(fp, "%d\n", max);
fclose(fp);
// 输出矩阵的转置
fp = fopen("matrix.txt", "a");
if(fp == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(fp, "\n");
for(int j = 0; j < n; j++) {
for(int i = 0; i < m; i++) {
fprintf(fp, "%d ", matrix[i][j]);
}
fprintf(fp, "\n");
}
fclose(fp);
// 释放动态分配的内存
for(int i = 0; i < m; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
```
文件 matrix.txt 的内容应该为:
```
3 4
1 2 3 4
5 6 7 8
9 10 11 12
12
1 5 9
2 6 10
3 7 11
4 8 12
```
阅读全文