Document

第13回[平成16年7月13日(火)]:PN04-13.ppt
総復習
今日の内容
1
2
3
4
総復習
試験について
過去問の演習
今日の課題
最終回
総復習(ポイント)
第1章:まずは慣れよう
プログラムの構成、簡単な入出力、定数と変数
第2章:演算と型
四則演算[+ - * / %]、変換指定子[%d,%f]
式、式文(;)、代入演算子[=]、アドレス指定子
[&]、整数型と浮動小数点型、型と演算(整数化)
キャスト演算子[(int),(double),(char)]
第3章:プログラムの流れの分岐
選択(if文)、多分岐(switch文)、関係演算子
(>,>=,<,<=)、等価演算子(==,!=)、 論理
演算子(&&,||)、条件演算子(? :)、入れ子
総復習(ポイント)
第4章:プログラムの流れの繰り返し
定数回繰り返し[for文]、不定数回繰り返し[do
文,while文]、前置(後置)増分(減分)演算子
(++n,n++,--)、複合文({・・・})、多重ループ
第5章:配列
配列とfor文、初期化、多次元配列、素数の計算
強制飛越(break文,continue文)、代入式
第6章:関数
戻り値の有無、引数の有無、有効範囲と記憶域期
間、探索、番兵法
試験について
•範囲:第1章から第6章(p.1-145)
追加で pp. 176-177, 200-201
及び pptファイルで扱った内容
•日時: 7月20日(火曜日)の3時限目
13:00 – 14:00 日時場所は掲示で
再確認すること
•場所:6501教室
•条件:森下印のある自筆のA4用紙1枚
(番号・氏名を明記、コピー不可)
試験のための準備
•条件:森下印のある自筆のA4用紙1枚
(番号・氏名を明記、コピー不可)
•『条件』にある持込み可能用紙
A4サイズの用紙に限る(裏・表利用可)
用紙に氏名・学籍番号をボールペン又は
万年筆で記入(鉛筆は不可)
本人が持参し、森下より捺印を受ける
•一人1枚、1回だけ捺印する
平成15年度の試験問題
• 次の頁より、平成15(2003)年度の試験
問題を掲載します。
• 試験時間は60分で、森下印のある自筆
のA4用紙一枚のみ持込可。
• 授業時に、解説及び解答をします。
• 受講生は、授業前に、各自で解答を試み
ておくこと。尚、現物をほしい人は授業中に配付します。
ただし、数に限りがありますので、場合によってはコピーを後日
お渡しすることになります。
• 平成15年度の受講生の正解状況なども
授業で紹介します。
プログラミング入門試験問題
2003年度(前学期)
[平成15年度]
(注意)
このスライドでは問題がカラーとなっていますが、
実際の試験問題は全て黒で印刷されております。
[1]int型の変数n,mがそれぞれ20,30であ
るとする。このとき、各文が実行された後
のnの値を【 】に答えよ。また、・・・(後略)
n
(1) n += 5; 【
】
(2) n *= 3; 【
】
(3) n %= 6; 【
】
(4) n -= 30;【
】
(5) n /= 5; 【
】
[1]int型の変数n,mがそれぞれ20,30であ
るとする。・・(中略)・・ 各文が実行された
後のn,mの値についても答えよ。
n
m
【
】【
】
(7) n = !(m-n);【
】【
】
(8) n = 10+m--;【
】【
】
(9)n=(n++,m++);【
】【
】
(10) n=n--,m+1; 【
】【
】
(6) n = --m;
[2] i,j,k が int型の変数で、それぞれ
10,10,25 であり、x,y が double型の変
数で、それぞれ 30.5, 5.0 であるとする。こ
のとき、以下の各式を評価した値を各式の前
の【 】に答えよ。ただし、式が誤りである場合
はXを記入せよ。
(1)【
(2)【
(3)【
(4)【
(5)【
】j == i
】(i-j) ? j : k
】x <= k + j
】!( i = j )
】'x' > 'y'
int i=10,j=10,k=25; double x=30.5,y=5.0;
(6)【
(7)【
(8)【
(9)【
(10)【
(11)【
(12)【
(13)【
(14)【
】k / j / y
】i ≠ k
】j % -4 * x
】j = x
】(i<j) || (i<k)
】x * i % j
】2 * ( -k % i )
】x && ( k - i )
】k % 6 => 2
[3] 次の{while構文}を{do-while構文}及び
{for構文}に書き換えよ。ただし、変数はすべて
int型とし、はじめの2行に続いて必要な記述をし
て完成させよ。また、下の各問にも答えよ。
{while構文}
1 s = t = 1;
2 k = 5;
3 while ( k>0 ){
4 s *= 2;
5 t *= k;
6 k--;
7 }
{do-while構文}
s=t=1;
k=5;
・・・・・
{for構文}
s=t=1;
k=5;
・・・・
{while構文}
1
2
3
4
5
6
7
{do-while構文}
s=t=1;
k=5;
s=t=1;
while(k>0){ k=5;
s *= 2;
t *= k;
k--;
}
{while構文}
1
2
3
4
5
6
7
s=t=1;
k=5;
while(k>0){
s *= 2;
{for構文}
t *= k;
s=t=1;
k--;
k=5;
}
(1)上の{while構文}につ {while構文}
いて、繰り返しに入る時点(初 1 s=t=1;
期値)と毎回の繰り返しが終 2 k=5;
3 while(k>0){
了した時点での変数 s,t, k 4 s *= 2;
の値をトレースせよ。繰り返し 5 t *= k;
が7回未満の時はそれ以降は 6 k--;
7 }
-を記入せよ。
s t k
s t k
初期値
4回目
1回目
5回目
2回目
6回目
3回目
7回目
s
(2) (1)のトレー k=10
初期値
スによると、この計
1回目
算では、一般に、 2回目
正の整数 k に対 3回目
4回目
して、sには、
、 5回目
6回目
また、tには
7回目
. 8回目
9回目
が求まる。
例えば、2行目で 10回目
k=10; とすると、 s の値は
tの値は
となる。
t
、
k
[4]次の(1)から(5)までのプログラム部分
について、実行結果を完成させよ。(何も出力
されない場合は『なし』と答えよ)
(1)
int i, j;
for( i=4,j=0; i>=0; i--,j++)
printf("%d%d", i, j);
(2)
int a=0, b=1;
putchar((a*b)?'A':'B');
putchar((a=b)?'C':'D');
putchar((a<b)?'E':'F');
(3)
int i, j, a[2][2]={0,1,2};
for(i=0; i<2; i++)
for(j=0; j<2; j++)
printf("a[%d][%d] = %d\n",
j, i, a[j][i]);
a[
a[
a[
a[
][
][
][
][
]
]
]
]
=
=
=
=
(4)
int i, no;
for(no=-1;no<=7;no+=2) { Ans( )=
if(no>0) {
Ans(
)=
printf("Ans(%d)=",no);
Ans( )=
switch (no) {
case 1 :putchar('a'); Ans( )=
case 3 :putchar('b'); Ans( )=
break;
Ans(
)=
case 5 :putchar('c');
default:putchar('d'); }
putchar('\n');
} else
for ( i = 0; i >= no; i--)
printf("Ans(%d)=%d\n",no, -i); }
(5)
void fn1(int k, int j) {
double x;
x =
x = (double)k/j;
printf("x=%f\n", x); }
x =
int fn2(int j) {
x
=
int a;
a = (j%2) ? j : 2*j;
s =
return (a); }
int main(void) {
int i, s=0, m=5;
for(i=1; i<4; i++,m++){
s += fn2(m);
fn1(s,i);
}
printf("s=%d", s);
return (0); }
[5]以下に示すプログラムの誤りを全て指摘
せよ。解答の仕方は、例えば『○行目はXXXX
ではなく****』、『○行目のYYYの後にZZ
が必要』などと箇条書きで答えよ。最左列の数
値は行番号を表す数字であり、プログラムの
一部ではない。
[仕様] 10個の整数をキーボードから入力し、
その中で、3の倍数、3で割って1余る数、3で
割って2余る数の個数を配列aryの0~2の要
素に記録し、最後に配列の内容を、例えば
ary[2]=5 の様な形式で出力する。
[解答は裏面に書いて下さい]
1 #include (stdio.h)
2 int main(void) {
3 int i, a, ary[2]={0} ;
4 for ( i=0: i<10; i++) {
5
scanf("%d", a);
6
swich ( a % 3 ) {
7
case 0 : ary[0]++; break
8
case 1 : ary[1]++; break
9
defoult
ary[2]++;
10 }
11 for ( i=0; i<3; i++);
12 printf("ary[%d] = %f\n ,
i, ary[i])
13 retarn (0); }
今日の課題
◎前学期の約3ヶ月間の『プログラミング入
門』の授業を受けてみて、
(1)自己判断で、何%ぐらい理解できたか。
(2)どの辺が難しかったか[具体的に]
(3)理解の不十分な点について、今後、どうす
れば理解が進むと考えるか[具体的に]
(4)来年度受講生への伝言[具体的に]
(5)来年度の『プログラミング入門』に反映す
るための提案(授業の進め方、受講の仕方)
第13回目終了
次回は試験となります。
約3ヶ月の短期間でしたが
大変ご苦労様でした。