C primer plus 第八章 练习7:

本文介绍了一个改进的薪资计算程序,包括用户输入小时基本工资、工作时间、税率等信息,并根据不同的工作时间区间进行税率计算,最后输出总工资、税金和净工资。
#include <stdio.h>
#include <windows.h>
void meum(void);
double xuanze(char ch);
int main(void)
{
    const int jbsj = 40;
    const double jb = 1.5;
    const double shui15 = 0.15;
    const double shui20 = 0.20;
    const double shui25 = 0.25;
    const int jd1 = 300;
    const int jd2 = 450;
    double sj, base, gz, shui, jgz;
    char ch;

    meum();
    while((ch = getchar()) != 'q')
    base = xuanze(ch);
    printf("请输入您工作的时间: \n");
//  while ((scanf_s("%lf", &sj)) == 1.00) {
    while ((sj = getchar()) != 'q'){
        if (sj > jbsj)
            sj = 40 + (sj - 40)*1.5;
        gz = sj * base;
        if (gz <= 300) {
            shui = gz * shui15;
            jgz = gz - shui;
        }
        else if (gz <= 450) {
            shui = jd1 * shui15 + (gz - jd1) * shui20;
            jgz = gz - shui;
        }
        else {
            shui = jd1 * shui15 + (jd2 - jd1) * shui20 + (gz - jd1) * shui25;
            jgz = gz - shui;
        }
        printf("您的工资为%.2f,税金为%.2f,净工资为%.2f.\n\n\n", gz, shui, jgz);

        fflush(stdin);
        meum();
    }
    system("pause");
    return 0;
}

void meum(void)
{
    printf("*************************************************************************\n");
    printf("a)$8.75/hr                          b)$9.33/hr\n");
    printf("c)$10.00/hr                         d)$11.20/hr\n");
    printf("q)quit  \n");
    printf("*************************************************************************\n");
    printf("请根据以上选项输入您的每小时的基本工资(q to quit): ");
}

double xuanze(char ch)
{
    double base;
    switch (ch) {
        case 'a': base = 8.75; break;
        case 'b': base = 9.33; break;
        case 'c': base = 10.00; break;
        case 'd': base = 11.20; break;
        default: printf("请输入a、b、c、d,q to quit.\n"); break;
    }
    printf("您的基本工资为%.2f/H.\n", base);
    return base;
}

以上写之后有不少问题存在,因此修正为以下代码:
感谢论坛qq423399099及ghx287524027指教。

#include <stdio.h>
#include <windows.h>
void meum(void);
double xuanze(char ch);
void jisuan(double base);
int main(void)
{
    double base = 0.00;
    char ch;

    meum();
    while((ch = getchar()) != 'q'){
        base = xuanze(ch);
        jisuan(base);
        fflush(stdin);
        meum();
    }
    system("pause");
    return 0;
}

void meum(void)
{
    printf("*************************************************************************\n");
    printf("a)$8.75/hr                          b)$9.33/hr\n");
    printf("c)$10.00/hr                         d)$11.20/hr\n");
    printf("q)quit  \n");
    printf("*************************************************************************\n");
    printf("请根据以上选项输入您的每小时的基本工资(q to quit): ");
}

double xuanze(char ch)
{
    double base;
    int flag = 1;

    while(1)
    {
        flag = 1;
        switch (ch) {
            case 'a':
            case 'A': base = 8.75; break;
            case 'b':
            case 'B': base = 9.33; break;
            case 'c':
            case 'C': base = 10.00; break;
            case 'd':
            case 'D': base = 11.20; break;
            default: 
                {
                printf("请输入a、b、c、d,q to quit.\n"); flag = 0; fflush(stdin); ch = getchar();break;
                 }
        }
        if(flag)
            break;
    }
    printf("您的基本工资为%.2f/H.\n", base);
    return base;
}

void jisuan(double base)
{
    const int jbsj = 40;
    const double shui15 = 0.15;
    const double shui20 = 0.20;
    const double shui25 = 0.25;
    const int jd1 = 300;
    const int jd2 = 450;
    double gz, sj, shui, jgz;
    gz = sj = shui = jgz = 0.00;

    printf("请输入您工作的时间: \n");
    scanf_s("%lf", &sj);
    if (sj > jbsj)
        sj = 40 + (sj - 40)*1.5;
    gz = sj * base;
    if (gz <= 300) 
        shui = gz * shui15;
    else if (gz <= 450) 
        shui = jd1 * shui15 + (gz - jd1) * shui20;
    else 
        shui = jd1 * shui15 + (jd2 - jd1) * shui20 + (gz - jd1) * shui25;
    jgz = gz -shui;
    printf("您的工资为%.2f,税金为%.2f,净工资为%.2f.\n\n\n", gz, shui, jgz);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值