#author("2017-09-15T18:20:33+09:00","default:takataka","takataka") #author("2017-09-23T14:58:41+09:00","default:takataka","takataka") *応用プログラミング及び実習 2017年度 第1回 [#d5bb394b] &color(#ff0000){工事中}; //&color(#ff0000){工事中}; #contents **演習のすすめ方 [#l5135b5b] [[AProg/2017/ex00]] を参照してください. **課題A(self) 締切: 今回の実習終了時 [#kadaiA] 課題A-1からA-3まで全部できたらTAさんに申し出てください.全て紙に書いて考える課題です. ***課題A-1 講義資料 Q5 [#efe541a1] 今日の講義資料のQ5をやりなさい(紙の上で考えればよい). &color(white,blue){check}; 右のリンク先に答えがあります. [[本当に見ます?>https://gist.github.com/takatakamanbou/c0f7dea1fd546e61120e]] ***課題A-2 講義資料 Q8 [#y9a15738] 今日の講義資料のQ8をやりなさい(紙の上で考えればよい). - &color(white,blue){check}; 以下に白字でヒントが書いてあります.マウスで文字列を選択すると見えるでしょう. -- ヒント1: &color(white){f1 を呼ぶと x の値が変化してますね}; -- ヒント2: &color(white){f1の3つ目の引数は番地を渡してますね}; - &color(white,blue){check}; 右のリンク先に答えがあります.[[本当に見ます?>https://gist.github.com/takatakamanbou/69c289701e0a62c56d41]] - &color(white,blue){check}; 関数を呼び出す際に書く引数(括弧の中に書くもの)を「実引数」といい,関数を定義する所で書く引数を「仮引数」といいます.この例では,関数 f1 に渡される実引数は 1.5, 2.0, &x の3つ.一方,関数 f1 の定義では,1つ目の引数を x, 2つ目を y,... という名前で扱うことにしています.実引数と仮引数に同じ名前の変数を使う必要はないことに注意. ***課題A-3 講義資料Q9 [#d295e294] 今日の講義資料のQ9をやりなさい(紙の上で考えればよい). &color(white,blue){check}; 以下に白字で答えが書いてあります. -f01.c: &color(white){ウ: 以下の3つで選ばれなかったから}; -f02.c: &color(white){ア: 第2引数が浮動小数点数 ==> 第2引数としてdouble型を受け取ってるのは ア だけ}; -f03.c: &color(white){イ: main中で関数 f の戻り値を受け取ってる ==> 戻り値のある関数は イ だけ}; -f04.c: &color(white){エ: 第2引数で番地を受け渡ししてる}; &size(9){注: C言語の規格上は,上記の答えの組み合わせ以外にもコンパイル&実行可能な解がいくつかあります.しかし,「最も適切な対応づけはどのようになるか」ですので...}; &size(9){注: コンパイル&実行の上では ア には何も問題がありませんが,人間の感覚ではおかしな所があります.さてどこでしょう → &color(white){ s + t と s - t }; }; **課題B(self) 締切: 今回の実習終了時 [#kadaiB] 注意: - &color(#0000a0){以下の文だけではディレクトリの作成の仕方やEmacsの使い方がわからないという人は,次のページを参照しなさい:}; [[Docs/4UNIXBeginners]] - 以下の説明の「aprog20&color(red){XY};」の &color(red){XY}; には,「20XYが年度を表す4桁の数(西暦)になるように」数を当てはめて考えてください. この課題は以下の通りです. +コンソールを開き,mkdir コマンドを使って,ホームディレクトリの下に aprog20XY というディレクトリを作りなさい. --&color(white,blue){check}; mkdir の使い方を忘れたひとは [[Docs/4UNIXBeginners]] へ +aprog20XYディレクトリに移動し,emacsを用いてこの中に ex01b.c という名前のファイルを作りなさい.このファイルの内容については,以下の指示に従うこと --&color(white,blue){check}; cd でディレクトリを移動してから emacs ファイル名 & --&color(white,blue){check}; cd の使い方を忘れたひとは [[Docs/4UNIXBeginners]] へ --次の実行例のような動作をするプログラムとする #pre{{ 2つの数を入力してね: 7 2 ← 7 と 2 はキーボードからの入力 7 の3倍から 2 を引くと 19 やで 2つの数を入力してね: 99 100 ← 99 と 100 も.以下同様 99 の3倍から 100 を引くと 197 やで 2つの数を入力してね: 54321 12345 54321 の3倍から 12345 を引くと 150618 やで ← 同様の動作を3回繰り返したら終了する }} --ただし,次のような仕様の関数を定義してそれを用いること,&color(red){プロトタイプ宣言を忘れずに}; ---関数名は sub3 ---引数は2つ,いずれもint型 ---戻り値はint型 ---(1つ目の引数の値)の3倍から(2つ目の引数の値)を引いた値を返す --上記の仕様からわかるように,&color(red){この関数中で printf() を呼んで出力するのではない}; +ex01b.c をコンパイルして動作を確認,ただし,&color(red){実行形式のファイル名は ex01b とすること};. --&color(white,blue){check}; コンパイルの仕方忘れたひとは講義資料参照 **課題C(TA) 締切: 今回の実習終了15分前 [#kadaiC] 課題C-1とC-2の両方ができたら [[callta>http://callta.math.ryukoku.ac.jp/]] してください.「関数の定義を紙に書け」ですからプログラムのソース全体を書けと言っているわけではないことに注意. ***課題C-1 関数 sum [#lf50e1f4] 次の仕様の関数の定義を紙に書きなさい -関数定義の1行目は次の通り int sum(int a[], int n) -配列aの先頭からn個の値の合計を求め,それを返す -関数の定義の中にprintf()は含まれないはずです ***課題C-2 関数 ほげ [#a4e70e46] 以下のような関数の定義を紙に書きなさい -関数名は自分で適当に決める -引数は課題C-1の関数sumと同様とする -渡された配列の要素中に7の倍数があったら,その数を999倍する -関数の定義の中にprintf()は含まれないはずです **課題D(TA) 締切: 次回実習開始直後 [#kadaiD] ***課題D-1 ex01sum [#we1ec3a3] 課題C-1の関数を用いて,次の実行例のような動作をするプログラムを作りなさい. ただし,次のようにすること -ソースファイル名は ex01sum.c 実行形式のファイル名は ex01sum (&color(Red){今後は特に指示がない限り,実行形式のファイル名はソーフファイル名の拡張子を取り除いたものとしてください};) -配列の大きさは 100 -最初にキーボードから入力されるデータ件数は,1以上100以下と仮定して構わない(範囲外の件数が入力されたときのエラー処理などはしなくてよいということ.余裕があれば,エラー処理をどうするとよいか考えてみるとよい) #pre{{ 何個?: 5 ← 5 はキーボードからの入力 0番目: 1 ← 1 はキーボードからの入力,それ以外はプログラムの出力.以下同様 1番目: 2 2番目: 3 3番目: 4 4番目: 5 合計は 15 }} ***課題D-2 ex01x999 [#zdd5e828] 課題C-2の関数を用いて,次の実行例のような動作をするプログラムを作りなさい. ただし,次のようにすること -ソースファイル名は ex01x999.c -配列の大きさは 100 #pre{{ 何個?: 5 0番目: 1 1番目: 2 2番目: 21 3番目: 49 4番目: 343 0番目は 1 ← ここから先は全部プログラムの出力 1番目は 2 2番目は 20979 3番目は 48951 4番目は 342657 }} **課題S(おまけ) 締切: 次回実習終了まで [#kadaiS] 次のことをやりなさい.おまけ課題のチェックは高橋が担当しますので,直接高橋に声をかけてください. - [[Docs/ポインタの話]]のQ2(初級)の2番をやって説明しなさい - 2011年2月実施の「2010年度数理情報学科学力認定試験」の専門Iの問IVのプログラムを作りなさい. 学力認定試験や大学院入試の過去問は[[こちら>https://www.math.ryukoku.ac.jp/wiki/index.php/%E5%A4%A7%E5%AD%A6%E9%99%A2%E5%85%A5%E8%A9%A6%E5%95%8F%E9%A1%8C]]にあります(全学認証のユーザ名とパスワードでログインする必要があります).