这两个代码都可以编译,但是只有第二个代码可以实现我想要的功能。
第一个代码:
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main()
{
int TriNumber = 0;
int n;
for(n = 5; n <= 50; n += 5)
TriNumber = ((n + 1) * n) / 2;
printf("The trianglular number of %d is %d\n", n, TriNumber);
}
哪个输出:
55的三角数是1275
下面的程序实现了我想要的功能:它为5到50之间的每五个整数打印三角数。
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main()
{
int TriNumber = 0;
int n;
for(n = 5; n <= 50; n += 5)
printf("The trianglular number of %d is %d\n", n, TriNumber = (((n + 1) * n) / 2));
}
这给出了我想要的输出:
5的三角数是15
10的三角数是55
15的三角数是120
20的三角数是210
25的三角数是325
30的三角数是465
35的三角数是630
40的三角数是820
45的三角数是1035
50的三角数是1275
我不明白为什么在第一个代码中将
TriNumber = ((n + 1) * n) / 2;
放在自己的行中,而在第二个代码中将printf
放在行中会产生如此不同的结果。 最佳答案
没有花括号的for
循环(或其他任何控制结构)仅对一条语句起作用。因此,第一个代码段将循环遍历TriNumber
计算,但仅在循环完成后才调用printf
。相当于写作
for(n = 5; n <= 50; n += 5) {
TriNumber = ((n + 1) * n) / 2;
}
printf("The trianglular number of %d is %d\n", n, TriNumber);
为了使它按预期工作,您可以在两个语句之间自己添加花括号:
for(n = 5; n <= 50; n += 5) {
TriNumber = ((n + 1) * n) / 2;
printf("The trianglular number of %d is %d\n", n, TriNumber);
}