为什么这两个代码给出不同的输出? for 循环不就是 while 循环的缩写吗?
Why are these two codes giving different output? isn't a for loop just a short-hand for a while loop?
-我正在尝试制作一个程序来检查一个数字是否是一个强数字。
-我用的是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 number\n", 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 number\n", 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 学校强制执行的循环。
-我正在尝试制作一个程序来检查一个数字是否是一个强数字。
-我用的是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 number\n", 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 number\n", 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 学校强制执行的循环。