这两个代码都编译,但只有第二个代码执行我想要的代码。 第一个代码:
#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
函数放在其中会有不同的结果。
答案 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
循环,还适用于while
,if
等所有其他控制结构,它们在下一个没有{}
大括号的语句中运行Mureinik说。
答案 2 :(得分:0)
在第一种情况下,您在最后一次循环迭代后打印,结果n
得到5
的额外增量,您会看到55
。在第二种情况下,您从最后一次迭代开始打印,并且循环计数器还没有额外增加,您看到50
。