需要帮助在对齐的列中打印Fibonacci序列

时间:2018-01-11 17:34:22

标签: c fibonacci

我目前能够打印序列,但我需要它以特定格式打印。我需要它在列中打印,例如,如果我输入10作为输入,输出应如下所示:enter image description here

这是我目前的代码:

#include <stdio.h>

int main(int argc, char *args[])
{
  int i, num = 0;
  int n;
  long int f1 =1, f2 = 1;
  if ( argc > 1 ) {
    num = atoi( args[1] );    // convert a number string to an integer
    printf("%d\n", num);      // to test if the it get the argument    

    if (1 <= num && num <= 40) {      
        for(i=1;i<10;i++){
            n = f1 + f2;
            f1 = f2;
            f2 = n;
            printf("%d\n",n);
        }
    }
}
   else
       printf("no argument");

    printf("\n");  
    return 0;
}

4 个答案:

答案 0 :(得分:2)

(这似乎是一项家庭作业,所以我会根据这里描述的妥协来回答How do I ask and answer homework questions?。即我不会提供完整的代码解决方案。相反,我会帮助你思考一下这可以让你自己做作业,提供提示。)

第一提示:

  • 描述您实现的输出。
  • 描述所需的输出。
  • 通过指定不需要的换行符的位置以及缺少所需换行符的位置来执行此操作。

第二个提示:

  • 您需要记住表示数字所需的位数
  • 使用该知识来获得例如2和13对
  • 为此您需要(在开始打印之前)关于列应该有多宽的意见

第三个提示:

  • 使用\t进行对齐似乎是一个很有前景的概念
  • 但是对于具有一定数字位数的数字
  • ,环境特别重要
  • 8位数字以上的数字是制表者对齐的问题 (至少在你的环境中,在其他环境中它可能已经失败,例如4位数),
    找到那个
  • 的解释
  • 找到一种不同的方法来引入适当数量的前导空格,具体取决于要打印的数字的宽度

让我知道这有多大帮助,我可能会提供更多提示。

答案 1 :(得分:0)

这看起来很像家庭作业,所以我认为没有人应该给你你的答案。话虽如此,您可能想查看modulus operator。提示:每次num % something等于0时,您可能需要插入换行符。

您要查看的另一件事是sprintfprintf。例如,尝试"%20d" vs "%-20d"

祝你好运!

编辑:看起来有人给了你答案。您应该真正理解为什么它可能会或可能不会满足您的需求。此外,使用标签("\t")可能符合您的(或您的请求者)要求,也可能不符合您的要求。如果列的间距很重要,您可能需要回顾我的答案。

答案 2 :(得分:0)

你可以尝试这样的事情;

使用制表符分隔大多数数字,并每隔四位打印一个换行符,并在for循环终止条件中使用num而不是10。

if (1 <= num && num <= 40) {
    /* Add this to print the first two fibinacci values */
    printf("\t1\t1");        
    for(i=2;i<num;){
        n = f1 + f2;
        f1 = f2;
        f2 = n;
        printf("\t%d",n);
        /* Once we've printed 4 digits print a newline */
        if (++i%4==0)
            printf("\n");

    }
}

答案 3 :(得分:0)

我认为你可以玩它。

printf(i % 4 == 0 ? "\t%d\t\n" : "\t%d\t", n);
相关问题