中部大学教育研究13
39/148

}printf("%d\n",is);}その後で、main(){intis,i,k,n;scanf("%d",&n);for(i=1;i<=n;++i){is=0.0;scanf("%d",&k);is=is+k;}printf("%d\n",is);}としたら、結果はどうなるかを質問する。is=0;の位置が大切であることを認識してもらう。【質問例3】〔実習問題3〕次式で定義される実数の数列f0=1.0f1=1.0fi・fi・1・2fi・2・i・2・がある。整数nをscanf文で入力し、f2,f3,…,fnを出力するプログラムを作れ。実行時に、nに8を入力せよ。[ヒント]f2=f1+2.0*f0;c=b+2.0*a;printf("%f\n",f2);printf("%f\n",c);f3=f2+2.0*f1;{b←c,a←bを行う2行}printf("%f\n",f3);c=b+2.0*a;f4=f3+2.0*f2;printf("%f\n",c);printf("%f\n",f4);{b←c,a←bを行う2行}・c=b+2.0*a;・・・・解答例は次のようになる。main(){doublea,b,c;inti,n;scanf("%d",&n);a=1.0;b=1.0;for(i=1;i<=n;++i){c=b+2.0*a;a=b;b=c;printf("%f\n",c);}}この場合、for文の前のa=1.0;とb=1.0;の順序を入れ替えたらどうなるかという質問に、ごく少数であるが、答えが違ってくると答える学生がいる。また、提出時に、for文の中のa=b;とb=c;の順序を変えても目的の答えが出るかを尋ねる。順序を変えると、目的の答えは出ないと答えなければならない。このことをしっかり理解させるため、提出プログラムの余白に、両者の場合の結果の違いを具体的に示す模式的な図を描かせ、それらの違いを検討させる。下の左右二つの場合について、模式図の?の部分が何になるか(□,×,△のどれになるか)を記入してもらう。abcabc□×△実行前□×△a=b;b=c;b=c;a=b;abcabc???実行後???【質問例4】〔実習問題4〕・・2,4,6,8,10に対して、f0・1を初期値として、fn・1・2f3n・・3f2nを、n・0,1,2,3まで繰り返し、f4を求め、出力するプログラムを作れ。解答例は次のようになる。main(){intix,n;doublef;for(ix=2;ix<=10;ix=ix+2){f=1.0;for(n=0;n<=3,++i)f=(2.0*f*f*f+(double)ix)/(3.0*f*f);printf("%e\n",f);}}提出時の質問として、f=1.0;の位置を下のようにすると4行の出力結果はどうなるかを尋ねる。f=1.0;for(ix=2;ix<=10;ix=ix+2){for(n=0;n<=3,++i)f=(2.0*f*f*f+(double)ix)/(3.0*f*f);printf("%e\n",f);}具体的には、「4行とも前と同じ結果が出るのか」とか、「4行とも前と違う結果が出るのか」と聴く。―29―コンピュータ・プログラミングの教育について

元のページ  ../index.html#39

このブックを見る