Cours C Avancé V1
-
Upload
abdelkhalekbenomar -
Category
Documents
-
view
226 -
download
0
Transcript of Cours C Avancé V1
-
8/18/2019 Cours C Avancé V1
1/60
Université Cadi Ayyad
Ecole Nationale des Sciences Appliquées
Marrakech
Elaboré et présenté par Miloud LAHMAIM
Ingénieur-Enseignant à l’ENSA de Marrakech
2ème année du Cycle Préparatoire
Année universitaire 2015-2016Semestre 2
-
8/18/2019 Cours C Avancé V1
2/60
Plan Partie 1: Rappels
Partie 2: C avancé
Partie 3: Graphique avec C
2
-
8/18/2019 Cours C Avancé V1
3/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure alternative,
◦ La structure répétitive,
◦ Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 3
-
8/18/2019 Cours C Avancé V1
4/60
L’information: Information: Nombre, Texte, Vidéo, Image….
N’importe quelle information peut être codée sous formed’une suite de 1 et 0 (bit).
Exemples de codage : ASCII, MPGE, JPG, GIF, H.264...
La communication se fait via: Signal électrique (exp: +5V=1et -5V=0), Onde magnétique (Wifi), Lumière (fibreoptique)…
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, …. 4 P a r t i e 1 : A v a n t p r o p o s
-
8/18/2019 Cours C Avancé V1
5/60
Informatique:
L’informatique: le domaine d'activité scientifique,
technique et industriel concernant le traitement
automatique de l'information.
L’informatique se compose de deux parties:
SoftWare et HardWare.
5 P a r t i e 1 : A v a n t p r o p o s
-
8/18/2019 Cours C Avancé V1
6/60
SoftWare: Software: tout ce qui est non matériel.
Langage: protocole qui sert à envoyer et recevoirune information(communication).
Langage machine: langage de haut niveaucompréhensible par la machine (binaire).
Langage de programmation: compréhensible par leprogrammeur 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, …).
Système d’exploitation: Ensemble de logiciels (Linux,
Windows, IOS, Android,…) 6 P a r t i e 1 : A v a n t p r o p o s
-
8/18/2019 Cours C Avancé V1
7/60
HardWare: HardWare: équipement électrique (Ordinateur,
Smartphone, Récepteur Satellite…).
Un équipement informatique se compose de:
périphérique d’entrée, périphérique de sortie et
unité centrale de traitement. Entrée: clavier, souris, scanner, caméra….
Sortie: Ecran, imprimante,…
Unité centrale: Microprocesseur, Mémoires,Cartes…
7 P a r t i e 1 : A v a n t p r o p o s
-
8/18/2019 Cours C Avancé V1
8/60
Microprocesseur: Caractérisé par: Marque(Intel, AMD,…) et
Fréquence(Nombre d’opérations par second, enGHz).
Coordonne le reste des éléments,
Il se charge des calculs(+-x/, et ou…).
Il exécute les instructions qui ont été
programmées.
Toutes les informations qui circulent dansl’ordinateur passent par lui.
8 P a r t i e 1 : A v a n t p r o p o s
-
8/18/2019 Cours C Avancé V1
9/60
Mémoire: Toutes les informations doivent être stockées
dans une mémoire.
Disque dur: grande capacité (To), les
informations sont stockées sous format de
fichiers (lecture et écriture). ROM: faible capacité (Mo), conserve les données
nécessaires au démarrage de l'ordinateur
(lecture seulement et non effaçable). RAM: Moyenne Capacité (Go), conserve les
données traitées par un programme (lecture et
écriture). 9 P a r t i e 1 : A v a n t p r o p o s
-
8/18/2019 Cours C Avancé V1
10/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure alternative,
◦ La structure répétitive,
◦ Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 10
-
8/18/2019 Cours C Avancé V1
11/60
Identification des fichiers Lors de la programmation en C, nous travaillons avec différents types de
fichiers qui sont identifiés par leurs extensions:
*.Cfichiers source (le code source du programme) : compris seulement par leprogrammeur
*.OBJ
fichiers compilés (versions objet)
*.EXEfichiers compilés et liés (versions exécutables): compris seulement par lamachine
*.LIBbibliothèques de fonctions précompilées
*.Hfichiers en-tête qui contiennent la déclaration des fonctions (header files)
11 P a r t i e 1 : E n v i r o n n e m e
n t e t c o m p i l a t i o n
-
8/18/2019 Cours C Avancé V1
12/60
Compilation La compilation et la fait de traduire le fichier .C écrit par le programmeur (code
source non compréhensible par la machine) vers un fichier .EXE écrit en
langage machine (non compréhensible par le programmeur).
12 P a r t i e 1 : E n v i r o n n e m e
n t e t c o m p i l a t i o n
-
8/18/2019 Cours C Avancé V1
13/60
Compilation Pour programmer on aura besoin d’un
programme regroupant les éléments suivants :◦ Un éditeur de texte pour rédiger le code source d'un
fichier *.C en langage C.
◦ Un compilateur pour faire la fameuse traduction.
◦ Un débugger pour traquer les erreurs dans le codesource.
Ce programme 3 en 1 est appelé IDE
(Integrated Development Environment, environnement de développement intégré en français).
Il existe beaucoup d'IDE payants ou non. (DEVC++, CodeBlock, Turbo C….)
13 P a r t i e 1 : E n v i r o n n e m e
n t e t c o m p i l a t i o n
-
8/18/2019 Cours C Avancé V1
14/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure alternative,
◦ La structure répétitive,
◦ Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 14
-
8/18/2019 Cours C Avancé V1
15/60
Format d’un programme- Inclusion des bibliothèques
(Obligatoire si on veut utiliser une fonction nondéclarée)
- Déclarations globale
(Optionnelle)
- Déclarations ou définition
des fonctions
(Obligatoire si on veut utiliser cette fonction
après)
- Définition de la fonction main
(Obligatoire)
15 P a r t i e 1 : N o t i o n s d e b
a s e
#include
…….
Type1 NomVariable1;
…….
Type NomFonction(Type1Param1,….)
{ Déclaration locale
Instructions
}
…….
main(){
return 0;
}
-
8/18/2019 Cours C Avancé V1
16/60
fonctions
Fonction (in) = out
in = les paramètres de la fonction
out = le résultat de la fonction
in et out peuvent être vide (void)
Pour utiliser une fonction dans un programme on
doit déclarer auparavant le fichier .h où cette
fonction est déclarée: par exemple si on veut
utiliser une fonction mathématique on doitinclure au début du code source la ligne
#include
16 P a r t i e 1 : N o t i o n s d e b
a s e
-
8/18/2019 Cours C Avancé V1
17/60
Définition d’une fonction ( , , ... )
{
}
Une fonction en C fournit un résultat dont le typedoit être défini. Si aucun type n'est définiexplicitement, C suppose par défaut que le type durésultat est int (integer).
Le retour du résultat se fait en général à la fin de lafonction par l'instruction return.
Le type d'une fonction qui ne fournit pas de résultatest déclaré comme void (vide).
Si une fonction n'a pas besoin de paramètres, lesparenthèses restent vides ou contiennent lemot void. 17 P a r t
i e 1 : N o t i o n s d e b
a s e
-
8/18/2019 Cours C Avancé V1
18/60
La fonction mainmain()
{
return 0;
}
La fonction principale main est obligatoire danstous les programmes.
Le type de main est le type par défaut (int). main renvoie la valeur 0 pour indiquer à
l'environnement que le programme s'est terminé
avec succès, sans anomalies ou erreurs fatales. 18 P a r t i e 1 : N o t i o n s d e b
a s e
-
8/18/2019 Cours C Avancé V1
19/60
Variable La RAM est une grande commode composée
de plusieurs tiroirs ayant chacun une adresse etune valeur.
Une variable est une information stockée dans lamémoire vive comportant une adresse et une valeur.
L'adresse d'une variable est indiquée par le nom dela variable précédé du signe &.
A=90 => &A=0
B=256 => &B=1
C=‘A‘ => &C=3 (Le caractère A à le code ASCII = 65)
19 P a r t
i e 1 : N o t i o n s d e b
a s e
Adresse 0 1 2 3 …
bits 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
Valeur 90 256 65
-
8/18/2019 Cours C Avancé V1
20/60
Les identificateurs
Les noms des fonctions et des variables en C
sont composés d'une suite de lettres et dechiffres.
Le premier caractère 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 différentes.
20 P a r t
i e 1 : N o t i o n s d e b
a s e
-
8/18/2019 Cours C Avancé V1
21/60
Les commentaires
Un commentaire commence toujours par les
deux symboles '/*' et se termine par lessymboles '*/'.
Il est interdit d'utiliser des commentaires
imbriqués. Exemples
◦ /* Ceci est un commentaire correct */
◦ /* Ceci est /* évidemment */ défendu */
Un commentaire n’est pas pris en considération
par un compilateur.
21 P a r t
i e 1 : N o t i o n s d e b
a s e
-
8/18/2019 Cours C Avancé V1
22/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure alternative,
◦ La structure répétitive,
◦Les tableaux,
◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 22
-
8/18/2019 Cours C Avancé V1
23/60
Les types simples: Entiers
Char B=‘A’ est équivalent à char B=65
Le nombre d’octets dépond de la machine.
La fonction sizeof(type) ou sizeof(variable) renvoie la
taille concernée en octet.
23 P a r t
i e 1 : T y p e s d e b a s
e , O p é r a t e u r s e t E x p r e s s i o n s ,
défin it ion descrip t ion domaine m in domaine max O
char caractère -128 127 1short entier court -32768 32767 2
int entier standard -32768 32767 4
long entier long -2147483648 2147483647 4
unsigned char caractère 0 255 1
unsigned short entier court 0 65535 2unsigned int entier standard 0 65535 4
unsigned long entier long 0 4294967295 4
-
8/18/2019 Cours C Avancé V1
24/60
Les types simples: Rationnels
Le nombre d’octets dépond de la machine.
La fonction sizeof(type) ou sizeof(variable)
renvoie la taille
24 P a r t
i e 1 : T y p e s d e b a s
e , O p é r a t e u r s e t E x p r e s s i o n s ,
Nombre rationnel = * 10
est le signe positif ou négatif du nombre est un décimal positif avec un seul chiffre devant la virgule.
est un entier relatif
défin it io n p réc isio n man tis se d omain e m in d omain e max o ctets
float simple 6 3.4 * 10-38 3.4 * 1038 4
double double 15 1.7 * 10-308 1.7 * 10308 8
long double long 19 3.4 * 10-4932 1.1 * 104932 10
-
8/18/2019 Cours C Avancé V1
25/60
Déclaration des variables simples
Le syntaxe de la déclaration est :
,,...,;
Qui est équivalent à: ;
;
…….. La déclaration = la réservation des espaces mémoires dans la
RAM avec la valeur déjà existante dans la RAM (aléatoire)
int A,a,B;
char K; entraine la réservation suivante
25 P a r t
i e 1 : T y p e s d e b a s
e , O p é r a t e u r s e t E x p r e s s i o n s ,
Adresse 1 0 0
1 0 1
1 0 2
1 0 3
1 0 4
1 0 5
1 0 6
1 0 7
1 0 8
1 0 9
1 1 0
1 1 1
1 1 2
1 1 3
1 1 4
1 1 5
…
Variable A a B K
Taille 4 4 4 1
Valeur 3980 439405 453 15
-
8/18/2019 Cours C Avancé V1
26/60
Initialisation des variables
On utilise l’opérateur = pour l’initialisation :
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 réservation et l’initialisation suivantes:
26 P a r t
i e 1 : T y p e s d e b a s
e , O p é r a t e u r s e t E x p r e s s i o n s ,
Adresse 1 0 0
1 0 1
1 0 2
1 0 3
1 0 4
1 0 5
1 0 6
1 0 7
1 0 8
1 0 9
1 1 0
1 1 1
1 1 2
1 1 3
1 1 4
1 1 5
…
Variable A a B K
Taille 4 4 4 1
Valeur 1 439405 3 66
-
8/18/2019 Cours C Avancé V1
27/60
Les opérateurs
Opérateu rs logiques
&& et logique (and)|| ou logique (or)
! négation logique (not)
27 P a r t
i e 1 : T y p e s d e b a s e , O p é r a t e u r s e t E x p r e s s i o n s ,
Opérateu rs ar it hméti ques
+ addition
- soustraction* multiplication
/ division (entière et rationnelle!)
% modulo (reste d'une div. entière)
Opérateu rs d e comparaison
== égal à
!= différent de
=
plus petit que,..
Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:
- la valeur 1 correspond à la valeur booléenne vrai
- la valeur 0 correspond à la valeur booléenne faux
Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro
comme faux:
32 && 2.3 donne 1
!65.34 donne 0
0||!(32 > 12) donne 0
é l
-
8/18/2019 Cours C Avancé V1
28/60
Opérateurs particuliers Pour Op un opérateur arithmétique 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 incrémente après
X = V--; passe d'abord la valeur de V à X et décrémente après
X = ++V; incrémente d'abord et passe la valeur incrémentée à X
X = --V; décrémente d'abord et passe la valeur décrémentée à X
Exemple : Supposons que la valeur de N est égal à 5:Incrém. postfixe: X = N++; donne résultat: N=6 et X=5Incrém. préfixe: X = ++N; donne résultat: N=6 et X=6
28 P a r t
i e 1 : T y p e s d e b a s e , O p é r a t e u r s e t E x p r e s s i o n s ,
i i é d é
-
8/18/2019 Cours C Avancé V1
29/60
Priorité des opérateurs
Si nous avons une suite d'opérateurs binaires de lamême classe, l'évaluation se fait en passant de la gauche vers la droite dans l'expression.
Pour les opérateurs unaires (!,++,--) et pour lesopérateurs d'affectation (=,+=,-=,*=,/=,%=),l'évaluation se fait de droite à gauche dans
l'expression. 29 P a r t i e 1 : T y p e s d e b a s e , O p é r a t e u r s e t
E x p r e s s i o n s ,
Priorité 1 (la plus forte): ()
Priorité 2: ! ++ --
Priorité 3: * / %
Priorité 4: + -
Priorité 5: < >=
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
Priorité 9 (la plus faible): = += -= *= /= %=
i i
-
8/18/2019 Cours C Avancé V1
30/60
Expressions et constructions
Une expression est une combinaison entre
variables, constantes, fonctions liés entre eux viades opérateurs.
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 après C à Baprès B à A. en résultat A, B,C auront la valeur 3.
Question: quelle est la valeur de A+(A=B=C=3)
30 P a r t
i e 1 : T y p e s d e b a s e , O p é r a t e u r s e t
E x p r e s s i o n s ,
Pl
-
8/18/2019 Cours C Avancé V1
31/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure alternative,
◦ La structure répétitive,
◦
Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 31
-
8/18/2019 Cours C Avancé V1
32/60
Séquences d’échappement & spécificateurs de format
Les séquences d’échappement sont des caractères (char)
Les spécificateurs de
format indiquent la manière
dont les expressions vont être Affichées sur la console.
32 P a r t
i e 1 : L i r e e t é c r i r e
d e s d o n n é e s ,
Séquences d’échappement
\a sonnerie \\ trait oblique
\b curseur arrière \? point d'interrogation
\t tabulation \' apostrophe
\n nouvelle ligne \" guillemets
\r retour au début de ligne \f saut de page (imprimante)
\0 NUL \v tabulateur vertical
SYMBOLE TYPE IMPRESSION COMME
%d ou %i int entier relatif
%u int entier naturel (unsigned)
%o int entier exprimé en octal
%x int entier exprimé en hexadécimal
%c int caractère
%f double rationnel en notation décimale
%e double rationnel en notation scientifique
%s char* chaîne de caractères
-
8/18/2019 Cours C Avancé V1
33/60
E i f é
-
8/18/2019 Cours C Avancé V1
34/60
Ecriture formatée Pour les entiers, nous pouvons indiquer la largeur
minimale de la valeur à afficher. Dans le champ ainsiréservé, les nombres sont justifiés à droite:
printf("%4d", 123); ==> _123
Pour les rationnels, nous pouvons indiquer la largeur
minimale de la valeur à afficher et la précision du
nombre à afficher. La précision par défaut est fixée à six
décimales. Les positions décimales sont arrondies à la
valeur la plus proche.printf("%12f", 100.123); ==> __100.123000
printf("%.2f", 100.123); ==> 100.12
printf("%5.0f", 100.123); ==> __10034 P
a r t i e 1 : L i r e e t é c r i r e
d e s d o n n é e s ,
L t f té
-
8/18/2019 Cours C Avancé V1
35/60
Lecture formatée La fonction scanf() est dans la bibliothèque stdio.h
Le syntaxe est : scanf("",,, ...) La partie "" contient des signes d’espacement et
des spécificateurs de format.
Dans la chaîne de format, les symboles \t, \n, \r ont le même
effet qu'un simple espace. Si la chaîne de format contient aussi d'autres caractères que
des signes d'espacement, alors ces symboles doivent êtreintroduits exactement dans l'ordre indiqué.
scanf retourne comme résultat le nombre de donnéescorrectement reçues.
Exemple
int A,B,C;
C=scanf("%d/%d ",&A,&B); 35 P a r t i e 1 : L i r e e t é c r i r e
d e s d o n n é e s ,
C A B
12 14 1 12
12/14 2 12 14
12.3/14 1 12
E it t l t d’ tè
-
8/18/2019 Cours C Avancé V1
36/60
Ecriture et lecture d’un caractère
putchar(A); printf("%c",A);
Exemple :
Putchar(65); putchar (‘A’); affiche la lettre A
getchar(A); scanf("%c",&A);
getchar fournit les données seulement après
confirmation par 'Enter‘.
La bibliothèque contient une fonction du
nom getch qui fournit immédiatement le
prochain caractère entré au clavier sans l’afficher,
cette fonction peut être utiliser pour lire un mot
de pass. 36 P a r t i e 1 : L i r e e t é c r i r e
d e s d o n n é e s ,
Pl
-
8/18/2019 Cours C Avancé V1
37/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure conditionnelle,
◦ La structure répétitive,
◦
Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 37
If l
-
8/18/2019 Cours C Avancé V1
38/60
If-elseif ( )
Dans ce cas deux scénarios possibles:
Si l' fournit une valeur différente de zéro alors le
-
8/18/2019 Cours C Avancé V1
39/60
If sans else
if ( )
-
8/18/2019 Cours C Avancé V1
40/60
If - else if - elseif ( )
else if ()
…….
else if ()
else
Dans ce cas on aura N+1 scénarios possibles:
Les expressions ... sont évaluées du haut vers lebas jusqu'à ce que l'une d'elles soit différente de zéro. Le blocd'instructions y lié est alors exécuté et le traitement de lacommande est terminé.
Le blocs d’instructions peut être vide (;), une seule instruction, ouplusieurs instructions délimiter par des accolades {}
La dernière partie else traite le cas où aucune des conditions n'aété remplie. Il est optionnelle. 40 P a r
t i e 1 : S t r u c t u r e c o
n d i t i o n n e l l e ,
if ( )
else { if ()
…….
else { if ()
else
}
}
Les opérate rs conditionnels
-
8/18/2019 Cours C Avancé V1
41/60
Les opérateurs conditionnels ? :
Si fournit une valeur différente de zéro,alors la valeur de est fournie comme résultat.Si fournit la valeur zéro, alors la valeur de
est fournie comme résultat Exemple:
if (a > b)max = a; max=(a>b)?a:b; (a>b)?(max=a):(max=b);
else
max = b;41 P
a r t i e 1 : S t r u c t u r e c o
n d i t i o n n e l l e ,
Plan
-
8/18/2019 Cours C Avancé V1
42/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure conditionnelle,
◦ La structure répétitive (les boucles),
◦
Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 42
while
-
8/18/2019 Cours C Avancé V1
43/60
whilewhile ( )
est exécuté zéro 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);◦ Dans cet exemple le bloc de while est vide (;)
◦ Ce programme va relire la date jusqu’à ce que la date sera
entrée sous la forme j/m/a 43 P a r t i e 1 : S t r u c t u r e r é p é t i t i v e ( l e s b o u c l e s ) ,
do while
-
8/18/2019 Cours C Avancé V1
44/60
do-whiledo
while ( );
while ( ) est exécuté au moins une fois et aussi longtempsque l' fournit une valeur différente de zéro.
Exemple: float N;
do {
printf("Introduisez un nombre entre 1 et 10 :");
scanf("%f", &N); }
while (N10);
44 P a r t i e 1 : S t r u c t u r e r é
p é t i t i v e ( l e s b o u c l e s ) ,
for
-
8/18/2019 Cours C Avancé V1
45/60
for
for ( ; ; )
puis
expr3; après on revérifier expr2 et on continue de cette
même manière (boucle).◦ sinon on sort de la boucle.
expr1 et expr3 peuvent être plusieursexpression séparées par, ou vide.
45 P a r t i e 1 : S t r u c t u r e r é
p é t i t i v e ( l e s b o u c l e s ) ,
;
while ( ){
-
8/18/2019 Cours C Avancé V1
46/60
for
46 P a r t i e 1 : S t r u c t u r e r é
p é t i t i v e ( l e s b o u c l e s ) ,
for ( ; ; )
On peut faire entrer le bloc d’instruction dans for, ainsi ce bloc sera remplacer par vide (;)
for (; ;
;
}
Plan
-
8/18/2019 Cours C Avancé V1
47/60
Plan Partie 1: Rappels
◦ Avant propos,
◦ Environnement et compilation,
◦ Notions de base,
◦ Types de base, Opérateurs et Expressions,
◦ Lire et écrire des données,
◦ La structure conditionnelle,
◦ La structure répétitive (les boucles),
◦
Les tableaux,◦ Les chaînes de caractères.
Partie 2: C avancé
Partie 3: Graphique avec C 47
Vecteur: déclaration et mémorisation
-
8/18/2019 Cours C Avancé V1
48/60
Vecteur: déclaration et mémorisation
Déclaration : [];
Déclaration => réservation de espaces mémoire dans laRAM (valeurs aléatoire) avec sizeof(Type) Octets/espace.
Le vecteur occupe *sizeof(Type) octets en total
Exemple: int A[4]; => réservation de 4 espaces mémoire(4octets/espace)
le nom d'un vecteur est le représentant de l'adresse du premierélément du vecteur : A=&A[0]=&A (égalité de valeur et non de type).
Les adresses des autres composantes sont calculées(automatiquement) relativement à cette adresse(&A[i]=&A[0]+i*sizeof(type))
k
48 P a r t i e 1 : L e s t a b l e a u x
,
Adresse 1 0 0
1 0 1
1 0 2
1 0 3
1 0 4
1 0 5
1 0 6
1 0 7
1 0 8
1 0 9
1 1 0
1 1 1
1 1 2
1 1 3
1 1 4
1 1 5
…
Variable A[0] A[1] A[2] A[3]
Taille 4 4 4 4
Valeur 1 439405 3 66
-
8/18/2019 Cours C Avancé V1
49/60
Vecteur: Affichage et affectation
-
8/18/2019 Cours C Avancé V1
50/60
Vecteur: Affichage et affectation
On peut utiliser la boucle for pour l’affichage etl’affectation.
Exemple : int i,A[4];
//l’affectation
for(i=0;i
-
8/18/2019 Cours C Avancé V1
51/60
Matrice: déclaration et mémorisation
Une matrice(N,M) et un vecteur(N*M)
Déclaration : [] [];
Déclaration => réservation de * espaces mémoiredans la RAM (valeurs aléatoire) avec sizeof(Type) octets /espace
La matrice occupe **sizeof(Type) octets en total
Exemple: int A[2][2]; => réservation de 4 espaces mémoire (4octets/espace)
le nom d'une matrice est le représentant de l'adresse du premier élément de lamatrice A=&A[0]=&A[0][0]=&A (égalité de valeur et non de type).
A[i] représentant de l'adresse du premier élément de la ième ligne : A[i]=&A[i][0] (égalité de valeur et non de type).
Les adresses des autres composantes sont calculées (automatiquement)relativement à la première adresse :(&A[i][j]=&A[0][0]+(i*NbrColonnes+j)sizeof(type))
A
51 P a r t i e 1 : L e s t a b l e a u x ,
Adresse 1 0 0
1 0 1
1 0 2
1 0 3
1 0 4
1 0 5
1 0 6
1 0 7
1 0 8
1 0 9
1 1 0
1 1 1
1 1 2
1 1 3
1 1 4
1 1 5
…
Variable A[0][0] A[0][1] A[1][0] A[1][1]
Taille 4 4 4 4
Valeur 1 439405 3 66
Matrice: Initialisation et réservation automatique
-
8/18/2019 Cours C Avancé V1
52/60
Matrice: Initialisation et réservation automatique
initialisation : A*N+*M+= val0,0,…… val0,n0-,
…….,
{ valN-1,0,…… valN-1,nN-1} } ;
ni
-
8/18/2019 Cours C Avancé V1
53/60
Matrice: Affichage et affectation
On peut utiliser la boucle for pour l’affichage et l’affectation.
Exemple : int i,j,A[2][2];
//l’affectation
for(i=0;i
-
8/18/2019 Cours C Avancé V1
54/60
déclaration et mémorisation
-
8/18/2019 Cours C Avancé V1
55/60
déclaration et mémorisation Une chaîne de caractères et un tableau de type char
Déclaration : char [];
Déclaration => réservation de espaces mémoiredans la RAM (valeurs aléatoire) avec sizeof(char) octets /espace
La chaîne de caractère occupe *sizeof(char) octetsen total
Exemple: char ch[10]; => réservation de 10 espaces mémoire
(1octet/espace) le nom de la chaîne est le représentant de l'adresse du premier élément dela chaîne ch=&ch[0]=&ch (égalité de valeur et non de type).
Les adresses des autres composantes sont calculées(automatiquement) relativement à la première adresse :
&ch[i]=&ch[0]+i*NbrCaractères*sizeof(char)
A
55 P a r t i e 1 : L e s c h a î n e s
d e c a r a c t è r e s ,
Adresse 1 0 0
1 0 1
1 0 2
1 0 3
1 0 4
1 0 5
1 0 6
1 0 7
1 0 8
1 0 9
…
Variable ch[0] ch[1] ch[2] ch[3] ch[4] ch[5] ch[6] ch[7] ch[8] ch[9]
Taille 1 1 1 1 1 1 1 1 1 1
Valeur 65 80 40 60 20 11 16 15 15 11
Chaîne de caractères constante et initialisation
-
8/18/2019 Cours C Avancé V1
56/60
Chaîne de caractères constante et initialisation
Les chaînes de caractères constantes sont indiquées entreguillemets. La chaîne de caractères vide est alors: ""
Dans les chaînes de caractères, nous pouvons utiliser toutes lesséquences d'échappement définies comme caractères constants (\n\t \’ \" \\....)
Une chaîne de caractère constante se termine AUTOMATIQUEMENTpar le caractère \0 (la valeur 0) , alors la chaîne "hello" occupe 6 octets
Plusieurs chaînes de caractères constantes qui sont séparées par dessignes d'espacement (espaces, tabulateurs ou interlignes) dans le textedu programme seront réunies en une seule chaîne constante lors de lacompilation: "un " "deux "
"trois" "un deux trois"
Initialisation: char ch*10+=‘h’,’e’,’l’,’l’,’o’- ;
char ch[10]="hello";
A
56 P a r t i e 1 : L e s c h a î n e s
d e c a r a c t è r e s ,
Adresse 1 0 0
1 0 1
1 0 2
1 0 3
1 0 4
1 0 5
1 0 6
1 0 7
1 0 8
1 0 9
…
Variable ch[0] ch[1] ch[2] ch[3] ch[4] ch[5] ch[6] ch[7] ch[8] ch[9]
Taille 1 1 1 1 1 1 1 1 1 1
Valeur 104 101 108 108 111 0 0 0 0 0
Précédence alphabétique et lexicographique
-
8/18/2019 Cours C Avancé V1
57/60
Précédence alphabétique et lexicographique
La précédence des caractères dans l'alphabet d'une machineest dépendante du code de caractères utilisé. Pour le code
ASCII, nous pouvons constater l'ordre suivant: . . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .
La chaîne vide "" précède lexicographiquement toutes lesautres chaînes.
La chaîne A = "a1a2a ... ap" (p caractères) précède
lexicographiquement la chaîne B = "b1b2 ... bm" (m caractères)si l'une des deux conditions suivantes est remplie:
1) 'a1' < 'b1'
2) 'a1' = 'b1' et "a2a3 ... ap" précède lexicographiquement"b2b3 ... bm"
Exemple:◦ "ABC" précède "BCD" car 'A'
-
8/18/2019 Cours C Avancé V1
58/60
Lire et écrire une chaîne de caractère (stdio.h)
printf avec le spécificateur de format %s permet d'intégrer une chaîne decaractères dans une phrase. En plus, le spécificateur %s permet l'indication dela largeur minimale du champ d'affichage. Dans ce champ, les données sont justifiées à droite. Si on indique une largeur minimale négative, la chaîne sera justifiée à gauche. Un nombre suivant un point indique la largeur maximalepour 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 chaîne constante ou le contenu d'une variabledans une ligne isolée: puts(ch) printf("%s\n",ch);
scanf avec le spécificateur %s permet de lire un mot isolé à l'intérieur d'une suitede données du même ou d'un autre type. Le paramètre 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)terminées par un retour à la ligne
58 P a r
t i e 1 : L e s c h a î n e s
d e c a r a c t è r e s ,
Travailler avec les chaînes de caractères
-
8/18/2019 Cours C Avancé V1
59/60
59 P a r
t i e 1 : L e s c h a î n e s
d e c a r a c t è r e s ,
b Fonction Effet
s t r i n g . h
strlen() fournit la longueur de la chaîne sans compter le '\0' final
D a n s l e t a b l e a u s u i v a n t , < n > r e p r é s e n t e u n n
o m b r e d u t y p e i n t . L e s
s y m
b o l e s < s > e t < t > p e u
v e n t ê t r e r e m p l a c é s
p a r : u n e c h a î n e d e
c a r
a c t è r e s c o n s t a n t e , l e
n o m d
' u n e v a r i a b l e d é c l a r é e c o m m e t a b l e a u
d e
c h a r o u u n p o i n t e u r s u r c h a r . E t < c > u n c a
r a c t è r e ( c h a r o u i n t )
strcpy(, ) copie vers
strcat(, ) ajoute à la fin de
strcmp(, ) compare et lexicographiquement ( - )
strncpy(, , ) copie au plus caractères de vers
strncat(, , ) ajoute au plus caractères de à la fin de
S t d l i b
. hatoi() retourne la valeur numérique représentée par comme int
atol() retourne la valeur numérique représentée par comme long
atof() retourne la valeur numérique représentée par en double
c t y p e . h
isupper() si est une majuscule ('A'...'Z')
islower() si est une minuscule ('a'...'z')
isdigit() si est un chiffre décimal ('0'...'9')
isalpha() si islower() ou isupper()
isalnum() si isalpha() ou isdigit()
isxdigit() si est un chiffre hexadécimal ('0'...'9' ou 'A'...'F' ou 'a'...'f')
isspace() si est un signe d'espacement (' ', '\t', '\n', '\r', '\f')
tolower() retourne converti en minuscule si est une majuscule
toupper() retourne converti en majuscule si est une minuscule
Tableau de chaînes de caractères
-
8/18/2019 Cours C Avancé V1
60/60
Tableau de chaînes de caractères
Un tableau de chaînes de caractère est une matrice detype char, chaque ligne de cette matrice est une chaîne
de caractères. Exemple: char Jour[7][10] => réservation de 70 espaces
mémoire (1octet/espace)
On peut initialiser lors de la déclaration:
char Jour[7][10] ={"Lundi", "Mardi", "Mercredi", "Jeudi","Vendredi", "Samedi", "Dimanche"};
Jour*i+ indique l’adresse de la ième chaîne de caractères:
printf(" Ajourd’hui est %s",Jour[2]);
affichera Aujourd’hui est Mercredi Jour[i][j] indique le jème caractère dans la ième chaîne:
printf("%c %c %c",Jour[0][1], Jour[0][2], Jour[3][0]);
affichera u n J e 1 : L e s c h a î n e s
d e c a r a c t è r e s ,