網絡学習管理 明解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 (9) logical operatorsC programming (9) logical operators

C の推奨されるスタイル C言語やJava言語は、中括弧 { } を使ってブロックを記述します。 中括弧だけでなく、ブロックの範囲を字下げ(インデント)して記述します。 ただ、中括弧をどの位置に記述するかによって、コーディング・スタイルの宗教論争が起きています。 主に中括弧の位置の違いなのですが、なぜか字下げスタイルと呼ばれています。 // 中括弧の開始を、文末に記述するスタイルを「K&R スタイル」といいます。 void FuncA() {   if ( ... ) { […]

C programming (c) while / for statementC programming (c) while / for statement

東京魅力PRサークル会員募集中 http://svn.mki.biz/pukiwiki/index.php?u-tokyo 興味があれば、ぜひコメントください。   while文構文 条件式を前判定して反復制御を行います。 while (条件式) { 繰り返す文; } 継続条件が真である間、文を繰り返し実行。 継続条件式がはじめから偽の場合は一度も実行されない。 例題: NIM GAME CALCULATOR for文構文 定められた回数だけ反復制御を行います。 for […]

C programming (4) puts and scanfC programming (4) puts and scanf

puts関数:表示を行う関数 書式化の必要がなく、改行もしたいの場合 puts(“ABC”); printf(“ABC\n”);   scanf関数:読込みを行う関数 scanf関数は、処理の途中でキーボードから文字の入力を求め、入力されたものを処理に利用するというものです。 実例: #include <stdio.h> int main(int argc, const char * argv[]) { // insert […]