标题: 【练习-061】小学生加减法算式批处理生成器 [打印本页]
作者: batman 时间: 2010-9-20 10:21 标题: 【练习-061】小学生加减法算式批处理生成器
出题目的:
综合考查对set 命令以及if判断语句的运用
加分原则:
优秀代码予以技术+1的鼓励
解题要求:
1、请版主、技术组成员先将机会留给新人
2、代码简洁、高效、无临时文件
题目如下:
编写代码随机生成指定运算范围内的整数加减法算式,其中指定范围是由使用者输入,在这其中要注意加法运算
的和不能超过指定范围(上限),减法运算结果不能为负数(减数不能大于被减数),然后接收输入的答案并做出判
断,如果结果正确则显示正确,不正确显示不正确并给出正确结果,接收回车指令后给出下一个随机算式,这时不要
求再接收运算范围的输入。运行过程如下所示:
[attach]2980[/attach]
作者: sgaizxt001 时间: 2010-9-20 11:24
- @echo off
- setlocal enabledelayedexpansion
- set /p max=请输入范围上限:
- cls
- set /a ran=!random!%%2
- if %ran% equ 0 (goto jiafa) else (goto jianfa)
-
- :jiafa
- set /a a=!random!%%%max%+1
- set /a b=!random!%%%max%+1
- set /a number=%a%+%b%
- if %number% gtr %max% goto jiafa
- echo %a%+%b%=?
- set /p res=请输入答案:
- echo.
- if %res% equ %number% (echo 正确) else (echo 错误,正确答案是%number%)
- pause
- goto :eof
-
-
- :jianfa
- set /a a=!random!%%%max%+1
- set /a b=!random!%%%max%+1
- if %a% gtr %b% (call :jian %a% %b%) else (call :jian %b% %a%)
- set /p res=请输入答案:
- if %res% equ %num% (echo 正确) else (echo 错误,正确答案是%num%)
- pause
- goto :eof
-
-
- :jian
- echo %1-%2=?
- set /a num=%1-%2
- echo.
- 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
- @echo off
- @color 4e
- set /p max="请输入最大值:":
- ::这里有点繁琐 鉴于我是小白 好多功能还不会使用 见谅。
-
- ::产生随机数
- :start1
- set num1=%random%
- if %num1% gtr %max% goto start1
- :start2
- set num2=%random%
- if %num2% gtr %max% goto start2
- if %num1% lss %num2% goto start1
-
- ::随机产生加减法
- if %random:~1,1% LSS 5 (goto plus) else (goto minus)
-
- ::加法
- :plus
- set /a true=%num1%+%num2%
- echo %num1%+%num2%=?
- goto judge
-
- ::减法
- :minus
- set /a true=%num1%-%num2%
- echo %num1%-%num2%=?
- ::判断结果
- :judge
- set /p typein="请输入结果:":
- if %true% equ %typein% (echo 恭喜你答对了!!
- goto end) else (
- echo 计算错误,正确答案是%true%
- goto end)
- :end
- @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
- @echo off
- @color 4e
- set /p max="请输入最大值:":
- ::随机产生加减法
- :loop
- if %random:~1,1% LSS 5 (goto plus) else (goto minus)
-
- ::加法
- :plus
- :start1
- set num1=%random%
- if %num1% gtr %max% goto start1
- :start2
- set num2=%random%
- if %num2% gtr %max% goto start2
- set /a true=%num1%+%num2%
- if %true% gtr %max% goto plus
- echo %num1%+%num2%=?
- goto judge
-
- ::减法
- :minus
- :start3
- set num1=%random%
- if %num1% gtr %max% goto start3
- :start4
- set num2=%random%
- if %num2% gtr %max% goto start4
- set /a true=%num1%-%num2%
- if %true% lss 0 goto minus
- echo %num1%-%num2%=?
- ::判断结果
- :judge
- set /p typein="请输入结果:":
- if %true% equ %typein% (echo 恭喜你答对了!!
- goto end) else (
- echo 计算错误,正确答案是%true%
- goto end)
- :end
- goto loop
- @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
- @echo off
- setlocal enabledelayedexpansion
- set /p max=请输入范围上限:
- cls
- set /a ran=!random!%%2
- if %ran% equ 0 (set str=-) else (set str=+)
- :loop
- set /a a=!random!%%%max%+1
- set /a b=!random!%%%max%+1
- set /a n=%a%+%b%
- if %n% gtr %max% goto :loop
- if %a% gtr %b% (call :lp %a% %b%) else (call :lp %b% %a%)
- set /p res=请输入答案:
- if %res% equ %num% (echo 正确) else (echo 错误,正确答案是: %num%)
- echo.
- pause
- goto :eof
-
- :lp
- echo %1%str%%2=?
- set /a num=%1%str%%2
- echo.
复制代码
略有改进,但是还是无法解决和上限的问题
作者: Batcher 时间: 2010-9-20 21:05 标题: 回复 17楼 的帖子
可以加论坛的QQ群
作者: 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 /a "bool = %random% %% 2"
- if %bool%==1 (set y=+%p%) else (set y=-%q%)
- set /a r=%x%%y%
- echo %x%%y%=?
- set /p ans=请输入答案:
- if not "%ans%"=="%r%" (echo 错误,正确答案是%r%&pause>nul)
- goto loop
- pause
复制代码
作者: bat_521 时间: 2010-9-21 00:52 标题: 菜鸟的答案
- @echo off
- setlocal enabledelayedexpansion
- color 0a
- echo.
- echo 以下是小学加减练习题
- echo.
- set/p var=请输入计算范围:
- :a
- set /a a=%random%%%%var%
- set /a b=%random%%%%var%
- if %a% gtr %b% (goto :b) else goto :a
- :b
- set /a c=%a%-%b%
- echo.
- echo %a%-%b%=?
- echo.
- set/p d=请输入答案:
- echo.
- if %c%==%d% (echo 答案正确) else echo 答案错误;正确答案是:%c%
- echo.
- set /a e=%random%%%%var%
- set /a f=%random%%%%var%
- set /a g=%e%+%f%
- echo.
- echo %e%+%f%=?
- echo.
- set/p h=请输入答案:
- echo.
- if %g%==%h% (echo 答案正确) else echo 答案错误;正确答案是:%g%
- echo.
- pause
复制代码
作者: robinsnelson 时间: 2010-9-21 09:52
- @echo off
- @color 4e
- set /p max="请输入最大值:":
- setlocal enabledelayedexpansion
- :loop
- set /a num1=%random%%%%max%+1
- set /a num2=%random%%%%max%+1
- set /a base=%random%%%2+1
- cls
- if %base% equ 1 (
- set /a true=%num1%+%num2%
- if !true! gtr %max% goto loop
- echo %num1%+%num2%=?
- ) else (
- set /a true=%num1%-%num2%
- if !true! lss 0 goto loop
- echo %num1%-%num2%=?
- )
- set /p typein="请输入答案:":
- if %typein% equ %true% (echo 恭喜你,答对啦!
- goto end) else (
- echo 计算错误,正确答案为%true%
- goto end)
- :end
- pause>nul
- goto loop
复制代码
参考前面几位前辈 我又写了一下 请管理员大人再看一下
作者: netbenton 时间: 2010-9-21 13:18
- @echo off&color 2f
- setlocal enableDelayedExpansion
- set /p max=输入上限数:
- set /a max+=1
- :lp
- set /a tre=!random!%%max,one=!random!%%max,fh=!random!%%2
- if !tre! gtr !one! (
- set/a two=tre-one
- if !fh! equ 0 (set str=!tre!-!one!) else (set str=!one!+!two!)
- ) else (
- set/a two=one-tre
- if !fh! equ 0 (set str=!one!-!tre!) else (set str=!tre!+!two!)
- )
- set/a des=!str!
- echo;!str!=?
- set in=err
- set /p in=输入结果:
- if !in! equ !des! (echo;答对了!你真聪明!) else (echo;真可惜,正确答案是!des!)
- pause>nul
- echo;
- echo;
- goto :lp
复制代码
作者: edmond 时间: 2010-9-21 13:33
- @echo off
- setlocal enabledelayedexpansion
- color 1f
- mode con: cols=55 lines=20
- 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
- set /a u=!m!+!n!
- if !n! lss !m! (set /a res=!m!-!n!&echo !m!-!n!=
- ) else if !u! lss !max! (set /a res=!u!&echo !m!+!n!=) else (set /a res=!n!-!m!&echo !n!-!m!=)
- :res
- set /p result=请输入答案:
- if not defined result (echo 您没有输入任何数据,请再次输入答案&goto res)
- 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
- set "result="
- goto start
复制代码
这个是 符合了 老版 的题意了
作者: batman 时间: 2010-9-25 11:17 标题: 先公布下我出题前的代码吧:
- @echo off&setlocal enabledelayedexpansion
- color 9f&mode con cols=40 lines=10
- echo.
- set /p num=请输入运算范围(如10以内输入10):
- set ".0=+"&set ".1=-"
- :lp
- cls&echo.
- set /a a=%random%%%%num%+1,b=%random%%%2
- if %a% equ 0 if %b% equ 1 set /a b=0
- if %a% equ %num% if %b% equ 0 set /a b=1
- if %b% equ 0 (
- set /a "c=%random%%%(num-a)+1"
- ) else (
- set /a "c=%random%%%%a%+1"
- )
- set /a anser=%a%!.%b%!%c%&echo %a%!.%b%!%c%=?
- echo.
- set "_anser="&set /p _anser=请输入答案:
- echo.
- if "%anser%" equ "%_anser%" (
- echo 正确
- ) else (
- echo 错误,正确答案是%anser%
- )
- 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
- @echo off
- set /a g="1<<31",d="~g"
- echo; 请输入范围数,不能大于 %d%
- echo;&set /p n=
- set f=-
- :loop
- setlocal&cls
- set /a a=%random%%%n,x=n-a,b=%random% %% x
- if %a% lss %b% set a=%b%&set b=%a%&set f=+
- set /a c=a%f%b
- echo %a% %f% %b% = ?
- echo;&set /p j= 请输入答案
- if %j% equ %c% (set k= 正确) else set "k= 错误,%a% %f% %b% = %c%"
- echo;&echo %k%
- echo;&pause
- endlocal&goto loop
复制代码
两数都不能大于指定范围数,和不能大于cmd范围数- @echo off
- set /a g="1<<31",d="~g"
- echo; 请输入范围数,即两数都不能大于的数,不能大于 %d%
- echo;&set /p n=
- set /a x=d-n+1
- set f=-
- :loop
- setlocal&cls
- set /a a=%random%%%n,b=%random% %% x %%n
- if %a% lss %b% set a=%b%&set b=%a%&set f=+
- set /a c=a%f%b
- echo %a% %f% %b% = ?
- echo;&set /p j= 请输入答案
- if %j% equ %c% (set k= 正确) else set "k= 错误,%a% %f% %b% = %c%"
- echo;&echo %k%
- echo;&pause
- endlocal&goto loop
复制代码
作者: yangfengoo 时间: 2010-9-27 10:05
- @echo off&setlocal enabledelayedexpansion
- set/p fw=请输入运算范围:
- :loop
- set/a x1=!random!%%!fw!,x2=!random!%%!fw!,x=!random!%%2
- if !x!==0 (
- set/a xx=x1+x2
- if !xx! leq !fw! (echo !x1!+!x2!=?) else (goto loop)
- ) else (
- set/a xx=x1-x2
- if !xx! geq 0 (echo !x1!-!x2!=?) else (goto loop)
- )
- set/p da=请输入答案:
- if "!xx!"=="!da!" (echo,正确) else (echo,错误,正确答案是:!xx!)
- echo,&goto loop
复制代码
[ 本帖最后由 yangfengoo 于 2010-9-27 10:12 编辑 ]
作者: gshccr 时间: 2010-10-13 11:04
基本符合版主的要求,不过代码太长了,不知道哪里需要改进的地方,还请大家多多指教!-
- @echo off
- setlocal enabledelayedexpansion
- set /p a=请输入指定范围数:
- set /a a1=%a%+1
- :a
- cls
- set /a t1=%random%%% %a1%,t2=%random%%% %a1%
- set /a y1=%a1%-%t1%-1,y2=%a1%-%t2%-1
- if %y1% geq %y2% (
- if %y2% geq 1 (set /a the=%y1%+%y2%
- if !the! gtr %a% (
- set /a daan=%y1%-%y2%&echo %y1%-%y2%=?&goto b)))
- set /a r=%random%%% 2+1
- if %r%==1 (set n=2) else (set n=1)
- set /a wet=!y%r%!+!y%n%!
- if %wet% gtr %a% (set /a daan=%y2%-%y1%&echo %y2%-%y1%=?) else (
- set /a daan=!y%r%!+!y%n%!&echo !y%r%!+!y%n%!=?)
- :b
- set /p g=请输入正确答案:
- if "%g%"=="%daan%" (echo 正确) else (echo 错误,正确答案为%daan%)
- pause
- goto a
复制代码
[ 本帖最后由 gshccr 于 2010-10-13 11:11 编辑 ]
作者: qzwqzw 时间: 2011-3-13 12:36
贴一个没有循环和选择结构的顺序性解法
常规之外略作创新
没有刻意处理诸如0或者最大值的边界问题
在运算范围为1时可能会丢失某些可能
为0时则直接报错退出
- @echo off
- echo.
- set /p num=请输入运算范围(如10以内输入10):
- set ops=+-
- :loop
- cls&echo.
- rem 生成大数big,在减法中作被减数,在加法中作和数
- set /a big=%random% %% %num%+1
- rem 生成运算符op,并转换为字符opr,0为加法,1为减法
- set /a op=%random% %% 2
- call set opr=%%ops:~%op%,1%%
- rem 生成运算数opd1,减法为大数big,加法时为小于big的随机数
- set /a opd1=big*op + (%random% %% big)*(!op)
- rem 生成运算数opd2,减法为小于big的随机数,加法时为big-opr1
- set /a opd2=(%random% %% big)*op + (big-opd1)*(!op)
- rem 生成结果值result
- set /a result=opd1 %opr% opd2
- echo %opd1% %opr% %opd2% = ?
- echo.
- set "answer="
- set /p answer=请输入答案:
- echo.
- rem 根据结果与输入的异同显示提示信息
- set _0=正确
- set _1=错误,正确答案是%result%
- rem 两次取反是想将相减后的差值转换为是否相等的逻辑值0或1
- set /a judge=!(!(answer-result))
- call echo %%_%judge%%%
- pause>nul
- goto loop
复制代码
作者: applba 时间: 2011-4-27 11:57
本帖最后由 applba 于 2011-4-27 12:21 编辑
- @echo off &setlocal enabledelayedexpansion &color 17
- :limit
- set /p n1=请输入最大计算范围:
- set /a n=!n1! && if !n! lss 2 (echo 您输入的数字有误!&goto limit)
- :gen
- set /a "a=(!random!%%!n!+1),b=(!random!%%!n!+1)"
- if !a! gtr !b! (
- set /a r0=!a!-!b!
- set /p "r1=!a!-!b!=?_"
- ) else (
- set /a r0=!a!+!b!
- if !r0! GTR !n! goto gen
- set /p "r1=!a!+!b!=?_"
- )
- if !r0! neq !r1! (echo "你答错了!正确答案是:!r0!" ) else (echo 您答对了!请再接再厉吧~)
- pause>nul&cls&goto gen
复制代码
::我搞了半天没明白按“回车键”继续?
作者: jixun66 时间: 2011-5-31 01:16
本帖最后由 jixun66 于 2011-5-31 01:28 编辑
代码很简单。
压缩前代码:- @echo off
- setlocal enabledelayedexpansion
- set /p max=请输入算数的和的上限:
- if %max% LEQ 1 echo 最大值错误&%0
-
- :loop
- set /a p=%random% %% 2
- set /a p1=%random% %% %max%
- if !p!==1 (
- rem 加法
- set /a p2=%random% %% (^%max%-!p1!^)
- set s=+
- ) else (
- rem 减法
- set /a p2=%random% %% !p1!
- set s=-
- )
- echo.
- echo %p1%%s%%p2%=?
- echo.
- set ans=
- set /p ans=请输入答案:
- set /a r=%p1%%s%%p2%
- if "%r%"=="%ans%" (echo 答案正确!) else (echo 答案错误!&echo 正确答案是:%r%)
- echo.
- pause
- goto loop
复制代码
压缩后代码:- @echo off&setlocal enabledelayedexpansion&set /p max=请输入算数的和的上限:
- if %max% LEQ 1 echo 最大值错误&%0
- :loop
- set /a p=%random% %% 2
- set /a p1=%random% %% %max%
- if !p!==1 (
- set /a p2=%random% %% (^%max%-!p1!^)
- set s=+
- ) else (
- set /a p2=%random% %% !p1!
- set s=-
- )
- echo.&echo %p1%%s%%p2%=?&echo.&set ans=
- set /p ans=请输入答案:
- set /a r=%p1%%s%%p2%
- if "%r%"=="%ans%" (echo 答案正确!) else (echo 答案错误!&echo 正确答案是:%r%)
- echo.&pause&goto loop
复制代码
压缩后的代码的开头的空格怎么消失了..虽然下方的复制代码能复制进去。
还有一点,复制代码的时候我这里的TAB缩进符总是显示为『? ? ? ? 』,请问有没有解决办法?
作者: Batcher 时间: 2011-5-31 19:51
32# jixun66
DZ论坛程序会自己转换的,木有办法。
作者: asd821089612 时间: 2011-7-23 09:20
- @echo off
- set /p a=请输入是多少以内的加减法
- color 9f
- :start
- set /a pan=%random%%%2
- if %pan%==1 goto jia
- if %pan%==0 goto jian
- :jia
- set /a b=%random%%%(%a%+1)
- set /a d=%a%-%b%+1
- set /a c=%random%%%%d%
- set /a he=%b%+%c%
- echo %b%+%c%=?
- set /p an=请输入答案:
- if %an%==%he% echo 恭喜你,答对了
- if %an% neq %he% echo 错误,正确答案是%he%
- pause>nul
- goto start
-
-
- :jian
- set /a b=%random%%%(%a%+1)
- set /a c=%random%%%(%a%+1)
- if %b% gtr %c% goto 1
- goto 2
- :1
- echo %b%-%c%=?
- set /p an=请输入答案:
- set /a cha=%b%-%c%
- if %an%==%cha% echo 恭喜你,答对了
- if %an% neq %cha% echo 错误,正确答案是%he%
- pause>nul
- goto start
- :2
- echo %c%-%b%=?
- set /p an=请输入答案:
- set /a cha=%c%-%b%
- if %an%==%cha% echo 恭喜你,答对了
- if %an% neq %cha% echo 错误,正确答案是%he%
- pause>nul
- 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
菜鸟一个,请多指教。- @echo off
- color 9F
- :aa
- Set /a "sum1=%random%%%1000"
- Set /a "sum2=%random%%%1000"
- If %sum1% gtr %sum2% (Set /a sum3=%sum1%-%sum2% &echo %sum1%-%sum2%) else (Set /a sum3=%sum2%-%sum1%&echo %sum2%-%sum1%)
- Set /p sum4= 请输入您的答案:
- if %sum3%==%sum4% (echo 正确答案是%sum3%&echo 你的答案是%sum4%恭喜你答对了!继续努力,不要骄傲喔) else echo 正确答案是%sum3%&echo 你的答案是%sum4%,太可惜了,你答错了!不要气馁喔,继续努力,加油!
- 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
我也做了一个,个人感觉还行,就是减法出现负数的情况不可避免(以我现在的水平来看)- @echo off
- color 1F
- setlocal enableDelayedExpansion
- title 小学生加减法练习器v1.0
-
- :menu
- cls
- echo ┌───────────────────┐
- echo 小学生加减法练习器v1.0
- echo └───────────────────┘
- echo ┌──┐
- echo │1│ 开始练习
- echo └──┘
- echo.
- echo ┌──┐
- echo │2│ 退出
- echo └──┘
- set /p choose=请输入:
- if %choose%==1 goto lianxi
- if %choose%==2 exit
- echo 输入有误! 请重新输入
- pause>nul
- goto menu
-
- :lianxi
- cls
- set /p sx=请输入数字上限:
- set /p sc=要计算的是加法还是减法(A,B)?
-
-
- :clc
-
-
- ::处理加数(或减数)
- set /a m=%random%%%%sx%
- set /a n=%random%%%%sx%
-
- ::处理算式
- if %sc%==A set ss=%m%+%n%
- if %sc%==B set ss=%m%-%n%
-
- ::生成答案
- set /a results=%ss%
-
- :loop
- cls
- set times=0
- echo 第[%times%]道题
- echo 请计算:%ss%
- set /p ans=请输入结果:
- set /a time=%time%+1
-
- ::结果与标准答案进行对比
- if %ans% gtr %results% set d=大&goto error
- if %ans% lss %results% set d=小&goto error
- if %ans% equ %results% goto right
-
- :error
- cls
- echo 你计算的结果%d%了!
- pause>nul
- goto clc
-
- :right
- cls
- echo Bingo 你算对了
- echo 按任意键继续答题
- pause>nul
- goto clc
复制代码
作者: sds 时间: 2022-12-20 09:46
发现一个bug:因为每次算完都会跳到clc,导致变量%times%不断清零,无法正常计数
下面是修复后的代码- @echo off
- color 1F
- setlocal enableDelayedExpansion
- title 小学生加减法练习器v1.1
-
- :menu
- cls
- echo ┌───────────────────┐
- echo 小学生加减法练习器v1.0
- echo └───────────────────┘
- echo ┌──┐
- echo │1│ 开始练习
- echo └──┘
- echo.
- echo ┌──┐
- echo │2│ 退出
- echo └──┘
- set /p choose=请输入:
- if %choose%==1 goto lianxi
- if %choose%==2 exit
- echo 输入有误! 请重新输入
- pause>nul
- goto menu
-
- :lianxi
- set times=0
- cls
- set /p sx=请输入数字上限:
- set /p sc=要计算的是加法还是减法(A,B)?
-
-
- :clc
-
-
- ::处理加数(或减数)
- set /a m=%random%%%%sx%
- set /a n=%random%%%%sx%
-
- ::处理算式
- if %sc%==A set ss=%m%+%n%
- if %sc%==B set ss=%m%-%n%
-
- ::生成答案
- set /a results=%ss%
-
- :loop
- cls
-
- echo 第[%times%]道题
- echo 请计算:%ss%
- set /p ans=请输入结果:
- set /a times=%times%+1
-
- ::结果与标准答案进行对比
- if %ans% gtr %results% set d=大&goto error
- if %ans% lss %results% set d=小&goto error
- if %ans% equ %results% goto right
-
- :error
- cls
- echo 你计算的结果%d%了!
- pause>nul
- goto clc
-
- :right
- cls
- echo Bingo 你算对了
- echo 按任意键继续答题
- pause>nul
- goto clc
复制代码
作者: sds 时间: 2022-12-20 09:50
本帖最后由 sds 于 2022-12-20 09:52 编辑
压缩后代码,去掉了菜单和注释,简化代码- @echo off
-
- :lianxi
- set times=0
- cls
- set /p sx=请输入数字上限:
- set /p sc=要计算的是加法还是减法(A,B)?
-
- :clc
- set /a m=%random%%%%sx%
- set /a n=%random%%%%sx%
- if %sc%==A set ss=%m%+%n%
- if %sc%==B set ss=%m%-%n%
- set /a results=%ss%
-
- :loop
- cls
- echo 第[%times%]道题
- echo 请计算:%ss%
- set /p ans=请输入结果:
- set /a times=%times%+1
- if %ans% gtr %results% set d=大&goto error
- if %ans% lss %results% set d=小&goto error
- if %ans% equ %results% goto right
-
- :error
- cls
- echo 你计算的结果%d%了!
- pause>nul
- goto clc
-
- :right
- cls
- echo Bingo 你算对了
- echo 按任意键继续答题
- pause>nul
- goto clc
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |