Documente Academic
Documente Profesional
Documente Cultură
LANGAGE C
Ralis par Mr Brahim LAMHARCHI
Page 2
3- Les commentaires Un commentaire dbute par /* et se termine par */. Un commentaire sur la mme ligne dbute par // On ne peut pas imbriquer des commentaires. Quand on met en commentaire un morceau de programme, il faut donc veiller ce que celui-ci ne contienne pas de commentaire. 4- Structure dun programme C Un programme en C se compose des parties suivantes : <dclarations de bibliothques> <dclarations de variables globales> <dclarations de fonctions> main() { <dclarations de variables locales> <instructions> } 5- Les types prdfinis Le C est un langage typ. Cela signifie en particulier que toute variable, constante ou fonction est dun type prcis. Le type dun objet dfinit la faon dont il est reprsent en mmoire. La mmoire de lordinateur se dcompose en une suite continue doctets. Chaque octet de la mmoire est caractris par son adresse, qui est un entier. Deux octets contigus en mmoire ont des adresses qui diffrent dune unit. Quand une variable est dfinie, il lui est attribu une adresse. Cette variable correspondra une zone mmoire dont la longueur (le nombre doctets) est fixe par le type. Les types de base en C concernent les caractres, les entiers et les flottants (nombres rels). Ils sont dsigns par les mots-clefs suivants : char, int, float, double, short, long et unsigned. 5.1- Le type caractre Le mot-clef char dsigne un objet de type caractre. Un char peut contenir nimporte quel lment du jeu de caractres de la machine utilise. La plupart du temps, un objet de type char est cod sur un octet; cest lobjet le plus lmentaire en C. Le jeu de caractres utilis correspond gnralement au codage ASCII (sur 7 bits). La plupart des machines utilisent dsormais le jeu de caractres ISO-8859 (sur 8 bits), dont les 128 premiers caractres correspondent aux caractres ASCII. Les 128 derniers caractres (cods sur 8 bits) sont utiliss pour les caractres propres aux diffrentes langues. La version ISO-8859-1 (aussi appele ISOLATIN-1) est utilise pour les langues dEurope occidentale. Ainsi, le caractre de code 232 est le , le caractre 233 correspond au , etc.
Page 3
caractre
! # $ % & ( ) * + , . / 0 1 2 3 4 5 6 7
code
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
caractre
8 9 : ; < = > ? @ A B C D E F G H I J K L M N O
code
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
caractre
P Q R S T U V W X Y Z [ \ ] ^ _ a b c d e f g
code
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
caractre
h i j k l m n o p q r s t u v w x y z { | } ~ DEL
code
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
Une des particularits du type char en C est quil peut tre assimil un entier : tout objet de type char peut tre utilis dans une expression qui utilise des objets de type entier. Par exemple, si c est de type char, lexpression c + 1 est valide. Elle dsigne le caractre suivant dans le code ASCII. Manipulation de caractres <ctype.h> Toutes les fonctions ci-dessous permettent de tester une proprit du caractre pass en paramtre. Elles renvoient la valeur 1 si le caractre vrifie la proprit et 0 sinon :
Fonction isalnum isalpha islower isupper Renvoi 1 si le caractre est une lettre ou un chiffre une lettre une lettre minuscule une lettre majuscule
Page 4
On dispose galement de deux fonctions permettant la conversion entre lettres minuscules et lettres majuscules :
Fonction tolower toupper Rsultat
convertit c en minuscule si cest une lettre majuscule, retourne c sinon. convertit c en majuscule si cest une lettre minuscule, retourne c sinon.
Tab. 3 Fonctions oprant sur un caractre
5.2- Les types entiers Le mot-clef dsignant le type entier est int. Le type int peut tre prcd dun attribut de prcision (short ou long) et/ou dun attribut de reprsentation (unsigned). On utilisera donc un des types suivants en fonction de la taille des donnes stocker :
Type de donnes short int unsigned short int int unsigned int long int unsigned long int Taille en octets 2 2 4 4 4 4 Plage de valeurs accepte [-215, 215 -1] (-32768 +32767) [0 .. 232 -1] (0 65535) [- 231 .. 231 - 1] (-2147483648 2147483647) [0 .. 232 - 1 ] (0 4294967295) [- 231 .. 231 1] (-2147483648 2147483647) [0 .. 232 1] (0 4294967295)
5.3- Les types flottants (Rel) Les types float, double et long double servent reprsenter des nombres en virgules flottantes. Ils correspondent aux diffrentes prcisions possibles :
Type de donnes float double long double Signification Flottant (Rel) Flottant double prcision Flottant quadruple prcision Taille en octets 4 8 12 Plage de valeurs 3.4*10-38 3.4*1038 1.7*10-308 1.7*10308 3.4*10-4932 3.4*104932
6- Les constantes Une constante est une valeur qui apparat littralement dans le code source dun programme, le type de la constante tant dtermin soit explicitement soit par la faon dont la constante est crite. Pour dsigner un caractre imprimable, il suffit de le mettre entre apostrophes (par ex. A ou $). Les seuls caractres imprimables quon ne peut pas reprsenter de cette faon sont lantislash et lapostrophe, qui sont respectivement dsigns par \\ et \. Le point dinterrogation et les guillemets peuvent aussi tre dsigns par les notations \? et \".
Page 5
Les caractres non imprimables les plus frquents disposent aussi dune notation plus simple : \n : nouvelle ligne \r : retour chariot \t : tabulation horizontale \f : saut de page \v : tabulation verticale \b : retour arrire Par dfaut, une constante entire est reprsente avec le format interne le plus court permettant de la reprsenter parmi les formats des types int, long int et unsigned long int. On peut cependant spcifier explicitement le format dune constante entire en la suffixant par u ou U pour indiquer quelle est non signe, ou en la suffixant par l ou L pour indiquer quelle est de type long. Par exemple :
Constante Type int unsigned int Constante Type long int unsigned long int
1234 1234U
123456789L 123456789UL
Les constantes relles sont reprsentes par la notation classique par mantisse et exposant. Lexposant est introduit par la lettre e ou E, il sagit dun nombre dcimal ventuellement sign. Par dfaut, une constante relle est reprsente avec le format du type double. On peut cependant influer sur la reprsentation interne de la constante en lui ajoutant un des suffixes f (indiffremment F) ou l (indiffremment L). Les suffixes f et F forcent la reprsentation de la constante sous forme dun float, les suffixes l et L forcent la reprsentation sous forme dun long double. Par exemple :
Constante Type double double Constante Type float
12.34 12.3e-4
12.34F 12.34L
long double
Une constante chane de caractres est une suite de caractres entours par des guillemets. Par exemple "Ceci est une chane de caractres". Une chane de caractres peut contenir des caractres non imprimables, dsigns par les reprsentations vues prcdemment. Par exemple "ligne 1 \n ligne 2". A lintrieur dune chane de caractres, le caractre " doit tre dsign par \". Enfin, le caractre \ suivi dun passage la ligne est ignor. Cela permet de faire tenir de longues chanes de caractres sur plusieurs lignes. Par exemple "ceci est une longue longue longue longue longue longue longue longue longue\ chane de caractres". Une constante peut tre dclare de deux faons : Avec le mot-clef const : const float pi=3.1415 ; //dfinition explicite du type de la constante Avec #define : #define pi 3.1415 ; // le type de la constante est dfini implicitement
Page 6
7- Les oprateurs 7.1- Les oprateurs arithmtiques Les oprateurs arithmtiques classiques sont loprateur unaire - (changement de signe) ainsi que les oprateurs binaires +, -, *, /(division) et % ( reste de la division). Ces oprateurs agissent de la faon attendue sur les entiers comme sur les flottants. Leurs seules spcificits sont les suivantes: Contrairement dautres langages, le C ne dispose que de la notation / pour dsigner la fois la division entire et la division entre flottants. Si les deux oprandes sont de type entier, loprateur / produira une division entire (quotient de la division). Par contre, il dlivrera une valeur flottante ds que lun des oprandes est un flottant. Loprateur % ne sapplique qu des oprandes de type entier. Si lun des deux oprandes est ngatif, le signe du reste dpend de limplmentation, mais il est en gnral le mme que celui du dividende. 7.2- Les oprateurs relationnels Les oprateurs relationnels ou de comparaison sont : >, >=, <, <=, == et != (diffrent). Une expression relationnelle a pour syntaxe : exp1 op exp2. Les deux expressions sont values puis compares. La valeur rendue est de type int (il ny a pas de type boolen en C); elle vaut 1 si la condition est vraie, et 0 sinon. 7.3- Les oprateurs logiques Les oprateurs logiques sont : && (ET), || (OU) et ! (NON). Comme pour les oprateurs de comparaison, la valeur retourne par ces oprateurs est un int qui vaut 1 si la condition est vraie et 0 sinon. Les oprateurs daffectation compose 7.4- Loprateur de conversion de type Loprateur de conversion de type, appel cast, permet de modifier explicitement le type dun objet. On crit (type) objet. Par exemple : main() { int i = 3, j = 2; printf("%f \n",(float)i/j); // retourne la valeur 1.5. }
Page 7
2- Les fonctions dentres/sorties Il sagit des fonctions de la librairie standard stdio.h (#include <stdio.h>) utilises avec les units classiques dentres-sorties, qui sont respectivement le clavier et lcran. 2.1- La fonction dcriture printf La fonction printf est une fonction dimpression formate, ce qui signifie que les donnes sont converties selon le format particulier choisi. Sa syntaxe est : printf("chane de contrle ",exp1, ..., expn); La chane de contrle contient le texte afficher et les spcifications de format correspondant chaque expression de la liste. Les spcifications de format ont pour but dannoncer le format des donnes visualiser. Elles sont introduites par le caractre %, suivi dun caractre dsignant le format dimpression. En plus du caractre donnant le type des donnes, on peut ventuellemnt prciser certains paramtres du format dimpression, qui sont spcifis entre le % et le caractre de conversion dans lordre suivant: largeur minimale du champ dimpression: %10d spcifie quau moins 10 caractres seront rservs pour imprimer lentier. Par dfaut, la donne sera cadre droite du champ. Le signe - avant le format signifie que la donne sera cadre gauche du champ (%-10d). prcision: %.12f signifie quun flottant sera imprim avec 12 chiffres aprs la virgule. De mme %10.2f signifie que lon rserve 12 caractres (incluant le caractre .) pour imprimer le flottant et que 2 dentre eux sont destins aux chiffres aprs la virgule. Lorsque la prcision nest pas spcifie, elle correspond par dfaut 6 chiffres aprs la virgule.
format %d %ld %u %lu %f %lf %e %le %g %lg %c %s conversion en int long int unsigned int unsigned long int double long double double long double double long double unsigned char char* criture dcimale signe dcimale signe dcimale non signe dcimale non signe dcimale virgule fixe dcimale virgule fixe dcimale notation exponentielle dcimale notation exponentielle dcimale, reprsentation la plus courte parmi %f et %e dcimale, reprsentation la plus courte parmi %lf et %le caractre chane de caractres
Tab. 6 Les formats daffichage
2.2- La fonction de saisie scanf La fonction scanf permet de saisir des donnes au clavier et de les stocker aux adresses spcifies par les arguments de la fonction. Sa syntaxe est : scanf("chane de controle",argument-1,...,argument-n) ;
Page 9
Un argument est constitu de loprateur & suivi du nom dune variable (ex &a). La chane de contrle indique le format dans lequel les donnes lues sont converties. Elle ne contient pas dautres caractres (notamment pas de \n). Comme pour printf, les conversions de format sont spcifies par un caractre prcd du signe %. Les formats valides pour la fonction scanf diffrent lgrement de ceux de la fonction printf. Les donnes entrer au clavier doivent tre spares par des blancs ou des <Return> sauf sil sagit de caractres. On peut toutefois fixer le nombre de caractres de la donne lire. Par exemple %3s pour une chane de 3 caractres, %10d pour un entier qui stend sur 10 chiffres, signe inclus.
format %d %hd %ld %u %hu %lu %f %lf %Lf %e %le %Le %g %lg %Lg %c %s type dobjet point int short int long int unsigned int unsigned short int unsigned long int float double long double float double long double Float Double char char* reprsentation de la donne saisie dcimale signe dcimale non signe flottante virgule fixe flottante notation exponentielle flottante virgule fixe ou notation exponentielle caractre chane de caractres
2.3- Impression et lecture de caractres Les fonctions getchar et putchar permettent respectivement de lire et dimprimer des caractres. Il sagit de fonctions dentres-sorties non formates. La fonction getchar retourne un int correspondant au caractre lu. Pour mettre le caractre lu dans une variable caractere, on crit : caractere = getchar(); La fonction putchar crit caractere sur la sortie standard : putchar(caractere);
Exemple :
2- Branchement multiple switch Syntaxe : switch (expression) { case constante-1 : liste dinstructions 1 ; break; case constante-2 : liste dinstructions 2 ; break; ... case constante-n : liste dinstructions n ; break; default : liste dinstructions 0 ; break; } Si la valeur de expression est gale lune des constantes, la liste dinstructions correspondant est excute. Sinon la liste dinstructions 0 correspondant default est excute. Linstruction default est facultative. 3- Loprateur conditionnel ternaire Loprateur conditionnel ? est un oprateur ternaire. Sa syntaxe est la suivante:
V- Les boucles
Les boucles permettent de rpter une srie dinstructions tant quune certaine condition nest pas vrifie. 1- Boucle for Syntaxe : for ( expr 1 ; expr 2 ; expr 3) <instruction> ; Par exemple, pour imprimer tous les entiers de 0 9, on crit : for (i = 0; i < 10; i++) printf("\n i = %d",i); A la fin de cette boucle, i vaudra 10. Les trois expressions utilises dans une boucle for peuvent tre constitues de plusieurs expressions spares par des virgules. Cela permet par exemple de faire plusieurs initialisations la fois. Par exemple, pour calculer la factorielle dun entier, on peut crire :
Page 11
int n, i, fact; for (i = 1, fact = 1; i <= n; i++) fact *= i; On peut galement insrer linstruction fact *= i; dans la boucle for ce qui donne : int n, i, fact; for (i = 1, fact = 1; i <= n; fact *= i, i++); 2- Boucle while Syntaxe : while (expression ) <instruction> ; Tant que expression est vrifie, <instruction> est excute. Si expression nest pas vrifie au dpart, <instruction> ne sera jamais excute. Par exemple, le programme suivant imprime les entiers de 1 9. i = 1; while (i < 10) { printf("\n i = %d",i); i++; } 3- Boucle do while Il peut arriver que lon ne veuille effectuer le test de continuation quaprs avoir excut linstruction. Dans ce cas, on utilise la boucle do while. Syntaxe : do <instruction> while (expression); Ici, <instruction> sera excute tant que expression est vrifie. Cela signifie donc que <instruction> est toujours excute au moins une fois. Par exemple, pour saisir au clavier un entier entre 1 et 10 : int a; do } printf("\n Entrez un entier entre 1 et 10 : "); scanf("%dU",&a); } while ((a <= 0) || (a > 10));
Page 12
Page 13
Les fonctions
Comme dans la plupart des langages, on peut en C dcouper un programme en plusieurs fonctions. Une seule de ces fonctions existe obligatoirement ; cest la fonction principale appele main. Cette fonction principale peut, ventuellement, appeler une ou plusieurs fonctions secondaires. De mme, chaque fonction secondaire peut appeler dautres fonctions secondaires ou sappeler elle-mme (dans ce dernier cas, on dit que la fonction est rcursive).
Page 15