網絡学習管理 明解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 (7) Ch1 & Ch2 SummaryC programming (7) Ch1 & Ch2 Summary

履修システム使い方 (塚本先生担当) 連絡事項 花やしきについて、学生にお知らせ頂きたい事項を3点連絡  ①遅刻しないように 9:20までに 161教室に集合する事   出席の確認をします。  ②着物着付け、忍者の時間割をお知らせします。   「誰が何時」という情報  ③雨が降っても花やしきに行きます。   必ず9:20までに161教室に登校する事   第一章、第二章のまとめ 過去のページを参照 演習 演習2-6(P37) 身長を整数値として読み込み、標準体重を実数で表示するプログラムを作成せよ。 標準体重 = (身長 – […]

C programmingC programming

【授業の概要】 コンピュータプログラム開発言語の中で広く利用されているC言語をCプログラミング開発環境ソフト: CPad for Borland C++ Compilerを使った一人一台のPCを使い実習により学びます. 毎回問題に取り組み理解を深めます。復習問題としてプログラミング課題を出題する。 【授業要旨】 回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分) 1 ガイダンス 学習目的 情報工学系科目のC言語の位置づけ CPad開発環境 PCを持っている学生は開発環境をインストする 60 […]

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

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