Thinkers'Studio
JavaとC言語の自習ツール
小数点以下第1位で四捨五入するプログラム例( C言語版 )
 C言語には元々、四捨五入する関数がありません。 ここでは、キャストを使う方法の関数サンプルを紹介します。
(注:本サイトではほとんどの学習書の規格である ANSI の C を前提としています。新しいC言語規格の環境で round という四捨五入関数がありますが、取り扱いが不統一で使えない場合もあります)

四捨五入の方法

 ・小数点以下1桁目を四捨五入するなら、元の値に 0.5 を足してから、小数点以下を切り捨てます。
    例1)15.4   15.4+0.5は15.9 → 小数点以下を切り捨て → 15
    例2)15.5   15.5+0.5は16.0 → 小数点以下を切り捨て → 16
 ・整数型に切り捨てるには、(int) を前に付けて int型にキャスト(強制的型変換)します。
    int x1 = (int)( 15.4 + 0.5 );  // x1は 15となる [OK!]
    int x2 = (int)( 15.5 + 0.5 );  // x2は 16となる [OK!]
 ・負の数でもうまくいくでしょうか? -15.4 を小数点以下第1位で四捨五入すると -15 ですが …
    int x3 = (int)( -15.4 + 0.5 ); // x3は-14となる [NG!]
 ・正なら 0.5 を足し、負なら 0.5 を引く必要がありますね。 たとえば三項演算子 ? : を使って次のようにします。
    int newx = (int)( x < 0.0 ? x-0.5 : x+0.5 );

【 小数点以下第1位で四捨五入するプログラム例(C言語版)】
 下のプログラムでは、shishagonyu という関数にしました。
#include <stdio.h>
int shishagonyu( double x )
{
    return (int)( x < 0.0 ? x-0.5 : x+0.5 );
}
main()
{
    double d;
    while( 1 ) {
        printf( "浮動小数点数を指定:" );
        if( scanf( "%lf", &d ) != 1 ) break;
        printf("小数点以下第1位で四捨五入 = %d\n", shishagonyu( d ) );
    }
}
(今回のクイズです)
 上の自作の shishagonyu関数を呼び出して、小数点以下第2位を四捨五入した結果を表示したいと思います。
 青文字行をどのように書き換えればよいでしょうか?
 ヒント:小数点以下第2位が第1位に来るようにしてから shishagonyu に渡し、返ってきた結果を元の位に戻します。
   (答えは、次回のC言語の Tips で ・・・)

[ 関連記事 ] 切り上げや切り捨て

前回のクイズの答え: (a) break、(b) continue (前回の問題を見る
(a) は、生まれ月が数字として入力されなかったときの処理です。繰り返しから抜けるために break文を使います。
(b) は、1〜12以外の数字が指定されたときの処理です。もう一度入力を受け付けるために continue で次の繰り返しの先頭に進みます。