このブログ記事では、C言語の基本的な概念を紹介します。

変数
さっそくコーディングに入っていきましょう。C言語で変数に値を代入したいとき、次のように行うことができます:
type variableName; // 宣言
variableName = value // 初期化
// 例
int a;
a = 123;
char b;
b = 'b';
C言語では、変数に使用する型を宣言し、その変数にどれだけのメモリを割り当てるかを決定する必要があります。宣言と初期化を別々に書く必要はありません。
int c = 1;
変数名はできるだけ説明的なものにしましょう。printf
を使用して変数に格納されている値を表示したいとき、データ型に対応するフォーマット指定子を使用します。
// intの場合
printf("C: %d", c);
%
記号はプレースホルダーで、d
はint
用のフォーマット指定子です。
データ型
ここで、C言語に存在するデータ型を見てみましょう。
型名 | 使用例 | フォーマット指定子 | 備考 |
---|---|---|---|
文字 | char a = 'A'; または signed char a = 1; | %c または %d | 1バイトの整数を格納できます(-128から127まで)。整数がchar に格納されている時、%c を使用すると、対応するASCII文字が表示されます。 |
文字の配列 | char a[] = "Hey"; | %s | 配列のサイズを[]内に指定できます。(例:char a[10] = "Hey";) |
短整数 | short int a = 1; または short a = 1; | %d | 2バイトのメモリを使用します(-32,768から32,767まで)。 |
整数 | int a = 1; または long int a = 1; | %d | 4バイトのメモリを使用します(-2,147,483,648から2,147,483,647まで)。unsigned の場合、フォーマット指定子は%u になります。 |
長整数 | long long int a = 1; | %lld | 8バイトのメモリを使用します(-9京から9京まで)。unsigned の場合、フォーマット指定子は%llu になります。 |
浮動小数点数 | float a = 3.14; | %f | 4バイトのメモリを使用します(32ビットの精度、または6〜7桁の精度)。 |
倍精度浮動小数点数 | double a = 3.1415926535; | %lf | 8バイトのメモリを使用します(64ビットの精度、または15〜16桁の精度)。float の2倍のメモリを使用します。 |
真偽値 | bool a = true; | %d | #include <stdbool.h> を使用する必要があります。false は0に、true は1に対応します。 |
上記に加えて、正の数のみを格納するunsigned
構文があります。例えば、unsigned char
は-128から127までではなく0から255までの値を格納します。
unsigned
はshort
、int
、long
、long long int
の前に付けることができ、それぞれ対応するフォーマット指定子があります。
格納できる値よりも大きな数値を格納すると、オーバーフローして格納できる最小の数に戻ります。したがって、
各データ型がどれだけのメモリと値の範囲を格納できるかを把握しておく必要があります。
フォーマット指定子
フォーマット指定子は、数字の表示方法について多くのことを指定できます。
double pi = 3.1415926535;
// 小数点を指定 %.2lf
printf("Pi: %.2lf\n", pi); // => Pi: 3.14
// フィールド幅を指定 %8.2lf
printf("Pi: %8.2lf\n", pi); // => Pi: 3.14
printf("Pi: %8.3lf\n", pi); // => Pi: 3.141
printf("Pi: %8.4lf\n", pi); // => Pi: 3.1415
// 左寄せ %-
printf("Pi: %-8.2lf\n", pi); // => Pi: 3.14
printf("Pi: %-8.3lf\n", pi); // => Pi: 3.141
printf("Pi: %-8.4lf\n", pi); // => Pi: 3.1415
上記の例から分かるように、小数点、フィールド幅、および配置を指定できます。
定数 (const
vs #define
)
実行中に変更できない値(例えば、)を使用したい場合、次のように行うことができます:
const float PI = 3.14;
const
で初期化した後にPI
を上書きしようとすると、エラーが発生します。定数を命名する時には
大文字を使うようにしましょう。実は、同じことを達成するための代替手段として #define
があります。
#define PI 3.14
違いは、#define
はコンパイル前にコード内のすべての PI
を 3.14
に置き換えるのに対し、const
はコンパイル中に変数のように扱われることです。このため、#define
は型安全ではなく、意図しない場所で
PI
が 3.14
に置き換えられると、予期しない動作を引き起こす可能性があります。そのため、ほとんどの場合、
const
を使用することが推奨されます。
算術演算子
C言語では、次の算術演算子が利用できます。
// + 加算
// - 減算
// * 乗算
// / 除算
// % 剰余
// ++ インクリメント
// -- デクリメント
int x = 5;
int y = 2;
int z = x + y; // z=7
int z = x - y; // z=3
int z = x * y; // z=10
int z = x / y; // z=2
x++; // x=6
y--; // y=1
ここで奇妙なことは、int z = x / y;
の場合にzが2になることです。z
の型をfloat
に変更して、より多くの小数点を表示してみましょう。
float z = x / y // z=2.000000
それでも2なのはなぜでしょうか?これは整数除算が小数を切り捨てるためです。x
またはy
のどちらかをfloat
に変換する必要があります。
float z = x / (float) y // z=2.500000
また計算を実行して変数の値を更新したい場合、x = x * 2
やx = x - 1
の代わりに、次のようにすることができます。
int x = 5;
x += 2; // x=7
x -= 2; // x=5
x *= 2; // x=10
x /= 2; // x=5
x %= 3; // x=2
数学関数
ここでは、C言語で使用できる便利な定義済みの数学関数をいくつか紹介します。
#include <math.h>
// 平方根
double a = sqrt(9); // a=3.0000
// 指数
double b = pow(2, 4); // b=2^4=16
// 四捨五入
int c = round(3.14); // c=3
// 天井
int d = ceil(3.14); // d=4
// 床
int e = floor(3.99); // e=3
// 絶対値
double f = fabs(-10); // f=10
// 対数
double g = log(3); // g=1.1
// 三角関数(ラジアン単位)
double h = sin(1); // h=0.84
double i = cos(1); // i=0.54
double j = tan(1); // j=1.56
ユーザー入力
最後に、C言語でユーザー入力を受け取る方法について説明します。次のようにしてユーザー入力を取得できます。
// ユーザー入力を格納する変数を宣言
char name[25];
printf("Your Name: ");
scanf("%25s", name); // ユーザー入力
printf("Hello, %s!", name);
int age;
printf("Your Age: ");
scanf("%d", &age); // ユーザー入力
printf("You are %d years old!", age);
これを実行すると、コードにユーザー入力を組み込むことができます。ただし、名前に「Micheal Jordan」のようにスペースを入れると、
「Hello, Micheal!」とだけ表示されてしまいます。これは、scanf
が空白文字までしか読み取らないためです。
ユーザー入力に空白文字を含めるには、代わりにfgets
を使用します。
#include <string.h> // string.hをインクルードする必要があります
char name[25];
printf("Your Name: ");
fgets(name, 25, stdin); // 空白を含むユーザー入力
name[strlen(name)-1] = '\0';
printf("Hello, %s!", name);
上記のコードを実行すると、「Micheal Jordan」と入力した場合、「Hello, Micheal Jordan!」と表示されます。(詳細については、今は気にしないでください。)
クイズ
この記事では、学習した内容を確認するためのクイズを設けます。記事のメイン部分を読んだ後に、ぜひ自分で問題を解いてみることを強くお勧めします。各問題をクリックすると答えが表示されます。
リソース
- Bro Code. 2022. C variables 💰. YouTube.
- Bro Code. 2022. C data types 📊. YouTube.
- Bro Code. 2022. C format specifiers 🔧. YouTube.
- Bro Code. 2022. C constants 🚫. YouTube.
- Bro Code. 2022. C arithmetic operators ➗. YouTube.
- Bro Code. 2022. C augmented assignment operators 🧮. YouTube.
- Bro Code. 2022. C user input ⌨️. YouTube.
- Bro Code. 2022. C math functions 📚. YouTube.