ここから本文です

C言語、行列AとBの積を求める問題で悩んでいます。以下のプログラムでコンパイルし...

max********さん

2011/7/2214:34:15

C言語、行列AとBの積を求める問題で悩んでいます。以下のプログラムでコンパイルしたところ、最後の行で「到達できない文です」とエラーが出てきてしまいます。どのように改善すればよいのでしょうか?

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
double A[100][100];
double B[100][100];
double C[100][100];
int m;
int n;
int p;
int i, j, k;

printf("行列 A と 行列 B の積を求める\n");

while (1) {
do {
printf("行列 A の行数を入力: ");
scanf("%d", &m);
} while ((m <= 0) || (100 < m));

do {
printf("行列 A の列数(行列 B の行数)を入力: ");
scanf("%d", &n);
} while ((n <= 0) || (100 < n));

do {
printf("行列 B の列数を入力: ");
scanf("%d", &p);
} while ((p <= 0) || (100 < p));


printf("\n行列 A の成分を入力:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &A[i][j]);
}
}

printf("\n行列 B の成分を入力:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < p; j++) {
scanf("%lf", &B[i][j]);
}
}

for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
C[i][j] = 0;
}
}

for(i = 0; i < m; i++){
for(j = 0; j < p; j++){
for(k = 0; k < n; k++){
C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
}
}

printf("\n");
for(i = 0; i < m; i++){
for(j = 0; j < p; j++){
printf("%f ",C[i][j]);


}
printf("\n");
}
}

return 0;

}

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
615
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

twe********さん

編集あり2011/7/2215:17:03

【エラーの意味】
プログラムの一番最後に書かれている、return 0;は永遠に実行されませんという意味です。

while(1)を使って、無限ループを作っていますが、そのループから出る処理がありません。
なので、return 0;は永遠に実行されません。

【対処方法】
・ while(1)を削除してしまう。
・ while(1)の無限ループから抜け出す処理を付け加える。(何かの条件が成立した場合に、無限ループから抜け出す様にします。)

int main(void)
{



int select; // 変数の宣言を追加

while (1) {
do {
printf("行列 A と 行列 B の積を求めますか?(はい:1, いいえ:0)\n");
scanf("%d", &select); //
} while(select !=0 || select != 1);

if(select == 0)
break; // 無限ループから抜け出す。

do {
printf("行列 A の行数を入力: ");
scanf("%d", &m);
} while ((m <= 0) || (100 < m));



}

return 0;

}

質問した人からのコメント

2011/7/25 10:17:29

感謝 なるほど!詳しい解説ありがとうございました。よくわかりました。

ベストアンサー以外の回答

1〜1件/1件中

ls7********さん

2011/7/2215:04:11

全体の制御構造が

main(){
無限ループ
while(1) {

}

return 0;
}

となっていて、
無限ループを抜け出すbreak;がないので、
return 0;が実行されることはない。

ということなのでは?

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる