-我正在尝试编写一个程序来检查一个数字是否是强数。
-我用的是C语言
-我的问题是,我似乎找不到一个for和一个while循环之间的区别,即使他们看起来相同,他们总是出于某种原因给出不同的输出。
-尽管这是不是我第一次遇到这样的问题,但我似乎从来没有发现区别!
-下面是for循环的代码:(给出我期望的输出)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int number, q, rem, fac = 1, result=0, i;
printf("please enter a number: ");
scanf("%d", &number);
q = number;
i = 1;
while(q != 0){
rem = q%10;
for(i = 1; i<=rem; i++){ // <--- THE FOR LOOP HERE ****
fac = fac*i;
}
result = result + fac;
fac = 1;
q = q/10;
}
if(number == result){
printf("%d is a strong number", number);
}
else{
printf("-%d is not a strong numbern", number);
printf("-your result was %d instead of %d", result, number);
}
return 0;
}
-这里是相同的while循环的代码:(给出错误的输出)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int number, q, rem, fac = 1, result=0, i;
printf("please enter a number: ");
scanf("%d", &number);
q = number;
i = 1;
while(q != 0){
rem = q%10;
while(i <= rem){ // <--- THE WHILE LOOP HERE ****
fac = fac*i;
i++;
}
result = result + fac;
fac = 1;
q = q/10;
}
if(number == result){
printf("%d is a strong number", number);
}
else{
printf("-%d is not a strong numbern", number);
printf("-your result was %d instead of %d", result, number);
}
return 0;
}
两个版本之间有一个微妙但重要的区别:
- 在
for(i = 1; i<=rem; i++)
中,迭代变量i
在每次循环出现时初始化为1
。 - 在第二个版本中,
while(i <= rem)
使用相同的测试,循环体中的i++
执行相同的增量,但是初始化i = 1;
只在外部循环之前发生一次,因此行为不同。
这个问题是for
循环在简单迭代中优于while
循环的完美例子。强制在编码约定中使用while
循环是适得其反的,例如在一些法国CS学校中强制执行的。