[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);
}
#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); }
#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);
}
#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); }
#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);
}
#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); }
#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);
}
#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); }
#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