【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

行列を使ったC言語のプログラムの作成をしようとしているのですが、
最初で躓いてしまっています。次に内容を出すので何がダメなのか教えて下さい。

行列A=0 0 0 0
     1 -2 0 0
     0 0 0 -0.0201
     0 0 1 -2.01005

#include<stdio.h>
#include<math.h>

void main(void){
double a[4][4]={{0,0,0,0},{1,-2,0.0},{0,0,0,-0.0201},{0,0,1,-2.01005}};
double det=0.0;
det=a[2][1]*a[2][2]*a[4][3];

printf("%f\n",det);
scanf("%lf",&det);


確認用の計算で、1*-2*1=-2という結果になると思ったのですが、
実行すると表示される値が「0」でした。
箇所の指定も行列の内容も多分間違ってないと思え、どこに問題があるのかわかりません。

後、デバックによる出力の際に画面が一瞬出てすぐに消えるんですがそれについても
分かるならお願いします。(とりあえず最後にscanfを入れて凌げるのでついででいいです。)

A 回答 (3件)

C言語の配列は0から始まります。


あなたがa[2][1]だと思っているのは
0 0 0 0
[1] -2 0 0
0 0 0 -0.0201
0 0 1 -2.01005
かと思うのですが、C言語ではa[2][1]は
0 0 0 0
1 -2 0 0
0 [0] 0 -0.0201
0 0 1 -2.01005
です。

この回答への補足

なるほど0からだったんですね、完全に忘れてました。
今日はもう試せない(家のPCにはC++が無い)ので明日
座標を調整して試みてみます。

補足日時:2012/12/06 23:00
    • good
    • 0

det=a[1][0]*a[1][1]*a[3][2];


で1*-2*1です。
a[4][4]はa[0][0]からa[3][3]までです。
a[4][3]は何が入っているか不明ですので恐ろしい計算になるかも知れません。
    • good
    • 0

double a[4][4] の各添字は 0,1,2,3 のいずれかです。

 1,2,3,4 ではありません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報