Champ Valeur
Auteur·e Élise
Édition 2026-10-10
Durée 1 journée
Taille des équipes 1 personne
Rendu via git, dépôt $YEAR_synthesis, répertoire /c2, droits en lecture à delivery_collector

Règlement

La réalisation de cet exercice est assujettie aux règles en vigueur dans l’école en matière de triche et de normalisation. Tricher vous expose à de graves sanctions.

Vous devez respecter les règles de normalisation suivantes : https://git.ecole-89.com/eriizu/coding_style/src/branch/main/norm.md

Le non-respect de la norme vous fera perdre une partie ou la totalité des points qui auraient pu être acquis, sur l’ensemble du rendu.

Instructions de rendu

Respectez à la lettre les noms de fichiers et leur emplacement dans le dépôt de rendu. S’il vous est demandé de rendre un fichier nommé hello.c sans qu’un nom de dossier soit précisé : rendez un fichier hello.c à la racine de votre dépôt.

La présence d’une étoile * signifie que le nom du fichier peut être n’importe lequel dès lors qu’il porte l’extension ou l’affixe (préfixe/suffixe) demandée. Elle signifie aussi qu’il est possible de rendre plusieurs fichiers.

La présence d’une double étoile ** signifie que les fichiers peuvent être placés n’importe où dans un dossier, y compris dans des sous-dossiers.

Pensez à faire des commits et des push fréquemment. Autrement nous ne pouvons pas vous aider à retrouver vos fichiers perdus.

Fonctions autorisées et interdites

Par défaut, toute fonction système (comme write) ou fonction des bibliothèques (comme printf ou puts) sont interdites.

À chaque exercice vous sera donné une liste de fonction autorisées, le cas échéant.

main de test

Chaque fois que vous devez rendre une fonction, vous devez aussi rendre un fichier *.main.c. Il s’agit du fichier qui doit contenir votre main de test.

Vous devez écrire des tests pour voir si votre fonction à le bon comportement.

Correction du code source en C

Tout le code source sera compilé avec les drapeaux suivants :

-Wall -Wextra -Werror

Testez votre code avec ces drapeaux pour que le compilateur vous informe de tout ce qui peut poser problème avec votre programme avant de le rendre.

Pour tester qu’un fichier sans main compile, vous devez le compiler contre un second fichier qui lui contient un main.

gcc -Wall -Wextra -Werror example.c example.main.c

Exercices

Nombres pairs et impairs

Fichier·s à rendre : is_even.c, is_even.main.c, is_odd.c, is_odd.main.c Fonction·s autorisée·s : aucune

Écrivez les fonctions is_even (lit. est pair) et is_odd (lit. est impair) qui prennent chacune un paramètre de type int et qui renvoient une valeur de type int.

is_even doit renvoyer 1 lorsque le nombre reçu en paramètre est pair et 0 lorsqu’il ne l’est pas.

is_odd doit renvoyer 1 lorsque le nombre reçu est impair.

Exemple de is_even.main.c :

#include <stdio.h>

int is_even(int);

int main(void)
{
	if (is_even(2) == 1) {
		puts("2 is even!");
	} else {
		puts("this should be impossible! 2 can't be odd");
	}
}

Exécution du test :

$ gcc -Wextra -Wall -Werror is_even.c is_even.main.c
$ ./a.out
2 is even!

Écrire l’alphabet

Fichier·s à rendre : write_alphabet.c Fonction·s autorisée·s : write (pour tc_putchar)

Écrivez un programme (votre fichier doit donc contenir un main) qui affiche l’alphabet de A à Z suivi par un retour à la ligne.

Impression descendante des chiffres

Fichier·s à rendre : write_desc_digit.c Fonction·s autorisée·s : write (pour tc_putchar)

Écrivez un programme qui écrit sur la sortie standard les chiffres de 9 à 0, du plus grand au plus petit, suivis d’un retour à la ligne.

Halfabet

Fichier·s à rendre : write_halfabet.c Fonction·s autorisée·s : write (pour tc_putchar)

Écrivez un programme qui écrit sur la sortie standard l’alphabet en lettres minuscules, en parant de A et en sautant une lettre sur deux, le tout suivi d’un retour à la ligne.

Majuscule

Fichier·s à rendre : capitalise.c, capitalise.main.c Fonction·s autorisée·s : aucune

Écrivez la fonction stu_capitalise qui prend en paramètre une lettre minuscule et renvoie la majuscule correspondante. Si le caractère reçu en paramètre n’est pas une lettre minuscule, renvoyez-le sans transformation.

char stu_capitalise(char letter);

La holà de l’alphabet

Fichier·s à rendre : write_waving_alphabet.c Fonction·s autorisée·s : write (pour tc_putchar)

Écrivez un programme qui écrit, sur la sortie standard, l’alphabet en capitalisant une lettre sur deux et en commençant par une majuscule, le tout suivi d’un retour à la ligne.

Répéter un caractère

Fichier·s à rendre : repeat_char.c, repeat_char.main.c Fonction·s autorisée·s : write (pour tc_putchar)

Écrivez une fonction qui affiche un caractère passé en paramètre autant de fois que demandé par le second paramètre.

void stu_repeat_char(char c, int n);

Écrivez également son test dans repeat_char.main.c.

Jet de dés

Fichier·s à rendre : roll_2d6.c Fonction·s autorisée·s : write (pour tc_putchar)

Écrivez un programme qui écrit toutes les combinaisons qu’il est possible d’obtenir en jetant 2d6 (deux dés à six faces). Aucune combinaison ne doit être répétée. Les combinaisons doivent être séparées par un espace. La dernière combinaison doit être immédiatement suivie d’un retour à la ligne.

Les combinaisons doivent apparaître par ordre croissant. Le plus petit nombre de chaque paire doit être affiché en premier de sorte que quelque chose comme “2-1” ne soit jamais affiché.

1-1 1-2 1-3 1-4 1-5 1-6 2-2 [exemple tronqué] 6-6

Puissance

Fichier·s à rendre : pow.c, pow.main.c Fonction·s autorisée·s : aucune

Écrivez une fonction qui prend un nombre de départ et une valeur d’exposant en paramètre. Renvoyez le nombre à la puissance de l’exposant donné.

int stu_pow(int nb, int power);

Exemples de puissances : 22=42^2=4, 216=655362^{16}=65536, 53=1255^3=125

int main(void)
{
	int res;

	res = stu_pow(2, 16);
	if (res == 65536)
		puts("ok");
	else
		puts("nok");	
}

Factorielle

Fichier·s à rendre : fact.c, fact.main.c Fonction·s autorisée·s : aucune

Écrivez une fonction qui renvoie la valeur factorielle du nombre passé en paramètre.

int stu_fact(int nb);

Vous pouvez consulter la page Wikipédia de la factorielle pour plus d’informations, mais voici quelques exemples :

  • 1!=11!=1 ;
  • 2!=2∗1=22!=2*1=2 ;
  • 3!=1∗2∗3=63!=1*2*3=6 ;
  • etc.

Quantité de chiffres dans un nombre

Fichier·s à rendre : nb_len.c, nb_len.main.c Fonction·s autorisée·s : aucune

Écrivez une fonction qui renvoie le nombre de chiffre que comporte un nombre.

int nb_len(int nb);

Exemple : le nombre 1525015250 a 5 chiffres. Le nombre 00 en a 1. Le nombre −124-124 en a 3.

Extraire un chiffre d’un nombre

Fichier·s à rendre : get_digit.c, get_digit.main.c Fonction·s autorisée·s : aucune

Écrivez une fonction qui extrait un chiffre à un nombre en prenant sa position dans le nombre. Pour cet exercice, la position 0 correspond au chiffre le moins fort (le plus à droite).

int get_digit(int nb, int index);

Dans le nombre 25613, les nombres aux différents positions sont :

  • 0 → 3
  • 1 → 1
  • 2 → 6
  • 3 → 5
  • 4 → 2

Imprimer un nombre en base 10

Fichier·s à rendre : print_base10.c, print_base10.main.c Fonction·s autorisée·s : write (pour tc_putchar)

Vous devez implémenter la fonction suivante :

int print_base10(int nb);

Elle prend en paramètre le nombre à imprimer et elle renvoie le nombre de caractères écrits, y compris le signe du nombre s’il était négatif.

Pensez à comment afficher les nombres positifs, négatifs ou nuls.