设 n 为正整数。试确定下列各程序段中前置以记号 @ 的语句的频度:
设n为正整数。试确定下列各程序段中前置以记号@的语句的频度:(4)k=0;for(i=1;i<=n;i++){for(j=i;j<=n;j++)@k++;}(5)for(...
设 n 为正整数。试确定下列各程序段中前置以记号 @ 的语句的频度: (4)k=0; for(i=1; i<=n; i++) { for(j=i; j<=n; j++) @ k++; }
(5) for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { for(k=1; k<=j; k++) @ x += delta; }
(7) x=n; y=0; // n是不小于1的常数 while(x>=(y+1)*(y+1)) { @ y++; }
(8) x=91; y=100; while(y>0) { @ if(x>100) { x -= 10; y--; } else x++;
答案:
(4)n+(n-1)+(n-2)+……1=1/2*n(n-1)
(5)1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+4+……+n)=
(7)|^n|向下取整
(8)1100
为什么结果是这样的呢?请学长们给我讲讲 展开
(5) for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { for(k=1; k<=j; k++) @ x += delta; }
(7) x=n; y=0; // n是不小于1的常数 while(x>=(y+1)*(y+1)) { @ y++; }
(8) x=91; y=100; while(y>0) { @ if(x>100) { x -= 10; y--; } else x++;
答案:
(4)n+(n-1)+(n-2)+……1=1/2*n(n-1)
(5)1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+4+……+n)=
(7)|^n|向下取整
(8)1100
为什么结果是这样的呢?请学长们给我讲讲 展开
2个回答
展开全部
(4) i=1时,第二个for语句执行n次;i=2时,第二个for语句执行n-1次;i=3时,第二个for语句执行n-2次...... i=n时,第二个for语句执行1次。
所以语句频度=n+(n-1)+(n-2)+...+1=n(n+1)/2
(5) 原理与(4)类似
所以语句频度=1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=n(n+1)(2n+3)/12
(8) 分析每一次循环可以发现,当循环执行10次后x>100,y方才减1,此时x被复原为91;
如此下去,由于每执行10次循环才使y减1,所以循环体执行100*10次,也就是说if语句判断执行了1000次(但里面的y--执行了100次)。
所以语句频度=1100
所以语句频度=n+(n-1)+(n-2)+...+1=n(n+1)/2
(5) 原理与(4)类似
所以语句频度=1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=n(n+1)(2n+3)/12
(8) 分析每一次循环可以发现,当循环执行10次后x>100,y方才减1,此时x被复原为91;
如此下去,由于每执行10次循环才使y减1,所以循环体执行100*10次,也就是说if语句判断执行了1000次(但里面的y--执行了100次)。
所以语句频度=1100
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询