本帖最后由 batman 于 2012-2-29 09:15 编辑
前言:
今年是2012年,也是传说中的世界末年,所以就以这个特殊的2012做为主题来开始本次的基础训练。
加分原则:
总共10题,每题10分,总分100分,视情况打分
解题要求:
独立解题,新手最好能全部做一遍(毕竟是基础练习)
题目如下:
1、在屏幕上分别分行和同行输出2012字符串的2 0 1 2四个字符以及反序输出(在这里要将2012视为不可知数值)
2、计算2012字符串四个数值的和(在这里要将2012视为不可知数值)
3、利用random生成2012,并计算random的次数
4、利用random生成2012,并保证每次使用最少的random次数(第一次取0-2012间的随机值,如取到948,就取948到2012间的随机值,依次下去,直到取到2012。。。)
5、证明2012年是闰年(在这里要将2012视为不可知数值)
6、输出2012年所有的日期
7、分别生成以2012命名的xls word txt pdf gpg的文件并在里面输入“2012 0”字符
8、将2012转换成二零一二(在这里要将2012视为不可知数值)
9、将1-2012之间的数值全转换成中文数值,如2001转换成二千零一
10、写出一段关于2012年的感想或祝福,并在屏幕上逐字逐行延时输出
-----------------------------------
下同给出所有题的参考答案,9-10题因为难度比较大,大家可以多思考思考(同时大家可以试着将开头的number变量换成其他数值运行下)- @echo off&setlocal enabledelayedexpansion
- set /a number=2012
- rem 计算字符串长度(9位以内)
- set "str=%number%987654321"&set "str=!str:~9!"
- set /a counter=%str:~,1%-1
- echo 题目1&echo,
- echo 分行输出
- for /l %%a in (0,1,%counter%) do echo !number:~%%a,1!&set /a total+=!number:~%%a,1!
- echo 不换行输出
- for /l %%a in (0,1,%counter%) do set /p=!number:~%%a,1!<nul
- echo,
- echo 倒序输出
- for /l %%a in (%counter%,-1,0) do set /p=!number:~%%a,1!<nul
- echo,&echo,
- echo 题目2&echo,
- echo %number%数值%str:~,1%位数相加的和为%total%
- echo,
- echo 题目3&echo,
- echo 下面这种随机生成效率相当低还有可能因超出cmd计算上限而退出
- :lp
- set /a n+=1
- if %random% neq %number% goto lp
- echo 随机了%n%次生成%number%
- echo,&set /a min=0
- echo 题目4&echo,
- echo 下面这种随机生成效率较高
- for /l %%a in (1,1,%number%) do (
- set /a "rand=min+(!random!%%(number-min+1))"
- echo !rand!
- if !rand! equ %number% echo 随机了%%a次生成!rand!&echo,&goto :next
- if !rand! gtr !min! set /a min=rand
- )
- :next
- echo 题目5&echo,
- rem 因为开启变量延迟后!会被当做逃逸字符被脱去使得下面闰年判断命令出错
- endlocal&set "number=%number%"&set "counter=%counter%"
- set /a "yp=!(%number%%%4)^!(%number%%%100)|!(%number%%%400)"
- if %yp% equ 1 (
- echo %number%年为闰年
- ) else (
- echo %number%年为平年
- )
- echo,&setlocal enabledelayedexpansion
- echo 题目6&echo,
- set /a _2=28+yp,month_days=31
- for %%a in (1 3 5 7 8 10 12 4 6 9 11) do (
- if %%a equ 4 set /a month_days-=1
- set /a _%%a=month_days
- )
- (for /l %%a in (1,1,12) do (
- for /l %%b in (1,1,!_%%a!) do echo %number%年%%a月%%b日
- ))>%number%.txt
- echo %number%年所有的日期已输入%number%_date.txt
- echo,
- echo 题目7&echo,
- for %%a in (xls word txt pdf gpg) do >%number%.%%a echo 2012 0&echo %number%.%%a文件已生成
- echo,
- echo 题目8&echo,
- for %%a in (零0 一1 二2 三3 四4 五5 六6 七7 八8 九9) do (
- set "str=%%a"
- set "_!str:~1,1!=!str:~,1!"
- )
- for /l %%a in (0,1,%counter%) do (
- set "str=!number:~%%a,1!"
- for %%b in (!str!) do set /p=!_%%b!<nul
- )
- echo,&echo,
- echo 题目9&echo,
- set /a counter=0
- (for /l %%a in (1,1,%number%) do (
- set "str=%%a"&set "input="
- for %%a in (10 100 1000) do if %%a equ !str! set /a counter+=1
- for /l %%a in (0,1,!counter!) do (
- set "var=!str:~%%a,1!"
- for %%b in (!var!) do set "input=!input!!_%%b!"
- if %%a equ 0 (
- if !counter! equ 1 set "input=!input!十"
- if !counter! equ 2 set "input=!input!百"
- if !counter! equ 3 set "input=!input!千"
- )
- if %%a equ 1 (
- if !counter! equ 2 set "input=!input!十"
- if !counter! equ 3 set "input=!input!百"
- )
- if %%a equ 2 if !counter! equ 3 set "input=!input!十"
- )
- for %%a in (十零-十 零十-零 零百零-零 零百-零) do (
- for /f "tokens=1,2 delims=-" %%b in ("%%a") do set "input=!input:%%b=%%c!"
- )
- if "!input:~-2!" equ "百零" set "input=!input:百零=百!"
- if "!input:~-2!" equ "千零" set "input=!input:千零=千!"
- echo !input!
- ))>%number%_汉字.txt
- echo 1至%number%间的数值已全转换为汉语数值并输入到%number%_汉字.txt中
- echo,
- echo 题目10&echo,
- rem 运行时请将下面的tab的值改为实际的tab
- set "tab= "
- for /f "delims=:" %%a in ('findstr "::" %0') do (
- set "str=%%a"
- if "!str:~,1!" neq "f" (
- for /l %%a in (0,1,20) do (
- set /p=!str:~%%a,1!<nul
- for /l %%b in (1,1,500) do ver>nul
- )
- )
- echo,&echo,
- )
- pause>nul
- :: 2012年注定是个不平凡之年
- :: 她是传说中的世界末日
- :: 她也是批处理之家发展的第六个年头
- :: 我们将在2012年迎来盛大的伦敦奥运
- :: 而对于我,2012年更是不寻常
- :: 因为今年是小女儿的第一个本命年
- :: 也是她迈入初中的紧张之年
- :: 在此,我衷心祝愿:
- :: 批处理之家!tab!红红火火 蒸蒸日上
- :: 中华健儿!tab!英姿飒爽 再创辉煌
- :: 小女儿!tab!快乐成长 学业有成
- :: 全世界!tab!和平安祥 再无战荒
复制代码
|