Вычисление n-го числа последовательности Фибоначчи, где n вводится в командной строке - PullRequest
1 голос
/ 15 марта 2011

Я хочу написать программу для вычисления n-го числа последовательности Фибоначчи, которую я сделал, используя printf и scanf.Но я надеялся изменить свою программу так, чтобы порядковый номер вводился в командной строке, а не вводился по запросу программы.Это то, что я придумал.Он компилируется, но когда он запускается, происходит сбой ... не знаю почему.Будем благодарны за любые предложения.

Это программа для вычисления n-го числа кода Фибоначчи с использованием итерации.Я написал это так: вы должны ввести номер последовательности, которую вы хотите вычислить, в командной строке argv [1].Затем программа принимает этот аргумент командной строки и использует его в цикле while, а также печатает это число.

#include <stdio.h>


int main( int argc, char**argv ) {
int fib[3] = {0,1};
int counter = 0;
  printf("The %dth Fibonacci number is:\n", atoi(argv[1]));
while ( counter < atoi(argv[1]) ) {

    fib[2] = fib[0] + fib[1];
    fib[0] = fib[1];
    fib[1] = fib[2];
    counter++;
}
printf("%d\n", fib[0]);
getchar();
  return 0;
}

Ответы [ 5 ]

4 голосов
/ 15 марта 2011

Проверьте, действительно ли пользователь передал аргумент:

int main( int argc, char**argv ) {
    if (argc < 2) {
        printf("Usage: %s number\n", argv[0]);
        return 1;
    }
    ...
}

Если он этого не сделал, argv[1] будет нулевым, и вы получите крах

3 голосов
/ 15 марта 2011

Программа должна проверить наличие аргумента командной строки:

if (argc < 2)
{
    printf ("usage:  %s n\n  where n is a positive integer\n", argv[0]);
    return 1;
}

Если аргумент не указан, он, вероятно, вылетит.= =

Я не вижу причин для сбоя после исправления вышеуказанной ошибки.Это работает хорошо:

#include <stdio.h>
int main( int argc, char**argv )
{
        int fib[3] = {0,1};
        int counter = 0;
        if (argc < 2)
        {
                printf ("usage: %s number\n", argv[0]);
                return 1;
        }

        printf("The %dth Fibonacci number is:\n", atoi(argv[1]));
        while ( counter < atoi(argv[1]) )
        {

                fib[2] = fib[0] + fib[1];
                fib[0] = fib[1];
                fib[1] = fib[2];
                counter++;
        }
        printf("%d\n", fib[0]);
        return 0;
}


[wally@zenetfedora ~]$ ./a.out 
usage: ./a.out number
[wally@zenetfedora ~]$ ./a.out 3
The 3th Fibonacci number is:
2
[wally@zenetfedora ~]$ ./a.out 4
The 4th Fibonacci number is:
3
[wally@zenetfedora ~]$ ./a.out 5
The 5th Fibonacci number is:
5
[wally@zenetfedora ~]$ ./a.out 6
The 6th Fibonacci number is:
8
[wally@zenetfedora ~]$ ./a.out 7
The 7th Fibonacci number is:
13
[wally@zenetfedora ~]$ ./a.out 8
The 8th Fibonacci number is:
21
[wally@zenetfedora ~]$ ./a.out 9
The 9th Fibonacci number is:
34
[wally@zenetfedora ~]$ ./a.out 10
The 10th Fibonacci number is:
55
0 голосов
/ 10 августа 2014

Если вы хотите напечатать серию до определенного числа, указанного в качестве аргумента командной строки, то перейдите к этой программе:

#include<stdio.h>
#include<stdlib.h>

int main(int c,char *v[])
{
    int *number;
    int x,y,z;
    if(c==1)
    {
        printf("provide number upto which febonacci is to be printed (greater than 2)");
        return 0;
    }
    number=(int *)malloc(sizeof(int));
    *number=atoi(v[1]);
    x=0;
    y=1;
    printf("%d\n",x);
    printf("%d\n",y);
    z=x+y;
    while(z<=*number)
    {
        printf("%d\n",z);
        x=y;
        y=z;
        z=x+y;
    }
}
0 голосов
/ 10 августа 2014
#include<stdio.h>

#include<stdlib.h>

int main(int c,char *v[])

{

int *numberOfTerms;

int x,y,z,i,count;

if(c==1)

{

printf("provide number of terms as command line argument");

return 0;

}

numberOfTerms=(int *)malloc(sizeof(int));

*numberOfTerms=atoi(v[1]);

x=0;

y=1;

if(*numberOfTerms==0) return 0;

if(*numberOfTerms<=2)

{

for(i=0;i<*numberOfTerms;i++) printf("%d\n",i);

return 0;

}

printf("%d\n",x);

printf("%d\n",y);

count=2;

while(count<*numberOfTerms)

{

z=x+y;

printf("%d\n",z);

x=y;

y=z;

count++;

}

}
0 голосов
/ 15 марта 2011

С каким номером вы его тестировали?Потому что int не сможет удерживать ничего выше, чем ~ 50-е число Фибоначчи.Я должен был сделать что-то подобное в своем классе Алгоритмов, и мы должны были найти 239-е число Фибоначчи, которое было 64202014863723094126901777428873111802307548623680. Это что-то, что int или long не могут правильно хранить. Я не думаю, что это может привести к сбою, а просто даетодин на один, если вам нужно найти большое число Фибоначчи.

...