Le langage C
Apprendre à programmer
Jean-Michel Léry
Ellipses
Introduction1
Les concepts fondamentaux7
1. L'environnement de programmation
7
1.1. Le langage binaire et les logiciels7
1.2. L'évolution des langages8
1.3. Les étapes du développement9
1.4. Les recommandations19
2. Les outils de développement
20
2.1. Sous Windows20
2.2. Sous Linux22
2.3. Sous MacOS26
3. La structure et les éléments du langage
28
3.1. Structure d'un programme C28
3.2. Notions sur les variables30
3.3. Notions sur les constantes36
3.4. Notions sur les instructions37
3.5. Les commentaires39
3.6. Les éléments du langage39
3.7. Les directives de compilation41
Résumé43
Questions de révisions44
Exercices45
Solutions45
Les types simples47
1. L'affichage et la saisie des variables
47
1.1. La procédure d'affichage printf()47
1.2. La procédure de saisie scanf()50
1.3. Les codages des types de données52
2. Le type entier
52
2.1. Définition52
2.2. Les différents types entiers52
2.3. Représentation binaire d'un entier54
2.4. Incidences sur la programmation56
2.5. Déclaration des variables entières57
2.6. Format de saisie et d'affichage58
2.7. Syntaxe des constantes entières61
2.8. Les opérateurs62
2.9. Exemple64
2.10. Les fonctions sur les entiers65
3. Le type réel
66
3.1. Définition66
3.2. Les différents types réels66
3.3. Représentation binaire d'un réel66
3.4. Incidences sur la programmation68
3.5. Déclaration des variables réelles68
3.6. Format de saisie et d'affichage68
3.7. Syntaxe des constantes réelles69
3.8. Les opérateurs69
3.9. Les fonctions sur les réels70
3.10. Exemples71
4. Le type caractère
73
4.1. Définition73
4.2. Les différents types caractères73
4.3. Forme binaire d'un caractère73
4.4. Les tables de codage des caractères74
4.5. Incidences du codage sur la programmation80
4.6. Déclaration des variables caractères81
4.7. Format de saisie et d'affichage81
4.8. Syntaxe des constantes caractères81
4.9. Les opérateurs82
4.10. Exemple83
4.11. Les fonctions sur les caractères83
4.12. Le caractère de validation de saisie85
4.13. Fonctions annexes d'Entrée/Sortie88
4.14. Incidence des signed et unsigned char88
5. Le type booléen
89
5.1. Définition89
5.2. Les types booléens89
5.3. Le type entier comme support89
5.4. Les opérateurs de comparaison90
5.5. Les opérateurs booléens et leur table de vérité90
5.6. Les traitements logiques91
5.7. Les traitements binaires94
5.8. Le type _Bool ou bool97
6. Le type énumération
98
6.1. Qu'est-ce que le type énumération ?98
6.2. Déclaration98
6.3. Exemple99
Résumé100
Questions de révisions100
Exercices103
Solutions105
Les instructions113
1. Les instructions simples
113
1.1. L'affectation113
1.2. L'appel de procédure117
1.3. L'Instruction goto121
2. Les instructions composées
122
2.1. La séquence d'instructions122
2.2. Les instructions conditionnelles123
2.3. Les instructions répétitives130
2.4. Les instructions de contrôle146
Résumé147
Questions de révisions148
Exercices149
Solutions153
Les types structurés179
1. Les tableaux
179
1.1. Présentation179
1.2. Déclaration ;180
1.3. Représentation mémoire180
1.4. Accès à un élément du tableau181
1.5. Format de saisie et d'affichage182
1.6. Types de tableaux182
1.7. Traitement d'un tableau183
1.8. Tableau et pointeur194
2. Les chaînes de caractères
196
2.1. Présentation196
2.2. Le type chaîne de caractères196
2.3. Représentation mémoire :196
2.4. Déclaration des variables197
2.5. Format de saisie et d'affichage197
2.6. Les constantes198
2.7. Les autres fonctions d'Entrée/Sortie198
2.8. Les fonctions de manipulation de chaînes200
2.9. Les méthodes de gestion de chaînes203
2.10. Tableau de chaînes207
3. Les structures
210
3.1. Présentation210
3.2. Déclaration de structures210
3.3. Déclaration de type211
3.4. Représentation mémoire211
3.5. Format de saisie et d'affichage212
3.6. Accès à un élément de la structure212
3.7. Traitement d'une structure212
3.8. Champs binaires214
3.9. Tableau de structures216
3.10. Structures imbriquées218
3.11. La définition de type par typedef219
4. Les unions
221
4.1. Présentation221
4.2. Déclaration d'une union222
4.3. Représentation mémoire222
4.4. Exemple222
5. Les fichiers
224
5.1. Rôle d'un fichier224
5.2. Principe d'utilisation224
5.3. Nature des fichiers225
5.4. Méthodes d'accès227
5.5. Déclaration d'un fichier228
5.6. Relation entre une variable fichier et le fichier sur disque229
5.7. Les fichiers textes230
5.8. Les fichiers binaires235
6. Les nombres complexes
240
6.1. Présentation240
6.2. Déclaration des variables complexes242
6.3. Format de saisie et d'affichage243
6.4. Affectation des parties réelles et imaginaire244
6.5. Syntaxe des constantes244
6.6. Les opérateurs arithmétiques246
6.7. Les fonctions247
Résumé250
Questions de révisions250
Exercices253
Solutions258
La programmation structurée283
1. Les procédures et les fonctions
283
1.1. Présentation283
1.2. Syntaxe284
1.3. Création d'une procédure285
1.4. Déclaration préliminaire287
1.5. Contraintes syntaxiques289
1.6. Passage des paramètres291
1.7. Création d'une fonction295
1.8. Retour d'une fonction296
1.9. Paramètres évolués298
1.10. Variable locale, globale, statique305
1.11. Le mot-clef inline312
1.12. Le mot-clef_Noreturn313
1.13. Classes des variables et de fonctions314
2. La récursivité
316
2.1. Principe316
2.2. Description316
2.3. Exemple318
3. La généricité
319
3.1. Principe319
3.2. Description320
3.3. Exemples320
4. La compilation séparée et les librairies
321
4.1. Compilation séparée321
5. Le préprocesseur C
329
5.1. Qu'est-ce qu'une directive de compilation ?329
5.2. Les directives de définition329
5.3. La directive #include332
5.4. Les directives conditionnelles332
5.5. Les directives dédiées au compilateur335
5.6. Les options du compilateur337
Résumé339
Questions de révisions340
Exercices341
Solutions345
La gestion dynamique de la mémoire387
1. Les pointeurs
387
1.1. Présentation387
1.2. Déclaration388
1.3. Format d'affichage388
1.4. Utilisation d'un pointeur388
1.5. Allocation dynamique de la mémoire389
1.6. Les opérateurs392
1.7. Gestion de blocs de mémoire393
1.8. Tableau ou pointeur ?394
1.9. Pointeur sur void397
1.10. Pointeur de fonction397
1.11. Tableau de pointeurs399
1.12. Pointeur de pointeur401
2. Les tableaux dynamiques
403
2.1. Taille limite des tableaux statiques403
2.2. Allocation dynamique d'un tableau405
2.3. Allocation dynamique case par case407
3. Les listes chaînées
409
3.1. Tableaux ou liste chaînées ?409
3.2. Principe de la liste411
3.3. Gestion de la liste412
3.4. L'opérateur415
3.5. Exemple415
Résumé417
Questions de révisions418
Exercices419
Solutions421
La programmation système443
1. L'interface avec le système d'exploitation
443
1.1. Présentation443
1.2. Arguments de la ligne de commande443
1.3. Gestion des erreurs444
1.4. Exécution d'une commande UNIX449
1.5. Les variables d'environnement451
2. La programmation des signaux
455
2.1. Notions sur les signaux455
2.2. Description des fonctions456
2.3. Exemple458
3. La programmation des processus
461
3.1. Notions sur les processus461
3.2. Description des fonctions461
3.3. Exemple462
4. La date et l'heure du système
465
4.1. Représentation465
4.2. La structure tm465
4.3. Description des fonctions466
4.4. Exemple469
5. La gestion des fichiers et des répertoires
470
5.1. Le système de fichiers470
5.2. Description des fonctions470
5.3. Exemple474
6. La fonction aléatoire
478
6.1. Principe478
6.2. Description des fonctions478
6.3. Exemple479
Résumé480
Questions de révisions480
Exercices481
Solutions481
Index485