授業/C言語基礎/変数の高度な使い方
をテンプレートにして作成
開始行:
これまで、int型、double型、char型という3種類の変数を使っ...
ここでは、変数について、改めてきちんと説明します。
*変数名 [#yaa70780]
変数の名前は、下線 ''_''、英大文字 ''A''-''Z''、英小文字 ...
int, double, char, void, return, if, else, while, for, sw...
習慣的に、C言語では変数名を''小文字''にします。
*基本データ型 [#ma1cbc41]
**char型 [#pa5cba25]
''char型''は、文字を表します。
1バイトの整数で表されており、整数として扱うことができます。
**符号付き整数型 [#w1744804]
これまで使ってきた''int型''は、符号付きの整数を表します。
符号付きであることは省略できるので、これまでは省略してい...
省略せずに書くと、''signed int型''です。
int型の記憶容量(サイズ)を基本として、int型より小さいサ...
符号付き整数型をサイズの小さい順に並べると、次のようにな...
-''signed char''
-''short'' (short int, signed short int)
-''int'' (signed int)
-''long'' (long int, signed long int)
-''long long'' (long long int, signed long long int)
ただし、実際のサイズは実行環境に依存します。
long型とlong long型のサイズが同じという環境もあります。
**符号なし整数型 [#b23138d6]
符号なし整数型は、符号付きであることを表すsignedの代わり...
また、C99から、0または1で論理値を表す''_Bool型''が追加さ...
符号なし整数型をサイズの小さい順に並べると、次のようにな...
-''_Bool''
-''unsigned char''
-''unsigned short'' (unsigned short int)
-''unsigned int''
-''unsigned long'' (unsigned long int)
-''unsigned long long'' (unsigned long long int)
scanf関数を用いて符号なし整数型の変数に代入するときの変換...
**浮動小数点型 [#d9962971]
''double型''は、倍精度の''浮動小数点数''を表します。
浮動小数点数については、計算機アーキテクチャーや数値解析I...
浮動小数点数型には、double型の半分のサイズの''float型''と...
(実数を表す)浮動小数点数型をサイズの小さい順に並べると...
-''float''
-''double''
-''long double''
*符号付き整数型と符号なし整数型の違い [#w797be54]
符号付き整数型では、先頭ビットが符号を表します。
符号なし整数型には、符号を表すビットは存在しません。
このため、符号なし整数型は、符号付き整数型の約2倍の最大値...
たとえば、8ビットの場合、符号なし整数は 0 から 255 まで表...
次のプログラムは、8ビットの大きさの符号付きchar型と符号な...
#geshi(c){{
signed char sc = 255;
unsigned char uc = 255;
printf(">> %d\n", sc);
printf(">> %d\n", uc);
}}
これを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> -1
>> 255
}}
255は、2進数で表すと 11111111 ですが、符号付き整数では負...
2の補数については、計算機アーキテクチャーの授業できちんと...
**演習1 [#he198ca3]
プログラム1を作成し、実行結果を確認せよ。
*定数 [#jd785038]
変数がプログラム実行中に変化する可能性がある数であるのに...
**整定数 [#lc2a5f96]
整定数には、10進数、8進数、16進数があります。
''10進数''は、''0 以外の数字で始まり''、''0 から 9 までの...
たとえば、10 は、10進数の 10 を表します。
整数をprintf関数を用いて10進数表記で出力するときの変換指...
''8進数''は、''0 で始まり''、''0 から 7 までの数字''だけ...
たとえば、010 は、8進数の 10 を表し、10進数にすると 8 で...
符号なし整数をprintf関数を用いて8進数表記で出力するときの...
''16進数''は、''0x で始まり''、''0 から 9 までの数字と a ...
たとえば、0x10は、16進数の 10 を表し、10進数にすると 16 ...
符号なし整数をprintf関数を用いて16進数表記で出力するとき...
#geshi(c){{
printf("%d\n", 10);
printf("%d\n", 010);
printf("%d\n", 0x10);
printf("%04x\n", 16);
}}
#geshi(sh){{
luna% a.out
10
8
16
0010
}}
**浮動小数点定数 [#ha10de47]
浮動小数点定数には、10進浮動小数点定数、指数表現10進浮動...
''10進浮動小数点定数''は、0 以外の数字で始まり、0 から 9 ...
たとえば、1.01 は、10進数の 1.01 を表します。
''指数表現10進浮動小数点定数''は、10進浮動小数点数の後に ...
たとえば、1.01e2 は、[math]1.01 \times 10^2[/math]で 101...
printf関数で指数表現10進浮動小数点数の形を出力するときの...
''指数表現16進浮動小数点定数''は、0x で始まり、0 から 9 ...
基数は2なので、指数部は2の何乗倍であるかを表します。
たとえば、0x1.01p12 は、16進数 1.01 の2の12乗倍を表し、2...
printf関数で指数表現16進浮動小数点数の形を出力するときの...
#geshi(c){{
printf("%f\n", 1.01);
printf("%f\n", 1.01e2);
printf("%f\n", 1.01e-2);
printf("%f\n", 0x1.01p12);
}}
#geshi(sh){{
1.010000
101.000000
0.010100
4112.000000
}}
**文字定数 [#h316433f]
文字定数は、''シングル・クォーテーション''で囲まれた文字...
英大文字 ''A''-''Z''、英小文字 ''a''-''z''、数字 ''0''-''...
**値を変更できない変数 [#bf179f25]
変数を宣言するときに、型名の前に ''const'' を付けて宣言す...
#geshi(c){{
const 型 定数名 = { 初期化子 };
}}
型が配列でないときは、初期化子を囲む波括弧 { } は省略でき...
習慣的に、C言語では定数名を''大文字''にします。
*小さな数、大きな数の入出力 [#o2d05412]
printf関数で値を出力するとき、または、scanf関数で値をキー...
符号付き整数はint型の ''%d''、符号なし整数はunsigned int...
ただし、double型はprintf関数では %f、とscanf関数では %lf ...
**符号付き整数 [#n606745d]
|変換指定子|型|h
|%hhd|char|
|%hd|short|
|%d|int|
|%ld|long|
|%lld|long long|
**符号なし整数 [#ee386420]
|変換指定子|型|h
|%hhu|unsigned char|
|%hu|unsigned short|
|%u|unsigned int|
|%lu|unsigned long|
|%llu|unsigned long long|
**浮動小数点数 [#p97bccac]
|変換指定子|型|h
|%f|float, double (printf)|
|%lf|double (scanf)|
|%Lf|long double|
*変数の有効範囲(スコープ) [#ld62e59b]
変数は、宣言する場所によってその有効範囲が異なります。
変数の有効範囲を''スコープ''といいます。
同じスコープを持つ同じ名前の変数を宣言することはできませ...
スコープが異なれば同じ名前の変数を宣言することができます。
スコープが異なる同じ名前の変数が宣言されているとき、その...
**ブロック有効範囲 [#z411c33f]
波括弧 ''{ }'' で囲まれた''ブロック''内で宣言された変数は...
このような変数を、''局所変数''、''ローカル変数''といいま...
次のプログラムは、同じ名前で有効範囲の異なるローカル変数...
#geshi(c){{
int main(void) {
int i = 0;
printf(">> %d\n", i);
{
int i = 1;
printf("## %d\n", i);
}
printf(">> %d\n", i);
return 0;
}
}}
このプログラムに登場する変数のスコープを図で表すと、次の...
#ref(./block_scope.png,40%)
このプログラムを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 0
## 1
>> 0
}}
C99では、for文の丸括弧 ( ) の中でも変数を宣言できるように...
#geshi(c){{
for (int i = 0; i < 3; i++) {
printf(">> %d\n", i);
}
}}
ただし、gccでこのプログラムをコンパルするときには、stdオ...
#geshi(sh){{
luna% gcc -std=c99 hello.c
luna% a.out
>> 0
>> 1
>> 2
}}
**演習2 [#q8585d42]
プログラム2とプログラム3を作成し、実行結果を確認せよ。
**ファイル有効範囲 [#v583ef90]
関数の外で変数を宣言すると、''ファイル有効範囲''の変数と...
このような変数を、''大域変数''、''グローバル変数''といい...
次のプログラムは、同じ名前のグローバル変数とローカル変数...
#geshi(c){{
#include <stdio.h>
int i = 0;
void prt(void) {
printf("## %d\n", i);
}
void inc(void) {
i++;
}
int main(void) {
int i = -1;
printf(">> %d\n", i);
prt();
inc();
prt();
printf(">> %d\n", i);
return 0;
}
}}
このプログラムに登場する変数のスコープを図で表すと、次の...
#ref(./file_scope.png,40%)
有効範囲が赤色で示されているものがファイル有効範囲の変数...
このプログラムを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> -1
## 0
## 1
>> -1
}}
**演習3 [#ob503147]
プログラム4を作成し、実行結果を確認せよ。
*変数の有効期間(記憶域クラス) [#u1ae71fa]
宣言された変数をコンピューター内のどこに記憶するか(''記...
#geshi(c){{
記憶域クラス指定子 型 変数名;
}}
変数が記憶される場所としては、メモリー内の''静的領域''、'...
これらの違いについては、計算機アーキテクチャーの授業でき...
**静的記憶域期間 [#pf7ad444]
ブロック有効範囲の変数に記憶域クラス指定子として ''static...
初期化は、プログラムの実行開始時に一度しか行われません。
初期化を省略すると、0 に初期化されます。
このような変数を、''静的変数''といいます。
次のプログラムは、int型の変数 i を静的変数として宣言して...
#geshi(c){{
void cnt(void) {
static int i = 0;
i++;
printf(">> %d\n", i);
}
int main(void) {
cnt();
cnt();
cnt();
return 0;
}
}}
変数 i は、プログラムの実行開始時にメモリー内の静的領域に...
初期化は一度しか行われません。
したがって、このプログラムを実行すると、次のようになりま...
#geshi(sh){{
luna%
>> 1
>> 2
>> 3
}}
ファイル有効範囲の変数は、静的領域に割り当てられ、静的記...
**演習4 [#te1abc06]
プログラム5を作成し、実行結果を確認せよ。
**自動記憶域期間 [#t4e53d48]
ブロック有効範囲の変数に記憶域クラス指定子を指定しないか...
このような変数を、''自動変数''といいます。
次のプログラムは、プログラム5の static を auto に変えただ...
#geshi(c){{
void cnt(void) {
auto int i = 0;
i++;
printf(">> %d\n", i);
}
int main(void) {
cnt();
cnt();
cnt();
return 0;
}
}}
変数 i は、cnt関数の実行開始時にメモリー内のスタック領域...
初期化は記憶域が割り当てられるごとに毎回行われます。
したがって、このプログラムを実行すると、次のようになりま...
#geshi(sh){{
luna% a.out
>> 1
>> 1
>> 1
}}
**演習5 [#bd957d50]
プログラム5をプログラム6に変更し、実行結果を確認せよ。
*C言語の規格(おまけ) [#c701d64c]
C言語は、1989年にアメリカで最初の標準規格が作られました。
この規格は、''ANSI-C''や''C89''と呼ばれています。
これを基にして、1990年に''C90''と呼ばれる標準規格が世界標...
その後、1999年と2011年に規格が改定され、それぞれ、''C99''...
(現在のgccには、C99とC11のほとんどの機能が実装されていま...
C言語の教科書、参考書を読むときには、どの規格に基づいて書...
gccでは、stdオプションを指定すると、指定した規格の文法に...
#geshi(sh){{
luna% gcc -std=c99 filename.c
}}
*列挙型(おまけ) [#p3e9cc57]
int型の値で、かつ、取りうる値が決まっているとき、列挙型と...
列挙型は、次のように宣言します。
#geshi(c){{
enum 列挙型名 { 列挙子の並び };
}}
列挙子には、先頭から順に 0, 1, 2 と値が割り当てられますが...
また、同じ値を複数の列挙子に割り当てることもできます。
次のプログラムは、enum deptという名前の列挙型を宣言し、変...
こうすることによって、変数 d にはenum dept型の列挙子の並...
#geshi(c){{
enum dept {
EM = 1, EE, ED, EC, EA, EK, EP, ER,
LB = 51, LK, LP, LS, LC, LE
};
enum dept d;
d = EP; // 情報工学科
printf(">> %02d\n", d);
d = LC; // 臨床工学科
printf(">> %02d\n", d);
}}
これを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 07
>> 55
}}
*定数の接尾語(おまけ) [#q1059ae6]
定数の後ろに''接尾語''をつけて定数の型を明確にすることが...
**整定数の接尾語 [#te70157b]
接尾語をつけないとint型とみなされます。
接尾語 ''u'' は、unsigned int型であることを表します。
接尾語 ''l'' は、long型(long int型)であることを表します。
接尾語 ''ll'' は、long long型(long long int型)であるこ...
**浮動小数点定数の接尾語 [#w69a5729]
接尾語をつけないとdouble型とみなされます。
接尾語 ''f'' は、float型であることを表します。
接尾語 ''l'' は、long double型であることを表します。
次のプログラムは、2進数にすると循環小数になるため必ず誤差...
#geshi(c){{
printf(">> %.30f\n", 0.1);
printf(">> %.30f\n", 0.1f);
}}
これを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 0.100000000000000005551115123126
>> 0.100000001490116119384765625000
}}
*複素数型(おまけ) [#e35397de]
C99から、複素数を表す型(型名の後ろに''_Complex''が付く)...
複素数を表す浮動小数点数型をサイズの小さい順に並べると、...
-''float _Complex''
-''double _Complex''
-''long double _Complex''
*まとめ [#gbf11f84]
''変数名''は、決めらたルールに従って付けなければなりませ...
変数の''基本データ型''には、''char型''、''符号付き整数型'...
符号付き整数型にはサイズが小さい順に''char型''、''short型...
浮動小数点数型にはサイズが小さい順に''float型''、''double...
''定数''は、プログラム実行中に値が変わることのないもので...
10進数の整定数は ''0'' 以外の数字で始め、8進数は ''0'' で...
データ型の前に ''const'' をつけると、定数として宣言できま...
入出力時の変換指定子は、符号なし整数型は ''%u''、符号付き...
ただし、double型は出力の時は ''%f''、入力の時は ''%lf'' ...
変数には有効範囲があり、これを変数の''スコープ''といいま...
ブロック内で宣言された変数を''局所変数''(''ローカル変数'...
関数の外で宣言された変数を''大域変数''(''グローバル変数'...
データ型の前に ''static'' をつけると、''静的変数''となり...
ブロック有効範囲の変数宣言のデータ型の前に ''auto'' をつ...
*練習問題 [#p0bbabf3]
練習問題は[[こちら>授業/C言語基礎/変数の高度な使い方/練習...
終了行:
これまで、int型、double型、char型という3種類の変数を使っ...
ここでは、変数について、改めてきちんと説明します。
*変数名 [#yaa70780]
変数の名前は、下線 ''_''、英大文字 ''A''-''Z''、英小文字 ...
int, double, char, void, return, if, else, while, for, sw...
習慣的に、C言語では変数名を''小文字''にします。
*基本データ型 [#ma1cbc41]
**char型 [#pa5cba25]
''char型''は、文字を表します。
1バイトの整数で表されており、整数として扱うことができます。
**符号付き整数型 [#w1744804]
これまで使ってきた''int型''は、符号付きの整数を表します。
符号付きであることは省略できるので、これまでは省略してい...
省略せずに書くと、''signed int型''です。
int型の記憶容量(サイズ)を基本として、int型より小さいサ...
符号付き整数型をサイズの小さい順に並べると、次のようにな...
-''signed char''
-''short'' (short int, signed short int)
-''int'' (signed int)
-''long'' (long int, signed long int)
-''long long'' (long long int, signed long long int)
ただし、実際のサイズは実行環境に依存します。
long型とlong long型のサイズが同じという環境もあります。
**符号なし整数型 [#b23138d6]
符号なし整数型は、符号付きであることを表すsignedの代わり...
また、C99から、0または1で論理値を表す''_Bool型''が追加さ...
符号なし整数型をサイズの小さい順に並べると、次のようにな...
-''_Bool''
-''unsigned char''
-''unsigned short'' (unsigned short int)
-''unsigned int''
-''unsigned long'' (unsigned long int)
-''unsigned long long'' (unsigned long long int)
scanf関数を用いて符号なし整数型の変数に代入するときの変換...
**浮動小数点型 [#d9962971]
''double型''は、倍精度の''浮動小数点数''を表します。
浮動小数点数については、計算機アーキテクチャーや数値解析I...
浮動小数点数型には、double型の半分のサイズの''float型''と...
(実数を表す)浮動小数点数型をサイズの小さい順に並べると...
-''float''
-''double''
-''long double''
*符号付き整数型と符号なし整数型の違い [#w797be54]
符号付き整数型では、先頭ビットが符号を表します。
符号なし整数型には、符号を表すビットは存在しません。
このため、符号なし整数型は、符号付き整数型の約2倍の最大値...
たとえば、8ビットの場合、符号なし整数は 0 から 255 まで表...
次のプログラムは、8ビットの大きさの符号付きchar型と符号な...
#geshi(c){{
signed char sc = 255;
unsigned char uc = 255;
printf(">> %d\n", sc);
printf(">> %d\n", uc);
}}
これを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> -1
>> 255
}}
255は、2進数で表すと 11111111 ですが、符号付き整数では負...
2の補数については、計算機アーキテクチャーの授業できちんと...
**演習1 [#he198ca3]
プログラム1を作成し、実行結果を確認せよ。
*定数 [#jd785038]
変数がプログラム実行中に変化する可能性がある数であるのに...
**整定数 [#lc2a5f96]
整定数には、10進数、8進数、16進数があります。
''10進数''は、''0 以外の数字で始まり''、''0 から 9 までの...
たとえば、10 は、10進数の 10 を表します。
整数をprintf関数を用いて10進数表記で出力するときの変換指...
''8進数''は、''0 で始まり''、''0 から 7 までの数字''だけ...
たとえば、010 は、8進数の 10 を表し、10進数にすると 8 で...
符号なし整数をprintf関数を用いて8進数表記で出力するときの...
''16進数''は、''0x で始まり''、''0 から 9 までの数字と a ...
たとえば、0x10は、16進数の 10 を表し、10進数にすると 16 ...
符号なし整数をprintf関数を用いて16進数表記で出力するとき...
#geshi(c){{
printf("%d\n", 10);
printf("%d\n", 010);
printf("%d\n", 0x10);
printf("%04x\n", 16);
}}
#geshi(sh){{
luna% a.out
10
8
16
0010
}}
**浮動小数点定数 [#ha10de47]
浮動小数点定数には、10進浮動小数点定数、指数表現10進浮動...
''10進浮動小数点定数''は、0 以外の数字で始まり、0 から 9 ...
たとえば、1.01 は、10進数の 1.01 を表します。
''指数表現10進浮動小数点定数''は、10進浮動小数点数の後に ...
たとえば、1.01e2 は、[math]1.01 \times 10^2[/math]で 101...
printf関数で指数表現10進浮動小数点数の形を出力するときの...
''指数表現16進浮動小数点定数''は、0x で始まり、0 から 9 ...
基数は2なので、指数部は2の何乗倍であるかを表します。
たとえば、0x1.01p12 は、16進数 1.01 の2の12乗倍を表し、2...
printf関数で指数表現16進浮動小数点数の形を出力するときの...
#geshi(c){{
printf("%f\n", 1.01);
printf("%f\n", 1.01e2);
printf("%f\n", 1.01e-2);
printf("%f\n", 0x1.01p12);
}}
#geshi(sh){{
1.010000
101.000000
0.010100
4112.000000
}}
**文字定数 [#h316433f]
文字定数は、''シングル・クォーテーション''で囲まれた文字...
英大文字 ''A''-''Z''、英小文字 ''a''-''z''、数字 ''0''-''...
**値を変更できない変数 [#bf179f25]
変数を宣言するときに、型名の前に ''const'' を付けて宣言す...
#geshi(c){{
const 型 定数名 = { 初期化子 };
}}
型が配列でないときは、初期化子を囲む波括弧 { } は省略でき...
習慣的に、C言語では定数名を''大文字''にします。
*小さな数、大きな数の入出力 [#o2d05412]
printf関数で値を出力するとき、または、scanf関数で値をキー...
符号付き整数はint型の ''%d''、符号なし整数はunsigned int...
ただし、double型はprintf関数では %f、とscanf関数では %lf ...
**符号付き整数 [#n606745d]
|変換指定子|型|h
|%hhd|char|
|%hd|short|
|%d|int|
|%ld|long|
|%lld|long long|
**符号なし整数 [#ee386420]
|変換指定子|型|h
|%hhu|unsigned char|
|%hu|unsigned short|
|%u|unsigned int|
|%lu|unsigned long|
|%llu|unsigned long long|
**浮動小数点数 [#p97bccac]
|変換指定子|型|h
|%f|float, double (printf)|
|%lf|double (scanf)|
|%Lf|long double|
*変数の有効範囲(スコープ) [#ld62e59b]
変数は、宣言する場所によってその有効範囲が異なります。
変数の有効範囲を''スコープ''といいます。
同じスコープを持つ同じ名前の変数を宣言することはできませ...
スコープが異なれば同じ名前の変数を宣言することができます。
スコープが異なる同じ名前の変数が宣言されているとき、その...
**ブロック有効範囲 [#z411c33f]
波括弧 ''{ }'' で囲まれた''ブロック''内で宣言された変数は...
このような変数を、''局所変数''、''ローカル変数''といいま...
次のプログラムは、同じ名前で有効範囲の異なるローカル変数...
#geshi(c){{
int main(void) {
int i = 0;
printf(">> %d\n", i);
{
int i = 1;
printf("## %d\n", i);
}
printf(">> %d\n", i);
return 0;
}
}}
このプログラムに登場する変数のスコープを図で表すと、次の...
#ref(./block_scope.png,40%)
このプログラムを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 0
## 1
>> 0
}}
C99では、for文の丸括弧 ( ) の中でも変数を宣言できるように...
#geshi(c){{
for (int i = 0; i < 3; i++) {
printf(">> %d\n", i);
}
}}
ただし、gccでこのプログラムをコンパルするときには、stdオ...
#geshi(sh){{
luna% gcc -std=c99 hello.c
luna% a.out
>> 0
>> 1
>> 2
}}
**演習2 [#q8585d42]
プログラム2とプログラム3を作成し、実行結果を確認せよ。
**ファイル有効範囲 [#v583ef90]
関数の外で変数を宣言すると、''ファイル有効範囲''の変数と...
このような変数を、''大域変数''、''グローバル変数''といい...
次のプログラムは、同じ名前のグローバル変数とローカル変数...
#geshi(c){{
#include <stdio.h>
int i = 0;
void prt(void) {
printf("## %d\n", i);
}
void inc(void) {
i++;
}
int main(void) {
int i = -1;
printf(">> %d\n", i);
prt();
inc();
prt();
printf(">> %d\n", i);
return 0;
}
}}
このプログラムに登場する変数のスコープを図で表すと、次の...
#ref(./file_scope.png,40%)
有効範囲が赤色で示されているものがファイル有効範囲の変数...
このプログラムを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> -1
## 0
## 1
>> -1
}}
**演習3 [#ob503147]
プログラム4を作成し、実行結果を確認せよ。
*変数の有効期間(記憶域クラス) [#u1ae71fa]
宣言された変数をコンピューター内のどこに記憶するか(''記...
#geshi(c){{
記憶域クラス指定子 型 変数名;
}}
変数が記憶される場所としては、メモリー内の''静的領域''、'...
これらの違いについては、計算機アーキテクチャーの授業でき...
**静的記憶域期間 [#pf7ad444]
ブロック有効範囲の変数に記憶域クラス指定子として ''static...
初期化は、プログラムの実行開始時に一度しか行われません。
初期化を省略すると、0 に初期化されます。
このような変数を、''静的変数''といいます。
次のプログラムは、int型の変数 i を静的変数として宣言して...
#geshi(c){{
void cnt(void) {
static int i = 0;
i++;
printf(">> %d\n", i);
}
int main(void) {
cnt();
cnt();
cnt();
return 0;
}
}}
変数 i は、プログラムの実行開始時にメモリー内の静的領域に...
初期化は一度しか行われません。
したがって、このプログラムを実行すると、次のようになりま...
#geshi(sh){{
luna%
>> 1
>> 2
>> 3
}}
ファイル有効範囲の変数は、静的領域に割り当てられ、静的記...
**演習4 [#te1abc06]
プログラム5を作成し、実行結果を確認せよ。
**自動記憶域期間 [#t4e53d48]
ブロック有効範囲の変数に記憶域クラス指定子を指定しないか...
このような変数を、''自動変数''といいます。
次のプログラムは、プログラム5の static を auto に変えただ...
#geshi(c){{
void cnt(void) {
auto int i = 0;
i++;
printf(">> %d\n", i);
}
int main(void) {
cnt();
cnt();
cnt();
return 0;
}
}}
変数 i は、cnt関数の実行開始時にメモリー内のスタック領域...
初期化は記憶域が割り当てられるごとに毎回行われます。
したがって、このプログラムを実行すると、次のようになりま...
#geshi(sh){{
luna% a.out
>> 1
>> 1
>> 1
}}
**演習5 [#bd957d50]
プログラム5をプログラム6に変更し、実行結果を確認せよ。
*C言語の規格(おまけ) [#c701d64c]
C言語は、1989年にアメリカで最初の標準規格が作られました。
この規格は、''ANSI-C''や''C89''と呼ばれています。
これを基にして、1990年に''C90''と呼ばれる標準規格が世界標...
その後、1999年と2011年に規格が改定され、それぞれ、''C99''...
(現在のgccには、C99とC11のほとんどの機能が実装されていま...
C言語の教科書、参考書を読むときには、どの規格に基づいて書...
gccでは、stdオプションを指定すると、指定した規格の文法に...
#geshi(sh){{
luna% gcc -std=c99 filename.c
}}
*列挙型(おまけ) [#p3e9cc57]
int型の値で、かつ、取りうる値が決まっているとき、列挙型と...
列挙型は、次のように宣言します。
#geshi(c){{
enum 列挙型名 { 列挙子の並び };
}}
列挙子には、先頭から順に 0, 1, 2 と値が割り当てられますが...
また、同じ値を複数の列挙子に割り当てることもできます。
次のプログラムは、enum deptという名前の列挙型を宣言し、変...
こうすることによって、変数 d にはenum dept型の列挙子の並...
#geshi(c){{
enum dept {
EM = 1, EE, ED, EC, EA, EK, EP, ER,
LB = 51, LK, LP, LS, LC, LE
};
enum dept d;
d = EP; // 情報工学科
printf(">> %02d\n", d);
d = LC; // 臨床工学科
printf(">> %02d\n", d);
}}
これを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 07
>> 55
}}
*定数の接尾語(おまけ) [#q1059ae6]
定数の後ろに''接尾語''をつけて定数の型を明確にすることが...
**整定数の接尾語 [#te70157b]
接尾語をつけないとint型とみなされます。
接尾語 ''u'' は、unsigned int型であることを表します。
接尾語 ''l'' は、long型(long int型)であることを表します。
接尾語 ''ll'' は、long long型(long long int型)であるこ...
**浮動小数点定数の接尾語 [#w69a5729]
接尾語をつけないとdouble型とみなされます。
接尾語 ''f'' は、float型であることを表します。
接尾語 ''l'' は、long double型であることを表します。
次のプログラムは、2進数にすると循環小数になるため必ず誤差...
#geshi(c){{
printf(">> %.30f\n", 0.1);
printf(">> %.30f\n", 0.1f);
}}
これを実行すると、次のようになります。
#geshi(sh){{
luna% a.out
>> 0.100000000000000005551115123126
>> 0.100000001490116119384765625000
}}
*複素数型(おまけ) [#e35397de]
C99から、複素数を表す型(型名の後ろに''_Complex''が付く)...
複素数を表す浮動小数点数型をサイズの小さい順に並べると、...
-''float _Complex''
-''double _Complex''
-''long double _Complex''
*まとめ [#gbf11f84]
''変数名''は、決めらたルールに従って付けなければなりませ...
変数の''基本データ型''には、''char型''、''符号付き整数型'...
符号付き整数型にはサイズが小さい順に''char型''、''short型...
浮動小数点数型にはサイズが小さい順に''float型''、''double...
''定数''は、プログラム実行中に値が変わることのないもので...
10進数の整定数は ''0'' 以外の数字で始め、8進数は ''0'' で...
データ型の前に ''const'' をつけると、定数として宣言できま...
入出力時の変換指定子は、符号なし整数型は ''%u''、符号付き...
ただし、double型は出力の時は ''%f''、入力の時は ''%lf'' ...
変数には有効範囲があり、これを変数の''スコープ''といいま...
ブロック内で宣言された変数を''局所変数''(''ローカル変数'...
関数の外で宣言された変数を''大域変数''(''グローバル変数'...
データ型の前に ''static'' をつけると、''静的変数''となり...
ブロック有効範囲の変数宣言のデータ型の前に ''auto'' をつ...
*練習問題 [#p0bbabf3]
練習問題は[[こちら>授業/C言語基礎/変数の高度な使い方/練習...
ページ名: