[c言語] さっと復習(2) 演算と変数

基本演算

#include <stdio.h>

/* 
ブロックコメント
*/

// 行コメント

int main(){
    // 和
    printf("%d + %d = %d\n", 7, 3, 7+3);
    // 差
    printf("%d - %d = %d\n", 7, 3, 7-3);
    // 積 
    printf("%d * %d = %d\n", 7, 3, 7*3);
    // 整数の商
    printf("%d / %d = %d\n", 7, 3, 7/3);
    // 剰余 
    printf("%d mod %d = %d\n", 7, 3, 7%3);
    // 実数の商 
    printf("%f / %f = %f\n", 7.0, 3.0 , 7.0/3.0);
    // ( )は通常の計算と同じように使う。
    printf("(%d + %d) * %d = %d\n", 7, 3, 2, (7+3)*2);
    printf("%d + %d * %d = %d\n", 7, 3, 2, 7 + 3 *2);
}

7 + 3 = 10
7 - 3 = 4
7 * 3 = 21
7 / 3 = 2
7 mod 3 = 1
7.000000 / 3.000000 = 2.333333

c で使えるコメント。

/* */ ブロックコメント。

// 行コメント。新しめ。

変数

#include <stdio.h>

int main(){
    // 変数宣言: 型 変数名; int 整数
    int a;
    // 代入
    a = 8;
    printf("変数 a に %d を代入。\n", a);
    // 変数宣言と代入を一括で行う。変数の初期化。
    int b = 4;
    printf("変数 b に %d を代入。\n", b);
    // 型が同じであれば、複数の変数宣言を一括で行える。
    int sum, dif;
    // 型の異なる変数の宣言。 double 実数
    double avg;
    sum = a + b;
    dif = a - b;
    // 型を自動的に変換 int -> double
    avg = sum / 2.0;
    printf("a + b = %d\n", sum);
    printf("a - b = %d\n", dif);
    printf("aとbの平均: %f\n", avg);
    // 変数へ別の値を代入。
    a = 12;
    printf("変数 a に %d を代入。\n", a);
    printf("a + b = %d\n", a + b);
    printf("a - b = %d\n", a - b);
}

変数 a に 8 を代入。
変数 b に 4 を代入。
a + b = 12
a - b = 4
aとbの平均: 6.000000
変数 a に 12 を代入。
a + b = 16
a - b = 8
(7 + 3) * 2 = 20
7 + 3 * 2 = 13

型の分類表

暗黙的な型変換

変数宣言の場所

C言語での変数宣言ってどこに書けるのさ?

コンパイラによっては、{}内の先頭で変数を宣言しなければならないときがある。

代入演算子

#include <stdio.h>

int main(){
    int a_1 = 2, b_1 = 2, c_1 = 2, d_1 = 2;
    a_1 = a_1 + 2;
    b_1 = b_1 - 2;
    c_1 = c_1 * 2;
    d_1 = d_1 / 2;
    printf("%d, %d, %d, %d\n", a_1, b_1, c_1, d_1);
    // 代入演算
    int a_2 = 2, b_2 = 2, c_2 = 2, d_2 = 2;
    a_2 += 2;
    b_2 -= 2;
    c_2 *= 2;
    d_2 /= 2;
    printf("%d, %d, %d, %d\n", a_2, b_2, c_2, d_2);
}

4, 0, 4, 1
4, 0, 4, 1

暗黙的な型変換と明示的な型変換

型変換(かたへんかん、: type conversion)とはプログラムにおいて、あるデータ型を他のデータ型に変換することである[1]。型キャスト(: type casting)とも呼ばれる[2]

出典: フリー百科事典『ウィキペディア(Wikipedia)』
#include <stdio.h>

int main(){
    int i, i_assigned_from_d, i_cast_from_d;
    double d, d_assigned_from_i, d_cast_from_i;
    
    i = 3;
    d = 3.14;

    // cast せずに代入 -> 切り捨てが発生するので warning
    i_assigned_from_d = d;
    printf("%d\n", i_assigned_from_d);
    // cast
    i_cast_from_d = (int) d;
    printf("%d\n", i_cast_from_d);

    // cast せずに代入 -> warning は特になし。
    d_assigned_from_i = i;
    printf("%f\n", d_assigned_from_i);
    // cast
    d_cast_from_i = (double) i;
    printf("%f\n", d_cast_from_i);
}

sample.c: In function ‘main’:
sample.c:11:25: warning: conversion from ‘double’ to ‘int’ may change value [-Wfloat-conversion]
   11 |     i_assigned_from_d = d;
      |   

3
3
3.000000
3.000000