Académique Documents
Professionnel Documents
Culture Documents
Techniques de
Programmation
Pr. : Mohamed El KAMILI
Contact : mohamed.elkamili@usmba.ac.ma
Cycle : Ingénieur
Département : GE
Année : 2018/2019
Plan
Généralités
Programmation informatique
Algorithmique
Programmation en langage C
Introduction
Notion de variable en C
Mots-clés du langage C
Structures de contrôle
Les tableaux
Variables composites
Les fonctions
La récursivité
Les fichiers
Techniques de Programmation 2/102
1
01/10/2018
Programmation en C
Historique
L’histoire du C est très liée à l'histoire du système UNIX.
Programmation en C
Caractéristiques du langage C
Langage structuré;
2
01/10/2018
Programmation en C
Caractéristiques du langage C
Programmation en C
Caractéristiques du langage C
Fichier Compilateur C
Source C
Code
Assembleur
Assembleur
Code Objet
Code Linker
exécutable
3
01/10/2018
Programmation en C
Anatomie d’un programme C
Programme typique en C
include
Main() toujours la
1ère
fonction appelée
main()
instructions
Programmation en C
Programme typique en C
/* exemple de programme C :
-somme des nb de 1 à 10 et affichage de la valeur*/
En C le programme principal 1
#include <stdio.h> 0 s'appelle toujours main
int main (void) 1
{ déclarations de variables de
type entier (cases mémoire 2
int somme; int i; 2 pouvant contenir un entier)
somme = 0; 3
instruction d'affectation de
valeur à la variable somme 3
for (i = 1; i <= 10; i++)
4 { l'instruction entre accolades
somme = somme + i; est exécutée pour les valeurs 4
de i allant de 1 à 10
}
printf ("%d\n", somme); 5 affiche à l'écran la valeur de 5
somme = 0; l'entier contenu dans somme
}
4
01/10/2018
Programmation en C
Instruction en langage C
Les actions ou "instructions" en langage C ne sont en fait que
des opérations élémentaires (+,-, * etc…) sur des données
unitaires (variables).
Chaque instruction est suivie d'un ;
Le début d'un bloc est signalé par un { , la fin d'un bloc par }.
Un bloc devient l'équivalent syntaxique d'une instruction.
Exemple: {
x=1 Obligatoire
x=1;
y=2
Calcul
y=2;
z = x+y z=x+y;
imprimer z printf("%d",z);
};
optionnel
Techniques de Programmation 9/102
Programmation en C
Type d’instructions en langage C
Affectations
Opérations
Fonctions
Contrôle
5
01/10/2018
Programmation en C
La notion de variable en C
Nom d’une variable
Programmation en C
La notion de variable en C
Type d’une variable
6
01/10/2018
Programmation en C
La notion de variable en C
Déclaration d’une variable
Exemple : int a;
float note;
Programmation en C
La notion de variable en C
Initialisation d’une variable
7
01/10/2018
Programmation en C
La notion de variable en C
Portée ou visibilité d’une variable
Programmation en C
La notion de variable en C
Le type Caractère
8
01/10/2018
Programmation en C
La notion de variable en C
Le type Caractère : Table ASCII
Programmation en C
La notion de variable en C
Le type Caractère : Table ASCII
A retenir :
é, ö , ä, æ, œ etc…
9
01/10/2018
Programmation en C
La notion de variable en C
Le type Entier
Exemple : 13 = 8 + 4 +1 = 1*23+1*22+0*21+1*20
=0000000000001101
Déclaration d'une variable entier naturel x
unsigned int x;
short unsigned int x; (on force sur 16 bits)
long unsigned int x; (on force sur 32 bits)
Techniques de Programmation 19/102
Programmation en C
La notion de variable en C
Le type Entier relatif
00000110 = +6 en décimal
Et
10000110 = 6 en décimal
10
01/10/2018
Programmation en C
La notion de variable en C
Le type Entier relatif : Complément à 2
Programmation en C
La notion de variable en C
Le type Entier relatif : Complément à 2
11
01/10/2018
Programmation en C
La notion de variable en C
Le type Entier relatif : Complément à 2
-3 3
101 -4 011
100
Techniques de Programmation 23/102
Programmation en C
La notion de variable en C
Le type réel
Déclaration
float x,y;
x = 3.14;
y = 2.0 e+3;
12
01/10/2018
Programmation en C
La notion de variable en C
Le type réel : Représentation
SM Eb M
Programmation en C
La notion de variable en C
Le type réel : Représentation
13
01/10/2018
Programmation en C
La notion de variable en C
Résumé sur les types
Caractère : 1 octet
Ex : 'a' = 6116 0 1 1 0 0 0 0 1
Ex 2 : -5 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
x : indique le signe
Réel : 4 octets, représentation virgule flottante
Ex : -6,5 = -110,12 = -1,101 * 22 2+127 = 129 = 27 +20
1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 … 0 0 0
Programmation en C
La notion de variable en C
Complément de type : static
1, 1, 1, 1, … 1, 2, 3, 4, …
/* i est initialisée à chaque appel de /* i est initialisée à 0 à la
la fonction inc() */ compilation seulement */
Techniques de Programmation 28/102
14
01/10/2018
Programmation en C
La notion de variable en C
Complément de type : register
Register
register int i;
Programmation en C
La notion de variable en C
Conversion de type : Le casting
15
01/10/2018
Programmation en C
La notion de variable en C
Conversion de type : Le casting
Exemples :
char c; int i; float f;
// conversion entier vers char
c=98; // implicite : c prend le code ASCII 98 c-à-d ' b'
c = (char) 98; // explicite plus propre
// char vers entier
i= 'a' ; // i prend la valeur 97
i= (int) 'a' ; //plus propre
// entier vers réel
f=3; // f prend la valeur 3.0;
f=(float) 3; //+ propre
//réel vers entier, attention : troncature
i = 3.4; // i prend la valeur 3
i= -3.3; // i prend la valeur -3
i = (int) 3.4; // + propre
Programmation en C
La notion de variable en C
Conversion de type : Modifier la casse
16
01/10/2018
Programmation en C
La notion de variable en C
Les constantes
Une constante est une variable dont la valeur ne peut pas changer
durant la durée de vie d’un programme
Directive du préprocesseur
Utilisation du mot clé define qui est placé au début du programme
Instruction de déclaration
Utilisation du mot clé const qui est placé avant ou après le type de la
variable
Programmation en C
La notion de variable en C
Les constantes : exemples
#include <stdio.h>
#define CO 10
int c = 5;
void main(){
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("La résultat est : %d", (a+b)*c/CO);
}
#include <stdio.h>
int const co = 5;
void main(){
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("La résultat est : %d", (a+b)*co);
}
Techniques de Programmation 34/102
17
01/10/2018
Programmation en C
Expression en C
Une expression représente une donnée élémentaire : constante, variable,
un élément de tableau, la référence à une fonction ou à une valeur, le
résultat d'un calcul etc ….
Exemples
3
a+b
x=y
c = a+b
x <= y
x == y
i++
sin(3.14)
Programmation en C
Opérateurs arithmétiques
Opérateurs binaires
+,-
* , / , % (modulo)
Les opérandes doivent être des valeurs numériques.
entier opérateur entier => résultat entier
réel opérateur réel => résultat réel
entier opérateur réel => résultat réel
Exemples
int a,b; float a,b;
a=10; b= 3 a=12.6; b= 3.0
a+b 13 a+b 13.6
a-b 7 a-b 9.6
a*b 30 a*b 37.8
a/b 3 (division euclidienne) a/b 4.2 (division réelle)
a%b 1 a%b erreur de syntaxe
18
01/10/2018
Programmation en C
Opérateurs arithmétiques
Opérateurs binaires
Opérateur % :
- int a;
- float x;
(a+x) % 4 incorrect.
((int) (a+x))%4 correct
Si l'un des opérandes est de type caractère, c'est la valeur du code ASCII
qui est prise (conversion implicite char vers int ou float)
Programmation en C
Opérateurs arithmétiques
Opérateurs unaires
1. a/ signe : + , -
Exemple : a = -a;
int i =1;
++i;
printf("%d",i) ; -> 2;
Syntaxes : ++i ou i++
++i : la valeur de i est d'abord incrémentée, la valeur résultat est
utilisée dans l'expression courante
i++ : la valeur courante de i est utilisée dans l'expression courante,
puis i est incrémenté
19
01/10/2018
Programmation en C
Opérateurs arithmétiques
Opérateurs unaires : i++ ou ++i ?
Exemples
i=1; i=1;
printf("i= %d\n",i); => i=1 printf("i= %d\n",i); => i=1
printf("i= %d\n",++i); => i=2 printf("i= %d\n",i++); => i=1
printf("i= %d\n",i); => i=2 printf("i= %d\n",i); => i=2
Conclusions
1. appendre la règle (pour comprendre des programmes)
2. à n'utiliser que lorsque il n'y a pas d'ambiguïté :
x=y+z++; // à éviter
x++; // pas de risque
Programmation en C
Affectation en C
Affectation simple
syntaxe : variable = expression
la valeur de l'expression est stockée dans la mémoire à l'endroit
réservé pour la variable
Exemples :
a = 2; b=1; c=0;
a = b+c;
a = b && c;
la valeur de l'expression vaut la valeur affectée
20
01/10/2018
Programmation en C
Affectation en C
Affectation complexe
Affectation et opération : +=, -=, *=, /=, %=,<<= , >>=, &=, |=, ^=
Exemple
int i;
i= 3;
i+=2; (i=i+2;)
printf("%d\n",i); 5
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Deux fonction de base : putchar() et printf()
Fonction putchar()
Exemple
char c;
c='a';
putchar ( c );
putchar ('\n');
putchar('b');
21
01/10/2018
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction printf()
Syntaxe : printf (" liste des formats ", arg1, arg2, arg3, …, argn)
Exemple
printf("bon"); printf("jour");printf("\n") bonjour
i=j=1;
printf("i=%d\n",i) i=1
printf("%d%d%d\n",i,j,i+j); 112
printf("%d\t%d\t%d\t%d\n",i,j,i+j,sqrt(i)); 1 1 2 1
x=3.0;
printf("%f\t%d\n",x,i); 3.000000 1
printf("%d\n%d\n",i,i+j); 1
2
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction printf()
Exemple
int a,x;
a=32;
x = printf ("%d\n",a);
printf ("%d\n",x); => 3
22
01/10/2018
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction printf()
Caractères d’échapement
\n : saut à la ligne %% affichage du caractère '%'
\t : tabulation \a : alerte ; beep système
\p : saut à la page \\ : affichage du caractère '\'
\0 caractère null ; valeur 0, délimiteur de fin de chaîne de caractères
….
Techniques de Programmation 45/102
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction printf()
entiers :
%5d l'entier est imprimé sur 5 caractères au moins (blancs)
avec cadrage à droite
%-5d l'entier est imprimé sur 5 caractères au moins (blancs)
avec cadrage à gauche
réels :
%10f le réel est imprimé sur 10 caractères (en tout) avec 6
chiffres en partie décimale (cadrage à droite)
%-10f idem + cadrage à gauche
23
01/10/2018
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction printf()
Format variable
Programmation en C
Fonctions d’entrée/sortie : Entrée standard
Lecture depuis le clavier
Exemples
getchar();
while (c==getchar()) {
…..
};
24
01/10/2018
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction getchar()
Sert à la lecture de caractères isolés
la valeur de getchar() est le code ascii du caractère lu
utilisation
char c;
c = getchar();
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction scanf()
Sert à la lecture de données et convertit la succession de caractères donnés
en entiers, flottants, caractères, chaîne de caractères
arg1, arg2,……, argn sont les adresses des variables dans lesquelles on
stocke les valeurs lues
le format est une chaîne de caractères précisant le type des arguments afin
de convertir la suite de caractères lus dans les arguments
25
01/10/2018
Programmation en C
Fonctions d’entrée/sortie : Sortie standard
Fonction scanf()
Format
Exemple
int i; float x;
scanf("%d %f", &i, &x);
Programmation en C
Opérateurs relationnels et logiques
Valeur logique :
0 : faux
!0 : vrai
Exemple : if (3) traitement1 ; else traitement 2;
Equivalent à : traitement1;
26
01/10/2018
Programmation en C
Opérateurs relationnels et logiques
Opérateurs logiques :
&& : "et" logique
|| : "ou" logique
! : "non" logique
Programmation en C
Opérateurs bit à bit
Opèrent sur les représentations binaires des valeurs
& et binaire ,
| ou binaire,
^ ou-exclusif binaire,
~ complément à 1 ,
<<k décalage à gauche de k bits,
>>k décalage à droite de k bits,
Attention : & ≠ &&
Exemples
5 0000 0000 0000 0101
20 0000 0000 0001 0100
5 & 20 0000 0000 0000 0100 5 & 20 => 4
5 | 20 0000 0000 0001 0101 5 | 20 => 21
5 ^ 20 0000 0000 0001 0001 5 ^ 20 => 17
~5 1111 1111 1111 1010 -6
Affectation (bit-à-bit) : &=, |=, ^=, ~=
Techniques de Programmation 54/102
27
01/10/2018
Programmation en C
L’opérateur conditionnel ternaire ?... : …
Syntaxe
Exemple
maximum = (x>y) ? x : y;
Programmation en C
L’opérateur d’adressage
Adresse de : &
28
01/10/2018
Programmation en C
L’opérateur de taille
L’opérateur : sizeof
2 syntaxes possibles
1. sizeof expression
Exemple
int i,j ;
j= sizeof i; 2 ou 4 (octets)
2. sizeof (type)
Exemples
typedef char tab[100];
tab t;
int n;
n = sizeof(int), -> 2 ou 4 (octets)
n = sizeof(tab) -> 100 (char)
Programmation en C
Opérateurs divers
29
01/10/2018
Programmation en C
Priorité des opérateurs
Priorité Opérateurs Description Associativité
15 () [ ] -> . opérateurs d'adressage Gauche
++ -- incrément/décrément
~ complément à un (bit à bit)
! non unaire
14 Droite
&* adresse et valeur (pointeurs)
(type) conversion de type (cast)
+- plus/moins unaire (signe)
13 */% opérations arithmétiques Gauche
12 +- "" Gauche
11 << >> décalage bit à bit Gauche
10 < <= > >= opérateur relationnels Gauche
9 == != "" Gauche
8 & et bit à bit Gauche
7 ^ ou exclusif bit à bit Gauche
6 | ou bit à bit Gauche
5 && et logique Gauche
4 || ou logique Gauche
3 ?: conditionnel Droite
= += -= *= /= %=
2 assignations Droite
>>= <<= &= ^= |=
1 , séparateur Gauche
Programmation en C
Priorité des opérateurs (exercices)
main(){
int x, y , z;
x = 2; x =0 ; y =0; z=0;
x += 3 + 2; printf("%d\n",x); x+=y+=z;
x -= y = z = 4; printf("%d%d%d\n",x,y,z); printf("%d\n", x < y ? y : x) ;
x = y == z; printf("%d%d%d\n",x,y,z); printf("%d\n", x < y ? x++ : y++) ;
x == (y = z); printf("%d%d%d\n",x,y,z); printf("%d, %d\n", x , y);
printf("%d\n", z += x < y ? x++ : y++)
x = 3; y =2 ; z = 1; ;
x = x && y || z ; printf("%d\n", x); printf("%d, %d\n", y , z);
printf ("%d\n", x || ! y && z);
x = y = 0; x = 3; y = z = 4;
z = x ++ -1; printf ("%d, %d\n", x, z); printf("%d\n",( z >= y >= x) ? 1 : 0)
z += -x ++ + ++ y; printf ("%d, %d\n", x, z); ;
printf("%d\n", z >= y && y >= x ) ;
x =1 ; y =1; x = y = z = 0;
printf("%d\n", ! x | x); }
printf("%d\n", ~ x | x);
printf("%d\n", x ^ x);
x <<= 3 ; printf("%d\n", x);
y <<= 3 ; printf("%d\n", y);
y >>= 3 ; printf("%d\n", y);
30
01/10/2018
Programmation en C
Structures de contrôle en C
A quoi servent-elles ?
Programmation en C
Structures de contrôle en C
Clause conditionnelle if else
Syntaxe
if (expression){
Bloc1
}
else{
Bloc2
}
31
01/10/2018
Programmation en C
Structures de contrôle en C
Clause sélective switch
Programmation en C
Structures de contrôle en C
Clause sélective switch : exemple
int i,j,k;
printf("entrez deux nombres entiers \n");
scanf("%d %d",&i,&j);
printf("entrez 0 pour avoir un quotient entier\n");
printf("ou 1 pour avoir le quotient fractionnaire\n");
scanf("%d",&k);
switch(k)
{ case 0 :
printf("%d\n",i/j);
break;
case 1 :
printf("%f\n",(float)i/j);
break;
default :
printf("il faut entrer 0 ou 1\n");
printf("relancez l'execution\n");
}
Techniques de Programmation 64/102
32
01/10/2018
Programmation en C
Structures de contrôle en C
Boucle for
Syntaxe
…
…
…
Programmation en C
Structures de contrôle en C
Boucle while
Syntaxe
while (condition) {
…
…
…
33
01/10/2018
Programmation en C
Structures de contrôle en C
Boucle do while
Syntaxe
do {
…
…
…
} while (condition)
Programmation en C
Les tableaux en C
Définition : Un tableau (unidimensionnel) A est une variable
structurée formée d'un nombre entier N de variables simples du
même type, qui sont appelées les composantes du tableau. Le
nombre de composantes N est alors la dimension du tableau.
Exemple : La déclaration
int JOURS[12]={31,28,31,30,31,30,31,31,30,31,30,31};
34
01/10/2018
Programmation en C
Les tableaux en C
Utilisation
chaque élément du tableau est accessible par un indice qui doit
être de type entier, quelque soit le type des éléments du
tableau
exemples :
int i ;
tab[2] 3eme élément du tableau
tab[2+3] 6eme élément du tableau
tab[i] i+1eme élément du tableau
Exemples :
stocker les 100 premiers nombres pairs : 0,2,4,...,196,198
int i, t[100];
for (i=0; i < 100; i=i+1)
t[i]= 2*i;
Programmation en C
Les tableaux en C
Remarques
35
01/10/2018
Programmation en C
Les tableaux en C
Réservation de mémoire
Programmation en C
Les tableaux en C
Réservation de mémoire
#include <stdlib.h>
void main(void) {
double * tab; //déclaration d’un tableau de taille variable (en réalité c’est un pointeur)
double tabfixe[50]; /* Tableau de taille fixe, 50 éléments */
int imax;
36
01/10/2018
Programmation en C
Les tableaux en C
Les tableaux multidimensionnels
Programmation en C
Les tableaux en C
Les tableaux multidimensionnels
37
01/10/2018
Programmation en C
Les tableaux en C
« Pointeurs » vers des vecteurs :
0 1 2 3 tableau 1D dont chaque élément
« pointe » vers un vecteur
0 0 0 0
1 1 1 1 tab[2][4],
Programmation en C
Les tableaux en C
Les tableaux multidimensionnels
imax = 50;
jmax = 40;
38
01/10/2018
Programmation en C
Les tableaux en C
Les chaînes de caractères
La notation " suite de caractères " crée une constante de type
tableau de caractères.
Programmation en C
Les tableaux en C
Opérations sur les chaînes de caractères
39
01/10/2018
Programmation en C
Les tableaux en C
Opérations sur les chaînes de caractères
Programmation en C
Les tableaux en C
Opérations sur les chaînes de caractères
40
01/10/2018
Programmation en C
Les tableaux en C
Opérations sur les chaînes de caractères
Les fonctions en C
Programmation
Les fonctions
Une fonction permet de :
Remplacer une partie qui se répète
Découper un programme en parties isolées -> débogage, lisibilité, etc..
Exemples : fonctions d'E/S (scanf, printf, …), mathématiques (sin, cos, …)
Organisation d'un programme :
type fonction1 (arguments) {
Déclarations de variables et de types locaux à la fonction
Instructions
}
type fonction2 (arguments) {
Déclarations de variables et de types locaux à la fonction
Instructions
}
...
void main (arguments) {
Déclarations de variables et de types locaux à la fonction
Instructions
}
41
01/10/2018
Exemple
Programmation en C
Les fonctions : Exemple
char minus_majus (char c1) {
char c2; /* déclarations locales */ Argument
Type de if (c1 >= 'a' && c1 <= 'z')
la valeur
de retour c2 = c1+'A'-'a';
else c2=c1;
Instructions
return (c2);
}
void main() { Valeur renvoyée
char c,majuscule;
printf("Donner un caractere\n");
c = getchar(); getchar();
Appel de la fonction
majuscule = minus_majus(c);
printf ("La majuscule de %c est %c\n",c,majuscule);
}
Définition de fonction
Programmation en C : syntaxe
Les fonctions : Définition et syntaxe
42
01/10/2018
Type de la fonction
Programmation en C
Les fonctions : Type de la fonction
Une fonction peut ne pas renvoyer de valeur.
Exemple
void print_majus (char c1) {
char c2;
if (c1 >= 'a' && c1 <= 'z')
c2 = c1+'A'-'a';
else c2=c1;
printf("la majuscule de % est %c, c1, c2);
return; /* ou bien return (); */
}
Dans ce cas, le type de la fonction est : void
Le type de la fonction ne peut être que :
• int, float, char, ou adresse de
• ni tableau, ni autre type complexe
Techniques de Programmation 85/102
Instruction return
Programmation en C
Les fonctions : Instruction return
1. Indique la valeur de retour de la fonction.
2. Arrête l'exécution de la fonction
char minus_majus (char c1) {
if (c1 >= 'a' && c1 <= 'z')
return (c1+'A'-'a');
else return (c1);
}
43
01/10/2018
void main() {
float z,t;
z = puiss(10.7,2);
t = puiss (z, -6);
...
}
Techniques de Programmation 87/102
44
01/10/2018
Règles de déclaration
Programmation en C et d'appel
Les fonctions : Déclaration et appel
Toute fonction ne peut appeler que des fonctions déclarées avant elle ou elle-même.
... f1 (..) {
...
}
... f2 (...) {
...
}
... f3 (...) {
...
}
void main (...) {
...
}
la fonction main peut appeler f1,f2,f3
la fonction f3 peut appeler f1,f2,f3
la fonction f2 peut appeler f1, f2
la fonction f1 peut appeler f1
Lorsqu'une fonction s'appelle elle-même, on dit qu'elle est "récursive".
Techniques de Programmation 89/102
Déclarations enen"avance"
Programmation C
Les fonctions : Déclaration et appel
Règle précédente contraignante
Solution : Prototype
En début de programme on donne le type de chaque fonction , son nom, le
nombre et les types des arguments
Information suffisante pour le compilateur.
float puiss(float,int);
/*Prototype de la fonction puiss*/
void main(){ /*Appel avant déclaration*/
puiss (10.2, 5);
...} /*Déclaration de la fonction */
float puiss(float x, int n){
float y=1.0;
if (n>0) for (i=1;i<=n;i++) y = y*x;
else for (i=1;i<=n;i++) y = y/x;
return (y);
}
Techniques de Programmation 90/102
45
01/10/2018
Fichier "header"
Programmation en C
Les fonctions : Fichier "header"
Conseil de programmation :
Dans un fichier ".h" déclarer les prototypes de toutes les
fonctions, par exemple "mylib.h"
46
01/10/2018
Détail
Programmation en C
Les fonctions : Passage des paramètres
void f (int a){
a=a+1; /*3*/
}
void main(){
int b;
b=0; /*1*/
f(b); /*2*/
printf("%d\n",b); /*4*/
}
b 0 b 0 b 0 b 0 Inchangé
Copie
a 0 a 1
Modification des
Programmation enparamètres
C
Les fonctions : Modification des paramètres
Si l'on veut qu'une fonction modifie un paramètre, on ne passe pas la
variable mais l'adresse de la variable. Il y a copie de l'adresse de la
variable. Dans la fonction on va chercher la variable par son adresse.
Rappels :
opérateur & : &variable -> adresse de la variable
opérateur * : * adresse -> valeur qui se trouve à cette adresse
int i;
int * adresse_i; /* déclaration d'une adresse d'entier */
i=0;
adresse_i=&i;
printf("%d\n",i); -> 0;
...
47
01/10/2018
Programmation en C
Les fonctions : Modification des paramètres
void f2(int *a){ // a est l'adresse, *a est l'entier
*a=*a+1; /*t3 on incrémente le mot d'adresse a*/
}
void main(){
int b;
b=0; /*t1*/
f2(&b); /*t2 &b est l'adresse de b */
printf("%d\n",b); /*t4*/ -> 1
}
b 0 728 b 0 b 1 *a b 1
Fichier "header"
Programmation en C
Relation entre tableau et pointeur
En C, le nom d’un tableau représente l’adresse de sa composante 0,
donc a == &a[0]
C'est pour cela que les tableaux passés comme paramètres dans une
fonction sont modifiables
Pour le compilateur, un tableau comme argument de fonction, c’est un
pointeur vers sa composante 0 (à la réservation mémoire près).
La fonction peut donc modifier n’importe quel élément du tableau
(passage par référence)
Le paramètre peut soit être déclaré comme tableau, soit comme
pointeur
int function(int a[], int size) int funtion(int *p, int size)
{ {
48
01/10/2018
Fichier "header"
Programmation en C
Relation entre tableau et pointeur
Notations
A[0] est équivalent à *A
A[i] est équivalent à *(A + i)
&A[0] est équivalent à A
Exemple
Short T[8] = { 10, 20, 30, 40, 50, 60, 70, 80};
p 1000
short *p = T;
printf("%d\n", T[3]);
printf("%d\n", *(T + 3)); 40
printf("%d\n", *(p + 3)); 40 T
10 20 30 40 50 60 70 80
printf("%d\n", p[3]); 40
1000 1004 1008 1012
40 1002 1006 1010 1014
Programmation en C
Les structures de données
Une structure est une collection de plusieurs variables (champs)
groupées ensemble pour un traitement commode
49
01/10/2018
Programmation en C
Les structures de données : Déclaration
Les structures sont définies en utilisant le mot-clé struct
struct Membre
struct Date {
{ char nom[80];
int jour; char adresse[200];
int mois; int numero;
! int an; float amende[10];
}; struct Date emprunt;
struct Date creation;
};
struct Livre
{ struct Pret
char titre[80]; {
char auteur[80]; struct Livre b;
float prix; struct Date due;
}; struct Membre *who;
};
Programmation en C
Les structures de données : Instanciation
Une fois la structure définie, les instances peuvent être déclarées
Par abus de langage, on appellera structure une instance de
structure
struct Date
{
int jour;
int mois;
int an; Déclaration avant ‘;’
} hier, demain;
50
01/10/2018
Programmation en C
Les structures de données : Accès aux membres
struct Membre m;
printf(”amendes: ");
for(i = 0; (i < 10) && (m.amende[i] > 0.0); i++)
printf("%.2f Euros", m.amende[i]);
Programmation en C
Les structures de données : Affectation
temp = m;
Techniques de Programmation 102/102
51
01/10/2018
Programmation en C
Les structures de données : Passage comme paramètres
Une structure peut être passée, comme une autre variable,
par valeur ou par adresse
Passer par valeur n’est pas toujours efficace (recopiage à
l’entrée)
Passer par adresse ne nécessite pas de recopiage
Par_valeur(m);
Par_reference(&m);
Programmation en C
Les structures de données : Pointeur sur structure
Syntaxe pour accéder aux membres : p->name
L’écriture p->name est synonyme de (*p)->name, où p est un
pointeur vers une structure
52
01/10/2018
Références
http://www.wikipedia.org/
53