Le cours
Résumé en cinq points
- Typage statique faible, passage par valeur : modification de l'appelant et retours multiples par pointeurs.
- Sur bits : non signé à (modulo ), signé à (dépassement indéfini).
- Accès
t[i]non vérifiés ; tableau en paramètre = adresse sans taille ; chaîne terminée par'\0'. - Pile pour les locales, tas pour
mallocavecsizeof; unfreeparmalloc; case en . - Module :
.havec garde,.c, objets.opuis édition de liens ; assertions comme garde-fous.
Classiques et HP
Méthodes et approfondissements du chapitre · le statut est précisé pour MP2I.
Classiques et HP réservés
Prolongements et démonstrations de Informatique.
Fin de l'aperçu gratuit
Encore 17 parties de cours et 10 corrigés.
Méthodes et exercices
Exercices classiques corrigés
Rangés par thème, du plus simple au plus exigeant. Difficulté et durée indicatives.
Parcours de tableau 3
Exercice 1. Minimum et maximum ★
Application du cours · 10 min · Khôlle
Calculer à la fois le minimum et le maximum d'un tableau d'entiers non vide.
Voir l'indice
Technique simuler deux valeurs de retour par des pointeurs.
Voir le corrigé offert
- Idée : on initialise les deux résultats avec t[0], puis on compare chaque case suivante.
/* n >= 1, mini et maxi non NULL. Écrit le min et le max de t[0..n-1]. */
void minmax(int t[], int n, int* mini, int* maxi) {
assert(n >= 1 && mini != NULL && maxi != NULL);
*mini = t[0];
*maxi = t[0];
for (int i = 1; i < n; i = i + 1) {
if (t[i] < *mini) *mini = t[i];
if (t[i] > *maxi) *maxi = t[i];
}
}
- Invariant au début du tour i :
*miniet*maxisont le minimum et le maximum de t[0..i − 1]. À la sortie, i = n. - Coût : 2(n − 1) comparaisons. Appel :
int a, b;puisminmax(t, n, &a, &b).
piège : Déclarer int* a sans l'initialiser et passer a. On écrit alors à une adresse quelconque.
Exercice 2. Renverser un tableau ★
Application du cours · 10 min · Khôlle
Renverser un tableau en place, sans tableau auxiliaire.
Voir le début du corrigé
- Idée : on échange les extrémités, puis on resserre.
La suite du corrigé dans Sup et Spé+ : essai gratuit 7 jours.
Exercice 5 ★★
Classiques de khôlle et concours · 15 min · Niveau écrit CCINP
Une matrice n × p de flottants est linéarisée par lignes. Renvoyer sa transposée, matrice p × n linéarisée.
Voir le début du corrigé
- Idée : la case (i, j) de m devient la case (j, i) de la transposée, dont les lignes ont n colonnes, donc d'indice j × n + i.
La suite du corrigé dans Sup et Spé+ : essai gratuit 7 jours.
Allocation mémoire 3
Exercice 3 ★★
Classiques de khôlle et concours · 15 min · Niveau écrit CCINP
Écrire concat qui renvoie une nouvelle chaîne formée de s1 suivie de s2, sans modifier ses arguments.
Voir le début du corrigé
- Idée : il faut n1 + n2 caractères plus la sentinelle. …
La suite du corrigé dans Sup et Spé+ : essai gratuit 7 jours.
Exercice 4 ★★
Classiques de khôlle et concours · 15 min · Khôlle
Trouver et corriger les trois erreurs de cette fonction, censée lire n entiers au clavier et les renvoyer dans un tableau.
Corrigé détaillé dans Sup et Spé+ : essai gratuit 7 jours.
Exercice 7 ★★★
Approfondissement · 25 min · Niveau oral Mines
Tableau dynamique. La structure struct tabdyn_s, nommée tabdyn par typedef, a trois champs : int* donnees, int taille et int capacite, avec 1 ≤ capacité et taille ≤ capacité. Écrire l'ajout en fin avec doublement de la capacité, et justifier le choix du paramètre.
Corrigé détaillé dans Sup et Spé+ : essai gratuit 7 jours.
Listes chaînées 1
Exercice 6 ★★
Classiques de khôlle et concours · 20 min · Niveau écrit CCINP
Retourner une liste chaînée en place, sans allouer de maillon, et renvoyer la nouvelle tête.
Voir le début du corrigé
- Idée : on détache le premier maillon de la partie restante et on l'accroche devant la partie déjà retournée.
La suite du corrigé dans Sup et Spé+ : essai gratuit 7 jours.
Compilation modulaire 1
Exercice 8 ★★
Classiques de khôlle et concours · 20 min · Niveau écrit CCINP
Organiser une pile d'entiers en module pile.h et pile.c, au-dessus du module de listes de la fiche, et donner les commandes de compilation.
Corrigé détaillé dans Sup et Spé+ : essai gratuit 7 jours.
Arithmétique entière 1
Exercice 9 ★★
Classiques de khôlle et concours · 15 min · Niveau écrit Mines
Écrire une addition d'int32_t qui détecte le dépassement sans jamais le provoquer, avec les constantes INT32_MAX et INT32_MIN de stdint.h. Que vaut 200 + 100 rangé dans un uint8_t ?
Corrigé détaillé dans Sup et Spé+ : essai gratuit 7 jours.
Programme et fichiers 1
Exercice 10 ★
Application du cours · 10 min · Khôlle, après rappel
Écrire un programme lancé par ./somme donnees.txt qui affiche la somme des entiers du fichier. On rappelle que fscanf renvoie le nombre de valeurs lues.
Corrigé détaillé dans Sup et Spé+ : essai gratuit 7 jours.
Approfondissement hors programme 1
Exercice HP. Détection, entrée et cas terminé par NULL ★★★
Approfondissement hors programme
Approfondissement facultatif · hors programme en MP2I
On considère dix maillons distincts , tous valides pendant l’exécution. La tête est . Pour , le suivant de est , et le suivant de est . Aucun pointeur n’est modifié pendant les parcours.
On applique l’algorithme suivant : lent et rapide partent de la tête ; tant que rapide et son suivant sont non NULL, lent avance d’un maillon et rapide de deux, puis leurs adresses sont comparées. À la première rencontre, un pointeur est replacé à la tête et l’autre reste sur place ; ils avancent ensuite chacun d’un maillon jusqu’à leur première égalité, en commençant par comparer leurs positions initiales.
- Déterminer la longueur de la partie initiale et la longueur du cycle.
- Pour chaque instant de 1 jusqu’à la première rencontre, donner les positions des deux pointeurs. Justifier que la rencontre trouvée est la première.
- Détailler la deuxième phase et déterminer le maillon retourné.
- Compter les déplacements de pointeurs effectués par les deux phases, en comptant une avancée le long d’une arête comme un déplacement. On ne compte pas les lectures des tests ni le replacement à la tête.
- On remplace maintenant le suivant de par NULL, en conservant tous les autres suivants. Combien d’itérations la première phase effectue-t-elle ? Justifier l’absence de rencontre. Préciser également le résultat pour une tête NULL et pour un maillon unique dont le suivant est lui-même.
Corrigé détaillé dans Sup et Spé+ : essai gratuit 7 jours.