Vous êtes sur la page 1sur 63

Ecole suprieure de Technologie

Dpartement de Gnie Electrique


23/02/2012

Langage C

KHALID SBAI
Enseignant Chercheur
Ecole Suprieure de Technologie
Dpartement de Gnie Electrique

kh.sbai@yahoo.fr
Universit Moulay Ismal
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I. Structures de contrle

On appelle structure de contrle toute instruction qui


permet de contrler le fonctionnement dun programme.

Parmi les structures de contrle, on distingue :

structures de choix

structures rptitives

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I. Structures de contrle
I.1 Structures de choix

Les structures de choix permettent de dterminer


quelles Instructions seront excutes et dans quel ordre
ordre..
En C, les structures de choix peuvent tre exprimes par:

Linstruction de branchement
conditionnels:

If . else

Linstruction de branchement
multiple:

switch
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.1.1 Branchement conditionnel ( if else)

23/02/2012

Forme 1:
Syntaxe:

if(expression)
{
bloc dinstructions;
dinstructions;
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.1.1 Branchement conditionnel ( if else) (suite)

23/02/2012

Forme 2:
Syntaxe:

if(expression)
{
bloc dinstructions1;
dinstructions1;
}
else
{
bloc dinstructions2;
dinstructions2;
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.1.1 Branchement conditionnel ( if else) (suite)

23/02/2012

Remarques :
Lorsquon a plusieurs cas tester, on peut enchaner les if else

if(expression1)
instruction1
else
if(expression2)
instruction2
else
Lorsque plusieurs instructions if sont imbriques, il est
convenu que chaque else se rapporte au dernier if qui ne
possde pas de partie else.
else.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.1.1 Branchement conditionnel ( if else


else)) (suite)
Exemples :
if (var1==0)
printf("La
printf
("La variable est nulle \n");
else
//sinon
//sinon c'est faux
if (var1 > 0)
printf("Elle
printf
("Elle est positive \n");
else
printf("Elle
printf
("Elle est ngative");

if (var1!=0)
if (var1 > 0)
printf("Elle est positive\
positive\n");
else
printf("Elle est ngative\
ngative\n");

else se rapporte toujours au if le plus proche


Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.1.1 Branchement conditionnel (suite)


Oprateur conditionnel
Syntaxe:

(condition) ? instruction_vrai : instruct_faux;


Exemple :

x = 3;
0
y = 2;
=
max_xy = ( (x>=y)
=
1

max_xy = y;

x :

y);
max_xy = x;

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012
I.1.2 Branchement multiple ( switch )
Suitch est utilise lorsquune expression prend une valeur
parmi une suite de constantes.
Syntaxe :
switch(expression)
switch
(expression)
{
case constante_1 : instructions;
Break;
case constante_2 : instructions;
.
case constante_n : instructions;
default : instructions;
}
Attention. Lorsquil y a branchement russi un case, toutes
les instructions qui le suivent sont excutes, jusqu la fin du
bloc ou jusqu une instruction de rupture (break).
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.1.2 Branchement multiple ( switch )


Exemple 1:

23/02/2012

char choix;
printf("Taper 1 ou 2");
scanf("%c",&choix);
switch(choix)
{
case '1': printf("vous avez tape 1\
1\n");
break;
case '2': printf("vous avez tape 2\
2\n");
break;
default : printf("je vous ai dit 1 ou 2 pas %c\
%c\n",choix);
break;
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2 Structures rptitives ( Boucles )


Les structures rptitives (ou Boucles) permettent de
rpter une srie dinstructions tant quune certaine
condition reste vraie.

On appelle parfois ces structures instructions ditrations.


ditrations.
En C, les structures rptitives sont exprimes par:

For

While

Do . While

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.2.1 Structure rptitive: while

23/02/2012

Linstruction while reprsente un moyen dexcuter plusieurs


fois la mme srie dinstructions.
Syntaxe
while ( condition )
{
liste dinstructions
}
Dans la structure while on vrifie la condition avant
dexcuter la liste dinstructions.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2.1 Structure rptitive: while


Exemple : Calcule de la somme des entiers de 1 n
#include <stdio.h
stdio.h>
>
int I, S, n;
main () {
printf("Donner
printf
("Donner un entier positif :");
scanf("
scanf
(" %d",&n);
S=0;
I= 1;
while(I<=n
while
(I<=n))
{ S += I;
I++;
}
printf("Somme
printf
("Somme S= %d ", S);
return (0)
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2.2 Structure rptitive: do while


Linstruction do .. while reprsente un moyen dexcuter
plusieurs fois la mme srie dinstructions.
Syntaxe :
Do
{
liste dinstructions
}
while ( condition );
Dans la structure do .. while la condition est
vrifie aprs excution de la liste dinstructions.

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2.2 Structure rptitive: do while


Exemple : Calcule de la somme des entiers de 1 n
#include <stdio.h
stdio.h>
>
int I, S, n;
main () {
printf("Donner
printf
("Donner un entier positif :");
scanf("
scanf
(" %d",&n);
I=1;
S=0;
do
{ S += I;
I++;
}
wihle ( I<=n);
I<=n);
printf("Somme
printf
("Somme S= %d ", S);
return (0)
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2.3 Structure rptitive: For


Syntaxe:
for ( expr1 ; expr2 ; expr3 )
{
liste dinstructions
}
Dans la construction de la boucle for :

expr1 : effectue linitialisation avant lentre dans la boucle


expr2 : le test de continuation de la boucle; le test est valu
avant lexcution du corps de la boucle;
expr3 : est value la fin du corps de la boucle.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2.3 Structure rptitive: For


Remarques

En pratique, expr1 et expr3 contiennent souvent


plusieurs initialisations spares par des virgules.
Exemple :

calcul de n! sur une seule ligne

int i,f,n;
for(i=n, f=1; i>1; f *= i, i-i--);
);
Lorsque expr2 est absente, lexpression correspondante
est considre comme vraie.
Par consquent, for( ; ; ) est une Boucle infinie.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.2.3 Structure rptitive: For


Remarques (suite)

La boucle for peut tre traduite en boucle Tant .. Que.


for ( expr1 ; expr2 ; expr3 )
{
liste dinstructions
}

expr1;
while ( expr2 )
{
liste dinstructions;
expr3;
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.2.3 Structure rptitive: For


Exemples
Calcule de la somme des entiers de 1 n

23/02/2012

#include <stdio.h
stdio.h>
>
int I, S, n;
main ()
{
printf("Donner
printf
("Donner un entier positif :");
scanf("
scanf
(" %d",&n);
for(S=0, I= 1; I<=n;
I<=n; I++)
S += I;
printf("Somme
printf
("Somme S= %d ", S);
return (0)
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.3 Instructions break et continue


I.3.1 linstruction break
Linstruction break peut tre employe lintrieur
de nimporte quelle boucle.

Elle permet labandon de la structure et le passage la


premire instruction qui suit la structure.
En cas de boucles imbriques, break fait sortir de la
boucle la plus interne.

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.3.1 linstruction break


Exemple1

s = 0;
for(i=0; i<10; i++)
{
scanf(%d,&n);
if(n<=0)
break;
s += n;
}

Exemple2
#include <stdio.h>
int main( )
{ int i, j ;
for (i = 1 ; i<=15 ; i++)

{
for (j = 1 ; j<=15 ; j++)

{
if (j = = 5) break ;
printf("%d\\t", i * j) ;
printf("%d

}
printf("\\n") ;
printf("

}
return 0 ;
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.3.1 linstruction break (suite)

23/02/2012

Exemple3

x=1;
While (x<=10)
{
a = xx-7;
printf("%f", 1/a);
x++;
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

I.3.1 linstruction break (suite)


Exemple3
x=1;
while(x<=10)
{
a = xx-7;
if (a == 0)
{
printf("/ par 0");
break;
}
printf("%f", 1/a);
x++;
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.3.2 linstruction continue

23/02/2012

Linstruction continue peut tre employe lintrieur


d'une structure de type boucle (for ; while ; do ..while ).

Sert sauter litration courante de la boucle la plus


interne dans laquelle elle se trouve, et passer
linstruction suivante
suivante..

Linstruction continue concerne la boucle la plus proche.

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.3.2 linstruction continue (suite)

23/02/2012

Exemple1

x=1;
while(x<=10)
{
a=1/(x-7);
a=1/(xprintf("%f",a);
x++;
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

I.3.2 linstruction continue (suite)

23/02/2012

Exemple2
x=1;
while(x<=10)
{
if (x==7)
{
printf("division par 0");
x++;
continue;
}
a=1/(x--7);
a=1/(x
printf("%f",a);
x++;
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II. Les Tableaux


Utilit des tableaux:
Exemple:: Calcul dune moyenne de n notes
Exemple
Solution sans tableau:
tableau:
Dclarer autant de variables que de notes
crire la somme de ces n variables
Implique de connatre au dpart le nombre de notes
(pour dclarer le bon nombre de variables).

Notation trs lourde (surtout si beaucoup de notes grer)


Ide : rassembler toutes cas variables dans une structure
de donne particulire : le tableau
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

II. Les tableaux

23/02/2012

II.1 Tableaux 1 dimension


Dfinition

Un tableau est une structure de donne qui contient une


collection d'lments de mme type (ex : tableau dentiers,
de rels, ).
Le nombre des lments dun tableau, appels "composantes
"composantes
du tableau , dfini la dimension du tableau.
tableau.
Chaque lment a une position dfinie dans le tableau:
tableau:
dsigne par un indice qui est ncessairement de type entier
entier..
En faisant le rapprochement avec les mathmatiques, on
dit encore que "A est un vecteur de dimension N"
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Dfinition

 Un tableau est une variable compose de plusieurs


variables de mme type.
type.
 Contenant une collection de valeurs de mme type.
 Comme toutes les variables, le tableau a un nom.
 Chaque lment du tableau est dsign par ce nom
et par sa position.
Exemple

Tableau de 10 entiers

index

valeur

10

45

21

37

98

-5

12

45

-20

37

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Dclaration
Syntaxe:

Type_donnee Ident_Tab [NbElem


NbElem];
];
Type_donnee : nimporte quel type valide.
(entier, rel, caractres, ..).
Ident_Tab : le nom du tableau
NbElem : le nombre maximal dlments du tableau
Cest une constante littrale ou symbolique (#define
(#define))
On lappelle aussi la dimension (ou taille) du tableau
La taille dun tableau est fixe sa dclaration.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Exemple
int T[5];

ou

#define N 5
int T[N];

T dsignera un tableau contenant 5 valeurs de type entier


En C, les indices valides seront compris entre 0 et 4 inclus
Indice < nombre dlments du tableau
Chaque lment du tableau sera dsigne par son indice
On peut accder la premire composante du tableau par
T[0], la deuxime composante par T[1], . . . , la dernire
composante par T[NT[N-1].
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Initialisation dun tableau
Par dfaut les tableaux sont "vides" : pas initialiss

Cest incorrect daccder une case qui ne contient rien.


Initialiser un Tableau cest donner chacune des cases du
tableau une valeur.
Exemple:

int A[5] = {10, 20, 30, 40, 50};

==> initialisation des cinq lments du tableau par des valeurs


int B[5] = {0};
==> tous les lments du tableau sont initialiss zro
(initialisation en bloc)
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

II.1 Tableaux 1 dimension (suite)


Remplissage
Complet (toutes les cases contiennent une valeur)
3

23/02/2012

Partiel : certaines cases sont vides


3

Cases entre deux indices i et j donns remplies

6
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

II.1 Tableaux 1 dimension (suite)

23/02/2012

Remarques:
int T[20];
dclare un tableau baptis T de 20 lments de type int
int i;
dclare une variable lmentaire i pouvant servir indicer
un tableau
T[i]
utilisable comme une varaible lmentaire, cest llment
dindice i du tableau T.
(T[3])++
incrmente de 1 llment dindice 3 de tableau T, qui est
le 4me lment de ce tableau
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Tableaux et boucle for( ; ; )
Les tableaux sexploitent souvent avec la boucle for
parce que lon connat leur nombre dlments

parce quelle permet dinitialiser un indice (premier


(premier terme)
terme)
de dfinir quand le traitement sarrte (second terme)
de dfinir comment la progression a lieu (troisime terme)

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Exemple dutilisation des tableaux en C
:
int main(
main(void
void))
{
int T[10
T[10];
];
int i;
/* remplir le tableau */
i= 0;
while(i
while
(i < 10)
{
T[i]=
T[i
]= i;
i= i+1;
}
return 0;
}

Dclaration du
tableau de 10 entiers

Remplissage de chaque
case par la valeur de
son indice

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.1 Tableaux 1 dimension (suite)


Exemple

#include <stdio.h>
stdio.h>
void main()
{
int i;
float moyenne
moyenne,, somme, temperature
temperature[7];
[7];
for (i=0;i<7;i++)
{
printf("
printf
("Temperature
Temperature[%d]=",i);
[%d]=",i);
scanf("%f",&
scanf
("%f",&temperature
temperature[i]);
[i]);
}
somme=0;
for (i=0;i<7;i++)
somme += temperature
temperature[i];
[i];
moyenne=somme/7;
moyenne
=somme/7;
printf("la
printf
("la temprature moyenne de la semaine est
est=%f
=%f\\n",moyenne);
n",moyenne);
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

II.1 Tableaux 1 dimension (suite)

23/02/2012

Voici les points importants retenir :


1. On accde un lment du tableau en lui appliquant loperateur
[ ].
2. Les index des lments dun tableau vont de 0 NN-1 o N est le
nombre dlments du tableau.
3. Indice < nombre dlments du tableau !!!
4. la taille dun tableau DOIT tre connue statiquement par le
compilateur.
Impossible donc dcrire int t[n] ou n est une variable.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

II.1 Tableaux 1 dimension (suite)

23/02/2012

Exercice :
Ecrire un programme qui lit la dimension N d'un tableau T du
type int (dimension maximale: 20 composantes), remplit le
tableau par des valeurs entres au clavier et affiche le tableau.
Calculer et afficher ensuite la somme des lments du tableau.

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension

Dfinition
En C, un tableau deux dimensions est interprter comme un
tableau (uniuni-dimensionnel
dimensionnel)) de dimension L dont chaque
composante est un tableau (unidimensionnel) de dimension C.

L le nombre de
lignes du tableau

C le nombre de colonnes du tableau


L et C sont alors les deux dimensions du tableau.
Un tableau deux dimensions contient donc L*C composantes.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Utilit
Modlisation de la notion mathmatique de matrice
Modliser une surface ou un plan

collection de mesures de diffrents capteurs

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Exemple: Mesure de temprature de diffrents capteurs
Mesure

Capteur de temprature

10

7.5

12

13.5

15

12

10

12

14

12

10

12

13.5

14

4.5

8.5

10

10

12

14.5

12

5.5

10

9.5

13.5

10.5

14

11

7.5

10.5

12.5

14.5

11.2

9.5

10.5

11.5

12.5

14.5

10

9.5

8.5

11

10

13.5

6.5

12

13.5

15.5

14

10.5

14.5

12

9.5

13.5

18

15.5

8.5

10.5

4.5

6.5

10

12.5

10.5

11.5

13.5

14

10

4.5

15

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Dclaration

Type_donne Indent_Tab
Indent_Tab[[Nlign][Ncol
Nlign][Ncol];
];
Type_donnee : cest le type de donnes prciser pendant
la dclaration (entier, rel, caractres, ..).
Ident_Tab : le nom du tableau
Nlign et Ncol : reprsente le nombre de lignes et de colonne
maximal du tableau. Ce sont des constantes
littrales ou symbolique.
Exemple:

long A[10][10];
float B[2][20];
int C[3][3];
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Rservation
Les composantes d'un tableau deux dimensions
sont stockes ligne par ligne dans la mmoire.

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

II.2 Tableaux 2 dimension (suite)

23/02/2012

Initialisation et Rservation

On peut dclarer et initialiser les composantes dun tableau


2 dimension en indiquant la liste des valeurs respectives
entre accolades.
Exemple
int A[3][4] ={{ 0,10,20,30},
rservation de
{10,11,12,13},
3*4*2 = 24 octets
{1,12,23,34}};
Si le nombre de lignes L (ou de colonnes) n'est pas
indiqu explicitement:
Exemple
int A[ ][4] ={{ 0,10,20,30},
rservation
{10,11,12,13},
automatique de
{1,12,23,34}};
3*4*2 = 24 octets
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Accs aux lments du tableau
En C, les indices du tableau varient de 0 LL-1, respectivement
de 0 CC-1.
Considrons un tableau T de dimensions L et C.
T[0][0]

T[0][1]

T[1][0]

Premier
Elment
T[0][0]

Dernier
Elment
T[L--1][CT[L
1][C-1]

T[2][1]

T[6][7]

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Exemple:
#include <stdio.h
stdio.h>
>
#define L 3
//nombre de lignes
#define C 2
//nombre de colonnes
short t[L][C]
t[L][C] = {{1, 2}, {14, 15}, {100, 200}};
int main()
{
int i, j;
for (i = 0 ; i < L; i++) {
for (j = 0; j < C; j++)
printf("tab[%d][%d]=%d
printf
("tab[%d][%d]=%d\\n",i,j,t
n",i,j,t[i
[i][j]);
][j]);
}
return 0;
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

II.2 Tableaux 2 dimension (suite)


Exercice:
Ecrire un programme qui transforme un
tableau M deux dimensions L et C, en
un tableau V une dimension L*C.

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

III. Chanes de caractres


Dfinition

En C, il nya pas de type particulier pour les chanes de


caractres.
Une chane de caractres est un tableau unidimensionnel
de caractres
Le nom de chane fait rfrence ladresse de dbut du
premier caractre de la chane
Une chane de caractres bien ferme est toujours termine
par un caractre nul \0:
Indique o le contenu utile de la chane se termine
Ne pas oublier de compter rserver sa place.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

III. Chanes de caractres


Dclaration et initialisation
On peut dclarer et initialiser une chane de caractres
comme on dclare un tableau de caractres .
char t[6] = {a,b,c,\
{a,b,c,\0};
Exemple:

Char t[20] ;
char t2[] = Bonjour
Bonjour;
char s[10] = Salut
Salut ;
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

III. Chanes de caractres


Affichage de chanes

Directement dans printf si chane simple


Code %s pour afficher des chanes
La chane est affiche jusquau premier \0 rencontr

Exemple:
char t[]= "Bonjour\
"Bonjour\n";
printf ("Bonjour\
("Bonjour\n");
printf ("%s", t);

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

III. Chanes de caractres


Lecture de chanes
On peut utiliser scanf:
Code "%s"
Exemple:
char str
str[10];
[10];
printf(" Entrez votre nom :");
printf("
scanf("%s",
scanf
("%s",str
str);
);

Pas besoin du "& " car une chane est dj


une rfrence sur une zone mmoire
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

III. Chanes de caractres

23/02/2012

Lecture et criture de chanes

A ct des fonctions printf et scanf,


scanf, on trouve les deux
fonctions puts et gets,
gets, spcialement conues pour
lcriture et la lecture de chanes de caractres
puts(( Chaine )
puts
crit la chane de caractres dsigne et provoque
un retour la ligne.
gets(( Chaine)
gets
lit une ligne de caractres et la copie l'adresse
indique par <Chane>.
Le retour la ligne final est remplac par le
symbole de fin de chane '\
'\0'.
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

III. Chanes de caractres

23/02/2012

Lecture et criture de chanes


Exemple:
#include <stdio.h
stdio.h>
>
main()
{ char nom[20], prenom
prenom[20],
[20], ville[25];
printf("quelle
printf
("quelle est votre ville : ");
gets(ville);
gets
(ville);
printf("Donnez
printf
("Donnez vos nom et prenom : ");
scanf("%
scanf
("%s",
s", nom);
gets((prenom
gets
prenom);
);
printf("Bonjour
printf
("Bonjour cher %s %s, qui habite a ", prenom,
prenom, nom);
puts(ville);
puts
(ville);
}
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

III. Chanes de caractres


Bibliothque de chanes : string.h.
string.h.

23/02/2012

Les chaines de caractres peuvent tre manipuls grce une


bibliothque de fonctions spciales, dcrites dans le fichier string.
string.h.

Principales fonctions :  Copie une chaine: strcpy


strcpy((dest
dest,, source);
source);
 Simple
char* strcpy(char*
strcpy(char* Dest, const char* Source);
 Avec limitation de la taille de la destination
char* strncpy(char*
strncpy(char* Dest, const char* Source, int N);
Si la destination est remplie, le \
\0 terminal nest pas plac !
 Possibilit de chanage des appels: Les fonctions strcpy retournent
le paramtre Dest.
strcpy((dest2,
strcpy
dest2, strcpy(
strcpy(dest1,
dest1, source));
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

Principales fonctions :
Concatnation : strcat
strcat((dest
dest,, source);
source);
 Simple
char* strcat(char*
strcat(char* Dest, const char* Source);
 Avec limitation de la taille de la destination
char* strncat(char*
strncat(char* Dest, const char* Source, int N);
 Possibilit de chanage des appels: Les fonctions strcat
retournent le paramtre strDest.
strDest.
strcat((strcat(
strcat
strcat(dest,
dest, source1),
source1), source2);
source2);

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

Principales fonctions :
Comparaison : strcmp
strcmp((chaine1,
chaine1, chaine2);
chaine2);
 Simple
int strcmp
strcmp(const
(const char * ch1,
ch1, const char *ch2
*ch2);
);
 Avec limitation de la taille utilise
int strncmp
strncmp(const
(const char* ch1
ch1,, const char* ch2
ch2,, int N);
 Comparaison caractre par caractre des valeurs numriques des
Caractres.
 Rsultat
 0 si les chanes sont identiques.
 < 0 si ch1 < ch2
 >0 si ch2 > ch1
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

Principales fonctions :
Comparaison insensible aux majuscules et minuscules:
stricmp((chaine1,
stricmp
chaine1, chaine2
chaine2);
);

23/02/2012

 Simple
int stricmp
stricmp(const
(const char * ch1,
ch1, const char *ch2
*ch2);
);
 Avec limitation de la taille utilise
int strnicmp
strnicmp(const
(const char* ch1
ch1,, const char* ch2
ch2,, int N);
 Comparaison caractre par caractre des valeurs numriques des
Caractres, indpendamment des majuscules et minuscules.
 Rsultat
 0 si les chanes sont identiques.
 < 0 si ch1 < ch2
 >0 si ch2 > ch1
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

Principales fonctions :
Comparaison
ch1

ch2

strcmp

stricmp

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique

Principales fonctions :

23/02/2012

Recherche

char* strchr(
strchr(const char* ch
ch,, int c);
// retourne l'adresse de la premire occurrence d'un caractre
dans une chaine

char* strrchr(
strrchr(const char* ch
ch,, int c);
// retourne l'adresse de la premire occurrence d'un caractre
dans une chaine en partant de la droite

size_t strcspn
strcspn((const char* ch
ch,, const char* chCharSet);
chCharSet);
// retourne l'indice de la premire occurrence dans une chaine
d'un caractre pris dans un ensemble

size_t strspn
strspn((const char* ch
ch,, const char* chCharSet);
chCharSet);
// retourne l'indice de la premire occurrence dans une chaine
d'un caractre ne figurant pas dans un ensemble
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

Exemple:
#include <stdio.h
stdio.h>
>
#define N 50

void main()
{
int lg;
char chaine[N];
printf("saisir
printf
("saisir une chaine : ");
gets(chaine);
gets
(chaine);
for (lg=0; chaine[lg] !=\
!=\0; lg++);
lg++);
printf("longueur
printf
("longueur de la chaine = %d ", lg);
}

Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

Oprations sur les chanes de caractres


 stdio apporte des fonctions travaillant avec des chanes :
 sprintf
identique printf
printf,, mais crit dans une chane au
lieu de lcran.
 sscanf
identique scanf
scanf,, mais lit depuis une chane au
lieu du clavier.
 Exemples
double tension, courant;
char source[] = "3.2 4.7";
char destination[80];
sscanf(source,
sscanf
(source, "%
"%lf
lf%
%lf",
lf", &tension, &courant);
sprintf(destination,
sprintf
(destination, "Tension : %3.2f", 4.5);
Khalid SBAI Cours dinformatique

Ecole suprieure de Technologie


Dpartement de Gnie Electrique
23/02/2012

FIN

Khalid SBAI Cours dinformatique

Vous aimerez peut-être aussi