[前回(2019/06/28)の内容] s_print.h/s_intput.h 入出力を行う関数 s_print_XXX / s_input_XXX コンパイル時に「-I ~/c/include」が必要 !! 試験の時もファイルの先頭に #include "s_input.h" などがあれば、 !! コンパイル時に -I ~/c/include を付ける !! => 面倒でなければ「いつもつける」でよい !! ==> make をつかえば、面倒でさえない... Input-process-output 構造 情報を入力(input)し、その情報を加工(process)して、その結果を出力(output)する 入力のないプログラムは、(基本)毎回同じ結果を出力する => もし、異なる出力を期待する場合は、program を変更する必要がある !! 「コンピュータで何かをする」場合「プログラム」と「データ(入力)」がいる <= 「入力を行う」プログラムとして設計すれば、 「入力」を変更するだけで、異なる出力を得る事ができる プログラムを作成する時に、 求める結果に影響する要因 (原因:データ:[将来変更する可能性が高いもの]) は、何かを考え、その部分を「入力」にしておくと、 => プログラムの再利用(「入力」を変更するだけで、別の「出力」が得られる)が可能 プログラムの機能の中心は process の部分 input/output : (人間などの) program の外とのやり取りの部分 process は変更される事は少ない i/o (i/f) は、相手が変われば変わる部分 ipo の形で書けば、変更されやすいところとされにくいところが分離できて => 変更されにくい部分が再利用できる 返(かえ)り値を持つ関数 return 命令を利用する事により、関数に値を返すようにできる この時、関数宣言で返り値の型を指定する必要がある # 整数値(int 型)がつかえるようになったり # 関数に値が返せるようになったり # 入力と出力ができるようになった # => できる事が(組み合わせによって..) 一挙に増えている else if 多分岐を行う場合の表現 ( if-then-else は二分岐 ) cf. if 構文 if ( 条件 ) { 条件が成立した時の処理 } else { 条件が不成立の時の処理 } => 二つの状況に対して、処理が可能 => これを組み合わせる事により、一般に n 種類の場合分けが可能 例 : 負、0、正の三つの組み合わせを考える /* n が 0 と 正 と 負の三通り */ if ( n == 0 ) { printf ( "n はゼロです\n" ); } else { /* n != 0 なので、正か負 */ if ( n > 0 ) { /* n が正かどうかを判定 */ printf ( "n は正です\n" ); } else { /* n が負である可能性しかない */ printf ( "n は負です\n" ); } } => if 構文さえあれば、「したい事はすべてできる」 <= 気持ちがわるい この三種類(正、0、負)は、同等 でも、プログラムの書き方は同等に見えない # プログラムは人間が書くので # 「同じもの」が「違うように『見える』」と間違う <= else if を利用する if ( n == 0 ) { printf ( "n はゼロです\n" ); } else if ( n > 0 ) { /* n が正かどうかを判定 */ printf ( "n は正です\n" ); } else { /* n が負である可能性しかない */ printf ( "n は負です\n" ); } => else if の導入の結果、「同等なものが同じように記述される」 == [前期の復習] hello world プログラムの作成と実行の方法(コンパイルのしかた etc..) C 言語で記述された、「完全に動くプログラム」の実例の紹介 これから、自分が作成するプログラムの雛形になる !! hello world のプログラムには、「いろいろと『お呪い』」があった !! => 説明しない 順接[a] 関数 if 構文(条件分岐[b]) 再帰(繰り返し[c]) [a],[b],[c] => 万能になる => ここまで、一応、「C 言語でプログラムを作る方法を学ぶ(ソフトウェア概論の目的)」は達している 学習(実技)は、同じことを繰り返さないと身につかない C 言語も同じ事を何度も繰り返しの学習をする必要がある <= 前回の内容までで、一応、一回目とする => 今回の内容から二回目を始めたい <= 最初の内容から、また始める == [二週目開始] hello, world 再び 「プログラムを作成する」という技術 完全に動くプログラムのサンプル プログラムの雛形として利用 !! 一周目は「お呪い」は「お呪いのまま(解説は後回し)」にする => 二週目では、この「お呪い」の解説をして、「お呪い」を無くす 「お呪い」の解説 => それの機能をしりたければ、それを無くしたらどうなるか ? を調べればよい 「ノックアウトする」というテクニック printf の役割 printf を削除したら、文字列が表示されなくなった printf は、文字列を出力する機能を担っている int main() { .. } の部分の意味 プログラムファイルを空っぽにした(どうせ、何もしないから、記述は不要では.. ?) => コンパイルはできたが、リンクができなかった => 「undefined reference to `main'」というエラーが生じた <= C 言語で作られたプログラムには、「main 関数」が(一つ)含まれている必要がある => 「プログラムを実行しなさい」と指示すると、「プログラムの中の main関数」が 呼び出さる(という約束になっている) 二週目の hello, world の説明 => いくつかのお呪いの説明をした <= 新しい謎がうまれた.. (後回し...立ち消えかも.. ?) 「順接」 命令を並べると、その並べた順に実行するという記述 !! 命令の並びを変えると、違ったプログラムになる !! => (三つある..)命令の「組み合わせ方法」の一つ 命令の並びや順番を指定する事により、命令の結果を制御できる