编程小博士(13):有趣的赋值
软件世界
问:赋值是一个较难理解的概念,但几乎在所有程序中都会用到,在这里想问问小博士,程序中的“等于”和“赋值”有什么区别,为什么二者不能等同呢?
小博士:顺序语句中的“赋值”是令不少人头痛的概念,并且在有些编程语言中,例如VB,外表看和“等于”没什么差别,但意义却大不相同。而在Delphi中,“赋值”的外表和“等于”是不一样的。
不论这个符号外在的形式如何,在应用中作用却不小,利用“赋值”的特点,可以使更多的语句块达到形似,这是用循环来工作的一个前提。
计算机中的所有工作都是按时间按部就班地完成的。这种按时间先后顺序来完成的语句,叫做顺序结构语句。赋值语句就是这些顺序结构语句中的重要一员。
引例
我们经常使用i=i+1这一类的语句,语句中的第一个i和第二个i是同一个i,但它们的值却是不同的,第一个i比第二个i多1。好比我们有个房间名称叫i,原先里面有人,现在又加上了一个。如果作为等号,在数学上是完全行不通的,如果作为“赋值”便是可以的。所以上面的等号代表的不是“等于”关系,而是一个将等号后面的所有值“赋”给等号前的i。
这就是“赋值”和“等于”的不同,“等于”表达的意思是等号两边是否相等的一种关系。
因为简约,所以精彩
另一个常见的例子是:求1+2+3+……+100的和。
做这个题目不是考察我们是不是具有大数学家高斯那样的智力,用101×50=5050来草草解决。让计算机来算,就是要真正地考察一下它算加法的能力。
当然我们也不屑于用这样的公式1+2+3+……+100计算,那是在考察大家的打字速度。我们看一下电脑如何做这个加法题:
用s加数字来表示和值,求100个数的和,我们从求1个数的和开始找找规律:
1个数的和:s1=1
2个数的和:s2=s1+2
3个数的和:s3=s2+3
……
100个数的和:s100=s99+100
上面式子中用到s1到s100总计100个变量,不过对于我们的题目来说,只要有一个和值就够了,为了使它们尽量看起来相似,我们将s1~s100的数字部分都去掉。通过“赋值”的特点我们不难看出,这种变化对最终结果不会有影响。
1个数的和:s=1
2个数的和:s=s+2
3个数的和:s=s+3
……
100个数的和:s=s+100
将数字部分去掉后,对比观察一下,从第2个数到第100个数,除了最后加上的数不同外,其他的一模一样。也就是说从2开始,后面加上的值都比前面多1,这样,规律就找到了。
'第一个数不符合规律
s=1
'从第2个数开始都符合规律
FOR i=2 TO 100 step 1
s=s+i
NEXT i
小结
正是因为有了“赋值”,s=s+i这一句才真正执行了99次;正是这种形似,才使得这种替换成为可能。而替换后的效果是,这4行代码确实可以代替那100代码。“赋值”语句的简约性也就体现出来了。