【问题标题】:Why the absence of curly brackets after FOR loop in finding factorials in C为什么在 FOR 循环之后在 C 中查找阶乘时没有大括号
【发布时间】:2021-02-14 02:16:12
【问题描述】:

这是查找给定非负整数的阶乘的代码之一。当我在此代码的 FOR 循环后使用大括号时,程序运行非常缓慢。我知道 for 循环可以在没有大括号的情况下用于单行代码,但我的代码在 for 循环中由两行组成。有人可以解释一下原因吗?

#include <stdio.h>
void main()
{

  int input,i,fact=1;
  
  //read user input//
  printf("Enter the number :");
  scanf("%d",&input);
  
  for(i=1;i<=input;i++)
  
   fact=fact*i;
   printf("value of factorial %d is %d",input,fact);
  
  
 }

【问题讨论】:

  • 你把大括号放在代码的什么地方?
  • 因为只有faxt=fact*i; 语句应该在循环中,而不是printf 调用(用于打印完成的结果)?使用printf 输出会大大减慢代码速度。
  • @Arsenic 我这样写:for(i=1;i
  • @Someprogrammerdude 是的,你是对的。我现在明白了。非常感谢。程序因此变慢了。
  • 关于:void main() 根据 C 标准,main() 只有两个有效签名(尽管一些不符合标准的编译器,如 Visual Studio,在使用其他签名时不会抱怨)有效签名是:int main( void )int main( int argc, char *argv[] )

标签: c loops for-loop curly-braces


【解决方案1】:

我已经使用rextesterc 编译器来分析你的程序的运行时间,我可以看到,

没有大括号的运行时间:0.18 秒和 带大括号的运行时间:0.16 秒,可能会不时变化大约 +/- 0.05 秒。如果您在循环中对单行代码使用或不使用大括号,我猜这不会影响程序的运行时间。

您可以使用其他编译器并尝试运行您的代码。

【讨论】:

    【解决方案2】:

    你说的完全正确

    for 循环可以在没有花括号的情况下用于单行代码

    更准确地说,for loop 如果没有提供任何花括号,则只会运行 一个 行代码

    所以你的代码

    for(i=1;i<=input;i++)
       fact=fact*i;
    
    printf("value of factorial %d is %d",input,fact);
    

    将与

    相同
    for(i=1;i<=input;i++)
      {
       fact=fact*i;
      }
    
       printf("value of factorial %d is %d",input,fact);
    

    但是在这里,您将大括号 ({}) 放在 fact=fact*i;printf("value of factorial %d is %d",input,fact); 周围

    就像@Some programmer dude 在 cmets 部分中所说的那样,在这种情况下,这两个语句都将在循环的每次迭代中执行,因此会相对比第一个慢。但就总执行时间而言,这仍然不会产生太大影响。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2017-01-29
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多