鱼C论坛

 找回密码
 立即注册
查看: 1546|回复: 6

[已解决]神之谜题

[复制链接]
发表于 2019-7-29 18:15:04 | 显示全部楼层 |阅读模式
5鱼币
#include<stdio.h>

int main()
{
        float w,s,p;
        float f;
        printf("请输入吨数与公里数和运费(单价):");
        scanf("%d %d %d",&w,&s,&p);
        
        if(s>=250 && s<500){
                p = p*0.99;
                f = p*w*s;
        }else if(s>=500 && s<1000){
                p = p*0.97;
                f = p*w*s;
        }else if(s>=1000 && s<2000){
                p = p*0.95;
                f = p*w*s;
        }else if(s>=2000 && s<3000){
                p = p*0.98;
                f = p*w*s;
        }else if(s>=3000){
                p = p*0.9;
                f = p*w*s;
        }
        
        printf("总价是: %.2f\n",f);
        
        return 0;
}

为甚麽改来改去都是0.00啊...
求助,谢谢
最佳答案
2019-7-29 18:15:05
本帖最后由 df3379 于 2019-7-30 14:29 编辑
#include<stdio.h>

int main()
{
        do
        {
        float w,s,p;
        double f;
        printf("请输入吨数与公里数和运费(单价):");
        scanf("%f %f %f",&w,&s,&p);
        
        if(s>0 && s<249){
               f = p*w*s;

       }else if(s>=250 && s<500){
                p = p*0.99;
                f = p*w*s;
                
        }else if(s>=500 && s<1000){
                p = p*0.97;
                f = p*w*s;
                        
        }else if(s>=1000 && s<2000){
                p = p*0.95;
                f = p*w*s;
                        
        }else if(s>=2000 && s<3000){
                p = p*0.98;
                f = p*w*s;
                                
        }else if(s>=3000){
                p = p*0.9;
                f = p*w*s;
                                
        }
        printf("\n重量为:%.1f吨\n\n里程数为:%.1f公里\n\n运费为:%.2f元/公里\n\n",w,s,p);
        printf("本次运输总价是: %.2f元\n\n=========================分隔线==================\n\n",f);
        }
            while('%f');
        return 0;
}


                               
登录/注册后可看大图


变量定义时修改一下就行了!
主要问题在f变量修改为双精度。结果为单精度会出现数据溢出.
低于250公里的选项没有,补上就好。

希望设我为最佳答案哟

最佳答案

查看完整内容

变量定义时修改一下就行了! 主要问题在f变量修改为双精度。结果为单精度会出现数据溢出. 低于250公里的选项没有,补上就好。 希望设我为最佳答案哟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 18:15:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 df3379 于 2019-7-30 14:29 编辑
#include<stdio.h>

int main()
{
        do
        {
        float w,s,p;
        double f;
        printf("请输入吨数与公里数和运费(单价):");
        scanf("%f %f %f",&w,&s,&p);
        
        if(s>0 && s<249){
               f = p*w*s;

       }else if(s>=250 && s<500){
                p = p*0.99;
                f = p*w*s;
                
        }else if(s>=500 && s<1000){
                p = p*0.97;
                f = p*w*s;
                        
        }else if(s>=1000 && s<2000){
                p = p*0.95;
                f = p*w*s;
                        
        }else if(s>=2000 && s<3000){
                p = p*0.98;
                f = p*w*s;
                                
        }else if(s>=3000){
                p = p*0.9;
                f = p*w*s;
                                
        }
        printf("\n重量为:%.1f吨\n\n里程数为:%.1f公里\n\n运费为:%.2f元/公里\n\n",w,s,p);
        printf("本次运输总价是: %.2f元\n\n=========================分隔线==================\n\n",f);
        }
            while('%f');
        return 0;
}


                               
登录/注册后可看大图


变量定义时修改一下就行了!
主要问题在f变量修改为双精度。结果为单精度会出现数据溢出.
低于250公里的选项没有,补上就好。

希望设我为最佳答案哟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 18:17:00 | 显示全部楼层
08行代码应该是-->%f
已经改了,但依然没用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 20:13:50 | 显示全部楼层
只改那个不够的。要这样写:
#include<stdio.h>

int main()
{
        float w=0,s=0,p=0;
        float f=0;
        printf("请输入吨数与公里数和运费(单价):");
        scanf("%f %f %f",&w,&s,&p);
        
        if(s>=250 && s<500){
                p = p*0.99;
                f = p*w*s;
        }else if(s>=500 && s<1000){
                p = p*0.97;
                f = p*w*s;
        }else if(s>=1000 && s<2000){
                p = p*0.95;
                f = p*w*s;
        }else if(s>=2000 && s<3000){
                p = p*0.98;
                f = p*w*s;
        }else if(s>=3000){
                p = p*0.9;
                f = p*w*s;
        }else{
                p = p*0.8;
                f = p*w*s; 
        }
        
        printf("总价是: %f\n",f);
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 09:54:37 | 显示全部楼层
s<250 的情况没考虑,应该是你输入的s小于250,所以结果总是0.00
其他应该没什么问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 11:23:57 | 显示全部楼层
本帖最后由 Neverturnback 于 2019-7-30 11:35 编辑

可能输入s小于250了所以才会总是0.00,我编译运行过了,第二个数是250以上时,其它数不是0时都有结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 11:33:51 | 显示全部楼层
总之先要赋初值,只要不是在函数内定义的,都要赋初值,不然它的值就是随机的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 01:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表