c++编程题 大家看下~谢啦

编写一个函数fun(),其功能是计算二维数组a[N][N]的两条对角线元素之和,并调用该函数求下列方阵的两条对角线元素之和:123456789高手们!问题是编写一个求和程... 编写一个函数fun(),其功能是计算二维数组a[N][N] 的两条对角线元素之和,并调用该函数求下列方阵的两条对角线元素之和:
1 2 3
4 5 6
7 8 9
高手们! 问题是编写一个求和程序 而不是把
1 2 3
4 5 6
7 8 9 这个例子算出来!!
展开
 我来答
q嘿仔
2009-05-12 · TA获得超过2879个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:187万
展开全部
用模板(template)非常适合,而且你想传入N等于多少的都行,而且是隐式调用,你不用明确指出
下面是函数代码还示范用例(N=3, N=5)
注:两条对角线元素之和?我不知道是分别呢还是把他们都加起来,我下面是分开的,如果需要加起来,你直接加一下两个结果就行了
如:cout << Matrix_diagonal_sum_left(matrix_3)+Matrix_diagonal_sum_right(matrix_3) << endl;
则得出30

#include <iostream>
using namespace std;

template <class Type, size_t n>
int Matrix_diagonal_sum_left (Type (&matrix)[n][n])
{
int sum(0);
for (size_t index = 0; index != n; ++index)
sum += matrix[index][index];
return sum;
}

template <class Type, size_t n>
int Matrix_diagonal_sum_right (Type (&matrix)[n][n])
{
int sum(0);
for (size_t index = 0; index != n; ++index)
sum += matrix[index][n-1-index];
return sum;
}

int main ()
{
int matrix_3[3][3] = {1, 2, 3,
4, 5, 6,
7, 8, 9};
// 1 + 5 + 9
cout << Matrix_diagonal_sum_left(matrix_3) << endl;
// 3 + 5 + 7
cout << Matrix_diagonal_sum_right(matrix_3) << endl;

int matrix_5[5][5] = {1, 2, 3, 4, 5,
10, 9, 8, 7, 6,
11, 12, 13, 14, 15,
21, 22, 23, 24, 25,
20, 19, 18, 17, 16};
// 1 + 9 + 13 + 24 + 16
cout << Matrix_diagonal_sum_left(matrix_5) << endl;
// 5 + 7 + 13 + 22 + 20
cout << Matrix_diagonal_sum_right(matrix_5) << endl;
}

输出结果为:
15
15
63
67
你可以验证一下~~ 呵呵~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dbecaad78
2009-04-26 · TA获得超过2402个赞
知道大有可为答主
回答量:2592
采纳率:0%
帮助的人:1490万
展开全部
int fun(int a[][N],int N)
{
int i=0;
sum=0;
for(i=0;i<n;i++)
{
if(2*i!=(n-1))//去掉 中间重复的 数字 例如上面的5
sum+=a[i][i]+a[n-i-1][i];
else
sum+=a[i][i];
}
return sum;
}
应该如此吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bestyeran
2009-04-27
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
你这是C++ 中二维数组的实现问题
二维数组在C++中是使用指向数组的指针实现
例如int a[3][3];

a[0]是 int (*)[3]类型,并非int* [3]类型

传递时使用int **p就会报错,说类型不符以下是我自己编写的程序

#include <iostream>
using namespace std;
int fun(int number,void *q){
const int n = number;

int (*p)[n] = (int (*)[n])q;
if(1 == n){
return p[0][0];
}else if(n % 2 == 0){
int sum = 0;
for(int i = 0;i < n;i++){
sum += p[i][i];
sum += p[i][n - 1 - i];
}
return sum;
}else{
int sum = 0;
for(int i = 0;i < n;i++){
sum += p[i][i];
sum += p[i][n - 1 - i];
}
sum -= p[n / 2][n / 2];
return sum;
}
}

int main(){
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
cout << fun(3,a) << endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦想窗外
2009-04-26 · TA获得超过1588个赞
知道大有可为答主
回答量:1180
采纳率:0%
帮助的人:1596万
展开全部
#include <iostream>
using namespace std;

#define NUM 3

int fun(int a[][NUM], int n = NUM)
{
int sum = 0, i, j;

for (i = 0; i < n; ++i)
{
sum += a[i][i];
}

for (i = 0, j = n - 1;i < n; ++i, --j)
{
sum += a[i][j];
}

return sum;
}

int main()
{
int a[NUM][NUM] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

cout << fun(a) << endl;
system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaycnvip
2009-05-01 · TA获得超过767个赞
知道小有建树答主
回答量:998
采纳率:100%
帮助的人:661万
展开全部
double fun(double **pa,int N)
{
double s = 0;
for(int i = 0;i<N;++i)
s += pa[i][i];
for(int j = 0;j<N;++j)
s += pa[j][N-1-j];
return s;
}

注意: N 指的是二维数组的秩,如本题 N = 3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式