C
1#include <stdio.h> 2#include <stdlib.h> 3void print_matrix2(int n, float **mat); 4void square_matrix2(int n, float **mat_in, float **mat_out); 5void malloc2(int n,float **m); 6 7int main(void) { 8 int i,j,n; 9 float **l,**m; 10 11 printf("Input a positive number.\n"); 12 scanf("%d",&n); 13 14 malloc2(n,m); 15 malloc2(n,l); 16 17 for(i=0;i<n;i++){ 18 for(j=0;j<n;j++){ 19 m[i][j] = i*n + j;//配列mの初期化 20 } 21 } 22 printf("M="); 23 print_matrix2(n, m); 24 square_matrix2(n,m,l); 25 printf("M^2="); 26 print_matrix2(n,l); 27 28 return 0; 29} 30 31/*正方行列を表示*/ 32void print_matrix2(int n, float **mat){ 33 int i,j; 34 for(j=0;j<n;j++){ 35 for (i=0; i<n;i++){ 36 printf("%lf",mat[i][j]); 37 }printf("\n"); 38 } 39} 40/*行列の二乗を計算*/ 41void square_matrix2(int n, float **mat_in, float **mat_out){ 42 int i,j,k; 43 float a; 44 for (i=0; i<n;i++) { 45 for (j=0; j<n; j++){ 46 a = 0; 47 for (k=0; k<n; k++) { 48 a=a+mat_in[i][j]+mat_in[j][i]; 49 } 50 mat_out[i][j]=a; 51 } 52 } 53} 54/*n*n配列用メモリの動的確保*/ 55void malloc2(int n,float **m){ 56 int i; 57 m=(float **)malloc(sizeof(float *)*n); 58 for(i=0;i<n;i++){ 59 *(m+i)=(float *)malloc(sizeof(float)*n); 60 } 61} 62
課題で行列の二乗を計算(行列はプログラム内で定義)するプログラムを書いたのですが、行列サイズnを入力した後、結果が出力されません。
また、入出力用の配列は動的にメモリを確保せよという条件つきです。(malloc2で行っているつもり)。eclipseで実行したところ
Variable 'l(m)' is uninitialized... といった警告が出ていますが、lやmにはあとから値を入れ、自信を再代入しているわけでもないので
これもよくわかりません。
行列の表示や計算の関数(print_matrix2,square_matrix2)は問題ないと思っています。
とりあえず、正しい結果が出力されるようにしたいです。どうかご教授お願いいたします。
とりあえずは、
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/02 12:45