1.1 手始めに, 1.2 変数と算術式, 1.3 For文, 1.4 記号定数, 1.5 文字入出力, 1.5.1 ファイルの複写, 演習1-2, 演習1-3, 演習1-4, 演習1-5, 演習1-6, 演習1-7 K&R プログラミング言語C
2009年11月28日
1.1 手始めに
プログラムには main
関数が必要。
演習1-2
#include <stdio.h> int main(int argc, char *argv[]) { printf("hello,\x\n"); return 0; }
$ gcc -o ex1-2 ex1-2.c ex1-2.c:13:12: error: \x used with no following hex digits
\x
に続けて16進数値を記述しなければいけない。
#include <stdio.h> int main(int argc, char *argv[]) { printf("hello,\x61\n"); return 0; }
16進数の 61
は10進数の 97
に相当する。
ASCIIコードの 97
は小文字の a
に該当する。
$ ./ex1-2b hello,a
1.2 変数と算術式
while (<test>) {
<do something>;
}
while
ループは ()
内のテストを評価して成功した場合(真の場合)に {}
内の本体を実行する。
5 / 9 /* => 0 */
整数の演算では小数部が切り捨てられる。
int
と float
による演算では、処理の前に int
が float
に変換される。
数値の文字幅の調節は、各 %d
に幅数を記述する。
#include <stdio.h> int main(int argc, char *argv[]) { int i = 65; float f = 54.321; printf("%d\n", i); printf("%3d\n", i); printf("%f\n", f); printf("%10f\n", f); printf("%10.1f\n", f); printf("%.2f\n", f); return 0; }
$ ./pdigit 65 65 54.320999 54.320999 54.3 54.32
演習1-3
#include <stdio.h> /* fahr = 0, 20, ... 300 に対して、華氏-摂氏対応表 * を印字する; 浮動小数点版 */ int main(int argc, char *argv[]) { float fahr, celsius; int lower, upper, step; lower = 0; /* 温度差の下限 */ upper = 300; /* 上限 */ step = 20; /* きざみ */ printf("fahr\tcelsius\n"); fahr = lower; while (fahr <= upper) { celsius = (5.0 / 9.0) * (fahr - 32.0); /* %3.0f : 浮動小数点を3文字幅に、小数点も小数部も無し * %6.1f : 浮動小数点を6文字幅に、小数部は1桁とする */ printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } return 0; }
実行結果
$ ./ex1-3 fahr celsius 0 -17.8 20 -6.7 40 4.4 60 15.6 80 26.7 100 37.8 120 48.9 140 60.0 160 71.1 180 82.2 200 93.3 220 104.4 240 115.6 260 126.7 280 137.8 300 148.9
演習1-4
#include <stdio.h> int main(int argc, char *argv[]) { float fahr, celsius; int lower, upper, step; lower = 0; /* 温度表の下限 */ upper = 300; /* 上限 */ step = 20; /* きざみ */ printf("celsius\tfahr\n"); celsius = lower; while (celsius <= upper) { fahr = (9.0 / 5.0) * celsius + 32.0; printf("%5.0f %6.1f\n", celsius, fahr); celsius = celsius + step; } return 0; }
実行結果
$ ./ex1-4 celsius fahr 0 32.0 20 68.0 40 104.0 60 140.0 80 176.0 100 212.0 120 248.0 140 284.0 160 320.0 180 356.0 200 392.0 220 428.0 240 464.0 260 500.0 280 536.0 300 572.0
1.3 For文
演習1-5
#include <stdio.h> int main(int argc, char *argv[]) { int fahr; for (fahr = 300; fahr >= 0; fahr = fahr - 20) { printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } return 0; }
実行結果
$ ./ex1-5 300 148.9 280 137.8 260 126.7 240 115.6 220 104.4 200 93.3 180 82.2 160 71.1 140 60.0 120 48.9 100 37.8 80 26.7 60 15.6 40 4.4 20 -6.7 0 -17.8
1.4 記号定数
#define
行の後にはセミコロン(;
)を付けない。
#define 名前 置換テキスト
1.5 文字入出力
getchar()
- 一度に1文字をテキスト・ストリームから持ってきて、その値の文字を返す。ストリームの終了時に
EOF
を返す。 putchar(c)
- 一度に1文字を出力する。
1.5.1 ファイルの複写
代入文 c = getchar()
は式であり、この場合、代入結果である左辺の c
の値を返す。
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int c; /* EOF を保持するためには char 型では不適当、int 型を使用する */ while((c = getchar()) != EOF) { if (putchar(c) < 0) { exit(1); } } return 0; }
演習1-6
#include <stdio.h> int main(int argc, char *argv[]) { while(printf("getchar() != EOF : %d\n", getchar() != EOF)); return 0; }
実行結果
CTRL+D
で EOF
を入力する。
プログラムを終了するには CTRL+C
を入力する。
$ ./ex1-6 hello getchar() != EOF : 1 getchar() != EOF : 1 getchar() != EOF : 1 getchar() != EOF : 1 getchar() != EOF : 1 getchar() != EOF : 1 getchar() != EOF : 0 getchar() !=^C
演習1-7
#include <stdio.h> int main(int argc, char *argv[]) { printf("EOF IS : %d\n", EOF); return 0; }
実行結果
$ ./ex1-7 EOF IS : -1
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726