Vous êtes sur la page 1sur 41

ejkzek

Chapitre :1 Programmations en langage c (Connaissances avoir)

1- Introduction :
c est un langage volu et structur, assez proche du langage machine destin des applications de contrle de processus(gestion dentres/sorties, applications temps rel). Le langage c possde assez peu dinstructions, il fait par contre appel des bibliothques, fournies en plus ou moins Grant nombre avec le compilateur.

2- Les bibliothques
1* dfinition : Seront des blocs contenant des commandes bien dfinie, c'est--dire pour utiliser une commande il faut le dfinir (sont but ?), cest le but des bibliothques. 2* exemples : Math.h : bibliothque de fonctions mathmatiques Stdio.h : bibliothque des commandes dentres/sorties dclar dans le programme : #include< nom du bibliothque > 3* remarque : Dans la langage c il existe des bibliothques bien dfinies, on peut ajouter des autres bibliothques sur mesure.

3-Dclaration des variables/constants :


1* variables : Pour utiliser une variable ou constante dans notre programme il faut le dclar au dbut du programme Voici quelque type de variables : types Entier Rel caractre dclaration int float char double short taille 2 octets 4 octets 1 octet 4 octets 2 octets

On les dclare : (Type variable) (Nom variable) Par exemple : int x 2* constante : If se peut dans des cas de dclar une valeur fixe afin de lutiliser dans le programme, par exemples : Pi=3.14 (ou lieu de lcrire { linfinit de chiffre). On les dfinies : #define (nom de la constante) = ( la valeur choisie) (int : type et x : nom donn arbitrairement)

4- Structure dun programme c :


1 re bloc : dfinir les bibliothques 2 me bloc : dclaration des variables et constants 3 me bloc : { Bloc des instructions (balises) }

Aves : { dsigne le dbut et } dsigne fin.

Toujours les programmes scrit de cette manire quelque soit la difficult prsente.

5-Les oprateurs :
1* les oprateurs arithmtiques : + : la somme - : la diffrence * : Multiplication / : Division 2* les oprateurs logique :

& : et
|| : ou ! : Non 3* priorit des oprateurs : () ! ,++,-*,/,% +,>,>=,<,<= && || Avec :

++ : un conteur - - : un dcanteur

(oprateurs dincrmentations) (oprateurs de dcrmentations)

Par exemple : Pour i=3 ; i++ -> 3+1=4 -> 3+1+1=5 -> i-- -> 3-1=2 ->

-> 3-1-1=1 -> . ->

Exemple de priorit : x * ! y 2 % t > h || a && b Devient : (((x * (! Y)) (2 % t) > h) ||( a && b))

Chapitre :2 Programmations en langage c (Niveau 2)

1-

Les fonctions dentre :

1* la fonction scanf : Appartiens au bibliothque (stdio.h), permet la saisie de nimporte quel type de variale. Les variable saisir sont format, le nom de la variable est prcd du symbole & dsignant ladresse de la variable dans la mmoire de lordinateur. Plus de dtaille : Supposant que le registre de notre ordinateur est comme c : Il contient beaucoup de case mmoire ayant pour chacune une adresse mmoire, la valeur de notre variable donn par lutilisateur sera enregistr dans lune des case (selon taille).

Mais le problme quand connait pas cette adresse donc il faut jout le symbole dadressage & affin de savoir ladresse de notre variable et pour lutiliser dans des autres oprations. 110 112 .. 400 3 Adresse de la case ------------------------------valeur pour adresse 400 500 502 . 800

Syntaxe : int -> %d float -> %f char -> %c chaine de caractre -> %s Scanf("format",&nom du variable) Exemple : Scanf("%d",&a) ; Scanf : opration dinsertion %d : dclaration dune variable de type entier a : nom variable ; : fin du commande

Scanf("%3d",&a) ; %3d : longueur maximale de a est 3 chiffres c'est--dire a<999 Scanf("%.3d",&a) ; %.3d : trois nombre aprs la vergule 2* la fonction getch : Appartient { la bibliothque (conio.h), permet la saisie clavier dun caractre sans laffich sur lcran. La saisie sarte ds le caractre t tap. Getch() ; Exemple : X=getch() ; -> x prend une valeur que lutilisateur tape sans le voir sur lcran. 3* la fonction getchar : Permet la saisie dun caractre (char), elle appartient au bibliothque (stdio.h). Exemple : Les deux critures sont quivalentes 1* Char x ; X=getch() ; 2* Char x ; Scanf(" %c",&x) ;

2- Les fonctions de sorties :


1* printf : Elle permet daffich un message, rsultat Syntaxe : Printf ("format(s)", nom variable(s)) ; Exemple : Printf ("bonjour") ; -> affiche le message : bonjour

Printf (" %d multiple %d donne %d", x, y, x*y) ; 2* la fonction putchar : Elle permet daffich un caractre et de retourn { la ligne automatiquement (sans utilis \n qui permet le retour la ligne) Exemple : Printf ("bonjour\n") ; Cest deux criture sont corrects : 1* char x ; Putchar(x) ; 2* Char x ; Printf (" %c ", x) ; 3* la fonction puts : Permet daffich un texte de retourn { la ligne automatiquement Cest deux criture sont quivalentes : 1*

Puts (" bonjour") ; 2* Printf (" bonjour\n ") ; Application : On va appliquer se quon { tudier affin de ralis un programme qui : - Ecrire un message de bonjour - Insr 2 variables et affich leur somme, diffrence et produit.

#include<stdio.h> #include<conio.h> Void main () /*fonction prdfinie par logiciel c(voir aprs chapitre des fonction*/ { int a,b,c ; puts(" Bonjour") ; printf("donner trois entiers affin de faire leur somme, diffrences et produit\n ") ; scanf (" %d%d%d",&a,&b,&c ) ; printf ("la somme est %d, la produit est %d", a+b+c,a*b*c) ; getch() ; /*on lutilise getch() pour voir le rsultat car le programme aprs excution des instruction il attendre

lappuis dune touche pour sortir(ou contraire il sort directement dans un temps trs cour qui ne nous permet pas de voir le rsultat)*/ }

Sappelle un commentaire, lordinateur ne le compile pas mais elle est visible lors de lcriture du programme Il faut crire : /* (Explication) */
On va voir dans notre cran aprs excution : Bonjour donner trois entiers affins de faire leur somme, diffrences et produit la somme est x, la produit est y"

Chapitre :3 Les instructions conditionnelles Les instructions itratives


1Les instructions itratives : 1* instruction if :
Cest linstruction la plus simple, elle excute le(s) instruction(s) si sa valeur est vraie. Syntaxe : if(condition)

Bloc d(es) instruction(s) Exemple : if(x>0) printf("x est positive\n ") ; else /*cest le contraire de la condition x>0*/ printf("x est ngative\n ") ; Trs important : On cas de plusieurs instruction faire il faut utiliser les accolades sinon le compilateur lit seulement la premire instruction alors si on utilise else il va envoyer un message derreur. Plus simplement : Exemple : (faux)
Instruction qui nappartientpas { if

if(x>0) printf("x est positive\n ") ;


Lemplacement de else est faux !

printf("ou x est nul") ; else printf("x est ngative\n ") ; printf("ou x est nul") ; (Correct)
Instruction qui appartient if

if(x>0)

{
printf("x est positive\n ") ;
Lemplacement de else est juste !

printf("ou x est nul") ; } else { printf("x est ngative\n ") ; printf("ou x est nul") ; } Exemples : if(x>0) printf("x est positive\n ") ; 2* instruction if-else : Dans les cas o on est oblig test tout les cas possible (cas de non satisfaction de la condition), on utilise if-else. Syntaxe : if (condition) Bloc des instructions else Bloc des instructions Exemple : if(x>0)

printf("x est positive\n ") ; else /*cest le contraire de la condition x>0*/

printf("x est ngative\n ") ; Trs important : On cas de plusieurs instruction faire il faut utiliser les accolades sinon le compilateur lit seulement la premire instruction alors si on utilise else il va envoyer un message derreur. Plus simplement : Exemple : (faux) if(x>0) printf("x est positive\n ") ; printf("ou x est nul") ; else printf("x est ngative\n ") ; printf("ou x est nul") ; (Correct) if(x>0)

{
printf("x est positive\n ") ; printf("ou x est nul") ; } else

{ printf("x est ngative\n ") ; printf("ou x est nul") ; } 3* switch : (selon) On un choix multiple. Syntaxe : Switch(expression) { Case (valeur 1) : bloc 1 Break ; . . . Case (valeur n) : bloc n Break ; Default : bloc n+1 } Exemple : Switch(opp) { Case+ : printf("addition") ;break ; Case- : printf("soustraction") ;break ; /*autrement dans les reste des cas*/ /*permet la sortie de la bloc*/

. . . Default :printf("opp ou symbole diffrent de + et -") ; /* le ; est lie printf pas au default (regard la syntaxe de selon)*/ }

1-

les instructions itratives :

1* la boucle while : (tant que) Elle xcute un bloc des instruction tant que la condition est vraie. Syntaxe : While(condition) Bloc dinstruction(s) 2* la boucle do-while : (rpter jusqu{) Elle xcute un bloc des instruction tant que la condition est vraie. Elle est utilis lorsque lxcution du corp de la boucle sffectuer au moins une fois. Syntaxe : do { Traitement }while(condition); /* le ; reli while*/

3* boucle for : (pour) Syntaxe : for(expression 1 ; expression 2 ; expression2 ; expression 3 ;) bloc dinstruction(s) avec : Expression 1 : initialisation. Expression 2 : condition Expression 3 : pas ralis (modification) Exemple : for(i=0 ;i<2 ;i++)
Initialisation condition conteur (voir chapitre prcdent)

printf("Bonjour\n") ; Excution donne : i=0 -> bonjour i=1 -> bonjour i=2 et 2>1 la condition est non satisfaite en sort de la boucle !

Bonjour bonjour

Si on plusieurs instructions il faut utiliser les accolades (voir lexplication dif).

Chapitre :4 Les fonctions en Langage c


1- Introduction : On venant de trouv une solution un grand problme en tombe dans la grande taille des instructions qui dans la majorit des cas ; soit faux car on ne peut pas vrifier facilement les erreurs quant fait. Pour cette raison on utilise le dcoupage du grand problme en sous problmes moins volumineux et complexes puis on les relient au grand problme. Donc on utilise des fonctions qui pour chacune delles fait une partie du travail demand puis on les relie la fonction principale prs dfinie (main). Syntaxe : Type_rsultat non_fonction(liste type des paramtres) { Dclaration des variables local Suite dinstruction(s) } Exemple : int max (int a,int b) { int c ; type de rsultat(solution trouv sera un entier)

if(a>b) c=a ; else c=b ; return(c) ; } Comande qui permet le retour du resultat finale Utilis avec les fonctions qui renvois le rsultat (contrairement la fonction dfinie Void). Toutes fonction doit tre dclar sauf la fonction main. Exemple : #include<stdio.h> #include<conio.h> int max(int a,int b) ; void main() { int x,y,z ; printf(" donner deux entier\n") ; scanf("%d%d ",&x,&y) ; z=max(x,y) ; printf("le max est %d\n",z) ; } int max (int a,int b) { int c ; if(a>b) c=a ; else c=b ; return(c) ; } Ou on peut crire plus simplement : (sans la dclaration) #include<stdio.h> #include<conio.h>

int max (int a,int b) { int c ; if(a>b) c=a ; else c=b ; return(c) ; } void main() { int x,y,z ; printf(" donner deux entier\n") ; scanf("%d%d ",&x,&y) ; z=max(x,y) ; printf("le max est %d\n",z) ; } 2- Type de dclaration : 1* dclaration local : Avant la dclaration des variables, la fonction est dclar localement dans la fonction qui lappelle, elle disponible uniquement pour cette dernire. Exemple : Void rectangle(int lg,int ht) { Void ligne(int lg) ; int i ; for(i=0 ;i<ht ;i++) ligne(ht) ; } Void ligne(int lg) { int i ; for(i=0 ;i<lg ;i++) printf("*") ; printf("\n") ;

} Ou on peut faire aussi : (sans dclaration) Void ligne(int lg) { int i ; for(i=0 ;i<lg ;i++) printf("*") ; printf("\n") ; } Void rectangle(int lg,int ht) { int i ; for(i=0 ;i<ht ;i++) ligne(ht) ; } Lordre des fonctions est trs intressants ! Fessons une excution la main : (Si vous voulez, prenez un papier est crire lalgorithme en c on suivant les tapes de lexcution) Rectangle cest la procdure qui fait travail (gronte), pour la procdure ligne elle est locale. Void rectangle(int lg,int ht) { Void ligne(int lg) ; int i ;

for(i=0 ;i<ht ;i++) ligne(ht) ; } Void ligne(int lg) { int j ; /*modifier i par j pour ne pas faire la confusion*/ for(j=0 ;j<lg ;j++) printf("*") ; printf("\n") ; }

Suposans que lutilisateur donne comme valeur : lg=4 et ht =3 i=0<3=ht -> ligne (ht) =ligne(3) (on se dplace vers la fonction ligne) Pour j=0<lg=4 -> * Pour j=1<4 -> * (on aura ** car on n{ pas utilis \n dans printf(*) for est excut seulement pour la premire instruction) Ainsi de suite j=3<4 -> **** Enfin j=4 nest pas infrieur 4 on sort de la boucle for et on fait un saute de ligne. On aurra ; **** curseur

L e n t r e

i=1<3=ht (mme travail) enfin ; **** **** **** (i=0) (i=1) (i=2)

Et 3<3 cest faut (sortir de la boucle).

la fonction dclare localement se fait { laide de la fonction appelante.


2* dclaration globale : Aprs les blocs des inclusions (bibliothque les fonctions sont dclar globalement au dbut. Cest fonctions sont utilisable pour tout les fonctions du programme. Exemple : #include<stdio.h> Void rectangle(int lg,int ht) ; /*dclaration*/

Void ligne(int lg) ; Void main() { int l,h ; printf("donner la longeur") ; scanf("%d",&l) ; printf("donner la hauteur") ; scanf("%d",&h); rectangle(l,h) ; /*appelle de la fonction rectangle dans la fonction principale main*/ } Void rectangle(int lg,int ht) { Void ligne(int lg) ; int i ; for(i=0 ;i<ht ;i++) ligne(ht) ; } Void ligne(int lg) { int i ; for(i=0 ;i<lg ;i++) printf("*") ; printf("\n") ; } Ou on peut faire aussi : #include<stdio.h> Void ligne(int lg) /* on appelle ligne avant rectangle et rectangle avant main ou sait faux */ { int i ; for(i=0 ;i<lg ;i++) printf("*") ; printf("\n") ; }

Void rectangle(int lg,int ht) { Void ligne(int lg) ; int i ; for(i=0 ;i<ht ;i++) ligne(ht) ; } Void main() { int l,h ; printf("donner la longeur") ; scanf("%d",&l) ; printf("donner la hauteur") ; scanf("%d",&h); rectangle(l,h) ; }

Chapitre :5 Tableau multidimensionnels


1Introduction :
Se sont les tableau clasique qui ont des lignes et des colonnes. Le nom du tableau reprsente ladresse du premier lment du tableau. Schma : Tableau : 1 7 13 2 8 14 3 9 15 4 10 16 5 11 17 6 12 18

Dans la mmoire notre tableau scrit comme une seule ligne : Supposant que notre tableau sappelle Tab Tab : le nom du tableau et

Ladresse du premier lment Du tableau(1).

10

11 12 13 14 15 16 17 18

2- Initialisation :
Lors de la dclaration dun tableau on peut initialis ses lment on indiquant la liste des valeur entre deux accolade. Exemples : int tab[3][5] /* 3 lignes et 5 colonnes*/ Lespace ocupp on mmoire sera : 3*5*4(octets)=60 octets (car : 1 entier=4 octets). =60 short tab[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}

3- Accs :
Pour un tableau de l lignes et c colonnes : T[0][0] : permet lacce au premier lment du tableau T. T[l-1][c-1] : permet lacce au dernier lment.

4- Affectation :
On peut affecter une valeur quont choisit en remplaant une autre qui existe dj dans notre tableau. Exemple :

T[0][1]=2 Les indices du tableau 0 0 1 1 5 1 10= T[0][1] 6 2 3 7 3 4 8

Ligne=2 Colonne=4 T[0][1]=2 : le tableau devient 0 0 1 1 5 10 6 1 2 2 3 7 3 4 8

Remplisage du tableu 1 dimension : (une ligne seulement) Printf("donner la dimension du tableau") ; Scanf("%d",&n) ; for(i=0 ;i<n ;i++) scanf("%d",&tab[i]) ; Remplisage du tableu ligne_colonnes : Printf("donner nombre de lignes du tableau") ; Scanf("%d",&l) ; Printf("donner la nombre de colonnes du tableau") ; Scanf("%d",&c) ; for(i=0 ;i<l ;i++) for(j=0 ;j<c ;j++) scanf("%d",&tab[i][j]) ;

1- Recherche dans un tableau :


Cest cherch un lment donn dans un tableau.il faut donc faire un parcourt du tableau on vrifiant lexistence de cet lment recherch. Il existe de type de recherche : 1* recherche squentiel : If suffit de lire le tableau de dbut la fin.si le tableau nest pas ordonne alors larrive la fin du tableau sans trouv la valeur signifie le non existence de llment, pour un tableau ordonn ; le premier lment test qui est suprieur la valeur recherch permet larrt de la fonction de recherche. int rech_seq(int tab[],int n,int val) { int i ;

Chapitre :6 Trie interne Tri des tableaux


1- Introduction :
Dans la majorit des cas la recherche dun lment donn dans un tableau est difficile et trs lente en particulier pour des tableaux trs grands. Pour ce l{ on utilise la trie { fin de minimis la recherche (il suffi darriv { une valeur plus grande que la valeur recherche pour sarrt).

Mthodes de trie :
2- tri par slection :
parcourir tout le tableau affin de recherch la plus petit valeur qui sera ensuite permut avec la premire valeur du tableau. Cette opration sera rpter jusqu{ se que le tableau sera totalement tri. void tri_select(int tab[],int n) { int i,j,Min,Aux ; for(i=0 ;i<n-1 ;i++) { Min=i ; for(j=i+1 ;j<n ;j++)

if(Tab[j]<Tab[Min]) { Min=j ; Aux=Tab[i] ; Tab[i]=Tab[min] ; Tab[min]=Aux ; } } }

Soit le tableau suivant tri : n=4 i=0 1=Min 2 2 1 4 (permutation)

3 3

i=0 -> min=0, j=i+1=1 et Tab[j]=1<Tab[Min]=2 donc (on ralise la permutation) :min=j=1, aux=2, tab[i]=tab[2]=1 et tab[min]=tab[1]=2 i=0 1=Min 2=j 3 1 2 4 3 j=j+1(j++)=2 et Tab[j]=4>Tab[Min]=2 donc on rien modifier j=3<n=4 et Tab[j]=3>Tab[Min]=2 donc on rien modifier j=4(>=)4=n -> sort de la boucle. i=1<n-1=3 -> min=i=1, j=i+1=2 et Tab[j]=4>Tab[Min]=2 donc rien modifier j=j+1(j++)=3 et Tab[j]=3>Tab[Min]=2 donc on rien modifier j=4>=4=n -> sort de la boucle. i=2<n-1=3 -> min=i=2, j=i+1=3 et Tab[j]=3<Tab[Min]=4 min=j=3, aux=4, tab[i]= tab[min]= tab[3]=3 tab[min]=4 i=0 1 2 3 1 2 3 4

- trie par insertion :

Affin de class le i me lment du tableau, j=j+1(j++)=4 (>=) 4 sort de la boucle. on regarde I=3(>=n-1=3) -> fin du programme. successiveme nt on marche arrire a partir de i-1 .on dcale les lments visit vers la droite pour pouvoir mtre llment dindice i { sa juste place. void tri_inst(int tab[],int n) { int i,j,elem ; for(i=1 ;i<n ;i++) { Elem=Tab[i] ; j=i ; while(j>0&&Tab[j-1]>Elem)

{ Tab[j]=Tab[j-1] ; j-- ; } } Tab[j]=Elem ; }

4- trie bules :
cette mthode est sophistiqu et utiliser dans les cas des grands tableaux (vous pouvez demander par mail ou contacte sur notre site pour avoir cette mthode et la trie insertion plus dtaill avec des exemples).

Chapitre :7 Chaine des caractres


1- introduction :
Cest une succession de n caractres (0n255). On langage c, une chaine de caractres est dclar comme un tableau de caractres avec un dernier caractre de contrle \0 : son code ASC2 est gal zro, il indique la fin de la chaine de caractres. B BONJOUR O N J O U R \0

2- Les chaines de caractres :


Tableau : @ 1re lment(caractre) du tableau. 1* dclaration dune chaine : Types(char) nom_tableau[longeur+1] 2* initialisation dune chaine : 1re mthode : /* +1 car on la caractre \0*/

Char mot[4]={b,o,n,\0} ; /*3+1*/ 2me mthode : Char mot[4] ; mot[0]=b ; mot[1]=o ; mot[2]=n ; mot[3]=\0 ; 3me mthode : Char mot[]= "bon" ;

3- Chaine de caractres constante :


Sont indiqu entre " ". exemple : Char mot[]= "bon" ; La chaine vide est "". Lacce { une caractre se fait comme les tableaux.

4- Ecriture dune chaine de caractres :


Printf("format(s) (%s)",nom_chaine(s)) ; Exemples : Char matiere[]="informatique" ; Printf("%s",matiere) ; /* donne : informatique*/ Printf("%.4s",matiere) ; /* donne : info*/ Il est faux dcrire matire avec les e avec accent car les noms de tout les types(entier, rel) ne sont pas tenus en compte en c). Exemple : int bb ; /*faux*/

5- Lecture dune chaine de caractres :


Scanf("format(s)",nom_chaine) ; /*attention nom_chaine nest suivi dun & (adressage), cest valable seulement pour les chaine de caractres ou des autre cas tudier par la suite des chapitres*/

On peut aussi utilis la fonction prs difinie gets permet de lire une ligne se terminant par un retour la ligne et la copie { ladresse indiqu par le nom de la chaine. Syntaxe : Gets(nom_chaine) ;

6- Les fonctions de manipulation dune chaine de caractres :


Beaucoup de chaine sont fournie on langage c obtenue partir de la bibliothque : string.h 1* strlen : retourne le nombre du caractres dune chaine sans calcule de\0. Strlen(nom_chaine) ; 2*strcpy : permet de copier une chaine de caractre dans une variable de type chaine de caractre. Strcpy(nom_ch1,nom_ch2) ; Exemple : Strcpy(ch1, "info") ; 3* strcat : permet la concatnation de deux chaines de caractres. Strcat(ch1,ch2) ; Exemple : Strcpy(ch1,"bon") ; Strcpy(ch2,"jour") ; Strcat(ch1,ch2) ; donne : bonjour 4* strcmp : compare deux chaines de caractres et renvoie lindice 0 si elles sont identique. Strcmp(ch1,ch2) ;

7- Les tableaux de chaine de caractres :


Cest un tableau { deux dimensions de type char telle que chaque ligne admet une chaine de caractres. Remarque : int tab[10][5] ; /*matrice dentier*/ char tab[10][5] ; /*tableau de chaine de caractres*/

Lors de la dclaration, on peut initialiser les composantes par des chaines de caractres. Exemple : char jour [7][9] = {"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"} ; 7 lignes correspondent au jour et 9 caractres sur colonne (8+1). Pour accd une chaine, il faut indiquer la ligne correspondante. Printf("cest %s",jour[3]) ; -> cest jeudi Pour accder une caractre dune chaine, il faut indiqu la ligne correspondante et lindice du caractre dans la chaine. Printf("%c",jour[0][0]) ; -> l Pour affecter une chaine { une composante dun tableau de type chaine de caractres, il faut utiliser la fonction strcpy. Strcpy(jour[0], "monday") ; /*on peut faire un programme pour convertir les jours*/

Chapitre :8 Les pointeurs


1- Notion dadressage :
La mmoire est compose par des cases mmoire, chacune de ses derniers est identifi par un numro appel adresse. On peut donc accd une variable de deux faons : Par nom de cette variable Par adresse 10 100 A On suppose quon { la variable A portant comme valeur 10 et dadresse 100. 1* adressage direct : (Classique) cest accd au contenue dune variable par son nom.

2* adressage indirect : Cest le faite daccd au contenue dune variable on passant par une autre variable spciale qui contient ladresse de la variable de dbut. Exemple : 10 100 A On construit un variable qui porte la valeur 100(adresse de notre valeur). Par exemple p 100 p On aura ;

10 100 A

2- Notion de pointeur :
1* Dfinition : Un pointeur est une variable spciale (dj{ nonc dans laccs indirect) contenant ladresse dune autre variable dun type donn. Si un pointeur p contient ladresse dune variable A on dit alors que p pointes sur A ou p est ladresse de A.

10

100 A

2* dclaration : Pour dclar un pointeur on doit crire le type de la variable sur la quelle il pointera suivie du caractre * pour prciser que cest un pointeur puis enfin son nom. Syntaxe : Type* nom_pointeur ;

Le type cest lie { la valeur principale A. * est reli au nom du pointeur. Remarque : Cas entier : 4 octets 100 P p++ ; (p=p+1) 104 p

3* les oprateurs de bases : a- Loprateur dadressage : & Pour avoir ladresse mmoire dune variable il faut utiliser loprateur dadressage(&). Ainsi ; &A fourni ladresse de la variable A. Exemple : int A=2 ; int *p ; p=&A ; /*p pointe sur A c'est--dire il son adresse*/ b- Oprateur contenue : Pour accd au contenue { ladresse mmoire dune variable point par un pointeur p, il faut utiliser loprateur * ainsi ; *p dsigne le contenus de ladresse referme par p (contenue de A).

3- Pointeur et tableau :
Soit T nom dun tableau. En langage c ; T est ladresse du 1re lment du tableau cest { dire que : T&T [0] T est donc un pointeur constant sur le 1re lment du tableau. T+i : ladresse de T[i] (lment ime du tableau). *(T+i) : T[i]

4- Oprations sur les pointeurs :


1* arithmtique de pointeur :

On peut dsormais dplacer un pointeur { laide des oprateurs (addition, soustraction, incrmentation (++) et dcrmentation (--)). On ne peut pas dplacer un pointeur un nombre de case mmoire dpassant la taille des cases rserv par la variable sur la quel il pointe. Exemple : Cas entier : 4 octets 100 P Avec Sur 4 octets 100 101 102 103 (A) 100 : adresse de A, delle je peux savoir les autres (il suffit davoir 100 et le pointeur pointe sue cette valeur). Remarque : Dans le reste des chapitre on va savoir lutilit de se travail. Pour quun pointeur pointe nulle part il faut lui associ la valeur numrique nulle int *p ; p=0 ; Laffectation dun pointeur vers un autre veut dire que les deux pointeurs pointent sur la mme objet. Int A ; Int *p,*q ; P=q ; Si p porte (pointe) sur T[i] (p=&T[i]) alors p+n=&(T[i+n]) et p-n=&(T [i-n]). Si p porte (pointe) sur T[i] (p=&T[i]) alors p++=&(T[i++]) Si p1 et p2 pointent dans un mme tableau alors : p q A p++ ; (p=p+1) 104 p

p1-p2 donne le nombre des composantes entre p1 et p2. La comparaison de p1 et p2 est quivalente la comparaissant des indices correspondantes.

5- Allocation dynamique du mmoire :


Cest le fait de rserv des zone dans la mmoire dun taille donn. Pour ce la il faut utiliser la fonction malloc dfinie en c qui permet lallocation dune place en mmoire { un pointeur. Cette fonction est utilis ds quand parle du pointeur. Syntaxe : Nom_pointeur=(type*)malloc(size) ; Size=taille quand veut rserver en mmoire (mesur en se type : entier=4 octet si je donne 10 -> 10*4=40 octets). Exemple : int *p ; /* cette criture veux dire : int p[4] ; */ P=(int*)malloc(10) ;

6- Libration mmoire :
On peut librer des zones mmoire dj rserv aprs un certain travail fini. Cest la fonction free qui assure ce travail. Syntaxe : free(nom_pointeur) ; /* librer lespace rserv par la fonction malloc */

7- Passage des paramtres dans une fonction :


Il existe deux types de passage : a- Passage par valeur : Les fonctions obtiennent les valeurs de leur paramtre et non pas daccs au variable. On peut donc chang les valeurs des paramtres fournis sans modifier les valeurs originales dans la fonction appelante. Exemple : void echange(int a,int b) { int c ;

c=a ; a=b ; b=c ; } Void main() /*fonction appelante*/ { int x,y ; printf("donner x puis y") ;

Chapitre :9 Les structures


1- Le type structure :
1* introduction : En enregistrement appel structure on langage c est une variable qui permet dimbriqu sous un seul nom plusieurs valeurs de types diffrents. Chaque de ses lments sappelle champ. Pour accd { un champ if suffit dutilis le nom de la structure. Pour dclar une structure il faut dfinir un modle ont indiquons les champs de la structure c'est--dire le type et le nom des variables qui la compose. Syntaxe : Struct nom_structure { Type_champ1 nom_champ1 ; . . . . Type_champn nom_champn ; }; Exemple : Struct etudiant { int age ; float moyenne ;

Char nom[10] ; }; La dclaration de la structure ne fait que donne lallure. C'est--dire une dfinitio{n dun type de variable complexe. La dclaration ne reserve donc pas lespace mmoire pour une variable structur.il faut donc dfinir un ou plusieurs variables structur aprs avoir dclar la structure. 2* dfinition dune variable de type structure : Cest une opration qui consiste { cre une variable aillons comme type celui dune structure que lont dj{ dclar (nomme et rserv un emplacement dans la mmoire). On le dfinie comme suit : Struct nom_structure nom_variable ; Exemple : Struct etudiant { float moyenne ; Char nom[10] ; }; Struct etudiant E1 ; /*E1 est le nom du variable de type struct etudiant*/ On peut faire aussi ; Struct etudiant { float moyenne ; Char nom[10] ; } E1 ; E1 dsigne un tudiant. Exemple 2 : Struct etudiant { float moyenne ;

Char nom[10] ; } E1,E2 ; Consiste remplir des informations de deux tudiants (E1, E2). Lors de la dclaration on peut initialiser une structure ont indiquons entre accolade la liste des valeurs spar par des virgules (chaque valeur le type du son champ). Exemple : Struct etudiant E1={12, "mahfoudhi"} ; Pour modifier une valeur dun champ donne il suffit daccd au champ dune structure en utilisant loprateur du champ (un point) placer entre le nom de la variable structur et le nom du champ. Syntaxe : nom_variable.nom_champ ; Exemple : E1.moyenne=14 ; /*on efface 12 et on le remplace par 14*/

Pour faire le remplissage : (par lutilisateur) Scanf("%f",&E1.moyenne) ; 2- Structure comportant des tableaux : Exemple : Struct etudiant

Chapitre :10 Les listes chaines


1- Introduction :
Cest une structure mais lun de ses champ comporte un pointeur qui pointera vers une structure de mme type. Do le mot chaine (chaine : reli).

Structure : (tudier dans le chapitre prcdent) Mahfoudhi Autri Ghaieth Johnson 15 12 11 11 13 17 14.25 15.44

12 14

(ne sont pas reli) Liste chaine : Mahfoudhi Ghaieth 15 12 11 13 14.25 100(adresse) Autri Johnson 11 12 14 17 15.44 100 2- Caractrisation dune liste chaines : 1* principe : Stoker les donne qui vont tre trait dune manire squentiel. Les lments de liste sont appels nuds ou maillons, il ne sont pas ronger les un au ct des autres. on dispose de pointeur de tte qui contient ladresse du premier lment de la liste(je lappelle on gnrale d ou debut). Le dernier nud ne pointe sur rien, il faut donc effectuer { son pointeur la valeur NULL. 2* inconvinion : If faut parcourir toute la liste pour accder un lment (squentiel). 3* avantage : Pour dplacer un lment on lui supprimant ou ajoutant, il suffit de modifier ses liens. 3- Cration dune liste chaine : 1* dclaration : Dfinir la structure de donne ainsi un pointeur vers une structure de mme type(il pointera vers la tte de cette liste). Exemple :

struct nud { int x ; struct nud* svt ;/*pointeur suivant*/ }; 2* cration dune liste vide : Struct nud* L ;/*L est la tte de notre liste*/ L=NULL ; L=NULL

3* affectation : Comme les structure on utilise (.) dans la liste chaine en utilisera -> (&. (<->) ->). Pour plus des dtaille envoyer vos question et de mande du cour complet). 4* cration dune liste contenant un seul lment : Les diffrente tapes sont : Dfinition de la structure. (dj vue) (1) Dfinition des pointeurs. (2) Alloue la mmoire ncessaire pour les nouveaux nuds. (3) Affect des valeurs au champ des nouveaux nuds. (4) Dfinir les nouveaux nuds comme du tte de la liste L=now (pointeur responsable { la cration des nouveaux nuds). (5) Exemple : (1) struct nud { int x ; struct nud* svt ; }; (2) L=NULL struct nud* L=NULL ;

struct nud* now ; /*pointeur nouveux*/ (3) now=(struct nud*)malloc(sizeof(struct nud)) ; now (4) now->x=2 ; now now->svt=NULL ; (5) L=now ; L->now now Do L 2 NULL Il faut voir les exercices pour mieux comprendre la cour (pratique). 2 NULL 2 NULL