ページ 11

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

Posted: 2006年12月17日(日) 02:18
by ふわりん
こんにちは。お久しぶりです。学校で構造体についての課題が出題されたのですが、授業を聞いてもイマイチ納得ができず、ここで質問させていただくことにしました。

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

#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:構造体についてお聞きしたいです。

Posted: 2006年12月17日(日) 04:00
by 管理人
リストの問題ですね。

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

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

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

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

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

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

Posted: 2006年12月17日(日) 13:29
by ふわりん
管理人様、 Justy 様ありがとうございます。

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