找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 95152|回复: 32

【练习-017】批处理根据输入值进行数值计算

[复制链接]
发表于 2008-8-27 17:20:56 | 显示全部楼层 |阅读模式
出题目的:
        掌握数值计算
解题要求:
        代码通用、高效
        尽量简洁
        不生成临时文件
加分规则:
        1 新手完成前六个步骤的加分10分
   2 新手完成前七个步骤的加分15分
   3 老手完成第七个步骤的加分10分
   4 老手完成第七、第八步骤的加分15分
题目如下:
  通过批处理实现如下操作(要求适应于1-9的输入数)

解题限制:
  请老手不要写出前六个步骤的代码(不要求老手完成)
  高手只需完成第八个步骤
-------------------------------------------------------------------------
螺旋矩阵的解见:18楼我的解和19楼terse的解
发表于 2008-8-27 18:26:33 | 显示全部楼层
第一,二题
@echo off
set /p n=请输入数字(1-9)
set /a mun=1^<^<n
echo 平方是:%mun%
pause>nul
set /a mun=4^<^<n
echo 立方是:%mun%
pause>nul&goto :eof

第三题
@echo off
set n=1
set /p n=请输入数字(1-9)
for /l %%i in (1 1 %n%) do (
  set /a sum+=%%i
)
echo 1-%n%的和是:%sum%
pause
后面的还在想,想好就发上来!

[ 本帖最后由 wangwei4106 于 2008-8-27 18:53 编辑 ]

评分

参与人数 1PB +1 收起 理由
batman + 1 为这种参与精神加分

查看全部评分

 楼主| 发表于 2008-8-27 19:55:01 | 显示全部楼层
原帖由 wangwei4106 于 2008-8-27 18:26 发表
第一,二题
@echo off
set /p n=请输入数字(1-9)
set /a mun=1^

学到的东西不能生搬硬套,要理解后合理地使用,同时还要养成测试的习惯,杜绝将错误的代码贴上来。
发表于 2008-8-27 20:37:23 | 显示全部楼层
第一题
@echo off&setlocal enabledelayedexpansion
set /p n=请输入数字(1-9)
set a=%n%
set b=%n%
set /a mun=%a%*%b%
echo 你要的平方是:!mun!
pause
第二题
@echo off&setlocal enabledelayedexpansion
set /p n=请输入数字(1-9)
set a=%n%
set b=%n%
set c=%n%
set /a mun=%a%*%b%*%c%
echo 你要的立方是:!mun!
pause

[ 本帖最后由 wangwei4106 于 2008-8-27 20:40 编辑 ]
发表于 2008-8-27 20:54:44 | 显示全部楼层
前6题
  1. @echo off
  2. set /p n=请输入数字(1-9)
  3. set /a p=%n%*%n%
  4. set /a pp=%p%*%n%
  5. set o=0 &set oo=1 &set m=0 &set mm=0
  6. set a=1
  7. :jj
  8. set /a o=%o%+%a%
  9. set /a oo=%oo%*%a%
  10. set /a c=%a%*%a%
  11. set /a cc=%a%*%a%*%a%
  12. set /a m=%m%+%c%
  13. set /a mm=%mm%+%cc%
  14. if not %a%==%n% set /a a+=1 &goto jj
  15. echo %n%的平方:%p%
  16. echo %n%的平方:%pp%
  17. echo 从1到%n%的和:%o%
  18. echo 从1到%n%的积:%oo%
  19. echo 从1到%n%的平方和:%m%
  20. echo 从1到%n%的立方和:%mm%
  21. pause>nul
复制代码

评分

参与人数 3PB +17 收起 理由
batman + 5 代码还可简洁
wangwei4106 + 2 非常好!我要像你学习!
浅默 + 10

查看全部评分

发表于 2008-8-27 22:23:47 | 显示全部楼层
前6题如下(后2题明日有空再想想):
  1. @echo off&setlocal enabledelayedexpansion
  2. set ji=1
  3. set /p n=请输入数字(1-9)
  4. set /a pf=%n%*%n%
  5. set /a lf=%pf%*%n%
  6. for /l %%i in (1,1,%n%) do (
  7. set /a he+=%%i
  8. set /a ji*=%%i
  9. set /a pfh_pf=%%i*%%i&set /a pfh+=!pfh_pf!
  10. set /a lfh_lf=!pfh_pf!*%%i&set /a lfh+=!lfh_lf!
  11. )
  12. echo %n%的平方:%pf%
  13. echo %n%的平方:%lf%
  14. echo 从1到%n%的和:%he%
  15. echo 从1到%n%的积:%ji%
  16. echo 从1到%n%的平方和:%pfh%
  17. echo 从1到%n%的立方和:%lfh%

  18. pause>nul
复制代码

[ 本帖最后由 shqf 于 2008-8-27 22:25 编辑 ]

评分

参与人数 1PB +10 收起 理由
batman + 10 代码也可再简化

查看全部评分

发表于 2008-8-27 22:34:42 | 显示全部楼层
第7题
  1. @echo off
  2. set /p n=请输入数字(1-9)
  3. set s=%n% &set nn=0 &set v=1
  4. :jj
  5. set /a nn=%nn%+1
  6. set "mn= %nn%"
  7. set /p=%mn:~-2% <nul
  8. if %nn% lss %s% goto jj
  9. echo.
  10. set /a s=%s%+%n%
  11. set /a v=v+1
  12. if %v% leq %n% goto jj
  13. pause>nul
复制代码

评分

参与人数 1PB +5 收起 理由
batman + 5 代码可优化

查看全部评分

 楼主| 发表于 2008-8-27 23:22:13 | 显示全部楼层
建议楼上用for来简化代码。。。
 楼主| 发表于 2008-8-28 10:22:32 | 显示全部楼层

简化下7楼的代码

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p n=请输入数字(1-9)
  3. set /a nn=n*n
  4. for /l %%i in (1,1,%nn%) do (
  5.      set "a=%%i"&set /a v+=1
  6.      if !a! lss 10 set "a= !a!"
  7.      set /p=!a! <nul
  8.      if !v! equ %n% set "v=0"&echo.
  9. )
  10. pause>nul
复制代码

还可减少一个变量:

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p n=请输入数字(1-9)
  3. set /a nn=n*n
  4. for /l %%i in (1,1,%nn%) do (
  5.      set /a v+=1
  6.      if %%i lss 10 (
  7.         set /p= %%i <nul
  8.         ) else (
  9.         set /p=%%i <nul
  10.      )
  11.      if !v! equ %n% set "v=0"&echo.
  12. )
  13. pause>nul
复制代码

[ 本帖最后由 batman 于 2008-8-28 10:31 编辑 ]
发表于 2008-8-28 12:40:48 | 显示全部楼层
batman给我加分,受鼓励,前6步精简了二行代码,再贴出第7步我的解法(第8步实在无从下手了):
  1. @echo off&setlocal enabledelayedexpansion
  2. set ji=1
  3. set /p n=请输入数字(1-9)

  4. for /l %%i in (1,1,%n%) do (
  5. set /a he+=%%i
  6. set /a ji*=%%i
  7. set /a pf=%%i*%%i&set /a pfh+=!pf!
  8. set /a lf=!pf!*%%i&set /a lfh+=!lf!
  9. )

  10. echo %n%的平方:%pf%
  11. echo %n%的平方:%lf%
  12. echo 从1到%n%的和:%he%
  13. echo 从1到%n%的积:%ji%
  14. echo 从1到%n%的平方和:%pfh%
  15. echo 从1到%n%的立方和:%lfh%
  16. echo 4行4列的数列:
  17. for /l %%i in (1,1,%n%) do (
  18.         for /l %%j in (1,1,%n%) do (set /a ij=%%i*%n%-%n%+%%j&set /p=!ij! <nul)
  19.         echo.
  20. )

  21. pause>nul
复制代码

[ 本帖最后由 shqf 于 2008-8-28 12:49 编辑 ]
发表于 2008-8-28 14:10:12 | 显示全部楼层
for 的/l产生的就是现有的数列,不必再在for里面set/a v+=1
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p n=输入:
  3. set/a m=n*n
  4. for /l %%a in (1 1 %m%) do (
  5.      set/a mod=%%a%%n
  6.      if %%a lss 10 (set/p= %%a <nul) else set/p=%%a <nul
  7.      if !mod! equ 0 echo.
  8. )
  9. pause>nul
复制代码

[ 本帖最后由 pusofalse 于 2008-8-28 14:13 编辑 ]
 楼主| 发表于 2008-8-28 15:00:54 | 显示全部楼层
楼上确实将代码进一步进行了简化,但变量个数还是一样的吧,少了个v多了个mod。
 楼主| 发表于 2008-8-28 15:12:42 | 显示全部楼层
原帖由 shqf 于 2008-8-28 12:40 发表
batman给我加分,受鼓励,前6步精简了二行代码,再贴出第7步我的解法(第8步实在无从下手了):@echo off&setlocal enabledelayedexpansion
set ji=1
set /p n=请输入数字(1-9)

for /l %%i in (1,1,%n%) do  ...

有几个问题:
1 这是个小问题,一直显示的是4行4列
2 数例没有完全对齐,原因在没有对小于10的数进行处理
3 代码书写不规范,切不可以为将代码挤在一堆就是简洁了,这样大大降低了代码的可读性
4 set /a 可以如此连写:set /a a+=1,b+=a,c+=b

[ 本帖最后由 batman 于 2008-8-28 17:05 编辑 ]
发表于 2008-8-28 16:45:17 | 显示全部楼层
哦,以为想得很周全了,竟仍还有好多问题。领教了,谢谢。
发表于 2008-8-28 16:52:43 | 显示全部楼层

回复 13楼 的帖子

  1. 4 set /a 可以如此连写:set /a a+=1,b+=a,c+=b ,当然前提是开启了变量延迟
复制代码

不必开启变量延迟啊,set/a 的特性就是这样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:29 , Processed in 0.013811 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表