《C Primer Plus》编程练习—第7章

《C Primer Plus》编程练习

第7章

1.exercise1.c

编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。

//exercise7.1
#include<stdio.h> 
int main(void)
{
	char ch;//输入字符 
	int spaceCount=0;//空格数 
	int lineCount=0;//换行数 
	int otherCount=0;//其他字符数 
	
	printf("Enter some text;enter # to quit.\n");
	printf("以下是输入:\n");
	while((ch=getchar())!='#')//读取输入 
	{
		if(ch==' ')
		{
			spaceCount++;
		}
		else if(ch=='\n')
		{
			lineCount++;
		}
		else
		{
			otherCount++;
		}
	}
	printf("以上是输入。\n");
	printf("一共有%d个空格,%d个换行,%d个其他字符\n",
	spaceCount,lineCount,otherCount);
	printf("Done!\n");
	
	return 0;
}
Enter some text;enter # to quit.
以下是输入:
hello,i am
mao,who are
you?
#over
以上是输入。
一共有2个空格,3个换行,23个其他字符
Done!

2.exercise2.c

编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。行打印8个字符。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。

#include<stdio.h> 
int main(void)
{
	char ch;//输入字符 
	int count=0;//字符数
	char input[255];//存放输入的数组 
	int i;//计数 
	
	printf("请输入文本;输入#程序停止。\n");
	printf("以下是输入:\n");
	while((ch=getchar())!='#')//读取输入,并存放在一个数组之中 
	{
		input[count]=ch;
		count++;
	}
	for(i=0;i<count;i++)
	{
		if(i%8==0&&i>0)//每打印8个换行 
		{
			printf("\n");
		}
		if(input[i]=='\n')//打印的是换行 
		{
			printf("'\\n'-%3d  ",input[i]);
		}
		else if(input[i]=='\t')//打印的是制表符 
		{
			printf("'\\t'-%3d  ",input[i]);
		}
		else//打印的是其他字符 
		{
			printf("' %c'-%3d  ",input[i],input[i]);
		}
	}
	printf("\nDone!\n");
	
	return 0;
}

输出示例:

请输入文本;输入#程序停止。
以下是输入:
abcd    efghij
klmnop#
'a'- 97  'b'- 98  'c'- 99  'd'-100  '\t'-  9  'e'-101  'f'-102  'g'-103
'h'-104  'i'-105  'j'-106  '\n'- 10  'k'-107  'l'-108  'm'-109  'n'-110
'o'-111  'p'-112
Done!

3.exercise3.c

编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。

//exercise7.3
#include<stdio.h> 
int main(void)
{
	int num;//输入的数字 
	int ecount=0;//偶数个数
	int ocount=0;//奇数个数 
	int esum=0;//偶数总值 
	int osum=0;//奇数总值 
	float eaverage;//偶数平均值 
	float oaverage;//奇数平均值
	
	printf("输入一些数字;输入0程序停止。\n");
	while(scanf("%d",&num)==1/*&&num!=0*/)//读取输入 
	{
		if(num==0)//输入0跳出循环,结束 
		{
			break;
		}
		if(num%2==0)//输入偶数,偶数个数加1,偶数总值增加 
		{
			ecount++;
			esum+=num;
		}
		else//输入奇数,奇数个数加1,奇数总值增加 
		{
			ocount++;
			osum+=num;
		}
		//printf("继续输入;输入0程序停止。\n");
	}
	if(ecount>0)
	{
		eaverage=esum/ecount;//偶数平均值
		printf("你输入%d个偶数,偶数平均值为%.2f。\n",ecount,eaverage);
	}
	else
	{
		printf("你没输入偶数。\n");
	}
	if(ocount>0)
	{
		oaverage=osum/ocount;//奇数平均值
		printf("你输入%d个奇数,奇数平均值为%.2f。\n",ocount,oaverage);
	}
	else
	{
		printf("你没输入奇数。\n");
	}
	printf("Done!\n");
	
	return 0;
}

输入2 4 6 8 10 1 3 5 7 9 0 11,输出如下:

输入一些数字;输入0程序停止。
2 4 6 8 10 1 3 5 7 9 0 11
你输入5个偶数,偶数平均值为6.00。
你输入5个奇数,奇数平均值为5.00。
Done!

4.exercise4.c

使用if else语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。

//exercise7.4
#include<stdio.h> 
int main(void)
{
	char ch;//输入字符 
	int count=0;//字符数
	char input[255];//存放输入的数组 
	int i;//计数
	int num=0;//替换次数 
	
	printf("请输入文本;输入#程序停止。\n");
	printf("以下是输入:\n");
	while((ch=getchar())!='#')//读取输入,并存放在一个数组之中 
	{
		input[count]=ch;
		count++;
	}
	for(i=0;i<count;i++)
	{
		if(input[i]=='.')//输入.则替换成! 
		{
			input[i]='!';
			printf("%c",input[i]);
			num++;//替换次数加一 
		}
		else if(input[i]=='!')//输入!替换成!! 
		{
			printf("%c%c",input[i],input[i]);
			num++;
		}
		else//原样打印 
		{
			printf("%c",input[i]);
		}
	}
	printf("一共进行了%d次替换。\n",num);//计算替换次数 
	
	return 0;
}

输出示例:

请输入文本;输入#程序停止。
以下是输入:
hello,i am mao.
i am fine!
#x
hello,i am mao!
i am fine!!
一共进行了2次替换。

5.exercise5.c

使用switch重写练习4.

//exercise7.5
#include<stdio.h> 
int main(void)
{
	char ch;//输入字符 
	int count=0;//字符数
	char input[255];//存放输入的数组 
	int i;//计数
	int num=0;//替换次数 
	
	printf("请输入文本;输入#程序停止。\n");
	printf("以下是输入:\n");
	while((ch=getchar())!='#')//读取输入,并存放在一个数组之中 
	{
		input[count]=ch;
		count++;
	}
	for(i=0;i<count;i++)
	{
		switch(input[i])//char类型也是整数类型 
		{
			case '.'://输入.则替换成! 
				input[i]='!';
				printf("%c",input[i]);
				num++;//替换次数加一 
				break;
			case '!'://输入!替换成!! 
				printf("%c%c",input[i],input[i]);
				num++;
				break;
			default://原样打印 
				printf("%c",input[i]);
				break;
		}
	}
	printf("一共进行了%d次替换.\n",num);//计算替换次数
		
	return 0;
}

输出实例同练习5.

6.exercise6.c

编写程序读取输入,读到#停止,报告ei出现的次数。
注意,该程序要记录前一个字符和当前字符。用“Receive your eieio award#”这样的输入来测试。

//exercise7.6
#include<stdio.h> 
int main(void)
{
	char ch;//输入字符 
	int count=0;//替换次数
	
	printf("请输入文本;输入#程序停止。\n");
	while((ch=getchar())!='#')//读取输入,输入#停止 
	{
		if(ch=='e')//当前字符是否为e 
		{
			if((ch=getchar())=='i')//e的下个字符是否为i 
			{
				count++;
			}
		}
	}
	printf("一共出现了%d次ei。\n",count);//计算替换次数 
	
	return 0;
}

输出如下:

请输入文本;输入#程序停止
Receive your eieio award#
一共出现了3次ei。

7.exercise7.c

编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设:
a.基本工资=1000美元/小时
b.加班(超过40小时)=1.5倍的时间
c.税率: 前300美元为15%
续150美元为20%
余下的为25%
用#define定义符号常量。不用在意是否符合当前的税法。

//exercise7.7
#include<stdio.h> 
#define WAGE 10
#define TIME 40
#define RATE1 0.15
#define RATE2 0.2
#define RTAE3 0.25
int main(void)
{
	float time;//工作时间 
	float wage;//工资总额 
	float income;//净收入 
	float taxation;//税金 
	
	printf("输入你一周工作的时间(小时):\n");	
	while(scanf("%f",&time)!=1||time<0||time>168)
	//判断输入的是否是数字且是否是合理的数字 
    {
        while(getchar()!='\n')//输入的不是换行,跳出内循环 
        {
        	continue;
		}
        printf("请输入正确的值:\n");
    }
	if(time<=30)//工作时间不足30小时 
	{
		wage=time*WAGE;//工资总额 
		taxation=wage*RATE1;//税金 
		income=wage-taxation; //净收入 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f。\n",
		wage,taxation,income);
	}
	else if(time>30&&time<=TIME)//30小时<工作时间<=40小时 
	{
		wage=time*WAGE;
		taxation=300*RATE1+(wage-300)*RATE2;//税金按两档交 
		income=wage-taxation; 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f。\n",
		wage,taxation,income);
	}
	else if(time<=168)//168小时工作时间>40小时 
	{
		wage=(TIME+(time-TIME)*1.5)*WAGE;//工作时间大于40部分按1.5倍算 
		taxation=300*RATE1+150*RATE2+(wage-450)*0.25;//税金按三档交 
		income=wage-taxation; 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f。\n",
		wage,taxation,income);
	}	
	
	return 0;
}

分别输入25,35,45,得到的3个输出如下:

输入你一周工作的时间(小时):
25
你的工资总额250.00,你的税金37.50,你的净收入212.50。
输入你一周工作的时间(小时):
35
你的工资总额350.00,你的税金55.00,你的净收入295.00。
输入你一周工作的时间(小时):
45
你的工资总额475.00,你的税金81.25,你的净收入393.75

8.exercise8.c

修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。使用switch完成工资等级选择。运行程序后,显示的菜单应该类似这样:

*****************************************************************
Enter the number corresponding to the desired pay rate or action:
1)$8.75/hr                            2)$9.33hr
3)$10.00/hr                           4)$11.20hr
5)quit
*****************************************************************

如果选择14其中的一个数字,程序应该询问用户工作的小时数。程序要通过循环运行,除非用户输入5。如果输入15以外的数字,程序应提醒用户输入正确的选项,然后再重复显示菜单提示用户输入。使用#define创建符号常量表示各工资等级和税率。

//exercise7.8
#include<stdio.h> 
#define WAGE1 8.75
#define WAGE2 9.33
#define WAGE3 10.00
#define WAGE4 11.20
#define TIME 40
#define RATE1 0.15
#define RATE2 0.2
#define RTAE3 0.25
void showMenu(void);//展示菜单 
void salary(double wage_class);//计算薪水 
int grade(void);//获取等级 
int main(void)
{
	int input;//获取用户输入的等级 
	
 	showMenu();//展示菜单
 	input=grade();//获取用户输入的等级
 	while(input!=5)//输入不为5则循环 
 	{
 		switch(input)//判断输入的等级 
		{
			case 1: 
				salary(WAGE1);//计算相应等级的薪水 
				break;
			case 2: 
				salary(WAGE2);
				break;
			case 3: 
				salary(WAGE3);
				break;
			case 4:
				salary(WAGE4);
				break;
		}
		showMenu();//继续展示菜单 
		input=grade();//进行下一个用户输入	
	}
	printf("程序退出。\n");
	
	return 0;
}
void showMenu(void)
{
	printf("*****************************************************************\n");
	printf("Enter the number corresponding to the desired pay rate or action:\n");
	printf("1)$8.75/hr                            2)$9.33hr\n");
	printf("3)$10.00/hr                           4)$11.20hr\n");
	printf("5)quit\n");
	printf("*****************************************************************\n");
	printf("输入你的等级:(1-4,按5退出):\n");
}
void salary(double wage_class)
{
	float time;//工作时间
	float wage;//工资总额 
	float income;//净收入 
	float taxation;//税金
	
	printf("输入你一周工作的时间(小时):\n");
	while(scanf("%f",&time)!=1||time<0||time>168)
	//判断输入的是否是数字且是否是合理的数字 
    {
        while(getchar()!='\n')//输入的不是换行,跳出内循环 
        {
        	continue;
		}
        printf("请输入正确的值:\n");
    }
	if(time<=30)//工作时间不足30小时 
	{
		wage=time*wage_class;//工资总额 
		taxation=wage*RATE1;//税金 
		income=wage-taxation; //净收入 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f.\n",
		wage,taxation,income);
	}
	else if(time>30&&time<=TIME)//30小时<工作时间<=40小时 
	{
		wage=time*wage_class;
		taxation=300*RATE1+(wage-300)*RATE2;//税金按两档交 
		income=wage-taxation; 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f.\n",
		wage,taxation,income);
	}
	else if(time<168)//168小时工作时间>40小时 
	{
		wage=(TIME+(time-TIME)*1.5)*wage_class;//工作时间大于40部分按1.5倍算 
		taxation=300*RATE1+150*RATE2+(wage-450)*0.25;//税金按三档交 
		income=wage-taxation; 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f.\n",
		wage,taxation,income);
	}
}
int grade(void)//获取用户输入的等级 
{
	double input;//获取用户输入的等级
	
	while(scanf("%lf",&input)!=1||input!=(int)input||input<1||input>5)
	//输入的不是1-5 
 	{
 		while(getchar()!='\n')//输入的不是换行,跳出内循环
 		{
 			continue;
		}
		printf("请输入正确的值:\n");
 	}
 	while(getchar()!='\n')//清除数字后面的非数字输入 
	{
		continue;
	}
 	
 	return (int)input;//返回输入的等级 
}

输入1d,响应为等级1;输入1.5,提示为错误输入,重新选择等级。没有解决输入1d的情况。

9.exercise9.c

编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。

//exercise7.9
#include<stdio.h> 
int isPrimer(int num);//判断数字是否为素数 
int main(void)
{
	double num;//输入的数字 
	int num1;//输入的数字转成int型 
	int primer;
	int i;
	
	printf("请输入一个正整数:\n");	 
	while(scanf("%lf",&num)!=1||num!=(int)num||num<=0)
	//判断输入的数字是不是正整数,不是则再一次输入 
	{
		while(getchar()!='\n')
		{
			continue;
		}
		printf("你输入的不是正整数,请重新输入一个正整数:\n");
	}
	num1=(int)num;//输入的数字转成int型
	if(num1==1)//输入的是1 
	{
		printf("1不是素数,没有比1小的素数。\n");
	}
	else if(num1==2)//输入的是2 
	{
		printf("2是素数,2是小于或等于2的素数。\n");
	}
	else//输入的是其他正整数 
	{
		for(i=2;i<=num1;i++)//从2开始循环判断小于等于该数的数是否为素数 
		{
			if(isPrimer(i)!=0)//调用函数,是素数则输出该数
			{
				printf("%d,",i);
			}
		}
		printf("是小于等于%d的素数。\n",num1);
	}
	
	return 0;
}
int isPrimer(int num)//判断是否为素数 
{
	int j=2;//计数 
	int i;
	for(i=2;i<num;i++)//从2开始循环判断,到比输入的数小1为止 
	{
		if(num%i!=0)//求模后不为0 
		{
			j++;
		}	
	}
	if(j==num)//判断该数是素数,返回该值 
	{
		return j;
	}
	
	return 0;//该数不是素数,返回0 
}

输出示例:

请输入一个正整数:
31
2,3,5,7,11,13,17,19,23,29,31,是小于等于31的素数。

10.exercise10.c

1988年的美国联邦税收计划是近代最简单的税收方案。它分为4个类别,每个类别有两个等级。下面是该税收计划的摘要(美元数为应征税的收入):
类别 税金
单身 17850美元按15%计,超出部分按28%计
户主 23900美元按15%计,超出部分按28%计
已婚,共有 29750美元按15%计,超出部分按28%计
已婚,离异 14875美元按15%计,超出部分按28%计
例如,一位工资为20000美元的单身纳税人,应缴纳税费0.15x17850+0.28x(20000-17850)美元。编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。程序应通过循环让用户可以多次输入。

//exercise7.10
#include<stdio.h> 
#define WAGE1 17850
#define WAGE2 23900
#define WAGE3 29750
#define WAGE4 14875
#define RATE1 0.15
#define RATE2 0.28
void taxation(float WAGE);//税金计算函数
int grade(void);//获取类别 
int main(void)
{	
	int input;//输入的类别 
	
	printf("请输入你的类别:\n");
	printf("单身--1  户主--2  已婚,共有--3  已婚,离异--4  退出--5.\n");
	input=grade();//获取用户输入的类别 
 	while(input!=5)//输入不为5则循环 
 	{
 		switch(input)//判断输入的等级 
		{
			case 1: 
				taxation(WAGE1);//计算相应等级的薪水 
				break;
			case 2: 
				taxation(WAGE2);
				break;
			case 3: 
				taxation(WAGE3);
				break;
			case 4:
				taxation(WAGE4);
				break;
		}
		printf("请输入你的类别:\n");
		printf("单身--1  户主--2  已婚,共有--3  已婚,离异--4  退出--5.\n"); 
		input=grade();//进行下一个用户输入	
	}
	printf("程序退出。\n"); 
	
	return 0;
}
void taxation(float WAGE)//税金计算函数 
{
	float wage;//工资总额 
	float taxation;//缴纳的税金 
	float income;//实际收入 
	
	printf("输入你的收入:\n");
	while(scanf("%f",&wage)!=1||wage<0)
		{
			while(getchar()!='\n')
			{
				continue;
			}
			printf("输入的收入有误,请重新输入:\n"); 
		}
	if(wage<WAGE)//工资低于收税点 
	{ 
		taxation=wage*RATE1; 
		income=wage-taxation; 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f.\n",
		wage,taxation,income);
	}
	else//工资高于收税点 
	{
		taxation=WAGE*RATE1+(wage-WAGE)*RATE2;//税金按两档交 
		income=wage-taxation; 
		printf("你的工资总额%.2f,你的税金%.2f,你的净收入%.2f.\n",
		wage,taxation,income);
	}
}
int grade(void)//获取用户输入的类别 
{
	double input;//获取用户输入的类别
	
	while(scanf("%lf",&input)!=1||input!=(int)input||input<1||input>5)
	//输入的不是1-5 
 	{
 		while(getchar()!='\n')//输入的不是换行,跳出内循环
 		{
 			continue;
		}
		printf("请输入正确的值:\n");
 	}
 	while(getchar()!='\n')//清除数字后面的非数字输入 
	{
		continue;
	}
 	
 	return (int)input;//返回输入的等级 
}

示例:

请输入你的类别:
单身--1  户主--2  已婚,共有--3  已婚,离异--4  退出--5.
1
输入你的收入:
20000
你的工资总额20000.00,你的税金3279.50,你的净收入16720.50.
请输入你的类别:
单身--1  户主--2  已婚,共有--3  已婚,离异--4  退出--5.
5
程序退出。

类似于练习8.

11.exercise11.c

ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价为1.15美元/磅,胡萝卜售价为1.09美元/磅。在添加运费之前,100美元的订单有5%的打折优惠。少于或等于5磅的订单收取6.5美元的运费和包装费,5磅~20磅的订单收取14美元的运费和包装费,超过20磅的订单在14美元的基础上每续重1磅增加0.5美元。编写一个程序,在循环中用switch语句实现用户输入不同的字母时有不同的响应,即输入a的响应是让用户输入洋蓟的磅数,b是甜菜的磅数,c是胡萝卜的磅数,q是退出订购。程序要记录累计的重量。即,如果用户输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜。然后,该程序要计算货物总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购买信息:物品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的话)、运费和包装费,以及所有的费用总额。

//exercise7.11
#include<stdio.h> 
#include<ctype.h>
#define a 2.05
#define b 1.15
#define c 1.09
#define COUNT 0.95
#define FEE1 6.5
#define FEE2 14.0
#define FEE3 0.5
#define WEIGHT1 5
#define WEIGHT2 20
char choice(void);//判断选项是否合理 
float weight(char input);
void price(float sum_weight_a,float sum_weight_b,float sum_weight_c,float all_weight);
int main(void)
{
	char input;//输入选项 
	float sum_weight_a=0;//购买的洋蓟总重 
	float sum_weight_b=0;
	float sum_weight_c=0; 
	float all_weight=0;//购买的商品总重 
	
	input=choice();
	while(input!='q')//选项不为q时用户可以一直购买商品 
	{
		switch(input)
		{
			case 'a':
					sum_weight_a+=weight(input);//累加购买的洋蓟重量 
					break;
			case 'b':
					sum_weight_b+=weight(input);
					break;
			case 'c':
					sum_weight_c+=weight(input);
					break;
		}
		input=choice();
	}
	printf("一共有洋蓟%.2f磅。\n",sum_weight_a);
	printf("一共有甜菜%.2f磅。\n",sum_weight_b);
	printf("一共有胡萝卜%.2f磅。\n",sum_weight_c);
	all_weight=sum_weight_a+sum_weight_b+sum_weight_c;
	printf("一共购买%.2f磅。\n",all_weight);
	price(sum_weight_a,sum_weight_b,sum_weight_c,all_weight);
	printf("退出程序。\n");
	
	return 0;
}
char choice(void)
{
	char ch;
	
	printf("请按提示输入:\n");
	printf("输入a购买洋蓟;输入b购买甜菜,输入c购买胡萝卜,输入q退出程序。\n");
	scanf(" %c",&ch);
	while(ch!='q'&&ch!='a'&&ch!='b'&&ch!='c')
	{
		printf("输入错误,请重新输入:\n");
		while(getchar()!='\n')
		{
			continue;
		}
		scanf(" %c",&ch);
	}
	
	return ch;
}
float weight(char input)
{
	float weight_a=0;
	float weight_b=0;
	float weight_c=0;
	
	if(input=='a')//判断选项进行购买响应商品 
	{
		printf("请输入购买的洋蓟的磅数:\n");
		while(scanf("%f",&weight_a)!=1||weight_a<=0)
		{
			printf("请重新输入一个正确洋蓟的磅数:\n");
			while(getchar()!='\n')
			{
				continue;
			}
		}
		return weight_a;//返回本次操作购买的洋蓟重量 
	}
	else if(input=='b')
	{
		printf("请输入购买的甜菜的磅数:\n");
		while(scanf("%f",&weight_b)!=1||weight_b<=0)
		{
			printf("请重新输入一个正确的甜菜磅数:\n");
			while(getchar()!='\n')
			{
				continue;
			}
		}
		return weight_b;
	}
	else if(input=='c')
	{
		printf("请输入购买的甜菜的磅数:\n");
		while(scanf("%f",&weight_c)!=1||weight_c<=0)
		{
			printf("请重新输入一个正确的甜菜磅数:\n");
			while(getchar()!='\n')
			{
				continue;
			}
		}
		return weight_c;
	}
	
}
void price(float sum_weight_a,float sum_weight_b,float sum_weight_c,float all_weight)
{
	float money_a;//购买洋蓟花的钱 
	float money_b;
	float money_c;
	float money_w;//购买商品花的钱 
	float money_all;//一共花的钱 
	
	money_a=sum_weight_a*a;
	money_b=sum_weight_b*b;
	money_c=sum_weight_c*c;
	money_w=money_a+money_b+money_c;
	
	printf("购买的洋蓟%.2f美元,购买的甜菜%.2f美元,购买的胡萝卜%.2f美元,"
	,money_a,money_b,money_c);
	printf("购买的商品为%.2f美元,",money_w);
	if(money_w<100)//购买的商品总价不超过100,不打折 
	{
		printf("不足100美元,不打折。\n",money_w);
	}
	else
	{		
		money_w=money_w*COUNT;
		printf("够100美元,打95折后为%.2f美元。\n",money_w);
	}
	
	if(all_weight<=WEIGHT1)//购买商品的总重不超过5磅 
	{
		money_all=money_w+FEE1;
		printf("购买的商品少于或等于5磅,收取%.2f美元的运费和包装费,共花费%.2f美元。\n"
		,FEE1,money_all);
	}
	else if(all_weight<=WEIGHT2)//购买商品的总重在5-20磅
	{
		money_all=money_w+FEE2;
		printf("购买的商品在5-20磅,收取%.2f美元的运费和包装费,共花费%.2f美元。\n"
		,FEE2,money_all);
	}
	else//购买商品的总重超过20磅
	{
		if((all_weight-(int)all_weight)>0)//如果不是整数磅,向上舍入 
		{
			money_all=money_w+FEE2+((int)all_weight-WEIGHT2+1)*FEE3;
		}
		else
		{
			money_all=money_w+FEE2+(all_weight-WEIGHT2)*FEE3;
		}
		printf("购买的商品超过20磅,收取%.2f美元的运费和包装费,共花费%.2f美元。\n"
		,money_all-money_w,money_all);
	}
}
请按提示输入:
输入a购买洋蓟;输入b购买甜菜,输入c购买胡萝卜,输入q退出程序。
a
请输入购买的洋蓟的磅数:
3.8
请按提示输入:
输入a购买洋蓟;输入b购买甜菜,输入c购买胡萝卜,输入q退出程序。
b
请输入购买的甜菜的磅数:
6.5
请按提示输入:
输入a购买洋蓟;输入b购买甜菜,输入c购买胡萝卜,输入q退出程序。
c
请输入购买的甜菜的磅数:
9.2
请按提示输入:
输入a购买洋蓟;输入b购买甜菜,输入c购买胡萝卜,输入q退出程序。
a
请输入购买的洋蓟的磅数:
4.3
请按提示输入:
输入a购买洋蓟;输入b购买甜菜,输入c购买胡萝卜,输入q退出程序。
q
一共有洋蓟8.10磅。
一共有甜菜6.50磅。
一共有胡萝卜9.20磅。
一共购买23.80磅。
购买的洋蓟16.61美元,购买的甜菜7.47美元,购买的胡萝卜10.03美元,购买的商品为34.11美元,不足100美元,不打折。
购买的商品超过20磅,收取16.00美元的运费和包装费,共花费50.11美元。
退出程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值