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



这两个代码都可以编译,但只有第二个代码可以完成我想要的操作。第一个代码:

#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 %dn", 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 %dn", 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 %dn", n, TriNumber);

为了让它像你预期的那样工作,你可以自己在这两个语句周围添加大括号:

for(n = 5;  n <= 50; n += 5) {
    TriNumber = ((n + 1) * n) / 2;
    printf("The trianglular number of %d is %dn", n, TriNumber);
}

●在第一种情况中,for循环计算TriNumber,直到条件满足,然后转到下一个语句;即printf:

for(n = 5;  n <= 50; n += 5)
    TriNumber = ((n + 1) * n) / 2;
printf("The trianglular number of %d is %dn", n, TriNumber);

这类似于(为了更好地理解)

for(n = 5;  n <= 50; n += 5)
{
    TriNumber = ((n + 1) * n) / 2;
}
printf("The triangular number of %d is %dn", n, TriNumber);

这就是为什么你会得到一个单一的语句输出:

三角形数字55是1275

●而在第二种情况中,for循环计算TriNumber,并在每次满足循环条件时打印它,因为这里的printf是执行的for循环的下一个语句。

for(n = 5;  n <= 50; n += 5)
    printf("The trianglular number of %d is %dn", n, TriNumber = (((n + 1) * n) / 2));

即使没有大括号CCD_ 13:,其也类似于以下代码

for(n = 5;  n <= 50; n += 5)
{
    printf("The trianglular number of %d is %dn", n, TriNumber = (((n + 1) * n) / 2));
}

这不仅适用于for循环,而且适用于所有其他控制结构,如whileif;其在没有Mureinik所说的CCD_ 17大括号的情况下对下一个语句进行操作。

在第一种情况下,您在最后一次循环迭代后打印,结果n获得5的额外增量,您会看到55。在第二种情况下,您从上一次迭代开始打印,循环计数器还没有额外增加,您会看到50

最新更新