情報基礎演習II − 第4回


1.実数


C言語では、 これまで使ってきた整数の他に、 実数を扱うことができます。 実数は小数部を持つ数で、 コンピュータ上では 浮動小数点数 (floating-point number) と呼ばれる形式で表現されます。


実数型の定数

小数点を含む定数は、実数型の定数になります。 0.5 や 1.0 のような場合は、0 を省略して .5 や 1. と表すこともできます。

1.0  3.1415926535  1000.2  0.5  .3
e や E を使って指数表現した場合も実数を表す定数になります。 1e23 は 1×1023、0.25e-31 は 0.25×10-31を表します。
1.45e12  -3.77e45  12e-34

実数型の変数

実数型の変数の宣言には float または double を用います。
float sum;              /* 合計 */
float は、 に続く名前が実数を格納する変数であることを宣言します。 この例では sum は float型変数と呼ばれます。

float 型の変数の有効数字は約7桁です。 より精度の高い計算を行う必要がある場合には、 double(倍精度)型を使います。 double 型の有効数字は約16桁です。

double accurate;
さらに高精度な計算を行うために、 long double 型と呼ばれる データ型を用意している処理系もあります。


実数型データの表示

printf で float 型のデータを表示する変換指定子は %f、 double 型の場合には %lf です。 また long double 型の場合は %Lf を使います。
データ型変換指定子
float%f
double%lf
long double%Lf
printf("1割る3は%f\n", 1.0 / 3.0);
本当のことを言うと実数型の定数のデータ型は double なので、 ここでは %lf を使用すべきなのですが、 float 型のデータは普通 printf には double に変換されてから渡されるので (つまり、printf では %f と %lf は同じ)、 %f でも正常に表示できます。

■課題12■


実数型と整数型の変換

整数と実数の演算は、整数を実数に変換して実行されます。
1.0 / 3
この例では整数の定数 3 を実数 (3.0) に直して計算します。
1 / 3
これは整数同士の演算なので、切り捨てられて結果は 0 になります。

実数型の変数への整数の代入は、 整数を実数に直して行われます。

int i;
float x;
i = 10;
x = i;
x には 10.0 が入ります。

整数型の変数への実数の代入は、 実数の小数部を切り捨てた後、 それを整数に直して行われます。

int i;
i = 7.0 / 3.0;
i には 2 が入ります。

■課題13■


2.文字


C言語は文字もデータとして扱うことができます。 文字型の変数の宣言には char を用います。
char one;               /* 1文字 */
char は、後ろに続く名前が文字を格納する変数であることを宣言します。 この場合 one は char 型変数と呼ばれます。

文字の定数は1文字を '…' ではさんだもので、「文字リテラル」と呼ばれます。 なお文字リテラルのデータ型は int です。

'A'  'a'  '0'  ' '  ','
これらは左から大文字の A、小文字の a、数字の 0、空白、コンマを示します。 '…' の間に2文字以上をはさむことはできません。 日本語用の文字は2文字とみなされるので、 文字型の定数には使えません。 "…" ではさんだものは文字型の定数ではありません (文字列定数と呼び、別のものです)。

改行 (\n) のような特殊文字は、 1文字として扱われます。

'\b' バックスペース(カーソルを1文字左へ移動)
'\f' フォームフィード(改ページ)
'\n' 改行(次の行に移動)
'\r' 復帰(現在の行の先頭に移動)
'\t' タブ(次のタブストップに移動)
' や " や \ という文字自体を表したいときは、 いずれも \ を左に置いて、 その文字が持つ特殊な意味を取り消す(エスケープする)必要があります。
'\''  '\"'  '\\'
printf で文字を表示するには、変換指定子として %c を使います。
printf("これは %c という文字です", 'A');

文字コード

コンピュータの内部では、 文字は文字コード(文字の番号)を表す数値で表現されています。 例えば 'A' の文字コードは十進数で 65 です (ASCII コードの場合)。 C言語では文字型のデータを文字コードを表す整数値として取り扱うため、 実際には整数型のデータとかわりはありません。 すなわち char 型は「文字コードの範囲」の整数だけを表すことのできる 整数型だといえます。
printf("%d\n", 'A');
'A' の文字コード 65 が出力されます。
printf("%c\n", 65);
'A' が出力されます。
printf("%c\n", 'A' + 1);
'B' が出力されます。

文字定数において、 \ の後に文字コードを表す3桁以下の8進数を置けば、 前述の方法で表すことのできない特殊な文字を表現することができます。

'\012'  '\101'  '\0'
これらは左から '\n'、'A'、文字コード 0 の文字を表します。 文字コード 0 の文字は整数の 0 と等価です。

■課題14■


3.その他のデータ型


char 型は実際には int 同様整数を表すデータ型ですが、 整数を扱うデータ型には他にもいくつかのバリエーションがあります。 これを精度で分類すると、次のようになります。

データ型説明値の範囲
char文字型-128〜127
short短精度整数型-32768〜32767
long長精度整数型-2147483648〜2147483647
さらに、これらに対して符号付き/符号なしを指定することができます。
修飾子説明
signed符号付き整数
unsigned符号なし整数
全部を列挙すると、 この表のようになります。

各データ型の printf における変換指定子は、 それぞれ次のようになります。

データ型変換指定子
short%hd
unsigned short%hu
int%d
unsigned int%u
long%ld
unsigned long%lu
なお char/unsigned char は、 それぞれ int/unsigned int に変換して printf の引数に渡されるので、 これを整数として(文字ではなく)出力する場合は、 それそれ %d/%u を使います。

■課題15■

■課題16■