sum=sum+a;关于此的初级解读

来源:互联网 发布:淘宝特卖女装 编辑:程序博客网 时间:2024/06/13 00:25

#include<stdio.h>

int main()

{

    //求和1+1+2+3+5+8+……+(前15项之和)

    //    方法1

    /*int sum=2;   //声明和

    int a=0;       //声明项值

    int x=1;       //声明a的前一项

    int y=1;       //声明a与x之间的那一项

    for (int i=3;i<=15;i++){

        a=x+y;

        x=y;

        y=a;

        sum=sum+a;

    }

    printf("第15项:%d\n",sum);*/


    //    方法2

    long sum = 2//声明和

    long b = 1;   //声明a的前一项

    long a = 1;   //声明项值

    long c = 0;   //声明变量用来储存值

    int i = 0;

    for(i = 3;i <=15;i++){

        c = a;

        a += b;

        b = c;

        sum=sum+a;

 }

    printf("第15项:%ld\n",sum);

    return 0;

}








声明:此博客为初学者所著,高手绕行

方法二:为老师所讲解法

方法一:为自己所做解法

对比两种解法,请分别看声明和初始值,再看表达式

我们都知道,求和算法:

sum=sum+a(sum+=a),这是通用的

对于此算法 的解释:

循环相加,数学表达式如下:

Sn=Sn-1+An


再看方法二:

a+=b;

此算式和sum=sum+a(sum+=a)很相识,完全可以认为它们就是相同的。


但有一点需要注意,请回看声明部分和表达式部分

这两种不同的算法,它们的结果是完全一样的,那么这里便有疑问;

疑问一:

a+=b,到底是什么意思?

要解释这个问题,得回到上下文

我们可以看到:

c=a;

a+=b;

b=c;

a+=b,是放在中间的,这就是问题所在

为什么仅仅是因为放中间,它就与

sum=sum+a(sum+=a)不同了呢?

这里就要说到赋值,这个东西。


疑问二:赋值到底是怎么回事

请看方法一中的表达式:

a=x+y;

x=y;

y=a;

sum=sum+a;

我们看视频和某些资料,会发现讲解人这样说:

当x=y;发生时,就是将y中的值赋给了x;

然后就没了,资料或者视频讲解者,说到这里就完了;

这里就是个误区,后面呢?y发生了什么,y的值呢?

这里就要说到思维跳跃,这个东西。


疑问三:讲解者的跳跃思维——导致错误

x=y;表示,将y的值赋给x;

那么y现在的值是多少,还有没有值?

在我所看视频中,讲解者说,此时y里面没有值了。

那么没有值了,为什么方法一中:

sum=sum+a;

还能计算出结果呢?正确的结果。


这就是讲解者的思维跳跃对我们导致的影响;

思维跳跃导致表达语句在被讲解者接收时出现偏离。

通俗的讲,讲解者说的是一回事,我们理解的是另一回事,但双方都没有发现。

通过我询问别人,知道这么个东西:

赋值==复制;

此时我想起来,我所看视频中,讲解者有这么句话:

“你们可以这样理解……”

于是,讲解者说的没错,他在用比喻句话说某个东西,只是表达的不准确而已

所以,这里对所有的前辈提出一个问题:

“你们是否确定,你所说即是我所听?”

正是因为这个原因,本人花4个小时用解法一,算出了结果,

因为讲解者的思维跳跃太多,他花两分钟讲题,我花四小时解题,这对于双方来说,实则算不上双赢。


疑问四:C语言的正确写法(重点)

对于这个问题,实际上还是疑问三导致;

我们可以回想:

在讲解人解题时,直接就先列出很多变量,然后便开始讲解算法,表达式

因为,讲解人知道此题需要多少变量,他心中对整个问题已经充分把握,于是接下来:

开始初始化,开始列表达式

但是,这样的思维跳跃,对于被讲解人实在是难以理解

最终导致结果,我们得鱼缺未习渔

我有充分的理由相信,很多讲解者在这样做,

我有充分的理由相信,讲解者给被讲解者造成了多少麻烦,

我有充分的理由相信,所谓公司内的前辈们,讲解者们大多是如此,

我们充分的理由相信,你们所说与我们所得,完全是两回事。


在学习中,避开讲解者的讲解,自己深入了解后,我懂了:

是否声明变量,是逻辑思维的结果;

是否初始化,是思考表达式的结果;

是否正确,是无限次数验证的结果;

是否合理,是结果正确,表达式正确的结果,乃至无限次数优化的结果。


那么结尾:

我依然想问:

“讲解者,你们是否确定,你们所讲与我们所得是相同的?”

最后站在客观的角度:

“一个不具有准确表达能力的讲解者于被讲解者来说,简直就是灾难。”


0 0
原创粉丝点击