計算機言語 I 第 2 回
教科書 2 章前半部分の補足とレポートに対するコメント
この資料: http://www.math.u-ryukyu.ac.jp/~suga/gengo/2023a/02.pdf
講義は,教科書に従って進めます. この資料はその補足です. 今回は,教科書 2章, 2.1節から2.6節を講義します.
1 #include について
まずは,教科書p. 18 – p. 20の内容を読んで, p.18プログラム2.1 を実行してください(前回の内容を思 い出すこと).
前回述べましたが, C言語の処理系(gccあるいはcc)では,処理をいくつかに分割して最終的な成果物を作 成します. その際,行の先頭が# で始まる行はcpp (C pre processor)が処理をします. それは, C compiler
(ccom)が処理をする前に,コメント文の削除や,マクロの展開などの文字列処理を行いなす.
プログラムの先頭に書かれる#includeは,別ファイルに記述してある内容をプログラムの中に取り込む操 作が行われます.
教科書に書かれている
#include <stdio.h>
は, stdio.h という名前のファイルをプログラムに取り込んでいます. この時, ファイル名の両脇にある記
号<, >は,プログラム処理系で特に定まった場所にあるファイルを取り込むという意味になります. Linuxで は処理系では,その場所は, /usr/includeというディレクトリです. 実際そこには, stdio.hや, math.hという 名前のファイルがあります. macOSでは,全く違うディレクトリにstdio.hがありますが, Unix系なのでそ の記述はLinuxと似ています. Microsoft のVisual Studioは, Unix系とはかなり違う構成になっています が,それを詳しく解説できません. Windowsでも, Cygwin やMinGW を用いて処理系を導入した場合,ある
いは, WSLを利用する場合は, Linuxと似たようなものになります.
1.1 教科書とレポートへのツッコミ
ファイルmath.h は前回のプログラム,レポート問題, この後の教科書のプログラムで用います. math.hと
いうのは,数学関数や数学上重要な定数を利用するにあたって,それらの宣言が記述されたファイルです.
bash-4.4$ less /usr/include/math.h
1
を実行してみると,
# define M_PI 3.14159265358979323846
という行があります.
従って, double型で数値計算をするときには, math.hをinclude して, M_PIを利用するのが通常で,教科 書のように,#define PAI ....と書いたりはしません.
有効数字という悩ましい問題があって, M_PIは,通常使う有効数字的には桁が多すぎます. 現実の実験 系がその辺をどう扱っているかは, 知りません. ただし,πを最定義するのなら, 普通はPAIではなく PIだと思います.
レポートの解答で, sin(30)を計算した方がいました. 通常, sinの変数はradianですので, 当然,間違った 答えになっています.
間違いを犯すのはよくあることなのですが,重要なのは間違いに気づくことです. sin(30◦) = 12 は,三角比 を習った時点ですぐに知る内容なはずです. 0.5に近い値が出なかったときに,「何かを間違えている」と気づ けないようでは,数理の学生として失格です.
また, 3角関数の変数がradianを単位にする理由もきちんとわかっていてください. (sinx)′ = cosxのそ こそこ厳密な証明くらいはできるようになって, (あるいは, 高校の教科書の lim
x→0
sinx
x = 1の証明のどこにゴ マカシがあるのかを理解して)卒業してください.
1.2 マクロ置換 : #define
教科書p. 24にあるように,行頭の #defineはcpp により,マクロ置換と呼ばれる操作が行われます.
#define HOGE hogehoge
とあると, cppがプログラムソース内のHOGEという文字列を hogehogeという文字列に置き換えて,その
結果をC compiler に渡します. 実行していることは単純な置き換え以外の何者でもありません.
レポート問題
640320×640320×640320の値を出力するプログラムを書け. (教科書を先読みするか, 64bit整数の使い 方を調べないと,答は出ない.)
• レポートする内容は,プログラムソースと実行結果. 実行結果の出力形式は, 各自に任せる.
• 件名: gengo2023 report 2-1,送り先: [email protected],締切5月1日(月) 10:00(JST)
2