Programmation en C: Exercices
Boucles simples, variables, calcul et affichage
- Ecris un programme qui calcule et affiche le prix de 1.5 kg de tomates à Fr. 3.90 le kilo.
- Ecris un programme qui calcule et affiche le volume d'un cylindre de diamètre 10.2 et de hauteur 6.5.
- Ecris un programme qui affiche les multiples de 6 jusqu'à 120.
#load basic/multiples.c
- Ecris un programme qui affiche les diviseurs de 66.
#load basic/divisors.c
- Ecris un programme qui affiche les puissances de 2 (1, 2, 4, 8, 16, …) jusqu'à 1024.
- Ecris un programme qui affiche un prix au format "Fr. 4.35", avec l'arrondi sur 5 centimes.
- Ecris un programme qui affiche les heures de 00:00 à 23:55 par intervalle de 5 minutes.
- Ecris un programme qui affiche une probabilité (nombre entre 0.0 et 1.0) en pourcentage avec un chiffre après la virgule (e.g. 0.41327 → "41.3 %").
- Ecris un programme qui affiche un taux (nombre entre 0.0 et 1.0) sous forme de barre de progression de longueur 10 avec des "*" et des "-" (e.g. 0.41327 →
[****------]
). - Ecris un programme qui affiche une probabilité (nombre entre 0.0 et 1.0) sous forme de texte: impossible - peu probable - probable - très probable - certain.
Tableaux
Pour ces exercices, on utilise les vitesses moyennes du vent (en m/s) à Pully en 2011:
#include <stdlib.h> #include <stdio.h> int main(int argc, char * argv[]) { double vitesses[12] = {1.4, 1.1, 1.5, 1.7, 1.5, 1.6, 1.6, 1.6, 1.4, 1.5, 1.1, 1.8}; // Ton code source // ... return 0; }
- Ecris un programme qui affiche chaque vitesse en km/h.
- Ecris un programme qui compte le nombre de valeurs en-dessus de 1.55.
- Ecris un programme qui affiche la vitesse minimale.
- Ecris un programme qui affiche la différence entre la valeur maximale et la valeur minimale.
#load arrays/range.c
- Ecris un programme qui calcule la moyenne de ces valeurs.
- Ecris un programme qui calcule la variance de ces valeurs.
- Ecris un programme qui affiche les différences d'une vitesse à la prochaine (11 différences).
#load arrays/differences.c
- Ecris un programme qui crée et affiche un histogramme de ces valeurs.
Fonctions
- Ecris une fonction
double fahrenheit(double celsius) {...}
qui converti une température donnée en degrés Celsius en degrés Fahrenheit, et retourne le résultat.#load functions/temperature.c
- Ecris une fonction
void afficheDiviseurs(int n) {...}
qui affiche les diviseurs de n. Appelle cette fonction depuis la fonction main, par ex.afficheDiviseurs(66)
ouafficheDiviseurs(820)
. - Ecris une fonction
double volumeCylindre(double hauteur, double rayon) {...}
qui calcule et retourne le volume d'un cylindre. Appelle cette fonction depuis main et affiche le résultat. - Ecris une fonction
double volumeVase(double hauteur, double epaisseurSol, double rayon, double epaisseurParois) {...}
qui retourne le volume d'un vase cylindrique à l'aide de la fonctionvolumeCylindre
de l'exercice précédent. - Ecris une fonction
void afficherHeure(int minutesDepuisMinuit) {...}
qui affiche l'heure au formatHH:MM
en fonction des minutes depuis minuit passées. Exemple: pourafficherHeure(73)
, la fonction affichera 01:13.#load functions/hour.c
- Ecris une fonction
int nombrePremier(int n) {...}
qui retourne 1 si n est un nombre premier, et 0 sinon.
Boucles
- Ecris un programme qui décompose un entier en facteurs premiers.
#load loops/primefactors.c
- Ecris un programme qui trie un tableau de nombres par ordre croissant.
- Ecris un programme qui calcule la médiane d'un tableau de nombres.
Paramètres sur la ligne de commande (argc, argv)
- Ecris un programme qui affiche le nombre de paramètres passés au programme.
- Ecris un programme qui affiche la liste des paramètres passés au programme (1 par ligne).
#load parameters/listParameters.c
- Ecris un programme qui affiche les diviseurs d'un nombre passé comme paramètre. Si aucun paramètre n'a été passé, affiche une erreur.
- Ecris un programme qui calcule la somme de tous les nombres passés comme paramètres.
- Ecris un programme qui affiche n nombres aléatoires entre a et b si le programme est lancé avec les trois paramètres n, a et b.
#load parameters/random.c
Standard input (stdin)
Pour ces exercices, on admet que l'utilisateur connecte un fichier avec une température par ligne à stdin (./mon-programme < fichier-temperatures
), ou tape quelques températures à la main après le démarrage du programme.
- Ecris un programme qui lit des températures en °C ligne par ligne, et les affiche en °F.
#load stdin/fahrenheit.c
- Ecris un programme qui lit des températures en °C ligne par ligne, et affiche un résumé avec la température minimale, maximale et moyenne à la fin.
- Ecris un programme qui fait un histogramme des températures lues depuis stdin, et l'affiche.
Chaines de caractères
Pour ces exercices, on utilise la chaine de caractères "Environmental engineering rocks!":
De plus, on admet que c'est du texte ASCII (sans accents, umlaut, ...) avec un caractère par byte.
- Ecris un programme qui affiche la longueur du texte.
#load strings/length.c
- Ecris un programme qui affiche les 11 premiers caractères seulement.
- Ecris un programme qui affiche tout sauf les 11 premiers caractères.
- Ecris un programme qui affiche les 2 dernier caractères seulement.
- Ecris un programme qui compte de nombre de 'e' dans le texte.
- Ecris un programme qui fait un histogramme des lettres.
- Ecris un programme qui remplace les 'e' par des '_'. (Note: Tu dois d'abord copier la chaine dans un tableau de caractères, car une chaine statique ne peut pas être modifiée.)
#load strings/replace-chars-1.c
#load strings/replace-chars-2.c
- Ecris un programme qui affiche chaque deuxième caractère seulement.
- Ecris un programme qui affiche les lettres dans l'ordre inversé.
- Ecris un programme qui renverse les lettres de chaque mot (i.e. "latnemnorivnE gnireenigne skcor!").
#load strings/reverse-words.c
- Ecris un programme qui coupe la chaine en mots (séparés par les espaces) et affiche chaque mot sur une nouvelle ligne.
Chaines de caractères: comparaison
- Ecris un programme qui compare ces deux chaines (strcmp) et les affiche dans l'ordre alphabétique.
#load strings-comparison/strcmp.c
- Ecris un programme qui compte de nombre de caractères communs au début des deux chaines.
#load strings-comparison/starts-with.c
- Ecris un programme qui compte de nombre de caractères communs à la fin des deux chaines.
#load strings-comparison/ends-with.c
Chaines de caractères et stdin
Pour ces exercices, on admet que l'utilisateur connecte un fichier avec un mot par ligne à stdin (./mon-programme < fichier-mots
), ou tape quelques mots à la main après le démarrage du programme.
On n'utilise que les caractères ASCII (sans accents, umlaut, …), et on admet que les mots sont plus courts que 100 caractères.
- Ecris un programme qui affiche - pour chaque ligne - la longueur du mot (en nombre de lettres).
#load strings-stdin/strlen.c
- Ecris un programme qui transforme les lettres minuscules en lettres majuscules, et affiche le mot résultant.
- Ecris un programme qui affiche un message d'erreur si une ligne est vide (ligne sans mot).
- Ecris un programme qui affiche un message d'erreur si une ligne continent plusieurs mots (séparés par des espaces).
- Ecris un programme qui coupe des éventuels espaces au début et à la fin du mot, et affiche le mot résultant.
- Ecris un programme qui fait un histogramme des mots par première lettre (i.e. nombre de mots qui commencent par 'a', 'b', 'c', …, 'z').
- Ecris un programme qui affiche un message d'erreur lorsque deux lignes consécutives contiennent le même mot.
Nombres aléatoires
- Ecris un programme qui affiche un nombre entier aléatoire entre 1 et 6 (y compris), comme si on lançait un dé.
#load random-numbers/dice.c
- Ecris un programme qui affiche un nombre rationnel aléatoire entre 0 et 100 (non compris) avec 3 chiffres après la virgule.
#load random-numbers/numbers.c