C言語の問題で分からないのがある

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sadora3
記事: 175
登録日時: 11年前

C言語の問題で分からないのがある

#1

投稿記事 by sadora3 » 9年前

C言語の問題で分からない問題があるのですが、画像を張りたいのですが、どうすればいいのでしょうか?
画像はデスクトップにあります。

sadora3
記事: 175
登録日時: 11年前

Re: C言語の問題で分からないのがある

#2

投稿記事 by sadora3 » 9年前

あ、圧縮して添付すればいいのか。
失礼しました・・・。
この問題の【a】、【b】、【c】に正しい解を入れるのですが、それ以前にstructの中に自分の構造体名でポインタで宣言してあるのが全く理解出来ないのですが・・・。
あとこれにもし、テストデータを与えるとして、どんな形で与えればいいのでしょうか・・・。
問題.zip
C言語の問題
(3.18 MiB) ダウンロード数: 181 回

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語の問題で分からないのがある

#3

投稿記事 by みけCAT » 9年前

sadora3 さんが書きました:structの中に自分の構造体名でポインタで宣言してあるのが全く理解出来ないのですが・・・。
そのまんま自分の構造体のポインタを宣言しているだけですが・・・。
sadora3 さんが書きました:あとこれにもし、テストデータを与えるとして、どんな形で与えればいいのでしょうか・・・。
例えばこんな感じのコードを書いて、

test.c

コード:

#include <stddef.h>

#define MAX_NODE 50

struct node {
    char factor;
    struct node *L_pointer;
    struct node *R_pointer;
};
char result[MAX_NODE];
int i;

void inorder(struct node *);

void inorder(struct node *pp) {
    int sp;
    struct node *wp[MAX_NODE], *cp;

    sp = 0;
    cp = pp;
    while(cp != NULL || sp > 0) {
        while(cp != NULL) {
            wp[sp++] = cp;
            BLANK_A ;
        }
        while(cp == NULL && sp > 0) {
            BLANK_B ;
            result[i++] = cp->factor;
            BLANK_C ;
        }
    }
}
test2.c

コード:

#include <stdio.h>

#define MAX_NODE 50

struct node {
    char factor;
    struct node *L_pointer;
    struct node *R_pointer;
};
extern char result[MAX_NODE];
extern int i;
void inorder(struct node *pp);

int main(void) {
    struct node tree[10];
    int c;

    tree[0].factor = 0;
    tree[0].L_pointer = &tree[1];
        tree[1].factor = 1;
        tree[1].L_pointer = &tree[3];
            tree[3].factor = 3;
            tree[3].L_pointer = NULL;
            tree[3].R_pointer = &tree[4];
                tree[4].factor = 4;
                tree[4].L_pointer = NULL;
                tree[4].R_pointer = NULL;
        tree[1].R_pointer = &tree[5];
            tree[5].factor = 5;
            tree[5].L_pointer = NULL;
            tree[5].R_pointer = NULL;
    tree[0].R_pointer = &tree[2];
        tree[2].factor = 2;
        tree[2].L_pointer = &tree[6];
            tree[6].factor = 6;
            tree[6].L_pointer = NULL;
            tree[6].R_pointer = &tree[7];
                tree[7].factor = 7;
                tree[7].L_pointer = NULL;
                tree[7].R_pointer = NULL;
        tree[2].R_pointer = &tree[8];
            tree[8].factor = 8;
            tree[8].L_pointer = &tree[9];
                tree[9].factor = 9;
                tree[9].L_pointer = NULL;
                tree[9].R_pointer = NULL;
            tree[8].R_pointer = NULL;

    i = 0;
    inorder(tree);

    for (c = 0; c < i; c++) printf("%d%c", result[c], c + 1 < i ? ' ' : '\n');

    return 0;
}

コード:

gcc -o test -s -static test.c test2.c -DBLANK_A="【A】に入れる内容" -DBLANK_B="【B】に入れる内容" -DBLANK_C="【C】に入れる内容"
のようにコンパイルすればテストできます。
このコードでは、

コード:

              0
            /  \
          /      \
        /          \
      1              2
    /  \          /  \
  /      \      /      \
3          5  6          8
  \              \      /
    4              7  9
という2分木を与えています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sadora3
記事: 175
登録日時: 11年前

Re: C言語の問題で分からないのがある

#4

投稿記事 by sadora3 » 9年前

ああ!なるほど!理解出来ました。
ありがとうございました。
あと、返信遅れて申し訳ありませんでした・・・。

閉鎖

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