アプリ版:「スタンプのみでお礼する」機能のリリースについて

次にあげるC言語のプログラムを2回分の点数を3次元配列tensuに格納するように書きかえるというやり方が全く分かりません。どう作成すればいいのでしょうか?

include<stdio.h>

int main(void)
{
int i,j;
int tensu1[4][3]={{91,63,78},{67,72,46},{89,34,53},{32,54,34}};
int tensu2[4][3]={{97,67,82},{73,43,46},{97,56,21},{85,46,35}};
int sum[4][3];

for(i=0;i<4;i++){
for(j=0;j<3;j++)
sum[i][j]=tensu1[i][j]+tensu2[i][j];
}

puts("1回目の点数");
for(i=0;i<4;i++){
for(j=0;j<3;j++)
printf("%4d",tensu1[i][j]);
putchar('\n');
}

puts("2回目の点数");
for(i=0;i<4;i++){
for(j=0;j<3;j++)
printf("%4d",tensu2[i][j]);
putchar('\n');
}

puts("合計点");
for(i=0;i<4;i++){
for(j=0;j<3;j++)
printf("%4d",sum[i][j]);
putchar('\n');
}

return 0;
}


実行結果⤵
1回目の点数
91 63 78
67 72 46
89 34 53
32 54 34
2回目の点数
97 67 82
73 43 46
97 56 21
85 46 35
合計点
188 130 160
149 115 92
186 90 74
117 100 69

質問者からの補足コメント

  • 授業で出された問題です。

      補足日時:2016/11/08 11:07

A 回答 (4件)

直接の回答ではありません。


zircon3さんが指摘された
>ちなみにプログラムソースはタブ付けをしっかりっしましょう。
>課題の問題文のプログラムソース自体が質問に書かれているようにタブ無しのベタで書かれていたのだとすると出題者の技量不足です。
>これではどこからどこまでが一つの関数で、どこからどこまでが1重目のforループで、どこからどこまでが2重目のforループなのか視覚的に理解しづらいです。つまり読み難いしミスもチェックしにくい。

の件については、質問者の責任ではありません。このサイトは、インデントされたプログラムを投稿しても連続した半角の空白を1つの空白にしてしまう為、インデント無で書かれたようになってしまいます。この現象を回避するには、
全角の空白でインデントしたプログラムを投稿する以外に方法はありません。(もちろん、それは、コンパイルエラーになりますが)
もし、全角の空白でインデントする以外方法で、きちんと、インデントされたプログラムを投稿できる方法をご存じの方がいれば、その方法を賜りたく、投稿した次第です。
    • good
    • 1

No.1です。



> 授業で出された問題です。

 だから何でしょう?
 それだけでは何もわかりません。
 お仕事ではなく学生さんだということだけです。
 勉強レベルであることはご質問に書かれているプログラムの程度を見ればわかることでもありますが。(^^;

 ちなみに、、、

> int tensu1[4][3]={{91,63,78},{67,72,46},{89,34,53},{32,54,34}};
> int tensu2[4][3]={{97,67,82},{73,43,46},{97,56,21},{85,46,35}};

を3次元配列にするだけなら

int tensu[2][4][3]={{{91,63,78},{67,72,46},{89,34,53},{32,54,34}},
{{97,67,82},{73,43,46},{97,56,21},{85,46,35}}};

とするだけのことでしょう。
4個の要素からなる配列の各要素がそれぞれ3個の要素からなるデータが2個あるのだから、その2個を配列にすればよいだけです。
その場合、これは「処理アルゴリズムの問題」ではなく単なる「データ表現の問題」です。プログラムとしてはtensu1とtensu2を順番に処理していたのがforループになるだけ(つまり合計3重ループになるだけ)です。
工夫点として「見出し行の出力処理」がある程度でしょう。

ちなみにプログラムソースはタブ付けをしっかりっしましょう。
課題の問題文のプログラムソース自体が質問に書かれているようにタブ無しのベタで書かれていたのだとすると出題者の技量不足です。
これではどこからどこまでが一つの関数で、どこからどこまでが1重目のforループで、どこからどこまでが2重目のforループなのか視覚的に理解しづらいです。つまり読み難いしミスもチェックしにくい。

参考まで。
    • good
    • 0

1氏が言うように、質問者殿はまず「問題を理解していない」。


だから、誰かに解いてくれと丸投げしたところで、問題文を表現することができてないから、説明することすらできていない。

いわゆる、「2次元の配列を3次元にするにはどうすればよいでしょうか(泣)」と言っているだけだから、誰にも答えられない。

もしかするといまのうちに他の職を考えたほうがいいのかもしれない。

がんばれ。
    • good
    • 0

ご質問に書かれているプログラムは質問者さんが作成されたものではなく出題されたものですか?


その場合、このプログラムは何のデータをどう加工しているプログラムなのか日本語で説明が有ったりプログラムコードの意味を解読されたりしていますか?
特にtensu1とtensu2という4行3列の配列の意味と、実行結果にある出力内容の意味です。
それ無しに「tensuという3次元配列を作って、、、」の処理手順の理解はあり得ないでしょう。

それが出来ればこのプログラムの処理手順を日本語で帰るはずですからそれをしましょう。フローチャートなどのチャート図でもよいです。
それが出来たらその内容を参考にして「tensuという3次元配列を作って、、、」の処理手順も日本語を使って同様に作成出来るかと思います。
ようは使用するプログラム言語に関係なく処理手順(実現方式、アルゴリズム)を日本語で書きましょうということです。
それ無しにプログラムの作成はあり得ません。
たとえそれがプログラム言語の授業での課題であったとしても。

参考まで。
    • good
    • 0

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