【C言語入門講座】4章.変数の使い方(宣言・代入・初期化・型・出力)

C言語入門レッスン
C言語入門レッスン

☜前の章へ 文字と改行の出力方法とコメントの書き方
☞次の章へ 演算をしてみよう


【C言語入門講座】は全13章から構成される、初心者向けのC言語学習コンテンツです。1章から13章まで学習して頂くことでC言語の基礎を学習することができます。

この記事で分かること
  1. 変数の宣言方法
  2. 変数の型とは何か
  3. 変数名の付け方のルール
  4. 変数の出力方法
  5. 小数を表示する際に小数点以下を四捨五入する方法
  6. 小数点以下を切り捨てる方法
  7. 変数に値を代入する方法
  8. 変数を初期化する方法
  9. 変数に他の変数を代入する方法

変数とは数値などのデータを格納することができるもので、変数を使い計算などを行うことが出来ます。プログラミングにおいてなくてはならないものです。

C言語の変数の宣言方法

変数の宣言方法
  • 型 変数名;

変数とは、箱のようなものです。変数には数値や文字列などのデータを格納することができます。

#include <stdio.h>

int main(void) {
    int num;
    
    return 0;
}

変数の宣言を次のように行っています。numが変数です。

int num;

変数を使うためには、このように書く必要があり、変数を宣言すると言います

  • intというのは変数の型のことで整数型を表す
  • 変数numには整数値のみ格納することができる

変数の型や変数に値を格納する方法については、後程詳しく解説します。

C言語の変数の型とは

変数の型とは
  • 変数に格納できるデータの種類を指定するもの
変数のイメージ

上記の図を見てください。int型の変数には数字の100を格納することができますが、文字のAを格納することはできません。char型には文字のAを格納することができます

このように、変数は型によって格納できるデータが異なります。

変数には種類があり、型(種類)を指定してあげることで変数に格納できるものが変化します

  • 変数には種類がある
  • 変数の型を指定することで格納できるデータの種類が変わる

以下の表はC言語の変数の型の一例です。

種類データ型サイズ値の範囲
型なしvoid
文字列char20~65,535
整数型int4-2147483648~2147483648
浮動小数点型float41.401298E-45~3.4028235e+38
double84.94065645841246544e-324~1.79769313486231570e+308
表:C言語のデータ型
  • void(ボイド)型:void型は型がないという意味です。関数でよく使用される型になります。関数は8章で学ぶことが出来ます。
  • char(チャーまたはキャラ)型:char型の変数にはb,D,r,wなどの文字を1文字格納することができます。
  • int(イント)型:int型は整数型なので、11、334、9428などのように小数点などを含まない数値を格納することが出来る変数の型です。
  • float(フロート)型、double(ダブル)型:float型、double型は浮動小数点型なので、2.5、0.009などの小数点が含まれる数値を格納することが出来る変数の型です。

変数名の付け方のルール

  • 変数名にはアルファベット、数字、_(アンダーバー)を使用できる
int num_1;
  • 一文字目に数字は使用できない
int 1num;
  • 大文字と小文字は区別される
int num;
int Num;
  • 予約語(C言語に登録されている単語のこと)は使用できない
ANSI 予約語一覧  
autobreakcasechar
constcontinuedefaultdo
doubleelseenumextern
floatforgotoif
intlongregisterreturn
shortsignedsizeofstatic
structswitchtypedefunion
unsignedvoidvolatilewhile
表:C言語の予約語

これらは予約語というもので、これらの単語は変数名とすることはできません。
予約語で変数を宣言するとエラーになるので、もしエラーが発生したら変数名を変更しましょう。

変数に値を代入する方法

変数の代入方法
  • 変数名 = 値;

まずは、以下のソースコードをVSCODEで実行してみましょう。

#include <stdio.h>

int main(void) {
    int num;
    char alf;
    float dec_f;
    double dec_d;

    num = 100;
    alf = 'A';
    dec_f = 1.5f;
    dec_d = 5.5;

    printf("%d\n", num);
    printf("%c\n", alf);
    printf("%f\n", dec_f);
    printf("%lf\n", dec_d);

    return 0;
}

変数への値の代入を以下のように行っています。

num = 100;
alf = 'A';
dec_f = 1.5f;
dec_d = 5.5;

変数numには数字の100が入っています。

変数alfには文字のAが入っています。

変数dec_fには数字の1.5が入っています。float型の場合、代入する値の末尾に「f」を書く必要があります。「f」を入れないとデフォルトでdouble型だとみなされて警告が出る場合があります

変数dec_dには数字の5.5が入っています。double型では末尾にfは必要ありません

C言語で変数の値を出力し表示する方法

変数の出力方法
  • printf(“変換指定子”, 変数名);
#include <stdio.h>

int main(void) {
    int num;
    char alf;
    float dec_f;
    double dec_d;

    num = 100;
    alf = 'A';
    dec_f = 1.5f;
    dec_d = 5.5;

    printf("%d\n", num);
    printf("%c\n", alf);
    printf("%f\n", dec_f);
    printf("%lf\n", dec_d);

    return 0;
}

出力結果

100 A 1.500000 5.500000

変数の中身を出力したい場合は、printf()を使います。

printf("%d\n", num);
printf("%c\n", alf);
printf("%f\n", dec_f);
printf("%lf\n", dec_d);

%dなどは変換指定子といい、printf()の右側にある変数の型によって書き方が異なります。変換指定子が書かれた位置に変数の値が出力されます。

変換指定子一例

変換指定子変数の型概要
%cchar文字
%schar (配列)文字列
%dint10進整数
%ffloat単精度の実数
%lfdouble倍精度の実数
C言語の変換指定子

C言語で小数を出力する際に小数点以下を切り捨てる方法

C言語の小数点以下を四捨五入する方法

小数点のを四捨五入する方法
  • printf(“%.1f\n”, dec_f);
#include <stdio.h>

int main(void) {
    float dec_f;

    dec_f = 1.5;

    printf("%.1f\n", dec_f);

    return 0;
}

出力結果

出力結果1.5

%の後ろに「.1」と書くことで小数点第二位が四捨五入され、小数点第一位までの値が表示されています。

C言語の小数点以下を切り捨てる方法

#include <stdio.h>

int main(void) {
    float dec_f;

    dec_f = 1.23456;

    printf("%.3f\n", dec_f);

    return 0;
}

出力結果

1.235

1.23456を小数点第三位まで表示するように指定したら、1.235と表示されました。
これは小数点第四位の5が四捨五入されたためです。

フォーマット指定子fで桁数指定する場合、基本的に四捨五入されてしまいます。

四捨五入したくない場合もあるので、小数点以下を切り捨てる方法を紹介します。

#include <stdio.h>
#include <math.h>

int main() {
    float dec_a = 1.23456;

    //四桁目が四捨五入され1.235と表示される
    //フォーマット指定子fで桁数指定する場合、基本的に四捨五入される
    printf("%.3f\n", dec_a);
    
    //一例としてfloor()関数を使用する。floorは小数点以下を切り捨てる
    //(1)1.23456 * 1000 = 1234.56
    //(2)floor()関数を実行 1234.56 → 1234
    //(3)1234 / 1000 → 1.234
    float dec_b = floor(dec_a * 1000) / 1000; // 3桁目まで切り捨てる例
    
    // 結果を表示
    printf("%.3f\n", dec_b);

    return 0;
}

出力結果

1.235 1.234

floor()関数を使うと小数点以下を切り捨てることができます。
floor()関数を使いたい場合、ソースコードの冒頭に「#include <math.h>」と書く必要があります。

floor()関数の使い方
  • floor(dec_a * 1000) / 1000;

これは以下の順序で、以下のことが行われています。

  1. (dec_a * 1000) 「1.23456 * 1000 = 1234.56」
  2. floor(dec_a * 1000) 「1234.56 → 1234」
  3. floor(dec_a * 1000) / 1000 「1234 / 1000 → 1.234」

変数を初期化する方法

変数の初期化方法
  • 型 変数名 = 値;
#include <stdio.h>

int main(void)
{
    int num = 100;
    char alf = 'A';
    printf("%d\n", num);
    printf("%c\n", alf);

    return 0;
}

出力結果

出力結果

変数の宣言と同時に代入することを、初期化と言います。

変数に他の変数を代入する方法

変数に他の変数を代入する方法
  • 変数名 = 変数名;
#include <stdio.h>

int main(void)
{
    int num_a = 10;
    int num_b = 20;

    num_a = num_b;

    printf("%d", num_a);

    return 0;
}

出力結果

出力結果

以下のように変数に他の変数を代入することができます。

 num_a = num_b;

num_a = num_bのように変数に他の変数を代入することができます。

num_aには10が入っていましたが、20に変わりました。


練習問題

①から⑫の問題は、一連の問題となっています。①を解いたら、解答を消さずに、②以降も同じファイルで解いてください。

整数値型の変数 num_aを宣言し、10を代入しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    
    return 0; 
}

浮動小数点型の変数 dec_aを宣言し、10.5 を代入しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    
    return 0; 
}

文字型の変数alf_aを宣言し、Xを代入しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    
    return 0; 
}

変数num_a、dec_a、alf_aをそれぞれコンソールに表示しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c", num_a, dec_a, alf_a);
    
    return 0; 
}

出力結果

10 10.500000 X

整数値型の変数 num_bを宣言し、100で初期化しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    
    return 0; 
}

浮動小数点型の変数 dec_bを宣言し、105.005 で初期化しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_a = 105.005;

    return 0; 
}

文字型の変数alf_bを宣言し、Aで初期化しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_a = 105.005;
    // 問7
    char alf_b = 'A';

    return 0; 
}

変数num_b、dec_b、alf_bをそれぞれコンソールに表示しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c\n", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_b = 105.005;
    // 問7
    char alf_b = 'A';
    // 問8
    printf("%d %f %c", num_b, dec_b, alf_b);

    return 0; 
}

出力結果

10 10.500000 X 100 105.005000 A

num_aにnum_bを代入しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c\n", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_b = 105.005;
    // 問7
    char alf_b = 'A';
    // 問8
    printf("%d %f %c", num_b, dec_b, alf_b);
  // 問9
    num_a = num_b;

    return 0; 
}

dec_aにdec_bを代入しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c\n", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_b = 105.005;
    // 問7
    char alf_b = 'A';
    // 問8
    printf("%d %f %c\n", num_b, dec_b, alf_b);
    // 問9
    num_a = num_b;
    // 問10
    dec_a = dec_b;

    return 0; 
}

alf_aにalf_bを代入しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c\n", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_b = 105.005;
    // 問7
    char alf_b = 'A';
    // 問8
    printf("%d %f %c\n", num_b, dec_b, alf_b);
    // 問9
    num_a = num_b;
    // 問10
    dec_a = dec_b;
    // 問11
    alf_a = alf_b;

    return 0; 
}

変数num_a、dec_a、alf_aをそれぞれコンソールに表示しましょう

#include <stdio.h>
int main() {
    // 問1
    int num_a = 10;
    // 問2(float dec_a = 10.5;も正解)
    double dec_a = 10.5;
    // 問3
    char alf_a = 'X';
    // 問4
    printf("%d %f %c\n", num_a, dec_a, alf_a);
    // 問5
    int num_b = 100;
    // 問6
    double dec_b = 105.005;
    // 問7
    char alf_b = 'A';
    // 問8
    printf("%d %f %c\n", num_b, dec_b, alf_b);
    // 問9
    num_a = num_b;
    // 問10
    dec_a = dec_b;
    // 問11
    alf_a = alf_b;
    // 問12
    printf("%d %f %c\n", num_a, dec_a, alf_a);

    return 0; 
}

出力結果

10 10.500000 X 100 105.005000 A 100 105.005000 A

☜前の章へ 文字と改行の出力方法とコメントの書き方
☞次の章へ 演算をしてみよう