C++里我们定义一个n行n列的二维数组data,定义函数模板calcu(用来计算data每一行从1号元素到n-1号元素的总和,并将其保存到该行的0号元素中,函数返回变化后主对角线的和,再用函数模版print()输出data,如何实现呢?
时间: 2024-06-12 13:07:47 浏览: 50
C++的函数模板和类模板
5星 · 资源好评率100%
以下是实现代码:
```c
#include <stdio.h>
#define N 5
int calcu(int data[][N], int n) {
int diagonal_sum = 0;
for (int i = 0; i < n; i++) {
int row_sum = 0;
for (int j = 1; j < n; j++) {
row_sum += data[i][j];
}
data[i][0] = row_sum;
diagonal_sum += data[i][i];
}
return diagonal_sum;
}
void print(int data[][N], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", data[i][j]);
}
printf("\n");
}
}
int main() {
int data[N][N] = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25} };
int diagonal_sum = calcu(data, N);
printf("Diagonal sum: %d\n", diagonal_sum);
printf("Data:\n");
print(data, N);
return 0;
}
```
首先,在定义函数模板calcu时,使用了一个二维数组的指针作为参数,这里用data[][N]来表示,其中N为列数,因为行数n在函数调用时已经确定。
接着,我们在函数内部使用了两个for循环,第一个for循环用来遍历每一行,第二个for循环用来计算每一行从1号元素到n-1号元素的总和,并将其保存到该行的0号元素中,同时累加主对角线的元素值。
最后,我们定义了另一个函数模板print,用来输出data数组中的元素。再在main函数中调用calcu和print函数,输出主对角线的和和数组元素。
阅读全文