いきなりですが問題です.適切な説明になるよう,________に当てはまる語句を解答しなさい.
以下は,________出力するプログラムである.行数は,変数linenoが保持する.また行頭かどうかを判断するため,変数c_lastを使用している.
#include <stdio.h> int main(void) { int c, c_last = '\n'; int lineno = 0; while ((c = getchar()) != EOF) { if (c_last == '\n') { printf("%d: ", ++lineno); } putchar(c); c_last = c; } return 0; }
さっそくですが解答です.用意していたのは「標準入力から1バイトずつ読み出し,行番号をつけて」です.
これは,某年月日の授業終了時の小テストでした.
答案用紙をソートし,順に読んでいったところ,「標準入力された文字」や「標準入力して」といった記述が,目につきました*1.
「標準入力」は,名詞であって,「する」をつけることはできません.
「入力」だけなら,名詞として使えるほか,「入力する」と書くこともできます.サ変名詞と呼ばれます.
「入力」にはまた別の注意が必要です.プログラムを主語として,「処理する」「出力する」と書くのはいいけれど,「入力する」とはできないのです.入力する,出力する,入力の反対は出力だけど,主語に注意で取り上げています.
これまで,演習や試験の答案で,Cプログラムの説明に関する「ヘンな日本語」を整理し,公開しています.過去3年分の試験の解説を見直しまして,学生から技術者へとなっていく間に,こういう言葉づかいはしなくなってほしいと望む表現を,ピックアップしてみました.「//」の前が間違いの例,「//」の後はコメントです.
- プログラムの説明
- このプログラムは〜関数である. // 主語と述語の対応がおかしい.「このプログラムは〜である.」か「これは〜プログラムである」が基本.
- ファイルの文字を1文字ずつ検索する // 「検索」はしていない.「読み出す」である.
- どこに何色あるかを調べる // 「何色」が,「なにいろ(what color)」であっても,「なんしょく(how many colors)」であっても,意味が通じない.
- このプログラミングで定義している関数は // 「このプログラムで」としなければならない.「プログラミング」は人間の行為,「プログラム」はその行為によって得られる成果物である.
- 文法に関すること
- int iを作る // 書き言葉としては,「int型の変数iを定義する」としよう.
- 同じ色であれば1を,違う色であれば0を実行する // 「を実行する」はよくない.「と評価する」とすればよい.
- c&bが0でないとき,if文を,0のとき,else文を実行する // 「if文を実行」「else文を実行」という表現は適切でない.該当部分を行番号で示すほうがよい.
- x軸が4,y軸が4の2次元配列 // 2次元の離散的な構造なので,「X軸」「Y軸」ではなく「幅・高さ」または「行・列」を使うようにしたい.
- "\n"(終端文字)を出力する // 終端文字とは'\0'をいう.ここは「改行」.
- pの中身をcに代入している // これはc = *p;の説明になっておらず,c = p;と解釈されてしまう.「参照」もしくは「指し示す」という言葉を使おう.
- コマンドライン引数を持つ;コマンドライン引数を定義している;コマンドライン引数を宣言している // 定義も宣言もしていない.「コマンドライン引数より値を獲得する」「コマンドライン引数をとる」と書くのがよい.
- *argv[]には // 変数名は,argvである.
- 自作関数void // void は予約語であり,関数名(識別子)として使用できない.
- リターン0になる // 意図はよく分かるし,会話ならいいのだが,書き言葉を意識して,「0を返す」または「0を戻り値とする」としたい.
- ドットヘッダを宣言する // 「ヘッダファイル」を「インクルード」する,としよう.
- atof関数によって文字列がfloat型の数字に変える // 「数字」は「値」,「変える」は「変換する」のほうがよい.それと,atof関数の戻り値の型はfloatではなくdoubleである.
- ファイルの先頭から1文字ずつ読み出して,その値をファイルポインタに返している // 1文字読み出すと,ファイルポインタfpが指し示すFILEオブジェクトの中身は変わるかもしれないが,fpの値そのもの(どこを指し示すか)は変化しない.
- 要注意の表記
- 単純ミス(誤→正):子文字→小文字,表字→表示,置き変える→置き換える,関数係式マクロ→関数形式マクロ,再起→再帰,探策→探索,反定→判定,文字例→文字列,連挙→列挙,和算して→加算して,記込→書き込み,実引き数→実引数,番値→番地,ポイント型→ポインタ型,複号→復号
(最終更新:2013-01-08 晩)
*1:「標準入力」「1バイト」「ファイルの終わり」「行番号」を,ヒントとして,やや小さい文字で提示していました.「ファイルの終わり」は答案に入れるのに適切ではなく,どうしても書くなら,「EOFになるまで」とするのがいいでしょう.