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

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

ただいまの
回答率

90.61%

  • C

    3570questions

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

  • 配列

    509questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,392

ababab

score 51

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

ですが、うまくいきません...
よろしくお願い致します。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

参考情報:
- 二次元配列と二重のループ処理と組み合わせたプログラムが作れるようになる http://www.cc.miyazaki-u.ac.jp/takahasi/prog1/doc05/index.html
- ポインタと二次元配列 http://www.hakodate-ct.ac.jp/~tokai/tokai/research/drill/twodim.html

2つの方法を書いてみました。
#include<stdio.h>

void clear_array(int array[5][6]) {
  for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 6; j++) {
      array[i][j] = -1;
    }
  }
}

void show_array(int array[5][6]) {
  for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 6; j++) {
      printf("%d ", array[i][j]);
    }
    printf("\n");
  }
}

int main(void) {

  int array[5][6];

  // 代入 その0 (質問文の方法?)
  for(int i = 0;i < 5;i++) {
    for (int j = 0;j < 6;j++) {
      if (i % 2 == 0) {
    if (j % 2 == 0) {
      array[4][j] = 0;
    } else if (j % 2 == 1) {
      array[4][j] = 1;
    }
      } else if (i % 2 == 1) {
    if (j % 2 == 0) {
      array[4][j] = 1;
    } else if (j % 2 == 1) {
      array[4][j] = 0;
    }
      }
    }
  }
  show_array(array);

  clear_array(array);
  printf("\n");
  // 代入 その1
  // 市松模様のように 1, 0  をいれていく
  for (int j = 0; j < 6; j++) {
    for (int i = 0; i < 5; i++) {
      array[i][j] = (i + j + 1) % 2;
    }
  }
  show_array(array);

  clear_array(array);
  printf("\n");
  // 代入 その2
  // 上から下、左から右にたどると 1, 0 1, 0 の繰り返しになることを利用
  int val = 1;
  for (int j = 0; j < 6; j++) {
    for (int i = 0; i < 5; i++) {
      array[i][j] = val % 2;
      val ++;
    }
  }
  show_array(array);
}

実行結果は次のようになります。
$ gcc 2array.c
$ ./a.out
1580779184 32767 1770492534 32767 1580779216 32767 
1580779216 32767 1 0 1580779240 32767 
25636864 1 1770488392 32767 1580779256 32767 
0 0 0 0 0 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 
0 1 0 1 0 1 
1 0 1 0 1 0 

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 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    (PHP) expects parameter 1 to be array, null given....

    "Warning: array_push() expects parameter 1 to be array, null given ..."というエラーが出て困っています。 <

  • 解決済

    java equalsメソッドによる文字列比較

    初めまして、javaで文字列クラスの配列をlist構造に変換し、Collections.sortで並び換えをを行い、配列に戻して、equalsメソッドで比較し、文字列を数えるプログ

  • 解決済

    Randomで出た画像を配列の中から表示したい

    gat~gat6までのImageViewに、それぞれRandomクラスで出た変数rの数に応じて、4つある配列のうち1つの配列を選び、 その配列のうち1枚の画像を表示する、という事を

  • 受付中

    NSMUtableArrayのデータの追加方法について

    いつもお世話になっております。 表題の件ですが、現在UITableViewを使用してNSMUtableArrayの中身を表示したいと考えております。 現時点では、下記のコードでt

  • 解決済

    読み込ませたファイルをクイックソートで並び替える

    1.入力ファイルパスの入力要求 2.1でのパスのファイルを読み込み配列  に格納 3.並び替え方法の指定 4.指定された方法の分岐 5.配列に格納されてい

  • 解決済

    for文を使用したバブルソート

    前提・実現したいこと 以下の条件を持つプログラムを作成しようとしています。 1.『end』が入力されるまで入力値を受け付ける 2.『end』が入力された後、入力値をバブル

  • 解決済

    Javaでの3つの値の比較の書き方

    内容を簡単にしたものを書きます Int[] array ={1,1,1}; If(array[0] == array ==[1] == [2]) 3つの値が等しかったらという条

  • 受付中

    該当するものが複数ある場合の二分探索(C言語)

     前提・実現したいこと 二分探索法で、探索キーと一致する複数の配列要素の添え字のうち最も小さい添え字を返す関数を作成したいです。(※c言語)  発生している問題・エラーメッセー

同じタグがついた質問を見る

  • C

    3570questions

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

  • 配列

    509questions

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