Top / AProg / 2015 / ex01

応用プログラミング演習 2015年度 第1回 [edit]

演習のすすめ方 [edit]

AProg/2015/ex00 を参照してください.

課題A(self) 締切: 今回の演習終了時 [edit]

課題A-3まで全部できたらTAさんに申し出てください.

課題A-1 講義資料 Q5 [edit]

今日の講義資料のQ5をやりなさい(紙の上で考えればよい).

check 右のリンク先に答えがあります. 本当に見ます?

課題A-2 講義資料 Q8 [edit]

今日の講義資料のQ8をやりなさい(紙の上で考えればよい).

  • check 以下に白字でヒントが書いてあります.マウスで文字列を選択すると見えるでしょう.
    • ヒント1: f1 を呼ぶと x の値が変化してますね
    • ヒント2: f1の3つ目の引数は番地を渡してますね
  • check 右のリンク先に答えがあります.本当に見ます?
  • check 関数を呼び出す際に書く引数(括弧の中に書くもの)を「実引数」といい,関数を定義する所で書く引数を「仮引数」といいます.この例では,関数 f1 に渡される実引数は 1.5, 2.0, &x の3つ.一方,関数 f1 の定義では,1つ目の引数を x, 2つ目を y,... という名前で扱うことにしています.実引数と仮引数に同じ名前の変数を使う必要はないことに注意.

課題A-3 講義資料Q9 [edit]

今日の講義資料のQ9をやりなさい(紙の上で考えればよい).

check 以下に白字で答えが書いてあります.

  • f01.c: ウ: 以下の3つで選ばれなかったから
  • f02.c: ア: 第2引数が浮動小数点数 ==> 第2引数としてdouble型を受け取ってるのは ア だけ
  • f03.c: イ: main中で関数 f の戻り値を受け取ってる ==> 戻り値のある関数は イ だけ
  • f04.c: エ: 第2引数で番地を受け渡ししてる

注: C言語の規格上は,上記の答えの組み合わせ以外にもコンパイル&実行可能な解がいくつかあります.しかし,「最も適切な対応づけはどのようになるか」ですので...

注: コンパイル&実行の上では ア には何も問題がありませんが,人間の感覚ではおかしな所があります.さてどこでしょう → s + t と s - t

課題B(self) 締切: 今回の演習終了時 [edit]

この課題は以下の通りです. 以下の文だけではディレクトリの作成の仕方やEmacsの使い方がわからないという人は,次のページを参照しなさい: Docs/4UNIXBeginners

  1. コンソールを開き,mkdir コマンドを使って,ホームディレクトリの下に aprog2015 というディレクトリを作りなさい.
  2. aprog2015ディレクトリに移動し,emacsを用いてこの中に ex01b.c という名前のファイルを作りなさい.このファイルの内容については,以下の指示に従うこと
    • check cd でディレクトリを移動してから emacs ファイル名 &
    • check cd の使い方を忘れたひとは Docs/4UNIXBeginners
    • 次の実行例のような動作をするプログラムとする
      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回繰り返したら終了する
      
    • ただし,次のような仕様の関数を定義してそれを用いること,プロトタイプ宣言を忘れずに
      • 関数名は sub3
      • 引数は2つ,いずれもint型
      • 戻り値はint型
      • (1つ目の引数の値)の3倍から(2つ目の引数の値)を引いた値を返す
    • 上記の仕様からわかるように,この関数中で printf() を呼んで出力するのではない
  3. ex01b.c をコンパイルして動作を確認,ただし,実行形式のファイル名は ex01b とすること
    • check コンパイルの仕方忘れたひとは講義資料参照

課題C(TA) 締切: 今回の演習終了10分前 [edit]

課題C-1とC-2の両方ができたら callta してください.「関数の定義を紙に書け」ですからプログラムのソース全体を書けと言っているわけではないことに注意.

課題C-1 関数 sum [edit]

次の仕様の関数の定義を紙に書きなさい

  • 関数定義の1行目は次の通り
    int sum(int a[], int n)
  • 配列aの先頭からn個の値の合計を求め,それを返す
  • 関数の定義の中にprintf()は含まれないはずです

課題C-2 関数 ほげ [edit]

以下のような関数の定義を紙に書きなさい

  • 関数名は自分で適当に決める
  • 引数は課題C-1の関数sumと同様とする
  • 渡された配列の要素中に7の倍数があったら,その数を999倍する
  • 関数の定義の中にprintf()は含まれないはずです

課題D(TA) 締切: 次回演習開始直後 [edit]

課題D-1 ex01sum [edit]

課題C-1の関数を用いて,次の実行例のような動作をするプログラムを作りなさい. ただし,次のようにすること

  • ソースファイル名は ex01sum.c 実行形式のファイル名は ex01sum (今後は特に指示がない限り,実行形式のファイル名はソーフファイル名の拡張子を取り除いたものとしてください
  • 配列の大きさは 100
  • 最初にキーボードから入力されるデータ件数は,1以上100以下と仮定して構わない(範囲外の件数が入力されたときのエラー処理などはしなくてよいということ.余裕があれば,エラー処理をどうするとよいか考えてみるとよい)
    何個?: 5    ← 5 はキーボードからの入力
    0番目: 1     ← 1 はキーボードからの入力,それ以外はプログラムの出力.以下同様
    1番目: 2
    2番目: 3
    3番目: 4
    4番目: 5
    合計は 15
    

課題D-2 ex01x999 [edit]

課題C-2の関数を用いて,次の実行例のような動作をするプログラムを作りなさい. ただし,次のようにすること

  • ソースファイル名は ex01x999.c
  • 配列の大きさは 100
    何個?: 5
    0番目: 1
    1番目: 2
    2番目: 21
    3番目: 49
    4番目: 343
    0番目は 1    ← ここから先は全部プログラムの出力
    1番目は 2
    2番目は 20979
    3番目は 48951
    4番目は 342657
    

課題S(おまけ) 締切: 次回演習開始直後 [edit]

次のことをやりなさい.おまけ課題のチェックは高橋が担当しますので,直接高橋に声をかけてください.

  • Docs/ポインタの話のQ2(初級)の2番をやって説明しなさい
  • 2011年2月実施の「2010年度数理情報学科学力認定試験」の専門Iの問IVのプログラムを作りなさい. 学力認定試験や大学院入試の過去問はこちらにあります(全学認証のユーザ名とパスワードでログインする必要があります).

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-12 (月) 10:10:07 (377d)