當前位置:編程學習大全網 - 編程語言 - c++題:設計壹個程序,求壹個n*n階矩陣兩對角線元素之和

c++題:設計壹個程序,求壹個n*n階矩陣兩對角線元素之和

#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++;

}

}

  • 上一篇:驚艷的句子致敬最美逆行者(64)
  • 下一篇:哪個gpu計算aes最快
  • copyright 2024編程學習大全網