COURS DE LANGAGE C 1. Présentation • 1.1 Historique • 1.2 Un premier programme
COURS DE LANGAGE C 1. Présentation • 1.1 Historique • 1.2 Un premier programme • 1.3 Compilation et exécution du programme • 1.4 Exercices 2. Les variables • 2.1 Variables et types fondamentaux • 2.2 Opérateurs • 2.3 Saisir et afficher des données • 2.4 Un programme simple • 2.5 Exercices 3. Branchements conditionnels • 3.1 if... • 3.2 if... else... • 3.3 switch... • 3.4 Un opérateur très particulier : ?: • 3.5 Exercices 4. Les itérations • 4.1 while... • 4.2 for... • 4.3 do... while... • 4.4 break et continue • 4.5 Comment faire n fois quelque chose • 4.6 Les pièges infernaux des boucles • 4.7 Exercices 5. Les fonctions • 5.1 Qu'est-ce qu'une fonction ? • 5.2 Prototype • 5.3 Définition • 5.4 Visibilité des variables dans un programme • 5.5 Quelques exemples de fonctions • 5.6 Déclaration • 5.7 Comprendre le passage par valeur • 5.8 Comprendre la notion de valeur retournée • 5.9 Erreurs courantes • 5.10 Exercices 6. Portée des données au sein d'un programme 7. Les tableaux • 7.1 Déclaration et initialisation • 7.2 Affectation • 7.3 Les débordements • 7.4 Passage en argument de fonctions ABDELKADER KERKOUR PAGE 1 SUR 37 COURS DE LANGAGE C • 7.5 Exercices 8. Chaînes de caractères • 8.1 Définition • 8.2 Fonctions de manipulation de chaînes • 8.3 Exercices 9. Les pointeurs • 9.1 Définition • 9.2 Déclaration • 9.3 Les opérateurs & et * • 9.4 Manipulation de pointeurs • 9.5 Pointeurs, tableaux et chaînes littérales • 9.6 Pointeurs génériques • 9.7 Une utilisation des pointeurs : le passage par adresse • 9.8 Utilisation avancée • 9.9 Exercices 10. Passer des arguments à un programme • 10.1 Convertir les arguments récupérés • 10.2 Exercices 11. Les fonction d'entrée/sortie • 11.1 Les fonctions d'E/S 12. Types de données composés et type dérivés • 12.1 Structures • 12.2 Les unions • 12.3 Les énumérations • 12.4 typedef • 12.5 Exercices 13. Les fonctions de manipulation de fichiers • 13.1 Ouverture et fermeture d'un fichier • 13.2 Lecture • 13.3 Écriture • 13.4 Exercices 14. Le préprocesseur 15. Allocations dynamiques • 15.1 Exercices ABDELKADER KERKOUR PAGE 2 SUR 37 COURS DE LANGAGE C 1. Présentation Notions : langage interprété vs. langage compilé, gcc, -Wall, a.out, shell. 1.1 Historique Le langage C a été créé par Brian Kernighan et Dennis Ritchie au début des années 70 afin d'eviter autant que possible l'utilisation de l'assembleur dans l'écriture du système UNIX. L'avantage du C sur l'assembleur est qu'il permet aux programmes d'être plus concis, plus simples à écrire et qu'ils sont facilement portables sur d'autres architectures. C est un langage : • qui permet de tout faire, • qui permet de créer des exécutables très rapides (compilé), • qui possède peu d'instructions. 1.2 Un premier programme 1 /* 2 * Mon premier programme C. 3 */ 4 #include<stdio.h> 5 int main() 6 { 7 printf("hello world\n"); 8 return 0; 9 } Points importants à noter : [1, 2, 3] Commentaire sur plusieurs lignes. [4] On indique un fichier #include pour pouvoir utiliser la fonction printf (fonction de la librairie stdio). [5] Fonction principale, point d'entrée du programme. [6] Accolade ouvrante, débute le code de la fonction. [7] La fonction printf permet d'afficher un message à l'écran. Les guillemets délimitent la chaîne de caractère. Le caractère \n signifie un saut de ligne suivi d'un retour chariot. Le point-virgule à la fin de chaque phrase est indispensable. [8] Le programme renvoie la valeur 0 au shell appelant à la fin de son exécution. [9] Accolade fermante, fin de bloc de la fonction principale. 1.3 Compilation et exécution du programme Pour compiler et exécuter ce programme sous UNIX, il faut d'abord le copier dans un fichier se terminant par l'extension .c à l'aide d'un éditeur de texte (vi ou emacs). Appelons ce fichier "intro.c". On le compile sous Linux avec gcc (sous d'autre UNIX, le compilateur s'appelle le plus souvent cc) : $ gcc -o intro intro.c Cela génère un fichier exécutable qui s'appelle "intro". Pour le lancer : $ ./intro hello world ABDELKADER KERKOUR PAGE 3 SUR 37 COURS DE LANGAGE C L'utilisation de l'option -Wall permet de s'assurer que le code est syntaxiquement impeccable (tolérance du compilateur gcc) : $ gcc -Wall -o intro intro.c 1.4 Exercices 1. "intro.c" : recopiez le programme précédent, compilez-le et lancez le. Ensuite, modifiez le afin qu'il produise le résultat suivant : 2. $ ./intro 3. hello 4. world 5. Modifiez la valeur retournée par la fonction main et une fois le programme compilé et exécuté, testez la commande shell suivante : echo $?. ABDELKADER KERKOUR PAGE 4 SUR 37 COURS DE LANGAGE C 2. Les variables 2.1 Variables et types fondamentaux Notions : entiers (char, int, short, long), flottants (float, double), nombres signés et non- signés (signed, unsigned), constantes (const), affectation, conversion, débordement. Déclarer une variable pour pouvoir l'utiliser Une variable est un contenant qui stocke une valeur, comme un nombre. Une variable peut donc être vue comme une boite. En C, toute variable doit être déclarée avant d'être utilisée. Un nom de variable doit commencer par une lettre ou bien par le caractère "_". La suite peut être composée de chiffres, de lettres ou de "_". Attention, le compilateur fait la distinction entre minuscules et majuscules. Pour déclarer une variable, on écrit son type suivit de son nom. Le type de la variable spécifie le format et la taille des données qui pourront être stockées grâce à elle en mémoire. Il est possible de déclarer plusieurs variables d'un même type sur la même ligne en les séparant par des virgules. Exemple de déclarations de variable : int age; float prix, taux; long numero_secu; Une variable doit toujours être déclarée à l'intérieur d'une fonction (exceptées les variables globales, voir le chapitre 6) et avant toute instruction. La fonction MAIN ne fait pas exception à la règle : int main() { int a, b; float x = 5; b = 0; /* une premiere instruction */ /* interdiction de declarer une variable a partir de la ! */ return 0; } Différents types de données Il y a plusieurs types de base : • CHAR, qui correspond à une variable d'un octet, sert à représenter aussi bien des petits entiers que des caractères imprimables. Il est très correct d'écrire 'A' + 2 car 'A' est un entier. Attention, le jeu de caractères imprimables standard (caractères ASCII) est codé sur 7 bits. Il ne comprends pas les caractères accentués français (codage sur 8 bits). • SHORT INT pour stocker des petits entiers. • INT pour stocker des entiers. • LONG INT pour stocker des entiers plus grand. • FLOAT et DOUBLE pour stocker des nombres réels. Les entiers sont signés par défaut mais ils peuvent être non-signé grâce à la directive unsigned. Attention, sur certaines architectures, les char sont non-signés par défaut ! Il est possible de les signer avec la directive signed. ABDELKADER KERKOUR PAGE 5 SUR 37 COURS DE LANGAGE C La directive const permet d'empêcher la modification d'une variable donnée. Le contrôle se fait au moment de la compilation : const int i = 70; /* i ne pourra etre modifie */ const char *p; /* pointeur sur constante */ char * const p; /* pointeur constant */ Il n'y a pas de type "chaîne de caractères". Pour ce faire, on utilise les tableaux (ici des tableaux de caractères, voir au chapitre 8). Taille et format des données sur une architecture de type i586 : Type Octets Portée char 1 -128 à +127 short int 2 -32768 à +32767 int 4 -2 147 483 648 à +2 147 483 647 long int 8 -4294967296 à +4294967295 unsigned char 1 0 +255 unsigned short int 2 0 à +65535 unsigned int 4 0 à +4 294 967 295 unsigned long int 8 float 4 double 8 Exemple de débordement : #include<stdio.h> main() { short a=65535, b=1, c; unsigned short ua=65535, ub=1, uc; c = a+b; printf("%d\n", c); uc = ua+ub; printf("%d\n", uc); return 0; } Affecter une valeur à une variable On affecte une valeur à une variable avec l'opérateur d'affectation =. La syntaxe d'une affectation est : nom = expression; . On peut initialiser une variable en lui fournissant une valeur au moment de sa déclaration. Exemples : int a, b, c = 7; a = 34; b = (a + 21) * c; a = a + 1; /* cas particulier */ Attention, avant d'utiliser le contenu d'une variable, il faut qu'elle ait été initialisée, sinon, le résultat est imprévisible : int main() { int truc; printf("%d\n", truc); } Une affectation renvoie une valeur. Cela permet de réaliser des affectations combinées : ABDELKADER KERKOUR PAGE 6 SUR 37 COURS DE LANGAGE C int a, b; a = b = 10; /* l'expression b = 10 renvoie comme valeur 10 */ Conversion de valeurs et constantes littérales Si par exemple on additionne un int et un float, il y a une conversion uploads/Litterature/ cours-c.pdf
Documents similaires










-
38
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 07, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.1747MB