わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

「標準入力する」〜プログラム説明のヘンな日本語から,卒業しよう

いきなりですが問題です.適切な説明になるよう,________に当てはまる語句を解答しなさい.

以下は,________出力するプログラムである.行数は,変数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の値そのもの(どこを指し示すか)は変化しない.
  • 要注意の表記
    • 浮動小数の値 // 「浮動小数点数」と書く.これは「浮動+小数点+数」で構成されるので,「浮動小数」はおかしい.
    • 帰り値 // 「返り値」または「戻り値」.「帰る」と「返す」の違いに注意しよう.
    • WIDEとHEITH // 形容詞形はwideとhigh,名詞形はwidthとheight.それぞれ発音も確認しておきたい.
    • serch;sarch;seach;saerch // 正しくは「search」.英文を書くときにはスペルチェッカを,プログラミングでは,変数名などの補完機能(EmacsではM-/による動的略語展開)を活用してほしい.
  • 単純ミス(誤→正):子文字→小文字,表字→表示,置き変える→置き換える,関数係式マクロ→関数形式マクロ,再起→再帰,探策→探索,反定→判定,文字例→文字列,連挙→列挙,和算して→加算して,記込→書き込み,実引き数→実引数,番値→番地,ポイント型→ポインタ型,複号→復号

(最終更新:2013-01-08 晩)

*1:「標準入力」「1バイト」「ファイルの終わり」「行番号」を,ヒントとして,やや小さい文字で提示していました.「ファイルの終わり」は答案に入れるのに適切ではなく,どうしても書くなら,「EOFになるまで」とするのがいいでしょう.