0% ont trouvé ce document utile (0 vote)
112 vues127 pages

Introduction au langage C et ses bases

Ce document décrit le langage de programmation C. Il présente les notions de base du langage C telles que la structure d'un programme C, les types de base, les variables, les opérateurs et les expressions.

Transféré par

kaidi chaimaa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
112 vues127 pages

Introduction au langage C et ses bases

Ce document décrit le langage de programmation C. Il présente les notions de base du langage C telles que la structure d'un programme C, les types de base, les variables, les opérateurs et les expressions.

Transféré par

kaidi chaimaa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd

Langage C

1
Plan

1-Introduction
2-Notions de base

3-Types de base, Oprations et


expression
4- Lire et Ecrire des
donnes
5-Structures de contrle
6-Tableaux
7-Fonctions
8-Chaines de
caractres
9-Pointeurs

2
1-Introduction

3
1-Introduction

Langage informatique

On appelle langage informatique un langage


destin dcrire l'ensemble des actions
conscutives qu'un ordinateur doit excuter.

Un langage informatique est ainsi une faon


pratique pour nous (humains) de donner des
instructions un ordinateur.

4
1-Introduction

1.1 Histoire de langage c

En 1972, dans les Bell Laboratories, Ritchie a


conu le langage C pour dvelopper une version
portable du systme
dexploitation UNIX.
En 1978, le duo Kernighan/ Ritchie a publi la
dfinition classique du langage C,

En 1983, le American National Standards


Institute (ANSI)
chargeait une commission de mettre au point
une dfinition
explicite et indpendante de la machine pour le
langage C. Le rsultat tait le standard Ansi-C. 5
1-Introduction

1.2. Caractristiques du langage C

C est un langage :
Universel : permet aussi bien la programmation systme que
la programmation de divers applications (scientifique, de
gestion,)
De haut niveau : C est un langage structur (offre plusieurs
structures de contrle) et typ (dclarations obligatoires)

Prs de la machine : offre des oprateurs qui sont trs proches


de ceux du langage machine

Portable : en respectant le standard ANSI-C, il est possible


dutiliser le mme programme sur dautres compilateurs.

Trs rapide: Aucun contrle de dbordement n'est effectu, ce


qui apporte une plus grande vitesse.
6
2-Notions de base

7
2-Notions de base

2.1. Premier programme en langage C

#include <stdio.h>
void main( )
{
printf("Bonjour tout le monde
\n");
}

Ce programme affiche le message :"Bonjour


tout le monde".

8
2-Notions de base

2.2. Structure d'un programme C


Tout programme est toujours constitu de trois
phases :
Lecture
des
donnes

Traitement des
donnes

Affichage
des
rsultats
Remarque:
On parle parfois pour un programme donn
d'application ou de logiciel.
9
2-Notions de base

2.2. Structure d'un programme C


Structure d'un
programme:
2-Notions de base

2.2. Structure d'un programme C

Importation des
bibliothques
Selon ce que l'on souhaite faire dans notre
programme, on peut avoir besoin de diffrentes
fonctions.
Celles-ci sont disponibles dans des bibliothques.
Par exemple :
#include<stdio . h> propose des fonctions de saisie
et d'affichage
#include<conio . h> propose d'autre fonctions
d'entres-sorties

11
2-Notions de base

2.3. Structure d'un programme C

Corps du programme La fonction


main
Une fonction et une seule s'appelle
main.
C'est la fonction principale des programmes en C ;
elle se trouve
obligatoirement dans tous les programmes.
L'excution d'un programme entrane
automatiquement l'appel de la fonction main.

12
2-Notions de base

2.3. Structure d'un programme C


Corps du programme La fonction
main
On place dans les accolades du main les
instructions que l'on souhaite voir s'excuter :

int main( ) void main( )


{ {
<instructions <instructions
excuter>; excuter>;
return 0 ; }
}
Remarque:
Chaque ligne se termine par un point-
virgule. 13
2-Notions de base
2.3. Structure d'un programme C
Commentaire

Sont utiliss pour rendre un programme plus


comprhensible.
Sont ignors par le compilateur
Un commentaire sur une ligne commence par les
caractres //.
Un commentaires multi ligne commence par les
caractres /* et se termine par*/.
Attention: on ne peut donc pas imbriquer des
commentaires.

14
2-Notions de base
2.3. Structure d'un programme C

Commentaire
/***********************************/
/* ce programme vous affiche Bonjour */
/***********************************/
/*fichier dentte pour utiliser la fonction printf*/

#include <stdio.h>
int main() /* la fonction principale main */
{
printf(Bonjour); // afficher Bonjour
Return 0;
}

15
3. Types de base, Oprateurs et expression

16
3. Types de base, oprateurs et expression
3.1. Constantes

Dfinition d'une
constante
Elle ne change jamais de valeur pendant l'excution
d'un programme. Elle est gnralement stocke dans la
mmoire morte d'une machine.

Il n'y a pas d'allocation mmoire, mais on peut


affecter un identificateur (Nom) une valeur constante
par l'instruction #define.

17
3. Types de base, oprateurs et expression
3.1. Constantes
Dfinition d'une
constante

Syntaxe:
#define <identificateur>
<valeur>
Exemp
le

18
3. Types de base, oprateurs et expression
3.2. Variables

Les variables contiennent les valeurs utilises


pendant l'excution du programme.
Dclarer une variable, c'est prvenir le compilateur
qu'un nom va tre utilis pour designer un
emplacement de la mmoire.
Les noms des variables sont des identificateurs
quelconques
Toute variable doit tre dclare avant les
instructions et son type spcifi ds la dclaration.

19
3. Types de base, oprateurs et expression
3.2. Variables

Syntaxe:
<type> <identificateur 1>,..,<identificateur n> ;

Exemp
le

20
3. Types de base, oprateurs et expression
3.2. Variables
Le type
Dtermine la taille de la variable et les oprations pouvant tre
effectues
L'identificate
ur
C'est le nom affect la variable, le nombre de caractres
peut tre limit, cela dpend du compilateur utilis.
Lidentificateur dune variable doit toujours tre crit de la
mme faon : Mon_Identificateur mon_identificateur
MON_IDENTIFICATEUR.
Les seuls caractres autoriss pour les noms
(identificateur) de variables sont :
lettres NON
accentues ; au dbut du
chiffres (sauf
nom) ;
caractres soulign _ .

21
3. Types de base, oprateurs et expression
3.2. Variables
En TURBO
C

22
3. Types de base, oprateurs et expression
3.2. Variables

23
3. Types de base, oprateurs et expression
3.2. Variables
Exemple
float rayon; /*Dclaration de rel*/
int i,j; /*Dclaration dentier*/
char t; /*Dclaration de caractre*/
Double pi; /*Dclaration de rel
double*/

Void main()
{
i=2;
j=3;
t=A;
pi=3.14159;
}

24
3. Types de base, oprateurs et expression
3.2. Variables
Initialisation des
variables
Deux solutions sont possibles:

25
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs rgissent toutes les oprations ou transformations
sur les valeurs de variables.
L'oprateur
d'affectation
C'est l'oprateur le plus utilis. Il permet de modifier la valeur d'une
variable.
Laffectation est toujours effectue de la droite vers la gauche
Le programme commence par valuer la valeur de l'expression puis
l'affecte avec le signe = la variable par son identificateur.

Syntaxe:
<identificateur> = <expression> ;

Exemple
int main ( )
{
int V ;
V = 5;
return 0 ;
} 26
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs
arithmtiques.

Les oprateurs d'incrmentation et de


dcrmentation.

Si l'oprateur d'incrmentation ou de dcrmentation est plac avant


l'identificateur alors la variable sera incrmente ou dcrmente
avant d'tre utilise.

27
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs
relationnels
Sont utiliss pour les structures conditionnelles, de choix et
itratives,.
Ils permettent de comparer une variable par rapport une autre
variable ou une valeur ou une expression.
Le rsultat ne peut tre que VRAI ou FAUX, on parle de valeur
boolenne.
FAUX correspond 0.
VRAI correspond toute valeur diffrente
de 0.

28
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs logiques.

Sont utiliss pour les structures conditionnelles, de choix et


itratives,.

29
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
L'oprateur de conversion
de type.
Il existe deux conversions
possibles:
La conversion implicite:
Elle est effectue pour valuer le mme type de donnes lors
d'valuation d'expressions. Les conversions systmatiques
de char en int, en float, en double, la conversion se fait
toujours du type le plus petit vers le plus long (exemple: de
char vers double).

La conversion explicite:
On peut changer le type d'une variable vers un autre type en
utilisant l'oprateur cast (type) en le mettant devant
l'identificateur de variable convertir.

30
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
La priorit des
oprateurs.

31
4. Lire & Ecrire des donnes

32
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()

La fonction daffichageprintf() permet d'afficher des messages


et/ou des valeurs de variables sous diffrents formats.

Syntaxe:
printf (<"Format">,identificateur1,
....,identificateur n);
Le format
indique comment vont tre affich les valeurs des variables. Il est
compos de texte et de codes d'affichage suivant le type de variable.
Exemple
Code identificateu
daffichage r

Printf ( "la valeur de la variable v est


%d" , v ) ;
forma
t
33
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()
Codes
d'affichage:

Important
Au dbut d'un programme utilisant les fonctions d'affichage et de saisie il est
ncessaire d'crire #include <stdio.h>, car toutes les fonctions sont dclares
dans ce fichier d'en-tte.
34
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()
Exemple:

#include <stdio.h>
void main( )
{
int a,b,c;
a=1;
b=2;
c=3;
printf(" La valeur de a est %d , celle de b est %d , et celle de c
est %d" , a , b , c );
}
Le programme affiche:

La valeur de a est 1, celle de b est 2, et celle de c est


3.
35
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()
On peut aussi mettre des codes de contrles:

Exemple
#include <stdio.h>
void main()
{
printf("Salut je suis:\n\t tudiant la facult des sciences de
Ttouan \n\t\t A bientt");
}
36
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()

Le programme affiche :

Salut je suis
tudiant la facult des sciences de Ttouan
A bientt

37
4. Lire & Ecrire des donnes
4.2. Lecture formate de donnes : scanf()

La fonction scanf() permet de saisir des valeurs de variables


formates partir du clavier.

Comme printf elle est compose d'un format et des identificateurs


de variables saisir.

A la diffrence de printf, le format ne peut contenir de texte, il est


juste compos du format des valeurs saisir.

Syntaxe:
scanf(<"Format">,&identificateur1, ....,
&identificateurn);

38
4. Lire & Ecrire des donnes
4.2. Lecture formate de donnes : scanf()

Remarq
ue
Le symbole & est obligatoire devant les identificateurs car scanf
attend des adresses et non des valeurs, sauf devant un
identificateur de chane de caractres.

Les codes d'affichage pour printf deviennent les codes d'entre


pour scanf.
Pour l'utilisation de scanf il faut inclure le fichier stdio.h au dbut
du programme.

39
4. Lire & Ecrire des donnes
4.2. Lecture formate de donnes : scanf()
Exemple:
Saisie de plusieurs
variables.
#include <stdio.h>
Float a, b,c, det; /*dclaration des variables relles*/
void main( )
{
printf ("Donne les valeurs de a,b et c ?"); /* Affichage de "Donne
les valeurs de a,b et c ?" */
scanf("%f %f %f",&a,&b,&c); /* Saisie de a,b,c */
det=(b*b)-(4*a*c); /* Calcul du dterminant */
printf("\n\n"); /* Deux sauts de ligne */
printf("Le dterminant = %f",det); /* Affichage du dterminant */
}

40
4. Lire & Ecrire des donnes
4.3. Ecriture dun caractre : putchar()

La fonction putchar permet d'afficher un caractre l'cran.

Syntaxe:
putchar(identificateur1);

41
4. Lire & Ecrire des donnes
4.3. Ecriture dun caractre : putchar()
#include <stdio.h>
char car1,car2,car3;
void main( )
{
car1=S';
car2= M';
car3= A';
putchar(car1); /* Affichage du caractre 1 -> donne un S */
putchar(car2); /* Affichage du caractre 2 -> donne un M */
putchar(I'); /* Affichage du caractre P */
putchar('\n'); /* Retour de ligne */
putchar(car1); /* Affichage du caractre 1 -> donne un S */
putchar(car2); /* Affichage du caractre 2 -> donne un M */
putchar(car3'); /* Affichage du caractre P */
}

Le programme SMI
affiche: SMA 42
4. Lire & Ecrire des donnes
4.4. Lecture dun caractre : getchar()
La fonction getchar permet de saisir un caractre au clavier.
Syntaxe:
identificateur1 = getchar( void );

#include <stdio.h>
char car1;
void main( )
{

printf("Tapez un caractre ?"); /* Affichage de "Tapez un


caractre ?" */
car1=getchar(); /* Saisie d'un caractre */
putchar('\n'); /* Changement de ligne */
printf("Le caractre saisi = %c",car1); /* Affichage du
caractre saisi */
} 43
5. Traitements conditionnels

Elles permettent en fonction d'une condition, de choisir de


faire une instruction ou un bloc d'instructions plutt qu'un
autre.
5.3 La structure <SI ... ALORS ...>.

C'est la structure de base.

44
5. Traitements conditionnels
Exemple

ou

45
5. Traitements conditionnels

5.2 La structure <SI ... ALORS ...


SINON>.
Si la condition est vraie alors elle excute l'instruction ou le
bloc d'instructions qui suit le if (si),
par contre si la condition est fausse alors elle excute
l'instruction ou le bloc d'instructions qui suit else (sinon).

46
5. Traitements conditionnels
Exemple

ou

47
5. Traitements conditionnels

5.3 La structure de choix


Elle permet en fonction de diffrentes valeurs d'une variable de
faire plusieurs actions, si aucune valeur n'est trouve alors ce
sont les instructions qui suivent default qui sont excutes

48
5. Traitements conditionnels
5.3 La structure de choix
Exemple

49
5. Traitements conditionnels
5.3 La structure de choix
ou

50
5. Traitements conditionnels
N'oubliez surtout pas les break ! Si par exemple, nous voulons afficher
le nom d'un mois en fonction de son numro, on ecrit:

#include<stdio.h>
int numeroMois ;
void main()
{ prinf ("entrez le numero de mois");
scanf("%d",&numeroMois) ;

switch ( numeroMois )
{
case 1 : printf ( "janvier ") ; break ;
case 2 : printf ("fevrier") ; break ;
case 3 : printf ("mars") ; break ;
case 4 : printf ("avril") ; break ;
case 5 : printf ("mai") ; break ;
case 6 : printf (" juin ") ; break ;
case 7 : printf ("juillet") ; break ;
case 8 : printf ("aout") ; break ;
case 9 : printf ("septembre") ; break ;
case 10 : printf ("octobre") ; break ;
case 11 : printf ("novembre") ; break ;
case 12 : printf ("decembre") ; break ;
default : printf ("Je connais pas ce mois . . . ") ;
}
}
51
6. Les structures itratives ou boucles
6.1. Dfinitions et terminologie
Une structure itrative ou boucle permet d'excuter plusieurs fois de
suite une mme squence d'instructions. Cette ensemble d'instructions
s'appelle le corps de la boucle. Chaque excution du corps d'une boucle
s'appelle une itration.

Lorsque l'on s'appte excuter la premire itration, on dit que l'on


rentre dans la boucle, lorsque la dernire itration est termine, on dit
qu'on sort de la boucle. Il existe trois types de boucle :

While

do ... while

for

52
6. Les structures itratives ou boucles
6.2. La structure <tant que>
while
Dans cette structure la condition est teste au
dbut .

53
6. Les structures itratives ou boucles
Exemple

#include<stdio.h>
int i ;
void main()
{
/* boucle while<tant que faire> */
i=0;
while ( i<10 )
{
printf ("i = %d\n ",i) ;
i++ ;
}
}

54
6. Les structures itratives ou boucles
6.3. La structure <FAIRE ... TANT QUE > do ...
while.
Dans cette structure la condition est teste la
fin.

55
6. Les structures itratives ou boucles
Exemple
#include <stdio.h>
int i;
void main()
{
i=0;
/* Boucle while <faire tant que> */
do
{
printf("i= %d\n",i);
i++;
}
while(i<10);
}

56
6. Les structures itratives ou boucles
6.4. La structure <POUR ... FAIRE ... JUSQUA ...> for
Dans cette structure la condition est teste au dbut. Elle est trs
intressante car elle est compose de trois parties:

L'instruction ou plusieurs instructions d'Initialisation qui sont excutes


une seule fois au dbut de la structure.

L'instruction ou le bloc d'instructions du corps de la structure qui est


excut chaque itration.

L'instruction ou plusieurs instructions qui sont excutes la fin de


chaque itration

57
6. Les structures itratives ou boucles
6.4. La structure <POUR ... FAIRE ... JUSQUA ...> for

58
6. Les structures itratives ou boucles
6.4. La structure <POUR ... FAIRE ... JUSQUA ...> for

Exemple

#include <stdio.h>
int i;
void main()
{
for(i=0;i<10;i++)

printf("i= %d\n",i);
}

59
Chapitre 7: Les tableaux

60
7. Les tableaux
7.1. Introduction

Les variables, telles que nous les avons vues, ne permettent de stocker
quune seule donnes la fois.

Pour mmoriser et manipuler de nombreuses donnes (100,1000,),


des variables distinctes seraient beaucoup trop lourdes grer.

Pour rsoudre ce problme, le langage C (ainsi que les autres langages


de programmations) propose une structure de donnes permettant de
stocker lensemble de ces donnes dans une variable commune
appele:

Tableau
61
7. Les tableaux
7.2. Dfinition
On appelle tableau une variable compose de donnes de mme type,
stocke de manire contigue en mmoire (les uns la suite des autres).

Un tableau est une suite des lemente de mme taille. Par consquent,
la taille (en octet) du tableau est:
taille (en octet) du type de donne*le nombre dlment

Le type des lments du tableau peut tre:

Simple:char, int, float, double,


Tableau une dimension ou tableau unidimensionnel

tableau

Tableau plusieurs dimensions ou tableau multidimensionnel


Autres: Pointeurs et structures
62
7. Les tableaux
Tableaux une dimension
Dclaration
La dclaration dun tableau une dimension se fait de la faon suivante:

<Type Simple> Nom_du_Tableau[Nombre_Elements];

Type Simple: dfinit le type dlment que contient le tableau


Nom_du_Tableau: est le nom que lon dcide de donner au tableau, le
nom du tableau suit les mmes rgles quun nom de variale
Nombre_Elements: est une expression constante entire positive

Exemples:
Char caractere[12]; //Taille en octet: 1 octet*12=12
octets
int entier[10]; //Taille en octet: 2 octets*10=20
octets
Float reel_SP[8]; //Taille en octet: 4 octets*8=32
octets 63
7. Les tableaux
Tableaux une dimension
Initialisation la dclaration
Il est possible dinitialiser le tableau la dfinition:

<Type> Tableau[Nombre_Elements]={C1,C2,,Cn};
ou C1,C2,,Cn sont des constantes dont le nombre ne doit pas dpasser
le Nombre_Elements.

Si la liste de constantes ne contient pas assez de valeurs pour tous les


lments, les lments restantes sont initialises zero
Exemples:
Char voyelles[6] = {a, e,i, o, u, y};
Int Tableau_entier1[10]= {10,5,9,-2};

float Tableau_reel8]= {1.5, 1.5e3,,5,9,-2};

shirt A[3]= {12,23,34,45,56}; //erreur!


64
7. Les tableaux
Tableaux une dimension
Exemple

Ou encore

65
7. Les tableaux
Tableaux une dimension (Vecteurs)
Accs aux composantes dun tableau

Pour accder un lment du tableau, il suffit de donner le nom du


tableau, suvi de lindice de llment entre crochets:
Nom_tableau[indice]

Un indice est toujours positif ou nul;


Lindice du premier lment du tableau est 0;
Lindice du dernier lment du tableau est gal au nombre dlments
-1.
Exemples:
Short A[5] = {12,23,34,45,56}; //A[0]=12;A[1]=23;A[2]=34; //A[3]=45;
A[4]=56;

For(i=0;i<5;i++) //Affichage des


lments
printf("A[%d]=%d\t" ,i,A[i]); // du tableau A 66
7. Les tableaux
Tableaux une dimension (Vecteurs)
Remarques

Chaque lment ( TAB[i]) dun tableau (int TAB[20]) est manipul


comme une simple variable, on peut:

La lire: scanf("%d",&TAB[i]); //tAB[i] sera initialis par un entier


saisi
//depuis le clavier

Lcriture: printf("TAB[%d] =%d",i,TAB[i]); //Le contenu de TAB[i]


sera //affich sur cran

67
7. Les tableaux
Tableaux une dimension (Vecteurs)
Remarques

La passer en argument une fonction: TAB[i] =pow(TAB[i],2);


=TAB[i]2

Pour initialiser un (TAB1) par les lments dun autre tableau


(TAB2):
viter dcrire TAB1=TAB2 (incorrect)

On peut par exemple crire:


for(i=0;i<taille_tableau;i++)
TAB1[i]=TAB2[i];

68
7. Les tableaux
Tableaux une dimension (Vecteurs)

t Dclaration et reprsentation mmoire dun tableau

La dclaration dune variable au sein dun programme provoque la


rservation automatique, par le compilateur, dun espace de la mmoire.
Ce qui permettra,par consquent, de conserver les valeurs assignes
cette variabble le long de lxecution du programme

La mmoire (RAM) est une superposition de cases mmoires ou


ranges.
Chaque case mmoire est identifi par un numro appel adresse.

69
7. Les tableaux
Tableaux une dimension (Vecteurs)
t Exemples

1. Saisir et afficher des donnes dun tableau dentiers de 20 lments


aux maximum.

2. Rechercher une valeur dans un tableau: Etant donn un tableau et une


valeur. rechercer cette valeur dans le tableau. Sil existe, afficher sa
position sinon afficher un message derreur.

3. Dterminer la plus petite valeur du tableau dentiers A. Afficher ensuite


la valeur et la position du minimum. Si le tableau contient plusieurs
minimum, retenir la position du premier minimum rencontr.

70
7. Les tableaux
Tableaux une dimension (Vecteurs)
t Dclaration et reprsentation mmoire dun tableau
En C, la dclaration dun tableau T induit une rservation automatique
dune zone mmoire contigue( les cases mmoires sont successives)

Reprsentation mmoire:

71
7. Les tableaux
Tableaux plusieurs dimensions
Dclaration
De manire similaire, on peut dclarer un tableau plusieurs
dimensions;
<Type Simple> Nom_du_Tableau [Nbre_El_1]
[Nbre_E_N];
Chaque lment entre crochets dsigne le nombre dlments dans chaque
dimension;
Le nombre de dimension nest pas limit.

Tableaux deux dimensions (matrices)


Dclaration
<Type Simple> Nom_du_Tableau [Nbre_ligne][Nbre_colonne];

72
7. Les tableaux

Tableaux deux dimensions (matrices)


Exemple

int T[3][4];

On peut reprsenter un tel tableau de la manire suivante:

T[0][0] T[0][1] T[0][2] T[0][3]

T[1][0] T[1][1] T[1][2] T[1][3]

T[2][0] T[2][1] T[2][2] T[2][3]

73
7. Les tableaux
Tableaux deux dimensions (matrices)
Initialisation la dclaration et accs aux lments:
Les valeurs sont affectes ligne par ligne lors de linitialisation la dclaration
Accs aux composantes se fait par: Nom_tableau[ligne][colonne].

Exemples
float A[3][2] = { {-1.05 , 61.10} , {86e-5 , 87} , {-12.5} };

int B[4][4]={ {-1,10, 13, 16} , {+8,-077} , {} , {11,-14,30} }

-1.05 61.10 -1 10 13 16

A 86e-5 87 +8 -77 0 0
B
-12.5 0 0 0 0 0

11 -14 30 0
74
7. Les tableaux
Tableaux deux dimensions (matrices)

Dclarations et reprsentation en mmoire dun tableau 2


dimensions:

La dclaration dun tableau T deux dimensions (matrice) induit la


rservation de lespace mmoire ncessaire pour acceuillir tous les
lments du tableau.

Les lments de la matrice sont rpartis en mmoire ligne par ligne.

75
7. Les tableaux
Exemple: Soit T un tableau dfini par: char T[3]
[4]
Rpartition des lments
de T en mmoire

T[0][0]
T[0][1]
T[0][2]
T[0][3]
T[1][0]
T[1][1]
T[1][2]
T[1][3]
T[2][0]
T[2][1]
T[2][2]
T[2][3] 76
7. Les tableaux
Tableaux deux dimensions (Vecteurs)
Exemples

1. Ecrire un programme qui lit les dimensions M et N d'un tableau T


deux dimensions du type int (dimensions maximales: 50 lignes et 50
colonnes). Remplir le tableau par des valeurs entres au clavier et afficher
le tableau ainsi que la somme de tous ses lments

2. Ecrire un programme qui ui ralise l'addition de deux matrices A et B


de mmes dimensions N et M, le rsultat de l'addition sera mmoris
dans une troisime matrice C qui sera ensuite affiche.

77
Chapitre 8 : CHAINES DE CARACTERES

78
8. CHAINES DE CARACTERES

Dclaration de chanes de caractres en C

char <NomVariable> [<Longueur>];


Exemples
char NOM [20];
char PRENOM [20];
char PHRASE [300];

79
8. CHAINES DE CARACTERES

Mmorisatio
n
Le nom d'une chane est le reprsentant de l'adresse du
premier caractre de la chane. Pour mmoriser une
variable qui doit tre capable de contenir un texte de N
caractres, nous avons besoin de N+1 octets en mmoire

Exemple: Mmorisation d'un


tableau
char TXT[10] = "BONJOUR !";

B O N J O U R ! \0

TXT

80
8. CHAINES DE CARACTERES

Lecture dune chane de caractre par scanf:


scanf avec le spcificateur %s lit un mot partir du clavier
et le mmorise l'adresse qui est associe %s.

Exemple
char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);

81
8. CHAINES DE CARACTERES

Fonction spcifique pour la lecture dune chane de


caractre: gets
Syntaxe: gets( Chaine)
gets lit une ligne de de caractres du clavier et la copie
l'adresse indique par la variable Chaine. Le retour la
ligne final est remplac par le symbole de fin de chane '\0'.

Exemple
char LIEU[25];
printf("Entrez lieu de naissance : \n");
gets(LIEU);

82
8. CHAINES DE CARACTERES

Affichage dune chane de caractre par printf:

printf avec le spcificateur de format %s permet dafficher


une chane den caractres lcran.

Exemple
char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);
printf ("%s %d %d %d", LIEU, JOUR, MOIS, ANNEE);

83
8. CHAINES DE CARACTERES

Fonction spcifique pour laffichage dune chane de


caractre: puts
Syntaxe: puts( Chaine)
puts crit la chane de caractres dsigne par la variable
Chaine sur lcran et provoque un retour la ligne.

Exemple
char TEXTE[] = "Voici une premire ligne.";
puts(TEXTE);
puts("Voici une deuxime ligne.");

84
8. CHAINES DE CARACTERES

Ordre alphabtique (lexicographique) des chanes de


caractres:
La prcdence des caractres dans l'alphabet d'une
machine est dpendante du code du caractre utilis. Pour
le code ASCII, nous pouvons constater l'ordre suivant:
. . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .

Exemple
"ABC" < "BCA" car 'A'<'B'
"ABC" < "B" car 'A'<'B'
"Abc" < "abc" car 'A'<'a'
"ab" < "abcdZ" car " " < "cd

85
8. CHAINES DE CARACTERES

Ordre alphabtique (lexicographique) des chanes de


caractres:
Il existe une fonction en C, strcmp de la bibliothqe
string.h, indique lordre lexicographique de deux chanes
de caractres.

Syntaxe: int strcmp(chaine 1, chaine 2);

strcmp retourne:
1. un nombre positif si chaine 2 prcde chaine 1 dans
lordre alphabtique
2. Un nombre ngatif si chaine 1 prcde chaine 2 dans
lordre alphabtique
3. Zro si chaine 1 est identique chaine 2

86
8. CHAINES DE CARACTERES

Autres fonctions de manipulation de chanes de


caractres:
bibliothque <string.h>

87
8. CHAINES DE CARACTERES

Exercice 1

Ecrire un programme qui demande lutilisateur de saisir


la chaine BONJOUR ETUDIANTS SMA et laffiche.

Exercice 2

Ecrire un programme qui calcule sans utiliser une fonction


de <string>, la longueur dune chaine de caractres saisie.

88
8. CHAINES DE CARACTERES

Exercice 3

Ecrire un programme qui vrifie sans utiliser une fonction


de <string>, si une chaine CH introduite au clavier est un
palindrome.
Rappel:
Un palindrome est un mot qui reste le mme quon le lise
de gauche droite ou de droite gauche.
Exemple:
SMIA nest pas un palindrome
OTTO est un palindrome
12321 est un palindrome

89
Chapitre 9 : POINTEURS

90
9. Les pointeurs

Il existe deux manires d'utiliser une variable


1. Par son nom adressage direct
compilateur rserve de la mmoire pour la variable
exemple: int i =35;
2. Par son adresse adressage indirect
une variable de type pointeur contient l'adresse d'une
autre variable
Le lien entre pointeur et la variable pointe est gr
par le programmeur
Exemple:
int i =35;
int * p = &i;
91
9. Les pointeurs

Exemple:
int i =35;
int * p = &i;

92
9. Les pointeurs

Dclaration d'un pointeur


type * nom_du_pointeur
Exemples
char *pc; // on dclare un pointeur sur une variable de type char
int *pi; // pointeur sur entier
float *pf; // pointeur sur rel
Initialisation d'un pointeur
Un pointeur ne peut prendre quune adresse d'une variable
existant en mmoire
Il doit pointer vers une zone mmoire rserve par le
compilateur comme tant une variable

93
9. Les pointeurs

Utilisation de l'oprateur d'adressage &

int a;
int *pa,*pi;
pa = &a; //pa prend comme valeur ladresse de a, donc pa pointe sur a
pi = pa; //pi et pa pointe sur la mme adresse ( &a)

Utilisation de l'oprateur d'indirection *


Loprateur * donne le contenu de la variable pointe par un
pointeur

94
9. Les pointeurs

Exemple1
int i =8;
int *pi;
pi = &i;
printf(" le contenu du pointeur est %d: \n",*p);
*pi = 19;
printf(" le nouveau contenu du pointeur est %d: \n",*p);

95
9. Les pointeurs

Exemple1
int i = 35, j;
int *p, *q;
p = &i; //*p = 35
j = *p; //j = 35
*p = 10; // *p=i=10
i= 20; // i=*p=20
(*p)++; /* est quivalent i++, donc i=*p= 21 */
q = p; // p et q pointent maintenant ensemble vers la mme adresse
i=50 ; // i=*p=*q= 50

96
9. Les pointeurs
Tableaux et pointeurs

Tout tableau en C est un pointeur constant sur son premier lment.


Nom du tableau = adresse du premier lment du tableau
Exemple: int Tab [10]; //Tab &Tab[0]
Les lments du tableau sont stocks de faon contige on a:
Tab+ 1 &Tab[1]
Tab+ 2 &Tab[2]
En gnral Tab+ i &Tab[i]
*(Tab+i) donne le contenu de ladresse du ime lment du tableau (Tab[i])

97
9. Les pointeurs
Tableaux et pointeurs

Exemple:
int Tab[5] = {20, 2,-10, 3, 6};
*Tab Tab[0] = 20
*(Tab + 4) Tab[4]= 6
Tab +1 &Tab[1]

98
9. Les pointeurs
Tableaux et pointeurs
Exemple:

99
9. Les pointeurs
Tableaux et pointeurs

Remarque:
Le nom dun tableau est une pointeur constant sur son premier lment donc
lexpression Tab ++ (ou bien Tab = Tab +1) nest pas autoris
int tab[10];
int *P;
l'instruction: P = tab; est quivalente P = &tab[0];

P+i : pointe sur la ime composante du tableau elle est quivalente &tab[i],
avec i varie de 0 9 dans lexemple.
*(P + i) : est le contenu du ime lment du tableau tab c'est--dire tab[i].

100
9. Les pointeurs
Tableaux et pointeurs

Exemple2:

101
9. Les pointeurs
Tableaux et pointeurs

Exemple2:

102
9. Les pointeurs
Pointeurs et chanes de caractres

char *p= "Hello world";

p prend comme valeur ladresse du dbut de la chane "Hello world" non pas la
chane.

Exemple: affichage dune chaine de caractres laide dun pointeur


char * p = "Hello world";
for (p ; *p != '\0'; p++) // ou for (p;*p;p++)
printf("%c ", *p);

103
9. Les pointeurs
Pointeurs et chanes de caractres

char * p = "Hello world"; //(1)


char * q= "Salut"; //(2)
q=p ; //(3)
La reprsentation graphique de ces instructions est la suivante :

104
9. Les pointeurs
Pointeurs et chanes de caractres

char tab[] = "Hello world"; char tab[] = "Hello world";


tab= "Salut"; // erreur strcpy(tab,"Salut"); //correct

105
9. Les pointeurs
Tableau de pointeurs

Dclaration d'un tableau de pointeurs:


<Type> *<NomTableau>[<N>] : dclare un tableau <NomTableau> de <N>
pointeurs sur des donnes du type <Type>.

Exemple:
double *A[4]; /* un tableau de 4 pointeurs sur des rels du type double dont les
adresses et les valeurs ne sont pas encore dfinies*/

106
9. Les pointeurs
Tableau de pointeurs

char *JOUR[7] = {dimanche", lundi", mardi", mercredi", jeudi",


vendredi", samedi"};
/* un tableau JOUR[ ] de 7 pointeurs sur char. Chacun des pointeurs est
initialis avec l'adresse de l'une des 7 chanes de caractres.*/

107
9. Les pointeurs
Tableau de pointeurs

// Pour afficher les 7 chaines


int i;
for (i=0; i<7; i++)
puts(JOUR[i]);
/*Pour afficher les premires lettres
des jours de la semaine*/
int i;
for (i=0; i<7; i++)
printf("%c\n", *JOUR[i] );
/* Pour afficher la deuxime lettre des
jours de la semaine*/
int i;
for (i=0; i<7; i++)
printf("%c\n", *(JOUR[i]+1) );
108
9. Les pointeurs
Allocation dynamique de la mmoire

Exemple

109
9. Les pointeurs
Allocation dynamique de la mmoire
Tableaux deux dimensions (matrices)

Si on ne connat pas les dimensions du tableau :


ex : double ** tab; /* Il faut ensuite allouer un espace mmoire au tableau */
int L, C;
printf( donner le nombre de lignes et de colonnes :\n );
scanf( %d%d ,&L,&C);

/* Allocation de mmoire pour la premire dimension */


tab = (double**) malloc(L*sizeof(double*)); //On alloue les lignes de tab

/*Allocation de mmoire pour la seconde dimension */


for(i = 0 ; i <L ; i++) //pour chaque ligne de tab on alloue les colonnes
tab[i] = (double *) malloc(C*sizeof(double));
110
9. Les pointeurs
Allocation dynamique de la mmoire

La fonction calloc dont le prototype est:


void * calloc( unsigned N, unsigned taille_type);
rserve N lments de taille_type octets chacun. Elle retourne un pointeur
gnrique sur le premier octet ainsi allou ou NULL si lallocation na pu
russi.
L'espace allou est initialis 0.
Exemple:
float *F;
F = (float *)calloc(25, sizeof(float)); // rserve 25*sizeof(float) octets initialiss
0.0

111
9. Les pointeurs
Rallocation dynamique de la mmoire

La rallocation de la mmoire se fait laide de la fonction realloc:


void * realloc( void *bloc, unsigned taille);
Cette fonction permet de changer la taille affecte au bloc de mmoire fourni
par un prcdent appel malloc() ou calloc().
void *bloc : un pointeur vers un espace mmoire qui avait t dynamiquement
allou au pralable, via la fonction malloc ou une fonction quivalente.
taille: la nouvelle taille que nous souhaitons ajouter notre bloc mmoire.
En cas de succs, la fonction realloc retourne un pointeur sur la nouvelle zone
mmoire alloue

112
9. Les pointeurs
Rallocation dynamique de la mmoire

Exemple:
int N, *Tab;
printf("donner N: \n");
scanf("%d",&N);
Tab = (int *) malloc(N*sizeof(int));
if(Tab !=Null) // faire des traitements
Tab = (int *) realloc(Tab, 20*sizeof(int));
if(tab != NULL) // Utilisation de l'espace mmoire r-allou
else // Echec de la r-allocation mmoire

113
9. Les pointeurs
Libration de la mmoire alloue

Pour librer un espace mmoire dj allou par la fonction malloc, on utilise la


fonction free dont le prototype est le suivant :
void free(void *pointeur);
elle prend en paramtre un pointeur sur l'espace mmoire librer

114
9. Les pointeurs
Libration de la mmoire alloue

Exemple:
main( )
{
int nombre_elements;
scanf(%d,&nombre_elements);
int *tab = (int *)malloc(nombre_elements*sizeof(int));
if(tab != NULL) {
int i;
for(i=0 ; i<nombre_elements ; i ++)
scanf(%d, (tab+i));
for(i=0; i<nombre_elements ; i++)
printf("%d\n", *(tab+i));
free(tab);
}
else printf("Echec de l'allocation mmoire\n");
}

115
9. Les pointeurs
Intrts des pointeurs

Lutilisation des pointeurs est indispensable car ils sont troitement


lis la reprsentation des tableaux.
Allouer et librer de la mmoire dynamiquement, ce qui permet la
gestion de structures de taille variable, par exemple tableau de
taille variable
Permettre le passage par adresse des paramtres des fonctions
afin de changer leur valeurs
Raliser des structures de donnes rcursives (par exemple:
Listes chaines)

116
9. Les pointeurs
Intrts des pointeurs

Lutilisation des pointeurs est indispensable car ils sont troitement


lis la reprsentation des tableaux.
Allouer et librer de la mmoire dynamiquement, ce qui permet la
gestion de structures de taille variable, par exemple tableau de
taille variable
Permettre le passage par adresse des paramtres des fonctions
afin de changer leur valeurs
Raliser des structures de donnes rcursives (par exemple:
Listes chaines)

117
8. Les fonctions et procdures

La programmation modulaire

Un programme crit d'un seul tenant est difficile comprendre ds qu'il


dpasse une ou deux pages.

Une criture modulaire permet de scinder le programme en plusieurs


parties et de regrouper dans le programme principal les instructions
dcrivant les enchanements.

La programmation modulaire permet d'viter les squences


d'instructions rptitives et permet le partage d'outils communs qu'il
suffit d'avoir crits et mis au point une seule fois.

118
10. Les fonctions et procdures
Dfinition

Une fonction ou procdure ou encore sous programme est une suite


d'instructions lmentaires, mais vue du programme principal main().

Une fonction est caractrise par un appel et un


retour.
Le retour s'effectue aprs la dernire action de la fonction appele et le
programme continue juste aprs l'appel de la fonction..

Une fonction peut appeler une autre fonction. Le nom donn une
fonction doit tre reprsentatif de la fonction ralise (exemple :
perimetre_cercle pour une procdure calculant le primtre d'un cercle).

119
8. Les fonctions et procdures
Dfinition

Le programme principal main() et les fonctions ont besoin de se


communiquer des valeurs. Lors d'un appel d'une procdure les valeurs
passes sont les paramtres d'entre et la fin d'une fonction les
paramtres renvoys sont les paramtres de sortie.

120
8. Les fonctions et procdures
Les procdures

Une procdure est un ensemble d'instructions portant un nom. Pour


dfinir une procdure, on utilise la syntaxe:

Void nomprocedure ()
{
/*
Instructions
*/
}

Une procdure est une nouvelle instruction, il suffit pour l'excuter


d'utiliser son nom. Par exemple, pour excuter une procdure appele pr,
il suffit dcrire pr().
121
8. Les fonctions et procdures
Les procdures
Exemples
Le premier programme est crit sans
procdure:

# include <stdio.h>
int main()
{
printf("Bonjour\n");
return 0;
}

122
8. Les fonctions et procdures
Les procdures
Exemples
Et dans le deuxime, le printf est plac dans la procdure afficheBonjour
et cette procdure est appele depuis le main.

# include <stdio.h>
Void afficheBonjour ()
{
printf("Bonjour\n");
}
int main()
{
afficheBonjour ();
return 0;
}
123
8. Les fonctions et procdures
Les procdures
Variables locales
Une procdure est un bloc d'instructions et est sujette aux mmes rgles
que main. Il estdonc possible de dclarer des variables :

void nomprocedure ( )
{
/*
dclaration de variables
*/
/*
instructions
*/
}

124
8. Les fonctions et procdures
Les procdures
Variables locales

Attention, ces variables ne sont accessibles que dans le corps de la


procdure, cela signifie qu'elle naissent au moment de leur dclaration
et qu'elles sont dtruites une fois la dernire instruction de la procdure
excute. C'est pour cela qu'on les appelle des variables locales.

Une variable locale n'est visible qu'entre sa dclaration et l'accolade


fermant la procdure.

125
8. Les fonctions et procdures
Les procdures
Variables locales
Exemple, ce code est illgal :

# include <stdio.h>
void maprocedure ( )
{

Char a=b;
}
int main()
{
Char b = k;
printf("%c,
%c\n",a,b);
return 0;
}

126
8. Les fonctions et procdures
Les procdures
Variables locales
La variable b est dclare dans la procdure main, et n'est donc visible que dans
cette mme procdure. Son utilisation dans maProcedure est donc impossible.
De mme, la variable a est dclare dans maProcedure, elle n'est pas visible
dans le main.

Voici un exemple d'utilisation de variables locales :

# include <stdio.h>
void unAdix ( )
{

int i;
for (i=0;i<=10;i++)
printf(" %d \n ",i);
}
int main()
{
unAdix();
return 0;
} 127

Vous aimerez peut-être aussi