秋学期の授業のために、夏休み中に自主勉強としてやっているものです。
キーボードから次元 N を入力した後,N × N の配列の各行の合計を求めて,どの行の合計が最大かを表示するプログラムである.
上記のような問題で、下記のようにソースコードを書いたのですが、出力がおかしくエラーなっててしまいます。
確かめていただける方やわかる方いらっしゃいましたらご指摘していただけるとありがたいです。ポインタは秋学期の授業で勉強する内容ということもあり、これ以上はエラーの原因がわかりませんでした、、、。どうぞよろしくお願いいたします。
#include <stdio.h> #include <stdlib.h> int main(void){ int i,j,N,bmaxno=0; double *A,*ai,*b,bmax = 0.0; printf("N= "); scanf("%d",&N); A= (double *) malloc(N*N*sizeof(double)); if(A==NULL){ printf("Can’t allocate memory.Y=n"); exit(1); } b= (double *) malloc(N*sizeof(double)); if(b==NULL){ printf("Can’t allocate memory.Y=n"); exit(1); } ai = A; for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("A[%d][%d] = ",i,j); scanf("%lf",&ai[j]); } ai+=N; } for(i=0;i<N;i++){ for(j=0;j<N;j++){ b[i]+=ai[j]; } printf("b(%d) = %f\n", i, b[i]); } for(i=0;i<N;i++){ if(bmax <b[i]){ bmax = b[i]; bmaxno = i; } } free(A); free(b); printf("%d is Maxnumber\n",bmaxno); return 0; } コード
出力が以下のようになってしまい、各行の合計を表すb(i)が全て0になってしまいます。
これを直すにはどのようにすればよろしいでしょうか。
N= 3
A[0][0] = 9
A[0][1] = 8
A[0][2] = 7
A[1][0] = 1
A[1][1] = 2
A[1][2] = 3
A[2][0] = 2
A[2][1] = 3
A[2][2] = 4
b(0) = 0.000000
b(1) = 0.000000
b(2) = 0.000000
2 throw
Program ended with exit code: 0
回答1件
あなたの回答
tips
プレビュー