Title: Introduction au Langage C,C
1Introduction au Langage C,C
- Formation Admin INSTA
- Source Université de Metz
2Progression
3Introduction au Langage C,C
- Mon Premier Programme en C
Début du programme
Inclusion de la bibliothèque contenant la
fonction printf
include ltstdio.hgt void main() printf("Bonjour
!\n")
Point d'entré du programme
première instruction
Fin du programme
4Introduction au Langage C,C
- Définition d'une variable
- nom
- Unique pour chaque variable
- Commence toujours par une lettre
- Différenciation minuscule-majuscule
- type
- Conditionne le format de la variable en mémoire
- Peut être soit un type standard ou un type
utilisateur - valeur
- Peut évoluer pendant l'exécution
- initialisation grâce à l'opérateur d'affectation
5Introduction au Langage C,C
- Types de variable
- char?caractères
- int ?entiers
- short int ?entiers courts
- long int ?entiers longs
- float ?nombres décimaux
- double ?nombres décimaux de précision
supérieure - long double ?nombres décimaux encore plus
précis - unsigned int ?entier non signé
.. signifie facultatif
6Introduction au Langage C,C
- Déclaration d'une variable
- Type nom_de_la_variable valeur
- Exemple
- int nb
- float pi 3.14
- char c 'a'
- long i,j,k
- double r 6.2879821365
7Introduction au Langage C,C
- Affichage de la valeur d'une variable
- en C
- printf("format de l'affichage", variables)
- Exemple
- int i 8int j 10
- printf("i vaut d j vaut d \n",i,j)
- float r 6.28
- printf("le rayon f \n",r)
- Autres formats
- c ?caractère
- lf ?double
- s ?chaîne de caractères
- e ?réel en notation scientifique
8Introduction au Langage C,C
- Affichage de la valeur d'une variable
- en C
- cout ltltchaîne 1 ltltvariable 1ltltchaîne 2 ltltvariable
2 - Exemple
- int i 8int j 10
- cout ltlt"i vaut" ltlt i ltlt"j vaut"ltltj ltlt'\n'
- float r 6.28
- coutltlt"le rayon "ltlt r ltlt'\n'
9Introduction au Langage C,C
- Instructions de base
- opérateurs de base
- ,-,, / ? opérateurs arithmétique de base
- ? reste d'une division entière
- ? test d'égalité
- ! test de différence
- lt, gt, lt, gt ?test de comparaison
- ! ? négation
- ? ou logique pour évaluer une expression
- ? et logique pour évaluer une expression
10Introduction au Langage C,C
- Instructions de base
- opérateurs de base
- a 23 valeur de a 5
- r 32 valeur de a 1
- a (33) valeur de a 1
- a (65) valeur de a 0
- a (2!3) valeur de a 1
- a (6lt3) valeur de a 0
- a !1 valeur de a 0
- a ((33) (6lt3)) valeur de a 1
- a ((33) (6lt3)) valeur de a 0
11Introduction au Langage C,C
- Instructions de base
- boucle pour
- for(expr1expr2expr3)
-
- instructions
-
- expr1 évaluée 1 seule fois en début de boucle
- expr2 évaluée avant chaque itération. Si vrai
alors les instructions de la boucle sont
exécutées sinon la boucle est terminée - expr3 évaluée à la fin de chaque itération
12Introduction au Langage C,C
- Instructions de base
- boucle pour
- exemple
- // somme des 100 premiers entiers
- int i,s
- s 0
- for(i0ilt100i i1)
-
- s si / / ou si
-
- cout ltlt"s "ltltsltlt'\n'
13Introduction au Langage C,C
- Instructions de base
- boucle tant que
- while (expression)
-
- instructions
-
- expression est évaluée avant chaque itération. Si
le résultat est vrai alors les instructions sont
exécutées sinon on sort de la boucle - exemple
- i 0
- n 20
- while (iltn)
-
- i
14Introduction au Langage C,C
- Instructions de base
- boucle répéter
- do
-
- instructions
- while (expression)
- expression est évaluée après chaque itération. Si
le résultat est vrai alors les instructions sont
exécutées sinon on sort de la boucle - exemple
- i 0
- n 20
- do
-
- i
- while(iltn)
15Introduction au Langage C,C
- Instructions de base
- instruction conditionnelle simple si alors
- if (expression)
-
- instructions
-
- expression est évaluée après chaque itération. Si
le résultat est vrai alors les instructions sont
exécutées sinon on sort de la boucle. - exemple
- int i 5
- int n
- if (ilt20)
-
- n 0
16Introduction au Langage C,C
- Instructions de base
- instruction conditionnelle simple si alors sinon
- if (expression)
-
- instructions1
- sinon
-
- instrutions2
-
- expression est évaluée après chaque itération. Si
le résultat est vrai alors les instructions1 sont
exécutées sinon on exécute l'ensemble
instructions2 - exemple
- int i 5int n
- if (ilt20)
- n 0
- else
- n5
17Introduction au Langage C,C
- Instructions de base
- instruction conditionnelle multiple
- switch (expression)
-
- case valeur1
- instructions1break
- case valeur2
- instructions2break
- .
- .
- .
- case valeur3
- instruction3break
- default
- instruction4break
-
- expression est évaluée. Si le résultat vaut
valeur1, alors instruction1 est exécutée et on
quitte le switch, sinon si expression vaut
valeur2, , sinon on va dans default pour
exécuter instruction4.
18Introduction au Langage C,C
- Instructions de base
- instruction conditionnelle multiple
- exemple
- int c'a'
- switch (c)
-
- case 'a'
- file()break
- case 'b'
- save()break
- case 'q'
- quitter()break
- default
- beep()break
-
19Introduction au Langage C,C
- Instructions de base
- l'instruction break
- permet d'interrompre prématurément une boucle et
de se brancher vers la première instruction
n'appartenant pas à la boucle - exemple
- int iint n20
- for (i0ilt10i)
-
- if (n31) break
- nn2
-
- cout ltltnltlt'\n'
Quand n vaut 31 alors la boucle est interrompue
20Introduction au Langage C,C
- Les Pointeurs
- Deux manières d'utiliser une variable
- Par son nom ?adressage direct
- compilateur réserve de la mémoire pour la
variable - exemple
- int x 17
21Introduction au Langage C,C
- Les Pointeurs
- Par son adresse ?adressage indirect
- une variable de type pointeur contient l'adresse
d'une autre variable - Le lien entre pointeur et la variable pointée est
géré par le programmeur - exemple
- int x 17
- int px x
px pointe vers x
22Introduction au Langage C,C
- Les Pointeurs
- déclaration d'un pointeur
- type nom_du_pointeur
- exemples
- char buffer
- int pf
- float ppi
? C'est au programmeur d'initialiser le pointeur
23Introduction au Langage C,C
- Les Pointeurs
- initialisation d'un pointeur
- Il faut lui fournir l'adresse d'une variable
existant en mémoire - Il doit pointer vers une zone mémoire réservée
par le compilateur comme étant une variable - utilisation de l'opérateur d'adressage
- int f
- int pf,pg
- pf f
- pg (int)malloc(sizeof(int))
- .
- .
- free(gf)
création du lien entre le pointeur et la variable
allocation dynamique d'une variable de type int
création du lien entre pg et l'espace mémoire
réservé
libération de l'espace réservé
24Introduction au Langage C,C
- Les Pointeurs
- utilisation de l'opérateur d'indirection
- travaille la valeur de la variable pointée
- exemples
- int i 8
- int pi
- pi i
- cout ltltpiltlt'\n'
- pi 19
- cout ltltiltlt'\n'
-
8
19
25Introduction au Langage C,C
- Les tableaux statiques à 1 dimension
- définition
- Ensemble de variables de même type, de même nom
caractérisées par un index. - déclaration
- type nom_tableaudimension
- exemples
- char buffer80
- int mat10
doit être une constante
26Introduction au Langage C,C
- Les tableaux statiques à 1 dimension
- accès aux éléments du tableau
- Nom_tableauindice
- exemples
- buffer5 'c'
- mat6 10
- le premier élément commence à l'indice 0 !!
- Les valeurs ne sont pas initialisées !!
- Les débordements ne sont pas vérifiés
27Introduction au Langage C,C
- Les tableaux statiques à 2 dimensions et plus
- définition
- Il s'agit d'un tableau de tableaux
- déclaration
- type nom_tableaudim1dim2dimn
- exemples
- char buffer2080
- int mat610
- char livres1006080
28Introduction au Langage C,C
- Les tableaux statiques à 2 dimensions et plus
- accès aux éléments
- nom_tableauind1ind2indn
- exemples
- livre301520 'c'
- mat56 13
- cout ltlt mat56ltlt'\n'
29Introduction au Langage C,C
- Lien entre le nom d'un tableau à 1 dimension et
les pointeurs - Nom du tableau adresse du premier élément du
tableau - nom_tableaui peut s'écrire (nom_tableaui)
- exemples
- char buffer80
- buffer 'C' accès au premier caractère
- (buffer 5) 'V' accès au 6 ème caractère
30Introduction au Langage C,C
- Lien entre le nom d'un tableau à 2 dimension et
les pointeurs - un tableau 2d est un tableau de tableau de
dimension 1 - On peut donc dire que le nom d'un tableau 2d est
l'adresse d'un tableau d'adresse de tableaux de
dimension 1 - On dit aussi qu'il s'agit d'un pointeur de
pointeur - exemple
- int TAB67
- int p déclaration d'un pointeur de pointeur
- p TAB initialisation du pointeur de pointeur
31Introduction au Langage C,C
- Lien entre le nom d'un tableau à 2 dimension et
les pointeurs
tableaux d'entiers
tableaux de pointeurs vers des tableaux d'entiers
32Introduction au Langage C,C
- Initialisation dynamique d'un tableau
- Tableau une dimension
- int t
- t (int)malloc(20sizeof(int))
fonction de calcul automatique de la taille d'un
entier en octet
nom du tableau
fonction d'allocation dynamique de la mémoire
nombre d'éléments dans le tableau
33Introduction au Langage C,C
- Initialisation dynamique d'un tableau
- Tableau à deux dimensions nm
- déclaration dynamique du tableau de n pointeurs
et des n tableaux à une dimension de m éléments - quelques lignes de code sont nécessaires (voir
transparent suivant)
34Introduction au Langage C,C
- Initialisation dynamique d'un tableau
- Tableau à deux dimensions nm
- int TAB,l
- TAB (int)malloc(nsizeof(int))
- for (l0lltnl)
-
- TABl (int)malloc(msizeof(int))
-
- désallocation
- for (l0lltnl)
- free(TABl)
- free(TAB)
35Introduction au Langage C,C
- Les structures de données
- intérêt
- Rassembler des données hétérogènes caractérisant
une entité pour en faire un type utilisateur. - exemple
- point dans l'espace ?3 entiers
- nud d'un arbre binaire ?2 adresses vers les
fils, 3 entiers pour les données du nud - noms et références des pièces mécaniques
constituant une voiture ?600 tableaux de
caractères 600 entiers pour la référence
36Introduction au Langage C,C
- Les structures de données
- déclaration
- struct nom_structure
-
- type1 nomchamps1
- type2 nomchamps2
- .
- .
- .
- typeN nomchampsN
37Introduction au Langage C,C
- Les structures de données
- exemple et utilisation
- struct pt
-
- int x
- int y
- int z
- char nom
-
- main()
-
- struct pt p
38Introduction au Langage C,C
- Les structures de données
- simplification de l'écriture
- struct pt
-
- int x
- int y
- int z
- char nom
-
- typedef struct pt point
- main()
-
- point p
typedef struct pt int x int y int z char
nom point
Notations équivalentes
39Introduction au Langage C,C
- Les structures de données
- accès aux données
- Deux cas de figure
- On dispose du nom de la variable
- Accès par NomVariable.NomChamps
- exemple
- main()
-
- point p1
- p1.x 8 p1.y 9 p1.z 10
- cout ltltp1.xltltp1.yltltp1.zltlt'\n'
-
40Introduction au Langage C,C
- Les structures de données
- accès aux données
- Deux cas de figure
- On dispose de l'adresse de la variable (pointeur)
- Accès par NomVariable-gtNomChamps
- exemple
- main()
-
- point pp1, p1
- pp1 p1
- pp1-gtx 8 pp1-gty 9 pp1-gtz 10
- cout ltltpp1-gtxltltpp1-gtyltltpp1-gtzltlt'\n'
-
41Introduction au Langage C,C
- Les fonctions
- définition
- Ensemble d'instructions pouvant être appelés de
manière répétitive par un nom - déclaration
- type arg_ret nom_f( type arg1,type arg2, type
argn) -
- ensemble instructions
-
- arg_ret est l'argument renvoyé par la fonction
(instruction return - nom_f est le nom de la fonction
- arg1 argn sont les arguments envoyés à la
fonction
42Introduction au Langage C,C
- Les fonctions
- règles d'utilisation
- L'ordre, le type et le nombre des arguments
doivent être respectés lors de l'appel de la
fonction - L'appel d'une fonction doit être située après sa
déclaration ou celle de son prototype (voir
exemple transp suivant) - Si la fonction ne renvoie rien alors préciser le
type void
43Introduction au Langage C,C
Prototype de la fonction min
- Les fonctions
- exemple
- int min(int a, int b)
- void main()
-
- cout ltltmin(a,b)ltlt'\'
-
- int min(int a, int b)
-
- if (a ltb) return a
- else return b
-
Programme principal
Fonction min et son bloc d'instructions
44Introduction au Langage C,C
- Les fonctions
- Les paramètres se passent par valeur
- Recopie en mémoire des paramètres dans des
paramètres temporaires. - Toute modification des paramètres dans la
fonction est sans effet sur les paramètres
originelles - Quand on quitte la fonction, les paramètres
temporaires sont effacés de la mémoire - Recopie dans le sous programme appelant de la
valeur du paramètre retourné par la fonction
return.
45Introduction au Langage C,C
- Les fonctions
- exemple
- void permutter(int a, int b)
-
- int temp
- temp a
- a b
- b temp
-
- void main()
-
- int x3int y 5
- permutter(x,y)
- cout ltlt "x"ltltxltlt" y"ltltyltlt'\n'
Aucune action sur les paramètres x et y
x3 y5
46Introduction au Langage C,C
- Les fonctions
- Passage d'arguments par adresse
- On passe non pas la valeur de la variable mais
son adresse - Il est donc possible par les pointeurs de
modifier le contenu de l'adresse, donc la
variable originelle - Permet de modifier plusieurs arguments à la fois
dans une fonction - Permet de passer des tableaux en argument
47Introduction au Langage C,C
- Les fonctions
- exemple
- void permutter(int pa, int pb)
-
- int temp
- temp pa
- pa pb
- pb temp
-
- void main()
-
- int x3int y 5
- permutter(x,y)
- cout ltlt "x"ltltxltlt" y"ltltyltlt'\n'
-
Action sur les paramètres x et y
x5 y3
48Introduction au Langage C,C
- Les Fichiers
- Les fichiers sont soit
- binaires (un float sera stocké comme il est codé
en mémoire , d'où gain de place mais
incompatibilité entre logiciels) - formaté ASCII (un float binaire sera transformé
en décimal puis on écrira le caractère
correspondant à chaque chiffre). - Pour accéder aux données, on le fait soit
- De manière séquentielle (on accède au contenu
dans l'ordre du stockage) - Par un accès direct (on peut directement accéder
à n'importe quel endroit du fichier)
49Introduction au Langage C,C
- Les Fichiers
- Les Fonctions
- Prototypées dans stdio.h, io.h, fcntl.h
- Ouverture dun fichier
- handle open(char nomfic, int mode)
- nomfic pointeur vers une chaîne de caractère
contenant le chemin, le nom du fichier et
lextension du fichier - mode variable entière dont chaque bit possède
une signification particulière. Utilisation de
constantes prédéfinies - O_RDONLY Ouverture pour lecture seule
- O_WRONLY Ouverture pour écriture seule
- O_RDWR Ouverture pour lecture et écriture
- O_APPEND Ajout des données à la fin du
fichier - O_CREAT Crée le fichier sil nexiste pas
- O_BINARY Ouvre le fichier en mode Binaire
(Stockage de linfo comme elle est stockée dans
la mémoire de lordinateur) - O_TEXT Ouvre le fichier en mode Texte. (On
mémorise le code ASCII de chaque nombre ou
caractère)
50Introduction au Langage C,C
- Les Fichiers
- Les Fonctions
- Écriture dans un fichier
- int write(int handle, void bloc, unsigned
taille) - Handle numéro entier caractérisant le fichier
(renvoyé lors de louverture du fichier avec la
fonction open) - Bloc pointeur vers le bloc de données
- Taille taille en octet de ce bloc
- Lecture dans un fichier (idem écriture avec
fonction read) - int read(int handle, void bloc, unsigned
taille) - Fermeture dun fichier
- int close(int handle)
51Introduction au Langage C,C
- Les Fichiers
- Exemple
- // inclusion des entêtes des fonctions
- include ltio.hgt
- include ltfcntl.hgt
- include ltstring.hgt
- main()
-
- int handle // numéro caractérisant le fichier
- char string40 // tableau de caractères
- int length // Variable mémorisant la taille
du bloc de données - int x40 // entier x valant 40
- int y102 // entier y valant 102
- // ouverture du fichier Monfichier.txt avec
création s'il n'existe pas - // Fichier ouvert en écriture en mode texte
- handle open("c\\Monfichi.txt",O_CREAT O_RDWR
O_APPEND) - // Fonction (idem à printf) qui écrit un
message formaté dans un tableau - // de caractères (printf l'écrit vers l'écran)
- lengthsprintf(string,"valeur de xd valeur
de yd \n",x,y)