下面两个程序中第一个程序为什么无任何输出?
编写程序求所有三位数的水仙花数。水仙花数(Narcissistic number)是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身。例如153就是一个水仙花数,因为153=1^3+5^3+3^3。程序1:为啥无任何输出?
#include <stdio.h>
int main(void)
{
int m,i,j,k;
i=m/100;
j=m/10%10;
k=m%10;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*i*i+j*j*j+k*k*k==m)
printf("水仙花数为:%d\n",m);
return 0;
}
程序2:输出正确
#include <stdio.h>
int main(void)
{
int m,i,j,k;
for(m=100;m<=999;m++)
{
i=m/100;
j=m/10%10;
k=m%10;
if(i*i*i+j*j*j+k*k*k==m)
printf("水仙花数为:%d\n",m);
}
return 0;
} 这两个程序之间的区别在于变量m的定义和初始化方式。
在程序1中,变量m只是声明了,但并未进行初始化,也就是说它的值是不确定的。而在接下来的循环中,又使用了m变量的值来计算i、j、k的值,这样就导致了i、j、k的值也是不确定的,从而影响了后面的水仙花数的计算。因此,程序1无法正确输出水仙花数。
而在程序2中,变量m在循环前被初始化为100,因此在循环中m的值逐次增加,并成功计算出每个三位数是否为水仙花数。
因此,为了计算所有三位数的水仙花数,我们应该像程序2一样,在循环前将变量m初始化为100,然后逐次增加,进行水仙花数的计算即可 青出于蓝 发表于 2023-6-15 21:10
这两个程序之间的区别在于变量m的定义和初始化方式。
在程序1中,变量m只是声明了,但并未进行初始化, ...
但是并未影像i,j,k的值啊,后面i,j,k的值还是在for循环里面的啊? @sfqxx zeroto-alittel 发表于 2023-6-15 21:26
@sfqxx
@isdkz zeroto-alittel 发表于 2023-6-15 21:26
@sfqxx
{:10_256:} 程序1和程序2都是求所有三位数的水仙花数的程序。但它们有着不同的输出结果,原因在于它们的代码实现有所不同。
程序1中无法得到正确的输出结果,因为它的变量没有被初始化好。具体来说,程序中的m、i、j和k都是整型变量,当它们没有初始化时,它们的值是随机的,而非0-9之间的数字。因此,即使在程序的最外层循环里分别枚举i、j和k的取值范围(1~9和0~9),这些循环也无法找到任何一个符合条件的水仙花数,也就没有任何输出了。
而程序2正确地输出了所有三位数的水仙花数。它使用了一个for循环,将所有三位数的可能值(从100到999)逐个测试,只有符合“每个位上的数字的n次幂之和等于它本身”的条件才会输出。
因此,正确的输出所有三位数的水仙花数的代码如下:
#include <stdio.h>
int main(void)
{
int m, i, j, k;
for (m = 100; m <= 999; m++)
{
i = m / 100;
j = (m % 100) / 10;
k = m % 10;
if (i * i * i + j * j * j + k * k * k == m)
{
printf("水仙花数为:%d\n", m);
}
}
return 0;
}
在这个代码中,我们将m的范围限定为100到999之间。对于每个取值的可能情况,依次计算出其百位、十位和个位上的数字,判断它们是否符合条件,若成立则输出即可。
求最佳答案{:10_254:} 在程序1中,你在 for 循环外部对i、j、k进行了赋值,但此时的m并没有被赋值,因此其值是未定义的。然后你在 for 循环内部判断if(i*i*i+j*j*j+k*k*k==m) 。这里的m仍然是未定义的值,所以你无法通过这个if语句来找到水仙花数。
另一方面,你在内部 for 循环中是对i、j、k进行赋值和判断的,这样并不能够形成一个三位数去判断是否为水仙花数,因为这些变量并不是由一个三位数的各个位数得来的,而是通过单独的 for 循环得到的。
在程序2中,你正确地在 for 循环内部对m进行了赋值,并在此基础上计算了m的百位、十位和个位数字(i、j、k)。然后你正确地用这些数字的立方和与m进行比较。所以,程序2能正确输出所有的水仙花数。 m未赋值,是一个随机的,例如-32768这个数根本不在100-999之间了,所以i * i * i + j * j * j + k * k * k == m 导致所有的数都不符合条件,大概是这样
页:
[1]