第 7 章 「基本型」のまとめ

7.1

用語のまとめ教 p.174

文字型と整数型 signed は（負の数も扱える）、unsigned は（ 正の数と 0 のみ扱える）の整数を宣言する際の型指定子である。
教 p.176

limits.h ヘッダ 各数値型で表現できる値の最小・最大値をマクロとして集めたヘッダファイルである。
Q 7.1.1 次のプログラムを実行し 、123456789#include <stdio.h>#include <limits.h>
int main(void) {printf("INT_MIN = %d\n", INT_MIN);
printf("INT_MAX = %d\n", INT_MAX);
printf("UINT_MAX = %u\n", UINT_MAX);
return 0;}
次の空欄を埋めよ。
「 Microsoft Visual Studio の場合、INT_MIN はUINT_MAX は、INT_MAX は、である。」
教 p.179

sizeof 演算子
sizeof (型名)という形で指定した型のサイズ（ 単位: バイト ）を返す。

sizeof 式/* 通常はややこしいので式を ( 〜 ) で囲む */という形で、式（通常は変数）のサイズ（単位: バイト ）を返す。特に、式が配列の場合は配列全体のサイズ（ 単位: バイト ）を返す。
ただし 、関数の引数として渡された配列では 、別の値（ポインタ型のサイズ ）を返すので注意する。

VII - 1

教 p.181

typedef 宣言 typedef 宣言は型の別名をつける。
分類一般形

補足説明

typedef 宣言

typedef 型 新しい型名 ;例えば typedef unsigned size_t;

教 p.194
整数定数

10 進486597
教 p.1968 進定数は先頭に を、16 進定数は先頭に8 進 16 進
060 0x300101 0x410141 0x61をつけて表記する。

整数の表示 printf 関数で整数を 8 進数または 16 進数で表示するためには、それぞれ、 ,（ A〜F を大文字にしたいときは）という書式指定を用いる。

教 p.201

math.h ヘッダ sin, cos, tan, sqrt （ square root — 平方根）, exp, log などの数学関数のプロトタイプ宣言が集められているヘッダファイルである。
教 p.205
演算子の一覧 優先順位や結合性をすべてを覚える必要はないが、必要に応じて表を調べられるように、どのような演算子があるかくらいは覚えておきたい。(Table7-11)

7.2 プログラム例
sizeof 演算子の確認
12345678910111213#include <stdio.h>void foo(int x[]) {printf("size=%u\n", sizeof(x));}
int main(void) {int a[] = { 1, 2, 3 };printf("size=%u\n", sizeof(a));
foo(a);
return 0;}

VII - 2第 8 章 「いろいろなプログラムを作ってみよう」のまとめ
8.1 用語のまとめ

教 p.216

コンマ演算子式 1, 式 2は、式 1 、式 2 をこの順に評価し 、の値を捨て、の値（と型）を持つ。
教 p.224

再帰的 (recursive) 関数の定義の中で自分自身を呼び出すこと。一般に x の定義に x 自身を使用すること。

factorial(4)→ 4 * factorial(3)→ 4 * 3 * factorial(2)→ 4 * 3 * 2 * factorial(1)→ 4 * 3 * 2 * 1 * factorial(0)→ 4 * 3 * 2 * 1 * 1• 繰返し（ for, while ）で簡単に実現できることを , 再帰で書くのは（ C 言語の場合）良いこととはいえない。階乗の例題プログラムは、あくまでも再帰を説明するためのものと考えること。
（もちろん、再帰を使わなければ簡単に書けないプログラムも多い。）• 再帰関数には、特別な文法も特別な実行規則も必要ない。あくまでも C 言語の普通の関数で、普通の実行規則に基づいて計算される。
教 p.228

getchar 関数

標準入力からを読み込んで返す関数。
教 p.228

EOF getchar などが 、入力の終わり（に由来）に達した場合に返す値をマクロで EOF と書く。
（ stdio.h に定義されている。）
教 p.231
リダイレクト 標準入出力をファイルヘの入出力につなぎかえることで、C 言語
ではなく OS (Unix, MS-DOS など ) の機能になる。
コマンド 名 < ファイル名— ファイルの内容をコマンド の標準入力に渡す
コマンド 名 > ファイル名— コマンド の標準出力をファイルに書込む
コマンド 名 >> ファイル名 — コマンド の標準出力をファイルの最後に追加する形で書込む

VIII - 1

教 p.252

文字 C 言語では文字は、単にその文字に与えられたコード（ 整数値）で表す。
ASCII コード 表での文字コード の抜粋: 文字 10 進 16 進’0’’A’’a’
教 p.23448
65
970x300x410x61

拡張表記 \n の他に、\t, \a, \b などいくつかの特殊文字を表す表記がある。特に、バックスラッシュ（ 円記号）そのものを表す時には と書く。

8.2 プログラム例
コンマ演算子の例

12345678910111213141516171819#include <stdio.h>
int main(void) {int i, j;
int x[7] = { 2, 5, 1, 4, 0, 3, 6 };for (i = 0, j = 6; i < j; i++, j--) { /* 要素の 並び を 反転 */int temp = x[i];x[i]= x[j];x[j]= temp;}puts("反転しました。");
for (i = 0; i < 7; i++) {printf("x[%d] = %d\n", i, x[i]);}/* 要素の 値を 表示 */return 0;}

ハノイの塔（ 再帰）

1
2
3
4
5
6
7
8
9
10
11

#include <stdio.h>void move(int n, int a, int b) {printf("デ ィスク%dを棒 %dから棒 %dへ \n", n, a, b);}/* n 枚のデ ィスクを aから bに 移動する手順 */void hanoi(int n, int a, int b, int c) {if (n>0) {hanoi(n-1, a, c, b);move(n, a, b);
VIII - 212
13
14
15
16
17
18
1920
21

hanoi(n-1, c, b, a);}}
int main(void) {int n;
printf("円盤は何枚ですか ? "); scanf("%d", &n);hanoi(n, 1, 2, 3);
return 0;}

樹の描画（ 再帰）

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include <stdio.h>#include <math.h>void drawTree(int d, double x, double y, double r, double t) {/* d--- 再帰の 深さ 、(x, y) --- 枝の 根元の 座標 、r--- 枝の 長さ 、t--- 枝の 伸び る向き（ ラジ アン ）*/double r1;
if (d == 0) return; /* 打切り */printf("%6.3f %6.3f %6.3f %6.3f\n",x,y,x + r * cos(t), y + r * sin(t));
drawTree(d-1, x + r * cos(t),y + r * sin(t), 0.5 * r, t);
r1 = 0.5 * r;
drawTree(d-1, x + r1 * cos(t),y + r1 * sin(t), 0.5 * r, t + 3.1416 / 2);
drawTree(d-1, x + r1 * cos(t),y + r1 * sin(t), 0.5 * r, t - 3.1416 / 2);}
int main(void) {drawTree(6, 128, 255, 128,return 0;}-3.1416 / 2);

VIII - 3