2007年9月4日 星期二

小考二(B) 解答


/* C Programming Quiz 2B */
/*
小考二題目:某零件進口商的驗收退貨制度如下表

進口數 <= 5000
-------------------------------------------------------------
狀況: 瑕疵品 <= 2% 2% < 瑕疵品 <= 5% 瑕疵品 > 5%
-------------------------------------------------------------
退貨數: 0 瑕疵數 全數退貨
-------------------------------------------------------------
-------------------------------------------------------------
進口數 > 5000
-------------------------------------------------------------
狀況: 瑕疵品 <= 3% 3% < 瑕疵品 <= 6% 瑕疵品 > 6%
-------------------------------------------------------------
退貨數: 0 瑕疵數 全數退貨
-------------------------------------------------------------

例一:進口 4000 個零件,瑕疵品有 400 個,佔比例 10%,所以退貨數為 4000 個。
例二:進口 6000 個零件,瑕疵品有 200 個,佔比例 3.33%,所以退貨數為 200 個。

輸入值:第一個數字是進口數,第二個數字是瑕疵數
輸出值:退貨數
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
float import_num, bad_item, return_num, return_limit; /* 進口數、瑕疵數、退貨數、退貨條件 */
printf("輸入進口數 -> ");
scanf("%f", &import_num);
printf("輸入瑕疵數 -> ");
scanf("%f", &bad_item);

/* 你的程式從這裡開始 */
if(import_num <= 0)
printf("請輸入大於0的數值\n");
if(import_num < bad_item)
printf("瑕疵品不可能比進口量大,請輸入合理數值!!!\n");
if(import_num > 0 && import_num <= 5000)
{
return_limit = bad_item / import_num;
if(return_limit <= 0.02)
return_num = 0;
if(return_limit > 0.02 && return_limit <= 0.05)
return_num = bad_item;
if(return_limit > 0.05)
return_num = import_num;
}

if(import_num > 5000)
{
return_limit = bad_item / import_num;
if(return_limit <= 0.03)
return_num = 0;
if(return_limit > 0.03 && return_limit <= 0.06)
return_num = bad_item;
if(return_limit > 0.06)
return_num = import_num;
}


printf("退貨數為 %.0f 個\n", return_num);
system("pause");
return 0;
}

小考二(B)題目
返回小考目錄
回到首頁

3 則留言:

網路路人丙 提到...

題目好像只有進口數、瑕疵數、退貨數,版主好像自行訂定退貨條件,輸出結果沒錯,不過如果依原題比對,好像不符合解答。可以請版主修改一下ㄇ^^

順道一提,即使多加訂定退貨條件,進口數、瑕疵數、退貨數仍然以%d(十進位法)顯示,只有訂定的退貨條件應以%f(浮點形式)呈現,所以答案的退貨數應該改為%d!

David Kuo 提到...

您好,皆宣告成浮點數只是方便計算,開始題目原型也只是一個雛形,並不是您一定要參照這些變數形態,而最後使用 %d 或 %.0f 的結果是一樣的。如果您有更好解法,可以提出討論或參考。

匿名 提到...

可以在判斷式直接強制轉型,例如if(bad_item/(double)import_num<= 0.03)就可以達到目的了