Write a program in C that prints the first 50 Fibonacci numbers, starting with 1 and 2


To be able to answer this question, you need to understand what a fibonacci number is and how to derive a fibonacci sequence.
A fibnonacci number is any number in a sequence which happens to be the sum of the two preceeding numbers.
This means that the number n
in a sequence will be expressed as:
n = (n-1) + (n-2)
For instance, this question states the numbers (1, 2) we should use to start our fibonacci sequence. This means that our sequence will be something like
1
2
1 +2 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
This means that if we assign our first two numbers to variables first
and second
and declare another variable called next
, we can go ahead to represent them as.
int first = 1;
int second = 2;
int next = first + second;
In the above case, the next
variable becomes 3
. As soon as we get that one, we need to find what the next one after 3
will be.
Since we are interested in what is after 3
, we will need to reset our first
and second
variables. You will realize that to get the number after 3
, our first variable now becomes 2
and the second variable becomes 3
. This gives us:
first = 2;
second = 3;
next = first + second;
=> next = 2 + 3;
=> next = 5;
The process will then repeated for the variable first
to become 3
and second
become 5
. The next
variable becomes 8
which is 3 + 5
.
I bet you now know how this works. If you don't, kindly go over it again to understand the steps. We can then go ahead and implement this concept as a C program.
Coding a C program that prints the first 50 numbers
Below is the code in C program that does exactly what we have discussed about.
#include <stdio.h>
/**
* main - main block
* Description: Print the first 50 fibonacci numbers, starting with 1 and 2.
* Numbers must be coma and space separated.
* Return: 0
*/
int main(void)
{
int count = 3; /* this is so because the first 2 members have been given already. My loop will therefore begin from the 3rd one */
long int first = 1, second = 2;
long int next = first + second;
printf("%lu, ", first);
printf("%lu, ", second);
while (count <= 50)
{
/* Let's check if we are at the end of the list, if we are close with a new line */
if (count == 50)
{
printf("%lu \n", next);
}
else /* if we are not at the end of the list, add a comma after the number */
{
printf("%lu, ", next);
}
/* Reset the variables to get the next number */
first = second;
second = next;
/* after resetting the variables, you need to find the next number */
next = first + second;
count++;
}
return (0);
}
The output of the above code is:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074
Conclusion
I hope you enjoyed reading this and it made you understand how to solve a problem like this. I would like to hear back from you. Is there anything I missed, or explained wrongly, or something you want me to elaborate more on?
Share with me what you also think. Mind you, I am also learning and your feedback will be valuable to me.
Thanks for reading and I would love to connect personally with you. If you are on Twitter, then you can send me a DM and let's have a good chat.
Subscribe to my newsletter
Read articles from Dr. Ehoneah Obed directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Dr. Ehoneah Obed
Dr. Ehoneah Obed
Heya! 👋 I love helping people, and one of the best ways I do this is by sharing my knowledge and experiences. My journey reflects the power of growth and transformation, and I’m here to document and share it with you. I started as a pharmacist, practicing at a tertiary hospital in the Northern Region of Ghana. There, I saw firsthand the challenges in healthcare delivery and became fascinated by how technology could offer solutions. This sparked my interest in digital health, a field I believe holds the key to revolutionizing healthcare. Determined to contribute, I taught myself programming, mastering tools like HTML, CSS, JavaScript, React, PHP, and more. But I craved deeper knowledge and practical experience. That’s when I joined the ALX Software Engineering program, which became a turning point. Spending over 70 hours a week learning, coding, and collaborating, I transitioned fully into tech. Today, I am a Software Engineer and Digital Health Solutions Architect, building and contributing to innovative digital health solutions. I combine my healthcare expertise with technical skills to create impactful tools that solve real-world problems in health delivery. Imposter syndrome has been part of my journey, but I’ve learned to embrace it as a sign of growth. Livestreaming my learning process, receiving feedback, and building in public have been crucial in overcoming self-doubt. Each experience has strengthened my belief in showing up, staying consistent, and growing through challenges. Through this platform, I document my lessons, challenges, and successes to inspire and guide others—whether you’re transitioning careers, exploring digital health, or diving into software development. I believe in accountability and the value of shared growth. Your feedback keeps me grounded and motivated to continue this journey. Let’s connect, learn, and grow together! 🚀