C语言经典100例-第二题(想提升C语言代码能力的看过来!)

 持续更新!!!

1.刷题链接和地址:

C 语言教程 | 菜鸟教程

 菜鸟教程C语言专栏这里的"C经典100例"(看红色框框)

2.第二题解题

2.1读题:

读题可以看出,我们需要输入一个月利润,然后先判断月利润在哪个取值范围内,不同的取值范围有不同的计算提成方式,因此,这题很明显考察一个if else if else的语句

2.1代码实现:

/*
    选择结构,自己看看吧
*/
#include <stdio.h>
int main()
{
    double n = 0,result = 0;//n表示输入的利润,result表示实际要算的结果
    
    while(~scanf("%lf",&n))//这个可以等效成while(scanf("lf",&n)!=EOF)
    {
        if(n<=100000)//对小于等于十万的情况进行判断
        {
            result = n*0.1;//题目给定的利润
            printf("%lf\n",result);
        }
        else if(n>100000 && n<200000)
        {
            result = (n-100000)*0.075+100000*0.1;
            printf("%lf\n",result);
        }
        else if(n>=200000 && n<400000)
        {
            result = 100000*0.075+100000*0.1+(n-200000)*0.05;
            printf("%lf\n",result);
        }
        else if(n>=400000 && n<600000)
        {
            result = 100000*0.075+100000*0.1+200000*0.05+(n-400000)*0.03;
            printf("%lf\n",result);
        }
        else if(n>=600000 && n<1000000)
        {
            result = 100000*0.075+100000*0.1+200000*0.05+200000*0.03+(n-600000)*0.015;
            printf("%lf\n",result);
        }
        else
        {
            result = 100000*0.075+100000*0.1+200000*0.05+200000*0.03+400000*0.015+(n-1000000)*0.01;
            printf("%lf\n",result);
        }
    }
    return 0;
}

程序总体来说就是通过if else if else 进行判断区间,然后执行里面的内容,这个应该很好看的懂,在此不细讲(实在不会上b站找点课把基础语法学学)

我们重点看一下这个 while(~scanf("%lf",&n)),这个也可以等效成while(scanf("lf",&n)!=EOF),EOF的意思就是在命令行输入(CTRL+Z)就可以结束命令(本来while是一个死循环的),这样写,while(scanf("lf",&n)!=EOF)就是说,先输入数字,然后再进行!=的判断,除非我按下CTRL+Z,要不然我可以不断输入值进去(因为放在了while里面),如果单单scanf("lf",&n),你输入一次结果,黑框框就自动结束了,下图这个是黑框框。

 

然后这个while(~scanf("%lf",&n)),也是一样的道理(你得会按位取反的操作,不会的话去我第一篇博客看看),要注意的是,while(-2)这种也是可以进入循环的(不信的话你可以敲个程序自己试试),然后EOF实际上的值是-1(通过宏定义),然后-1按位取反的结果就是0,因此在~scanf("%lf",&n)输入CTRL+Z就会返还-1,再~-1就是0,因此终止while循环

等等!忘记说scanf是有返回值的了,scanf你输入一个数字就会返回1,比如这样,~scanf("%lf",&n),就是返回1,比如这样~scanf("%lf %lf",&n,&n),他就会返回2,你应该就懂了

3.菜鸟教程给的答案

#include<stdio.h>
int main()
{
    double i;
    double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
    printf("你的净利润是:\n");
    scanf("%lf",&i);
    bonus1=100000*0.1;
    bonus2=bonus1+100000*0.075;
    bonus4=bonus2+200000*0.05;
    bonus6=bonus4+200000*0.03;
    bonus10=bonus6+400000*0.015;
    if(i<=100000) {
        bonus=i*0.1;
    } else if(i<=200000) {
        bonus=bonus1+(i-100000)*0.075;
    } else if(i<=400000) {
        bonus=bonus2+(i-200000)*0.05;
    } else if(i<=600000) {
        bonus=bonus4+(i-400000)*0.03;
    } else if(i<=1000000) {
        bonus=bonus6+(i-600000)*0.015;
    } else if(i>1000000) {
        bonus=bonus10+(i-1000000)*0.01;
    }
    printf("提成为:bonus=%lf",bonus);
 
    printf("\n");
}

其实和我写的差不多,唯一区别就是我那个可以不停的输入利润,他这个输了一个利润就结束了。 


最后,非常感谢您能不厌其烦的看到这里,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值