Introduction au langage C 1ère année Génie Informatique Dr Daouda Traoré Université de Ségou email: daoudatr2008@gmail.com
Introduction au langage C Objectifs: L’objectif est d’initier les étudiants à la programmation à travers l’utilisation du langage C
Introduction au langage C Exemple de programme en C: #include <stdio.h> int main() { int tab[5]; int i; for(i=0; i <5; i++) { tab[i] = (i+1); } for(i=1; i <5; i++) { tab[i] = tab[i]+tab[i-1]; for(i=0; i < 5; i++) { printf("tab[%d] = %d\n" , i, tab[i]); return 0;
Introduction au langage C Etapes de création d’un programme C Edition d’un fichier source (avec comme extension .c) à l’aide d’un éditeur de programme. Cette phase s’appelle édition de programme. Traduire le programme source (proc.c) en langage machine (binaire) qui aura pour extension .o (proc.o). Cette s’appelle compilation Liaison des fichiers objets (.o) qui peuvent être des fichiers de la bibliothèque standard, des fichiers utilisateurs implémentant des fonctions utilisées dans proc.o. Cette pahase s’appelle édition de liens. Création de l’exécutable du programme. C’est l’exécutable permet de lancer le programme.
Notion de type Définition Utilité des types Un type est un ensemble nommé de valeurs, muni d’opérations sur ces valeurs. Exemple : Type Entier (ensemble de tous les entiers relatifs); les opérations sur le type entier sont : addition, soustraction, multiplication, division, comparaison,…. Type Personne (ensemble de toutes les personnes). Les opérations peuvent être : sexe, âge, taille, nom, prénom, … Utilité des types Vérification du programme On s’assure dès la compilation que les bonnes opérations sont exécutées sur les bons types Contre-exemple : application de la fonction racine carrée sur une personne Lisibilité du programme : le type de toutes les variables est connu Une variable est un nom associé à un contenu stocké en mémoire. Représentation des valeurs en machine Le type indique la place en mémoire à réserver pour la variable La mémoire centrale est un ensemble de « positions binaires » nommées bits. Les bits sont regroupés en octets (8 bits), et chaque octet est repéré par ce qu’on nomme son adresse.
Notion de type Signification 77 Add M Mauve Entier positif Un type permet d’attribuer une signification à un code binaire 01001101 Il n’est pas possible d’attribuer une signification à une information binaire tant que l’on ne connaît pas la manière dont elle a été codée. Par exemple pour additionner deux informations, il faudra savoir quel codage a été employé afin de pouvoir mettre en œuvre les « bonnes » instructions (en langage machine) 77 Entier positif M Caractère en ASCII Mauve Couleur parmi 256 Add Instruction machine
Les types primitifs en C Les types primitifs sont définis dans le langage, ils correspondent aux informations élémentaires (entier, caractère, réel, boolean…) Les autres types sont construits par le programmeur en fonction des besoins (Complexe, Personne, Voiture, …) ou fournit par le langage (bibliothèque) Les types primitifs en C se répartissent en trois grandes catégories en fonction de la nature des informations qu’ils permettent de représenter : Nombres entiers (mot clé int) Nombres flottants (mot clé float ou double) Caractère (mot clé char)
Les types entiers en C Le mot clé int représente les nombres entiers relatifs. Un bit est réservé pour représenter le signe du nombre (0 pour un nombre positif et 1 pour un nombre négatif) Les différents types d’entiers short int (short) int long int (long) unsigned short int (unsigned short) unsigned int unsigned long int (long) C prévoit que, sur une machine donnée, on puisse trouver jusqu’à trois « tailles » différentes d’entiers. Chaque taille impose naturellement ses limites. Toutefois, ces dernières dépendent, non seulement du mot clé considéré, mais également de la machine utilisée : tous les int n’ont pas la même taille sur toutes les machines!
Les types flottant en C Le mot clé float ou double représente de manière approchée, une partie des nombres réels. Les différents types flottant float double Long double
Les types caractères en C Le mot clé char représente les caractères en C. En général le caractère est codé en mémoire sur un octet L’ensemble des caractères représentables, dépend de l’environnement de programmation utilisé (la machine ou le compilateur utilisé) On dispose des lettres majuscules et minuscules, des chiffres, des signes de ponctuation et des différents séparateurs.
Les constantes Le mot constantes sont des données dont la valeur ne peut être modifiée. Elles sont généralement définies en début de programme. La valeur que la constante contient peut être de tout type, suivant ce que le langage autorise. Exemple en C : Des constantes entières : 48, -25 Des constantes float : 12.43, -0.38 Des constantes doube : 4.25E+4 Les constantes char : ‘a’, ‘r’, ‘+’, ‘$’ Le caractère de saut de ligne \n Le caractère de tabulation \t Quote ou apostrophe Antislash en anglais back-slash, en françait barre inverse ou contre slash
Déclaration d’une variable Pour déclarer une variable en langage C, il faut d’abord préciser le type de la variable, suivi du nom de la variable puis d’un point virgule. La syntaxe d’une déclaration de variable est la suivante : type_variable Nom_variable; Il est possible de déclarer une variable en lui donnant une valeur initiale. type_variale Nom_variable = Valeur_Initiale; Il est possible de déclarer plusieurs variables sur une même ligne type_variale variable1, variable2, ….variableN; Quote ou apostrophe Antislash en anglais back-slash, en françait barre inverse ou contre slash
Initialisation et constantes La directive #define permet de donner une valeur à un symbole : #define a 10 Il est possible d’initialiser une variable lors de sa déclaration comme : int a = 10; Il est possible de déclarer que la valeur d’une variable ne doit pas changer lors de l’exécution du programme. Par exemple : const int x = 20;
Les instructions Définition Instruction : c’est l’élément clé du programme informatique car elle permet de spécifier au processeur l’action à effectuer. Une instruction est généralement composée de deux éléments : L’opérateur : l’action à effectuer par le processeur Le ou les opérandes : une ou plusieurs données sur lesquelles l’opération sera effectuée. Les instructions sont généralement séparées les unes des autres par des séparateurs dépendant du langage de programmation utilisé. La plus part du temps, il s’agit d’un point-virgule. En langage C, une instruction sera notée comme suit : instruction; Il est possible de regrouper plusieurs instructions, dans ce que l’on appelle bloc. Il s’ agit d’un ensemble d’instructions (suivies respectivement par des séparateurs) et la plus part du temps comprises entre les accolades { et }. Un programme est constitué d’une suite d’instructions que la machine doit exécuter. Celle-ci exécute les instructions au fur et à mesure qu’elle lit le fichier (donc de haut en bas) jusqu’à ce qu’elle en rencontre une (appelée parfois instruction de branchement) qui lui indique de se rendre à un endroit précis du programme. Il s’agit donc d’une sorte de jeu de piste dans lequel la machine doit suivre le fil conducteur et exécute les instructions qu’elle rencontre jusqu’à ce qu’elle arrive à la fin du programme et que celui-ci s’arrête.
Les opérateurs Les opérateurs sont des symboles qui permettent de manipuler des variables, c’est-à-dire d’effectuer des opérations, de les évaluer, etc. On distingue généralement deux ou trois types d’opérateurs : Les opérateurs unaires : ce sont des opérateurs qui n’admettent qu’un seule opérande. Les opérateurs binaires : ce sont des opérateurs qui admettent deux opérandes. Les opérateurs ternaires : ce sont des opérateurs qui admettent trois opérandes.
Les opérateurs Les opérateurs de calcul permettent de modifier mathématiquement la valeur d’une variable. Ils sont : + (addition), -(soustraction), *(multiplication), /(division), = (affectation), % (modulo) Les opérateurs d’affectation permettent de simplifier des opérations telles qu’ajouter une valeur dans une variable et stocker le résultat dans la variable. Il sont : += (ajoute l’opérande de gauche à l’opérande de droite et stocke le résultat dans l’opérande de gauche), -=(soustrait l’opérande de droite à l’opérande de gauche et stocke le résultat dans l’opérande de gauche), *=(multiplie l’opérande de gauche par l’opérande de droite et stocke le résultat dans l’opérande de gauche), /=(ajoute l’opérande de gauche par l’opérande de droite et stocke le résultat dans l’opérande de gauche), %=(calcule le reste de la division entière de l’opérande de gauche par l’opérande de droite et stocke le résultat dans l’opérande de gauche
Les opérateurs Les opérateurs d’incrémentation permettent de facilement augmenter ou diminuer d’une unité d’une variable. Ils sont : + +(incrémentation, augmente d’une unité la variable, --(décrémentation, diminue d’une unité la variable) Les opérateurs de comparaison permettent d’effectuer des tests de comparaison entre deux valeurs. Il sont : != (différence), !== (non identité), < (infériorité stricte), <= (infériorité), >(supériorité stricte), >= (supériorité) Les opérateurs logiques (booléens) permettent de vérifier si plusieurs conditions sont vraies. Il sont : || (OU logique, vérifie qu’une des conditions est réalisée), && (ET logique, vérifie que toutes les conditions sont réalisées), !(NON logique, inverse l’état d’une variable booléenne).
Les opérateurs Les opérateurs bit-à-bit traitent leurs opérandes comme des données binaires, plutôt que comme des données décimales, hexadécimale ou octale. Ils sont : & (Et bit-à-bit), |(OU bit-à-bit), ^(OU bit-à-bit exclusif) .
Les expressions Définition Ordre d’évaluation d’une expression Une expression est constituée de littéraux, de variables et d’opérateurs, elle renvoie une valeur. Une expression a un type que l’on peut calculer par inférence des types de ses sous-expressions. Ordre d’évaluation d’une expression Une priorité est attribué à chaque opérateur L’opérateur de priorité la plus élevée dans une expression est évalué en premier En cas d’égalité de priorité on évalue de gauche à droite Les opérateurs binaires sont associatifs à gauche On peut « forcer » la priorité en parenthésant
Priorité des opérateurs De plus prioritaire au moins prioritaire !, -(unaire) *, /, % +, - <, >, <=, >= ==, != & ^ | && || =, +=, -=, /=, *=
Conversions implicites Conversion sans perte char->int -> long -> float -> double -> long double Exemple : int x = 5; float y = 6; le résultat x+y sera de type float Conversion avec perte char <- int <- long <- float <- double <- long double Exemple: float y = 6.0; int p = y+x //le résultat x+y sera converti en int