Calculer : opérateurs, division entière et caractères
Les opérateurs arithmétiques, la division entière, le reste et les caractères vus comme des nombres.
Ce que tu vas apprendre
- Utiliser les opérateurs
+ - * / % - Comprendre la division entière et le reste (modulo)
- Manipuler un caractère à partir de son code
Les opérateurs
Le C connaît +, -, *, / et % (le reste de la division). Les priorités sont celles des mathématiques : *, / et % passent avant + et -. Les parenthèses imposent un autre ordre : (a + b) * 2.
Il n'y a pas d'opérateur puissance : pour un carré, on écrit n * n.
Division entière et modulo
Entre deux entiers, / donne le quotient entier : 17 / 5 vaut 3, la partie décimale est perdue. 17 % 5 vaut 2 : c'est le reste.
Pour un entier positif n, n % 10 donne son dernier chiffre et n / 10 le retire. Ces deux opérations servent dans beaucoup d'exercices.
Échanger deux variables
Pour échanger le contenu de a et b, il faut une variable temporaire : on met a de côté, on copie b dans a, puis on place l'ancienne valeur de a dans b.
Les caractères sont des nombres
Un char contient un code numérique (le code ASCII) : 'A' vaut 65 et 'a' vaut 97. On peut donc calculer avec : 'a' + 1 vaut 'b'.
Avec printf, %c affiche le caractère et %d son code. Pour lire un caractère, écris scanf(" %c", &c); : l'espace avant %c saute les espaces et retours à la ligne qui précèdent.
Exemples commentés
1.Partager équitablement
#include <stdio.h>
int main(void) {
int bonbons, enfants;
scanf("%d %d", &bonbons, &enfants);
printf("%d chacun, il en reste %d\n",
bonbons / enfants, // quotient entier
bonbons % enfants); // reste
return 0;
}Entrée
23 4
Sortie
5 chacun, il en reste 3
23 = 4 × 5 + 3 : / donne 5 et % donne 3.
2.Découper un nombre
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
printf("centaines : %d\n", n / 100);
printf("sans le dernier chiffre : %d\n", n / 10);
return 0;
}Entrée
472
Sortie
centaines : 4 sans le dernier chiffre : 47
Diviser par 10, 100… retire des chiffres à droite. Le reste par 10, 100… les garde.
3.Du caractère au code
#include <stdio.h>
int main(void) {
char c;
scanf(" %c", &c);
printf("%c a pour code %d\n", c, c);
printf("deux lettres plus loin : %c\n", c + 2);
return 0;
}Entrée
K
Sortie
K a pour code 75 deux lettres plus loin : M
La même valeur s'affiche comme caractère avec %c et comme nombre avec %d.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Attendre un résultat décimal d'une division entière
À éviter
double moyenne = (a + b) / 2;
À préférer
double moyenne = (a + b) / 2.0;
(a + b) / 2 est calculé entre entiers avant d'être rangé dans le double : la partie décimale est déjà perdue.
Confondre le caractère '5' et le nombre 5
À éviter
int chiffre = c; // '5' donne 53
À préférer
int chiffre = c - '0'; // '5' donne 5
Les chiffres '0' à '9' ont des codes qui se suivent : soustraire '0' donne la valeur du chiffre.
Écraser une valeur pendant un échange
À éviter
a = b; b = a;
À préférer
int tmp = a; a = b; b = tmp;
Après a = b, l'ancienne valeur de a est perdue : les deux variables valent b.
Entraîne-toi
6 questions variées pour fixer la leçon : choix, résultat à prévoir, ligne à compléter, code à remettre dans l'ordre, erreur à trouver.
À toi de jouer !
15 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.