fantasticode.fr
Image default

10 exercices de C pour progresser (avec corrections)

En bref

Voici 10 exercices de C progressifs avec leur piste de correction, calibrés pour un débutant qui a le socle et un compilateur qui tourne. Au programme : le bonjour personnalisé (printf, scanf et %s), pair ou impair (saisie et modulo), la moyenne de trois notes en flottants (formats %.2f), FizzBuzz version C (boucle for), le maximum d’un tableau (parcours indexé), l’inversion d’une chaîne en place (indices et strlen), le compteur de voyelles (parcours de char), le nombre mystère (while, rand et srand), l’échange de deux variables via une fonction — l’exercice-passerelle qui introduit le passage par adresse — et la mini gestion d’étudiants avec struct, la synthèse. Compile chaque essai avec -Wall, lis chaque avertissement, et accueille ton premier plantage mémoire comme un rite de passage : en C, chaque erreur comprise vaut un chapitre de cours.

Le C s’apprend dans le corps-à-corps : toi, le compilateur, et des programmes qui font exactement ce que tu leur dis — y compris tes erreurs. Ces 10 exercices de C suivent la progression de nos bases du C et culminent sur le passage par adresse et les structures — les deux seuils qui préparent la suite du parcours apprendre le C. Compilateur prêt, option -Wall activée : on démarre.

Exercices 1 à 5 : saisie, logique et tableaux

  1. Le bonjour personnalisé. Demande le prénom, réponds « Bonjour Sami ! ». Piste : un tableau de char pour stocker, scanf(« %s », prenom) pour lire (sans & ici — tu comprendras pourquoi à l’exercice 9), printf pour répondre. Vérifie ce qui se passe avec un prénom à espace : première leçon sur les limites de %s.
  2. Pair ou impair. Lis un entier, annonce sa parité. Piste : scanf(« %d », &n) — le & obligatoire cette fois —, le modulo %, une condition if/else. Teste avec zéro et un négatif : ton programme tient-il ?
  3. La moyenne de trois notes. Trois flottants saisis, moyenne affichée avec deux décimales et mention selon le seuil de 10. Piste : des float, scanf(« %f », …) trois fois, et printf(« %.2f », moyenne) pour le format — l’occasion de sentir la différence int/float en divisant.
  4. FizzBuzz version C. De 1 à 50 : Fizz, Buzz, FizzBuzz selon les multiples. Piste : une boucle for canonique, le cas 15 testé en premier — et savoure la compilation qui valide chaque accolade avant de te laisser exécuter.
  5. Le maximum du tableau. Trouve le plus grand de int valeurs[] = {12, 47, 3, 28, 9};. Piste : initialise le max avec la première case, parcours le tableau en comparant — puis ose l’expérience interdite : lis valeurs[10] et observe. Ce non-sens silencieux est LA leçon mémoire du C.

Exercices 6 à 10 : chaînes, hasard, adresses et structures

  1. L’inversion en place. « Bonjour » devient « ruojnoB » — dans le même tableau, sans en créer un second. Piste : deux indices, un au début, un à la fin (strlen – 1), qui échangent leurs caractères et convergent vers le centre — la gymnastique d’indices la plus formatrice du socle.
  2. Le compteur de voyelles. Compte les voyelles d’une chaîne saisie. Piste : parcours char par char jusqu’au ‘\0’, compare chaque caractère aux voyelles (un switch est élégant ici) — et pense aux majuscules, ou convertis avec tolower.
  3. Le nombre mystère. Le programme tire un nombre entre 1 et 100, tu devines, il guide (« plus grand », « plus petit ») et compte les essais. Piste : rand() % 100 + 1 pour le tirage, initialisé par srand(time(NULL)) — sinon la même partie éternellement, découverte classique —, et une boucle while autour du dialogue.
  4. L’échange impossible… puis possible. Écris d’abord void echange(int a, int b) qui permute ses deux paramètres — et constate que ça ne marche pas : la fonction reçoit des copies. Piste : la version qui marche prend les adresses — echange(&x, &y), avec des paramètres int* et l’étoile pour toucher les valeurs. C’est le passage par adresse en personne : l’exercice-passerelle vers les pointeurs, à refaire jusqu’à pouvoir l’expliquer avec un dessin.
  5. La gestion d’étudiants. Une struct Etudiant (nom, trois notes, moyenne), un tableau de trois étudiants saisis, leurs moyennes calculées par une fonction, et l’affichage du major de promo. Piste : la struct regroupe, le point accède (etudiant.nom), et tout ton socle s’assemble — saisie, boucles, fonctions, tableaux — dans un programme qui ressemble enfin à un logiciel.

La méthode : le compilateur, les warnings et le rite du plantage

Trois disciplines font le rendement de la série. Compile tôt, compile souvent : après chaque bloc écrit, pas à la fin — une erreur fraîche se localise en secondes, vingt erreurs accumulées se démêlent en heures. Et lis les messages de gcc de la première à la dernière ligne : « expected ‘;’ », « implicit declaration » (l’include oublié), « incompatible types » — chaque formule traduite une fois ne t’arrêtera plus jamais. Traite les warnings comme des erreurs : -Wall te signale la variable non initialisée et le format douteux — le programme compile, mais le compilateur te dit « je t’aurai prévenu » ; écoute-le, c’est gratuit. Apprivoise le plantage : la fameuse erreur de segmentation — le programme qui s’arrête brutalement — signifie presque toujours un accès mémoire hors des clous (l’indice trop loin, la chaîne sans ‘\0’, l’adresse manquante dans scanf). Ne la subis pas : provoque-la exprès une fois sur chaque cas, observe, comprends — le rite de passage devient un diagnostic que tu poseras ensuite en dix secondes.

Un exercice par jour, chaque réussite prolongée d’une variante (la moyenne sur N notes saisies, le mystère avec essais limités, un deuxième champ dans la struct), et le socle C devient réflexe en dix jours. La suite du chemin est balisée : le grand chapitre des pointeurs en pleine profondeur, puis les projets console complets — et, quand l’appel du grand large se fera sentir, la passerelle naturelle vers le C++, où ton C se transfère presque intégralement. Pour l’endurance quotidienne, les sites d’exercices gratuits et les défis de code ont tous leurs pistes C — l’entraînement ne s’arrête jamais vraiment, et c’est tant mieux.

Questions fréquentes

Quels exercices de C pour un débutant complet ?

Commence par la saisie et les conditions (bonjour personnalisé, pair/impair, moyenne de notes), puis les boucles et tableaux (FizzBuzz, maximum), les chaînes (inversion, comptage de voyelles), et termine par l’échange via pointeurs et une première struct — la progression naturelle du socle C.

C’est quoi une erreur de segmentation et comment la corriger ?

C’est l’arrêt brutal du programme après un accès mémoire interdit : indice de tableau hors limites, chaîne mal terminée, adresse oubliée dans scanf. Pour corriger : repère la dernière ligne exécutée (des printf jalons aident), vérifie les indices et les & — et provoque l’erreur volontairement une fois pour la reconnaître ensuite.

Pourquoi l’exercice d’échange de variables est-il si important en C ?

Parce qu’il rend le passage par adresse tangible : la version naïve échoue (la fonction reçoit des copies), la version par pointeurs réussit — et la différence entre les deux contient toute l’idée des pointeurs. Le refaire jusqu’à pouvoir l’expliquer par un dessin prépare idéalement le grand chapitre.

Que faire après ces 10 exercices de C ?

Plonge dans les pointeurs en profondeur (parcours de tableaux, allocation dynamique), puis construis des programmes console complets — gestionnaire de notes avec fichiers, mini banque, petit jeu. Ensuite, selon ton cap : l’embarqué sur microcontrôleur, ou la passerelle vers le C++ et son orienté objet.

Sources

Cet article a une vocation informative et pédagogique. Les plateformes, outils et formations éventuellement cités le sont à titre d’exemple ; compare plusieurs options avant de t’engager ou de payer.