Exercice 1 : Dessin de personnages
Ce premier exercice consiste à afficher des formes simples représentant des personnages en utilisant des caractères d'impression.
1.1 Personnages empilés verticalement
Le programme suivant affiche deux fois la même structure de personnage, l'une en dessous de l'autre.
#include <stdio.h>
#include <stdlib.h>
int main() {
printf(" o \n");
printf(" <h>\n");
printf(" I I\n");
printf("\n"); // Ajout d'une ligne vide pour la séparation
printf(" o \n");
printf(" <h>\n");
printf(" I I\n");
system("pause");
return 0;
}
</h></h>
1.2 Personnages alignés horizontalement
Ce programme affiche deux personnages côte à côte sur la même ligne.
#include <stdio.h>
#include <stdlib.h>
int main() {
printf(" o o \n");
printf(" <h> <h>\n");
printf(" I I I I\n");
system("pause");
return 0;
}
</h></h>
Exercice 2 : Vérification de triangle
Ce programme prend trois longueurs en entrée et détermine si elles peuvent former un triangle valide. La condition de validité est que la somme de deux côtés quelconques doit être supérieure au troisième côté, et que tous les côtés doivent être positifs.
#include <stdio.h>
#include <stdlib.h>
int main() {
double longueurA, longueurB, longueurC;
printf("Entrez les longueurs des trois cotes (a b c): ");
scanf("%lf %lf %lf", &longueurA, &longueurB, &longueurC);
if ((longueurA + longueurB > longueurC) &&
(longueurA + longueurC > longueurB) &&
(longueurB + longueurC > longueurA) &&
(longueurA > 0) && (longueurB > 0) && (longueurC > 0)) {
printf("Ces longueurs peuvent former un triangle.\n");
} else {
printf("Ces longueurs ne peuvent pas former un triangle.\n");
}
system("pause");
return 0;
}
Exercice 3 : Questionnaires interactifs
Cet exercice implémante un petit questionnaire interactif où l'utilisateur répond à deux questions en entrant 'y' ou 'n'. Le programme affiche un message différent en fonction des réponses fournies.
#include <stdio.h>
#include <stdlib.h>
int main() {
char reponse1, reponse2;
const char OUI_MAJ = 'Y', oui_min = 'y';
const char NON_MAJ = 'N', non_min = 'n';
printf("Avez-vous serieusement revise avant et apres chaque cours ? (y/n) : ");
reponse1 = getchar();
// Consomme le caractere de nouvelle ligne apres la saisie
while (getchar() != '\n');
printf("\nAvez-vous ecrit du code ? (y/n) : ");
reponse2 = getchar();
// Consomme le caractere de nouvelle ligne apres la saisie
while (getchar() != '\n');
if ((reponse1 == OUI_MAJ || reponse1 == oui_min) && (reponse2 == oui_min || reponse2 == oui_min)) {
printf("\nRome ne s'est pas construite en un jour, continuez ainsi ! :)\n");
} else {
printf("\nRome ne s'est pas detruite en un jour, construisons-la ensemble !\n");
}
system("pause");
return 0;
}
Observation sur la suppression de la ligne 9 (getchar();) : Si la ligne getchar(); destinée à consommer le retour chariot est supprimée, le programme attendra une seule saisie puis utilisera le caractère de nouvelle ligne restant dans le buffer d'entrée comme saisie pour la prochaine fonction getchar(). Cela interrompt le flux attendu et le programme se termine prématurément.
Exercice 4 : Lecture de données mixtes
Ce programme démontre comment utiliser scanf pour lire différents types de données (entiers, caractères, nombres décimaux) à partir d'une entrée standard. Il met en évidence les défis liés à la gestion des caractères d'espacement, en particulier les retours chariot laissés par les lectures précédentes.
#include <stdio.h>
int main() {
double val_x, val_y;
char char1, char2, char3;
int int1, int2, int3;
printf("Entrez trois entiers : ");
scanf("%d %d %d", &int1, &int2, &int3);
printf("Entiers lus : int1 = %d, int2 = %d, int3 = %d\n", int1, int2, int3);
// Pour lire les caracteres apres les entiers, il faut consommer le retour chariot precedent.
// L'espace avant %c dans scanf aide a ignorer les espaces blancs.
printf("Entrez trois caracteres : ");
scanf(" %c %c %c", &char1, &char2, &char3);
printf("Caracteres lus : char1 = %c, char2 = %c, char3 = %c\n", char1, char2, char3);
printf("Entrez deux nombres decumaux separes par une virgule : ");
scanf("%lf,%lf", &val_x, &val_y);
printf("Decimaux lus : x = %f, y = %lf\n", val_x, val_y);
return 0;
}
Exercice 5 : Conversion de secondes en années
Ce programme calcule combien d'années représentent 1 milliard de secondes. Il effectue la conversion en divisant le nombre total de secondes par le nombre de secondes dans une année (en considérant une année de 365 jours).
// Calcul et affichage de l'equivalence en annees d'un milliard de secondes
#include <stdio.h>
int main() {
int annees_approximatives;
const int SECONDES_PAR_ANNEE = 365 * 24 * 60 * 60; // 31536000
// Calcul de la conversion
annees_approximatives = 1000000000 / SECONDES_PAR_ANNEE;
printf("1 milliard de secondes represente environ %d annees.\n", annees_approximatives);
return 0;
}
Exercice 6 : Calcul de puissance
Ce programme calcule la puissance 365 d'un nombre décimal entré par l'utilisateur. Il continue de lire des nombres jusqu'à ce que la fin du fichier d'entrée soit atteinte (EOF).
#include <stdio.h>
#include <math.h> // Necessaire pour la fonction pow()
int main() {
double base, resultat_puissance;
printf("Entrez des nombres pour calculer leur puissance 365 (terminez avec EOF):\n");
// Boucle tant que la lecture reussie de double est possible
while (scanf("%lf", &base) != EOF) {
resultat_puissance = pow(base, 365.0); // Utilisation de pow pour calculer x^365
// Affichage du resultat formate a 2 decimales
printf("%.2f eleve a la puissance 365 : %.2f\n", base, resultat_puissance);
printf("\n"); // Ligne vide pour separer les calculs
}
return 0;
}
Exercice 7 : Conversion Celsius-Fahrenheit
Ce programme convertit des températures du système Celsius au système Fahrenheit. Il lit des valeurs en Celsius jusqu'à la fin de l'entrée (EOF) et affiche la température équivalente en Fahrenheit.
#include <stdio.h>
int main() {
double celsius, fahrenheit;
printf("Entrez des temperatures en Celsius pour conversion (terminez avec EOF):\n");
// Boucle tant que la lecture reussie de double est possible
while (scanf("%lf", &celsius) != EOF) {
// Formule de conversion : F = (9/5) * C + 32
fahrenheit = (9.0 / 5.0) * celsius + 32.0;
// Affichage des temperatures avec 2 decimales
printf("Pour %.2f degres Celsius, la temperature est %.2f degres Fahrenheit.\n", celsius, fahrenheit);
printf("\n"); // Ligne vide pour separer les conversions
}
return 0;
}
Exercice 8 : Calcul d'aire de triangle (Formule de Héron)
Ce programme calcule l'aire d'un triangle en utilisant la formule de Héron. Il prend les longueurs des trois côtés en entrée. Avant de calculer l'aire, il vérifie si les longueurs fournies peuvent effectivement former un triangle valide (chaque côté doit être positif et la somme de deux côtés doit être supérieure au troisième).
#include <stdio.h>
#include <math.h> // Pour la fonction sqrt()
int main() {
double cote_a, cote_b, cote_c, demi_perimetre, aire;
printf("Entrez les longueurs des trois cotes du triangle (a b c) (terminez avec EOF):\n");
// Boucle tant que la lecture reussie de trois doubles est possible
while (scanf("%lf %lf %lf", &cote_a, &cote_b, &cote_c) != EOF) {
// Verification des conditions pour former un triangle
if ((cote_a + cote_b > cote_c) &&
(cote_a + cote_c > cote_b) &&
(cote_b + cote_c > cote_a) &&
(cote_a > 0) && (cote_b > 0) && (cote_c > 0)) {
// Calcul du demi-perimetre
demi_perimetre = (cote_a + cote_b + cote_c) / 2.0;
// Calcul de l'aire en utilisant la formule de Heron
aire = sqrt(demi_perimetre * (demi_perimetre - cote_a) * (demi_perimetre - cote_b) * (demi_perimetre - cote_c));
// Affichage des cotes et de l'aire (3 decimales pour l'aire)
printf("a = %.0f, b = %.0f, c = %.0f, aire = %.3f\n", cote_a, cote_b, cote_c, aire);
} else {
// Message d'erreur si les cotes ne forment pas un triangle valide
printf("Les longueurs %.0f, %.0f, %.0f ne peuvent pas former un triangle. Veuillez reessayer !\n", cote_a, cote_b, cote_c);
}
printf("\n"); // Ligne vide pour separer les resultats
}
return 0;
}