| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2175 人关注过本帖
标题:求出 1 到 5000 之间的能被 5 整除的前若干个偶数之和,当和大于 500 时程序 ...
只看楼主 加入收藏
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:3 
clear
 s=0
 for i=1 to 5000
 do while i%5=0 and i%2=0
      s=s+i
    if s>500
      exit
    endif
 endd  
 next
 ?s
这是楼主的程序。用的两重循环。外层循环,对i从1到5000进行遍历;对每一个i又设定内层循环,当i的值被5且被2整除时开始循环,然后累加i给变量s,当s超过500以后就退出内层循环,否则继续循环,因此,第一次执行内层循环的i必定是10,s连续加51次10以后就退出内层循环,即退出的时候s=510。然后执行外层循环,从11开始,直到i=20时,内层循环第二次启动,先执行s=s+i,得s=530,然后s>500故退出内层循环,又开始外层循环,从21开始,直到s=30,第三次内层循环,s=530+30=560后又退出内层循环,...直到i=5000最后执行一次内层循环,最后退出内层循环,接着退出外层循环,程序结束。以上分析,得到的结果自然不是楼主要求的结果了。

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2014-12-03 21:20
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
收藏
得分:0 
回复 21 楼 Tiger5392
感觉解释的很好,可我就是听得有点绕啊。
为什么 s>500 都退出了还要继续循环两三次呢?
是不是把 do while ,enddo 改为 if ,endif 结果就不一样了,怎么来解释呢
2014-12-04 13:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
以下是引用yeyeyeyue在2014-12-4 13:58:05的发言:

感觉解释的很好,可我就是听得有点绕啊。
为什么 s>500 都退出了还要继续循环两三次呢?
是不是把 do while ,enddo 改为 if ,endif 结果就不一样了,怎么来解释呢



那循环和分支结构还能等同处理吗  他俩也不是一个数量级别上的

DO IT YOURSELF !
2014-12-04 14:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10565
专家分:43004
注 册:2014-5-20
收藏
得分:0 
以下是引用yeyeyeyue在2014-12-4 13:58:05的发言:

感觉解释的很好,可我就是听得有点绕啊。
为什么 s>500 都退出了还要继续循环两三次呢?
是不是把 do while ,enddo 改为 if ,endif 结果就不一样了,怎么来解释呢

"do while ,enddo 改为 if ,endif"
关键是exit 这句,看看执行 exit 这句后有什么不同。
2014-12-04 14:10
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
收藏
得分:0 
以下是引用sdta在2014-12-3 10:03:31的发言:

VFP9帮助文件:https://down.bccn.net/6944.html
VFP6帮助文件:https://down.bccn.net/4396.html
  
为什么一下载就登录不了呢,说的退回到登陆前页面。
2014-12-04 14:12
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:3 
我看了一下,除了3楼外,大家大概都忘了一件事:能被5整除的偶数,末尾只能是0,也就是10、20、30、...,所以只需从10开始,步长设为10就可以了。根本不用去判断循环变量的当前值是否能被5整除且是偶数。
2014-12-04 14:15
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:1 
也可以这样想这个问题:记s=10+20+...+10n=5n(n+1)。令5n(n+1)>500,得n>(sqrt(401)-1)/2。因此结果不需要循环:最大的N=int(n)+1

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2014-12-04 16:31
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用Tiger5392在2014-12-4 16:31:24的发言:

也可以这样想这个问题:记s=10+20+...+10n=5n(n+1)。令5n(n+1)>500,得n>(sqrt(401)-1)/2。因此结果不需要循环:最大的N=int(n)+1
人家这是计算机课,需要练习编程,你直接变成数学课了。
2014-12-05 08:14
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
以下是引用Tiger5392在2014-12-3 21:20:30的发言:

clear
 s=0
 for i=1 to 5000
 do while i%5=0 and i%2=0
      s=s+i
    if s>500
      exit
    endif
 endd  
 next
 ?s
这是楼主的程序。用的两重循环。外层循环,对i从1到5000进行遍历;对每一个i又设定内层循环,当i的值被5且被2整除时开始循环,然后累加i给变量s,当s超过500以后就退出内层循环,否则继续循环,因此,第一次执行内层循环的i必定是10,s连续加51次10以后就退出内层循环,即退出的时候s=510。然后执行外层循环,从11开始,直到i=20时,内层循环第二次启动,先执行s=s+i,得s=530,然后s>500故退出内层循环,又开始外层循环,从21开始,直到s=30,第三次内层循环,s=530+30=560后又退出内层循环,...直到i=5000最后执行一次内层循环,最后退出内层循环,接着退出外层循环,程序结束。以上分析,得到的结果自然不是楼主要求的结果了。
第一次执行内层循环的i,为什么S连续加51次10以后退出循环.,"51次"怎么得的?

落花人独立,微雨燕双飞。
2014-12-12 11:17
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
以下是引用tlliqi在2014-12-2 22:49:15的发言:

clear
s=0
for n=10 to 5000 step 10
s=s+n
  if s>500
  exit
  endif
endfor
?s
VF6.0下嵌套错误

落花人独立,微雨燕双飞。
2014-12-12 11:26
快速回复:求出 1 到 5000 之间的能被 5 整除的前若干个偶数之和,当和大于 500 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012650 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved