Lab 4: Fibonacci C Solution

Run this code on ide.judge0.com!

/*
 *  Name:
 *  Date:
 *  Project name:
 *
 *  Description: Describe what this file does
 */

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

#define MAX_FIB 47

// Students: Give a brief description of the prototype and describe each parameter

/**
  * Calculates the next Fibonacci number
  * unsigned int next:        The next number in the Fibonacci sequence
  * unsigned int *previous:   The pointer to the previous number in the Fibonacci sequence
  * return value:             The next number in the Fibonacci sequence (next + previous)
  */
unsigned int calc_fibonacci(unsigned int, unsigned int *);

// Students: Describe the number of args, and each required and optional arg in main()

/*
* Function: main
* ----------------------------
*   Application entry point
*
*   argc: Expected number of args: 1
*         Optional args: 1
*   argv[0]: 'a': Performs the action using an average
*   argv[1]: 'b': performs the action using a summation
*/
int main(int argc, char *argv[])
{
    // Verify at least one arg
    if (argc < 2)
    {
        printf("Usage: fibonacci [integer 0-%d]", MAX_FIB);
        return 0;
    }

    int count = atoi(argv[1]);

    if (count < 0 || count > MAX_FIB)
    {
        printf("Usage: fibonacci [integer 0-%d]", MAX_FIB);
        return 0;
    }

    unsigned int previous = 0;
    unsigned int next = 1;

    printf("%u \n", previous);

    for (int i = 0; i < count; i++)
    {
        printf("%u \n", next);

        next = calc_fibonacci(next, &previous);
    }

    return 0;
}

/*
 * Calculates the next Fibonacci number
 * int next:        The next number in the Fibonacci sequence
 * int *previous:   The pointer to the previous number in the Fibonacci sequence
 * return value:    The next number in the Fibonacci sequence (next + previous)
 */
unsigned int calc_fibonacci(unsigned int next, unsigned int *previous)
{
    unsigned int swap = next;
    next = *previous + next;
    *previous = swap;

    return next;
}