接着上次第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% |
#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);
}