質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

8329閲覧

C言語で二次元配列の中にfor文で要素を追加する方法がわかりません。

ababab

総合スコア47

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2015/01/12 07:35

C言語で二次元配列の中にfor文で要素を追加する方法がわかりません。

今、縦5列横6列の多次元配列に、
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0

のように数字を代入したいです。

今自分が考えていたのは

int array[5][6]
int i;
int j;

for(i = 0;i < 6;i++){
for(j = 0;j < 7;j++){
if(i % 2 == 0){
if(j % 2 == 0){
array[5][j] = 0;
}else if(j % 2 == 1{
array[5][j] = 1;
}
}else if(i % 2 == 1){
if(j % 2 == 0){
array[5][j] = 1;
}else if(j % 2 == 1{
array[5][j] = 0;
}
}
}
}

ですが、うまくいきません...
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

参考情報:

2つの方法を書いてみました。

lang

1#include<stdio.h> 2 3void clear_array(int array[5][6]) { 4 for (int i = 0; i < 5; i++) { 5 for (int j = 0; j < 6; j++) { 6 array[i][j] = -1; 7 } 8 } 9} 10 11void show_array(int array[5][6]) { 12 for (int i = 0; i < 5; i++) { 13 for (int j = 0; j < 6; j++) { 14 printf("%d ", array[i][j]); 15 } 16 printf("\n"); 17 } 18} 19 20int main(void) { 21 22 int array[5][6]; 23 24 // 代入 その0 (質問文の方法?) 25 for(int i = 0;i < 5;i++) { 26 for (int j = 0;j < 6;j++) { 27 if (i % 2 == 0) { 28 if (j % 2 == 0) { 29 array[4][j] = 0; 30 } else if (j % 2 == 1) { 31 array[4][j] = 1; 32 } 33 } else if (i % 2 == 1) { 34 if (j % 2 == 0) { 35 array[4][j] = 1; 36 } else if (j % 2 == 1) { 37 array[4][j] = 0; 38 } 39 } 40 } 41 } 42 show_array(array); 43 44 clear_array(array); 45 printf("\n"); 46 // 代入 その1 47 // 市松模様のように 1, 0 をいれていく 48 for (int j = 0; j < 6; j++) { 49 for (int i = 0; i < 5; i++) { 50 array[i][j] = (i + j + 1) % 2; 51 } 52 } 53 show_array(array); 54 55 clear_array(array); 56 printf("\n"); 57 // 代入 その2 58 // 上から下、左から右にたどると 1, 0 1, 0 の繰り返しになることを利用 59 int val = 1; 60 for (int j = 0; j < 6; j++) { 61 for (int i = 0; i < 5; i++) { 62 array[i][j] = val % 2; 63 val ++; 64 } 65 } 66 show_array(array); 67}

実行結果は次のようになります。

lang

1$ gcc 2array.c 2$ ./a.out 31580779184 32767 1770492534 32767 1580779216 32767 41580779216 32767 1 0 1580779240 32767 525636864 1 1770488392 32767 1580779256 32767 60 0 0 0 0 0 70 1 0 1 0 1 8 91 0 1 0 1 0 100 1 0 1 0 1 111 0 1 0 1 0 120 1 0 1 0 1 131 0 1 0 1 0 14 151 0 1 0 1 0 160 1 0 1 0 1 171 0 1 0 1 0 180 1 0 1 0 1 191 0 1 0 1 0

投稿2015/04/24 20:28

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

for文と配列についての注意点は先の方が丁寧に教えてくれておりますので省略いたします。
列(横方向)と行(縦方向)の数値の規則性が一緒なので、以下のように書くこともできます。
for (int i = 0; i < 5; i++)
{
for(int j = 0; j < 6; j++)
{
array[i][j] = (j + ( (i + 1) % 2 )) % 2;
}
}

画像情報にアクセスして幾何学模様を描いたりさせるときなど、
このような規則性を配列番号の略記で考えられると少し楽しくなってくるので、
もし取り扱いされるなら、色々考えてみるのもいいかもしれませんね。
ご参考までに。

投稿2015/04/24 19:28

編集2015/04/24 21:30
Scarletmoon

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

途中で何度か現れているarray[5][j]ですが、1つ目が固定だと2次元配列にうまく入りません(むしろ、array[5][6]なので、1つ目の添字は0から4までです)。

array[i][j]としてみましょう。

あと、整数ならi%2==0i%2==1はどちらか一方が成立するので、elseでさらにif判定するのは不要でしょう。

投稿2015/01/12 08:08

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問