鱼C论坛

 找回密码
 立即注册
查看: 3750|回复: 9

求教!! 逻辑表达式出现的问题

[复制链接]
发表于 2013-3-2 22:45:55 | 显示全部楼层 |阅读模式
2鱼币
  1. #include <stdio.h>

  2. void main()
  3. {
  4.         /*基本运费为p,货物重量w, 距离s, 折扣d, 总运费为f*/
  5.         /*计算公式是f=p*w*s*(1-d)*/
  6.         double p, w, s, d, f;
  7.        
  8.         printf("请输入运输费用:");
  9.         scanf("%lf", &p);
  10.        
  11.         printf("请输入货物重量:");
  12.         scanf("%lf", &w);
  13.        
  14.         printf("请输入运输距离:");
  15.         scanf("%lf", &s);
  16.        
  17.         if(s < 250)
  18.         {
  19.                 d = 0/100;
  20.                 printf("运费是%lf\n", f=p*w*s*(1.0-d));
  21.         }
  22.        
  23.         else if(250 <= s < 500)
  24.         {
  25.                 d = 2.0/100;
  26.                 printf("运费是%lf\n", f=p*w*s*(1.0-d));
  27.         }
  28.        
  29.         else if(500 <= s < 1000)
  30.         {
  31.                 d = 5.0/100;
  32.                 printf("运费是%lf\n", f=p*w*s*(1.0-d));
  33.         }

  34.         else if(1000 <= s < 2000)
  35.         {
  36.                 d = 8.0/100;
  37.                 printf("运费是%lf\n", f=p*w*s*(1.0-d));
  38.         }
  39.        
  40.         else if(2000 <= s < 3000)
  41.         {
  42.                 d = 10.0/100;
  43.                 printf("运费是%lf\n", f=p*w*s*(1.0-d));
  44.         }
  45.        
  46.         else if(3000 <= s)
  47.         {
  48.                 d = 15.0/100;
  49.                 printf("运费是%lf\n", f=p*w*s*(1.0-d));
  50.         }       
  51. }
复制代码

大家帮我看看,这个是什么问题,为什么无论怎么判断d的值都是2.0/100?也就是说第一个if 和第一个else if 里的d能正常判断赋值,后面的几个else if里的d 都不能正常的赋值,请前辈们指点一下,有错误的也不惜赐教的帮我改正下代码。谢谢了。(后面的else if 我改了几种表达方式还是出现一样的问题,真心不知道怎么回事,我现在还不会用vc++6.0调试,哎)

最佳答案

查看完整内容

出错的原因主要是 你对C语言 if 语句的理解还不够透切, if(表达式) 语句; 如果表达式的值是零,则不执行语句1,否则执行语句1 按照你的程序,我们假设 s=700,s不小于250, 跳到一个,if (250
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-2 22:45:56 | 显示全部楼层
出错的原因主要是 你对C语言 if 语句的理解还不够透切,
if(表达式)
语句;
如果表达式的值是零,则不执行语句1,否则执行语句1
按照你的程序,我们假设 s=700,s不小于250,
跳到一个,if (250 <=s <500), s大于等于250,为真,值为1,则此时语句可以理解为 if(1<500),也为真,所以当s大于250时,只会执行
        {
                d = 2.0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-2 22:46:33 | 显示全部楼层
本帖最后由 我是外星猪 于 2013-3-2 22:47 编辑

我这种正常的
if(表达式1)语句1
else if(表达式2)语句2
.
.
.
else if(表达式n)语句n
的写法应该是没用问题的,实在没有想明白问题出在哪里了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-2 22:57:02 | 显示全部楼层
/******引用百度知道的原文else if********/
在同一个 if 结构中可以有多个 elseif 语句。第一个表达式值为 TRUE 的 elseif 语句(如果有的话)将会执行。在 php 中,也可以写成“else if”(两个单词),它和“elseif”(一个单词)的行为完全一样。句法分析的含义有少许区别(如果你熟悉 C 语言的话,这是同样的行为),但是底线是两者会产生完全一样的行为。
elseif 的语句仅在之前的 if 或 elseif 的表达式值为 FALSE,而当前的 elseif 表达式值为 TRUE 时执行。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-2 23:26:27 | 显示全部楼层
#include <stdio.h>

void main()
{
        /*基本运费为p,货物重量w, 距离s, 折扣d, 总运费为f*/
        /*计算公式是f=p*w*s*(1-d)*/
        double p, w, s, d, f;

        printf("请输入运输费用:");
        scanf("%lf", &p);

        printf("请输入货物重量:");
        scanf("%lf", &w);

        printf("请输入运输距离:");
        scanf("%lf", &s);

        if(s < 250)
        {
                d = 0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }

        else if(250<=s && s<500)
        {
                d = 2.0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }

        else if(500<=s && s<1000)
        {
                d = 5.0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }

        else if(1000<=s && s< 2000)
        {
                d = 8.0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }

        else if(2000<=s && s<3000)
        {
                d = 10.0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }

        else if(3000 <= s)
        {
                d = 15.0/100;
                printf("运费是%lf\n", f=p*w*s*(1.0-d));
        }        
}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-2 23:37:59 | 显示全部楼层
所以如果想要实现你那种逻辑,必须用我那个的语法,这是C语言的语法逻辑规定
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-3 03:20:13 | 显示全部楼层
楼上说得很对,对于这种就尽量用与或运算符不容易出错,楼主把if补一下吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-3 11:18:49 | 显示全部楼层
if条件里的判段如果有多个最好用与运算(&&)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-3 13:55:51 | 显示全部楼层
首先,我也是个新手!对于if后面多个else if是采用就进原则,所以肯定是if下面那个d =2.0/100;可以用switch语句。#include <stdio.h>
void main()
{
    int j = 0;
    float p = 0,w = 0,s = 0, f = 0, d = 0;
    printf("please intput transportation expense: ");
    scanf("%f",&p);
    printf("please intput weight:");
    scanf("%f",&w);
    printf("please intput range:");
    scanf("%f",&s);
    j = (int)s / 250;
    switch(j)
    {
      case'0':d = 0;break;
      case'1':d = 0.02;break;
      case'2':d = 0.05;break;
      case'3':d = 0.05;break;
      case'4':d = 0.08;break;
      case'5':d = 0.08;break;
      case'6':d = 0.08;break;
      case'7':d = 0.08;break;
      case'8':d = 0.08;break;
      case'9':d = 0.1;break;
      case'10':d = 0.1;break;
      case'11':d = 0.1;break;
      default:d = 0.15;break;


    }
    f = p*w*s*(1-d);printf("the cost is %.2f\n",f);

}我用的记事本写的不知道是对还是错,。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-4 20:11:34 | 显示全部楼层
非常感 谢 L]V[G 的说明,我把书看了一遍,然后实验了几种编写方式,发现确实是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-10 16:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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