Vous êtes sur la page 1sur 60

Universit Cadi Ayyad

Ecole Nationale des Sciences Appliques


Marrakech

Elabor et prsent par Miloud LAHMAIM


Ingnieur-Enseignant lENSA de Marrakech
lahmaim@gmail.com

2me anne du Cycle Prparatoire


Anne universitaire 2015-2016
Semestre 2

Plan
Partie 1: Rappels
Partie 2: C avanc
Partie 3: Graphique avec C

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure alternative,
La structure rptitive,
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

Partie 1:Avant propos

Linformation:

Information: Nombre, Texte, Vido, Image.

Nimporte quelle information peut tre code sous forme


dune suite de 1 et 0 (bit).

Exemples de codage : ASCII, MPGE, JPG, GIF, H.264...

La communication se fait via: Signal lectrique (exp: +5V=1


et -5V=0), Onde magntique (Wifi), Lumire (fibre
optique)

bit = 0 ou 1.
Octet (Byte en anglais) = 8 bits
Ko=KB=210 octets, Mo=220 octets, Go=230 octets
Kb=kilobit= 103 bits, Mb=106 bits, .

Partie 1:Avant propos

Informatique:

Linformatique: le domaine d'activit scientifique,


technique et industriel concernant le traitement
automatique de l'information.

Linformatique se compose de deux parties:


SoftWare et HardWare.

SoftWare:

Partie 1:Avant propos

Software: tout ce qui est non matriel.


Langage: protocole qui sert envoyer et recevoir
une information(communication).
Langage machine: langage de haut niveau
comprhensible par la machine (binaire).
Langage de programmation: comprhensible par le
programmeur et non par la machine(C, Java, C++,
PHP, HTML).
Programme: ensemble de constructions (ordres)
crites via un langage de programmation.
Logiciel: Ensemble de programmes(Office, ).
Systme dexploitation: Ensemble de logiciels (Linux,
Windows, IOS, Android,)
6

HardWare:
HardWare: quipement lectrique (Ordinateur,
Smartphone, Rcepteur Satellite).
Un quipement informatique se compose de:
priphrique dentre, priphrique de sortie et
unit centrale de traitement.
Entre: clavier, souris, scanner, camra.
Sortie: Ecran, imprimante,
Unit centrale: Microprocesseur, Mmoires,
Cartes

Partie 1:Avant propos

Microprocesseur:
Caractris par: Marque(Intel, AMD,) et
Frquence(Nombre doprations par second, en
GHz).
Coordonne le reste des lments,
Il se charge des calculs(+-x/, et ou).
Il excute les instructions qui ont t
programmes.
Toutes les informations qui circulent dans
lordinateur passent par lui.

Partie 1:Avant propos

Mmoire:
Toutes les informations doivent tre stockes
dans une mmoire.
Disque dur: grande capacit (To), les
informations sont stockes sous format de
fichiers (lecture et criture).
ROM: faible capacit (Mo), conserve les donnes
ncessaires au dmarrage de l'ordinateur
(lecture seulement et non effaable).
RAM: Moyenne Capacit (Go), conserve les
donnes traites par un programme (lecture et
criture).

Partie 1:Avant propos

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure alternative,
La structure rptitive,
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

10

Identification des fichiers

Lors de la programmation en C, nous travaillons avec diffrents types de


fichiers qui sont identifis par leurs extensions:

Partie 1: Environnement et compilation

*.C
fichiers source (le code source du programme) : compris seulement par le
programmeur
*.OBJ
fichiers compils (versions objet)
*.EXE
fichiers compils et lis (versions excutables): compris seulement par la
machine

*.LIB
bibliothques de fonctions prcompiles
*.H
fichiers en-tte qui contiennent la dclaration des fonctions (header files)
11

Compilation

Partie 1: Environnement et compilation

La compilation et la fait de traduire le fichier .C crit par le programmeur (code


source non comprhensible par la machine) vers un fichier .EXE crit en
langage machine (non comprhensible par le programmeur).

12

Compilation

Partie 1: Environnement et compilation

Pour programmer on aura besoin dun


programme regroupant les lments suivants :
Un diteur de texte pour rdiger le code source d'un
fichier *.C en langage C.
Un compilateur pour faire la fameuse traduction.
Un dbugger pour traquer les erreurs dans le code
source.

Ce programme 3 en 1 est appel IDE


(Integrated Development Environment, environn
ement de dveloppement intgr en franais).
Il existe beaucoup d'IDE payants ou non. (DEV
C++, CodeBlock, Turbo C.)

13

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure alternative,
La structure rptitive,
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

14

Format dun programme


-

Inclusion des bibliothques

(Obligatoire si on veut utiliser une fonction non


dclare)

Dclarations globale
(Optionnelle)

Partie 1: Notions de base

Dclarations ou dfinition
des fonctions
(Obligatoire si on veut utiliser cette fonction
aprs)

#include<NomBib1.h>
.
Type1 NomVariable1;
.
Type NomFonction(Type1
Param1,.)
{
Dclaration locale
Instructions
}
.

main()
{

Dfinition de la fonction main


(Obligatoire)

<dclarations>
<instructions>
return 0;
15

fonctions
Fonction (in) = out
in = les paramtres de la fonction
out = le rsultat de la fonction
in et out peuvent tre vide (void)
Pour utiliser une fonction dans un programme on
doit dclarer auparavant le fichier .h o cette
fonction est dclare: par exemple si on veut
utiliser une fonction mathmatique on doit
inclure au dbut du code source la ligne
#include<math.h>

Partie 1: Notions de base

16

Dfinition dune fonction


<TypeRs> <NomFonct> (<TypePar1> <NomPar1>, <TypePar2> <NomPar2>, ... )
{
<dclarations locales>
<instructions>
}

Une fonction en C fournit un rsultat dont le type


doit tre dfini. Si aucun type n'est dfini
explicitement, C suppose par dfaut que le type du
rsultat est int (integer).
Le retour du rsultat se fait en gnral la fin de la
fonction par l'instruction return.
Le type d'une fonction qui ne fournit pas de rsultat
est dclar comme void (vide).
Si une fonction n'a pas besoin de paramtres, les
parenthses restent vides ou contiennent le
mot void.

Partie 1: Notions de base

17

La fonction main
main()
{
<dclarations>
<instructions>
return 0;
}

La fonction principale main est obligatoire dans


tous les programmes.
Le type de main est le type par dfaut (int).
main renvoie la valeur 0 pour indiquer
l'environnement que le programme s'est termin
avec succs, sans anomalies ou erreurs fatales.

Partie 1: Notions de base

18

Variable
La RAM est une grande commode compose
de plusieurs tiroirs ayant chacun une adresse et
une valeur.
Une variable est une information stocke dans la
mmoire vive comportant une adresse et une valeur.
L'adresse d'une variable est indique par le nom de
la variable prcd du signe &.
A=90 => &A=0
B=256 => &B=1
C=A => &C=3 (Le caractre A le code ASCII = 65)

Partie 1: Notions de base

Adresse
bits
Valeur

0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
90

256

65
19

Les identificateurs
Les noms des fonctions et des variables en C
sont composs d'une suite de lettres et de
chiffres.
Le premier caractre doit tre une lettre.
L'ensemble des symboles utilisables est donc:
{0,1,2,...,9,A,B,...,Z,_,a,b,...,z}
C distingue les majuscules et les minuscules, ainsi:
int a,A; a et A sont deux variables diffrentes.

Partie 1: Notions de base

20

Les commentaires
Un commentaire commence toujours par les
deux symboles '/*' et se termine par les
symboles '*/'.
Il est interdit d'utiliser des commentaires
imbriqus.
Exemples
Partie 1: Notions de base

/* Ceci est un commentaire correct */


/* Ceci est /* videmment */ dfendu */

Un commentaire nest pas pris en considration


par un compilateur.
21

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure alternative,
La structure rptitive,
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

22

Les types simples: Entiers


Partie 1: Types de base, Oprateurs et Expressions,

dfinition

description

char
caractre
short
entier court
int
entier standard
long
entier long
unsigned char
caractre
unsigned short
entier court
unsigned int
unsigned long

entier standard
entier long

domaine min

domaine max

-128
-32768
-32768
-2147483648
0
0

127
32767
32767
2147483647
255
65535

1
2
4
4
1
2

0
0

65535
4294967295

4
4

Char B=A est quivalent char B=65


Le nombre doctets dpond de la machine.
La fonction sizeof(type) ou sizeof(variable) renvoie la
taille concerne en octet.

23

Partie 1: Types de base, Oprateurs et Expressions,

Les types simples: Rationnels


<+|->
<mantisse>
<exposant>

dfinition

Nombre rationnel = <+|-> <mantisse> * 10<exposant>


est le signe positif ou ngatif du nombre
est un dcimal positif avec un seul chiffre devant la virgule.
est un entier relatif

prcision

float
simple
double
double
long double
long

mantisse

domaine min

domaine max

octets

6
15
19

3.4 * 10-38
1.7 * 10-308
3.4 * 10-4932

3.4 * 1038
1.7 * 10308
1.1 * 104932

4
8
10

Le nombre doctets dpond de la machine.

La fonction sizeof(type) ou sizeof(variable)


renvoie la taille
24

Dclaration des variables simples


Le syntaxe de la dclaration est :
<Type1> <NomVar1>,<NomVar2>,...,<NomVarN>;
Qui est quivalent : <Type1> <NomVar1>;
<Type1> <NomVar2>;
..
La dclaration = la rservation des espaces mmoires dans la
RAM avec la valeur dj existante dans la RAM (alatoire)
int A,a,B;

Variable

Taille

Valeur

3980

439405

453

15

115

114

113

112

111

110

109

108

107

106

105

104

102

101

Adresse

103

entraine la rservation suivante

char K;
100

Partie 1: Types de base, Oprateurs et Expressions,

25

Initialisation des variables


On utilise loprateur = pour linitialisation :
type A=1; type A; A=1;
type A,B,C; A=B=C=1; type A=1, B=1, C=1;
Exemple:
int A=1,a,B=3;
char K=B;
entraine la rservation et linitialisation suivantes:
Variable

Taille

Valeur

439405

66

115

114

113

112

111

110

109

108

107

106

105

104

103

102

101

Adresse

100

Partie 1: Types de base, Oprateurs et Expressions,

26

Les oprateurs
Partie 1: Types de base, Oprateurs et Expressions,

Oprateurs arithmtiques

+
*
/
%

addition
soustraction
multiplication
division (entire et rationnelle!)
modulo (reste d'une div. entire)
Oprateurs

&&
||
!

Oprateurs de comparaison

==
!=
<, <=,
>, >=

gal
diffrent de
plus petit que,..

logiques

et logique (and)
ou logique (or)
ngation logique (not)

Les rsultats des oprations de comparaison et des oprateurs logiques sont du type int:
- la valeur 1 correspond la valeur boolenne vrai
- la valeur 0 correspond la valeur boolenne faux
Les oprateurs logiques considrent toute valeur diffrente de zro comme vrai et zro
comme faux:
32 && 2.3
!65.34
0||!(32 > 12)

donne 1
donne 0
donne 0
27

Partie 1: Types de base, Oprateurs et Expressions,

Oprateurs particuliers

Pour Op un oprateur arithmtique et V une variable :

V = V Op Constante ; VOp=Constante;
Exemple :
V=V+2 ; V+=2;
V=V+1 ; V++; ou ++V;
V=V-1; V--; ou V;
X = V++; passe d'abord la valeur de V X et incrmente aprs
X = V--; passe d'abord la valeur de V X et dcrmente aprs
X = ++V;incrmente d'abord et passe la valeur incrmente X
X = --V;dcrmente d'abord et passe la valeur dcrmente X

Exemple : Supposons que la valeur de N est gal 5:


Incrm. postfixe: X = N++; donne rsultat: N=6 et X=5
Incrm. prfixe: X = ++N;
donne rsultat: N=6 et X=6
28

Priorit des oprateurs


Priorit 1 (la plus forte):
Priorit 2:

Partie 1: Types de base, Oprateurs et Expressions,

Priorit 3:
Priorit 4:
Priorit 5:
Priorit 6:

Priorit 7:
Priorit 8:
Priorit 9 (la plus faible):

()
! ++ -* / %
+ < <= > >=
== !=
&&
||
= += -= *= /= %=

Si nous avons une suite d'oprateurs binaires de la


mme classe, l'valuation se fait en passant de la
gauche vers la droite dans l'expression.
Pour les oprateurs unaires (!,++,--) et pour les
oprateurs
d'affectation
(=,+=,-=,*=,/=,%=),
l'valuation se fait de droite gauche dans
l'expression.
29

Expressions et constructions
Une expression est une combinaison entre
variables, constantes, fonctions lis entre eux via
des oprateurs.
Une expression renvoie une valeur.
Exemple : A=B=C=3 renvoie la valeur 3
Une instruction (ordre) est une expression qui se
termine par ;
Exemple : A=B=C=3; affecte 3 C aprs C B
aprs B A. en rsultat A, B,C auront la valeur 3.
Question: quelle est la valeur de A+(A=B=C=3)

Partie 1: Types de base, Oprateurs et Expressions,

30

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure alternative,
La structure rptitive,
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

31

Squences dchappement & spcificateurs de format

Les squences dchappement sont des caractres (char)

Partie 1: Lire et crire des donnes,

\a
\b
\t
\n
\r
\0

sonnerie

Squences dchappement
trait oblique
\\

curseur arrire
tabulation
nouvelle ligne
retour au dbut de ligne

NUL

Les spcificateurs de
format indiquent la manire
dont les expressions vont tre
Affiches sur la console.

\?
\'
\"
\f
\v

point d'interrogation
apostrophe
guillemets
saut de page (imprimante)

tabulateur vertical

SYMBOLE

TYPE

IMPRESSION COMME

%d ou %i
%u
%o
%x
%c
%f
%e
%s

int
int
int
int
int
double
double
char*

entier relatif
entier naturel (unsigned)
entier exprim en octal
entier exprim en hexadcimal
caractre
rationnel en notation dcimale

rationnel en notation scientifique


chane de caractres
32

Ecriture formate
La fonction printf() est dans la bibliothque stdio.h
Le syntaxe est : printf("<format>",<Expr1>,<Expr2>, ... )
La partie "<format>" est en fait une chane de caractres
qui peut contenir:
* du texte
* des squences d'chappement
* des spcificateurs de format
Exemple:
char B = 'A';
printf("Le caractre %c a le code %i !\n", B, B);
Va afficher :
Le caractre A a le code 65 !

Partie 1: Lire et crire des donnes,

33

Ecriture formate
Pour les entiers, nous pouvons indiquer la largeur
minimale de la valeur afficher. Dans le champ ainsi
rserv, les nombres sont justifis droite:
printf("%4d", 123); ==> _123
Pour les rationnels, nous pouvons indiquer la largeur
minimale de la valeur afficher et la prcision du
nombre afficher. La prcision par dfaut est fixe six
dcimales. Les positions dcimales sont arrondies la
valeur la plus proche.
printf("%12f", 100.123); ==> __100.123000
printf("%.2f", 100.123); ==> 100.12
printf("%5.0f", 100.123); ==> __100

Partie 1: Lire et crire des donnes,

34

Lecture formate

Partie 1: Lire et crire des donnes,

La fonction scanf() est dans la bibliothque stdio.h


Le syntaxe est : scanf("<format>",<Adr1>,<Adr2>, ...)
La partie "<format>" contient des signes despacement et
des spcificateurs de format.
Dans la chane de format, les symboles \t, \n, \r ont le mme
effet qu'un simple espace.
Si la chane de format contient aussi d'autres caractres que
des signes d'espacement, alors ces symboles doivent tre
introduits exactement dans l'ordre indiqu.
scanf retourne comme rsultat le nombre de donnes
correctement reues.
C
A
B
Exemple
12 14
1
12

int A,B,C;
C=scanf("%d/%d ",&A,&B);

12/14

12

12.3/14

12

14
35

Ecriture et lecture dun caractre


putchar(A); printf("%c",A);
Exemple :
Putchar(65); putchar(A); affiche la lettre A
getchar(A); scanf("%c",&A);
getchar fournit les donnes seulement aprs
confirmation par 'Enter.
La bibliothque <conio> contient une fonction du
nom getch qui fournit immdiatement le
prochain caractre entr au clavier sans lafficher,
cette fonction peut tre utiliser pour lire un mot
de pass.

Partie 1: Lire et crire des donnes,

36

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure conditionnelle,
La structure rptitive,
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

37

Partie 1: Structure conditionnelle,

If-else
if ( <expression> )
<bloc d'instructions 1>
else
<bloc d'instructions 2>
Dans ce cas deux scnarios possibles:
Si l'<expression> fournit une valeur diffrente de zro alors le <bloc
d'instructions 1> est excut. Si l'<expression> fournit la valeur zro,
alors le <bloc d'instructions 2> est excut.
Les blocs dinstructions peuvent tre vide (;), une seule instruction, ou
plusieurs instructions dlimiter par des accolades {}
Exemple :
if (a > b)

max = a;
else
max = b;

if (a > b)
{ max = a; printf( Maximum = %d, max); }
else
{ max = b; printf( Maximum = %d, max); }

printf( Maximum = %d, max);


Remarque: la dernire instruction nest pas lie ni if ni else.
38

If sans else
if ( <expression> )
if ( <expression> )
<bloc d'instructions 1>
<bloc d'instructions 1>
else ;

Partie 1: Structure conditionnelle,

Dans ce cas on aura un seul scnario possible:


Si l'<expression> fournit une valeur diffrente de zro
alors le <bloc d'instructions 1> est excut. Si
l'<expression> fournit la valeur zro rien faire.
Le blocs dinstructions peut tre vide (;), une seule
instruction, ou plusieurs instructions dlimiter par des
accolades {}
une partie else est toujours lie au dernier if qui ne
possde pas de partie else.
39

If - else if - else

Partie 1: Structure conditionnelle,

if ( <expr1> )
<bloc1>
else if (<expr2>)
<bloc2>
.
else if (<exprN>)
<blocN>
else <blocN+1>

if ( <expr1> )
<bloc1>
else { if (<expr2>)
<bloc2>
.
else { if (<exprN>)
<blocN>
else <blocN+1>
}
}

Dans ce cas on aura N+1 scnarios possibles:


Les expressions <expr1> ... <exprN> sont values du haut vers le
bas jusqu' ce que l'une d'elles soit diffrente de zro. Le bloc
d'instructions y li est alors excut et le traitement de la
commande est termin.
Le blocs dinstructions peut tre vide (;), une seule instruction, ou
plusieurs instructions dlimiter par des accolades {}
La dernire partie else traite le cas o aucune des conditions n'a
t remplie. Il est optionnelle.
40

Les oprateurs conditionnels


<expr1> ? <expr2> : <expr3>

Partie 1: Structure conditionnelle,

Si <expr1> fournit une valeur diffrente de zro,


alors la valeur de <expr2> est fournie comme rsultat.
Si <expr1> fournit la valeur zro, alors la valeur de
<expr3> est fournie comme rsultat
Exemple:

if (a > b)
max = a; max=(a>b)?a:b; (a>b)?(max=a):(max=b);
else
max = b;
41

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure conditionnelle,
La structure rptitive (les boucles),
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

42

while
while ( <expression> )
<bloc d'instructions>
Tant que l'<expression> fournit une valeur diffrente de zro, le
<bloc d'instructions> est excut. Si l'<expression> fournit la
valeur zro, on sort de la boucle while (l'excution continue avec
l'instruction qui suit le bloc d'instructions).
Le <bloc d'instructions> est excut zro ou plusieurs fois.
Exemple:
int j,m,a;
printf ("donner la date sous la forme jj/mm/aaaa:\n");
while(3!=scanf("%d/%d/%d",&j,&m,&a));
printf("la date est %d/%d/%d",j,m,a);

Partie 1: Structure rptitive (les boucles),

Dans cet exemple le bloc de while est vide (;)

Ce programme va relire la date jusqu ce que la date sera


entre sous la forme j/m/a

43

do-while
do <bloc d'instructions>
while ( <expression> );

<bloc d'instructions>
while ( <expression> )
<bloc d'instructions>

Le <bloc d'instructions> est excut au moins une fois et aussi longtemps


que l'<expression> fournit une valeur diffrente de zro.
Exemple:

Partie 1: Structure rptitive (les boucles),

float N;
do {
printf("Introduisez un nombre entre 1 et 10 :");
scanf("%f", &N);
}
while (N<1 || N>10);
44

for
for ( <expr1> ; <expr2> ; <expr3> )

Partie 1: Structure rptitive (les boucles),

<bloc d'instructions>

<expr1>;
while ( <expr2> )
{ <bloc d'instructions>
<expr3>; }

On excute dabord linstruction expr1;

Aprs on vrifier expr2 :


si elle est vrai alors on excute <bloc d'instructions> puis
expr3; aprs on revrifier expr2 et on continue de cette
mme manire (boucle).
sinon on sort de la boucle.
expr1

et expr3 peuvent tre plusieurs


expression spares par, ou vide.
45

for
for ( <expr1> ; <expr2> ; <expr3> )
<bloc d'instructions>

<expr1>;
for (; <expr2> ; <expr3> )
<bloc d'instructions>

On peut faire entrer le bloc dinstruction dans for, ainsi ce bloc sera remplacer par vide (;)

for (<expr1>; <expr2> ; <bloc d'instructions> ,<expr3> );

Partie 1: Structure rptitive (les boucles),

On peut faire sortir expr1 de for, ainsi on laisse sa place vide (;)

On peut faire sortir expr3 de for, ainsi on laisse sa place vide (;) et on lentre dans le bloc

for (<expr1>; <expr2> ;)


{
<bloc d'instructions>
<expr3>;
}

46

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure conditionnelle,
La structure rptitive (les boucles),
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

47

Vecteur: dclaration et mmorisation


Dclaration : <Type> <NomVecteur>[<Dimension>];
Dclaration => rservation de <Dimension> espaces mmoire dans la
RAM (valeurs alatoire) avec sizeof(Type) Octets/espace.
Le vecteur occupe <Dimension>*sizeof(Type) octets en total
Exemple: int A[4]; => rservation de 4 espaces mmoire
(4octets/espace)
le nom d'un vecteur est le reprsentant de l'adresse du premier
lment du vecteur : A=&A[0]=&A (galit de valeur et non de type).
Les adresses des autres composantes sont calcules
(automatiquement) relativement cette adresse
(&A[i]=&A[0]+i*sizeof(type))

Variable

A[0]

A[1]

A[2]

A[3]

k Taille

Valeur

439405

66

115

114

113

112

111

110

109

108

107

106

105

104

103

102

101

Adresse

100

Partie 1: Les tableaux,

48

Vecteur: Initialisation et rservation automatique


initialisation : <Type> <NomVecteur>*N+=,Val1,.,Valn};
n<=N et les n valeurs (expressions) sont spares par ,
Si n<N alors les (N-n) valeurs qui restent sont initialises par 0
Il vaut mieux initialiser un vecteur lors de la dclaration, sinon on doit initialiser
ses composantes une par une aprs la dclaration (dans ce cas les composantes
non initialises restent alatoires).
Exemple : int A[4]={1,2,3}; <=> int A[4]; A[0]=1; A[1]=2; A[2]=3; A[3]=0;
Si la dimension n'est pas indique explicitement lors de l'initialisation, alors
l'ordinateur rserve automatiquement le nombre d'octets ncessaires.
Exemple int A[]={1,2,3}; =>rservation de 3 espaces mmoire (4octets/espace)
avec initialisation par 1,2 et 3.

Variable

A[0]

A[1]

A[2]

Taille

Valeur

ka

115

114

113

112

111

110

109

108

107

106

105

104

102

Adresse

103

La premire composante du vecteur est A[0] et la dernire est A[N-1]


101

100

Partie 1: Les tableaux,

49

Vecteur: Affichage et affectation


On peut utiliser la boucle for pour laffichage et
laffectation.
Exemple : int i,A[4];
//laffectation
for(i=0;i<4;i++)
//on met i<4 pour ne pas dpasser la dimension du vecteur
{ printf("A[%d]=",i+1);
scanf("%d",&A[i]); }
//Laffichage
printf("A=");
for(i=0;i<4;i++)
printf("%d ",A[i]);
//ici on peut aussi utliser "%7d" ou "%d\t" .

Partie 1: Les tableaux,

50

Matrice: dclaration et mmorisation


Une matrice(N,M) et un vecteur(N*M)
Dclaration : <Type> <NomMatrice>[<NbrLignes>] [<NbrColonnes>];
Dclaration => rservation de <NbrLignes>*<NbrColonnes> espaces mmoire
dans la RAM (valeurs alatoire) avec sizeof(Type) octets /espace
La matrice occupe <NbrLignes>*<NbrColonnes>*sizeof(Type) octets en total
Exemple: int A[2][2]; => rservation de 4 espaces mmoire (4octets/espace)

le nom d'une matrice est le reprsentant de l'adresse du premier lment de la


matrice A=&A[0]=&A[0][0]=&A (galit de valeur et non de type).

A[i] reprsentant de l'adresse du premier lment de la ime ligne :


A[i]=&A[i][0] (galit de valeur et non de type).
Les adresses des autres composantes sont calcules (automatiquement)
relativement la premire adresse :
(&A[i][j]=&A[0][0]+(i*NbrColonnes+j)sizeof(type))

Variable

A[0][0]

A[0][1]

A[1][0]

A[1][1]

Taille

Valeur

439405

66

115

114

113

112

111

110

109

108

107

106

105

104

103

102

101

Adresse

100

Partie 1: Les tableaux,

51

Matrice: Initialisation et rservation automatique

initialisation : <Type> A*N+*M+=, ,val0,0, val0,n0-,


.,
{ valN-1,0, valN-1,nN-1}

};

ni<=M pour le i=0,,N-1 et les ni valeurs (expressions) sont spares par , et dans {}
Si ni<M alors les (M-ni) valeurs qui restent sont initialises par 0
Il vaut mieux initialiser un vecteur lors de la dclaration, sinon on doit initialiser ses
composantes une par une aprs la dclaration (dans ce cas les composantes non initialises
restent alatoires).
Exemple : int A[2][2]={{1,2},{3}}; <=> int A[2][2]; A[0][0]=1; A[0][1]=2; A[1][0]=3; A[1][1]=0;
Si le nombre de ligne n'est pas indique explicitement lors de l'initialisation, alors
l'ordinateur rserve automatiquement le nombre d'octets ncessaires.
Exemple int A[][2]={{1,2},{3}}; =>rservation de 4 espaces mmoire (4octets/espace) avec
initialisation par 1,2, 3 et 0.
La premire composante de la matrice est A[0][0] et la dernire est A[N-1][M-1]

Variable
ka

A[0][0]

A[0][1]

A[1][0]

A[1][1]

Taille

Valeur

115

114

113

112

111

110

109

108

107

106

105

104

103

102

101

Adresse

100

Partie 1: Les tableaux,

52

Matrice: Affichage et affectation


On peut utiliser la boucle for pour laffichage et laffectation.
Exemple : int i,j,A[2][2];
//laffectation
for(i=0;i<2;i++)
for(j=0;j<2;j++)
//on met i<2 et j<2 pour ne pas dpasser les dimensions
{ printf("A[%d][%d]=",i+1,j+1);
scanf("%d",&A[i][j]); }
//Laffichage
printf("A=\n");
for(i=0;i<2;i++)
{ for(j=0;j<2;j++)
printf("%7d ",A[i][j]);
printf("\n"); }
//ici il vaut mieux utiliser %7d pour avoir un affichage uniforme

Partie 1: Les tableaux,

53

Plan

Partie 1: Rappels

Avant propos,
Environnement et compilation,
Notions de base,
Types de base, Oprateurs et Expressions,
Lire et crire des donnes,
La structure conditionnelle,
La structure rptitive (les boucles),
Les tableaux,
Les chanes de caractres.

Partie 2: C avanc
Partie 3: Graphique avec C

54

dclaration et mmorisation
Une chane de caractres et un tableau de type char
Dclaration : char <NomChane>[<NbrCaractres>];
Dclaration => rservation de <NbrCaractres> espaces mmoire
dans la RAM (valeurs alatoire) avec sizeof(char) octets /espace
La chane de caractre occupe <NbrCaractres>*sizeof(char) octets
en total
Exemple: char ch[10]; => rservation de 10 espaces mmoire
(1octet/espace)
le nom de la chane est le reprsentant de l'adresse du premier lment de
la chane ch=&ch[0]=&ch (galit de valeur et non de type).

Les adresses des autres composantes sont calcules


(automatiquement) relativement la premire adresse :
&ch[i]=&ch[0]+i*NbrCaractres*sizeof(char)
102

103

104

105

106

107

108

109

Adresse

101

100

Partie 1: Les chanes de caractres,

Variable

ch[0]

ch[1]

ch[2]

ch[3]

ch[4]

ch[5]

ch[6]

ch[7]

ch[8]

ch[9]

65

80

40

60

20

11

16

15

15

11

ATaille

Valeur

55

Chane de caractres constante et initialisation


Les chanes de caractres constantes sont indiques entre
guillemets. La chane de caractres vide est alors: ""
Dans les chanes de caractres, nous pouvons utiliser toutes les
squences d'chappement dfinies comme caractres constants (\n
\t \ \" \\....)
Une chane de caractre constante se termine AUTOMATIQUEMENT
par le caractre \0 (la valeur 0) , alors la chane "hello" occupe 6 octets
Plusieurs chanes de caractres constantes qui sont spares par des
signes d'espacement (espaces, tabulateurs ou interlignes) dans le texte
du programme seront runies en une seule chane constante lors de la
compilation: "un " "deux "
"trois"
"un deux trois"
Initialisation: char ch*10+=,h,e,l,l,o- ; char ch[10]="hello";
101

102

103

104

105

106

107

108

109

Adresse

100

Partie 1: Les chanes de caractres,

Variable

ch[0]

ch[1]

ch[2]

ch[3]

ch[4]

ch[5]

ch[6]

ch[7]

ch[8]

ch[9]

Taille

Valeur

104

101

108

108

111

56

Prcdence alphabtique et lexicographique

Partie 1: Les chanes de caractres,

La prcdence des caractres dans l'alphabet d'une machine


est dpendante du code de caractres utilis. Pour le code
ASCII, nous pouvons constater l'ordre suivant: . . . ,0,1,2, ...
,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .
La chane vide "" prcde lexicographiquement toutes les
autres chanes.
La chane A = "a1a2a ... ap" (p caractres) prcde
lexicographiquement la chane B = "b1b2 ... bm" (m caractres)
si l'une des deux conditions suivantes est remplie:
1) 'a1' < 'b1'
2) 'a1' = 'b1' et "a2a3 ... ap" prcde lexicographiquement
"b2b3 ... bm"
Exemple:

"ABC" prcde "BCD" car 'A'<'B


"ABC" prcde "B" car 'A'<'B'
"Abc" prcde "abc" car 'A'<'a'
"ab" prcde "abcd" car "" prcde "cd"
" ab" prcde "ab" car ' '<'a

57

Lire et crire une chane de caractre (stdio.h)

printf avec le spcificateur de format %s permet d'intgrer une chane de


caractres dans une phrase. En plus, le spcificateur %s permet l'indication de
la largeur minimale du champ d'affichage. Dans ce champ, les donnes sont
justifies droite. Si on indique une largeur minimale ngative, la chane sera
justifie gauche. Un nombre suivant un point indique la largeur maximale
pour l'affichage:

Exemple : char ch[] = "hello, world";


printf(":%s:", ch);
->
:hello, world:
printf(":%5s:", ch);
->
:hello, world:
printf(":%15s:", ch); ->
: hello, world:
printf(":%-15s:", ch); ->
:hello, world :
printf(":%.5s:", ch);
-> :hello:
La fonction puts sert crire une chane constante ou le contenu d'une variable
dans une ligne isole:
puts(ch) printf("%s\n",ch);

Partie 1: Les chanes de caractres,

scanf avec le spcificateur %s permet de lire un mot isol l'intrieur d'une suite
de donnes du mme ou d'un autre type. Le paramtre concernant %s est sans &
Exemple : int J,M,A; char ch[10];
scanf("%s %d %d %d",ch,&J,&M,&A);
La fonction gets sert lire une ou plusieurs lignes de texte (p.ex. des phrases)
termines par un retour la ligne

58

Travailler avec les chanes de caractres


Fonction

Effet

strlen(<s>)

fournit la longueur de la chane sans compter le '\0' final

strcpy(<s>, <t>)

copie <t> vers <s>

strcat(<s>, <t>)

ajoute <t> la fin de <s>

strcmp(<s>, <t>)

compare <s> et <t> lexicographiquement (<s> - <t>)

strncpy(<s>, <t>, <n>)

copie au plus <n> caractres de <t> vers <s>

strncat(<s>, <t>, <n>)

ajoute au plus <n> caractres de <t> la fin de <s>

atoi(<s>)

retourne la valeur numrique reprsente par <s> comme int

atol(<s>)

retourne la valeur numrique reprsente par <s> comme long

atof(<s>)

retourne la valeur numrique reprsente par <s> en double

isupper(<c>)

si <c> est une majuscule ('A'...'Z')

islower(<c>)

si <c> est une minuscule ('a'...'z')

isdigit(<c>)

si <c> est un chiffre dcimal ('0'...'9')

isalpha(<c>)

si islower(<c>) ou isupper(<c>)

isalnum(<c>)

si isalpha(<c>) ou isdigit(<c>)

isxdigit(<c>)

si <c> est un chiffre hexadcimal ('0'...'9' ou 'A'...'F' ou 'a'...'f')

isspace(<c>)

si <c> est un signe d'espacement (' ', '\t', '\n', '\r', '\f')

tolower(<c>)

retourne <c> converti en minuscule si <c> est une majuscule

toupper(<c>)

retourne <c> converti en majuscule si <c> est une minuscule

Dans le tableau suivant, <n> reprsente un nombre du type int. Les


symboles <s> et <t> peuvent tre remplacs par : une chane de
caractres constante, le nom d'une variable dclare comme tableau
de char ou un pointeur sur char. Et <c> un caractre (char ou int)

Stdlib.h
ctype.h

Partie 1: Les chanes de caractres,

string.h

59

Tableau de chanes de caractres


Un tableau de chanes de caractre est une matrice de
type char, chaque ligne de cette matrice est une chane
de caractres.
Exemple: char Jour[7][10] => rservation de 70 espaces
mmoire (1octet/espace)
On peut initialiser lors de la dclaration:
char Jour[7][10] ={"Lundi", "Mardi", "Mercredi", "Jeudi",
"Vendredi", "Samedi", "Dimanche"};
Jour*i+ indique ladresse de la ime chane de caractres:
printf("Ajourdhui est %s",Jour[2]);
affichera Aujourdhui est Mercredi
Jour[i][j] indique le jme caractre dans la ime chane:

Partie 1: Les chanes de caractres,

printf("%c %c %c",Jour[0][1], Jour[0][2], Jour[3][0]);


affichera u n J
60