如何解决如何停止打印243?
这是一个 C 程序片段,旨在找到小于 100 的 3 的第一个幂。它一直打印 243。
#include <stdio.h>
int main ()
{
int product = 3;
while ( product <= 100 )
{
product = 3 * product;
printf ("%d\n",product);
}
}
解决方法
您在打印之前将 product
乘以 3
。因此,打印出大于 100 的值。如果您在循环中交换行并先打印然后从 3
乘以; product
在第四次迭代时不会进入 while 循环
while ( product <= 100 )
{
printf ("%d\n",product);
product = 3 * product;
}
,
首先您要检查变量 product
的当前值,如果它满足条件,则将其乘以 3
。因此,您将得到一个大于 100
的值。
您应该检查 product
的当前值乘以 3
是否小于 100
,如果是,则进行乘法。
这是一个演示程序。
#include <stdio.h>
int main(void)
{
const int Base = 3;
const int UpperBound = 100;
int product = 1;
while ( product * Base < UpperBound )
{
product *= Base;
}
printf( "%d\n",product );
return 0;
}
程序输出为
81
如果你需要输出所有小于100的3的幂,那么程序可以如下所示
#include <stdio.h>
int main(void)
{
const int Base = 3;
const int UpperBound = 100;
for ( int product = 1; product < UpperBound; product *= Base )
{
printf( "%d\n",product );
}
return 0;
}
程序输出为
1
3
9
27
81
1
对应于 3 ^ 0
。
3
小于 100
的最大幂是 4
。您的代码打印功率 5
,即 243
。要了解问题,您需要了解while
循环的流程。它的伪代码可以是:
-
product
= 假设81
来自之前的执行。 - 进入
while
循环 - 改变产品价值
- 产品印刷价值
因此,在此流程中,您的代码更改了 product
的值,然后将其打印出来,因此很明显,将打印结果 243
的更改值。
要解决此问题,请在更改之前打印 product
的值。所以你的最终代码如下:
while ( product <= 100 )
{
printf ("%d\n",product);
product = 3 * product;
}
,
乘法前打印
#define LIMIT 100
while ( product <= LIMIT ) {
printf ("%d\n",product); // Move here.
product = 3 * product;
// printf ("%d\n",product);
}
但让我们更深入
如果限制是 INT_MAX
而不是 100 会怎样? 3 * product;
会导致有符号整数溢出,这是未定义行为,UB。一个可能的结果是循环永远不会停止,因为 product <= INT_MAX
始终为真。更好的方法是检测潜在的溢出。
#define LIMIT 100 /* Or any int value */
while ( product <= LIMIT/3 ) {
product = 3 * product;
printf ("%d\n",product);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。