目录
《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美元。
退出程序。