关于C primer plus的两个小问题。

考前一个月四级 发布于 2013/08/28 17:57
阅读 194
收藏 0

CPP第7章第10题税收问题变化一步到位的疑问

它分为4类,每类有两个等级。下面是其摘要;美元数为应征税的收入。
┏━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃    种  类        ┃    税  金                                                  ┃
┃单身              ┃前17·850美元按15%,超出部分按28%   ┃
┃户主              ┃前23,900美元按15%,超出部分按28%┃
┃已婚,共有   ┃前29,750美元按15%,超出部分按28% ┃
┃已婚,离异   ┃前14,875美元按l5%,超出部分按28%  ┃
  例如,有20 000美元应征税收入的单身雇佣劳动者应缴税金0.15×17 850美元+0.28×(20 000美元-17 850美元)。编写一个程序,让用户指定税金种类和应征税收入,然后计算税金。使用循环以便用户可以多次输入。
#include "stdio.h"
int get_int(void);
int main(void)
{
    float m,tax;
    while(1)
    {
    for(int n=0;n<40;n++) printf("*");
    printf("\n1:danshen\t\t2:huzhu\n3:gongyou\t\t4:liyi\n");
    printf("please input your money:\n");
    scanf("%d",&m);
    printf("please input your select:");
    switch(get_int())
        {
            case 1:if(m<17850) tax=m*0.15;
                   else tax=17850*0.15+(m-17850)*0.28;break;
            case 2:if(m<23900) tax=m*0.15;
                   else tax=23900*0.15+(m-23900)*0.28;break;
            case 3:if(m<29750) tax=m*0.15;
                   else tax=29750*0.15+(m-29750)*0.28;break;
            case 4:if(m<14875) tax=m*0.15;
              else tax=14875*0.15+(m-14875)*0.28;printf("tax is %f",tax);break;//我在这里添加一个prinft一样
            default:return;
        }
    printf("your tax is %f\n",tax);//为什么这里的tax总是0.
    }
}
int get_int(void)
{
    int num;
    char str[40];
    while(scanf("%d",&num)!=1)
    {
        gets(str);
        printf("Error.Please input another num:\n");
    }
    while(getchar()!='\n')
        continue;
    return num;
}

同样是switch的问题。  

  11. ABC Mail Order Grocery朝鲜蓟的售价是1.25美元/磅,甜菜的售价是0.65美元/磅,胡萝卜的售价是0.89美元/磅。在添加运输费用之前,他们为100美元的订单提供5%的打折优惠。对5磅或以下的定单收取3.50美元的运输和装卸费用;超过5磅而不足20磅的定单收取1O.OO美元的运输和装卸费用:加磅或以上的运输,在8美元基础上每磅加收0.1美元。编写程序,在循环中使用switch语句,以便对输入a的响应是让用户输入所需的朝鲜蓟磅数,b为甜菜的磅数,c为胡萝卜的磅数,而q允许用户退出订购过程。然后程序计算总费用、折扣和运输费用(如果有运输费的话),以及总数。随后程序应该显示所有的购买信息:每磅的费用、订购的磅数、该订单每种蔬菜的费用、订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。

#include "stdio.h"
int get_int();
int main(void)
{
    float x,a=0,b=0,c=0,d;
    while(1)
    {
    for(int n=0;n<40;n++)printf("*");
    printf("\na:chaoxianji\t\tb:tiancai\nc:huluobo\n");
    printf("please input your choice:\n");
    switch(get_int())
    {
        case a:printf("How much you need?");
               scanf("%f",&a);printf("you buy %fpond chaoxianji",a);break;
        case b:printf("How much you need?");
               scanf("%f",&b);printf("you buy %fpond tiancai",b);break;
        case c:printf("How much you need?");
               scanf("%f",&c);printf("you buy %fpond huluobo",c);break;/*case labol doesnotreducetoan integar*/
        case d:return;
        default:printf("please input a.b.c:");
    }
    }
    float cxj=1.25,tc=0.65,hlb=0.89,trans,discount;
    float s=a*cxj+b*tc+c*hlb;
    if((a+b+c)<=5) trans=3.5;
    else if((a+b+c<20)) trans=10.00;
    else trans=8+(20-(a+b+c))*0.1;
    if(s<100) discount=0;else discount=s*0.05;
    printf("chaoxianji:%f/pond\t\ttiancai:%f/pond\t\thuluobo:%f\n",cxj,tc,hlb);
    printf("chaoxianji:%fpond\t\ttiancai:%fpond\t\thuluobo:%fpond\n",a,b,c);
    printf("All of the chaoxianji is %f,tiancai is %f,huluobo is %f\n",cxj*tc,tc*b,hlb*c);
    printf("All of you buy is %f\n",s);
    printf("The tax is %f\n",discount);
    printf("The transmision is %f",trans);
    printf("The cost you should pay is %f",s-discount+trans);
}
int get_int()
{
    int alpha;
    char str[40];
    while(scanf("%d",&alpha)!=1)
    {
        gets(str);
        printf("Error,please input again:");
    }
    while(getchar()!='\n')
        continue;
    return alpha;
}

可能其他的输入细节还没考虑吧。

看了答案,不过在想为什么不能一步到位。。。


希望能看一下、谢谢。




加载中
返回顶部
顶部