2次元配列について、質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
芳香剤

2次元配列について、質問です

#1

投稿記事 by 芳香剤 » 16年前

#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個の数値の総和」を
求めて記憶させ出力させたいのですが、出力の仕方がよく解りません。
ヒント教えてください。よろしくお願いします。
解り難かったらすいません。

MNS

Re:2次元配列について、質問です

#2

投稿記事 by MNS » 16年前

#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;

}

こういうことでしょうか?

conio

Re:2次元配列について、質問です

#3

投稿記事 by conio » 16年前

実際に実行してみましたか?
明らかにおかしな表示になります。
上記の様な実行結果にはなりません。
------------------------------------------------------------------------------
   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次元配列について、質問です

#4

投稿記事 by フリオ » 16年前

 
 配列に空きがあるのでそれを使ってみました。
#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次元配列について、質問です

#5

投稿記事 by やそ » 16年前

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次元配列について、質問です

#6

投稿記事 by やそ » 16年前

・・・配列の添え字を0から使わないのは何でだろう?
BASICとかで1からに慣れてるから?
数えやすいから?

conio

Re:2次元配列について、質問です

#7

投稿記事 by conio » 16年前

そうですね。
"明解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次元配列について、質問です

#8

投稿記事 by やそ » 16年前

>下記の様な実行結果は得られないのでは?、と疑問に思いました。
同意^^

たしかにあのままのソースをコンパイルではちょっと・・・
ですよね。

使用環境、コンパイラについての明記もなさそうですしねぇ^^;

芳香剤

Re:2次元配列について、質問です

#9

投稿記事 by 芳香剤 » 16年前

返信が遅れてしまいました。すいません。
ご指摘ありがとうございます。
修正を加えながら投稿したせいか、打ち間違えてしまいました。
コンパイルする癖を身につけたほうがいいですね、やっぱり…

>添え字を0から使わないのはなぜか
私的には、「1」からの方がわかりやすいので「0」からではなく
「1」からにしています。

皆さんのアドバイスのおかげで、コンパイルすることができました。
とても勉強になり、助かりました。あと、間違えたとこは直しておきます。
どうもありがとうございました^^

閉鎖

“C言語何でも質問掲示板” へ戻る