一个数据结构FOR循环题目

来源:互联网 发布:linux怎么安装aptget 编辑:程序博客网 时间:2024/06/06 01:02

FOR i:= n DOWNTO 1 DO {语句1}
BEGIN
x:=x+1; {语句2}
FOR j:=n DOWNTO i DO {语句3}
y:=y+1; {语句4}
END;

语句1执行的频度为 ____ ;语句2执行的频度为 ____ ;语句3执行的频度为 ____ ;语句4执行的频度为 ____
-------------------
解答:(文凭所做,仅供参考)
题目程序为是PASCAL语言,
其中的FOR循环为:
递减型FOR循环 FOR 循环控制变量:=循环初值 DOWNTO 循环终值 DO 循环语句
     递减型FOR循环与递增型FOR循环基本相同,只是循环控制变量每次递减。


故,此段程序等价于(C语言版):
for(i=n;i>=1;i--)//{语句1}
{
   x=x+1;//{语句2}
   for(i=n;i>=1;i--)//{语句3}
    y=y+1;//{语句4}
}
----------
提示:
1、for语句的书写格式:

   for(e1;e2;e3)

        statement

首先,运行e1,它通常是赋值语句,然后对e2求值,它通常是一个比较。如果e2的值为false,则结束循环。
如果e2的值为true,则执行statement。最后,执行e3,它通常是赋值语句,然后控制转移到对e2再次求值。
2、频度=执行次数;
3、每次FOR循环执行N+1次;

显然,{语句1}:FOR循环执行N+1次,FOR语句的执行顺序如提示1所讲;
{语句2}:当外层FOR循环执行到N+1次,已经终止,其内的语句执行N次;
{语句3}:内层FOR循环执行1+2+3+...+N+N=n(n+3)/2,其中最后相加的一项N,是由于外层循环每执行一次,
   内部FOR循环便要多判断一次,因此当外层循环执行N次后,相应内部FOR循环便要多判断N次;
   其中判断操作为每执行一次,要判断N是否还>=1?
{语句4}:内层FOR循环执行1+2+3+...+N=n(n+1)/2,这是实际执行次数;

因为综上所述,正确答案为:
语句一  n+1
语句二  n
语句三  n(n+3)/2
语句四  n(n+1)/2

查其出处(【北方交通大学 1999  二、4(5分)】但无解答)