请用C语言编写一个程序,要求:可以实现多组输入。编写一个函数,计算二维整型数组中各列之和。主函数中进行输入、输出。要求使用动态内存分配实现。
时间: 2023-06-25 18:01:49 浏览: 101
下面是使用动态内存分配实现二维整型数组列求和的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
int* colSum(int **arr, int rows, int cols) {
int *sum = calloc(cols, sizeof(int));
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
sum[i] += arr[j][i];
}
}
return sum;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int rows, cols;
scanf("%d%d", &rows, &cols);
int **arr = malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
arr[i] = malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
scanf("%d", &arr[i][j]);
}
}
int *sum = colSum(arr, rows, cols);
for (int i = 0; i < cols; i++) {
printf("%d ", sum[i]);
}
printf("\n");
free(sum);
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
}
return 0;
}
```
程序中先输入测试组数 T,然后对于每组测试数据,先输入数组行数和列数,再动态分配二维数组的内存,并读入数组元素。然后调用 colSum 函数计算列求和,最后输出结果并释放内存。
注意,程序中使用了 calloc 函数分配了一个大小为 cols 的 int 型数组 sum,用于记录列求和结果,因为这个数组的值是需要清零的,如果使用 malloc 分配的话需要手动清零,比较麻烦。另外,释放内存的顺序应该是先释放二维数组的每一行,再释放二维数组本身,最后释放求和数组。
阅读全文