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
: 出力した文字またはエラーの場合
EOF
fgets
:
バッファ又は何も読んでない場合、NULL
puts
: 負でない整数または EOF
scanf
: 読み込みに成功した変数の数または
EOF
printf
: 出力した文字の数具体例:
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 | prog2
04A1in.txt
)
を用意04A1check.txt
)
を用意04A1out.txt
) に保存$ gcc 04A1.c && ./a <04A1in.txt
>04A1out.txt
diff
コマンドで)$ diff 04A1out.txt 04A1check.txt
$ gcc 04A1.c && ./a <04A1in.txt |
diff - 04A1check.txt
04A1: 一文字の入力と出力 ('\''
は \
の文字列ではなく、'
一文字 (\
でエスケープ))
04A2: 文字の番号の調査
04A3: 大文字と小文字の入れ替え
04B1: 様々な型の入出力 (教科書 pp. 385-387 参照)
04B2: バグの入ったプログラムの分析と修正
(今日必ず先生に提出)
04C1 (部分点): ヒント:
入力の一文字ずつ枝分かれを使うか、小さいバッファーに一文字ずらしながら読み込むなど
挑戦 (部分点) は必須、完成は発展問題