标题: 【练习-065】批处理for命令嵌套基础练习1 [打印本页]
作者: batman 时间: 2011-4-28 11:41 标题: 【练习-065】批处理for命令嵌套基础练习1
出题目的:
考查新手对for嵌套的理解
加分原则:
满分10分,每问5分
解题要求:
此题仅限新手回答,老手可跟贴指导
跟贴只限于分析讨论,不要写代码(这样才能加深对for嵌套的理解)
题目如下:
有批处理代码如下:- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,100) do (
- set /a a=%%a%%8
- if !a! equ 0 (
- for /l %%a in (1,1,9) do (
- for /l %%b in (0,1,9) do (
- for %%c in (15 40 77 91) do if "%%a%%b" equ "%%c" echo>nul
- for %%c in (6-1-3 0-3-4 7-8-9) do (
- for /f "tokens=1,3 delims=-" %%d in ("%%c") do if "%%a%%b" equ "%%d%%e" echo>nul
- )
- )
- )
- )
- )
复制代码
请问运行这个代码后:
1、cmd中将进行多少次if运算?(请简述理由)
2、cmd中将进行多少次echo>nul操作?(同上)
作者: CrLf 时间: 2011-4-28 13:15
复杂,求指导...
作者: applba 时间: 2011-4-28 13:29
本帖最后由 applba 于 2011-4-29 02:52 编辑
根据题意:
此楼没有了
作者: applba 时间: 2011-4-28 14:01
其实我也是新手,我只是这个月开始学习for的……
我说啊,你嵌套这么多层,就是笔算都可能出错的……
作者: batman 时间: 2011-4-28 14:35
本帖最后由 batman 于 2011-4-28 14:36 编辑
4# applba
你难道那么怕出错,有时出错也是一件好事(我也经常出错)。。。
只要你最后搞清楚自己为什么出错,以后就不会再犯同样的错误,起码会少犯点。。。。
作者: batman 时间: 2011-4-28 14:56
本帖最后由 batman 于 2011-4-28 15:13 编辑
3# applba
具体数值,理由呢?
作者: CrLf 时间: 2011-4-28 15:08
本帖最后由 batman 于 2011-4-28 15:15 编辑
目测了一下,算出来也是七千多次if...不知道错在哪
-------------------------
根据题意,此处删去n字。。。
batman
作者: batman 时间: 2011-4-28 15:13
7# zm900612
是我错了,在计算时将4写成44了,汗一个。。。
作者: batman 时间: 2011-4-28 16:15
友情提示:先搞清楚代码中if+for总共嵌套了多少层哦。。。
作者: jinzeyu 时间: 2011-4-28 19:21
本帖最后由 jinzeyu 于 2011-4-30 07:31 编辑
if是7660次
echo>nul是72次...
作者: batman 时间: 2011-4-28 19:43
10# jinzeyu
题意应该是写得很清楚,请简述你的理由或计算过程。。。
作者: jinzeyu 时间: 2011-4-28 19:47
10# jinzeyu
题意应该是写得很清楚,请简述你的理由或计算过程。。。
batman 发表于 2011-4-28 19:43
额 sorry
作者: vsbat 时间: 2011-4-28 23:04
本帖最后由 vsbat 于 2011-4-28 23:08 编辑
if 7660
echo 72
作者: batman 时间: 2011-4-28 23:15
13# vsbat
老伙计,你是新人吗?
真的是目无组织纪律(开玩笑)。。。
作者: vsbat 时间: 2011-4-28 23:16
其实~~ 我挺新的 呵呵~~近来发帖量好少~~ 呵。。。
作者: Hello123World 时间: 2011-4-29 11:48
if:12*9*10*4+12*9*10*3=7560
echo:12*4+12*3=84
if:if !a! equ 0是求100以内能被8整除的数共12个,(1,1,9)9,(0,1,9)10,(15 40 77 91)4,(6-1-3 0-3-4 7-8-9)3。
echo:要执行echo,if的条件就必须是true,外层执行12次,内层分别4,3.
作者: batman 时间: 2011-4-29 11:51
16# Hello123World
层次是搞清楚了,结果请再想想。。。
作者: jinzeyu 时间: 2011-4-30 07:29
额 if是7660 少弄个else......
作者: jinzeyu 时间: 2011-4-30 07:30
本帖最后由 jinzeyu 于 2011-4-30 07:33 编辑
啊 原来不允许写代码.
作者: rogue_1983 时间: 2011-4-30 16:59
这是给新手准备的题目吗?
作者: yjstone 时间: 2011-5-3 17:05
本帖最后由 yjstone 于 2011-5-3 17:49 编辑
我来说说看看对不对?对于bathome来说我算是新手吧,所以没有违反规定哟,呵呵!
if的执行次数为:100(最外层)+12(12个!a! equ 0条件成立)*10*9*(4+3)=7660 次
最外层的if 判断不管!a! equ 0是真或假都要进100次判断的,否则怎么知道是真是假呢?1至100的整数只有12个可整除8,所以if !a! equ 0 的判断语句后面条件为真的操作被执行了12次,因此if !a! equ 0 后面条件成立时运行的语句被执行了12*9*10(4+3),最内层要执行7+3次判断: for %%c in (15 40 77 91) 4次,for %%c in (6-1-3 0-3-4 7-8-9) 3次。
执行echo>nul操作的次数为:12*(4+2)=72次,每执行一次!a! equ 0条件判断的操作,只有4+2次条件成立也即6次的echo>nul操作。%%a%%b 组成由for /l %%a in (1,1,9) 和 for /l %%b in (0,1,9) 生成的1-99的数字字符,for %%c in (15 40 77 91) do if "%%a%%b" equ "%%c" 生成15 40 77 91四个数字字符来与1-99的数字字符相比较,很明显,有4 次条件成立。
而for %%c in (6-1-3 0-3-4 7-8-9)生成3个字符串:6-1-3 ; 0-3-4 和 7-8-9,for /f "tokens=1,3 delims=-" %%d in ("%%c") do if "%%a%%b" equ "%%d%%e" 生成3个数字符63;04;79 来与1-99的数字字符相比较,所以有2次条件成立。
作者: batman 时间: 2011-5-3 19:25
生成的1-99的数字字符
这里有误哦
作者: yjstone 时间: 2011-5-3 21:03
生成的1-99的数字字符
这里有误哦
batman 发表于 2011-5-3 19:25
的确是搞错了,正确的应该是10-99的数字字符,好在没有影响到答案的正确性。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |