Chapitre 1. Qu’est-ce qu’un ordinateur?
1.1 Exemples d’applications de l’ informatique
1.2 Codage des données
1.3 Fonctionnement d’un ordinateur
1.3.1 Système d’exploitation
1.3.2 Processeur
1.3.3 Mémoire centrale
1.3.4 Périphériques
Chapitre 2. Premiers programmes
2.1 Qu’est-ce qu’un programme?
2.2 Afficher un mot
2.3 Lire un nombre
2.4 Effectuer un calcul et mémoriser le résultat
Exercices
Corrigés
Chapitre 3. Types de données
3.1 Variables et opérations
3.2 Type entierint
3.3 Les types réelsfloatetdouble
3.4 Le typechar
3.5 Les typesunsigned
3.6 Affectations et conversions
3.7 Les constantes et le #define
3.8 Définir ses propres types
Exercices
Corrigés
Chapitre 4. Entrées-sorties :stdio.h
4.1 Qu’est-ce qu’une bibliothèque d’entrées-sorties?
4.2 L’affichage de données sous forme de texte
4.2.1 Afficher des caractères
4.2.2 Afficher d’autres données
4.3 Lecture au clavier
Exercices
Corrigés
Chapitre 5. Exécution conditionnelle
5.1 Qu’est-ce l’exécution conditionnelle?
5.2 Conditionsi-alors
5.3 Conditionsi-alors-sinon
5.4 Notions de calcul booléen
5.4.1 Expressions de base
5.4.2 Opérations booléennes
5.5 Leswitch
Exercices
Corrigés
Chapitre 6. Structuration d’un programme C
6.1 Qu’est-ce qu’un sous-programme?
6.2 Exemple de fonctionC
6.3 Exemple de structuration d’un programme
6.4 Forme générale d’une fonctionC
6.4.1 Prototype
6.4.2 Déclaration et définition
6.4.3 Variables locales
6.5 Passage de paramètres par valeur
Exercices
Corrigés
Chapitre 7. Structures
7.1 Déclaration d’une structure
7.2 Utilisation d’une structure
Exercices
Corrigés
Chapitre 8. Itération
8.1 Bouclewhile
8.2 Bouclefor
Exercices
Corrigés
PARTIE2
STRUCTURES SÉQUENTIELLES
Chapitre 9. Tableaux
9.1 Déclaration d’un tableau
9.2 Accès aux éléments
9.3 Nombre d’éléments fixé
9.4 Nombre d’éléments variable borné
9.5 Initialisation lors de la déclaration
Exercices
Corrigés
Chapitre 10. Fichiers texte
10.1 Qu’est-ce qu’un fichier texte?
10.2 Ouverture et fermeture d’un fichier texte
10.3 Lire et écrire des données formatées
10.3.1 Lire des données formatées
10.3.2 Écrire des données formatées
Exercices
Corrigés
Chapitre 11. Adresses, pointeurs et passage par adresse
11.1 Mémoire centrale et adresses
11.2 Variables de type pointeur
11.3 Passage de paramètre par valeur
11.4 Passage de paramètre par adresse
Exercices
Corrigés
Chapitre 12. Allocation dynamique
12.1 Gestion de la mémoire centrale
12.2 Allocation avec malloc
12.3 Allocation avec calloc
Exercices
Corrigés
Chapitre 13. Chaînes de caractères
13.1 Qu’est-ce qu’une chaîne de caractères ?
13.2 Opérations prédéfinies sur les chaînes
13.2.1 Fonctions de <stdio.h>
13.2.2 La bibliothèque <string.h>
Exercices
Corrigés
Chapitre 14. Fichiers binaires
14.1 Différence entre fichiers texte et binaire
14.2 Ouverture et fermeture d’un fichier binaire
14.3 Lecture dans un fichier binaire
14.4 Écriture dans un fichier binaire
14.5 Se positionner dans un fichier binaire
Exercices
Corrigés
Chapitre 15. Tableaux à double entrée
15.1 Tableaux de dimension 2
15.2 Allocation dynamique et libération d’un tableau de dimension 2
Exercices
Corrigés
PARTIE3
ALGORITHMES
Chapitre 16. Langage algorithmique et complexité
16.1 Pourquoi un autre langage?
16.2 Types
16.3 Entrées-sorties
16.3.1 Clavier et écran
16.3.2 Fichiers texte
16.4 Syntaxe
16.5 Fonctions et procédures
16.5.1 Fonctions
16.5.2 Procédures
16.6 Enregistrements
16.7 Pointeurs, adresses et allocation
16.8 Notion de complexité d’un algorithme
16.8.1 Définition intuitive de la complexité
16.8.2 Notion de grand O
Exercices
Corrigés
Chapitre 17. Algorithmes de tri quadratiques
17.1 Qu’est-ce qu’un tri ?
17.2 Tri par sélection
17.2.1 Principe du tri par sélection
17.2.2 Algorithme de tri par sélection
17.2.3 Estimation du nombre d’opérations
17.3 Tri par insertion
17.3.1 Principe du tri par insertion
17.3.2 Algorithme de tri par insertion
17.3.3 Estimation du nombre d’opérations
17.4 Tri par bulles
17.4.1 Principe du tri par bulles
17.4.2 Algorithme du tri par bulles
17.4.3 Estimation du nombre d’opérations
Chapitre 18. Le tri rapide (quicksort)
18.1 Partitionnement
18.2 L’algorithme de tri rapide
18.3 Comparaison de temps de calcul
Exercices
Corrigés
PARTIE4
STRUCTURES DE DONNÉES
Chapitre 19. Listes chaînées
19.1 Qu’est-ce qu’une liste chaînée ?
19.2 Déclarer une liste chaînée
19.3 Insertion en tête de liste
19.4 Construction d’une liste chaînée
19.5 Parcours de liste
19.6 Insertion en queue de liste
19.7 Libération de mémoire
Exercices
Corrigés
Chapitre 20. Piles
20.1 Qu’est-ce qu’une pile?
20.2 Implémentation sous forme de tableau
20.2.1 Types
20.2.2 Créer une pile vide
20.2.3 Pile vide, pile pleine
20.2.4 Accéder au sommet de la pile
20.2.5 Ajouter un élément au sommet
20.2.6 Supprimer un élément
20.2.7 Vider et détruire
20.3 Implémentation sous forme de liste chaînée
20.3.1 Types
20.3.2 Créer une pile vide
20.3.3 Pile vide, pile pleine
20.3.4 Accéder au sommet de la pile
20.3.5 Ajouter un élément au sommet
20.3.6 Supprimer un élément
20.3.7 Vider et détruire
20.4 Comparaison entre tableaux et listes chaînées
Exercices
Corrigés
Chapitre 21. Files
21.1 Qu’est-ce qu’une file ?
21.2 Gestion naïve par tableaux
21.3 Gestion circulaire par tableaux
21.3.1 Enfiler et défiler
21.3.2 Autres primitives
21.4 Gestion par listes chaînées
21.4.1 Structures de données
21.4.2 Primitives
Exercices
Corrigés
Chapitre 22. Récursivité
22.1 Qu’est-ce que la récursivité?
22.2 Comment programmer une fonction récursive?
22.2.1 Résolution récursive d’un problème
22.2.2 Structure d’une fonction récursive
22.3 Pile d’appels
Exercices
Corrigés
Chapitre 23. Arbres binaires
23.1 Qu’est-ce qu’un arbre binaire?
23.2 Parcours d’arbres binaires
23.2.1 Parcours préfixé
23.2.2 Parcours postfixé
23.2.3 Parcours infixé
23.3 Libération de mémoire
Exercices
Corrigés
Chapitre 24. Graphes
24.1 Définition mathématique d’un graphe
24.2 Chemins dans un graphe
24.3 Représentation par matrices d’adjacence
Exercices
Corrigés
Chapitre 25. Parcours de graphes
25.1 Parcours en profondeur récursif
25.2 Parcours en largeur
Exercices
Corrigés
Chapitre 26. Listes d’adjacence
26.1 Représentation par listes d’adjacence
Exercices
Corrigés
Annexes
Annexe A. Notions sur la compilation
A.1 Qu’est-ce qu’un compilateur CANSI?
A.2 Compiler son premier programme
A.2.1 Créer un répertoire
A.2.2 Lancer un éditeur de texte
A.2.3 Compiler et exécuter le programme
Annexe B. Programmation multifichiers
B.1 Mettre du code dans plusieurs fichiers
B.2 Compiler un projet multifichiers
B.2.1 Sans makefile
B.2.2 Avec makefile
Annexe C. Compléments sur le langage C
C.1 Énumérations
C.2 Unions
C.3 Variables globales
C.4 Do…while
C.5 i++et++i
C.6 Le générateur aléatoire : fonction rand
C.7 breaket continue
C.8 Macros
C.9 atoi, sprinfetsscanf
C.10 Arguments d’un programme
C.11 fgetcetfputc
C.11.1 Lire caractère par caractère
C.11.2 Écrire caractère par caractère
C.12 Arithmétique de pointeurs
Exercices
Corrigés
Index
Partie 1 Bases du langage C
1.1 EXEMPLES D’APPLICATIONS DE L’INFORMATIQUE
Voici quelques exemples d’utilisation des ordinateurs :
• Bureautique L’ordinateur emmagasine des données saisies par une secrétaire ou autre (textes, chiffres, fichiers clients, etc.) ou des données issues d’archives, et les met en forme pour permettre une compréhension synthétique, un affichage, ou une communication de ces données.
• Jeux vidéo L’ordinateur combine des données entrées par le concepteur du jeu (données sur l’univers) avec les événements créés par l’utilisateur du jeu (clics de souris, etc…) pour générer des images, du son, etc.
• Prévision météorologique À partir de la donnée des relevés de toutes les stations météo d’une zone géographique, l’ordinateur calcule une situation future et génère des cartes de températures et de pressions atmosphériques.
• Applications multimédia sur Internet L’ordinateur télécharge des données stockées sur un serveur distant et affiche ces données sur l’ordinateur de l’utilisateur.Éventuellement, des actions de l’utilisateur peuvent influer sur les données affichées (on parle alors d’applications interactives).
Dans tous ces exemples, l’ordinateur traite des données, et produit un résultat, soit communiqué à l’utilisateur (son, images, texte), soit affiché sur un écran, ou stocké sur un disque, ou autre.
1.2 CODAGE DES DONNÉES
Les données informatiques sont toujours, en fin de compte, codées en binaire, c’est-à-dire qu’elles sont représentées par des suites de 0 et de 1. En effet, les données binaires sont plus faciles à mémoriser sur des supports physiques (bandes magnétiques, disques, etc.).
Par exemple, si l’on veut stocker un nombre entier sur le disque dur d’un ordinateur, on code généralement ce nombre en base 2 au lieu de le coder en base 10 comme nous y sommes naturellement habitués.
1.3 FONCTIONNEMENT D’UN ORDINATEUR
1.3.1 Système d’exploitation
Un programme informatique doit recevoir des données pour les traiter, et produire d’autres données. Pour que le programme puisse fonctionner, il faut du matériel (composants électroniques), et il faut une couche logicielle intermédiaire avec le matériel, appelée système d’exploitation. Le système assure la communication entre le programme informatique et le matériel, et permet au programme d’agir sur le matériel.
1.3.2 Processeur
Le processeur effectue des opérations (par exemple des opérations arithmétiques comme des additions ou des multiplications). Ces opérations sont câblées dans le processeur, c’est-à-dire qu’elles sont effectuées par des circuits électroniques pour être efficaces. Avec le temps, de plus en plus d’opérations complexes sont câblées au niveau du processeur, ce qui augmente l’efficacité. La vitesse d’un processeur, c’est-à-dire en gros le nombre d’opérations par seconde, appelée vitesse d’horloge, est mesurée en hertz (Hz), kilohertz (1kHz=1000Hz), megahertz 1MHz=106Hz,etgigahertz (1GHz=109Hz). Sur les architectures récentes, la puce contient plusieurs cores, chaque core étant l’équivalent d’un processeur et les cores communiquant entre eux très rapidement par des bus de données. Pour la personne qui programme en C,la configuration et la structure de la puce est transparente, c’est-à-dire que l’on n’a pas à s’en préoccuper (sauf pour l’optimisation en programmation très avancée).
1.3.3 Mémoire centrale
Au cours du déroulement du programme, celui-ci utilise des données, soit les données fournies en entrée, soit des données intermédiaires que le programme utilise pour fonctionner. Ces données sont stockées dans des variables. Physiquement, les variables sont des données binaires dans la mémoire centrale(appelée aussi mémoire RAM). La mémoire centrale communique rapidement avec le processeur. Lorsque le processeur effectue un calcul, le programmeur peut indiquer que le résultat de ce calcul doit être mémorisé dans une variable (en RAM). Le processeur pourra accéder plus tard au contenu de cette variable pour effectuer d’autres calculs ou produire un résultat en sortie. La quantité de mémoire RAM est mesurée en octets (ou en mégaoctets ou gigaoctets). Les données en mémoire centrale ne sont conservées que pendant le déroulement du programme, et disparaissent lorsque le programme se termine (notamment lorsque l’on éteint l’ordinateur).
1.3.4 Périphériques
Le programme reçoit des données des périphériques en entrée, et communique ses résultats en sortie à des périphériques. Une liste (non exhaustive) de périphériques usuels est :
• le clavier qui permet à l’utilisateur de saisir du texte ;
• la souris qui permet à l’utilisateur de sélectionner, d’activer ou de créer à la main des objets graphiques ;
• l’écran qui permet aux programmes d’afficher des données sous forme graphique ;
• l’imprimante qui permet de sortir des données sur support papier ;
• le disque dur ou la clef USB qui permettent de stocker des données de manière permanente. Les données sauvegardées sur un tel disque sont préservées, y compris après terminaison du programme ou lorsque l’ordinateur est éteint, contrairement aux données stockées en mémoire centrale qui disparaissent lorsque le programme se termine. Les périphériques d’entrée (tels que le clavier et la souris) transmettent les données
dans un seul sens, du périphérique vers la mémoire centrale. Les périphériques de sortie (tels que l’écran ou l’imprimante) reçoivent des données dans un seul sens, de la mémoire centrale (ou de la mémoire vidéo) vers le périphérique. Les périphériques d’entrée-sortie (tels que le disque dur, le port USB, ou la carte réseau) permettent la communication dans les deux sens entre la mémoire centrale et le périphérique.
![](https://clicours.com/img/tab.gif)
Initiation a l’algorithmique et la programmation en C (2046 KO) (Cours PDF)
![Initiation a l'algorithmique et la programmation en c](https://clicours.com/img/telecha.png)
Trop cool