24 if语句的嵌套 【项目1:分段函数求值】【项目2:油量监控】【项目3:一元二次方程全解】【项目4:个人所得税计算器if语句版】

/*【项目1:分段函数求值】
从键盘输入x的值(要求为实型),根据公式1计算并输出x和y的值。
1 x  x<2
2 x*x+1  2<=x<6
3 sqrt(x+1)  6<=x<10
4 1/(x+1)  x>=10
*/
#include <stdio.h>
#include <math.h>

int main()
{
    double x, y;
    printf("Please enter x: ");
    scanf("%lf", &x);

    if(x < 2)
        y = x;
    else if (x<=2 && x<6)
        y = x * x + 1;
    else if (x<=6 && x<10)
        y = sqrt(x+1);
    else
        y = 1.0 / (x+1);
    printf("x = %.2lf, y = %.2lf\n", x, y);

    return 0;
}
/*
Please enter x: 5
x = 5.00, y = 2.45

Process returned 0 (0x0)   execution time : 4.356 s
Press any key to continue.
*/
/*
[参考解答]
解法1
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
#include <math.h>
int main ( )
{
    double x, y;
    scanf("%lf", &x);
    if (x<2)
        y=x;
    else if(x<6)  //此处已经自然满足x>=2的条件
        y=x*x+1;
    else if(x<10)
        y=sqrt(x+1);
    else //自然是x>=10的时候执行下一语句
        y=1/(x+1);
    printf("%lf\n", y);
    return 0;
}  */
/*【项目2:油量监控】
设计一个程序,用于赛车油量的监控。该程序在赛车油量偏低(少于1/4,
即0.25)时,警示车手应该注意;在油箱接近满载(不低于3/4)时,提示提手不要停车。
而对于其他情况下,不提示任何信息,以免车手分心。
请设计出这个程序来,输入油量刻度(0-1之内的数,如0.21),
提示相应信息,如果需要的话。*/

#include <stdio.h>

int main()
{
    double petrol;

    printf("输入油量表读数(0-1): ");
    scanf("%lf", &petrol);
    if(petrol < 0.25)
        printf("油量过低,请注意!\n");
    else if (petrol > 0.75)
        printf("高油量,不必停!\n");
    else
        printf("");

    return 0;
}

/*
[参考解答]
解法1
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
int main ( )
{
      double fuel_reading;


    printf("输入油量表读数(0-1): ");
    scanf("%lf", &fuel_reading);


    //下面加上花括号使if-else能够正确匹配
    if (fuel_reading < 0.75)
    {
        if (fuel_reading < 0.25)
            printf("油量低,注意!\n");
    }
    else
    {
        printf("高油量,不必停!\n");
    }
    return 0;
}

解法2:
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
int main ( )
{
    double fuel_reading;


    printf("输入油量表读数(0-1): ");
    scanf("%lf", &fuel_reading);


    //没有正确解答中的花括号,将使if-else的匹配关系改变
    if (fuel_reading > 0.75)
        printf("高油量,不必停!\n");
    if (fuel_reading < 0.25)
        printf("油量低,注意!\n");


    return 0;
}

*/

/*【项目3:一元二次方程全解】(x^2代表x的平方)
有一方程ax^2+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
(1) a=0,b≠0时, 解为-c/b
(2) a=0,b=0,c=0, 解为任意值
(3) a=0,b=0,c≠0, 无解
(4) a≠0,b^2-4ac≥0, 有两个实根
(5) a≠0,b^2-4ac≤0, 有两个虚根
*/
#include <stdio.h>
#include <math.h>

int main()
{
   float a, b, c, d, pr, pi, x1, x2;

   scanf("%f %f %f", &a, &b, &c);
   printf("a=%.0f, b=%.0f, c=%.0f\n", a, b, c);
   if (a == 0)
   {
       if (b != 0)
            printf("Only one solution x=%.2f\n", -c / b);
       else if (c != 0)
            printf("No solution\n");
       else
            printf("x is any value\n");
   }
   else
   {
       d = b*b-4*a*c;
       if (d >= 0)
       {
           x1 = (-b+sqrt(d)) / (2*a);
           x2 = (-b-sqrt(d)) / (2*a);
           printf("x1 = %6.2f, x2 = %6.2f\n", x1, x2);
       }
       else
       {
           pr = -b / (2*a);
           pi = sqrt(-d) / (2*a);
           printf("x1 = %6.2f +%6.2f!\n", pr, pi);
           printf("x2 = %6.2f -%6.2f!\n", pr, pi);
       }
   }

    return 0;
}

/*
10 8 5
a=10, b=8, c=5
x1 =  -0.40 +  0.58!
x2 =  -0.40 -  0.58!

Process returned 0 (0x0)   execution time : 2.642 s
Press any key to continue.
*/

/*编写选择结构程序,输入个人月收入总额,计算出他本月应缴税
款和税后收入

序号 收入范围 税率 速算扣除数
1 超过0至1500 3% 0
2超过1500元至4500元的部分 10% 105
3超过4500元至9000元的部分 20% 555
4超过9,000元至35,000元的部分 25% 1005
5超过35,000元至55,000元的部分 30% 2755
6超过55,000元至80,000元的部分 35% 5505
7超过80,000以上 45% 13505    */

#include <stdio.h>

int main()
{
    //解法1:
    double dSalary, dTax=0, dNetIncome=0;//请欣符合匈牙利命名法的变量名
    double dValue=0;//在模板基础上加一个变量,表示超出起征点的收入

    printf("请输入您本月的收入总额(元):");
    scanf("%lf", &dSalary);
    // 下面求解应缴个人所和税dTax和税后收入dNetIncome
    dValue = dSalary - 3500; //在起征点基础上考虑纳税
    if (dValue <= 0.0)
        dTax = 0.0;
    else
    {
        if (dValue <= 1500)
            dTax = dValue * 0.03 - 0.0;//直接根据税率和速算扣除数计算
        else if (dValue <= 4500)
            dTax = dValue * 0.10 - 105.0;
        else if (dValue <= 9000)
            dTax = dValue * 0.20 - 555.0;
        else if (dValue <=35000)
            dTax = dValue * 0.25 - 1005.0;
        else if (dValue <= 55000)
            dTax = dValue * 0.30 - 2755.0;
        else if (dValue <= 80000)
            dTax = dValue * 0.35 - 5505.0;
        else
            dTax = dValue * 0.45 - 13505.0;
    }
    dNetIncome = dSalary - dTax;
    printf("您本月应缴个人所和税 %.2lf元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
    printf("依法纳税,共享繁荣。谢谢使用!\n");

    return 0;
}
/*
请输入您本月的收入总额(元):5000
您本月应缴个人所和税 45.00元,税后收入是 4955.00 元。
依法纳税,共享繁荣。谢谢使用!

Process returned 0 (0x0)   execution time : 3.012 s
Press any key to continue.
*/

/*
解法2:
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
#include <stdio.h>
int main ( )
{
    double dSalary,dTax=0,dNetIncome=0; //请欣符合匈牙利命名法的变量名
    double dValue;   //在模板基础上加一个变量,表示超出起征点的收入
    double dRate, dOffset;  //分别表示税率和速算扣除数
    printf("请输入您本月的收入总额(元):");
    scanf("%lf", &dSalary);
    // 下面求解应缴个人所和税dTax和税后收入dNetIncome
    dValue = dSalary - 3500;   //在起征点基础上考虑纳税
    if(dValue <= 0.0)
        dTax = 0.0;  //不需要交税
    else
    {
        if(dValue <= 1500)
            dRate = 0.03, dOffset = 0.0;   //这一组if语句用于得到税率和速算扣除数
        else if(dValue <= 4500)
            dRate = 0.1, dOffset = 105.0;
        else if(dValue <= 9000)
            dRate = 0.2, dOffset = 555.0;
        else if(dValue <= 35000)
            dRate = 0.25, dOffset = 1005.0;
        else if(dValue <= 55000)
            dRate = 0.3, dOffset = 2755.0;
        else if(dValue <= 80000)
            dRate = 0.35, dOffset = 5505.0;
        else
            dRate = 0.45, dOffset = 13505.0;
        dTax = dValue * dRate - dOffset;  //计算所得税,体会将“确定参数”与“计算”分开的好处:思路更明晰,不易在计算公式上犯大错
    }
    dNetIncome = dSalary-dTax;        //计算税后收入
    printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
    printf("依法纳税,共享繁荣。谢谢使用!\n");
    return 0;
}
*/
  /* 自己写的。感觉不太对头,看答案了。
    double dSalary, dTax=0, dNetIncome=0;
    printf("请输入您本月的收入总额(元):");
    scanf("%lf", &dSalary);
    if (dSalary <= 1500)
    {
        dTax = dSalary * 0.03 - 0;
        dNetIncome = dSalary - dTax;
    }
    else if (dSalary>1500 && dSalary<=4500)
    {
        dTax = dSalary * 0.1 - 105;
        dNetIncome = dSalary - dTax;
    }
    else if (dSalary>4500 && dSalary<=9000)
    {
        dTax = dSalary * 0.2 - 555;
        dNetIncome = dSalary - dTax;
    }
    ..............

    printf("您本月应缴个人所得税%.2lf元,税后收入是%.2lf元。\n", dTax, dNetIncome);
    printf("依法纳税,共享繁荣。谢谢使用!\n");
    */


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值