| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7865 人关注过本帖, 1 人收藏
标题:菜鸟一名 想请教一下DO WHILE语句的运用
只看楼主 加入收藏
孤灯泰坦
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-3
结帖率:0
收藏(1)
已结贴  问题点数:5 回复次数:15 
菜鸟一名 想请教一下DO WHILE语句的运用
CLEAR
A=3
DO WHLE A<=6
 B=2
DO WHILE B<A
IF A/B=INT(A/B)
EXIT
ENDIF
B=B+1
ENDDO
IF A=B
??A
ENDIF
A=A+1
ENDDO
程序运行的结果是____________

答案给的是 3  5

然而我只能得出3。。。

思路如下:
a=3
判定a≤6的真假【很显然3小于等于6】
则b=2
    【进入下一个DO WHILE】
      判定b<a真假【2<3,判定为真,继续执行 】
      如果a/b=int(a/b)【3/2
并不等于1】   
      那么就执行exit【不符合这个条件 继续向下走】endif
       b=b+1【现在b等于3了】
      endDO【这个是判定b<a的DOWHILE 的一部分对吧?】
       【返回去重新判定b是否小于a,此时b=3 ,a也等于3,判定条件为假。执行endDO后面的语句。】
  如果a等于b【符合条件】
  显示a的值【输出3】
  endif
  a等于a加1【此时a为4】
endDO【这个是a≤6的一部分对吧?】
【此时回到第一个DOWHILE 判定a≤6的真假 此时a为4 条件语句为真】
于是b=2
判定b<a的真假【此时a为4  b为2 为真】
如果a/b=int(a/b)【此时是符合的!两边的值都为2】
于是exit

那么问题来了 5是从哪来的?
      

2016-06-04 08:32
孤灯泰坦
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-3
收藏
得分:0 
有人吗。。。
2016-06-04 08:48
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:2 
答案是正确的,你再把A等于5的情形做一遍。
2016-06-04 09:26
孤灯泰坦
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-3
收藏
得分:0 
回复 3楼 taifu945
可是到a为4,b为2的时候就跳出了呀。。。怎么会有5呢?(⊙_⊙?)
2016-06-04 10:20
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:2 
当A=3时,B<A,那么B为[2],A/B=INT(A/B),不会出现成立,执行B=B+1,此时B=2+1,A=B,输出 ??A
当A=4时,B<A,那么B为[2,3],A/B=INT(A/B),会出现成立,退出,B=B+1不执行,此时B=2
当A=5时,B<A,那么B为[2,3,4],A/B=INT(A/B),不会出现成立,执行B=B+1,此时B=4+1,A=B,输出 ??A
当A=6时,B<A,那么B为[2,3,4,5],A/B=INT(A/B),会出现成立,退出,不执行B=B+1,此时B=2



[此贴子已经被作者于2016-6-4 11:15编辑过]

2016-06-04 11:13
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
回复 4楼 孤灯泰坦
他跳出的是第2个 DO
他有2个DO
DO WHILE A<=6 &&第1个DO
   .....
   DO WHILE B<A &&第2个DO
      ......
      EXIT  &&只能跳出第2个DO
      ......
   ENDDO
   ....
ENDDO
所以A的值会从3到6
2016-06-04 11:20
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:2 
DO WHILE ... ENDDO 命令
示例 请参阅

在一个条件循环里执行一组命令。

语法

DO WHILE lExpression
Commands
[LOOP]
[EXIT]
ENDDO

参数

lExpression

指定一个逻辑表达式,它的值决定是否执行 DO WHILE 和 ENDDO 之间的命令集。如果 lExpression 计算为“真”(.T.),就执行命令集。

Commands

指定当 lExpression 计算为“真”(.T.)时,要执行的 Visual FoxPro 命令集。

LOOP

直接将程序控制返回到 DO WHILE。LOOP 可放在 DO WHILE 和 ENDDO 间的任何位置。

EXIT

将程序控制从 DO WHILE 循环的内部转到 ENDDO 后的第一个命令。
EXIT 可放在 DO WHILE 和 ENDDO 间的任何位置。

ENDDO

表明 DO 语句的结束。

说明
只要逻辑表达式 lExpression 为“真”(.T.),就执行位于 DO WHILE 和 ENDDO 间的命令集。每个 DO WHILE 语句必须有一个相应的 ENDDO 语句。
可在 DO WHILE 和 ENDDO 之后放注释。在程序编译和执行期间忽略注释。
DO WHILE ... ENDDO 命令示例
在下面的示例中,DO WHILE 循环统计仓库中价格高于 20 美元的产品数量,遇到文件结束符 (EOF) 时,退出 DO WHILE 循环并显示总数。

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && 打开 Products 表
SET TALK OFF
gnStockTot = 0

DO WHILE .T. 可在此加注释
IF EOF( )
EXIT
ENDIF
IF unit_price < 20
SKIP
LOOP
ENDIF
gnStockTot = gnStockTot + in_stock
SKIP
ENDDO 或在此加注释

CLEAR
? 'Total items in stock valued over 20 dollars:'
?? gnStockTot

坚守VFP最后的阵地
2016-06-04 12:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
不上机操作是没用的,纸上谈兵是浪费大家的时间了。

坚守VFP最后的阵地
2016-06-04 12:50
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用孤灯泰坦在2016-6-4 10:20:55的发言:

可是到a为4,b为2的时候就跳出了呀。。。怎么会有5呢?(⊙_⊙?)
我觉得你应该先搞清楚两个要点:1、两个ENDDO分别对应的是哪两个DO WHILE;2、EXIT是仅退出它所在的那个循环,而不是退出所有循环。根据这一点,你看一下此题中的EXIT到底应该退出的是哪个DO WHILE...ENDDO语句块。延伸一下:与之相同的还有LOOP。
2016-06-04 15:11
孤灯泰坦
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-6-3
收藏
得分:0 
回复 5楼 mywisdom88
谢谢 谢谢 帮大忙了
那个...道理我懂了 不过“B为[2,3,4,5]”是什么意思....

[此贴子已经被作者于2016-6-5 19:37编辑过]

2016-06-05 19:36
快速回复:菜鸟一名 想请教一下DO WHILE语句的运用
数据加载中...
 
   



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

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