首页 新闻 搜索 专区 学院

关于C,工资信息程序的编写!!!出现这种问题,是不是在数据类型上出现问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2015-10-09 21:22
#include<stdio.h>
#define PAY_OHOUR 10//每小时的工资
#define WORK_OVERTIME 1.5//加班下的时间倍数
#define NET_TAX_ONE 0.15//<=300工资税率
#define NET_TAX_TWO 0.20//下一个150以内工资的税率
#define NET_TAX_THREE 0.25//扣除450后余下工资的税率
int main()
{
    int work_hour=0;//工作小时数
    int add_work_time=0;//加班的小时数
    int normal_work_pay=0;//正常上班的总工资
    int add_work_pay=0;//加班下的总工资
    double tax_normal=0;//税金
    double tax_normal_two=0;
    double tax_unnormal_one=0;
    double tax_unmormal_two=0;

    
    normal_work_pay = work_hour*PAY_OHOUR;//正常上班的工资总额
    tax_normal = work_hour*PAY_OHOUR*NET_TAX_ONE;//正常上班收取的税金
    add_work_pay = 40 * PAY_OHOUR + (work_hour - 40)*WORK_OVERTIME*PAY_OHOUR;//加班下的工资总额
    tax_normal_two = 300 * NET_TAX_ONE + (normal_work_pay - 300)*NET_TAX_TWO;
    tax_unnormal_one = 300 * NET_TAX_ONE + (add_work_pay - 300)*NET_TAX_TWO;
    tax_unmormal_two = 300 * NET_TAX_ONE + 150 * NET_TAX_TWO + (add_work_pay - 450)*NET_TAX_THREE;
    
    


    printf("请告诉程序您本周的工作时长:");
    while (scanf("%d", &work_hour) == 1)
    {
        if (work_hour <= 40 && work_hour > 0) //正常工作下的工资信息
        {
            printf("本周您的上班时长为%d,属于正常上班时长\n", work_hour);
            printf("正常上班时长下您获得的总工资为:%d\n", normal_work_pay);
            if(normal_work_pay-300<0)
            {
                printf("国家将收取%.2f元税金\n", tax_normal);
                printf("最后您可得净工资为%.2f\n", normal_work_pay - tax_normal);
            }
            else if (normal_work_pay - 300 > 0 && normal_work_pay - 300 <= 100)
            {
                printf("国家将收取%.2f元税金\n", tax_normal_two);
                printf("最后您可得净工资为%.2f\n", normal_work_pay - tax_normal_two);
            }
            else
                break;
        }
        else
        {
            printf("您本周工作时长为%d,其中%d的时长为加班时长\n", work_hour, work_hour - 40);
            printf("加班下的工资总额为:%d\n", add_work_pay);
            if (add_work_pay - 300 > 0 && add_work_pay <= 150)
            {
                printf("国家将收取%.2f元税金\n", tax_unnormal_one);
                printf("最后您可得的净工资为%.2f\n", add_work_pay - tax_unnormal_one);
            }
            else
            {

                printf("国家将收取%.2f元税金\n", tax_unmormal_two);
                printf("最后您可得的净工资为%.2f\n", add_work_pay - tax_unmormal_two);
            }
        }
    }
    return 0;


}
资深呆的主页 资深呆 | 初学一级 | 园豆:37
提问于:2015-08-02 14:10
< >
分享
所有回答(3)
0

大致看了下,没装C编译器,小编译工具win8也编译不了、、、

你这个最明显的错误是 计算在前面了,你是通过键盘敲的 工作时长,应该在while 循环里里面调用的你工资计算,或者把你工资计算的修改为宏定义

#include<stdio.h>
#define PAY_OHOUR 10//每小时的工资
#define WORK_OVERTIME 1.5//加班下的时间倍数
#define NET_TAX_ONE 0.15//<=300工资税率
#define NET_TAX_TWO 0.20//下一个150以内工资的税率
#define NET_TAX_THREE 0.25//扣除450后余下工资的税率
int main()
{
    int work_hour=0;//工作小时数
    int add_work_time=0;//加班的小时数
    int normal_work_pay=0;//正常上班的总工资
    int add_work_pay=0;//加班下的总工资
    double tax_normal=0;//税金
    double tax_normal_two=0;
    double tax_unnormal_one=0;
    double tax_unmormal_two=0;

    printf("请告诉程序您本周的工作时长:");
    while (scanf("%d", &work_hour) == 1)
    {
    
       normal_work_pay = work_hour*PAY_OHOUR;//正常上班的工资总额
    tax_normal = work_hour*PAY_OHOUR*NET_TAX_ONE;//正常上班收取的税金
    add_work_pay = 40 * PAY_OHOUR + (work_hour - 40)*WORK_OVERTIME*PAY_OHOUR;//加班下的工资总额
    tax_normal_two = 300 * NET_TAX_ONE + (normal_work_pay - 300)*NET_TAX_TWO;
    tax_unnormal_one = 300 * NET_TAX_ONE + (add_work_pay - 300)*NET_TAX_TWO;
    tax_unmormal_two = 300 * NET_TAX_ONE + 150 * NET_TAX_TWO + (add_work_pay - 450)*NET_TAX_THREE;


        if (work_hour <= 40 && work_hour > 0) //正常工作下的工资信息
        {
            printf("本周您的上班时长为%d,属于正常上班时长\n", work_hour);
            printf("正常上班时长下您获得的总工资为:%d\n", normal_work_pay);
            if(normal_work_pay-300<0)
            {
                printf("国家将收取%.2f元税金\n", tax_normal);
                printf("最后您可得净工资为%.2f\n", normal_work_pay - tax_normal);
            }
            else if (normal_work_pay - 300 > 0 && normal_work_pay - 300 <= 100)
            {
                printf("国家将收取%.2f元税金\n", tax_normal_two);
                printf("最后您可得净工资为%.2f\n", normal_work_pay - tax_normal_two);
            }
            else
                break;
        }
        else
        {
            printf("您本周工作时长为%d,其中%d的时长为加班时长\n", work_hour, work_hour - 40);
            printf("加班下的工资总额为:%d\n", add_work_pay);
            if (add_work_pay - 300 > 0 && add_work_pay <= 150)
            {
                printf("国家将收取%.2f元税金\n", tax_unnormal_one);
                printf("最后您可得的净工资为%.2f\n", add_work_pay - tax_unnormal_one);
            }
            else
            {

                printf("国家将收取%.2f元税金\n", tax_unmormal_two);
                printf("最后您可得的净工资为%.2f\n", add_work_pay - tax_unmormal_two);
            }
        }
    }
    return 0;


}

 

 

浴子风 | 园豆:521 (小虾三级) | 2015-08-04 13:15
0

哦哦,你这个问题是工资改为宏定义

fcyh | 园豆:568 (小虾三级) | 2017-07-19 08:31
0

先计算再输出obviously是错的

srf | 园豆:202 (菜鸟二级) | 2017-12-07 20:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册