網絡学習管理 明解C言語入門1 C programming (6) type and conversions

C programming (6) type and conversions

型と型変換

  • int — 整数
  • double — 浮動小数点数

平均点を求めるプログラム

#include <stdio.h>
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    int score[5];       // 5人の点数を入れる配列
    int sum;            // 合計点
     
    // 各点数を入れる
    score[0] = 77;
    score[1] = 80;
    score[2] = 65;
    score[3] = 60;
    score[4] = 70;
     
    // 各点数を全て足して合計点を求める
    sum = score[0] + score[1] + score[2] + score[3] + score[4];
     
    // 平均点を表示する
    printf("平均点は%d点です。", sum / 5);
     
    return 0;
}

正しい結果は70.4

しかしプログラムは平均点は70点と表示され、一部情報を失ってしまう。

sum  / 5  = 70  (余り 2)

型と演算

算術変換

オペランドは、式の中でよりサイズの大きい型に合わせて変換されるというお約束があります。(暗黙的な型変換

もし、サイズの大きい型を小さい型に変換した場合、上位ビットを切り捨てることになるため、情報を失ってしまう可能性があります。しかし、サイズを拡張する場合は情報を失うことはありません。

211.1

sum  / 5  = 70

sum  / 5.0  = 70.4

#include <stdio.h>
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    int score[5];       // 5人の点数を入れる配列
    int sum;            // 合計点
     
    // 各点数を入れる
    score[0] = 77;
    score[1] = 80;
    score[2] = 65;
    score[3] = 60;
    score[4] = 70;
     
    // 各点数を全て足して合計点を求める
    sum = score[0] + score[1] + score[2] + score[3] + score[4];
     
    // 平均点を表示する
    printf("平均点は%f点です。", sum / 5.0);
     
    return 0;
}

 

代入変換

代入の場合も、型が異なる場合は暗黙的に変換して代入されます。これを代入変換と呼びます。

  • 拡張変換
  • 縮小変換 (情報一部損失)
    • 整数から整数の場合、上位ビットが切り捨て
    • 浮動小数点数から整数の場合、小数部の情報が失われ

 

#include <stdio.h>
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    int score[5];       // 5人の点数を入れる配列
    double sum;            // 合計点
     
    // 各点数を入れる
    score[0] = 77;
    score[1] = 80;
    score[2] = 65;
    score[3] = 60;
    score[4] = 70;
     
    // 各点数を全て足して合計点を求める
    sum = score[0] + score[1] + score[2] + score[3] + score[4];
     
    // 平均点を表示する
    printf("平均点は%f点です。", sum / 5);
     
    return 0;
}

 

型キャスト変換

指定した型に値を変換するようにプログラマが伝える明示的な変換方法も存在します。これを型キャスト変換と呼びます。

(変換型名)

sum  / 5  = 70

(double) sum  / 5  = 70.4

#include <stdio.h>
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    int score[5];       // 5人の点数を入れる配列
    int sum;            // 合計点
     
    // 各点数を入れる
    score[0] = 77;
    score[1] = 80;
    score[2] = 65;
    score[3] = 60;
    score[4] = 70;
     
    // 各点数を全て足して合計点を求める
    sum = score[0] + score[1] + score[2] + score[3] + score[4];
     
    // 平均点を表示する
    printf("平均点は%f点です。", (double)sum / 5);
     
    return 0;
}

演習課題

型キャストを利用して浮動小数点型変数 から実数や小数を取り出す

出力例:

浮動小数点数 = 12.34
実数 = 12
小数 = 0.34

解答例:

#include <stdio.h>

int main()
{
  float fVar = 12.34f;

  printf("全体 = %g\n" , fVar);
  printf("実数 = %d\n" , (int)fVar);
  printf("小数 = %g\n" , fVar - (int)fVar);

  return 0;
}

 

1 thought on “C programming (6) type and conversions”

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

C programming (5) operator and operandC programming (5) operator and operand

C言語の特徴(2) 関数型言語 コンピュータに実行してもらう命令はすべて関数の中に記述されている。関数がプログラムの実行単位。いくつかの関数を組み合わせ、コンピュータへ命令をする。最初にコンピュータが実行する関数はmain()に決まっている。 戻り値の型 関数名(引数リスト) { 命令文; } 命令文(Statement) 名札付き文 式文 複合文 選択文 繰り返し文 ジャンプ文 式(Expression) オペランド 演算子 オペランド... トークン(token) コンパイラが認識する最小単位のテキスト、トークン(token) […]

C programming (d) break & continueC programming (d) break & continue

break文 switch文のところでbreakというのが何回も登場しました。 switch文での意味は「switch文から抜け出す」という意味でしたね。 breakはswitch文以外にもfor文やwhile文のループの中でも使うことが出来ます。 この時もbreakは「for文やwhile文のループから抜け出す」という意味を持っています。 break文を使って抜けられるのはループひとつだけです。ですから、二重、三重のループを抜けるには、その度にbreak文を使うようになります。 continue文 continueはfor文やwhile文などのループ処理をスキップさせるに用います。 breakとは違い、continueはスキップした後は、ループの先頭に戻ります。 #include <stdio.h> int main(void) { int i = 1, n, sum; […]

C programming (8) if statementC programming (8) if statement

  制御構文は、上から下へ流れるプログラムを途中で流れを分岐させたり、流れを繰り返したりすることができる構文を表します。 制御構文の主な種類としてif文、for文、while文、switch文の4パターンあります。 if文を使うと、分岐構造を作ることができます。 条件式の真偽 状態 真偽 値 条件が満たされた場合 true(真) 1(0以外) 条件が満たされなかった場合 false(偽) 0  関係演算子 2つの値の大小を比較します。 条件を満たせば「真(true)」、条件を満たさなければ「偽(false)」となります。 関係演算子の形式は以下の通りです。 演算子 例 […]