如何使用 For 循环和 While 循环编写 C 语言程序来查找完全数?我们还将查找 1 到 100 之间的完全数并举例说明。如果一个数的所有正因子(不包括它本身)之和等于该数本身,那么它就是一个完全数。
例如,6 是 C 语言中的一个完全数,因为 6 可以被 1、2、3 和 6 整除。所以,这些值的和是 1+2+3 = 6(请记住,我们必须排除数字本身。这就是为什么我们没有在这里加上 6)。一些完全数是 6、28、496、8128 和 33550336 等。
使用 For 循环查找完全数的 C 语言程序
这个完全数程序允许用户输入任何数字。使用该数字,它将使用 For 循环计算该数字是否为完全数。
# include <stdio.h>
int main()
{
int i, Number, Sum = 0 ;
printf("\n Please Enter any number \n") ;
scanf("%d", &Number) ;
for(i = 1 ; i < Number ; i++)
{
if(Number % i == 0)
Sum = Sum + i ;
}
if (Sum == Number)
printf("\n %d is a Perfect Number", Number) ;
else
printf("\n%d is not the Perfect Number", Number) ;
return 0 ;
}

在这个 C 语言完全数程序中,我们声明了三个整数变量 i、Number 和 Sum = 0。下面的 printf 语句将提示用户输入任何正整数值
printf("\n Please Enter any number \n") ;
下面的 C 编程 scanf 语句会将用户输入的值赋给 Number 变量
scanf("%d", &Number) ;
在下一个 C 程序行中,我们有一个 for 循环。for 循环中的条件 (i < Number) 将确保 i 值不会超出。
for(i = 1 ; i < Number ; i++)
{
if(Number % i == 0)
Sum = Sum + i ;
}
For 循环中的 If 条件会检查 Number 是否能被 i 整除。请参考 C 语言 If 语句文章以了解 If 语句
- 如果数字能被 i 整除,则 i 将加到 Sum 中
- 如果数字不能被 i 整除,i 值将递增 1,然后检查下一个值。
从上面这个完全数程序的截图来看,用户输入的数字是:Number = 6
第一次迭代
对于第一次迭代,Number = 6,Sum = 0,i = 1
If (Number % i == 0)
6 % 1 == 0
If 语句在这里成功了,所以:
Sum = Sum + i
Sum = 0 + 1 = 1
第二次迭代:从第一次迭代开始,Sum 和 i 的值都已更改,Sum = 1,i = 2
6 % 2 == 0 – True
Sum = Sum + i
Sum = 1 + 2 = 3
第三次迭代
从 C 语言查找完全数的第二次迭代开始,Sum 和 i 的值都已更改,Sum = 3,i = 3
If (6 % 3 == 0) – True
Sum = Sum + i
Sum = 3 + 3 = 6
对于完全数程序的第四次和第五次迭代,if 条件内的条件将失败
6 % 4 == 0 (False)
6 % 5 == 0 (False)
对于第六次迭代,i 的值变为 6,这意味着 for 循环内的条件将失败 (6 < 6)。因此,编译器将终止 for 循环。
在下一行,我们有一个 If 条件来检查 Sum 变量中的值是否正好等于给定的值。
如果条件 (Sum == Number) 为 TRUE,则将执行下面的 printf 语句
printf("\n %d is a Perfect Number", Number) ;
如果条件 (Sum == Number) 为 FALSE,则将执行下面的 printf 语句
printf("\n %d is not the Perfect Number", Number) ;
对于这个例子,条件为 True。因此,给定的数字是一个完全数。
使用 While 循环查找完全数的 C 语言程序
这个 C 程序允许用户输入任何数字。使用该数字,它将使用 While 循环计算用户输入是否为完全数。
# include <stdio.h>
int main()
{
int i = 1, Number, Sum = 0 ;
printf("\n Please Enter any number \n") ;
scanf("%d", &Number) ;
while( i < Number )
{
if(Number % i == 0)
Sum = Sum + i ;
i++;
}
if (Sum == Number)
printf("\n %d is a Perfect Number", Number) ;
else
printf("\n%d is not the Perfect Number", Number) ;
return 0 ;
}
Please Enter any number
28
28 is a Perfect Number
在这个例子中我们没有做任何特殊的事情。我们只是用 While 循环替换了第一个程序中的 For 循环。如果您发现理解 While 循环的功能有困难,请参考 C 语言 While 循环文章。
查找 1 到 1000 之间的完全数的 C 语言程序
这个完全数程序允许用户输入最小值和最大值。该程序查找最小值和最大值之间的完全数。
#include <stdio.h>
int main()
{
int Number, Sum, i, Minimum, Maximum;
printf("\n Please Enter the Minimum & Maximum Values\n");
scanf("%d %d", &Minimum, &Maximum);
printf("Perfect Numbers Between %d and %d are:\n", Minimum, Maximum);
for(Number=Minimum; Number<=Maximum; Number++)
{
for(i = 1, Sum =0 ; i < Number ; i++)
{
if(Number % i == 0)
Sum = Sum + i ;
}
if (Sum == Number)
printf(" %d ", Number) ;
}
return 0;
}
Please Enter the Minimum & Maximum Values
1
1000
Perfect Numbers Between 1 and 1000 are:
6 28 496
for (Number=Minimum; Number<=Maximum; Number++)
此完全数示例中的 For 循环帮助编译器在 Minimum 和 Maximum 变量之间进行迭代。迭代从 Minimum 开始,然后不会超过 Maximum 变量。
在 for 循环内部,我们检查该数字是否为完全数。我们在第一个示例中已经解释了 for 循环的迭代。