復習のガイド・ヒント(2015〜)


期末試験は秋学期に行ったことすべてが範囲となります.しかしながら,勉強の仕方について
迷っている学生もいると思われるので,復習しておくべきことと,例題などをいくつか示しておき
ます.(順次追加されます.時々確認して下さい.)
中間試験は中間の確認ですので,中間以前も範囲であることを覚えておいて下さい.


関数の作成

□ main関数から関数を分けることのメリットはどのようなものか?
□ 引数は変数しかやり取りできないか?
□ void fnc(void); と関数を宣言したが,この関数を利用することは可能か?注意すべき点は?
□ 引数にする際,型変換により揃える必要があるか?
□ 関数はどこに宣言すべきか?
□ 関数の中に記述した変数はどこで利用できるか?(CとC++で違う)

例題) main関数中で,float型で宣言された変数がある.関数の引数はdouble型であるときどのような処理・操作が必要か?
例題) main関数中にすべてのコードを記述することができる場合でも関数を作成する利点について述べよ.
例題) 戻り値の型はどのように記述すべきか,例示して説明せよ.


配列,構造体と構造体の演算

□ 変数x1,x2,x3,x4,x5と配列x[5]と宣言した場合の違いは何か?
□ 配列x[10][10]とはどのようなデータの構造となっているか?
□ 構造体を利用する理由はどのようなことか?
□ 構造体を配列にするとはどのようなことか?
□ 構造体を用いるにはどのように記述すればよいか?
□ 構造体内の中の変数に値を与えるとき,どのように書けばよいか?
□ 構造体名は,変数の型のようなものとして考えてよいか?
□ 文字を扱う上で配列にしなければならない理由はどのようなものであるか?

例題) 3行3列の行列を定義するために配列を用意したい.どのように宣言するか答えよ.
例題) 2行2列の行列と2行1列のベクトルがある.これらを掛ける関数を作成せよ.
例題) 構造体aの中に char str[20]がある.構造体を配列にしてa[10]とした場合,漢字の文字列は合計何文字分記述できるか?


複素数

□ 変数に複素数型という型はない.複素数を扱う場合,どのようにするか?
□ 虚数についてプログラム上どのようなことに注意すべきか?
□ 数学的な複素数とプログラム上の複素数はどのように違うか?

例題) 複素数を扱うための構造体を定義せよ.
例題) 二つの複素数の積を演算するプログラムを作成せよ.
例題) double im; として虚数を定義した.im*imで必要な値となるか,説明せよ.


ポインタ

□ ポインタはどのように宣言するか.値はどのように与えるか?
□ プログラムにおけるデータとは,アドレスと値から構成されると考えてよいか?
□ アドレスをやり取りすると,メモリ内の値はどのように扱われるか?
□ 関数をポインタ化した場合,どのように宣言するか.関数はどのように与えるか?

例題) 通常の値で参照する方法に対してポインタ(アドレス)で参照した場合,メモリ内の値の動き(書き換え)はどのように違うか説明せよ.
例題) メモリ内の複数の変数を示すのになぜアドレスが必要となるか説明せよ.
例題) 関数ポインタを利用するメリットを説明せよ.


グローバル変数

□ グローバル変数は,ソースファイルのどこに記述するか?
□ グローバル変数は,プログラムのどこから読み込むことができるのか?
□ グローバル変数を変更できなくする方法はあるのか?
□ グローバル変数は積極的に利用すべきか?

例題) グローバル変数とはプログラムのどこにどのように記述するか,説明せよ.
例題) グローバル変数の値が書き換わっては困る場合,どのように記述するか,説明せよ.
例題) グローバル変数をなるべく使わない方がよいと言われる理由はどのようなものか説明せよ.


補間

□ 補間によって作られたグラフは,理論式と同じか否か?その理由は?
□ 内挿,外挿とは何か?またそれぞれの精度はどのように違うか?
□ 補間アルゴリズムにより結果が異なる.補間したグラフの扱いで注意すべきことはどんなことか?

例題) 充分小さい誤差で計測データを得た.補間の処理を行った際の値は理論式に則っていると判断してよいか説明せよ.
例題) 内挿の範囲で補間曲線を調べたところ,理論式による曲線と誤差が生じた.考えうる原因を説明せよ.
例題) 測定していない値について外挿によって推測した.この値の扱いについてどのように注意すべきか説明せよ.


最小2乗法

□ 最小2乗法では,何の値が求められるか?
□ 人間が行うグラフ作成と最小2乗法による値はどのように異なるか?
□ 最小2乗法で理論式を決めた.理論式自体が正しいとして,結果をそのまま利用できるか?その理由は?

例題) 理論式が正しいとして,最小2乗法による値に誤差が生じる原因は何か,説明せよ.
例題) 最小2乗法の結果の精度を上げるにはどのようにしたらよいか,説明せよ.
例題) 最小2乗法の結果が良くなかった.この場合,結果をどのように扱うべきか説明せよ.


分割コンパイル

□ ヘッダファイル,実装ファイルにはそれぞれ何を書くのか?
□ main関数の記述されたソースファイルの記述量が少なくなるのは何故か?
□ 完成して変えるつもりのない関数はソースファイルに残しておくべきか?
□ 分割コンパイルを行うと関数の再利用性が上がるのは何故か?
□ 分割コンパイルを行うと関数を保護しやすいのは何故か?

例題) ヘッダファイルの活用による分割コンパイルにより,main関数は特にどのようなことを記述すればよいか説明せよ.
例題) 複数人で分担して関数を作成した.分割コンパイルを活用することで,どのような利点が得られるか説明せよ.
例題) 作成した関数が完成したので変えたくない.どのようにしたら保護できるか,理由を添えて説明せよ.


離散フーリエ変換(DFT)

□ フーリエ変換と離散フーリエ変換の違いはどのようなものか?
□ 離散フーリエ変換を行うことで得られる情報はどんなものか?

例題) フーリエ変換(離散ではない)を計算機上で演算することは可能か?またその理由はどのようなものか?
例題) 波形を観測している.今の瞬間の周波数構成を離散フーリエ変換によって演算することは可能か?
例題) サンプリング周期と離散フーリエ変換で演算できる周波数の上限の関係を説明せよ.


数値シミュレーション

□ 解析解,数値解(解析的解法,数値的解法)の違いは何か?
□ 同じ数式を計算したのに,解が異なってしまったのは何故か?
□ 同じことを求めるのに,解法(アルゴリズム)がいくつもあるのは何故か?
□ シミュレーションを行ったがエラーは発生しなかった.結果の妥当性と理由は?
□ 精度良く計算するために,細かい刻みで多くの計算を行った場合,よい結果となるか?
□ 切り捨て,丸め誤差とは何か?
□ 誤差の蓄積とは何を意味するか?
□ 計算結果の妥当性を上げるにはどのようなことに気をつけるべきか?

例題) 数値シミュレーションの結果と簡素化された理論式による解析結果を比較する意義を論じよ.
例題) よい精度の計算結果を得るため,計算速度の速いコンピュータと細かい刻みの計算上条件でシミュレーションを行った.結果は妥当と考えられるか,理由を添えて説明せよ.
例題) 理論式,実験値(測定値),シミュレーション結果の関係について,どのように扱うべきか説明せよ.


コマンドライン引数

□ コマンドライン引数で記述された数値はプログラム中にどのように反映されるか?
□ コマンドライン引数は文字列であるとすると数値にするにはどうしたらよいか?

例題) ソースコード内の数値を変更してコンパイルを行うのに対し,コマンドライン引数を利用するメリットは何か説明せよ.
例題) コマンドライン引数を扱う上でどのような点に注記すべきか説明せよ.
例題) 対話的に変数を入力,コマンドライン引数の利用,テキストファイル読み込みについてそれぞれどのように使い分けたらよいか説明せよ.