c++题:设计一个程序,求一个n*n阶矩阵两对角线元素之和

如题所述

第1个回答  推荐于2017-12-16
#include <stdio.h>
#include <stdlib.h>

void print(int m, int p, int *p4); /*函数声明*/

int main()
{
int test_num = 0; /*要计算的次数*/
int comp_times = 0; /*已经执行计算的次数*/
int m, n, p, i, j, k, sum, x; /*m,n,p确定矩阵形式,i,j表行与列,sum求每次计算之和*/
int *p1 = NULL; /*定义3个指针并初始化*/
int *p2 = NULL;
int *p3 = NULL;

scanf ("%d", &test_num); /*读入要运算的次数*/

for( ; comp_times < test_num; comp_times++) /*当执行次数等于所要运行次数时退出*/
{
scanf("%d %d %d", &m, &n, &p); /*确定矩阵形式,m*n和n*p阶矩阵*/

p1 = malloc( (m * n) * sizeof(int) ); /*申请内存*/
p2 = malloc( (n * p) * sizeof(int) );
p3 = malloc( (m * p) * sizeof(int) );

for( i = 0; i < m * n; i++) /*读入第一个矩阵*/
{
scanf("%d", &*(p1 + i));
}
for( i = 0; i < n * p; i++) /*读入第二个矩阵*/
{
scanf("%d", &*(p2 + i));
}

/*以下计算矩阵乘法,并将每次的运算结果存入第三块内存*/
for(i = 0; i < m; i++)
{
for(j = 0; j < p; j++)
{
for (k = sum = 0; k < n; k++)
{
x = *(p1 + k + i*n) * *(p2 + k*p + j);
sum += x; /*累加求和*/
}
*(p3 + i*p + j) = sum;
}
}

print(m, p, p3);

free(p1);
free(p2);
free(p3);
}

return 0;
}

/*定义打印矩阵相乘结果的函数,变量分别为矩阵类型以及指
针p4用以实现每打p个数值后面就有一个回车,否则为空格*/
void print(int m, int p, int *p4)
{
int i = 0;

while (i < m * p)
{
if (i % p == p - 1)
printf("%d\n", *(p4 + i));
else
printf("%d ", *(p4 + i));
i++;
}
}本回答被网友采纳
第2个回答  2013-06-28
int f(int **a,int n) //n*n的矩阵a[][]
{
int i;
int s=0;
for(i=0;i<=n-1;i++)
{
s=s+a[i][i]+a[i][n-1-i];
}
return s;
}
相似回答