let's autoit例子求注释(第二个难例子)
dim $unit=0,$ten=0,$hundred=0,$thousand=0dim $digit=1
dim $num,$newnum
$num=inputbox("number","请输入一个不大于4位数的整数")
if @error=1 or $num="" Then
Exit
EndIf
Select
case $num>=0 and $num<10
$digit=1
$unit=mod($num,10)
$digit=$unit
$newnum=$unit
case $num>=10 and $num<100
$digit=2
$unit=mod($num,10)
$ten=mod(($num-$unit)/10,10)
$newnum=$unit*10+$ten
case $num>=100 and $num<1000
$digit=3
$unit=mod($num,10)
$ten=mod(($num-$unit)/10,10)
$hundred=mod(($num-$ten*10-$unit)/100,10)
$newnum=$unit*100+$ten*10+$hundred
case $num>=1000 and $num<1000
$digit=4
$unit=mod($num,10)
$ten=mod(($num-$unit)/10,10)
$hundred=mod(($num-$ten*10-$unit)/100,10)
$thousand=mod(($num-$hundred*100-$ten*10-$unit)/1000,10)
$newnum=$unit*1000+$ten*100+$hundred*10+$thousand
EndSelect
msgbox(0,"数字","这是一个"&$digit&"位数"&@crlf _
&"个位:"&$unit&@crlf&"十位:"&$ten&$ten&@crlf&"百位:"&$hundred&@crlf _
&"千位:"&$thousand&@crlf&"重组的新数:"&$newnum)
麻烦各位热心人士给个注释好吗?我快下班了。想今天上晚班之前就能消化这个东西。。。
[ 本帖最后由 laojikelly 于 2009-4-20 10:24 编辑 ] 很明显,这段代码的关键在于Mod取模运算,Select分支只是用来判断输入数字长度。
题外话,代码好复杂,可以优化精简一下。 dim $unit=0,$ten=0,$hundred=0,$thousand=0 ;声明4个变量并赋值为0
dim $digit=1 ;声明一个变量赋值为1
dim $num,$newnum ;声明2个变量
$num=inputbox("number","请输入一个不大于4位数的整数") ;输入数字并赋值给num
if @error=1 or $num="" Then ;判断输入是否正确,未输入退出
Exit
EndIf
Select
case $num>=0 and $num<10 ;判断所输入的数字大小
$digit=1 ;因为所输入的数字大于等于0小于10,所以判定输入了1位数
$unit=mod($num,10) ;将个位上的数字赋值给unit
$digit=$unit
$newnum=$unit
case $num>=10 and $num<100;原理同上
$digit=2 ;原理同上
$unit=mod($num,10)
$ten=mod(($num-$unit)/10,10) ;求出十位上的数字
$newnum=$unit*10+$ten ;将个位上的数字乘以10加上十位上的数字
case $num>=100 and $num<1000
$digit=3
$unit=mod($num,10)
$ten=mod(($num-$unit)/10,10)
$hundred=mod(($num-$ten*10-$unit)/100,10)
$newnum=$unit*100+$ten*10+$hundred
case $num>=1000 and $num<1000
$digit=4
$unit=mod($num,10)
$ten=mod(($num-$unit)/10,10)
$hundred=mod(($num-$ten*10-$unit)/100,10)
$thousand=mod(($num-$hundred*100-$ten*10-$unit)/1000,10)
$newnum=$unit*1000+$ten*100+$hundred*10+$thousand
EndSelect
msgbox(0,"数字","这是一个"&$digit&"位数"&@crlf _ ;@crlf是换行的意思
&"个位:"&$unit&@crlf&"十位:"&$ten&$ten&@crlf&"百位:"&$hundred&@crlf _
&"千位:"&$thousand&@crlf&"重组的新数:"&$newnum) 楼主是女的吗?难得看到个女的喜欢写代码的。加群吧,大家一起交流交流。 看多几遍结果发现自己写错了。。
[ 本帖最后由 laojikelly 于 2009-4-14 06:56 编辑 ] 还有,第一行中dim $unit=0,$ten=0,$hundred=0,$thousand=0,为什么都给他们赋值为0呢? 原帖由 laojikelly 于 2009-4-14 04:09 发表 http://www.autoitx.com/images/common/back.gif
还有,第一行中dim $unit=0,$ten=0,$hundred=0,$thousand=0,为什么都给他们赋值为0呢?
作者的意图是,如果输入是百位数,哪么千位就用0表示,所以定义$thousand=0
如果输入时十位数,千位和百位均用0表示,所以$hundred=0
..
. ;定义个位($unit)、十位($ten)、百位($hundred)、千位($thousand)四个变量
;以用来存储这四个位上的相应数字,并令其初值为0
Dim $unit = 0, $ten = 0, $hundred = 0, $thousand = 0
;定义位数($digit)变量
Dim $digit = 1
;定义输入的数字($num)和新数字($newnum)两个变量
Dim $num, $newnum
;请求输入一个数字,并赋值给$num
$num = InputBox("number", "请输入一个不大于4位数的整数")
;如果未输入数据或用户单击了取消,则退出本程序
If @error = 1 Or $num = "" Then
Exit
EndIf
;一系列的判定
Select
;当输入的数字是一位数时
Case $num >= 0 And $num < 10
;位数为1
$digit = 1
;个位为$num除以10后得的余数
$unit = Mod($num, 10)
;新数就等于这个个位数
$newnum = $unit
;当输入的数字是两位数时
Case $num >= 10 And $num < 100
;位数为2
$digit = 2
;个位为$num除以10后得的余数
$unit = Mod($num, 10)
;十位为$num减去个位数后除以10所得的余数
$ten = Mod(($num - $unit) / 10, 10)
;新数等于个位(现在的十位)乘以10加十位(现在的个位)
$newnum = $unit * 10 + $ten
;当输入的数字是三位数使
Case $num >= 100 And $num < 1000
;位数为3
$digit = 3
;个位为$num除以10后得的余数
$unit = Mod($num, 10)
;十位为$num减去个位数后除以10所得的余数
$ten = Mod(($num - $unit) / 10, 10)
;百位为$num减去十位乘以10再减去个位后除以100所得的余数
$hundred = Mod(($num - $ten * 10 - $unit) / 100, 10)
;新数等于个位(现在的百位)乘以100加十位(也是现在的十位)乘以10再加百位(现在的个位)
$newnum = $unit * 100 + $ten * 10 + $hundred
;当输入的数字是四位数时
Case $num >= 1000 And $num < 10000
;位数为3
$digit = 4
;个位为$num除以10后得的余数
$unit = Mod($num, 10)
;十位为$num减去个位数后除以10所得的余数
$ten = Mod(($num - $unit) / 10, 10)
;百位为$num减去十位乘以10再减去个位后除以100所得的余数
$hundred = Mod(($num - $ten * 10 - $unit) / 100, 10)
;千位为$num减去百位乘以100再减去十位乘以10再减去个位后除以100所得的余数
$thousand = Mod(($num - $hundred * 100 - $ten * 10 - $unit) / 1000, 10)
;新数等于个位(现在的千位)乘以1000加十位(现在的百位)乘以100
;再加百位(现在的十位)乘以10再加千位(现在的个位)
$newnum = $unit * 1000 + $ten * 100 + $hundred * 10 + $thousand
EndSelect
;展示结果
MsgBox(0, "数字", "这是一个" & $digit & "位数" & @CRLF _
& "个位:" & $unit & @CRLF & "十位:" & $ten & @CRLF & "百位:" & $hundred & @CRLF _
& "千位:" & $thousand & @CRLF & "重组的新数:" & $newnum)
楼主抄写例子都抄错了好几处,帮你改过来了,也为你添加了注释
这个程序显然是很拖沓的,但这是一个用于训练初级编程者逻辑能力的例子,而不是用于应用的例子,所以拖沓是必然的。初学者可以通过这个例子训练逻辑方面、数学方面等能力,这个例子曾是C语言中很经典的一个初学者必须训练的例子。
楼主细细品味一下这个例子的各个细节,读懂这个例子对编程能力的提高很有帮助 其实我已经理解了。。现在才发现有热心人发注释上来。
我就再看一遍吧。。。谢谢你的注释!
页:
[1]