回 帖 发 新 帖 刷新版面

主题:[color=0000FF]未解请老大帮我分析分段函数的取值范围[/color]

分段函数如同滤波器,逐段过滤条件.

老师您好分段函数如同滤波器,逐段过滤条件,这是为甚磨呢?
y=2x^2+3 ,x≠0
y=-4x+2 ,x=0
为何不能写成
  if x <>0 then y=2x^2+3
  y=-4x+2
我的问题主要在类似分段函数的选择控制结构问题这里,为何[color=FF0000]条件表达式要考律x取值范围和x取值范围的次序,否则不能实现分段函数.[/color] 望您能象带学生走FOR NEXT循环那样带我走一下这个计算机用一句分支语句完成分段函数的计算机过滤过程, 感激不尽了.
书上的例子是78页(VB.NET)
y=sinx+sqrt(x^2+1),x≠0 
y=cosx-x^3+3*x ,x=0不能写成下面两句,书上说自己思考我就此处不解
if x <>0 then y=sinx+sqrt(x^2+1)
y=cosx-x^3+3*x

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



我的问题主要是类似分段函数的选择控制结构问题 
如下    5 x>0
    y= 0 x=0
      -5 x<0

可写成程序:
if x>0 then 
y=5
else
if x=0 then
y=0
else
y=-5
end if
end if

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''还可写成
if x>0 then 
y=5
else
if x=0 then
y=0
else if x<0 then
y=-5
end if
end if

为何可省去if x<0 then,[color=0000FF]计算机是(在编译阶段吗)如何知道else后就是x<0的取值范围然后省略掉x<0吗.[/color]
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                2x^2+3 ,x≠0
           y= -4x+2 ,x=0
对此写成一句单分支语句就如下,为何呢?
y=-4x+2
if x <>0 then y=2x^2+3
为何不能写成
  if x <>0 then y=2x^2+3
  y=-4x+2

蓝色这段就错了?计算机是(在编译阶段吗)如何知道x的取值范围在 

y=-4x+2 时就是x=0,然后才取x≠0,[color=FF0000]计算机应是从上至下分析取值范围的表达式呀[/color]

. 

一般的书和视频都没详讲,请您详讲,也可以做个视频好吗,谢谢

回复列表 (共12个回复)

沙发

[quote]
2x^2+3 ,x≠0
y= -4x+2 ,x=0
对此写成一句单分支语句就如下,为何呢?
y=-4x+2
if x <>0 then y=2x^2+3
为何不能写成
  if x <>0 then y=2x^2+3
  y=-4x+2
[/quote]

额滴个神啊。。
难道LZ是又 一个郭靖?如果LZ的注册信息属实,学编程只是兴趣的话,鼓励LZ;否则,建议LZ改行吧
仔细比较一下执行流程嘛!
上面的:
   先默认y=-4x+2;当x<>0时,y才替换为2x^2+3
下面的:
  不管x是否<>0,y最后永远都是-4x+2

板凳

先默认y=-4x+2;当x<>0时,y才替换为2x^2+3
不知楼主从哪里学来的?其他高人有何见解,即然我此处未学我还应学练甚磨才能过此关呢?谢谢.
为何默认时是X=0,不是默认X<>0?另外一句分支语句有间格语句后y替换为2x^2+3还能发生吗?即过几句才发生替换可以吗?

3 楼

上面的:
   先默认y=-4x+2;当x<>0时,y才替换为2x^2+3
我不清楚默认y=-4x+2此时为何默认X=0,计算机为何开始就默认X=0,后来才当x<>0时,y才替换为2x^2+3,而不是默认别的情况.

4 楼

[quote]默认[/quote]
也许是我才疏学浅,词不达意,用词不当,误导了你。

5 楼

这里你有一个十分明显的错误,即:
if x <>0 then y=2x^2+3
y=-4x+2
这两行程序的执行我们来仔细看看,
当x=0时, x <>0 不成立,y=2x^2+3不被执行,然后执行y=-4x+2,得到y=2;
当x=3时,x <>0 成立,执行y=2x^2+3,得到y=21,然后执行y=-4x+2,得到y=-10,-10成为最终结果。

本来我们希望x=3时,y=21,这里却得到了-10.问题在於y=-4x+2被执行了,并没有受到if条件的影响。
为什么会这样呢?是因为我们的if语句书写错误!

正确的写法是:、
if x <>0 then
    y=2x^2+3
else
    y=2'这里不要写成y=-4x+2,因为我们已经知道x=0,值时一定的。
endif

好了,你的第一段、第二段程序都是这样,不用在说。然后看看下面的分段函数:

   y=5     x>0
   y=0      x=0
   y=-5     x<0
写成代码:
if x>0 then 
    y=5
else
    if x=0 then
        y=0
    else
        y=-5
    end if
end if

这样就看的很清楚,x>0时执行y=5,然后跳到后一个endif;x=0的话,因为不符合第一个条件而进入第一个else,在这里又遇到第二个if,这次符合条件,执行y=0;同样当x<0时,不符合第一个条件而进入第一个else,又因为不符合第二个条件而进入第二个else执行y=-5
这里,强调一个,计算机执行时他并不知道第二个else后面就是x<0的函数定义,而是不符合上述条件的都在这里!

补充一点,这段函数可以写得更流畅一点,那就是:
if x>0 then 
    y=5
elseif x=0 then
    y=0
else
    y=-5
end if
理解同上。
对于类似多段函数,vb还有一个专门的语句来实现,那就是select case——多分枝语句!
写法如下次:
select case x
    case is<0
        y=-5
    case is=0
        y=0
    case is<0
        y=-5
end select

但愿我说清了分别。
至于代码
y=-4x+2
if x <>0 then y=2x^2+3
它并不是“分支”计算,而是不管三七二十一,先算y=-4x+2,然后在看x是不是0,如果不是,重新计算y=2x^2+3

6 楼

正确的写法是:、
if x <>0 then
    y=2x^2+3
else
    y=2'这里不要写成y=-4x+2,因为我们已经知道x=0,值时一定的。
endif

[color=FF0000]为何不要写成y=-4x+2,这样的话我们对累似的表达式起不都要自己去算,然后再写累似y=2',这就改变了表达式呀,不好吧?[/color]




至于代码
y=-4x+2
if x <>0 then y=2x^2+3
它并不是“分支”计算,而是不管三七二十一,先算y=-4x+2,然后在看x是不是0,如果不是,重新计算y=2x^2+3  
[color=0000FF]这是高人的写法,请老大版主再讲讲为何不管三七二十一,先算y=-4x+2,那它怎能算对呢?不是乱计算吗?然后在看x是不是0,如果不是,重新计算y=2x^2+3此时计算机又再干吗呢?[/color]

7 楼

[quote]那它怎能算对呢?不是乱计算吗?然后在看x是不是0,如果不是,重新计算y=2x^2+3此时计算机又再干吗呢?[/quote]
期待老大怎么回答。[em1]
纯路过,请无视。

8 楼

接受天天学习的劝导,我也听不到了,也看不到了,我是不是已经成了“聪辨”呢?

9 楼

老大您好,为何无言了?我不是不懂,是想让您把先默认再分析取值范围这个计算机的过程再详讲下,你的回答很好,我会再加分的谢谢

10 楼

肯请老大帮忙.

我来回复

您尚未登录,请登录后再回复。点此登录或注册