这两个计算三角数的程序有什么区别?

Lou*_*uis -1 c math for-loop cs50

这两个代码都编译,但只有第二个代码执行我想要的.第一个代码:

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

   }
Run Code Online (Sandbox Code Playgroud)

哪个输出:

三细胞数为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));

}
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出:

的5 trianglular数为15
的10的trianglular数为55
的15的trianglular数目是120
20的trianglular数为210
的25 trianglular数为325
的30的trianglular数为465
的35 trianglular数为630
的三角数40是820
三角数45是1035
三角数50是1275

我不明白为什么TriNumber = ((n + 1) * n) / 2;在第一个代码中放置自己的行并且在printf第二个代码中的函数内部会有这样不同的结果.

Mur*_*nik 6

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);
Run Code Online (Sandbox Code Playgroud)

为了让它按照您的预期工作,您可以在两个语句周围自己添加花括号:

for(n = 5;  n <= 50; n += 5) {
    TriNumber = ((n + 1) * n) / 2;
    printf("The trianglular number of %d is %d\n", n, TriNumber);
}
Run Code Online (Sandbox Code Playgroud)