Cours C Avancé V1
Cours C Avancé V1
Cours C Avancé V1
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
Linformation:
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, .
Informatique:
SoftWare:
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
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.
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).
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
*.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
12
Compilation
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
Dclarations globale
(Optionnelle)
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()
{
<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>
16
17
La fonction main
main()
{
<dclarations>
<instructions>
return 0;
}
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)
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.
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
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
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
23
dfinition
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
Variable
Taille
Valeur
3980
439405
453
15
115
114
113
112
111
110
109
108
107
106
105
104
102
101
Adresse
103
char K;
100
25
Taille
Valeur
439405
66
115
114
113
112
111
110
109
108
107
106
105
104
103
102
101
Adresse
100
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
Oprateurs particuliers
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
Priorit 3:
Priorit 4:
Priorit 5:
Priorit 6:
Priorit 7:
Priorit 8:
Priorit 9 (la plus faible):
()
! ++ -* / %
+ < <= > >=
== !=
&&
||
= += -= *= /= %=
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)
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
\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
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 !
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
34
Lecture formate
int A,B,C;
C=scanf("%d/%d ",&A,&B);
12/14
12
12.3/14
12
14
35
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
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); }
If sans else
if ( <expression> )
if ( <expression> )
<bloc d'instructions 1>
<bloc d'instructions 1>
else ;
If - else if - else
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>
}
}
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);
43
do-while
do <bloc d'instructions>
while ( <expression> );
<bloc d'instructions>
while ( <expression> )
<bloc d'instructions>
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> )
<bloc d'instructions>
<expr1>;
while ( <expr2> )
{ <bloc d'instructions>
<expr3>; }
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 (;)
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
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
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
48
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
100
49
50
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
51
};
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
52
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).
103
104
105
106
107
108
109
Adresse
101
100
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
102
103
104
105
106
107
108
109
Adresse
100
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
57
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
Effet
strlen(<s>)
strcpy(<s>, <t>)
strcat(<s>, <t>)
strcmp(<s>, <t>)
atoi(<s>)
atol(<s>)
atof(<s>)
isupper(<c>)
islower(<c>)
isdigit(<c>)
isalpha(<c>)
si islower(<c>) ou isupper(<c>)
isalnum(<c>)
si isalpha(<c>) ou isdigit(<c>)
isxdigit(<c>)
isspace(<c>)
si <c> est un signe d'espacement (' ', '\t', '\n', '\r', '\f')
tolower(<c>)
toupper(<c>)
Stdlib.h
ctype.h
string.h
59