ページ 1 / 1
2次元配列について、質問です
Posted: 2009年7月08日(水) 21:21
by 芳香剤
#include<stdio.h>
#define SIZE 10
int main(void)
{
int a[SIZE+1][SIZE+1];
int i,j;
for(i=1;i<=SIZE;i++)
for(j=1;j<=SIZE;j++)
a[j]=(i-1)*10+j;
for(i=1;i<=SIZE;i++)
{
for(j=1;j<=SIZE;j++)
printf("%4d",a[j]);
printf("\n");
}
return 0;
}
ここに総和が出力される
[実行結果] ↓
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
(途中省略)
91 92 93 94 95 96 97 98 99 100
ここまできたのですが、この実行結果の2次元行列の各行ごとに、「10個の数値の総和」を
求めて記憶させ出力させたいのですが、出力の仕方がよく解りません。
ヒント教えてください。よろしくお願いします。
解り難かったらすいません。
Re:2次元配列について、質問です
Posted: 2009年7月08日(水) 21:26
by MNS
#include<stdio.h>
#define SIZE 10
int main(void)
{
int a[SIZE+1][SIZE+1];
int i,j;
for(i=1;i<=SIZE;i++)
for(j=1;j<=SIZE;j++)
a[j]=(i-1)*10+j;
for(i=1;i<=SIZE;i++)
{
int total = 0;
for(j=1;j<=SIZE;j++)
{
total += a[j];
printf("%4d",a[j]);
}
printf(" 総和:%d",total);
printf("\n");
}
return 0;
}
こういうことでしょうか?
Re:2次元配列について、質問です
Posted: 2009年7月08日(水) 22:04
by conio
実際に実行してみましたか?
明らかにおかしな表示になります。
上記の様な実行結果にはなりません。
------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10/n 11 12 13 14 15 16 17 18 19
20/n 21 22 23 24 25 26 27 28 29 30/n 31 32 33 34 35 36 37 38
39 40/n 41 42 43 44 45 46 47 48 49 50/n 51 52 53 54 55 56 57
58 59 60/n 61 62 63 64 65 66 67 68 69 70/n 71 72 73 74 75 76
77 78 79 80/n 81 82 83 84 85 86 87 88 89 90/n 91 92 93 94 95
96 97 98 99 100/n続行するには何かキーを押してください . . .
------------------------------------------------------------------------------
printf("/n");をprintf("\n");に変更してください。
そうすれば、下記のように期待通りの実行結果になります。
------------------------------------------
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
続行するには何かキーを押してください . . .
------------------------------------------
そして、総和を表示したいのであれば、
int total[SIZE + 1] = {0};
というように配列を作っておき、
下記の赤字の処理を追加すれば完成します。
---------------------------------------------------------------------
for(i=1;i<=SIZE;i++){
for(j=1;j<=SIZE;j++){
a[j]=(i-1)*10+j;
//total に a[j]の値を足して行く
}
}
for(i=1;i<=SIZE;i++){
for(j=1;j<=SIZE;j++)
printf("%4d",a[j]);
//総和(total)を表示させる処理
printf("\n");
}
---------------------------------------------------------------------
Re:2次元配列について、質問です
Posted: 2009年7月08日(水) 22:45
by フリオ
配列に空きがあるのでそれを使ってみました。
#include <stdio.h>
#define SIZE 10
int main(void)
{
int a[SIZE+1][SIZE+1] = {0};
int i, j;
for(i = 1; i <= SIZE; ++ i){
for(j = 1; j <= SIZE; ++ j){
a[j] = (i - 1) * 10 + j;
a[0] += a[j];
a[0][j] += a[j];
a[0][0] += a[j];
}
}
for(i = 1; i <= SIZE; ++ i){
for(j = 1; j <= SIZE; ++ j) printf("%4d",a[j]);
printf(" %d\n", a[0]);
}
putchar('\n');
for(i = 1; i <= SIZE; ++ i) printf("%4d", a[0]);
printf(" %d\n", a[0][0]);
return 0;
}
Re:2次元配列について、質問です
Posted: 2009年7月09日(木) 10:52
by やそ
printf("/n");
というのは多分バックスラッシュを入力したかったんじゃないでしょうか?
Windowsのコンパイラでは\nが常識になっていますが、
昔(?)のコンパイラではバックスラッシュ\n(もちろん半角で)
を用いていたものもあります。
昔の書籍でもバックスラッシュのソースを何度か見かけたことがあります。
まあそれでも通常の/ではダメですが^^;
各行ごとの総和は
int total;
total = 0;
for(i=1;i<=SIZE;i++)
{
for(j=1;j<=SIZE;j++)
printf("%4d",a[j]);
total+=a[j];
printf(" %4d\n", total);
total=0;
}
という感じですかね?
Re:2次元配列について、質問です
Posted: 2009年7月09日(木) 11:03
by やそ
・・・配列の添え字を0から使わないのは何でだろう?
BASICとかで1からに慣れてるから?
数えやすいから?
Re:2次元配列について、質問です
Posted: 2009年7月09日(木) 11:29
by conio
そうですね。
"明解C言語"と言った参考書でも、バックスラッシュ(逆斜線)が使われてました。
(「JISコードという文字体系では\に読み替えて下さい」、と注意書きがありました)
ただ、「printf("/n");でちゃんと実行結果が得られる所まで出来た」との事だったので、
下記の様な実行結果は得られないのでは?、と疑問に思いました。
------------------------------------------
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
//中略//
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
続行するには何かキーを押してください . . .
------------------------------------------
恐らく、投稿する際に一部修正したか、
コピーペーストではなく、元のソースプログラムを見ながら打ち込んだのかな、と。
Re:2次元配列について、質問です
Posted: 2009年7月09日(木) 11:57
by やそ
>下記の様な実行結果は得られないのでは?、と疑問に思いました。
同意^^
たしかにあのままのソースをコンパイルではちょっと・・・
ですよね。
使用環境、コンパイラについての明記もなさそうですしねぇ^^;
Re:2次元配列について、質問です
Posted: 2009年7月09日(木) 19:36
by 芳香剤
返信が遅れてしまいました。すいません。
ご指摘ありがとうございます。
修正を加えながら投稿したせいか、打ち間違えてしまいました。
コンパイルする癖を身につけたほうがいいですね、やっぱり…
>添え字を0から使わないのはなぜか
私的には、「1」からの方がわかりやすいので「0」からではなく
「1」からにしています。
皆さんのアドバイスのおかげで、コンパイルすることができました。
とても勉強になり、助かりました。あと、間違えたとこは直しておきます。
どうもありがとうございました^^