C Primer Plus(第五版)學習(六)

接着上次第7章繼續寫下去,現在的程序代碼比較大不像前幾張可以直接寫出來,更多的需要在紙上先畫出流程圖,勾勒出哪些部分用函數來寫,函數的入口與返回等等。

不多說直接上圖:

8.修改練習7中的假設a,是程序提供一個選擇工資等級的菜單。用switch選擇工資等級。程序運行的開頭應該像這樣:

***************************************************************************

Enter the number corresponding to the desired pay rate or action:

!) $8.75/hr                                2) $9.33/hr

3)$10.00/hr                              4) $11.20/hr

5)quit

****************************************************************************

如果選擇1到4,那麼程序應該請求輸入工作小時數。程序應該一直循環運行,直到輸入5.如果輸入1到5以外的選項,那麼程序應該提醒用戶合適的選項是哪些,然後再循環。用#define爲各種工資等級和稅率定義常量。

#include <stdio.h>
#define FOUD_1 8.75//基本工資8.75美元/小時
#define FOUD_2 9.33//基本工資9.33美元/小時
#define FOUD_3 10.00//基本工資10.00美元/小時
#define FOUD_4 11.20//基本工資11.20美元/小時
#define RAT_1 0.15//稅率前300美元爲15%
#define RAT_2 0.20//下一個150美元爲20%
#define RAT_3 0.25//餘下的爲25%
#define B_T 40//加班時間分界點
#define BREAK_1 300//分界點300美元
#define BREAK_2 450//分界點450美元


double tax(double fg);//用來計算稅金
void tishi(void);//用來輸出提示信息
double grade(char cc);//選擇工資等級

int main(void)
{
	double total=0,taxes=0,netpay=0;//總額,稅金,淨工資
	int time;//一週工作時間
	char c;
	double foud;//基本工資,也作標誌位
	tishi();
	printf("請輸入工資等級:");
	while ((c=getchar())!='5')
	{
		if('\n'==c)//忽略換行符
			continue;
		foud=grade(c);//所選擇的基本工資foud
		if (0==foud)
		{
			printf("請輸入正確的選項:\n");
				continue;
		}
		printf("請輸入您一週工作時間:");
		scanf("%d",&time);
		if (time<=B_T)
		{
			total=foud*time;
			taxes=tax(total);
			netpay=total-taxes;
		}
		else
		{
			total=foud*B_T+foud*(time-B_T)*1.5;
			taxes=tax(total);
			netpay=total-taxes;
		}
		printf("您的工資總額 %.1f,稅金 %.1f,淨工資 %.1f.\n",total,taxes,netpay);
		printf("請輸入工資等級:");
	}
	
}
//函數:計算所得稅金
double tax(double fg)
{
	if (fg<=BREAK_1)
		return (fg*RAT_1);
	else if(fg<=BREAK_2)//總額在300美元到450美元之間
		return ((fg-BREAK_1)*RAT_2+BREAK_1*RAT_1);
	else//總額超過450美元的時候 
		return (BREAK_1*RAT_1+(BREAK_2-BREAK_1)*RAT_2+(fg-BREAK_2)*RAT_3);
}


//函數:用來直到用戶輸入的提示信息
void tishi(void)
{
	int i;
	for(i=0;i<65;i++)
		printf("*");
	printf("\n");
	printf("Enter the number correspond to the desired pay rate or action:\n");
	printf("1) $8.75/hr		2) $9.33/hr\n"
		   "3) $10.00/hr		4) $11.20/hr\n"
		   "5) quit\n");
	for(i=0;i<65;i++)
		printf("*");
	printf("\n");

}

//函數:選擇工資等級
double grade(char cc)
{
	switch(cc)
	{
	case '1':
		return FOUD_1;
		break;
	case '2':
		return FOUD_2;
		break;
	case '3':
		return FOUD_3;
		break;
	case '4':
		return FOUD_4;
		break;
	default:
		return 0;
		
	}
}

9.編寫一個程序,接受一個整數輸入,然後顯示所有小於或等於該數的素數。

#include <stdio.h>
int main(void)
{
	int num;
	int div;
	int cout=0;
	int member=2;
	printf("請輸入一個整數:");
	scanf("%d",&num);
	printf("小於或等於該數的素數有:");
	while(member++<=num)
	{
		for(div=2;div<=member;div++)
		{
			if(member%div==0)
			{
				continue;
			}
			else
			{
				printf("%4d",member);
			}
		}
	}
	printf("\n");
	

}

10.1988年United States Federal Tax Schedule是近期最基本的。它分爲4類,每類有兩個等級。下面是其摘要:美元爲應徵稅的收入:

種類 稅金
單身 前17,850美元按15%,超出部分按28%
戶主
前23,900美元按15%,超出部分按28%
已婚,共有 前29,750美元按15%,超出部分按28%
已婚,離異 前14,875美元按15%,超出部分按28%
例如,有20000美元應徵稅收入的單身僱傭勞動者應繳納稅金0.15X17850美元+0.28X(20000美元-17850美元)。編寫一個程序,讓用戶指定稅金種類和應徵稅收入,然後計算稅金。使用循環以便用戶可以多次輸入。
#include <stdio.h>
#define BREAK_1 17850//單身收稅分界點
#define BREAK_2 23900//戶主
#define BREAK_3 29750//已婚,共有
#define BREAK_4 14875//已婚,離異
#define RATE_1 0.15//在分界點之前的稅率
#define RATE_2 0.28//在分界點之後的稅率

void menu(void);

int main(void)
{
	char varity;//稅金種類
	int taxes;//用戶指定的應徵稅收入
	double bill=0;//稅金
	menu();
	printf("請用戶輸入稅金種類和應徵稅收入:");
	scanf("%c%d",&varity,&taxes);
	while('#'!=varity)//當用戶第一個輸入爲#號時退出
	{
		switch(varity)
		{
		case '1'://單身情況的稅金
			if(taxes<=BREAK_1)
				bill=taxes*RATE_1;
			else
				bill=BREAK_1*RATE_1+(taxes-BREAK_1)*RATE_2;
			break;
		case '2'://戶主
			if(taxes<=BREAK_2)
				bill=taxes*RATE_1;
			else
				bill=BREAK_2*RATE_1+(taxes-BREAK_2)*RATE_2;
			break;
		case '3'://已婚,共有
			if(taxes<=BREAK_3)
				bill=taxes*RATE_1;
			else
				bill=BREAK_3*RATE_1+(taxes-BREAK_3)*RATE_2;
			break;
		case '4'://已婚,離異
			if(taxes<=BREAK_4)
				bill=taxes*RATE_1;
			else
				bill=BREAK_4*RATE_1+(taxes-BREAK_4)*RATE_2;
			break;
		default:
			break;
		}
		printf("稅金是%.1f.\n",bill);
		printf("請用戶輸入稅金種類和應徵稅收入:");
		scanf("%c,%d",&varity,&taxes);
	}
	return 0;
}

//
void menu(void)
{
	printf("1)單身		2)戶主\n"
			"3)已婚,共有	4)已婚,離異\n");
}

11.ABC Mail Order Grocery朝鮮魚的售價是1.25/磅,甜菜的售價是0.65美元/磅,胡蘿蔔的售價是0.89美元/磅。在添加運輸費用之前,他們爲100美元的訂單提供5%的打折優惠。對5磅或以下的訂單收取3.50美元的運輸和裝卸費用;超過5磅而不足20磅的定單收取10.00美元的運輸和裝卸費用;20磅或以上的運輸,在8美元的基礎上每磅加收0.1美元。編寫程序,在循環中使用switch語句,以便對輸入a的響應是讓用戶輸入所需的朝鮮魚磅數,b爲甜菜的磅數,c爲胡蘿蔔的磅數,而q允許用戶退出訂購過程,然後程序計算總費用、折扣和運輸費用(如果有運輸費的話),以及總數。隨後程序應該顯示所有的購買信息:每磅的費用、訂購的磅數

該訂單每種蔬菜的費用

訂單的總費用

折扣,如果有的話加上運輸費用,以及所有費用的總數。

#include <stdio.h>
#define PRICE_1 1.25//朝鮮魚的單價
#define PRICE_2 0.65//甜菜的單價
#define PRICE_3 0.89//胡蘿蔔的單價
#define BREAK_1 5//分界點1
#define BREAK_2 20//分界點2

void menu(void);//用來顯示提示信息
int buy(void);//訂購方式
double total(void);//計算花費

int weight_1;//訂購朝鮮魚的磅數
int weight_2;//訂購甜菜的磅數
int weight_3;//訂購胡蘿蔔的磅數

int main(void)
{
	int heavy;//總重量
	double cost_1,cost_2,cost_3;
	double traffic;//運輸費用
	menu();//打印提示信息
	heavy=buy();//一共有heavy磅
	cost_1=total();
	if(cost_1>100)
		cost_2=cost_1*0.05;

	if(heavy<=BREAK_1)
		traffic=3.50;
	else if(heavy<BREAK_2)
		traffic=10.00;
	else
		traffic=(heavy-8)*0.1;
	cost_3=cost_2+traffic;

	printf("訂購的總榜數%d\n"
			"訂朝鮮魚話費%.1f,訂甜菜花費%.1f,訂胡蘿蔔花費%.1f\n",heavy,weight_1*PRICE_1,
			weight_1*PRICE_2,weight_3*PRICE_3);
	printf("訂單的總費用%.1f\n",cost_1);

	return 0;
}

//用來顯示提示信息
void menu(void)
{
	printf("*******************************\n");
	printf("請用戶按如下菜單項選擇:\n");
	printf("a)朝鮮魚磅數	b)甜菜磅數\n"
			"c)胡蘿蔔磅數	q)退出訂購\n");
	printf("********************************\n");
}



//訂購方式
int buy(void)
{
	char fg;
	while((fg=getchar())!='q')
	{
		switch(fg)
		{
		case 'a':
			printf("請輸入朝鮮魚的磅數:");
			scanf("%d",&weight_1);
			break;
		case 'b':
			printf("請輸入甜菜的磅數:");
			scanf("%d",&weight_2);
			break;
		case 'c':
			printf("請輸入胡蘿蔔的磅數:");
			scanf("%d",&weight_3);
			break;
		default:
			break;
		}
	}
	return (weight_1+weight_2+weight_3);//共有多少磅
}

//計算花費
double total(void)
{	return (weight_1*PRICE_1+weight_2*PRICE_2+weight_3*PRICE_3);
}


	
	


發佈了35 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章