最新閲覧日:

次のような問題がわからなくて困っています。

まず、キーボード入力により配列の大きさを決め、
その後、先ほど入力した個数のデータをキ-ボードから入力するというものです。
これだけならわかるのですが、条件があって、入力は次のようにするとあります。
2 3 ←配列の大きさ(2行3列)
1 2 3 ←配列に入れるデータ 1行目
4 5 6 ←配列に入れるデータ 2行目

Cプログラミングを始めて間もない初心者です。どなたかよろしくお願いします。

このQ&Aに関連する人気のQ&A

A 回答 (2件)

領域の動的確保のやり方と、それを二次元配列に適用するあたりが分からない


んですよね?

大きさが決っていない配列を扱うには malloc() を使います。

また、二次元配列を扱うときには、一次元の配列の配列を順次獲得する
必要があることに注意が必要です。

多分、実物を見た方が分かりが早いんじゃないかなと思います。


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int** ar; /* 行列 */
  int row;  /* 行数 */
  int col;  /* 列数 */
  int i, j;

  /* 行列の入力 */
  scanf("%d %d", &row, &col);
  ar = malloc(row * sizeof(int*));
  for (i = 0 ; i < row ; ++i)
  {
    ar[i] = malloc(col * sizeof(int));
    for (j = 0 ; j < col ; ++j)
    {
      scanf("%d", &ar[i][j]);
    }
  }

  /* 行列の確認 */
  printf("\n");
  for (i = 0 ; i < row ; ++i)
  {
    for (j = 0 ; j < col ; ++j)
    {
      printf("%d ", ar[i][j]);
    }
    printf("\n");
  }

  /* 確保した領域を開放 */
  for (i = 0 ; i < row ; ++i)
  {
    free(ar[i]);
  }
  free(ar);

  return 0;
}

この実物では、動作上、必須ではないのですが、malloc() で確保した領域を
free() で開放しています。開放は確保した順と逆に行うことに注意して。

分からないところがあれば、補足して下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。ソースまで書いていただいたおかげで、何とか理解できました。実は領域の動的確保よりももっと初歩的なところでつまずいていたのですが、それも解決しました。重ねて御礼申し上げます。

お礼日時:2001/08/07 19:17

領域の動的確保と、ポインタ操作ができれば、問題なく解けます。



条件の例でいっているのは、キーボードで2,3,1,2,3,4,5,6と数字キーを押すと、
最初の2個が行と列のサイズ(配列領域として[2][3]分を動的に確保)を指定し、
3個目が1行1列目(配列表現だと[0][0]に位置する箇所)、
4個目が1行2列目(配列表現だと[0][1]に位置する箇所)、
5個目が1行3列目(配列表現だと[0][2]に位置する箇所)、
6個目が2行1列目(配列表現だと[1][0]に位置する箇所)、
7個目が2行2列目(配列表現だと[1][1]に位置する箇所)、
8個目が2行3列目(配列表現だと[1][2]に位置する箇所)
に入る(入れる)様にするということです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。質問の言葉が足りなくて申し訳ありません、わからないところはキーボード入力により、1行目の数値、1 2 3を一度に取り込むというところです。領域の動的確保はだいたい解ると思います。

お礼日時:2001/08/07 18:16

このQ&Aに関連する最新のQ&A

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

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ