http://www.sw.it.aoyama.ac.jp/2015/CP1/lecture4.html
© 2005-15 Martin J. Dürst 青山学院大学
"hello world" の原点
| 03B1 | 03C1 | 03C2 | 03C3 | 03C4 | |
| 100点 | 91 | 67 | 40 | 29 | 15 |
| 60点 | 4 | 28 | 48 | 55 | 62 |
| 部分点 | - | - | - | - | 9 |
| エラー | 0 | 1 | 4 | 1 | 1 |
| 未提出 | 1 | - | 4 | 11 | 9 |
(学生番号の解析)
| 行数 | バイト数 | |
| 一番長い答案 | 201 | 7025 |
| 一番短い答案 | 46 | 1255 |
問題点:
| 数物理 | 化学 | 電気 | 機械 | 経シス | 情テク | ... | |
| 19xx | |||||||
| 200x | |||||||
| 20xx |
char 型の配列 (byte
array)char
型は文字としても小さい数字としても解釈可能'\0' (ナル文字)char str[] = "Aoyama\n";str[0] |
str[1] |
str[2] |
str[3] |
str[4] |
str[5] |
str[6] |
str[7] |
|
| 文字 | 'A' |
'o' |
'y' |
'a' |
'm' |
'a' |
'\n' |
'\0' |
| 数字 (10進数) | 65 |
111 |
121 |
97 |
109 |
97 |
10 |
0 |
| 数字 (16進数) | 0x41 |
0x6F |
0x79 |
0x61 |
0x6D |
0x61 |
0x0A |
0x00 |
(main input/output functions)
| 入力 | 出力 | |
| 一文字 | getchar() |
putchar(char c) |
| 一行 | gets(char* buffer)fgets(char*, int, stdin) |
puts(char* string) |
| フォーマット付き | scanf(char* format,...) () |
printf(char* format,...) |
man コマンドgetchar: 文字 (の番号) 又は EOF (end of
file, ファイルの終わり)putchar: 出力した文字またはエラーの場合
EOFfgets:
バッファ又は何も読んでない場合、NULLputs: 負でない整数または EOFscanf: 読み込みに成功した変数の数または
EOFprintf: 出力した文字の数具体例:
while ((c = getchar()) != EOF) { ... }
(buffer overflow)
C 言語のメモリの扱い:
Segmentation Fault などのエラー)int array[10]; array[20] =
100;gets の問題点(演習問題 04B2 参照)
scanf の要点例: scanf ("%lf", &doubleVar);
場合によって printf と少し書き方が違う。
%s は gets
と同様に大問題 (演習問題 04A2 参照)
stdin)
と「標準出力」(standard output, stdout)
と呼ばれる$ ./prog1 <inputfile.txt$ ./prog1 >outputfile.txt$ ./prog1 <inputfile.txt >outputfile.txt$ prog1 | prog204A1in.txt)
を用意04A1check.txt)
を用意04A1out.txt) に保存$ gcc 04A1.c && ./a <04A1in.txt
>04A1out.txtdiff
コマンドで)$ diff 04A1out.txt 04A1check.txt$ gcc 04A1.c && ./a <04A1in.txt |
diff - 04A1check.txt04A1: 一文字の入力と出力 ('\'' は \
の文字列ではなく、' 一文字 (\
でエスケープ))
04A2: 文字の番号の調査
04A3: 大文字と小文字の入れ替え
04B1: 様々な型の入出力 (教科書 pp. 385-387 参照)
04B2: バグの入ったプログラムの分析と修正
(今日必ず先生に提出)
04C1 (部分点): ヒント:
入力の一文字ずつ枝分かれを使うか、小さいバッファーに一文字ずらしながら読み込むなど
挑戦 (部分点) は必須、完成は発展問題