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

时间:2016-08-01 20:59:44

标签: c for-loop math 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);

   }

哪个输出:

  

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

}

这给出了我想要的输出:

  

3的三元数是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函数放在其中会有不同的结果。

3 个答案:

答案 0 :(得分:6)

没有花括号的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);
}

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

library(doSNOW)
library(foreach)
cl <- makeCluster(detectCores()-1, type = "SOCK")
registerDoSNOW(cl)

答案 1 :(得分:1)

●在第一种情况中,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 triangular number of %d is %d\n", n, TriNumber);

这就是为什么你得到一个声明输出说明:

  

55的三角形数是1275

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

for(n = 5;  n <= 50; n += 5)

    printf("The trianglular number of %d is %d\n", n, TriNumber = (((n + 1) * n) / 2));

即使没有大括号{},也类似于下面的代码:

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

这不仅适用于for循环,还适用于whileif等所有其他控制结构,它们在下一个没有{}大括号的语句中运行Mureinik说。

答案 2 :(得分:0)

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