这两个代码都可以编译,但是只有第二个代码可以实现我想要的功能。
第一个代码:

#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);
}

07-24 15:36