2J プログラミング言語 前期末試験 2J プログラミング言語 前期末試験 July 2014 担当小坂 1.次のプログラムの画面に現れる実行結果を予 測して書きなさい。ただし#include <stdio.h>は 省略されており, 「main() {」と「return 0; }」 も省略されているものとする。 (1) int i; for (i=4; i<10; i++) { if (i<5) { printf("tokyo "); } else if (i<=6) { printf("osaka "); } else if (i<9) { printf("kobe "); } else { printf("nagoya "); } if (i<=5) { printf("hi "); } if (i<=6) { printf("hello "); } if (i<10) { printf("bye "); } printf("\n"); } 1.の問題では,プロ グラムとして不自然な ものもある。デバッグ 途中のプログラムを想 定しているので,その まま答えなさい。 (2) int n,i,j; n=5; for (i=0;i<n;i++) { for (j=0;j<n;j++) { if (i==0||n-2<=i||j==0||n-2<=j) { printf("*"); } else { printf("+"); } } printf("\n"); } (3) int x,y; x=6; y=10; while (y<25) { y=y+x; x++; } printf("%d %d\n",x,y); for (x=1; x<4; x++) { y=y+x; } printf("%d %d\n",x,y); (4) int x=20; do { printf("x=%d\n",x); if (x%2==0) { x=x/2; } else { x=5*x+1; } } while (x<100); printf("x=%d\n",x); (5) int day, sum; sum=0; for ( day=1; day<=7; day++ ) { if (day<3) { sum=sum+5; } else if (day<5) { sum=sum+10; } else if (day<7) { sum=sum+4; } else { sum=sum+2; } printf("day= %d sum= %4d\n",day,sum); } printf("day= %d sum= %4d\n",day,sum); (6) int day,sum; sum=0; for ( day=1; day<=7; day++ ) { switch (day) { case 2: sum=sum*2; break; case 5: sum=sum+10; break; default: sum=sum+2; break; } printf("day= %d sum= %4d\n",day,sum); } printf("day= %d sum= %4d\n",day,sum); 1/2 2J プログラミング言語 前期末試験 (7) int ary[10]={25,20,12,50,10,30,40}; int i; int y=0; for (i=1;i<5;i++) { printf("array[%d]=%d\n",i,ary[i]); y+=ary[i]; /*y=y+ary[i]と同じ意味*/ printf("y=%d\n",y); } printf("yfinal=%d\n",y); と 10000 の間に空白が 1 つあるようになっている。 「 Good morning. 」 が 解 答 の 場 合 は 「 Good △ morning.」のように空白を△で示せ。 (2) x y=e の表を作りたい。実行結果のような表を作る には,四角の中にどのように記述すればよいか答 えなさい。 int i; double x; double y; printf(" x y=exp(x)\n"); for (i=1; i<=100; i++) { x=(double)i/10.0; y=exp(x); printf("%6.3lf %13.6lf\n",x,y); } (8) int ary[10]={55,34,25,64,12,50,10,8}; int i; int y=ary[0]; int z=ary[0]; for (i=0;i<6;i++) { if (y<ary[i]) y=ary[i]; if (ary[i]<z) z=ary[i]; printf("ary[%d]=%d, y,z=%d %d\n",i,ary[i],y,z); } printf("yfinal=%d\n",y); printf("zfinal=%d\n",z); 実行結果 x y=exp(x) 0.100 1.105171 0.200 1.221403 0.300 1.349859 0.400 1.491825 途中省略 9.600 14764.781566 9.700 16317.607198 9.800 18033.744928 9.900 19930.370438 10.000 22026.465795 2.次の問いに答えなさい[10] ただし,1と同様に,プログラムは実行部分だけ 表現されており,そのほかは省略されていること とする。 (1) 2 y=x の表を作りたい。実行結果のような表を作る には,四角の中にどのように記述すればよいか答 えなさい。 ただし,実行結果のように,桁位置をそろえる。 また最終行では,10.000 の前には空白がなく, 10.000 と 22026.465795 の間に空白が 2 つあるよ うになっている。 「 Good morning. 」 が 解 答 の 場 合 は 「 Good △ morning.」のように空白を△で示せ。 int x; int y; printf(" x y=x*x\n"); for (x=1; x<=100; x++) { y=x*x; printf("%3d %5d\n",x,y); } 3.while 文,do-while 文あるいは if 文では条件 式を括弧の中に書くことになっている。 次の条件の時,プログラムではどのような表現に なるか書きなさい。条件だけ書けばよい。 [10] x y=x*x 1 1 2 4 3 9 4 16 途中省略 96 9216 97 9409 98 9604 99 9801 100 10000 (1)int 型変数 a の一の位は 0 である (2)int 型変数 a も b も両方とも正の値である (3)int 型変数 a,b は少なくとも片方が正の値で ある(両方とも正であることもある) (4)int 型変数 x は 0 以上 100 未満である (5)int 型変数 y は 10 未満か,または 100 以上の 値である ただし,実行結果のように,桁位置をそろえる。 また最終行では,100 の前には空白がなく,100 例 2/2 int 型変数 xxx =は 0 である → xxx == 0 プログラミング言語前期末試験解答用紙 2J( )名前( 1. (1) (2) (3) (4) (5) (6) (7) (8) 2. (1) (2) 3. (1) (2) (3) (4) (5) ) 試験対策の仕方(試験前の勉強方法)小坂 1.必ず紙と鉛筆で試験時と同じように過去問題を解き,答え合わせする。 (1) 全くわからなかった場合 例題も含めた説明を読みなおす。友人に解説してもらう。先生に解説してもらう。 (2) 間違えた場合(自分の考え方では間違えているとは思えない場合) 例題も含めた説明を読みなおす。友人に解説してもらう。先生に解説してもらう。 (for ルー プの動作への誤解,while ループの動作の誤解はこの種類の誤りである。 ) (3) 間違えた場合(ケアレスミス) どういう場合にケアレスミスをするのか,ケアレスミスリストを作り,ケアレスミスに応じ たチェック方法を考え,本番に生かす。 2.小坂の感想 前期末試験問題1. (3)では,printf の表示は,x,yの順になるはずだが,y,,x の順に書いて しまって,不正解になってしまった解答が 1/4 ほどあった。類似の問題が昨年度の問題にあったの で, 「必ず紙と鉛筆で試験時と同じように過去問題を解き,答え合わせする。 」という試験準備をして いれば,この間違いを試験準備中に犯しているはずで,上記の反省をしているはずだから,本番では 間違えないはずである。 前期末試験問題2.では, 「\n」を忘れるというケアレスミスが多発した。これも類似の問題が昨年 度の問題にあったので, 「必ず紙と鉛筆で試験時と同じように過去問題を解き,答え合わせする。 」と いう試験準備をしていれば,この間違いを試験準備中に犯しているはずで,上記の反省をしているは ずだから,本番では間違えないはずである。 小坂が「必ず紙と鉛筆で試験時と同じように過去問題を解き,答え合わせする。 」という指示が守ら れていないと判断する根拠である。 3.printf に関するケアレスミスをなくすためのチェックポイント (1) 改行すべきところで改行していない。または,その逆。printf 中の「\n」の有無に注意する (2) printf(“x= %d y=%d\n”,x,y); と な っ て い る に 「 x= 」「 y= 」 を 忘 れ る 。 あ る い は , printf(“ %d %d\n”,x,y); となっているのに,「x=」「y=」を書いてしまう。 (3) printf(“%d %d %d\n”,c,b,a); となっているのに,a,b,c の順に値を書いてしまう。 プログラミング言語前期末試験解答用紙 2J( )名前( 1. (1) tokyo hi hello bye osaka hi hello bye osaka hello bye kobe bye kobe bye nagoya bye (3) 9 31 4 37 (5) day= day= day= day= day= day= day= day= (2) ***** *++** *++** ***** ***** (4) x=20 x=10 x=5 x=26 x=13 x=66 x=33 x=166 1 2 3 4 5 6 7 8 sum= sum= sum= sum= sum= sum= sum= sum= 5 10 20 30 34 38 40 40 (7) array[1]=20 y=20 array[2]=12 y=32 array[3]=50 y=82 array[4]=10 y=92 yfinal=92 (6) day= day= day= day= day= day= day= day= 3. (1) (3) (5) 1 2 3 4 5 6 7 8 sum= sum= sum= sum= sum= sum= sum= sum= (8) ary[0]=55, ary[1]=34, ary[2]=25, ary[3]=64, ary[4]=12, ary[5]=50, yfinal=64 zfinal=12 %3d△%5d\n a%10 == 0 0<a || 0<b y<10 || 100<=y 2 4 6 8 18 20 22 22 y,z=55 y,z=55 y,z=55 y,z=64 y,z=64 y,z=64 55 34 25 25 12 12 %6.3f%14.6f¥n %6.3lf△%13.6lf¥n %6.3lf%14.6lf¥n でも可 %3d%6d¥nでも可 2. (1) ) (2) (2) (4) %6.3f△%13.6f\n 0<a && 0<b 0<=x && x<100
© Copyright 2025 ExpyDoc