hzkxxx 发表于 2021-8-30 17:08:11

小白刚学 希望大神能给我详细的解题步骤

执行下面的语句时,语句s++的执行次数为多少?
int s=0;
for(i=1;i<n-1;i++)
{
        for(j=n;j>=n;j--)
        {
                s++;
        }
}

2012277033 发表于 2021-8-30 17:28:10

里面一层for只会执行一次,因为满足循环的条件是j要大于等于n,当执行一次后j就减一了,这样j就不满足条件不会再执行了,外面的for会执行n-1-1,这里i是小于n-1的,i的初始化值为1,第一次执行的时候,满足条件,然后i++。执行第1次,下次的判断条件的i为2.执行第2次的时候,下次判断条件的i为3,也就是当。直到运行到i为n-1的时候(也就是执行了n-1-1次的时候),就不满足循环条件了,所以就停止循环了。
所以这个s++最终是运行了(n-1-1)*1次也就是n-2次

大马强 发表于 2021-8-30 17:30:25

int main()
{
      int s=0,n=5,i,j;
for(i=1;i<n-1;i++)    // 运行n-2
{
      for(j=n;j>=n;j--) // 运行一次
      {
                s++;
      }
}
printf("%d",s); // n-2 = 3
return 0;
}

大马强 发表于 2021-8-30 17:43:35

嵌套是相乘
n-2 * 1

hzkxxx 发表于 2021-8-30 18:37:34

2012277033 发表于 2021-8-30 17:28
里面一层for只会执行一次,因为满足循环的条件是j要大于等于n,当执行一次后j就减一了,这样j就不满足条件 ...

答案不是n-2次,答案是(n-3)(n+2)/2,但是答案里没有写过程

2012277033 发表于 2021-8-30 18:43:39

hzkxxx 发表于 2021-8-30 18:37
答案不是n-2次,答案是(n-3)(n+2)/2,但是答案里没有写过程

这个答案从哪来的,你将n代入一个实数,确认和方法执行的结果一致吗?

2012277033 发表于 2021-8-30 18:54:49

hzkxxx 发表于 2021-8-30 18:37
答案不是n-2次,答案是(n-3)(n+2)/2,但是答案里没有写过程

而且你这个公式只有当N为偶数时,才能得出整数,如果是基数,那就会有出现半次的情况,确认下是不是搞错了....

hzkxxx 发表于 2021-8-30 19:32:08

2012277033 发表于 2021-8-30 18:54
而且你这个公式只有当N为偶数时,才能得出整数,如果是基数,那就会有出现半次的情况,确认下是不是搞错 ...

确认了。答案确实是那一个
页: [1]
查看完整版本: 小白刚学 希望大神能给我详细的解题步骤