
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 这个例子算出来!! 展开
1 2 3
4 5 6
7 8 9
高手们! 问题是编写一个求和程序 而不是把
1 2 3
4 5 6
7 8 9 这个例子算出来!! 展开
7个回答
展开全部
用模板(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
你可以验证一下~~ 呵呵~
下面是函数代码还示范用例(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
你可以验证一下~~ 呵呵~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
应该如此吧
{
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;
}
应该如此吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这是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;
}
二维数组在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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
{
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询