Board logo

标题: 【练习-065】批处理for命令嵌套基础练习1 [打印本页]

作者: batman    时间: 2011-4-28 11:41     标题: 【练习-065】批处理for命令嵌套基础练习1

出题目的:
  考查新手对for嵌套的理解
加分原则:
  满分10分,每问5分
解题要求:
  此题仅限新手回答,老手可跟贴指导
  跟贴只限于分析讨论,不要写代码(这样才能加深对for嵌套的理解)
题目如下:
  有批处理代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,100) do (
  3.     set /a a=%%a%%8
  4.     if !a! equ 0 (
  5.        for /l %%a in (1,1,9) do (
  6.            for /l %%b in (0,1,9) do (
  7.                for %%c in (15 40 77 91) do if "%%a%%b" equ "%%c" echo>nul
  8.                for %%c in (6-1-3 0-3-4 7-8-9) do (
  9.                    for /f "tokens=1,3 delims=-" %%d in ("%%c") do if "%%a%%b" equ "%%d%%e" echo>nul
  10.                )
  11.            )
  12.        )
  13.     )
  14. )
复制代码
请问运行这个代码后:
   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://bbs.bathome.net/) Powered by Discuz! 7.2