$ gcc -g -Og -Wall -Wextra -o toto toto.c
0 Quelques éléments de syntaxe
Déclarations de variables
Comme en Java, les variables sont déclarées avec une expression de la forme : type nom_de_variable;
Les types simples autorisés sont :
- types entiers : char, int, short, long, ...
- types entiers non signés : unsigned char, unsigned (ou unsigned int), unsigned long, ...
- types réels : float, double, ...
Attention : il n'y a pas de type string
Exemple :
int un_entier;
float un_reel;
un_entier = 42;
un_reel = 3.1416;
Écriture de messages
L'écriture de messages sur la sortie standard se fait avec la fonction printf().
Exemples :
printf("Un message simple. Notez le '\\n' pour le retour à la ligne\n");
printf("Valeur d'un entier : %d (c''est beau, non?)\n", un_entier);
printf("Valeur d'un réel : %f\n", un_reel);
printf("On peut en mettre plusieurs : %d + %f\n", un_entier, un_reel);
Lecture de variables
La lecture de variable sur l'entrée standard se fait avec la fonction scanf().
Exemples :
scanf("%d", &un_entier); // notez la présence de l'opérateur &
scanf("%f", &un_reel);
Note: pour être rigoureux, il faut vérifier que la lecture demandée a pu se faire correctement. Pour cela, on peut vérifier la valeur retournée par scanf(). En effet, cette valeur correspond au nombre de valeurs correctement lues et affectées aux variables.
Exemple :
if (scanf("%d", &un_entier) != 1) {
printf("Erreur de lecture\n");
exit(0); // termine le programme. Nécessite un #include <stdlib.h>
}
// ... la lecture s'est faite correctement, on peut utiliser la valeur de un_entier
Sur certains systèmes (Ubuntu par exemple), le compilateur émet un warning lorsque la vérification n'est pas faite.
Structures de contrôle
Les structures de contrôle (if, switch..case, for, while, ...) fonctionnent de manière similaire au langage Java déjà connu.
Exemple :
for (int i = 10; i > 0; i--) {
printf("il reste %d secondes...\n", i);
sleep(1);
}
printf("BOUM!\n");
1 Heures - minutes - secondes
Étant données deux durées en secondes, les convertir en heures - minutes - secondes puis les additionner.
2 Années bissextiles
Déterminer si une année est bissextile.
- une année est bissextile si elle est divisible par 4 et pas par 100,
- sauf les années divisibles par 400 qui sont bissextiles
3 Dessiner un sapin
Dessiner un sapin de hauteur h. Exemples (h = 4)
- sapin plein:
* *** ***** ******* - sapin vide:
* * * * * ******* - sapin couché:
* ** *** **** *** ** *
4 Tables de multiplication
Écrire une fonction affichant la table de multiplication d'un entier sous le format (exemple pour 3):
| 3 | 6 | 9 | 12 | 15 | ||||
| 18 | 21 | 24 | 27 | 30 |
puis une autre affichant cette fois-ci la table dans l'ordre:
| 3 | 9 | 15 | 21 | 27 | ||||
| 6 | 12 | 18 | 24 | 30 |
Écrire un programme C affichant les 10 premières tables de multiplication. Le format d'affichage est demandé à l'utilisateur.
Remarque: si une fonction ne retourne rien, son type de retour est void.
5 Deviner un nombre
Écrire un programme qui réalise le petit jeu suivant. Tout d'abord, l'ordinateur choisit un entier x entre 1 et 100. L'utilisateur essaie ensuite de le deviner. Il entre alors successivement des entiers, et à chaque coup l'ordinateur lui indique si l'entier est supérieur à x, inférieur à x, ou égal à x auquel cas la partie s'arrête et le nombre de coups est affiché.
Modifier ensuite le programme afin que l'utilisateur puisse, s'il le souhaite, recommencer une partie. En quittant le programme, le meilleur score s'affiche.
Voici une fonction retournant un entier entre min et max:
#include <stdlib.h>
#include <time.h>
int choisir_nombre(int min, int max)
{
static int seeded = 0;
if (!seeded) {
srand(time(NULL));
seeded = 1;
}
return min + rand() % (1 + max - min);
}
6 Mise en majuscule
Écrire un programme qui lit un texte saisi au clavier, le met en majuscule et écrit le résultat à l'écran. On pourra utiliser la fonction suivante qui prend un caractère en argument, le convertit en majuscule (si besoin) et retourne le résultat:
#include <ctype.h>
int toupper(int c);
On pourra tester ce programme
- soit en tapant un texte au clavier;
- soit en lui donnant le contenu d'un fichier par
cat pipo.txt | ./totoou bien./toto < pipo.txt.