比如:procedure aa;
 var a:integer;
 procedure zz(i:integer);
   var kao :integer;
   begin
        xxxxxxxxxxx //这段代码略
      while kao<>100 do
        begin
         zz(kao+1);
         xxxxxxxx//略
        end;
    end;
begin
  XXXXXXXXXXX;//执行过程aa的部分
 end;
请问下面的while kao<>10 do
        begin
         zz(kao+1);
         xxxxxxxx//略
        end;
里的每次在执行zz(kao+1)后,xxxxxxxxx还执行不执行?也就是问当执行到zz(kao+1)时,程序
会跳到zz的开始地方还是等while里的xxxxxx部分的代码也执行完后在返回到zz过程的开始部分
继续循环执行?可以理解为如果我设kao=0,那么while里的xxxxxxxxxx会被执行多少次?

解决方案 »

  1.   

    不会执行的,程序会跳到zz的开始,等最后一次zz执行完之后,才会执行它,
    不过你这个结构好可怕呀,怎想都很乱
    一般嵌套里是用if确定终止条件的:
    if kao<>100 then
            begin
             zz(kao+1);
             xxxxxxxx//略
            end;
    这种结构偶还是第一次看到。
      

  2.   

    应该是只执行一次while里的xxxxxxxxx
      

  3.   

    应该是100次,在最后一次调用之后,开始执行xxxxxxxxxx
    然后回到while kao<>100 do,判断条件为否,
    跳出循环,执行后面的语句,
    然后退出倒数第二次调用,再执行xxxxxxxxxxx
    回到while kao<>100 do,判断条件为否,(以后始终为否)
    依次类推...
    100次
      

  4.   

    heixiu1980(迷茫ing)没有看懂!详细点!
      

  5.   

    to heixiu1980(迷茫ing),我没有看懂!详细点!
      

  6.   

    晕倒!
    就是说每次执行zz(kao+1)后,肯定要跳到zz的开头,
    这样跳转100次之后,判断while kao<>100的条件为否,
    这时会结束这个函数,这样就回到了最后一次调用zz(kao+1)的后面,
    也就是while里的xxxxxxxxxxx,
    然后到while的end,由于这里是循环的结束,会跳到循环的判断条件,
    也就是while那一句去,判断条件为否,结束函数,再回到倒数第二次调用zz(kao+1)的后面,
    依次类推...
      

  7.   

    然后退出倒数第二次调用,再执行xxxxxxxxxxx
    这个我怎么不理解呢!笨啊!
      

  8.   

    抛开别的不看,只看这两句话:
    zz(kao+1);
    xxxxxxxxxxxxx
    那么在执行完zz(kao+1)之后,是不是肯定要执行xxxxxxxxxxx?
    只不过这里zz(kao+1)不是普通的语句,是调用一个函数,
    那么在调用这个函数之后,一样要执行xxxxxxxxxxxxx
    这么说你明白了么?
    嵌套是很复杂的语句,最好不要轻易使用。记得当年c语言期末考试,最后一道大题就是关于嵌套的^_^
      

  9.   

    应该是进入死循环,变量kao不会达到100吧;
      

  10.   

    sorry!昨天发晕,说错话了,是递归,不是什么嵌套:(丢人丢大了@@