Board logo

标题: 【练习-061】小学生加减法算式批处理生成器 [打印本页]

作者: batman    时间: 2010-9-20 10:21     标题: 【练习-061】小学生加减法算式批处理生成器

出题目的:
  综合考查对set 命令以及if判断语句的运用
加分原则:
  优秀代码予以技术+1的鼓励
解题要求:
  1、请版主、技术组成员先将机会留给新人
  2、代码简洁、高效、无临时文件
题目如下:
  编写代码随机生成指定运算范围内的整数加减法算式,其中指定范围是由使用者输入,在这其中要注意加法运算
的和不能超过指定范围(上限),减法运算结果不能为负数(减数不能大于被减数),然后接收输入的答案并做出判
断,如果结果正确则显示正确,不正确显示不正确并给出正确结果,接收回车指令后给出下一个随机算式,这时不要
求再接收运算范围的输入。运行过程如下所示:
[attach]2980[/attach]
作者: sgaizxt001    时间: 2010-9-20 11:24

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p max=请输入范围上限:
  4. cls
  5. set /a ran=!random!%%2
  6. if %ran% equ 0 (goto jiafa) else (goto jianfa)
  7. :jiafa
  8. set /a a=!random!%%%max%+1
  9. set /a b=!random!%%%max%+1
  10. set /a number=%a%+%b%
  11. if %number% gtr %max% goto jiafa
  12. echo %a%+%b%=?
  13. set /p res=请输入答案:
  14. echo.
  15. if %res% equ %number% (echo 正确) else (echo 错误,正确答案是%number%)
  16. pause
  17. goto :eof
  18. :jianfa
  19. set /a a=!random!%%%max%+1
  20. set /a b=!random!%%%max%+1
  21. if %a% gtr %b% (call :jian %a% %b%) else (call :jian %b% %a%)
  22. set /p res=请输入答案:
  23. if %res% equ %num% (echo 正确) else (echo 错误,正确答案是%num%)
  24. pause
  25. goto :eof
  26. :jian
  27. echo %1-%2=?
  28. set /a num=%1-%2
  29. echo.
  30. goto :eof
复制代码
已经修改为随机加减法了,加法的运算的上限的判断问题,我没有更好的思路,batman可否给讲解一下?

[ 本帖最后由 sgaizxt001 于 2010-9-20 14:14 编辑 ]
作者: batman    时间: 2010-9-20 11:38     标题: 指出二楼代码需要改进的地方

1、算式是随机生成的,不用选择加减法

2、代码采用了判断加返回call循环模式,在算法上效率较低
作者: batman    时间: 2010-9-20 11:53

郁闷,没办法给贴子加分!!!
作者: netbenton    时间: 2010-9-20 12:13

晕~~~~只能扣分,不能加分~~~~~

为什么这样 /ku
作者: 523066680    时间: 2010-9-20 12:59     标题: 回复 5楼 的帖子

你们啊,现在流行+技术! 技术!
我们要尊重党的策略。
作者: robinsnelson    时间: 2010-9-20 13:15

  1. @echo off
  2. @color 4e
  3. set /p max="请输入最大值:":
  4. ::这里有点繁琐 鉴于我是小白 好多功能还不会使用 见谅。
  5. ::产生随机数
  6. :start1
  7. set num1=%random%
  8. if %num1% gtr %max% goto start1
  9. :start2
  10. set num2=%random%
  11. if %num2% gtr %max% goto start2
  12. if %num1% lss %num2% goto start1
  13. ::随机产生加减法
  14. if %random:~1,1% LSS 5 (goto plus) else (goto minus)
  15. ::加法
  16. :plus
  17. set /a true=%num1%+%num2%
  18. echo %num1%+%num2%=?
  19. goto judge
  20. ::减法
  21. :minus
  22. set /a true=%num1%-%num2%
  23. echo %num1%-%num2%=?
  24. ::判断结果
  25. :judge
  26. set /p typein="请输入结果:":
  27. if %true% equ %typein% (echo 恭喜你答对了!!
  28.                         goto end) else (
  29.                         echo 计算错误,正确答案是%true%
  30.                         goto end)
  31. :end
  32. @pause >nul
复制代码
写的不是一般的麻烦 不过应该符合要求了

贴上来之后才发现加法的判断有点小问题。。
9#是我修改过后的代码 看那个吧。。

[ 本帖最后由 robinsnelson 于 2010-9-20 13:57 编辑 ]
作者: edmond    时间: 2010-9-20 13:29

@echo off
setlocal enabledelayedexpansion
color 1f
title 小学加减法练习簿
set /p max=请输入范围上限:
set /p count=请输入练习次数:
set t=0
set r=0
set s=0
:start
if !count!==!t! (
cls&echo 您已经完成了练习次数,正确!r!次,错误!s!次,加油!&echo 按任意键结束练习&pause>nul&exit
)
cls
set /a m=!random!%%!max!+1
set /a n=!random!%%!max!+1
if !n! lss !m! (set /a  res=!m!-!n!&echo !m!-!n!=) else (set /a res=!m!+!n!&echo !m!+!n!=)
:res
set /p result=请输入答案:
echo !result!
echo.
if !res! equ !result! (echo 恭喜,正确&set /a r+=1) else (echo 错误,正确答案是!res!&set /a s+=1)

ping 127.1 -n 2 >nul
set /a t+=1
goto start

给点分,可以不咯

[ 本帖最后由 edmond 于 2010-9-20 13:31 编辑 ]
作者: robinsnelson    时间: 2010-9-20 13:33

  1. @echo off
  2. @color 4e
  3. set /p max="请输入最大值:":
  4. ::随机产生加减法
  5. :loop
  6. if %random:~1,1% LSS 5 (goto plus) else (goto minus)
  7. ::加法
  8. :plus
  9. :start1
  10. set num1=%random%
  11. if %num1% gtr %max% goto start1
  12. :start2
  13. set num2=%random%
  14. if %num2% gtr %max% goto start2
  15. set /a true=%num1%+%num2%
  16. if %true% gtr %max% goto plus
  17. echo %num1%+%num2%=?
  18. goto judge
  19. ::减法
  20. :minus
  21. :start3
  22. set num1=%random%
  23. if %num1% gtr %max% goto start3
  24. :start4
  25. set num2=%random%
  26. if %num2% gtr %max% goto start4
  27. set /a true=%num1%-%num2%
  28. if %true% lss 0 goto minus
  29. echo %num1%-%num2%=?
  30. ::判断结果
  31. :judge
  32. set /p typein="请输入结果:":
  33. if %true% equ %typein% (echo 恭喜你答对了!!
  34.                         goto end) else (
  35.                         echo 计算错误,正确答案是%true%
  36.                         goto end)
  37. :end
  38. goto loop
  39. @pause >nul
复制代码
修改了一下 虽然代码更麻烦了 不过运行的快了一些 最后一个要求接受回车给出下个指令 不太会 所以我就全部设成循环了 退出的话 我想的是可以对那个tpyein的判断 给出输入特定字符退出 然后再执行一下exit命令 就不在里面写了

[ 本帖最后由 robinsnelson 于 2010-9-20 14:02 编辑 ]
作者: q120072949    时间: 2010-9-20 14:38

再次学习了!!!!!
作者: batman    时间: 2010-9-20 14:48     标题: 回复 8楼 的帖子

参与精神是最重要的,不管你的代码写的怎么样,也不管你最后会得到什么样的评价,但起码你动了脑动了手,

你自己得到了提高。另外论坛现在的设置是不能加pb了,所以我只能对优秀的代码加技术分,希望兄弟不要为此而灰

心,继续努力,ok?
作者: batman    时间: 2010-9-20 14:50     标题: 回复 9楼 的帖子

有进步,但代码运算效率仍然不高,建议不要采用判断加返回的运算方法

小提示:加减法可以不分开写不?

[ 本帖最后由 batman 于 2010-9-20 14:55 编辑 ]
作者: 随风    时间: 2010-9-20 15:20

用户输入的范围数是指的什么数的范围?
比如输入 20
是指 a 和 b 都不能大于 20 吗?
作者: batman    时间: 2010-9-20 15:24     标题: 回复 13楼 的帖子

如输入100,表明生成100以内的加减法,也就是减数和算式和均不大于100
作者: 随风    时间: 2010-9-20 15:34

感觉按我13楼的提议会更好点,否则你那个cmd数值范围的要求不大啊。
作者: batman    时间: 2010-9-20 15:48     标题: 回复 15楼 的帖子

这是跟着教科书走的,10以内就是结果在10以内,100以内就是结果在100以内。
作者: robinsnelson    时间: 2010-9-20 18:45     标题: 回复 12楼 的帖子

超版大人 能不能给的提示多一些 我学批处理才几天 好多都没听说过 说实话 刚看到题目 我想到的就是我写出来的这些 或者给我说下您的QQ 我也好请教您不是
PS:回复帖子是不是没有通知啊 我都不知道有人回复了 是回来学习其他代码的时候才看到回复的。
作者: sgaizxt001    时间: 2010-9-20 18:53

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p max=请输入范围上限:
  4. cls
  5. set /a ran=!random!%%2
  6. if %ran% equ 0 (set str=-) else (set str=+)
  7. :loop
  8. set /a a=!random!%%%max%+1
  9. set /a b=!random!%%%max%+1
  10. set /a n=%a%+%b%
  11. if %n% gtr %max% goto :loop
  12. if %a% gtr %b% (call :lp %a% %b%) else (call :lp %b% %a%)
  13. set /p res=请输入答案:
  14. if %res% equ %num% (echo 正确) else (echo 错误,正确答案是: %num%)
  15. echo.
  16. pause
  17. goto :eof
  18. :lp
  19. echo %1%str%%2=?
  20. set /a num=%1%str%%2
  21. echo.
复制代码
略有改进,但是还是无法解决和上限的问题
作者: Batcher    时间: 2010-9-20 21:05     标题: 回复 17楼 的帖子

可以加论坛的QQ群
作者: zqz0012005    时间: 2010-9-20 21:46

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set limit=100
  4. set /p limit=指定范围:
  5. :loop
  6. set /a "x = %random% %% (limit+1)"
  7. set /a "p = %random% %% (limit-x+1)"
  8. set /a "q = %random% %% (x+1)"
  9. set /a "bool = %random% %% 2"
  10. if %bool%==1 (set y=+%p%) else (set y=-%q%)
  11. set /a r=%x%%y%
  12. echo %x%%y%=?
  13. set /p ans=请输入答案:
  14. if not "%ans%"=="%r%" (echo 错误,正确答案是%r%&pause>nul)
  15. goto loop
  16. pause
复制代码

作者: bat_521    时间: 2010-9-21 00:52     标题: 菜鸟的答案

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 0a
  4. echo.
  5. echo 以下是小学加减练习题
  6. echo.
  7. set/p var=请输入计算范围:
  8. :a
  9. set /a a=%random%%%%var%
  10. set /a b=%random%%%%var%
  11. if %a% gtr %b% (goto :b) else goto :a
  12. :b
  13. set /a c=%a%-%b%
  14. echo.
  15. echo %a%-%b%=?
  16. echo.
  17. set/p d=请输入答案:
  18. echo.
  19. if %c%==%d% (echo 答案正确) else echo 答案错误;正确答案是:%c%
  20. echo.
  21. set /a e=%random%%%%var%
  22. set /a f=%random%%%%var%
  23. set /a g=%e%+%f%
  24. echo.
  25. echo %e%+%f%=?
  26. echo.
  27. set/p h=请输入答案:
  28. echo.
  29. if %g%==%h% (echo 答案正确) else echo 答案错误;正确答案是:%g%
  30. echo.
  31. pause
复制代码

作者: robinsnelson    时间: 2010-9-21 09:52

  1. @echo off
  2. @color 4e
  3. set /p max="请输入最大值:":
  4. setlocal enabledelayedexpansion
  5. :loop
  6. set /a num1=%random%%%%max%+1
  7. set /a num2=%random%%%%max%+1
  8. set /a base=%random%%%2+1
  9. cls
  10. if %base% equ 1 (
  11.                 set /a true=%num1%+%num2%
  12.                 if !true! gtr %max% goto loop
  13.                 echo %num1%+%num2%=?
  14.                 ) else (
  15.                 set /a true=%num1%-%num2%
  16.                 if !true! lss 0 goto loop
  17.                 echo %num1%-%num2%=?
  18.                 )
  19. set /p typein="请输入答案:":
  20. if %typein% equ %true% (echo 恭喜你,答对啦!
  21.                        goto end) else (
  22.                        echo 计算错误,正确答案为%true%
  23.                        goto end)
  24. :end
  25. pause>nul
  26. goto loop
复制代码
参考前面几位前辈 我又写了一下 请管理员大人再看一下
作者: netbenton    时间: 2010-9-21 13:18

  1. @echo off&color 2f
  2. setlocal enableDelayedExpansion
  3. set /p max=输入上限数:
  4. set /a max+=1
  5. :lp
  6. set /a tre=!random!%%max,one=!random!%%max,fh=!random!%%2
  7. if !tre! gtr !one! (
  8.   set/a two=tre-one
  9. if !fh! equ 0 (set str=!tre!-!one!) else (set str=!one!+!two!)
  10. ) else (
  11.   set/a two=one-tre
  12.   if !fh! equ 0 (set str=!one!-!tre!) else (set str=!tre!+!two!)
  13. )
  14. set/a des=!str!
  15. echo;!str!=?
  16. set in=err
  17. set /p in=输入结果:
  18. if !in! equ !des! (echo;答对了!你真聪明!) else (echo;真可惜,正确答案是!des!)
  19. pause>nul
  20. echo;
  21. echo;
  22. goto :lp
复制代码

作者: edmond    时间: 2010-9-21 13:33

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 1f
  4. mode con: cols=55 lines=20
  5. title 小学加减法练习簿
  6. set /p max=请输入范围上限:
  7. set /p count=请输入练习次数:
  8. set t=0
  9. set r=0
  10. set s=0
  11. :start
  12. if !count!==!t! (
  13. cls&echo 您已经完成了练习次数,正确!r!次,错误!s!次,加油!&echo 按任意键结束练习&pause>nul&exit
  14. )
  15. cls
  16. set /a m=!random!%%!max!+1
  17. set /a n=!random!%%!max!+1
  18. set /a u=!m!+!n!
  19. if !n! lss !m! (set /a  res=!m!-!n!&echo !m!-!n!=
  20. ) else if !u! lss !max! (set /a res=!u!&echo !m!+!n!=) else (set /a res=!n!-!m!&echo !n!-!m!=)
  21. :res
  22. set /p result=请输入答案:
  23. if not defined result (echo 您没有输入任何数据,请再次输入答案&goto res)
  24. echo.
  25. if !res! equ !result! (echo 恭喜,正确&set /a r+=1) else (echo 错误,正确答案是!res!&set /a s+=1)
  26. ping 127.1 -n 2 >nul
  27. set /a t+=1
  28. set "result="
  29. goto start
复制代码
这个是 符合了 老版 的题意了
作者: batman    时间: 2010-9-25 11:17     标题: 先公布下我出题前的代码吧:

  1. @echo off&setlocal enabledelayedexpansion
  2. color 9f&mode con cols=40 lines=10
  3. echo.
  4. set /p num=请输入运算范围(如10以内输入10):
  5. set ".0=+"&set ".1=-"
  6. :lp
  7. cls&echo.
  8. set /a a=%random%%%%num%+1,b=%random%%%2
  9. if %a% equ 0 if %b% equ 1 set /a b=0
  10. if %a% equ %num% if %b% equ 0 set /a b=1
  11. if %b% equ 0 (
  12.    set /a "c=%random%%%(num-a)+1"
  13.    ) else (
  14.    set /a "c=%random%%%%a%+1"
  15. )
  16. set /a anser=%a%!.%b%!%c%&echo %a%!.%b%!%c%=?
  17. echo.
  18. set "_anser="&set /p _anser=请输入答案:
  19. echo.
  20. if "%anser%" equ "%_anser%" (
  21.    echo 正确
  22.    ) else (
  23.    echo 错误,正确答案是%anser%
  24. )
  25. pause>nul&goto lp
复制代码

作者: powerbat    时间: 2010-9-25 13:44

原帖由 zqz0012005 于 2010-9-20 21:46 发表
@echo off
setlocal enableDelayedExpansion
set limit=100
set /p limit=指定范围:
:loop
set /a "x = %random% %% (limit+1)"
set /a "p = %random% %% (limit-x+1)"
set /a "q = %random% %% (x+1)"
set ...

这个有意思。
setlocal enableDelayedExpansion 好像是多余的,惯性吧,或者是模板?
作者: 随风    时间: 2010-9-27 01:14

  1. @echo off
  2. set /a g="1<<31",d="~g"
  3. echo; 请输入范围数,不能大于 %d%
  4. echo;&set /p n=
  5. set f=-
  6. :loop
  7.     setlocal&cls
  8.     set /a a=%random%%%n,x=n-a,b=%random% %% x
  9.     if %a% lss %b% set a=%b%&set b=%a%&set f=+
  10.     set /a c=a%f%b
  11.     echo  %a% %f% %b% = ?
  12.     echo;&set /p j= 请输入答案  
  13.     if %j% equ %c% (set k= 正确) else set "k= 错误,%a% %f% %b% = %c%"
  14.     echo;&echo %k%
  15.     echo;&pause
  16. endlocal&goto loop
复制代码
两数都不能大于指定范围数,和不能大于cmd范围数
  1. @echo off
  2. set /a g="1<<31",d="~g"
  3. echo; 请输入范围数,即两数都不能大于的数,不能大于 %d%
  4. echo;&set /p n=
  5. set /a x=d-n+1
  6. set f=-
  7. :loop
  8.     setlocal&cls
  9.     set /a a=%random%%%n,b=%random% %% x %%n
  10.     if %a% lss %b% set a=%b%&set b=%a%&set f=+
  11.     set /a c=a%f%b
  12.     echo  %a% %f% %b% = ?
  13.     echo;&set /p j= 请输入答案  
  14.     if %j% equ %c% (set k= 正确) else set "k= 错误,%a% %f% %b% = %c%"
  15.     echo;&echo %k%
  16.     echo;&pause
  17. endlocal&goto loop
复制代码

作者: yangfengoo    时间: 2010-9-27 10:05

  1. @echo off&setlocal enabledelayedexpansion
  2. set/p fw=请输入运算范围:
  3. :loop
  4. set/a x1=!random!%%!fw!,x2=!random!%%!fw!,x=!random!%%2
  5. if !x!==0 (
  6.      set/a xx=x1+x2
  7.      if !xx! leq !fw! (echo !x1!+!x2!=?) else (goto loop)   
  8.    ) else (
  9.      set/a xx=x1-x2
  10.   if !xx! geq 0 (echo !x1!-!x2!=?) else (goto loop)
  11.    )
  12. set/p da=请输入答案:
  13. if "!xx!"=="!da!" (echo,正确) else (echo,错误,正确答案是:!xx!)
  14. echo,&goto loop
复制代码

[ 本帖最后由 yangfengoo 于 2010-9-27 10:12 编辑 ]
作者: gshccr    时间: 2010-10-13 11:04

基本符合版主的要求,不过代码太长了,不知道哪里需要改进的地方,还请大家多多指教!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p a=请输入指定范围数:
  4. set /a a1=%a%+1
  5. :a
  6. cls
  7. set /a t1=%random%%% %a1%,t2=%random%%% %a1%
  8. set /a y1=%a1%-%t1%-1,y2=%a1%-%t2%-1
  9. if %y1% geq %y2% (
  10. if %y2% geq 1 (set /a the=%y1%+%y2%
  11. if !the! gtr %a% (
  12. set /a daan=%y1%-%y2%&echo %y1%-%y2%=?&goto b)))
  13. set /a r=%random%%% 2+1
  14. if %r%==1 (set n=2) else (set n=1)
  15. set /a wet=!y%r%!+!y%n%!
  16. if %wet% gtr %a% (set /a daan=%y2%-%y1%&echo %y2%-%y1%=?) else (
  17. set /a daan=!y%r%!+!y%n%!&echo !y%r%!+!y%n%!=?)
  18. :b
  19. set /p g=请输入正确答案:
  20. if "%g%"=="%daan%" (echo 正确) else (echo 错误,正确答案为%daan%)
  21. pause
  22. goto a
复制代码

[ 本帖最后由 gshccr 于 2010-10-13 11:11 编辑 ]
作者: qzwqzw    时间: 2011-3-13 12:36

贴一个没有循环和选择结构的顺序性解法
常规之外略作创新
没有刻意处理诸如0或者最大值的边界问题
在运算范围为1时可能会丢失某些可能
为0时则直接报错退出

  1. @echo off
  2. echo.
  3. set /p num=请输入运算范围(如10以内输入10):
  4. set ops=+-
  5. :loop
  6. cls&echo.
  7. rem 生成大数big,在减法中作被减数,在加法中作和数
  8. set /a big=%random% %% %num%+1
  9. rem 生成运算符op,并转换为字符opr,0为加法,1为减法
  10. set /a op=%random% %% 2
  11. call set opr=%%ops:~%op%,1%%
  12. rem 生成运算数opd1,减法为大数big,加法时为小于big的随机数
  13. set /a opd1=big*op + (%random% %% big)*(!op)
  14. rem 生成运算数opd2,减法为小于big的随机数,加法时为big-opr1
  15. set /a opd2=(%random% %% big)*op + (big-opd1)*(!op)
  16. rem 生成结果值result
  17. set /a result=opd1 %opr% opd2
  18. echo %opd1% %opr% %opd2% = ?
  19. echo.
  20. set "answer="
  21. set /p answer=请输入答案:
  22. echo.
  23. rem 根据结果与输入的异同显示提示信息
  24. set _0=正确
  25. set _1=错误,正确答案是%result%
  26. rem 两次取反是想将相减后的差值转换为是否相等的逻辑值0或1
  27. set /a judge=!(!(answer-result))
  28. call echo %%_%judge%%%
  29. pause>nul
  30. goto loop
复制代码

作者: applba    时间: 2011-4-27 11:57

本帖最后由 applba 于 2011-4-27 12:21 编辑

  1. @echo off &setlocal enabledelayedexpansion &color 17
  2. :limit
  3. set /p n1=请输入最大计算范围:
  4. set /a n=!n1!  && if  !n! lss 2 (echo 您输入的数字有误!&goto limit)
  5. :gen
  6. set /a "a=(!random!%%!n!+1),b=(!random!%%!n!+1)"
  7. if !a! gtr !b! (
  8. set /a r0=!a!-!b!
  9. set /p "r1=!a!-!b!=?_"
  10. ) else (
  11. set /a r0=!a!+!b!
  12. if !r0! GTR !n! goto gen
  13. set /p "r1=!a!+!b!=?_"
  14. )
  15. if !r0! neq !r1! (echo "你答错了!正确答案是:!r0!" ) else (echo 您答对了!请再接再厉吧~)
  16. pause>nul&cls&goto gen
复制代码
::我搞了半天没明白按“回车键”继续?
作者: jixun66    时间: 2011-5-31 01:16

本帖最后由 jixun66 于 2011-5-31 01:28 编辑

代码很简单。


压缩前代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p max=请输入算数的和的上限:
  4. if %max% LEQ 1 echo 最大值错误&%0
  5. :loop
  6. set /a p=%random% %% 2
  7. set /a p1=%random% %% %max%
  8. if !p!==1 (
  9. rem 加法
  10. set /a p2=%random% %% (^%max%-!p1!^)
  11. set s=+
  12. ) else (
  13. rem 减法
  14. set /a p2=%random% %% !p1!
  15. set s=-
  16. )
  17. echo.
  18. echo %p1%%s%%p2%=?
  19. echo.
  20. set ans=
  21. set /p ans=请输入答案:
  22. set /a r=%p1%%s%%p2%
  23. if "%r%"=="%ans%" (echo 答案正确!) else (echo 答案错误!&echo 正确答案是:%r%)
  24. echo.
  25. pause
  26. goto loop
复制代码
压缩后代码:
  1. @echo off&setlocal enabledelayedexpansion&set /p max=请输入算数的和的上限:
  2. if %max% LEQ 1 echo 最大值错误&%0
  3. :loop
  4. set /a p=%random% %% 2
  5. set /a p1=%random% %% %max%
  6. if !p!==1 (
  7. set /a p2=%random% %% (^%max%-!p1!^)
  8. set s=+
  9. ) else (
  10. set /a p2=%random% %% !p1!
  11. set s=-
  12. )
  13. echo.&echo %p1%%s%%p2%=?&echo.&set ans=
  14. set /p ans=请输入答案:
  15. set /a r=%p1%%s%%p2%
  16. if "%r%"=="%ans%" (echo 答案正确!) else (echo 答案错误!&echo 正确答案是:%r%)
  17. echo.&pause&goto loop
复制代码
压缩后的代码的开头的空格怎么消失了..虽然下方的复制代码能复制进去。
还有一点,复制代码的时候我这里的TAB缩进符总是显示为『? ? ? ? 』,请问有没有解决办法?
作者: Batcher    时间: 2011-5-31 19:51

32# jixun66


DZ论坛程序会自己转换的,木有办法。
作者: asd821089612    时间: 2011-7-23 09:20

  1. @echo off
  2. set /p a=请输入是多少以内的加减法
  3. color 9f
  4. :start
  5. set /a pan=%random%%%2
  6. if %pan%==1 goto jia
  7. if %pan%==0 goto jian
  8. :jia
  9. set /a b=%random%%%(%a%+1)
  10. set /a d=%a%-%b%+1
  11. set /a c=%random%%%%d%
  12. set /a he=%b%+%c%
  13. echo %b%+%c%=?
  14. set /p an=请输入答案:
  15. if %an%==%he% echo 恭喜你,答对了
  16. if %an% neq %he% echo 错误,正确答案是%he%
  17. pause>nul
  18. goto start
  19. :jian
  20. set /a b=%random%%%(%a%+1)
  21. set /a c=%random%%%(%a%+1)
  22. if %b% gtr %c% goto 1
  23. goto 2
  24. :1
  25. echo %b%-%c%=?
  26. set /p an=请输入答案:
  27. set /a cha=%b%-%c%
  28. if %an%==%cha% echo 恭喜你,答对了
  29. if %an% neq %cha% echo 错误,正确答案是%he%
  30. pause>nul
  31. goto start
  32. :2
  33. echo %c%-%b%=?
  34. set /p an=请输入答案:
  35. set /a cha=%c%-%b%
  36. if %an%==%cha% echo 恭喜你,答对了
  37. if %an% neq %cha% echo 错误,正确答案是%he%
  38. pause>nul
  39. goto start
复制代码

作者: smith203    时间: 2011-8-20 14:39

批处理是不是不能算小数?

明明结果是1.8, 显示的却是1,
作者: raymai97    时间: 2011-8-20 16:51

回复 35# smith203


    没错,批处理天生不能算小数点~
作者: brim    时间: 2011-9-17 11:49

菜鸟一个,请多指教。
  1. @echo off
  2. color 9F
  3. :aa
  4. Set /a "sum1=%random%%%1000"
  5. Set /a "sum2=%random%%%1000"
  6. If %sum1% gtr %sum2% (Set /a sum3=%sum1%-%sum2% &echo %sum1%-%sum2%) else (Set /a sum3=%sum2%-%sum1%&echo %sum2%-%sum1%)
  7. Set /p sum4= 请输入您的答案:
  8. if %sum3%==%sum4% (echo  正确答案是%sum3%&echo  你的答案是%sum4%恭喜你答对了!继续努力,不要骄傲喔) else echo  正确答案是%sum3%&echo  你的答案是%sum4%,太可惜了,你答错了!不要气馁喔,继续努力,加油!
  9. Goto aa
复制代码

作者: ljfnh403    时间: 2012-3-10 17:58

@echo off&setlocal EnableDelayedExpansion&set f=+-&set "制表符=        "&rem 请在这里放入制表符
set 退格=%制表符%-&mode con cols=80 lines=25
set/p max=输入最大数值:&set/a max+=1
for /l %%a in () do (set/a a1=!random!%%max,a2=!random!%%max,r=!random!%%2
for %%b in (!r!) do (set/p ans=→!a1!!f:~%%b,1!!a2!=
set/a ans=a1!f:~%%b,1!a2-ans+0
echo.%退格%
if !ans!==0 (echo.√) else echo.×))
作者: ljfnh403    时间: 2012-3-10 18:00

@echo off&setlocal EnableDelayedExpansion&set f=+-
set "制表符=        "&rem 请在这里放入制表符
set "退格符="&rem 请在这里放入12个退格符
set 退格=%制表符%%退格符%&mode con cols=80 lines=25
set/p max=输入最大数值:&set/a max+=1
for /l %%a in () do (set/a a1=!random!%%max,a2=!random!%%max,r=!random!%%2
for %%b in (!r!) do (set/p ans=→!a1!!f:~%%b,1!!a2!=
set/a ans=a1!f:~%%b,1!a2-ans+0
echo.%退格%
if !ans!==0 (echo.√) else echo.×))
作者: sds    时间: 2022-12-19 21:03

我也做了一个,个人感觉还行,就是减法出现负数的情况不可避免(以我现在的水平来看)
  1. @echo off
  2. color 1F
  3. setlocal enableDelayedExpansion
  4. title 小学生加减法练习器v1.0
  5. :menu
  6. cls
  7. echo      ┌───────────────────┐
  8. echo         小学生加减法练习器v1.0      
  9. echo      └───────────────────┘
  10. echo               ┌──┐
  11. echo               │1│     开始练习
  12. echo               └──┘
  13. echo.
  14. echo               ┌──┐
  15. echo               │2│     退出
  16. echo               └──┘
  17. set /p choose=请输入:
  18. if %choose%==1 goto lianxi
  19. if %choose%==2 exit
  20. echo 输入有误! 请重新输入
  21. pause>nul
  22. goto menu
  23. :lianxi
  24. cls
  25. set /p sx=请输入数字上限:
  26. set /p sc=要计算的是加法还是减法(A,B)?
  27. :clc
  28. ::处理加数(或减数)
  29. set /a m=%random%%%%sx%
  30. set /a n=%random%%%%sx%
  31. ::处理算式
  32. if %sc%==A set ss=%m%+%n%
  33. if %sc%==B set ss=%m%-%n%
  34. ::生成答案
  35. set /a results=%ss%
  36. :loop
  37. cls
  38. set times=0
  39. echo        第[%times%]道题
  40. echo    请计算:%ss%
  41. set /p ans=请输入结果:
  42. set /a time=%time%+1
  43. ::结果与标准答案进行对比
  44. if %ans% gtr %results% set d=大&goto error
  45. if %ans% lss %results% set d=小&goto error
  46. if %ans% equ %results% goto right
  47. :error
  48. cls
  49. echo 你计算的结果%d%了!
  50. pause>nul
  51. goto clc
  52. :right
  53. cls
  54. echo Bingo 你算对了
  55. echo 按任意键继续答题
  56. pause>nul
  57. goto clc
复制代码

作者: sds    时间: 2022-12-20 09:46

发现一个bug:因为每次算完都会跳到clc,导致变量%times%不断清零,无法正常计数

下面是修复后的代码
  1. @echo off
  2. color 1F
  3. setlocal enableDelayedExpansion
  4. title 小学生加减法练习器v1.1
  5. :menu
  6. cls
  7. echo      ┌───────────────────┐
  8. echo         小学生加减法练习器v1.0
  9. echo      └───────────────────┘
  10. echo               ┌──┐
  11. echo               │1│     开始练习
  12. echo               └──┘
  13. echo.
  14. echo               ┌──┐
  15. echo               │2│     退出
  16. echo               └──┘
  17. set /p choose=请输入:
  18. if %choose%==1 goto lianxi
  19. if %choose%==2 exit
  20. echo 输入有误! 请重新输入
  21. pause>nul
  22. goto menu
  23. :lianxi
  24. set times=0
  25. cls
  26. set /p sx=请输入数字上限:
  27. set /p sc=要计算的是加法还是减法(A,B)?
  28. :clc
  29. ::处理加数(或减数)
  30. set /a m=%random%%%%sx%
  31. set /a n=%random%%%%sx%
  32. ::处理算式
  33. if %sc%==A set ss=%m%+%n%
  34. if %sc%==B set ss=%m%-%n%
  35. ::生成答案
  36. set /a results=%ss%
  37. :loop
  38. cls
  39. echo        第[%times%]道题
  40. echo    请计算:%ss%
  41. set /p ans=请输入结果:
  42. set /a times=%times%+1
  43. ::结果与标准答案进行对比
  44. if %ans% gtr %results% set d=大&goto error
  45. if %ans% lss %results% set d=小&goto error
  46. if %ans% equ %results% goto right
  47. :error
  48. cls
  49. echo 你计算的结果%d%了!
  50. pause>nul
  51. goto clc
  52. :right
  53. cls
  54. echo Bingo 你算对了
  55. echo 按任意键继续答题
  56. pause>nul
  57. goto clc
复制代码

作者: sds    时间: 2022-12-20 09:50

本帖最后由 sds 于 2022-12-20 09:52 编辑

压缩后代码,去掉了菜单和注释,简化代码
  1. @echo off
  2. :lianxi
  3. set times=0
  4. cls
  5. set /p sx=请输入数字上限:
  6. set /p sc=要计算的是加法还是减法(A,B)?
  7. :clc
  8. set /a m=%random%%%%sx%
  9. set /a n=%random%%%%sx%
  10. if %sc%==A set ss=%m%+%n%
  11. if %sc%==B set ss=%m%-%n%
  12. set /a results=%ss%
  13. :loop
  14. cls
  15. echo        第[%times%]道题
  16. echo    请计算:%ss%
  17. set /p ans=请输入结果:
  18. set /a times=%times%+1
  19. if %ans% gtr %results% set d=大&goto error
  20. if %ans% lss %results% set d=小&goto error
  21. if %ans% equ %results% goto right
  22. :error
  23. cls
  24. echo 你计算的结果%d%了!
  25. pause>nul
  26. goto clc
  27. :right
  28. cls
  29. echo Bingo 你算对了
  30. echo 按任意键继续答题
  31. pause>nul
  32. goto clc
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2