第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ヶ月の短期間でしたが 大変ご苦労様でした。
© Copyright 2024 ExpyDoc