こんにちは。お久しぶりです。学校で構造体についての課題が出題されたのですが、授業を聞いてもイマイチ納得ができず、ここで質問させていただくことにしました。
以下に課題プログラムを示します。
#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:構造体についてお聞きしたいです。
>【】中の②が必要な理由を説明せよ
p1が NULLかどうかをチェックして、そうならプログラムを強制終了させていますね。
ということはなぜ p1が NULLだとプログラムを止めなければならないかを考えればいいと思います。
その行を削ったらどうなるかを考えてみたり、試したりしてはどうでしょうか。
>このプログラムにデータとして
最後の while文の中で p2->nの値がどう変化していくか、printfするなり、デバッガで追うなりして観察してみて下さい。
それで直ぐにわかると思います。
p1が NULLかどうかをチェックして、そうならプログラムを強制終了させていますね。
ということはなぜ p1が NULLだとプログラムを止めなければならないかを考えればいいと思います。
その行を削ったらどうなるかを考えてみたり、試したりしてはどうでしょうか。
>このプログラムにデータとして
最後の while文の中で p2->nの値がどう変化していくか、printfするなり、デバッガで追うなりして観察してみて下さい。
それで直ぐにわかると思います。