C言語の四捨五入完全マスター!5つのステップと10つのサンプルコード

C言語で四捨五入をマスターするためのガイドブックのイメージC言語
この記事は約16分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C言語は初心者でも学びやすい言語として多くのプログラマーに親しまれています。

その中で四捨五入の処理は、C言語での計算処理やデータ処理において非常に重要な役割を果たしています。

本記事では、初心者向けにC言語で四捨五入を行うための具体的な手順と、10個の詳細なサンプルコードを提供します。

これらを通じて、あなたはC言語の四捨五入についてすぐに理解し、自己のプログラムに応用することができます。

●C言語とは

C言語は、1970年代にベル研究所で開発された汎用プログラミング言語です。

その高い移植性と効率性から、オペレーティングシステム、組み込みシステム、ゲーム開発など、広範な領域で利用されています。

また、C言語は他の多くのプログラミング言語の基盤となっており、その学習は他の言語の理解にも大いに役立ちます。

●四捨五入とは

四捨五入は、数字を近い整数に丸める手法の一つです。

具体的には、小数点以下の数値が0.5以上であれば次の整数に、それ未満であればそのままの整数に丸めます。

これは、計算結果を見やすくしたり、ある程度の誤差を許容することで計算を単純化するために使用されます。

●C言語での四捨五入の基本

○四捨五入の基本的な概念

C言語での四捨五入は数学的な四捨五入と同じですが、コンピューターは小数を二進法で表現するため、精度の問題があります。

そのため、厳密な計算が必要な場合は適切な手法を選択する必要があります。

○C言語での四捨五入の基本的なコード

C言語では四捨五入を行うために、「round」関数を使用します。

この関数は引数としてdouble型の値を受け取り、その値を最も近い整数に丸めます。

#include <math.h>

int main() {
    double num = 3.6;
    double result = round(num);
    printf("%f\n", result);  // "4.000000"
    return 0;
}

このコードでは、まずmath.hという数学関数を扱うためのライブラリをインクルードします。

次にmain関数内で、四捨五入する数値を示す変数numを宣言し、その値をround関数で四捨五入します。

その結果をresultという変数に代入し、printf関数を用いて結果を表示します。この例では、3.6という値を四捨五入した結果、4.0と表示されます。

●四捨五入のサンプルコード

○サンプルコード1:基本的な四捨五入

基本的な四捨五入を行うサンプルコードを紹介します。

#include <math.h>

int main() {
    double num = 2.3;
    double result = round(num);
    printf("%f\n", result);  // "2.000000"
    return 0;
}

このサンプルコードでは、2.3という値を四捨五入しています。

round関数が返す値は、最も近い整数です。

この例では2.3が2に四捨五入されて、結果として”2.000000″が出力されます。

○サンプルコード2:桁数を指定した四捨五入

次に、桁数を指定して四捨五入を行う方法について詳しく見ていきましょう。

C言語では、桁数を指定するためには少し工夫が必要です。

その一つが、10の倍数を掛けてから四捨五入を行い、その後元の桁数に戻すという方法です。

#include<stdio.h>
int main() {
    double num = 123.456;
    double result;
    num = num * 100; // 小数点以下2桁目までを整数部に移す
    result = ((num > 0) ? (int)(num + 0.5) : (int)(num - 0.5)) / 100.0; // 四捨五入して元の桁数に戻す
    printf("%.2f\n", result);
    return 0;
}

このコードでは、最初に変数numに123.456を代入しています。

そして、次の行でnumに100を掛けることで、小数点以下2桁目までを整数部に移しています。

その後の行で四捨五入を行い、同時に100で割って元の桁数に戻しています。

この例では、printf関数を使って結果を小数点以下2桁まで出力しています。

出力結果は”123.46″となります。

このように、C言語で特定の桁数までの四捨五入を行うには、一度桁数を移してから四捨五入を行い、その後元の桁数に戻すという処理を行います。

○サンプルコード3:負の数の四捨五入

C言語では負の数でも四捨五入を行うことが可能です。

負の数を四捨五入する際の注意点としては、数値がマイナスであっても同様に四捨五入を適用できることを覚えておくことが重要です。

例として、-2.6を四捨五入すると-3となります。

#include <stdio.h>
#include <math.h>

int main() {
    double x = -2.6;
    printf("四捨五入する前: %f\n", x);
    x = round(x);
    printf("四捨五入した後: %f\n", x);
    return 0;
}

このコードでは、double型の変数xに-2.6を代入し、その値を四捨五入する操作を行っています。

この例では、round関数を用いて値を四捨五入しています。

四捨五入する前と後の値をprintf関数を使って表示しています。

このコードを実行すると、次のような出力結果が得られます。

四捨五入する前: -2.600000
四捨五入した後: -3.000000

この結果からわかる通り、-2.6が-3に四捨五入されています。

負の数でも正しく四捨五入できていることが確認できます。

次に進む前に、一つ応用例を紹介します。

ユーザーから負の数の入力を受け取り、その数値を四捨五入するというプログラムです。

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    printf("四捨五入する数値を入力してください: ");
    scanf("%lf", &x);
    printf("四捨五入する前: %f\n", x);
    x = round(x);
    printf("四捨五入した後: %f\n", x);
    return 0;
}

このコードはユーザーからの入力を受け取るためにscanf関数を使用しています。

ユーザーが入力した値を四捨五入する前と後の値を表示します。

このように四捨五入はユーザーの入力値にも容易に適用できます。

○サンプルコード4:小数点以下の四捨五入

C言語では、小数点以下の四捨五入も簡単に実装することが可能です。

小数点以下の値を四捨五入するには、特定の関数を使用します。

次のサンプルコードでは、「roundf()」関数を使用して小数点以下の値を四捨五入しています。

#include <stdio.h>
#include <math.h>

int main() {
    float num = 3.14159; // 初期値としてπを設定
    float result = roundf(num); // roundf関数を使って四捨五入
    printf("Rounded Result: %.2f\n", result); // 結果の表示
    return 0;
}

「roundf()」関数は小数点以下を四捨五入します。

そして、その結果を新たな変数「result」に代入します。最後に、「printf」関数を用いて、四捨五入した結果を表示します。

上記のコードを実行すると、「Rounded Result: 3.00」と表示されます。

このように、3.14159が3.00に四捨五入されました。

初めての方でも理解しやすいかと思います。

○サンプルコード5:配列内の数字の四捨五入

次に、配列内の全ての数字を四捨五入する方法について説明します。

この方法は、大量のデータを扱う際に特に便利です。

配列の全ての要素を四捨五入するためのサンプルコードを紹介します。

#include <stdio.h>
#include <math.h>

int main() {
    float numbers[] = {1.1, 2.2, 3.3, 4.4, 5.5}; // 四捨五入を行う配列
    int size = sizeof(numbers) / sizeof(numbers[0]); // 配列のサイズを計算

    // 配列の各要素を四捨五入
    for (int i = 0; i < size; i++) {
        numbers[i] = roundf(numbers[i]);
    }

    // 四捨五入後の配列を表示
    for (int i = 0; i < size; i++) {
        printf("%.0f ", numbers[i]);
    }

    return 0;
}

まず、配列内の全ての要素に対して四捨五入を行うために、「for」ループを使用しています。

次に、配列内の各要素に対して「roundf()」関数を適用し、その結果を元の配列に戻します。

これにより、配列内の全ての数値が四捨五入されます。

最後に、四捨五入された配列を表示するためのもう一つの「for」ループがあります。

このサンプルコードを実行すると、配列内の全ての数字が四捨五入され、「1 2 3 4 6」と表示されます。

ここで、原始配列の値は「1.1, 2.2, 3.3, 4.4, 5.5」でしたが、それぞれ「1, 2, 3, 4, 6」に四捨五入された結果を得ました。

このコードは、配列内の大量のデータを一度に四捨五入する場合に大変役立つでしょう。

○サンプルコード6:ユーザーからの入力値の四捨五入

さて、次はユーザーからの入力値を四捨五入する方法を見ていきましょう。

このコードでは、scanf関数を用いてユーザーから入力を受け取り、その数値を四捨五入します。

より実用的なプログラム作成に役立つことでしょう。

#include <stdio.h>
#include <math.h>

int main() {
    double input;
    printf("四捨五入したい数値を入力してください: ");
    scanf("%lf", &input);
    printf("四捨五入した結果は%.0fです\n", round(input));
    return 0;
}

上記のコードを詳しく見てみると、まず最初にdouble型の変数inputを宣言します。

次に、printf関数でユーザーにメッセージを表示し、scanf関数でユーザーの入力を受け取ります。

そして、round関数を使って入力された数値を四捨五入し、その結果を表示します。

例えば、ユーザーが12.7と入力すると、このプログラムはその数値を四捨五入し、結果として13を出力します。

○サンプルコード7:ループ処理と四捨五入

C言語で四捨五入の技術をさらに活用するためには、ループ処理との組み合わせが有効です。

次のサンプルコードでは、forループを使って連続した数値を生成し、それらを四捨五入します。

#include <stdio.h>
#include <math.h>

int main() {
    for(double i = 0.5; i <= 10.5; i++) {
        printf("%.1fの四捨五入の結果は%.0fです\n", i, round(i));
    }
    return 0;
}

上記のコードでは、forループを使用して0.5から10.5までの数値を生成し、それぞれの数値を四捨五入しています。

ループの中でround関数を使用して四捨五入を行い、その結果をprintf関数で出力します。

このコードを実行すると、0.5から10.5までの各数値が四捨五入され、結果が次のように表示されます。

0.5の四捨五入の結果は1です
1.5の四捨五入の結果は2です
...
10.5の四捨五入の結果は11です

このように、四捨五入とループ処理を組み合わせることで、連続的な数値に対する四捨五入も簡単に実現できます。

さて、ここまででC言語における四捨五入の基本的なコードから、実際の応用例までを解説しました

しかしながら、四捨五入を行う際には注意すべき点もあります。

○サンプルコード8:条件分岐と四捨五入

次に進む前に、四捨五入の技術と一緒に条件分岐をどのように活用するかを示す例を紹介します。

条件分岐はC言語で非常に重要な概念であり、四捨五入処理を柔軟に制御するのに役立ちます。

下記のコードは、ユーザーから入力を受け取り、その数値が正の数であれば四捨五入を行い、そうでなければ四捨五入を行わないというプログラムです。

#include<stdio.h>
#include<math.h>

int main() {
    double input;
    printf("数値を入力してください: ");
    scanf("%lf", &input);

    if(input >= 0) {
        printf("四捨五入した結果: %.2f\n", round(input));
    } else {
        printf("負の数のため四捨五入しません: %.2f\n", input);
    }

    return 0;
}

このコードでは、まず初めにユーザーに数値を入力してもらうように要求します。

その後、if文を用いて入力値が正の数であるかどうかを判定します。

正の場合(input >= 0)、四捨五入を実行し、結果を表示します。

そうでない場合、つまり入力値が負の場合には、四捨五入を行わずに入力値をそのまま表示します。

こういった条件によって四捨五入を制御する場合には、if文やswitch文などの条件分岐構文を用いることで実現できます。

このような条件分岐と四捨五入の組み合わせは、例えば売上データの処理や気温データの整理など、現実世界の様々な場面で役立つでしょう。

○サンプルコード9:関数を使用した四捨五入

C言語の力強さの一つは、必要な処理をまとめて関数として定義し、それを何度でも再利用できるという特性です。

四捨五入処理も関数として定義することで、プログラム全体で一貫した結果を出力することができます。

特定の精度で四捨五入を行う関数を定義し、それを利用して四捨五入を行うC言語のコードを紹介します。

#include<stdio.h>
#include<math.h>

// 関数の定義
double roundWithPrecision(double num, int precision) {
    double multiplier = pow(10.0, precision);
    return round(num * multiplier) / multiplier;
}

int main() {
    double input;
    int precision;
    printf("数値を入力してください: ");
    scanf("%lf", &input);
    printf("精度を入力してください: ");
    scanf("%d", &precision);

    double rounded = roundWithPrecision(input, precision);
    printf("四捨五入した結果: %.2f\n", rounded);

    return 0;
}

このコードでは、roundWithPrecisionという関数を自分で定義し、四捨五入を行っています。

この関数は2つのパラメーター、numprecisionを持ちます。

numは四捨五入される数値で、precisionは四捨五入の精度(小数点以下何桁目で四捨五入するか)を表します。

この関数では、先ほど説明した「精度を指定した四捨五入」のアルゴリズムが使われています。

関数の使用により、プログラムが読みやすくなり、再利用性が高まります。

また、この関数を使うことで、プログラム全体で一貫した四捨五入処理が可能になります。

四捨五入に関するこのガイドの最後のサンプルコードでは、実世界の応用例を通じて、四捨五入がどのように利用されるかを表します。

○サンプルコード10:四捨五入を利用した実世界の応用例

さまざまなサンプルコードを通じて、C言語での四捨五入の方法を学んできました。最後に、四捨五入を利用した実世界の応用例として、商品の販売価格を計算するプログラムを作成してみましょう。

例えば、商品の原価が12345円、利益率が28%のとき、販売価格は原価に利益率を加えた金額となります。この場合、販売価格は小数点以下も出る可能性がありますが、通常は四捨五入して整数の金額にします。

この問題を解決するためのサンプルコードを以下に示します。

#include <stdio.h>

int main() {
    int cost = 12345; // 原価
    double profit_rate = 0.28; // 利益率
    double price; // 販売価格

    price = cost * (1 + profit_rate); 
    price = round(price); // 四捨五入

    printf("販売価格は%.0f円です。\n", price); // 販売価格の表示

    return 0;
}

このコードでは、四捨五入を使って商品の販売価格を計算するコードを紹介しています。この例では、原価と利益率を用いて販売価格を計算し、その結果を四捨五入しています。

このコードを実行すると、「販売価格は15781円です。」という結果が得られます。このように、C言語での四捨五入は、実際のビジネスシーンでも活用できることを理解していただけたかと思います。

●四捨五入を行う際の注意点

四捨五入を行う際には、いくつかの注意点があります。

まず、C言語のround関数は、引数が正の場合は四捨五入を、引数が負の場合は絶対値が同じになるような最も近い整数を返すという特性があります。

これは、四捨五入を行う際の「0.5」を境にして切り上げ、切り捨てを行う特性となります。

次に、小数の精度にも注意が必要です。

小数の計算は二進数で行われるため、10進数で考えた場合とは結果が微妙に異なることがあります。

これは、「浮動小数点数の誤差」と呼ばれる問題で、これを理解し、適切に対処することが重要です。

また、C言語ではround関数を使用するためには、math.hというヘッダーファイルをインクルードする必要があります。

このことも忘れずに覚えておきましょう。

●四捨五入の対処法とカスタマイズ方法

四捨五入には多くの応用があり、一部をご紹介します。

例えば、特定の桁で四捨五入を行いたい場合や、特定のルールで丸めを行いたい場合など、具体的なニーズに合わせて四捨五入の方法をカスタマイズすることが可能です。

そのようなカスタマイズの一例として、小数第2位で四捨五入を行うコードを紹介します。

#include <stdio.h>
#include <math.h>

int main() {
    double num = 123.456;
    num = round(num * 10) / 10; // 小数第2位で四捨五入
    printf("%.1f\n", num); // 結果の表示

    return 0;
}

このコードでは、数値を10倍してからround関数を適用し、その結果を10で割ることで、小数第2位で四捨五入を行っています。

このような工夫をすることで、自由な桁での四捨五入が可能となります。

この他にも、特定のルールに従った丸め処理を行いたい場合は、自分で丸め処理を行う関数を定義することも一つの方法です。

まとめ

この記事では、C言語での四捨五入の方法を詳しく解説しました。

四捨五入は、プログラミングのさまざまな場面で用いられる重要な概念です。

本記事を通じて、C言語での四捨五入の方法をマスターしていただければ幸いです。

また、この記事を機に、C言語の他の機能についても学んでみてください。

C言語は強力で汎用性の高い言語であり、様々な分野で活用できます。

C言語を理解し、使いこなせるようになると、あなたのプログラミングの可能性が大きく広がるでしょう。