Introduction au langage C Objectif: acquérir les bases d un langage de programmation évolué Les éléments abordés seront: - Organisation d un programme - Les variables - Les opérations sur les variables - Les différentes primitives - La structure alternative
I) Généralités sur le langage C 1) Historique 2) La chaîne de production de programmes 3) Organisation d un programme 4) Etude du préprocesseur 5) Le programme principal
1) Historique du langage Langage de la «famille Algol», développé en 1970 par Dennis Ritchie Langage d usage général, utilisable sur toutes les plates-formes (petits, moyens, gros systèmes) Langage indissociable du système d exploitation UNIX Nombreuses versions et extensions
2) La chaîne de production essai.c essai.obj #include <stdio.h> int main(void ) { int i; i=1; } Édition Compilation erreurs Étude papier
La chaîne de production L éditeur crée un fichier texte qui contient les instructions du programme Le compilateur effectue une analyse lexicale, syntaxique, sémantique et génère un fichier objet Toute erreur de compilation doit être corrigée en modifiant le source
La chaîne de production Fichier objet Édition de Liens Exécutable Linker Essai.obj Essai.exe Librairie Librairie
La chaîne de production L édition des liens permet de construire l exécutable en y ajoutant les modules (ou sous-programmes nécessaires) Ces modules sont regroupés dans des librairies: Mathématiques, graphiques, entrées/sorties, Il peut se produire des erreurs si des modules ne sont pas trouvés
L exécution des programmes essai.exe Exécution Compilation link Erreurs? non fin oui Retour édition
3) Organisation d un programme Un programme écrit en C (ou tout autre langage) doit décrire précisément les données utilisées et les traitements sur ces données. La description des données: déclarations La description des traitements: instructions
Structure Le programme doit comporter les éléments suivants: Directives du préprocesseur Définitions des fonctions et procédures Programme principal
4) le préprocesseur Il s agit d un ensemble de directives de compilations: ce ne sont pas des instructions Ces directives permettent de : - définir des «constantes» (#define) - préciser des librairies utilisées (#include) - faire de la «compilation conditionnelle»
La directive #define Cette directive du préprocesseur indique au compilateur de remplacer toute occurrence d un symbole par une chaîne: #define PI 3.14159 #define borne 50 #define NULL 0 Attention: dans les noms des symboles, le langage est «case sensitive»!
La directive #include Cette directive du préprocesseur indique au compilateur que l on va utiliser telle ou telle librairie (une librairie est un ensemble de sousprogrammes: des composants logiciels).les définitions relatives aux librairies sont dans des fichiers d extension «.h» La syntaxe de cette directive est : #include <nomfichier.h>
Exemples de #include Entrées/sorties: #include <stdio.h> Mathématiques (sin, cos,..) : #include <math.h> Chaînes de caractères: #include <string.h> Graphiques: #include <graph.h>
5) le programme principal Le programme principal a pour nom «main» Il est composé : - d un en-tête : int main (void) - d un début de bloc: { - d instructions : ---- - d un return : return(0); - d une fin de bloc : }
Le squelette d un programme Il faut veiller à ne pas oublier ces éléments minimums: #include <stdio.h> préprocesseur int main(void) En tête p.p. { --- instructions --- return(0); }
II) Les variables 1) Les différents types de base 2) Déclaration des variables simples 3) La notion de tableau 4) Les opérateurs de base 5) Les entrées/sorties élémentaires
1) les différents types Une variable ou identificateur est défini par: -Un nom (attention: «case sensitive»), composé de lettres, de chiffres ou de _: x rayon max_eleves -Un type qui représente l encombrement de la variable: entier (int), réel (float), caractères (char)
Les entiers L entier «simple précision» ou int est codé sur 16 bits (de -2 15 à 2 15-1): 15-2345 235 L entier «long» ou long int est codé sur 32 bits (de -2 31 à 2 31-1): 123456l -2345 L entier «court» ou short est codé sur 8 bits (-128 à 127): 12-45! Attention! Le format peut varier en fonction des machines ou des compilateurs.
Les réels Le réel «simple précision» ou float est codé sur 4 octets: 24.5-14.2 1.5e-7 Le réel «double précision» ou double est codé sur 8 octets: 56.455-1.5e-78
Les caractères Un caractère est codé sur un octet : char a Z 2 & Il est possible de représenter en C des caractères spéciaux: \n : interligne (saut de ligne) \t : tabulation \f: saut de page (form feed) \ : quote \0: caractère «NULL» \bbb : caractère de code ASCII bbb en Octal
Les chaînes de caractères Une chaîne de caractères est une suite de caractères. Les chaînes sont mises entre guillemets: «chaine» «autre chaine» Contrairement à d autres langages, il n y a pas de type spécifique pour les chaînes
2) déclaration des variables Toutes les variables utilisées dans un programme doivent être déclarées: on précise le type et le nom de la variable. Une variable est dite «simple» si elle ne peut contenir qu un élément de son type La déclaration est de la forme: type nomvariable; le ; est un séparateur
Exemples de déclarations #include <stdio.h> int main(void) { int a,b; float c; double d, e; char f; a=1; return(0); } Déclarations instructions
3) la notion de tableaux Un tableau permet de représenter plusieurs variables d un même type sous un seul nom Chaque élément de tableau est accessible par l intermédiaire d un indice En langage C, l indice commence à zéro On déclare le nombre d éléments du tableau On peut définir des tableaux à deux dimensions (ligne, colonne)
Tableaux: exemple #include <stdio.h> int main (void) { } float t[3]; int matrice[2][3]; t[0]= 5.4; t[1]= -1.5; t[2]= 0; matrice[0][0]=5; return(0); Déclarations Affectation premier élément
4) les opérateurs élémentaires Les opérateurs de base sont: = : affectation + - * / : opérations arithmétiques % : reste de la division entière (opérandes entiers) Les opérateurs permettent de construire des expressions arithmétiques
Utilisation des opérateurs #include <stdio.h> int main(void) { int a, b,c; float d, e; a=1;c=3; /* a vaut 1 et c vaut 3 */ a=a+1; /* incrémentation: a vaut 2 */ c= c -1; /* décrémentation : c vaut 2 */ b= 2*a + 3*c; /* expression arithmétique : b vaut 10 */ c= b % ( a + 1); /* c vaut 1 : reste de la division de 10 par 3 */ return(0); }
Opérateurs: remarques Si une variable n est pas affectée, son contenu est quelconque : pas d initialisation systématique. En principe, il faut veiller à ne pas mélanger les types numériques dans une expression même si «qui peut le plus peut le moins» a= 12.5 avec a entier n est pas toléré c=12 avec c réel est toléré
5) Les entrées/sorties L objectif des procédures d entrée/sorties est de permettre : - de saisir des valeurs au clavier (entrée) - d afficher les valeurs des variables (sortie) Il y a une conversion entre le format externe et le format interne ou vice versa. Il faut décrire la manière dont se présentent les données ou la manière de les afficher
La fonction printf Cette fonction permet de faire des sorties formatées (sur l écran par exemple) La syntaxe est: printf(«chaîne de spécifications», liste); La chaîne de spécifications indique la façon dont les variables de la liste sont affichées Liste est la liste des variables (séparées par des virgules) à afficher (éventuellement vide)
Les spécifications %d permet l affichage d un entier %ld permet l affichage d un entier long %f permet l affichage d un réel %e permet l affichage d un réel (notation exposant) plus généralement: %t.mlz t: Nombre total de caractères m: Nombre de caractères après la virgule l: si c est un format long z= d, f, e, c (caractère) ou s (chaîne de caractères)
Utilisation de printf #include <stdio.h> int main(void) { int a; float b; Déclarations a=28; b=12.5; Initialisations printf(«résultat:\n»); Texte sans variables printf(«valeur de a :%d \n»,a); Affichage entier printf(«valeur de b: %f \n»,b); Affichage réel printf(«autre format %5d \n»,a); Entier 5 caractères printf(«autre format %8.3f \n», b); Réel 8 caractères return(0); }
La procédure scanf Printf ne modifie pas le contenu des variables affichées La procédure scanf permet de lire des informations sur un périphérique d entrée et d affecter le contenu de la variable. La syntaxe de la procédure est : scanf(«spécifications», &var1, &var2, &var3); Les spécifications sont identiques à la procédure printf Le & indique que var1, var2 et var3 sont des résultats (ou paramètres de sortie): ne jamais l oublier!
Exemple de synthèse #include < stdio.h > #define PI 3.1415927 int main(void) { float rayon, volume; printf(«entrez le rayon de la sphère :\n»); scanf(«%f», &rayon); volume= (4*PI*rayon*rayon*rayon)/3; printf(«le volume de la sphère est: %f»,volume); return(0); }
III) Les structures alternatives 1) La notion de test 2) La structure SI 3) Exemples Alter SI condition A1 A2 S1 S2
1) la notion de test Un test est une expression à résultat booléen: vrai ou faux En langage C standard, les constantes «vrai» et «faux» n existent pas: - un résultat égal à zéro est «vrai» - un résultat différent de zéro est «faux» Les tests peuvent être réalisés par des opérateurs de comparaison et des opérateurs logiques
Les opérateurs Ils sont résumés dans les tableaux suivants: > Supérieur < inférieur > = Supérieur ou égal < = Inférieur ou égal & & "et" logique "ou" logique == Egal! = différent
2) la structure SI La structure SI permet d effectuer une rupture de séquence en fonction du résultat d un test: La syntaxe C est : if (test) { instruction alors 1; instruction alors 2; } else { instruction sinon 1; instruction sinon 2; } Bloc «alors» Bloc «sinon»
3) Exemple #include <stdio.h> int main(void) { float a,b,x; printf(«entrer a: \n»); scanf(«%f»,&a); printf(«entrer b: \n»); scanf(«%f»,&b); if ( a= = 0 ){ printf(«pas de solution»); } else { x= -b/a; printf(«la solution est %f»,x); } return(0); }