計算機実習 I

第四回 (2014 年 5 月 1 日)

標準入出力

http://www.sw.it.aoyama.ac.jp/2014/CP1/lecture4.html

Martin J. Dürst

AGU

© 2005-13 Martin J. Dürst 青山学院大学

今日の予定

 

ミニテスト

前回の演習について

前回の演習 03C1

(学生番号の解析)

答案の長さの範囲
行数 バイト数
一番長い答案 252 8139
一番短い答案 43 1167

麺棒プログラム

問題点:

 

DRY

DRY 原則

直積の具体例

数物理 化学 電気 機械 経シス 情テク ...
19xx
20xx

 

文字列の表現

 

入出力の主な関数

(main input/output functions)

入力 出力
一文字 getchar() putchar(char c)
一行 gets(char* buffer) fgets(char*, int, stdin) puts(char* string)
フォーマット付き scanf(char* format,...) (%s) printf(char* format,...)

関数の学習

 

入出力関数の戻り値

入力の定石

具体例:

while ((c = getchar()) != EOF) { ... }

バッファ・オーバーフロー

(buffer overflow)

C 言語のメモリの扱い:

gets の問題点

多くの教科書・参考書ではまだ使用中

入力の長さは予想不可能

バッファの長さが足りないと他の変数などが勝手に書き換えられる

gets は禁止

(演習問題 04B2 参照)

scanf の要点

例: scanf ("%lf", &doubleVar);

場合によって printf と少し書き方が違う。

%sgets と同様に大問題 (演習問題 04A2 参照)

標準入出力

リダイレクトとパイプ

 

標準入出力の応用

標準入出力によるプログラムのテスト

 

テストの役割

今週の演習問題

04A1: 一文字の入力と出力 ('\''\ の文字列ではなく、' 一文字 (\ でエスケープ))

04A2: 文字の番号の調査

04A3: 大文字と小文字の入れ替え

04B1: 様々な型の入出力 (教科書 pp. 385-387 参照)

04B2: バグの入ったプログラムの分析と修正 (今日必ず先生に提出)

04C1 (部分点): ヒント: 入力の一文字ずつ枝分かれを使うか、小さいバッファーに一文字ずらしながら読み込むなど
挑戦は必須、完成は発展問題

 

次回の準備