【问题标题】:C program to print a seriesC程序打印一个系列
【发布时间】:2021-04-09 09:49:59
【问题描述】:

我正在用 C 编写一个程序来打印以下系列。

   1
  121
 12321
1234321

下面是我的代码,它工作得很好,但是我可以做任何改变来使程序使用更少的循环。

#include <stdio.h>
int main() {
int num, i, j, terms, x;
printf("ENTER NUMBER OF TERMS: ");
scanf("%d", &terms);
x = terms--;
for(num=1;num<=terms;num++){
    for(i=1;i<=x;i++){
        printf(" ");
    }
    for(i=1; i<=num; i++) {
        printf("%d", i);
    }
    for(j=num-1 ; j>0; j--){
        printf("%d", j);
     }
    printf("\n");
    x--;
   }
}

【问题讨论】:

  • 如果您的代码有效(硬性要求)并且您希望对代码进行审查以可能改进它,那么请改为在the Code Review SE 上发帖。
  • 提示:将变量声明为尽可能接近它们的使用位置,例如 int x = terms--for (int num = 1; ...)
  • 可以使用 printf 删除第一个循环(实际上是隐藏的)来进行缩进。关于缩进如何正确缩进您的代码? ;-)
  • @tadman 我认为这是大学的标准 C 实践,我们仍然在学习必须在每个块的开头放置声明的标准。 ????
  • 请解释为什么你想要更少的循环。有几种不同的方法可以实现这一目标。但元原因会拒绝其中的一些。例如,我不知何故觉得使用递归和特定的 printf 功能不会被尚未讨论它们的编程课的老师所欣赏,即使代码可以有零循环(我敢打赌这很容易实现)。此外,代码变得更加难以阅读。因此,请退后一步,描述您希望通过减少循环次数来实现的目标。

标签: c loops series


【解决方案1】:
You can fusion the two first loops making an if else statement and using de answer below to print x spaces with one single print

for(i=1;i<=x;i++){
    printf(" ");
}
for(i=1; i<=num; i++) {
    printf("%d", i);
}



printf("%*c", n+1, '1');
for(i=1; i<=num; i++) {
    printf("%d", i);
}

或像下面的答案一样指定空格数,删除第一个循环

【讨论】:

    【解决方案2】:

    您可以使用 printf 指定要输出的空格数,而不是使用 for 循环

    printf("%*c", n, ' ');
    

    【讨论】:

    • 注意:不会在最后一行打印 0 个空格。但是,如果您像这样在每一行打印第一个 digit ,则可以使用 printf("%*c", n+1, '1');
    【解决方案3】:

    我在我的代码中使用了 3 个循环

    #include <math.h>
    #include <stdio.h>
    
    int main()
    {
     int n=5;
     for(int i=1;i<=n;i++)
     {printf("\n");
           for(int j=n-1;j>=i;j--)
           {
                printf(" ");
           }
           for(int k=i-1;k>=-(i-1);k--)
           {
                 printf("%d",i-abs(k));
           }
     }
     printf("\n");
    
    }
    

    【讨论】:

    • 你能在这里解释一下abs()函数的工作原理吗
    【解决方案4】:

    你可以尝试只使用一个循环:

    将术语初始化为 1
    将 increaseFactor 初始化为 21

    每次通过:
    计算空格数
    建议打印 pp182 之类的空格(注意零空格)
    打印术语
    建议打印 pp182 之类的空格(注意零空格)
    将 Term 乘以 100,然后将 increaseFactor 添加到 Term
    将IncreaseFactor乘以10并加上11

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 2011-01-03
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多