A君は、弁当販売店の経理係を担当している。業務を詳細に分析するため、1日の売り上げデータの合計金額を求めるプログラムを作成することにした。A君は、仕様(リスト1)とプログラム(リスト2)を作成した。
結果が正しいことを確認するため、B君にExcelで合計金額を求めるシートの作成を依頼し、リスト1内の表1-1に示す入力データを使用し、実行結果を同じになるかテストした。
比較した結果、2人の計算結果が1円だけ異なることが分かった(実行結果はリスト3-1を参照)。不思議に思った2人は、別のデータで確認した。表1-2のデータを使用したところ、結果は一致した(リスト3-2参照)。上記の情報から、リスト3-1で2人の結果が一致せず、リスト3-2では一致した原因を推察せよ。
本プログラムは、店の売り上げデータから、合計金額を計算するプログラムである。
店の売り上げデータは、No.、商品名、数量、単価(税別)とする。表1-1、表1-2にデータ例を示す。
| No. | 商品名 | 数量 | 単価(税別) |
|---|---|---|---|
| 1 | スポーツドリンク | 6 | 74 |
| 2 | 炭酸飲料 | 9 | 59 |
| 3 | おにぎり | 8 | 97 |
| 4 | サンドイッチ | 15 | 153 |
| 表1-1 売り上げデータ1 | |||
| No. | 商品名 | 数量 | 単価(税別) |
|---|---|---|---|
| 1 | スポーツドリンク | 32 | 74 |
| 2 | 炭酸飲料 | 81 | 59 |
| 3 | おにぎり | 101 | 97 |
| 4 | サンドイッチ | 40 | 153 |
| 表1-2 売り上げデータ2 | |||
合計金額の計算式を以下に示す。なお、消費税は8%として計算する。
合計金額は、コンソールに表示する。
入力データは、表1-1、表1-2のみを使用する。
その他のバグや問題点は考慮せず、1円違いの原因だけを考察すること。
リスト1 売上金額計算プログラムの仕様
/*
売上金額計算プログラム
SalesCalculator.c
*/
#define TAX 1.08 //税率(8%)
#include <stdio.h>
//売り上げデータ構造体
typedef struct {
int no;
char name[64];
int num;
int price;
}SALES_DATA;
int main(void) {
//商品データの宣言
SALES_DATA sales_data1[4] = {
{1,"スポーツドリンク",6, 74},
{2,"炭酸飲料",9, 59},
{3,"おにぎり",8, 97},
{4,"サンドイッチ",15,153},
};
SALES_DATA sales_data2[4] = {
{1,"スポーツドリンク",32, 74},
{2,"炭酸飲料",81, 59},
{3,"おにぎり",101, 97},
{4,"サンドイッチ",40,153},
};
int i;
int subtotal1 = 0; //小計1
int subtotal2 = 0; //小計2
int total1 = 0; //合計1
int total2 = 0; //合計2
//4件分の売り上げデータの小計を計算する
for (i = 0; i < 4; i++) {
subtotal1 = subtotal1 + sales_data1[i].num * sales_data1[i].price;
subtotal2 = subtotal2 + sales_data2[i].num * sales_data2[i].price;
}
//小計に消費税を乗算する
total1 = subtotal1 * TAX;
total2 = subtotal2 * TAX;
//画面に合計金額を表示する
printf("合計金額 = %d\n", total1);
printf("合計金額 = %d\n", total2);
return 0;
}
Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム