0x02. C - Functions, nested loops
Resources
Nested While Loops
Learning to Program in C (Part 06)
C Programming Loops & Functions
Functions in C programming
Learning Objectives
At the end of this project, you are expected to be able to explain to anyone, without the help of Google:
General
What are nested loops and how to use them
What is a function and how do you use functions
What is the difference between a declaration and a definition of a function
What is a prototype
Scope of variables
What are the gcc flags
gcc -Wall -Werror -Wextra -pedantic -std=gnu89 *.cWhat are header files and how to to use them with
#include
Requirements
General
Allowed editors:
vi, vim, emacsAll your files will be compiled on Ubuntu 20.04 LTS using
gcc -Wall -Werror -Wextra -pedantic -std=gnu89 *.cAll your files should end with a new line
A
README.mdfile at the root of the folder of the project is mandatoryYour code should use the
Bettystyle. It will be checked using betty-style.pl and betty-doc.plYou are not allowed to use global variables
No more than 5 functions per file
You are not allowed to use the standard library. Any use of functions like
printf, puts, etc…is forbiddenYou are allowed to use _putchar
#include <unistd.h> /** * _putchar - writes the character c to stdout * @c: The character to print * * Return: On success 1. * On error, -1 is returned, and errno is set appropriately. */ int _putchar(char c) { return (write(1, &c, 1)); }In the following examples, the main.c files are shown as examples. You can use them to test your functions.
The prototypes of all your functions and the prototype of the function
_putcharshould be included in your header file calledmain.hYou do not have to understand the
call by reference (address), stack, static variables, recursions or arrays, yet.
Tasks
0. _putchar
0-putchar.c
Write a program that prints _putchar, followed by a new line
The program should return
0
1. I sometimes suffer from insomnia. And when I can't fall asleep, I play what I call the alphabet game
1-alphabet.c
Write a function that prints the alphabet, in lowercase, followed by a new line.
You can only use _putchar twice in your code.
2. 10 x alphabet
2-print_alphabet_x10.c
Write a function that prints 10 times the alphabet, in lowercase, followed by a new line
You can only use _putchar twice in your code.
3. islower
3-islower.c
Write a function that checks for lowercase character.
It should:
Return
1ifarg cis lowercaseReturn
0otherwise
4. isalpha
4-isalpha.c
Write a function that checks for alphabetic character.
It should:
Return
1ifarg cis a letter, lowercase or uppercaseReturn
0otherwise
FYI: The standard library provides a similar function:
isalpha. To learn more Runman isalpha
5. Sign
5-sign.c
Write a function that prints the sign of a number.
It should:
Returns
1and prints+ifnis greater than zeroReturns
0and prints0ifnis zeroReturns
-1and prints-ifnis less than zero
6. There is no such thing as absolute value in this world. You can only estimate what a thing is worth to you
6-abs.c
Write a function that computes the absolute value of an integer.
FYI: The standard library provides a similar function:
abs. To learn more Runman abs
7. There are only 3 colors, 10 digits, and 7 notes; it's what we do with them that's important
Write a function that prints the last digit of a number.
- int print_last_digit(int);
Return the value of the last digit
Repository
GitHub repository: alx-low_level_programming
Directory: 0x02-functions_nested_loops
File: 0-putchar.c 1-alphabet.c 2-print_alphabet_x10.c 3-islower.c 4-isalpha.c 5-sign.c 6-abs.c 7-print_last_digit.c
Tasks
- 8. I'm federal agent Jack Bauer, and today is the longest day of my life
Write a function that prints every minute of the day of Jack Bauer, starting from 00:00 to 23:59.
void jack_bauer(void);You can listen to this soundtrack while coding :)
julien@ubuntu:~/0x02$ cat 8-main.c #include "main.h" /** * main - check the code * * Return: Always 0. */ int main(void) { jack_bauer(); return (0); } julien@ubuntu:~/0x02$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 _putchar.c 8-main.c 8-24_hours.c -o 8-24 julien@ubuntu:~/0x02$ ./8-24 | head 00:00 00:01 00:02 00:03 00:04 00:05 00:06 00:07 00:08 00:09 julien@ubuntu:~/0x02$ ./8-24 | tail 23:50 23:51 23:52 23:53 23:54 23:55 23:56 23:57 23:58 23:59 julien@ubuntu:~/0x02$ ./8-24 | wc -l 1440 julien@ubuntu:~/0x02$- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
8-24_hours.c
- 9. Learn your times table
Write a function that prints the 9 times table, starting with 0.
void times_table(void);Format: see example
julien@ubuntu:~/0x02$ cat 9-main.c #include "main.h" /** * main - check the code * * Return: Always 0. */ int main(void) { times_table(); return (0); } julien@ubuntu:~/0x02$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 _putchar.c 9-main.c 9-times_table.c -o 9-times_table ulien@ubuntu:~/0x02$ ./9-times_table | cat -e 0, 0, 0, 0, 0, 0, 0, 0, 0, 0$ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9$ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18$ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27$ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36$ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45$ 0, 6, 12, 18, 24, 30, 36, 42, 48, 54$ 0, 7, 14, 21, 28, 35, 42, 49, 56, 63$ 0, 8, 16, 24, 32, 40, 48, 56, 64, 72$ 0, 9, 18, 27, 36, 45, 54, 63, 72, 81$ julien@ubuntu:~/0x02$ ./9-times_table | tr ' ' . | cat -e 0,..0,..0,..0,..0,..0,..0,..0,..0,..0$ 0,..1,..2,..3,..4,..5,..6,..7,..8,..9$ 0,..2,..4,..6,..8,.10,.12,.14,.16,.18$ 0,..3,..6,..9,.12,.15,.18,.21,.24,.27$ 0,..4,..8,.12,.16,.20,.24,.28,.32,.36$ 0,..5,.10,.15,.20,.25,.30,.35,.40,.45$ 0,..6,.12,.18,.24,.30,.36,.42,.48,.54$ 0,..7,.14,.21,.28,.35,.42,.49,.56,.63$ 0,..8,.16,.24,.32,.40,.48,.56,.64,.72$ 0,..9,.18,.27,.36,.45,.54,.63,.72,.81$ julien@ubuntu:~/0x02$- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
9-times_table.c
- 10. a + b
Write a function that adds two integers and returns the result.
int add(int, int);julien@ubuntu:~/$ cat 10-main.c #include "main.h" #include <stdio.h> /** * main - check the code * * Return: Always 0. */ int main(void) { int n; n = add(89, 9); printf("%d\n", n); return (0); } julien@ubuntu:~/0x02$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 _putchar.c 10-main.c 10-add.c -o 10-add julien@ubuntu:~/0x02$ ./10-add 98 julien@ubuntu:~/0x02$- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
10-add.c
- 11. 98 Battery Street, the OG
Write a function that prints all natural numbers from
nto98, followed by a new line.void print_to_98(int n);Numbers must be separated by a comma, followed by a space
Numbers should be printed in order
The first printed number should be the number passed to your function
The last printed number should be 98
You are allowed to use the standard library
julien@ubuntu:~/0x02$ cat 11-main.c #include "main.h" /** * main - check the code * * Return: Always 0. */ int main(void) { print_to_98(0); print_to_98(98); print_to_98(111); print_to_98(81); print_to_98(-10); return (0); } julien@ubuntu:~/0x02$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 _putchar.c 11-main.c 11-print_to_98.c -o 11-98 julien@ubuntu:~/0x02$ ./11-98 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 98 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 julien@ubuntu:~/0x02$- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
11-print_to_98.c
- 12. The World looks like a multiplication-table, or a mathematical equation, which, turn it how you will, balances itself
Write a function that prints the
ntimes table, starting with 0.void print_times_table(int n);If
nis greater than 15 or less than0the function should not print anythingFormat: see example
julien@ubuntu:~/0x02$ cat 100-main.c #include "main.h" /** * main - check the code. * * Return: Always 0. */ int main(void) { print_times_table(3); _putchar('\n'); print_times_table(5); _putchar('\n'); print_times_table(98); _putchar('\n'); print_times_table(12); return (0); } julien@ubuntu:~/0x02$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 _putchar.c 100-main.c 100-times_table.c -o 100-times_table julien@ubuntu:~/0x02$ ./100-times_table 0, 0, 0, 0 0, 1, 2, 3 0, 2, 4, 6 0, 3, 6, 9 0, 0, 0, 0, 0, 0 0, 1, 2, 3, 4, 5 0, 2, 4, 6, 8, 10 0, 3, 6, 9, 12, 15 0, 4, 8, 12, 16, 20 0, 5, 10, 15, 20, 25 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72 0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96 0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120 0, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132 0, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144 julien@ubuntu:~/0x02$ ./100-times_table | tr ' ' . | cat -e 0,...0,...0,...0$ 0,...1,...2,...3$ 0,...2,...4,...6$ 0,...3,...6,...9$ $ 0,...0,...0,...0,...0,...0$ 0,...1,...2,...3,...4,...5$ 0,...2,...4,...6,...8,..10$ 0,...3,...6,...9,..12,..15$ 0,...4,...8,..12,..16,..20$ 0,...5,..10,..15,..20,..25$ $ $ 0,...0,...0,...0,...0,...0,...0,...0,...0,...0,...0,...0,...0$ 0,...1,...2,...3,...4,...5,...6,...7,...8,...9,..10,..11,..12$ 0,...2,...4,...6,...8,..10,..12,..14,..16,..18,..20,..22,..24$ 0,...3,...6,...9,..12,..15,..18,..21,..24,..27,..30,..33,..36$ 0,...4,...8,..12,..16,..20,..24,..28,..32,..36,..40,..44,..48$ 0,...5,..10,..15,..20,..25,..30,..35,..40,..45,..50,..55,..60$ 0,...6,..12,..18,..24,..30,..36,..42,..48,..54,..60,..66,..72$ 0,...7,..14,..21,..28,..35,..42,..49,..56,..63,..70,..77,..84$ 0,...8,..16,..24,..32,..40,..48,..56,..64,..72,..80,..88,..96$ 0,...9,..18,..27,..36,..45,..54,..63,..72,..81,..90,..99,.108$ 0,..10,..20,..30,..40,..50,..60,..70,..80,..90,.100,.110,.120$ 0,..11,..22,..33,..44,..55,..66,..77,..88,..99,.110,.121,.132$ 0,..12,..24,..36,..48,..60,..72,..84,..96,.108,.120,.132,.144$ julien@ubuntu:~/0x02$- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
100-times_table.c
- 13. Nature made the natural numbers; All else is the work of women
If we list all the natural numbers below 10 that are multiples of
3or5, we get3, 5, 6 and 9.The sum of these multiples is 23. Write a program that computes and prints the sum of all the multiples of3or5below1024(excluded), followed by a new line.You are not allowed to use the standard library
- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
101-natural.c
- 14. In computer class, the first assignment was to write a program to print the first 100 Fibonacci numbers. Instead, I wrote a program that would steal passwords of students. My teacher gave me an A
Write a program that prints the first 50 Fibonacci numbers, starting with
1 and 2, followed by a new line.The numbers must be separated by comma, followed by a space ,
You are allowed to use the standard library
- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
102-fibonacci.c
- 15. Even Liber Abbaci
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89. By considering the terms in the Fibonacci sequence whose values do not exceed 4,000,000, write a program that finds and prints the sum of the even-valued terms, followed by a new line.
You are allowed to use the standard library
- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
103-fibonacci.c
- 16. In computer class, the first assignment was to write a program to print the first 100 Fibonacci numbers. Instead, I wrote a program that would steal passwords of students. My teacher gave me an A+
Write a program that finds and prints the first 98 Fibonacci numbers, starting with
1 and 2, followed by a new line.The numbers should be separated by comma, followed by a space ,
You are allowed to use the standard library
You are not allowed to use any other library (You can’t use
GMPetc…)You are not allowed to use
long long, malloc, pointers, arrays/tables, or structuresYou are not allowed to hard code any Fibonacci number (except for 1 and 2)
- Repo:
GitHub repository:
alx-low_level_programmingDirectory:
0x02-functions_nested_loopsFile:
104-fibonacci.c