[ 新手习题 1 ] 批处理数值型变量的交换
我们假设值为数字的变量为数值型变量。那么如何交换两个不确定的数值型变量呢?
如:
set a=2
set b=3
因为 a 不一定等于 2,b 不一定等于 3,所以不能用 set a=3 与 set b=2 这种方式来交换。
目的:掌握对数值型变量的交换设置方法。
要求:交换并显示变量 a、b,方法不限。
评分:代码可读性 1 分;
首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
一人多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。 set /a 行不?
[color=blue]───────────────── 版主回复 ─────────────────
执行:wxcute
回复:[2008-11-26] 可以试一下,答错也没有关系的。
───────────────── 版主回复 ─────────────────[/color]
看我这个行不行
[code]@echo offecho 请输第一个数字
set/p a=
echo a=%a%
echo 请输第二个数字
set/p b=
echo b=%b%
echo 开始转换 pause
set /a c=%a%
set /a a=%b%
set /a b=%c%
echo 转换结束
echo a=%a%
echo b=%b%[/code]
[[i] 本帖最后由 hxf0759 于 2008-11-27 09:21 编辑 [/i]] 只要明白set /a的特性就能简洁明了的解答此题了。
[code]If you use any of the logical or modulus operators, you will need to
enclose the expression string in quotes. Any non-numeric strings in the
expression are treated as environment variable names whose values are
converted to numbers before using them. If an environment variable name
is specified but is not defined in the current environment, then a value
of zero is used. This allows you to do arithmetic with environment
variable values without having to type all those % signs to get their
values. [/code] [quote]原帖由 [i]qq641255849[/i] 于 2008-11-26 13:16 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=15962&ptid=2637][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
set /a 行不?
───────────────── 版主回复 ─────────────────
执行:wxcute
回复:[2008-11-26] 可以试一下,答错也没有关系的。
───────────────── 版 ... [/quote]
原因是没在windows下,没法测试... [code]@echo off
Set "a=%random%" & set "b=%random%"
echo %a% %b%
set /a b=%a%,a=%b%
echo %a% %b%
pause
Set "a=%random%" & set "b=%random%"
echo %a% %b%
set /a b=a,a=b
echo %a% %b%
pause[/code]希望可以通过如上代码了解到set /a的特性。 [code]@echo off
set a=2
set b=3
set /a a=b+(b=a)*0
echo %a%
echo %b%
pause[/code] 通过变量交换比较常见,交换的方法很多,加减,乘除,异或.......[code]::加减交换
@echo off
set a=2
set b=4
set /a a+=%b%
set /a b=%a%-%b%
set /a a-=%b%
echo %a% %b%
pause<nul[/code][code]::乘除交换
@echo off
set a=2
set b=4
set /a a*=%b%
set /a b=%a%/%b%
set /a a/=%b%
echo %a% %b%
pause<nul[/code] [code]@echo off
set a=%random% & set b=%random%
echo a=%a%
echo b=%b%
echo.
set a=%b% & set b=%a%
echo a=%a%
echo b=%b%
pause[/code]利用批处理执行命令时候的预处理来交换变量
[[i] 本帖最后由 jsj30651 于 2008-12-4 18:50 编辑 [/i]] [quote]::乘除交换
@echo off
set a=2
set b=4
set /a a*=%b%
set /a b=%a%/%b%
set /a a/=%b%
echo %a% %b%
pause<nul[/quote]
如果a和b中至少有一个为0,怎么办?
回复 11楼 的帖子
恩,当时没有想那么多,多谢提醒。这个有问题吗?
echo 输入a=set/p a=
echo 输入 b=
set/p b=
set c=%a%
set a=%b%
set b=%c%
pause set c=%a%
set a=%b%
set b=%c%
echo %a%
echo %b%
回复 1楼 的帖子
[code]@echo offset a=2
set b=3
echo.------------
set tt=a
set a=b
set b=tt
echo.ok[/code]
回复 3楼 的帖子
这个代码运行不了。。 @echo offset/p a=请输入a的数值 & set/p b=请输入b的数值
echo a是%a%
echo b是%b%
goto x
set/p a=%b% & set/p b=%a%
:x
echo ab交换后a是%b%
echo ab交换后b是%a%
pause
xchg指令
[code]@echo offset a=2
set b=3
(echo a100&echo mov ax,%a%&echo mov bx,%b%&more /e +5 "%~f0")|debug|find /v ""
pause&exit/b
xchg ax,bx
t=100 3
q[/code] [code]
@echo off
set /a a=5
set /a b=3
set /a a=%a%+%b%
set /a b=%a%-%b%
set /a a=%a%-%b%
echo %a%
echo %b%
pause
[/code] 刚发现我跟9楼的一样
同时佩服8楼 这个代码最好 根据8楼的启发 发现这样也行[code]@echo off
set /a a=5
set /a b=3
for /l %%i in (1,1,1) do set a=%b%&set b=%a%
echo %a%
echo %b%
pause[/code]跟变量延迟一个道理 吼吼 能不能给我点分呀
%E5%9B%9E%E5%A4%8D 21楼 %E7%9A%84%E5%B8%96%E5%AD%90
学习中………………… 很好!!有的真的有意思! 数值交换[quote]
@echo off&set/a A=2,B=3
set/a A=B,B=%A%
echo A=%A% , B=%B%&pause>nul[/quote]
任何变量
[quote]
@echo off&set A=上 &set B=下
set A=%B% &set B=%A%
echo A=%A% , B=%B% &pause>nul
[/quote]
巧解
@echo offset /p a=请输入a:
set /p b=请输入b:
set a=%b% & set b=%a%
echo a=%a% b=%b%
pause>nul
里面涉及到变量延迟,我就不过多解释了,有兴趣有多找些相关资料学习
一般解
@echo offset /p a=请输入a:
set /p b=请输入b:
set /a a+=%b%
set /a b=%a%-%b%
set /a a-=%b%
echo a=%a% b=%b%
pause>nul
此程序只能a,b是数值时可行,有字母就不行,上面的程序却无论a,b是数值还是字母,甚至两者混合都可行 [code]@echo off
set a=2
set b=3
set a=%b% & set b=%a%
echo a变为%a% b变为%b%
pause[/code]噢,24,25楼的用了 @echo off
set a=2
set b=3
set a=%b% & set b=%a%
echo %a% & echo %b%
pause
只要用上管道,由于预处理 好象就可以了……
回复 28楼 loop3231262 的帖子
管道在哪里? 不是连接符吗? @echo offset/p a=请输入a:
set/p b=请输入b:
set c=0
set /a c=%a%
set /a a=%b%
set /a b=%c%
echo %a% %b%
pause
回复 7楼 的帖子
[code]Set "a=%random%" & set "b=%random%"echo %a% %b%
set /a b=a,a=b
echo %a% %b%[/code]好像应该是set/a b=%a%,a=%b%吧,,好像少了%%号
页:
[1]
2