分段函数展示

在学高数基础中遇到的问题(水费)并用所学c基础解决

本着学过的知识一定要及时的去使用的想法,在学高数基础的途中遇到分段函数(水费)的例子,啊类似的例子很多,比如电费……都是分段函数的具体应用,在现实生活中也应该会遇到。我最开始的想法就是单方面的去由用水量推水费

#include <stdio.h>
void main()
{
    float x,y;
    printf("water consumption:\n");     //用水量
    scanf("%f",&x);
    x = (x>0)? x : 0 ;      //x若大于0则为x,若假为0
    if(x<=18)
        y=1.2*x;
    else if (x<=25)
        y=1.2*18+(x-18)*1.4;
        else 
        y=1.2*18+7*1.4+(x-25)*2.4;

printf("water charges:%.2f\n",y);
}

有一说一,对于一个初学者来说还是比较简单的。
但是,我想到很多人吐槽的*用户总会给奇奇怪怪的数据!*那我们是否可以进行逆推,顺便筛一下哪些数据有问题,让用户重新输入呢~

/*  (0,18] 1.2/t
(18,25] 1.8/t
(25,+)2.4/t  
记水费吨数为X,水费为Y,总程序为一个分段函数的体现*/

#include <stdio.h>
void main()
{
    float x,y;
    printf("Please input water consumption and water charge, if not clear, please input 0\n");      //请输入用水量和水费,不清楚请输入0
    printf("water consumption:\n");     //用水量
    printf("water charges:\n");     //水费
    scanf("%f%f",&x,&y);
    x = (x>0)? x : 0 ;      //x若大于0则为x,若假为0
    y = (y>0)? y : 0 ;
    /*由此判断出x,y的数值的正确性(非负数),保证下一步if的正常进行*/
    
    if(x==0 && y==0 )
    printf("Please enter the correct value again!");
    else{
        if(x!=0&&y==0)      //水量推水费
        {
            if(x<=18)
            y=1.2*x;
            else
            {
                if(x<=25)
                y=1.2*18+1.8*(x-18);
                else
                y=1.2*18+(25-18)*1.8+2.4*(x-25);
            }
        }

        if(y!=0&&x==0)      //水费推水量
        {
            if(y<=21.6)     //第一档
            x=y/1.2;
            else
            {
                if(y<=66.6)
                {
                    x=(y-21.6)/1.8;
                    x=x+18;
                }
                else
                x=(y-66.6)/2.4;
                x=x+43;
            }
        }
    }

    printf("water consumption:%0.2f\n",x);     //用水量
    printf("water charges:%0.2f\n",y);     //水费
}

哎这其中就是很简单的if嵌套、关系运算、逻辑运算而已(其实自己悄咪咪找了不少资料),然后两边都能推成功,健壮性还可。但是我觉得如果继续学下去,应该会有更精简的方法,那就等知道了再更新吧~
以上的内容也有很多不成熟的地方,程序在我本地跑是没有什么问题,如果有什么问题可以后台找我呀!

希望自己能够真正的变成一个程序员吧hh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值