int func ( int n ) { int i = 0, sum = 0; while ( sum < n ) sum += ++i; return i; }
时间: 2023-05-11 11:04:50 浏览: 156
这段代码有问题,while循环中没有对i进行更新,会导致死循环。正确的代码应该是:
int func(int n) {
int i = 0, sum = 0;
while (sum < n) {
sum += i;
i++;
}
return i - 1;
}
相关问题
int func ( int n ) { int i = 0, sum = 0; while ( sum < n ) sum += ++i; return i; }
这是一个函数,输入一个整数n,返回一个整数i。函数的实现过程是:定义两个整数变量i和sum,初始值分别为。然后进入while循环,当sum小于n时,执行sum += ++i,即sum先加上i+1的值,然后i再加1。当sum大于等于n时,跳出循环,返回i的值。
#include"stdio.h" main() { int func(int k); int n,sum=0,i=1;//3 scanf("%d",&n);//2 do { sum += func(i); } while (i<=n); //1 printf("sum=%d\n",sum); //4 } int func(int k) { int i,result=1; for (i=1; i<=k; i++) { result *= i; } return (result); }找出其中错误
这段代码本身没有语法错误,但是存在逻辑错误。具体来说,这段代码会陷入一个无限循环中,永远无法结束。
错误的原因在于,循环条件判断的是变量i是否小于等于n,而循环体内并没有对变量i进行更新,因此循环条件永远满足,导致循环无法结束。
要解决这个问题,可以在循环体内加上对变量i的更新操作,例如 i++,这样每次循环后i的值会加1,最终当i大于n时循环就会结束。修改后的代码如下:
```c
#include"stdio.h"
int func(int k);
int main() {
int n,sum=0,i=1;
scanf("%d",&n);
do {
sum += func(i);
i++; // 加上对 i 的更新操作
} while (i<=n);
printf("sum=%d\n",sum);
return 0;
}
int func(int k) {
int i,result=1;
for (i=1; i<=k; i++) {
result *= i;
}
return (result);
}
```
这样就能够正确地计算阶乘和了。