構造体についてお聞きしたいです。

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

構造体についてお聞きしたいです。

#1

投稿記事 by ふわりん » 18年前

こんにちは。お久しぶりです。学校で構造体についての課題が出題されたのですが、授業を聞いてもイマイチ納得ができず、ここで質問させていただくことにしました。

以下に課題プログラムを示します。

#include <stdio.h>
struct nList{
int n;
struct nList*next;
};
struct nList*top;
main(){
int k;
struct nList *p,*p1,*p2,*p3;
top=NULL;
【while (scanf("%d",&k)>0){
p=(struct nList*)malloc(sizeof(struct nList));
p->n=k;
p->next=top;
top=p;
}】・・・・・・・①
p1=p2=top;
【if(p1==NULL) exit(-1);】・・・・・・・②
 k=p1->n;
while(p1->next){
if(k>p1->n){p2=p1;k=p1->n;}
p1=p1->next;
}
printf("%d\n",p2->n);
}






(1) プログラムのwhileブロック【】中の①を解説せよ。

(2) 【】中の②が必要な理由を説明せよ。

(3) このプログラムにデータとして

   6
5
2
1
4
.

を入力した。出力結果を示せ。




という課題です。

(1)は授業中に先生の話の内容のメモをした内容から、なんとか出来たのですが、

(2)の問題がわかりません。解説の程よろしくお願いします。

(3)の問題は、与えられたものを入力した結果は"1"となりました。

できれば、なぜこのような結果になったのかもよろしくお願いします。

お忙しいところ、申し訳ありませんが、よろしくお願いします。

 

管理人

Re:構造体についてお聞きしたいです。

#2

投稿記事 by 管理人 » 18年前

リストの問題ですね。

http://www9.plala.or.jp/sgwr-t/c/sec15-5.html

ここを読むとよくわかりますよ。

Justy

Re:構造体についてお聞きしたいです。

#3

投稿記事 by Justy » 18年前

【】中の②が必要な理由を説明せよ
 p1が NULLかどうかをチェックして、そうならプログラムを強制終了させていますね。
 ということはなぜ p1が NULLだとプログラムを止めなければならないかを考えればいいと思います。
 その行を削ったらどうなるかを考えてみたり、試したりしてはどうでしょうか。

このプログラムにデータとして
 最後の while文の中で p2->nの値がどう変化していくか、printfするなり、デバッガで追うなりして観察してみて下さい。
 それで直ぐにわかると思います。

ふわりん

Re:構造体についてお聞きしたいです。

#4

投稿記事 by ふわりん » 18年前

管理人様、 Justy 様ありがとうございます。

構造体は自分にとってはまだ難しい分野なので、理解できるように頑張りたいと思います。

閉鎖

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