程序改错题。爱因斯坦曾出过这样的一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩下。
编写计算这条阶梯共有多少阶的程序如下所示,其中存在一些语法和逻辑错误,请找出并改正之。
#include <stdio.h>
int main()
{
int x = 1, find = 0;
while (!find);
{
if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 = 0)
{
printf("x = %d\n", x);
find = 1;
x++;
}
}
return 0;
}
1.语法错误:while(){}为标准格式,这里后面多了; 显然错误
2.语法错误:x%7=0改为x%7==0 (赋值运算符和关系运算符的差距)
3.逻辑错误:x++不应该包含在正确的判断的分支里面,x++的用处为在此分支判断为否的情况下继续按照循环顺序依次穷举,所以x++应该在if分支之外
综上,修改完成的正确代码应该为:
#include <stdio.h>
int main()
{
int x = 1, find = 0;
while (!find)
{
if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 == 0)
{
printf("x = %d\n", x);
find = 1;
}
x++;
}
return 0;
}