【问题标题】:program unable to display the correct calculation程序无法显示正确的计算
【发布时间】:2020-02-03 18:14:33
【问题描述】:

编写一个程序,询问员工的薪水和服务年限。编写一个函数,根据服务年限改变薪水。如果员工的服务年限超过 10 年。他或她将获得 10% 的加薪。在 5 到 10 年之间,加薪为 5%。其他所有人都将获得 2% 的加薪。 Int calcbonus (int years_service); 该函数计算并返回员工当年的奖金。员工每服务 2 年将获得 500 美元。 无效打印计算(int years_service,浮动薪水,int奖金); 此功能将以清晰专业的方式显示所有计算出的信息。

#include <stdio.h>
#include <conio.h>
float funsalary(float salary,float year);
float calcbonus(float year);
void printcalculation (float year,float salary,float bonus);
int main()
{
    float year,salary,bon;
    printf("Enter your salary");
    scanf("%f",&salary);
    printf("Enter your years of service");
    scanf("%f",&year);
    funsalary(salary,year);
    bon = calcbonus(year);
    printcalculation(year,salary,bon);
}
float funsalary(float salary,float year)
{
    float raise;
    if (year>10)
    {
        raise = salary*10/100;
    }
    else if (year>=5 && year<=10)
    {
        raise = salary*5/100;
    }
    else if (year<=2)
    {
        raise = salary*2/100;
    }
    return raise;
}
float calcbonus(float year)
{
    float bonus;
    bonus = (year/2)*500;
    return bonus;

}
void printcalculation(float year,float raise,float bon)
{
    float extra,total;
    total = raise+bon;
    printf("Total Income Is %f\n",total);
    }

我输入工资1000,工龄2,输出应该大于1500吧?但它显示的是 1500。

【问题讨论】:

  • 还没有剖析整个事情,但是您忽略了来自funsalary 的返回值,然后您将salary 传递给printcalculation,它期望raise。我希望问题出在某个地方。
  • 顺便说一下,在这里粘贴代码时最好使用空格,而不是制表符。另请参阅我的编辑以了解格式化代码的正确方法。您突出显示它并单击{} 按钮。
  • 一个问题:加薪是累计的吗?

标签: c


【解决方案1】:

它显示 1500 是因为当您在 main 中调用 funsalary(salary,year) 函数时,您没有存储导致您的问题的函数的返回值。您应该使用以下内容更改该行:

salary =  salary + funsalary(salary,year);    
//alternatively salary += funsalary(salary,year);  

为了更新工资。

或者,您可以分配一个指向薪水的指针,然后将该引用传递给 funsalary 函数(当然是通过预先更新参数),如下所示:

int main{
int * salaryp;
salaryp = &salary;
funsalary(salaryp, year);
}
void funsalary(int * salaryp, year){
if (year>10)
{
    *salaryp = *salaryp*10/100;
}
else if (year>=5 && year<=10)
{
    *salaryp = *salaryp*5/100;
}
else if (year<=2)
{
    *salaryp = salaryp*2/100;
}
}

【讨论】:

  • 它在这个输入 1000 工资,2 年服务,输出是 1520 上显示正确的信息,但是当我输入 1000 ,4 年服务时,它给出了错误的输出。这是为什么 ?编辑:没关系,它是固定的,我的 else 条件不包括 '4 year service' 的情况。现在它显示正确的输出!
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多