# 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: 'a': Performs the action using an average
*   argv: '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);

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;
}
```