这个VB题怎么啦?

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:03:21
dim i as integer
dim s as double
for i = 0 to 100
if i mod 2<>0 then
s=s+i^2
end if
next i
print s
end sub
这个是我做的答案
dim i as integer
dim s as long
for i = 0 to 100
if i mod 2=1 then
s=s+i*i
end if
next i
print s
end sub
这个是标准答案
运算的结果两个都是一样的
题目要求是计算0到100范围内所有奇数的平方和
我现在就搞不懂
为什么提交答案,我的为0分
我错在哪里?
来自南开100题

总的来说,编写程序的目的是正确的得到我们运算的目的。能达到的都应该着正确的。不要迷信标准。

具体来说,可以看出,区别有三点:
1、dim s as double 还是dim s as long ,如果有把握long能够不溢出,使用应该没有问题。
2、if i mod 2<>0 then 和if i mod 2=1 then 没有本质区别。
3、s=s+i^2 和s=s+i*i ,在可能情况下,尽量使用乘法,而不是密运算。其效率差别特大。
4、两者共同的缺点:有一半循环是空循环,效率低下。应该写作:
for i = 1 to 100 step 2
s=s+i*i
next i

没有错误,完全正确!怎么是0分呢?你找评分的人问问清楚!

不是一样的吗?整数不是奇数就是偶数 i mod 2不等于0当然等于1
i^2 和i*i也是一个意思

用long定义s会越界,用double则不会。
虽然没有达到LONG型的限制, 但是已经超出了它们使用的INTEGER型的限制(i是integer), 所以溢出了.

的确是溢出造成的错误;
在程序设计算法中,只要有关于指数运行,不管是开方还是平方,最好都用double类型。这是一个默认规则;