Chapitre 1 : Notions De Base En Langage C
1. Généralités
2.Les Tableaux
3. Les Opérateurs
4. Les Entrees-sorties Conversationnelles
5. Les Instructions De Contrôle
Chapitre 2 : Structures – Unions – Enumération
1. Définition De Types Composés avec typedef
2. Les Structures
3. Les Champs De Bits
4. Les Unions
5. Les énumérations
Chapitre 3 : Les Pointeurs
1. Adresse et valeur d’un objet
2. Notion de pointeur
3. Arithmétique des pointeurs
4. Pointeurs et constantes
5. Pointeurs et structures
Chapitre 4 : Les Chaînes De Caractères
1. Définition Et Déclaration Des Chaînes De Caractères En C
2. Saisie d’une chaîne de caractères fgets
3. Recopie d’une chaîne de caractères strcpy, strncpy
4. Concaténation de chaînes strcat, strncat
5. Comparaison de chaînes strcmp, strncmp
6. Longueur d’une chaîne strlen
7. Recherche d’une chaîne dans une autre strstr
8. Test de caractères isaplha,isalnum, islower, isupper
9. Recherche de caractères dans une chaîne strchr,strbrk
10. Extraction de chaîne strtok
11. Duplication de chaîne strdup
Chapitre 5 : Les Fonctions
1. Définition d’une Fonction
2. Exemple d’utilisation de fonctions
2.3 Fonction ayant 2 paramètres d’entrée et 2 paramètres de sortie
3. Durée de vie des variables
4. Les paramètres de la fonction main
5. Pointeur sur une fonction
6. Fonctions avec un nombre variable de paramètres
Chapitre 6 : Les Fichiers
1. La fonction fopen
2. La fonction fclose
3. La fonction fread
4. La fonction fwrite
Chapitre 7 : Allocation Dynamique
1. Allocation simple malloc
2. Allocation multiple realloc
Chapitre 8 : Listes Chaînées
Généralités
Le langage C conçu en 1972 par D. Richie et K. Thompson pour développer le système d’exploitation : UNIX. Un programme C est décrit par un fichier texte, appelé fichier source.
Le programme est ensuite traduit en langage machine grâce à un compilateur. La compilation se décompose en trois phases successives :
1 Le traitement par préprocesseur : transformations purement textuelles (remplacement de chaînes)
2 La compilation : traduction en instructions compréhensibles par le microprocesseur (assembleur)
3 Assemblage et liaison : assemblage des différents fichiers sources écrits et production d’un fichier dit exécutable Le compilateur le plus utilisé est le compilateur gcc, disponible gratuitement pour Linux et Windows notamment..
Un fichier source
Un programme C s’organise de la manière suivante: [directives au préprocesseur] [déclaration de variables globales] [fonctions secondaires] int main(void) { déclaration de variables locales instructions } Pour simplifier, la déclaration des variables locales à une fonction se fait après le début du module, c’est à dire après l’accolade ouverte, celle des variables globales s’effectue à l’extérieur du corps de la fonction. Nous reviendrons plus en détail sur ces distinctions et sur la façon de les traduire en C. Une instruction se termine par un « ; », les commentaires sont encadrés par « /* » et par « */ ». Le compilateur dissocie les minuscules des majuscules.
Déclarations
Les déclarations des objets manipulés par le programme permettent au compilateur de réserver un emplacement mémoire pour ces objets en leur affectant une adresse et une taille. Il y a deux genres d’objets: les objets constants et les variables. Le type des objets peut être prédéfini ou bien créé à l’aide du mot-clef typedef. La déclaration se fait de la façon suivante : type NomVar1; où NomVar1 est une variable qui sera placée dans la zone de données. Les types prédéfinis : char int float double short long unsigned..
Le type char : La plupart du temps une variable de type char est codée sur 1 octet (8 bits). Un caractère peut contenir n’importe quel élément du jeu de caractères de la machine utilisée. Pour les langues d’Europe occidentale elle repose sur le codage ASCII (codage sur 7 bits des différents caractères). De plus en plus le codage UNICODE se répend, il repose sur un codage 16 bits et permet le codage des alphabets non Latin.
Les Tableaux
Les tableaux à une dimension
La déclaration d’un tableau est la suivante type NomTab [ TAILMAX ]; type est le type des éléments composant le vecteur, NomTab est le nom qui désigne le tableau, TAILMAX est la taille de déclaration c’est-à-dire le nombre d’éléments maximum utilisables. Lors de la déclaration, le compilateur réserve la mémoire nécessaire pour le tableau c’est-à-dire qu’il réserve TAILMAX*sizeof(type) octets. TAILMAX doit obligatoirement être une expression constante de type entier c’est-à-dire explicite ou définie grâce à une directive de compilation #define. Par définition, en langage C, NomTab est l’adresse du premier élément du tableau, cette adresse est constante puisque c’est le compilateur qui lui a affecté une valeur lors de la déclaration du tableau. La valeur de cette adresse ne pourra en aucun cas être modifiée par le programme. NomTab[i] désigne l’élément d’indice i du tableau (ATTENTION les indices commencent à 0, par conséquent i pourra varier de 0 à TAILMAX-1). Il désigne le contenu du tableau à la position i+1 ; il s’agit donc d’une valeur. &NomTab[i] caractérise l’adresse de l’élément NomTab[i]. Nous reviendrons plus en détail sur les notions d’adresses ultérieurement.
Les tableaux à plusieurs dimensions
La déclaration d’un tableau à deux dimension est type NomTab [ LIGMAX ] [ COLMAX ]; type est le type des éléments composant le tableau, NomTab est le nom qui désigne le tableau, LIGMAX est la taille de déclaration de la longueur maximale des lignes, COLMAX est la taille de déclaration de la longueur maximale des colonnes. Lors de la déclaration, le compilateur réserve la mémoire nécessaire pour le tableau c’est-à-dire qu’il réserve LIGMAX*COLMAX*sizeof(type) octets. LIGMAX et COLMAX doivent obligatoirement être des expressions constantes de type entier c’est-à-dire explicites ou définies grâce à une directive de compilation #define. Par définition, en langage C, NomTab est l’adresse du tableau, cette adresse est constante puisque c’est le compilateur qui lui a affecté une valeur lors de la déclaration du tableau. La valeur de cette adresse ne pourra en aucun cas être modifiée par le programme.
Les Opérateurs
Opération d’affectation
En C, l’affectation est un opérateur à part entière. Elle est symbolisée par le signe =. Sa syntaxe est la suivante : variable = expression Le terme de gauche de l’affectation peut être une variable simple un élément de tableau mais pas une constante. Cette expression a pour effet d’évaluer expression et d’affecter la valeur obtenue à variable. De plus, cette expression possède une valeur, qui est celle de l’expression. Ainsi, l’expression i = 5 vaut 5. L’affectation effectue une conversion de type implicite : la valeur de l’expression (terme de droite) est convertie dans le type du terme de gauche. Par exemple, le programme suivant main() { int i, j = 2; float x = 2.5; i = j + x; x = x + i; printf(« \n %f \n »,x); } imprime pour x la valeur 6.5 (et non 7), car dans l’instruction i = j + x;, l’expression j + x a été convertie en entier.
Les opérateurs arithmétiques
Les opérateurs arithmétiques classiques sont l’opérateur unaire – (changement de signe) ainsi que les opérateurs binaires Ces opérateurs agissent de la façon attendue sur les entiers comme sur les flottants. Leurs seules spécificités sont les suivantes : • Contrairement à d’autres langages, le C ne dispose que de la notation / pour désigner à la fois la division entière et la division entre flottants. Si les deux opérandes sont de type entier, l’opérateur / produira une division entière (quotient de la division). Par contre, il délivrera une valeur flottante dès que l’un des opérandes est un flottant..
Les opérateurs relationnels
> strictement supérieur >= supérieur ou égal < strictement inférieur <= inférieur ou égal == égal != différent Leur syntaxe est expression-1 op expression-2 Les deux expressions sont évaluées puis comparées. La valeur rendue est de type int (il n’y a pas de type booléen en C); elle vaut 1 si la condition est vraie, et 0 sinon. Attention à ne pas confondre l’opérateur de test d’égalité == avec l’opérateur d’affection =. Ainsi, le programme ci dessous imprime à l’écran a et b sont egaux ! main() { int a = 0; int b = 1; if (a = b) // L’ERREUR EST ICI printf(« \n a et b sont egaux \n »); else printf(« \n a et b sont differents \n »); }
…..
Langage C (536 KO) (Cours PDF)