這是阿貞的作業,我幫他寫XD~希望他自己有空練習練習,雖然說電機系很少寫程式,但是若會寫程式的話,會比別人強好多,況且會寫程式的人可以創造更多自己的東西,會很有成就感的!
題目:通話費計算
某家電信業者通話費共分四種月租費,分別有186、386、586、986四種類型,使用者可以只能任選一種來計費。使用月租費可以抵通話費,通話費若未超過月租費以月租費繳。若超過月租費則有折扣,折扣方式如下表。 現在請你們要撰寫一個程式來計算要繳納的費用,使用者輸入月租費的型式及通話時間,通話時間以秒數計算,經由程式計算後會輸出該繳納之費用以元計算單位,個位數以下小數點四捨五入。以下為,月租費折扣表:
月租費 通話費率 超過月租費1倍(包含1倍)以上之折扣
186元 0.09元/秒 8折
386元 0.08元/秒 7折
586元 0.07元/秒 6折
986元 0.06元/秒 5折
程式執行說明:
輸入:386 36000
輸出:2016
第一個數值表示月租費型式是選擇386元,第二個數值為通話時間36000秒,其中通話費為0.08*36000 = 2880元,2880大於等於2*386一倍以上,因此再給予0.8的折扣,通話費就變成2016元。
我的C++程式碼如下:
/**
Theme: 計算通話費
Compiler: Dev C++ 4.9.9.2
Date: 100/04/25
Author: ShengWen
Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
using namespace std;
enum MonthRent{C186=186,C386=386,C586=586,C986=986};
enum Rate{R009=9,R008=8,R007=7,R006=6};
enum Discount{D08=8,D07=7,D06=6,D05=5};
int main(){
int choice, second;
double money;
while(true){
cout<<"請輸入月租費和秒數: ";
cin>>choice>>second;
switch(choice){
case C186:
money=second*R009*0.01;
if(money>=2*C186)
money*=D08*0.1;
if(money<=C186)
money=C186;
break;
case C386:
money=second*R008*0.01;
if(money>=2*C386)
money*=D07*0.1;
if(money<=C386)
money=C386;
break;
case C586:
money=second*R007*0.01;
if(money>=2*C586)
money*=D06*0.1;
if(money<=C586)
money=C586;
break;
case C986:
money=second*R006*0.01;
if(money>=2*C986)
money*=D05*0.1;
if(money<=C986)
money=C986;
break;
default:
cout<<"Wrong!!"<<endl;
money=0;
}
cout<<money<<endl;
}
return EXIT_SUCCESS;
}
執行結果:
請輸入月租費和秒數: 100 500
Wrong!!
0
請輸入月租費和秒數: 186 100
186
請輸入月租費和秒數: 386 36000
2016
請輸入月租費和秒數: 586 10000
700
請輸入月租費和秒數:
我使用enum來定義常數,但是只能定義整數常數,所以在case裡再乘以0.01和0.1。以上3個case都有測試,還有未定義也有輸出錯誤訊息。
以下程式碼是阿那達用C寫的:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int type, /*月租費的型式*/
seconds, /*通話時間*/
fee;
float discount_table[][3]={{186,0.09,0.8},{386,0.08,0.7},{586,0.07,0.6},{986,0.06,0.5}};
printf("請輸入月租費的型式,通話時間(秒):");
while(fscanf(stdin, "%d,%d", &type, &seconds)==2){
switch(type){
case 186:
if((fee=discount_table[0][1]*seconds)>=2*186){
fee*=discount_table[0][2];
printf("通話費為:%d 元\n",fee);
}else if(fee > type){
printf("通話費為:%d 元\n",fee );
}else{
printf("通話費為:%d 元\n",type );
}
break;
case 386:
if((fee=discount_table[1][1]*seconds)>=2*386){
fee*=discount_table[1][2];
printf("通話費為:%d 元\n",fee);
}else if(fee > type){
printf("通話費為:%d 元\n",fee );
}else{
printf("通話費為:%d 元\n",type );
}
break;
case 586:
if((fee=discount_table[2][1]*seconds)>=2*586){
fee*=discount_table[2][2];
printf("通話費為:%d 元\n",fee);
}else if(fee > type){
printf("通話費為:%d 元\n",fee );
}else{
printf("通話費為:%d 元\n",type );
}
break;
case 986:
if((fee=discount_table[3][1]*seconds)>=2*986){
fee*=discount_table[3][2];
printf("通話費為:%d 元\n",fee);
}else if(fee > type){
printf("通話費為:%d 元\n",fee );
}else{
printf("通話費為:%d 元\n",type );
}
break;
}
printf("\n請輸入月租費的型式,通話時間(秒):");
}
system("pause");
return 0;
}
程式結果如:
請輸入月租費的型式,通話時間(秒):100,500
請輸入月租費的型式,通話時間(秒):186,100
通話費為:186 元請輸入月租費的型式,通話時間(秒):386,36000
通話費為:2015 元請輸入月租費的型式,通話時間(秒):586,10000
通話費為:700 元請輸入月租費的型式,通話時間(秒):
看來也不錯!注意輸入的格式喔~2015和2016有誤差,大概是宣告的型態不一樣,所以計算的精準度也就有差異了!
隨意留個言吧:)~