[C言語のはじめ方] Part4: 変数とデータ型(int, float, char, double)

C言語

プログラムでデータを扱うための基礎を固めよう 💪

こんにちは!C言語学習の旅へようこそ!前回は開発環境を整え、最初のプログラム(main関数やprintf)を実行してみましたね。今回は、プログラミングの根幹とも言える変数データ型について学んでいきましょう。これらを理解することで、プログラムで様々な情報を扱えるようになります。

1. 変数ってなんだろう? 🤔

プログラムを書いていると、計算結果やユーザーが入力した値などを、後で使うために一時的に覚えておきたい場面がたくさん出てきます。そんな時に使うのが変数 (Variable) です。

変数は、データを格納しておくための「名前付きの箱」のようなものだとイメージしてください。箱に名前をつけておくことで、後からその名前を使って箱の中身(データ)を取り出したり、新しいデータに入れ替えたりできます。

変数を使うメリット ✨

  • データの再利用: 一度計算した結果を変数に入れておけば、何度も同じ計算をする必要がなくなります。
  • 可読性の向上: 例えば totalPrice という変数名を見れば、その変数に合計金額が入っていることがすぐに分かります。数字が直接書かれているよりも、プログラムの意味が理解しやすくなります。
  • 保守性の向上: 値を変更する必要が出た場合、変数が使われている箇所(宣言部分)を修正するだけで済みます。

変数の宣言と代入

C言語で変数を使うには、まず「こういう名前で、こういう種類のデータを入れる箱を用意しますよ」とコンピューターに教えてあげる必要があります。これを変数の宣言と言います。

データ型 変数名;

例えば、整数を入れるための `age` という名前の変数を使いたい場合は、次のように宣言します。

int age; // int型の変数ageを宣言

次に、宣言した変数に具体的な値を入れる操作を代入と言います。代入には = (イコール)記号を使います。

変数名 = 値;

先ほど宣言した `age` という変数に 25 という値を入れる場合は、こう書きます。

age = 25; // 変数ageに25を代入

変数の宣言と値の代入は、同時に行うこともできます。こちらの方がコードが短くなるので、よく使われます。

データ型 変数名 = 初期値;
int age = 25; // int型の変数ageを宣言し、初期値として25を代入

変数名の付け方ルール 📝

変数名には、分かりやすい名前をつけることが大切ですが、いくつかルールがあります。

  • 使える文字は、英字 (az, AZ)数字 (09)アンダースコア (_) です。
  • 最初の文字は、英字またはアンダースコアでなければなりません。数字から始めることはできません。
  • 大文字と小文字は区別されます。例えば、ageAge は別の変数として扱われます。
  • intfloatforwhile など、C言語の文法で特別な意味を持つ予約語 (キーワード) は変数名として使えません。
  • 変数名は、その変数が何を表しているか分かりやすい名前をつけるのが一般的です(例: score, userName, total_price など)。

OKな例: myScore, _count, user_name, value1
NGな例: 1stPlace (数字で始まっている), my score (スペースが含まれている), int (予約語)

2. データ型ってなんだろう? 🔢🔡

先ほどの変数の宣言で int というキーワードが出てきましたね。これがデータ型 (Data Type) です。データ型は、その変数(箱)にどのような種類のデータを入れることができるかを指定するものです。

なぜデータ型が必要なのでしょうか?主な理由は以下の2つです。

  1. メモリの効率的な利用: データ型によって、コンピューターのメモリ上で確保される領域の大きさが決まります。例えば、整数を入れるのに必要なメモリ量と、小数点数を入れるのに必要なメモリ量は異なります。適切なデータ型を選ぶことで、メモリを無駄なく使うことができます。
  2. 適切な演算の保証: データ型によって、その変数に対して行える演算が決まっています。例えば、整数同士なら足し算や引き算ができますが、文字に対して同じ操作をするのは意味が異なります。データ型があることで、コンピューターはデータに対して適切な処理を行うことができます。

C言語には様々なデータ型がありますが、今回は初学者の方がまず覚えるべき基本的な4つのデータ型を紹介します。

3. 主要なデータ型を使ってみよう!

① int 型 (整数型)

int (イント型と読みます) は、整数 (Integer) を扱うためのデータ型です。プラスの値、マイナスの値、そしてゼロを格納することができます。日常で使う「個数」や「年齢」など、小数点を含まない数を表現するのに適しています。

printf 関数で int 型の値を出力する際には、書式指定子として %d を使います。

コード例:

#include <stdio.h>

int main(void) {
  int score = 85;         // int型の変数scoreを宣言し、85を代入
  int temperature = -5;   // int型の変数temperatureを宣言し、-5を代入
  int count = 0;          // int型の変数countを宣言し、0を代入

  printf("テストの点数: %d 点\n", score);       // %d でscoreの値を出力
  printf("現在の気温: %d 度\n", temperature); // %d でtemperatureの値を出力
  printf("エラーの数: %d 件\n", count);       // %d でcountの値を出力

  int num1 = 10;
  int num2 = 3;
  int sum = num1 + num2;      // 足し算
  int difference = num1 - num2; // 引き算
  int product = num1 * num2;    // 掛け算
  int quotient = num1 / num2;   // 割り算 (int同士の割り算は小数点以下が切り捨てられる)
  int remainder = num1 % num2;  // 剰余 (割り算の余り)

  printf("--- 計算結果 ---\n");
  printf("%d + %d = %d\n", num1, num2, sum);
  printf("%d - %d = %d\n", num1, num2, difference);
  printf("%d * %d = %d\n", num1, num2, product);
  printf("%d / %d = %d (小数点以下切り捨て)\n", num1, num2, quotient);
  printf("%d %% %d = %d (余り)\n", num1, num2, remainder); // %記号自体を表示するには%%と書く

  return 0;
}

注意点: int 型同士の割り算では、結果の小数点以下は切り捨てられます。例えば 10 / 3 の結果は 3.333... ではなく 3 になります。

② float 型 (単精度浮動小数点数型)

float (フロート型と読みます) は、小数点を含む数 (Floating-point number) を扱うためのデータ型です。「単精度」とは、数値を表現するために使われるメモリの量が比較的少ない(通常4バイト)ことを意味しますが、その分、表現できる有効桁数には限りがあります(約7桁)。

身長、体重、円周率など、小数点が必要な値を扱う際に使います。値を代入する際には、数値の末尾に f または F を付けることが推奨されます。これにより、その数値が float 型であることを明示的に示します。

printf 関数で float 型の値を出力する際には、書式指定子として %f を使います。%.nf のように書くと、小数点以下 n 桁まで表示できます。

コード例:

#include <stdio.h>

int main(void) {
  float height = 1.75f;     // float型の変数heightを宣言し、1.75を代入 (fを付ける)
  float weight = 68.5f;     // float型の変数weightを宣言し、68.5を代入 (fを付ける)
  float pi = 3.14159f;    // float型の変数piを宣言

  printf("身長: %.2f m\n", height); // %.2f で小数点以下2桁まで表示
  printf("体重: %.1f kg\n", weight); // %.1f で小数点以下1桁まで表示
  printf("円周率 (float): %f\n", pi);   // %f で表示

  float bmi = weight / (height * height); // float型を含む計算
  printf("BMI: %.2f\n", bmi);

  return 0;
}

③ double 型 (倍精度浮動小数点数型)

double (ダブル型と読みます) も float と同じく小数点を含む数を扱うデータ型ですが、「倍精度」の名前の通り、float よりも多くのメモリ領域(通常8バイト)を使って数値を表現します。そのため、より有効桁数が多く(約15桁)、高い精度で小数を扱うことができます。

科学技術計算や、誤差をできるだけ小さくしたい場合にdouble型がよく使われます。現在のコンピューターでは、特に理由がなければ float よりも double を使う方が一般的な場合が多いです。float のように末尾に特別な記号(f)を付ける必要は通常ありません。

printf 関数で double 型の値を出力する場合も、書式指定子として %f を使います(C99規格以降。古い環境では %lf が必要になることもあります)。float と同様に %.nf で表示桁数を指定できます。

コード例:

#include <stdio.h>

int main(void) {
  double precise_pi = 3.141592653589793; // double型の変数precise_piを宣言
  double average_score = 88.75;        // double型の変数average_scoreを宣言
  double distance = 12345.6789;        // double型の変数distanceを宣言

  printf("より正確な円周率 (double): %.15f\n", precise_pi); // %.15f で小数点以下15桁まで表示
  printf("平均点: %.2f 点\n", average_score);            // %.2f で小数点以下2桁まで表示
  printf("距離: %f km\n", distance);                  // %f で表示

  double radius = 5.5;
  double circle_area = precise_pi * radius * radius; // double型を含む計算
  printf("半径 %.1f の円の面積: %.10f\n", radius, circle_area); // %.10f で表示

  return 0;
}

💡 Tip: floatdouble のどちらを使うか迷ったら、まずは double を使うことを検討してみましょう。精度が高い方が一般的に問題が起きにくいです。

④ char 型 (文字型)

char (キャラ型またはチャー型と読みます) は、1文字 (Character) を格納するためのデータ型です。アルファベット ('A', 'b')、数字 ('0', '9')、記号 ('$', '?') などを1つだけ入れることができます。

文字を char 型の変数に代入する際は、その文字をシングルクォーテーション (' ') で囲みます。ダブルクォーテーション (" ") は文字列(複数の文字の並び)を表すので、間違えないようにしましょう。

printf 関数で char 型の変数の値(文字)を出力するには、書式指定子として %c を使います。

実は、char 型は内部的には小さな整数として扱われています。各文字には番号(文字コード、よく使われるものにASCIIコードがあります)が割り当てられており、コンピューターはその番号を使って文字を記憶しています。そのため、%d を使ってその内部的な数値を確認することもできます。

コード例:

#include <stdio.h>

int main(void) {
  char initial = 'S';   // char型の変数initialを宣言し、'S'を代入
  char grade = 'B';     // char型の変数gradeを宣言し、'B'を代入
  char symbol = '#';    // char型の変数symbolを宣言し、'#'を代入
  char digit = '7';     // char型の変数digitを宣言し、'7'を代入 (これは数字の7ではなく文字の'7')

  printf("イニシャル: %c\n", initial); // %c で文字として出力
  printf("評価: %c\n", grade);
  printf("記号: %c\n", symbol);
  printf("数字文字: %c\n", digit);

  // char型を整数として見てみる (%dで出力)
  printf("--- 内部的な数値 (ASCIIコード) ---\n");
  printf("文字 '%c' の数値: %d\n", initial, initial);
  printf("文字 '%c' の数値: %d\n", grade, grade);
  printf("文字 '%c' の数値: %d\n", symbol, symbol);
  printf("文字 '%c' の数値: %d\n", digit, digit);

  // 少し応用: 文字コードを使って次の文字を表示
  char next_char = initial + 1; // 'S' の次の文字コードを持つ文字
  printf("'%c' の次の文字: %c (数値: %d)\n", initial, next_char, next_char);

  return 0;
}

注意点: 'A'"A" は違います。'A' は1文字を表す char 型のリテラルですが、"A" は文字 ‘A’ と終端文字(‘\0’)からなる「文字列」を表します(文字列については後のステップで詳しく学びます)。

4. データ型の選び方 🧐

どのデータ型を使うかは、プログラムで扱いたいデータの種類によって決まります。

  • 整数を扱いたい → int
  • 小数点数を扱いたい → float または double (迷ったら double が無難)
  • 1文字だけを扱いたい → char

最初は難しく考えすぎず、この基本的なルールに従って選んでみましょう。プログラミングを進めていく中で、より多くのデータ型(例えば、unsigned intlong long など、より大きな整数や符号なし整数を扱う型)や、自分で作るデータ型(構造体など)についても学んでいくことになります。

まとめ ✨

今回は、C言語プログラミングの基本となる変数データ型について学びました。

今回のポイント:

  • 変数は、データを入れておくための名前付きの箱。
  • 変数を使う前に宣言 (データ型 変数名;) が必要。
  • = を使って変数に値を代入する。
  • データ型は、変数に入れるデータの種類を指定するもの (int, float, double, char など)。
  • int は整数、float/double は小数点数、char は1文字を扱う。
  • printf で各データ型の値を出力するには、対応する書式指定子 (%d, %f, %c) を使う。

変数とデータ型は、プログラムで情報を処理するための基礎となります。これらの概念をしっかり理解し、実際にコードを書いて動かしてみることが大切です。分からないことがあっても大丈夫!何度も試して、少しずつ慣れていきましょう。

次回は、これらの変数を使って様々な計算を行うための演算子(足し算、引き算、比較など)について学んでいきます。お楽しみに!🚀

コメント

タイトルとURLをコピーしました