Beruflich Dokumente
Kultur Dokumente
Bref historique
Pourquoi utiliser
le langage C
Cycle de dveloppement du programme
Votre premier programme C
20/09/15
Programmer en langage C
20/09/15
Programmer en langage C
Introduction
20/09/15
Programmer en langage C
Introduction
20/09/15
Programmer en langage C
Introduction
Programmer en langage C
20/09/15
Programmer en langage C
Introduction
Bibliothques prcompiles
(.lib)
Introduction
#include
#include <math.h>
..
Main()
{
..
}
..
..
math.lib
Programme executable
(.exe)
20/09/15
Programmer en langage C
Affichage
printf(Bonjour);
}
20/09/15
Programmer en langage C
Bonjour
Introduction
#include<stdio.h>
Main()
{
Exemple
de programme en langage C
Structure dun programme en Langage C
Les mots-cls
Les types de base
Dclarations des variables simples
20/09/15
Programmer en langage C
10
Programmer en langage C
Programme principal
20/09/15
Bloc
11
main()
{ int i,a;
clrscr();
printf("Veuiller introduire un nombre:",a);
scanf("%d",&a);
for(i=a+1;i<=a+10;i++)
{
printf("%d\t",i);
}
getch();
#include<conio.h>
#include<stdio.h>
}
20/09/15
Programmer en langage C
12
#include<conio.h>
#include<stdio.h>
#define a 4
main()
{
clrscr();
gotoxy(4,4);
printf("%d",a );
getch();
20/09/15
Programmer en langage C
13
#include<stdio.h>
#include<conio.h>
main()
{ int i,n,j;
char T[20];
puts("entrer la taille:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("entrer
T[%d]=",i);
scanf("%c\n",&T[i]);
getch();
}
20/09/15
for(i=0;i<n;i++)
{
if(T[i]==T[i+1])
{
for(j=n;j>=i+2;j--)
T[j]=T[j-1];
n++;
T[i+1]='*';
}
}
for(i=0;i<n;i++)
printf("%c\t",T[i]);
getch();
}
Programmer en langage C
14
Programmer en langage C
15
Programmer en langage C
16
2.
3.
20/09/15
Programmer en langage C
17
Programmer en langage C
18
Programmer en langage C
19
20/09/15
Programmer en langage C
20
Conseils:
Ajouter de nombreux commentaires dans le code
Programmer en langage C
21
Les mots-cls
20/09/15
Programmer en langage C
22
20/09/15
Programmer en langage C
23
20/09/15
Programmer en langage C
24
Caractres particuliers
les principaux sont rsums dans le tableau suivant :
Chanes de caractres
Les chanes de caractres sont vues comme un pointeur
Programmer en langage C
25
De domaine
signed pour les entiers relatifs
unsigned pour les entiers naturels positifs ou nuls
20/09/15
Programmer en langage C
26
/* Prcision du signe */
unsigned long int n; //n est un entier non sign sur 32 bits
20/09/15
Programmer en langage C
27
20/09/15
Programmer en langage C
28
Ex : 372 ;
octale (base 8) : on commence par un 0 suivi de
chiffres octaux. Ex : 0477 ;
hxadcimale (base 16) : on commence par 0x (ou 0X)
suivis de chiffres hxadcimaux (0-9, a-f). Ex : 0x5a2b,
0X5a2b, 0x5A2b.
20/09/15
Programmer en langage C
29
20/09/15
Programmer en langage C
30
Programmer en langage C
20/09/15
31
20/09/15
Programmer en langage C
32
char s;
20/09/15
Programmer en langage C
33
dclaration
Exemples:
int max=123;
char tab=c;
20/09/15
Programmer en langage C
34
Le mot-cl typedef
Le mot-cl typdef permet de crer un synonyme
pour un type de donne existant. Par exemple
linstruction :
typedef int entier;
20/09/15
Programmer en langage C
35
Exercices
20/09/15
Programmer en langage C
36
Exercices
Grand-cout
g) RAYON
h) rayon
i) Cela_est_une_variable_pour_stocker_la_largeur
f)
20/09/15
Programmer en langage C
37
Dfinition
de variables
Programmer en langage C
38
global
Programmer en langage C
39
20/09/15
Programmer en langage C
40
20/09/15
Programmer en langage C
41
Classe mmoire
Int a;
main ()
{
Int b;
Static char c;
}
extern int b ;
20/09/15
Programmer en langage C
42
Instructions, Expressions et
Les structures de
Oprateurs
contrle
La
rcursivit
Les conversions de types
Principales fonctions dentres-sorties standard
20/09/15
Programmer en langage C
43
Les instructions :
Une
Les blocs:
La syntaxe du langage C
entre accolades:
{
printf("Hello");
printf("world!");
{printf("Hello");
printf("world!");}
}
20/09/15
Programmer en langage C
44
Les expressions:
La syntaxe du langage C
Programmer en langage C
45
La syntaxe du langage C
Loprateur
x=6+(y=4+5);
a=b=2;
20/09/15
Programmer en langage C
46
20/09/15
Programmer en langage C
La syntaxe du langage C
47
Oprateurs arithmtiques
La syntaxe du langage C
20/09/15
Programmer en langage C
48
Remarques :
Les
20/09/15
Programmer en langage C
La syntaxe du langage C
Oprateurs arithmtiques
49
Oprateurs arithmtiques
Les oprateurs unaires oprent sur une seule variable ou
oprande.
Concernant lincrmentation pr/postfixe, voici un petit
exemple: Supposons que la valeur de N soit gale 3 :
Incrmentation postfixe : X = N++ ;
Rsultat : N = 4 et X = 3
Incrmentation prfixe : X = ++N ;
Rsultat : N = 4 et X = 4
Dcrmentation postfixe : X = N-- ;
Rsultat : N = 2 et X = 3
Dcrmentation prfixe : X = --N ;
Rsultat : N = 2 et X = 2
20/09/15
Programmer en langage C
La syntaxe du langage C
Remarques
50
Oprateurs de comparaison
20/09/15
Programmer en langage C
La syntaxe du langage C
51
Oprateurs de comparaison
La syntaxe du langage C
20/09/15
Programmer en langage C
52
Oprateurs de comparaison
20/09/15
Programmer en langage C
La syntaxe du langage C
#include <stdio.h>
void main ()
{
int x=14,y=1; // x est diffrent de y
if (x = y)
//erreur!!! il faudrait crire if (x == y)
printf("x est gal y (%i=%i)\n",x,y);
else
printf("x est diffrent de y (%i!=%i)\n",x,y);
}
53
Oprateurs logiques
20/09/15
Programmer en langage C
La syntaxe du langage C
54
Exemples
La syntaxe du langage C
Programmer en langage C
55
20/09/15
Programmer en langage C
La syntaxe du langage C
56
20/09/15
Programmer en langage C
La syntaxe du langage C
57
20/09/15
Programmer en langage C
La syntaxe du langage C
58
Autres oprateurs
Oprateur squentiel ( , )
Exprime des calculs successifs dans une mme expression. Le type
20/09/15
Programmer en langage C
La syntaxe du langage C
59
Autres oprateurs
La syntaxe du langage C
20/09/15
Programmer en langage C
60
La syntaxe du langage C
20/09/15
Programmer en langage C
61
Instructions, Expressions et
Oprateurs
Oprateurs
()
+ - ++ -- !
< <=
==
&&
||
?:
10
= += -= *= /= %=
20/09/15
Associativit
>
>=
!=
Programmer en langage C
La syntaxe du langage C
Priorit
62
Exercices
1)
x*(q==2)
g) x*(q=2)
h) (q-2)&&(n-10)
i) q&&n
f)
20/09/15
a) long 12
b) float 11,75
c) long 4
d) int 0
e) long 5
f) float 1,75
g) int 0
h) int 1
Programmer en langage C
La syntaxe du langage C
63
Exercices
-1 si n est ngatif
0 si n est nul
1 si n est positif
n ? (n>0 ? 1: -1) : 0
20/09/15
Programmer en langage C
La syntaxe du langage C
64
La syntaxe du langage C
for
while
dowhile
Branchement inconditionnel
Break, goto, continue
20/09/15
Programmer en langage C
65
Forme 1
if (expression) instruction-1;
20/09/15
Programmer en langage C
La syntaxe du langage C
66
Forme 3
if (expression-1)
instruction-1;
else if (expression-2)
instruction-2;
else
instruction-3;
Les instructions if sont imbriques. Si expression-1 est vraie, instruction-1
est excute. Dans le cas contraire expression-2 est value si cette dernire est
vraie instruction-2 est excute. Si les deux expressions sont fausses, cest
instruction-3 qui est excut
20/09/15
Programmer en langage C
La syntaxe du langage C
if (expression) instruction-1;
else instruction-2;
Si expression est vraie, instruction-1 est excute, sinon cest instruction-2 qui est
excute.
67
Exemples:
if (salaire >45.000)
tax=0.30;
else
tax=0.25;
Exemple 2
if (age <18)
printf(mineur);
else if (age <65)
printf(adulte);
else
printf(personne age);
20/09/15
Programmer en langage C
La syntaxe du langage C
Exemple 1
68
Programmer en langage C
69
20/09/15
Programmer en langage C
La syntaxe du langage C
70
Syntaxe
20/09/15
Programmer en langage C
La syntaxe du langage C
switch (<condition>) {
case <valeur 1> : <action 1>; break;
case <valeur 2> : <action 2>; break;
71
Remarques :
expression est value ;
sil existe un nonc case avec une constante qui est gale la
La syntaxe du langage C
Attention.
Lorsquil y a branchement russi un case, toutes les
Programmer en langage C
72
20/09/15
Programmer en langage C
La syntaxe du langage C
#include<stdio.h>
void main() {
int a,b,d;
char operateur;
Printf( Entrez un oprateur (+, -,* ou /):);
Scanf(%c,&operateur);
Printf( Entrez deux entiers:);
Scanf(%d,&a); Scanf( %d,&b);
switch(operateur){
case- : y=a-b; printf(%d,y);break;
case+ : y=a+b; printf(%d,y); break;
case* : y=a*b; printf(%d,y); break;
case/ : y=a/b; printf(%d,y); break;
default : printf(oprateur inconnu\n);break;
}
}
73
while (condition)
une-instruction;
Forme 2
while (condition) {
Des instructions;
}
La syntaxe du langage C
Forme 1
20/09/15
Programmer en langage C
74
Exemple
#include <stdio.h>
void main ()
{ int i=1, N;
printf("N=\n"); scanf("%d",&N);
while (i <= N) {
printf("%d ", i); i = i+1;}
printf("\n");
}
20/09/15
Programmer en langage C
La syntaxe du langage C
75
while imbriqu
20/09/15
Programmer en langage C
La syntaxe du langage C
#define MAX 4
int i=0,j;
while (i < MAX ) {
j=0;
while (j < MAX ) {
printf(" position : %d \t %d\n",i,j);
j++;
}
i++;
}
76
do
une-instruction;
while (condition)
Forme 2
do {
Des instructions;
} while (condition)
20/09/15
Programmer en langage C
La syntaxe du langage C
Forme 1
77
Exemple :
20/09/15
Programmer en langage C
La syntaxe du langage C
#include <stdio.h>
#define MAX 4
void main()
{
int i=MAX;
do {
printf("Valeur de i : %i\n",i);
i++;
} while (i < MAX);
}
78
{
liste dinstructions
}
Les crochets [ et ] signifient que leur contenu est facultatif
Dans la construction de for :
expression1 : effectue les initialisations ncessaires avant
lentre dans la boucle;
expression2 : est le test de continuation de la boucle ; le test
est valu avant lexcution du corps de la boucle;
expression3 : est value la fin du corps de la boucle.
20/09/15
Programmer en langage C
La syntaxe du langage C
79
Remarques
souvent plusieurs initialisations spares par des
virgules.
For(i=0,j=1,k=5;.;)
La syntaxe du langage C
20/09/15
Programmer en langage C
80
est quivalente
expression1;
while(expression2)
{
instructions;
expression3;
}
20/09/15
Programmer en langage C
La syntaxe du langage C
81
Exemples
Programme pour calculer la somme de 1 100
Int n, i,fact;
For(fact=1,i=1;i<=n;i++)
fact*=i;
Printf(%d!= %d\n,n,fact);
20/09/15
Programmer en langage C
La syntaxe du langage C
Int n,total;
For(total=0,n=1;n<=100;n++)
total+=n;
Printf(la sommes des nombres de 1 100 est %d\n,total);
82
20/09/15
Programmer en langage C
La syntaxe du langage C
83
20/09/15
Programmer en langage C
Evaluation:
Dbut tour 1
Bonjour
Dbut tour 2
bonjour
fin tour 2
Dbut tour 3
Bonjour
Aprs la boucle
La syntaxe du langage C
#include <stdio.h>
void main( )
{ int i;
for (i = 1 ; i<=10 ; i++){
printf(dbut tour %d\n ,i) ;
printf( bonjour\n);
if (i ==3) break ;
printf(" fin tour%d\n", i) ;
}
printf(" aprs la boucle\n") ;
}
84
20/09/15
Programmer en langage C
La syntaxe du langage C
Instruction continue
85
20/09/15
Programmer en langage C
Evaluation:
Dbut tour 1
Dbut tour 2
Dbut tour 3
Dbut tour 4
Bonjour
Dbut tour 5
Bonjour
La syntaxe du langage C
Void main()
{ int i;
for(i=1;i<=10;i++)
{ printf(dbut tour %d\n ,i) ;
if (i <4) continue ;
printf( bonjour\n);
}
}
86
Instruction goto
quelconque du programme.
Void main()
{ int i;
for(i=1;i<=10;i++)
{ printf(dbut tour %d\n ,i) ;
printf( bonjour\n);
if (i ==3) goto sortie ;
printf( fin tour%d\n", i);
}
Sortie:printf (" aprs la boucle\n") ;
}
20/09/15
Programmer en langage C
Evaluation:
Dbut tour 1
Bonjour
fin tour 1
Dbut tour 2
bonjour
fin tour 2
Dbut tour 3
Bonjour
Aprs la boucle
La syntaxe du langage C
87
La rcursivit
20/09/15
Programmer en langage C
La syntaxe du langage C
Le langage C autorise des appels de fonctions. Celleci peut prendre deux aspects:
88
La rcursivit
Exemple
20/09/15
Programmer en langage C
La syntaxe du langage C
#include <stdio.h>
int fact (int x)
{ printf (Computing fact %d\n, x) ;
if (x == 1)
return 1 ;
else
return x * fact (x-1) ;
}
Void main (){
printf (5! = %d\n, fact (5)) ;
}
89
La syntaxe du langage C
20/09/15
Programmer en langage C
90
1.
2.
3.
4.
5.
20/09/15
Programmer en langage C
La syntaxe du langage C
91
long double
double
Float
unsigned long long
long long
unsigned long
long
unsigned int
int
20/09/15
Programmer en langage C
La syntaxe du langage C
La syntaxe du langage C
92
Conversion implicite
dune expression) dans un autre type avant de lutiliser
par une conversion implicite. Cette opration est
appele cast.
cast Elle se ralise de la manire suivante :
(type) expression
Prenons pour exemple lexpression : i = (int) f + (int) d ;
f et d sont convertis en int, puis additionns. Le rsultat
20/09/15
Programmer en langage C
La syntaxe du langage C
93
Exemple
li = f + i ;
d = li + i ;
i=f+d;
20/09/15
Programmer en langage C
La syntaxe du langage C
94
Putchar
Puts
Printf
La syntaxe du langage C
Getchar
scanf
20/09/15
Programmer en langage C
95
La fonction getchar
caractre partir du clavier. La syntaxe dutilisation de
getchar est la suivante : var=getchar();
Notez que var doit tre de type char. Exemple :
#include <stdio.h>
void main() {
char c;
printf("Entrer un caractre:");
c = getchar();
printf("Le caractre entr est %c\n",c);
}
20/09/15
Programmer en langage C
La syntaxe du langage C
96
La fonction putchar
lordinateur. putchar constitue alors la fonction
complmentaire de getchar. La syntaxe dutilisation est
la suivante : putchar(var);
o var est de type char. Exemple :
#include <stdio.h>
Void main() {
char c;
printf("Entrer un caractre:");
c = getchar();
putchar(c);
}
20/09/15
Programmer en langage C
La syntaxe du langage C
97
La fonction puts
Cette fonction affiche, sur stdout, la chane de
20/09/15
Programmer en langage C
La syntaxe du langage C
Syntaxe : puts(ch);
98
20/09/15
Programmer en langage C
La syntaxe du langage C
99
Conversion en
criture
%d
int
dcimale signe
%ld
long int
dcimale signe
%u
unsigned int
%lu
unsigned long
%o
unsigned int
%lo
unsigned long
%x
unsigned int
%lx
unsigned long
20/09/15
Programmer en langage C
La syntaxe du langage C
100
Conversion en
criture
%f
float
%lf
Long float
%e
Double
%le
Long double
%g
Double
%lg
Long double
%c
unsigned char
caractre
%s
char*
Chane de caractres
20/09/15
Programmer en langage C
La syntaxe du langage C
101
printf("|% d|\n",14);
| 14|
printf("|% d|\n",-14); |-14|
printf("|%x|\n",0x56ab); |56ab|
printf("|%X|\n",0x56ab); |56AB|
printf("|%o|\n",14); |16|
printf("|%#o|\n",14); |016|
printf("|%10d|\n",14);
| 14|
printf("|%f|\n",1.234567890123456789e5);
printf("|%.4f|\n",1.234567890123456789e5);
20/09/15
Programmer en langage C
La syntaxe du langage C
|123456.789012|
|123456.7890|
102
printf("|%e|\n",1.234567890123456789e5); |1.234568e+05|
printf("|%.4e|\n",1.234567890123456789e5); |1.2346e+05||
printf("|%.4g|\n",1.234567890123456789e-5); |1.235e-05|
printf("|%.4g|\n",1.234567890123456789e-3); |0.001235|
printf("|%.8g|\n",1.234567890123456789e5); |123456.79|
20/09/15
Programmer en langage C
La syntaxe du langage C
103
Programmer en langage C
La syntaxe du langage C
104
Exemple
#include <stdio.h>
void main()
{
int i ;
printf("entrez un entier sous forme hexadecimale i = ");
scanf("%x",&i);
printf("i = %d\n",i);
}
20/09/15
Programmer en langage C
La syntaxe du langage C
105
Les
Enumration
Les Tableaux
Les Structures
Les Unions
20/09/15
Programmer en langage C
106
Les numrations
Les numrations permettent de dfinir un type pour des
variables qui ne sont affectes qua un nombre fini de
valeurs. Un objet de type numration est dfini par le
mot-clef enum et un identificateur de modle, suivi de la
liste des valeurs que peut prendre cet objet :
enum modele {constante1, constante2,. . . ,constanten} ;
20/09/15
Programmer en langage C
107
Les numrations
20/09/15
Programmer en langage C
108
Les tableaux
20/09/15
Programmer en langage C
109
Les tableaux
Exemple:
char caractere[12];
int entier[10];
float reel[8];
20/09/15
Programmer en langage C
110
Les tableaux
Exemple
#define Mois 12
int tableau[12];
int tab[4] ={100,200,300,400;}\\ initialisation
char voyelles[6]={a,e,i,o,u,y};
20/09/15
Programmer en langage C
111
Les tableaux
Exemples :
short A[5] = {12 , 23 , 34 , 45 , 56}; // A[0] = 12 ; A[1] = 23 ; A[2] = 34 ;
// A[3] = 45 ; A[4] = 56 ;
printf(A[%d] = %d \t,i,A[i));
20/09/15
// du tableau A
Programmer en langage C
112
Les tableaux
Pour initialiser un tableau (TAB1) par les lments dun autre tableau
20/09/15
Programmer en langage C
113
Les tableaux
20/09/15
Programmer en langage C
114
Les tableaux
20/09/15
Programmer en langage C
115
Les tableaux
20/09/15
Programmer en langage C
#include <stdio.h>
void print_tab(int tab[], int nb_elem) {...}
/* incrmente chaque composantes du tableau */
void incr_tab(int tab[], int nb_elem) {
int i;
for (i=0; i < nb_elem; i++) tab[i]++;}
#define TAILLE 4
void main() {
int t[TAILLE] = {1, 2, 3, 4};
incr_tab(t, TAILLE);
print_tab(t, TAILLE);}
116
Les structures
Programmer en langage C
117
Les structures
Programmer en langage C
118
Les structures
20/09/15
Programmer en langage C
119
Les structures
/* dclaration*/
/*affectation*/
Printf(%f,art1.prix);
Scanf(%f,&art2.prix);
Art1.numero++;
20/09/15
120
Les structures
art1=art2;
20/09/15
Programmer en langage C
121
Les structures
char prenom[20];
float heures[31];
} employe, courant;
/*heures: nbre dheures du travail dans chaque jours du
mois*/
employe.nom[0];/* premier caractre du champ nom*/
Initialisation:
Struct personne ={Dupont, julea, {8, 7, 8, 6, 8, 0,0, 8}}
20/09/15
Programmer en langage C
122
Les structures
Tableaux de structures
Initialisation :
Struct point courbe[50]={{A,10,25},{M,13,34},{R,2,6}};
20/09/15
Programmer en langage C
123
Les structures
int mois;
int annee;};
Struct personne{ char nom[30];
char prenom[20];
float heures[31];
struct date date_embauche;
struct date date_poste;
} employe, courant;
20/09/15
Programmer en langage C
124
Les structures
La notation :
Employe.date_embauche.annee
Courant.date_embauche
20/09/15
Programmer en langage C
125
Les structures
Exercice:
Ecrire un programme qui :
prcdentes.
20/09/15
Programmer en langage C
126
Les unions
20/09/15
Programmer en langage C
127
Les unions
Une dfinition d'union la mme syntaxe qu'une
dfinition de structure, le mot cl struct tant
simplement remplac par le mot cl union.
Exemple:
char c;
int i;
}
union nombre{
Union partage{
int i;
float f;
}
20/09/15
Programmer en langage C
128
Les unions
union nombre n;
20/09/15
Programmer en langage C
129
La
20/09/15
Programmer en langage C
130
rate
Processeur
Mmoire(RAM)
100
Bus
Un octet = 8 bits
20/09/15
Programmer en langage C
Adresses
1000
1004
1008
1009
1010
1014
1018
Les pointeurs
131
20/09/15
Programmer en langage C
Les pointeurs
132
20/09/15
Programmer en langage C
Les pointeurs
133
p_rate
1002
1003
1004
1005
100
rate
p_rate
20/09/15
Les pointeurs
1001
100
rate
Programmer en langage C
134
Dfinition
Dclaration
On dclare un pointeur par linstruction :
type *nom_du_pointeur ;
Programmer en langage C
Les pointeurs
135
Initialisation
Dclarer un pointeur nest pas suffisant, si vous ne
le faites pas pointer sur une variable, il est inutile.
Un pointeur doit contenir ladresse dune variable
en utilisant loprateur &, quand il est plac avant
le nom de la variable, loprateur dadresse renvoie
ladresse de cette variable. Son initialisation est une
instruction de la forme : pointeur=&variable;
Programmer en langage C
Les pointeurs
20/09/15
136
Initialisation
Exemple 1 :
int A, B, *P; /*supposons que ces variables occupent
20/09/15
Programmer en langage C
Les pointeurs
137
Exemple 1:
20/09/15
Programmer en langage C
Les pointeurs
void main()
{ int v=12;
int u=10;
int *vP; /*pointeur sur int*/
vP = &v; /*affectation du pointeur */
u = *vP;
printf(u=%d v=%d\n,u,v);
*vP = 25;
printf(u=%d v=%d\n,u,v);
printf(*vP=%d,*vP);
}
138
Exemple 2 :
clrscr( );
p = &a;
printf(Entrer une valeur : );
scanf(%f ,p); // on saisie la valeur 12.4
Les pointeurs
#include <stdio.h>
#include <conio.h>
Void main( )
{ float a , *p; /*supposons que ces variables sont reprsentes en
Programmer en langage C
139
Les pointeurs
quivalente
quivalente
quivalente
quivalente
Y = *P + 1
*P += 2
++ *P
(*P)++
Programmer en langage C
140
Exemple :
#include <stddef.h>
int *t, x , *r;
short y = 10 , *pt = &y;
t = NULL ; /* Correct */
t = 0 ; /* Correct */
x=0;
t = x ; /* Incorrect ! bien que x vaille 0 */
r = &x ;
t = r ; /* Correct : p et q pointe sur des variables de mme type*/
t = pt ; /* Incorrect : p et pt pointe sur des variable de type diffrent */
20/09/15
Programmer en langage C
Les pointeurs
141
Exercices
Les pointeurs
a) int *p , x = 34; *p = x
b) int x = 17 , *p = x; *p = 17
c) double *q; int x = 17 , *p;
p = &x; q =p;
d) int x, *p; &x = p;
Programmer en langage C
142
Pointeurs et tableaux
Les pointeurs
ime tableau.
T et T[0] contiennent la mme adresse mais leur manipulation nest
pas la mme puisquils ne reprsentent pas le mme type de
pointeur.
20/09/15
Programmer en langage C
143
Pointeurs et tableaux
20/09/15
Programmer en langage C
Les pointeurs
144
20/09/15
Programmer en langage C
Les pointeurs
#include stdio.h
#define N 10
void main()
{ float t[N] , *pt ;
int i ;
printf("Entrez %d entiers\n", N) ;
pt = &t[0] ; /* ou pt = t */
for (i = 0 ; i<N; i++)
scanf("%f", pt+i) ;
/* pt+i pointe sur t[i] */
printf("\n Tableau lu : \n") ;
for (i = 0 ; i<N ; i++)
printf("%7.2f", *(pt+i)) ; /* *(pt+i) quivalente pt[i]*/
}
145
20/09/15
Programmer en langage C
Les pointeurs
146
p
pointe sur A[0][0] et * p
dsigne A[0][0]
p+1
pointe sur A[0][1] et * ( p + 1 )
dsigne A[0][1]
..
p+N
pointe sur A[1][0] et * ( p + N )
dsigne A[1][0]
p+N+1
pointe sur A[1][1] et * ( p + N + 1 )
dsigne A[1][1]
..
p + M * N-1 pointe sur A[M-1][N-1] et * ( p + M * N -1 ) dsigne
A[M-1][N-1]
20/09/15
Programmer en langage C
Les pointeurs
147
20/09/15
Programmer en langage C
Les pointeurs
#include <stdio.h>
#define M 4
#define N 10
void main()
{ short A[M][N] ;
short *pt ;
int i, j ;
/* lecture dune matrice */
pt = &A[0][0] ;
/* ou bien pt = A[0] ; */
for (i = 0 ; i<M ; i++)
{
printf("\t ligne n %d\n", i+1) ;
for (j = 0 ; j<N ; j++)
scanf("%i", pt + i * N + j ) ;
} for (i = 0 ; i<M ; i++)
{ for (j = 0 ; j<N ; j++)
printf("%d", *( pt + i * N + j ) ) ;
printf("\n") ; }}
148
Les pointeurs
donnes.
Laffectation : P1 = P2 ; fait pointer P1 sur le mme
objet que P2.
20/09/15
Programmer en langage C
149
20/09/15
Programmer en langage C
Les pointeurs
150
20/09/15
Programmer en langage C
Les pointeurs
151
Allocation dynamique
La dclaration dun tableau dfinit un tableau statique
(il possde un nombre fig demplacements). Il y a
donc un gaspillage despace mmoire en rservant
toujours lespace maximal prvisible.
Il serait souhaitable que lallocation de la mmoire
dpend du nombre dlments saisir. Ce nombre ne
sera connu qu lexcution : cest lallocation
dynamique.
Programmer en langage C
Les pointeurs
20/09/15
152
Allocation dynamique
Programmer en langage C
Les pointeurs
153
malloc
<pointeur> = <type> malloc(<taille>);
<pointeur>
<taille> est la taille, en octets, de la zone mmoire allouer
dynamiquement, <taille> est du type unsigned int, donc on
ne peut pas rserver plus de 65536 octets la fois
Les pointeurs
20/09/15
Programmer en langage C
154
free
Si on na plus besoin dun bloc de mmoire rserv
20/09/15
Programmer en langage C
Les pointeurs
155
20/09/15
Programmer en langage C
Les pointeurs
#include <stdio.h>
#include <stdlib.h>
void main()
{short *pt;
int N , i;
printf("Entrez la taille N du tableau \n") ;
scanf("%d", &N) ;
pt = ( short * ) malloc( N * sizeof( short ) );
if (pt == NULL)
{printf("Mmoire non disponible") ;
system("pause");
}
156
Les pointeurs
20/09/15
Programmer en langage C
157
Annexe A:
Explication de lexemple 1
Les pointeurs
20/09/15
Programmer en langage C
158
Annexe A:
20/09/15
Programmer en langage C
Les pointeurs
159
Pointeurs et structures
Struct data {
int *valeur;
int *taux;
} premier;
Les pointeurs
suivante :
premier.valeur=&cout;// (*premier.valeur=cout;)
premier.taux=&interet; // (*premier.taux=interet;)
20/09/15
Programmer en langage C
160
Pointeurs et structures
Les pointeurs
int num;
float x;
float y;
Programmer en langage C
161
Pointeurs et structures
loprateur (.) :
Les pointeurs
(*p).num=1;
(*p).x=1.2;
(*p).y=2.5;
20/09/15
Programmer en langage C
162
Pointeurs et structures
Les pointeurs
struct part{
int nombre;
char nom[10];
};
Programmer en langage C
163
Pointeurs et structures
20/09/15
Programmer en langage C
Les pointeurs
#include<stdio.h>
#define max 4
Struct part{
int nombre;
char nom[10];
}data[Max]={1,smith,
2, jones,
3, Adams,
4,Wilson
};
Struct part *p_part;
int count;
void main(){
P_part=data;
For(count=0;count<Max;count++)
{ printf(A ladresse %d : %d %s\n,p_part,p_part->nombre,p_part->nom);
p_part++;}}
164
Dfinition
Exemple
Programmer en langage C
165
Dfinition
20/09/15
Programmer en langage C
Les fonctions
166
Dfinition : Syntaxe
liste-d'instructions
}
Les fonctions
20/09/15
Programmer en langage C
167
Dfinition : Smantique
20/09/15
Programmer en langage C
Les fonctions
168
Syntaxe :
Expression :
Smantique :
Les expressions de liste-d'expressions sont values,
20/09/15
Programmer en langage C
Les fonctions
identificateur ( liste-d'expressions )
169
20/09/15
Programmer en langage C
Les fonctions
#include <stdio.h>
/***** le programme principal (fonction main) *****/
void main()
{
/* dclaration de fonction fexple */
float fexple (float, int, int) ; /* prototype de la fonction cube */
float x = 1.5 ;
float y, z ;
int n = 3, p = 5, q = 10 ;
/* appel de fexple avec les arguments x, n et p */
y = fexple (x, n, p) ;
printf ("valeur de y : %e\n", y) ;
/* appel de fexple avec les arguments x+0.5, q et n-1 */
z = fexple (x+0.5, q, n-1) ;
printf ("valeur de z : %e\n", z) ;
}
170
20/09/15
Programmer en langage C
Les fonctions
171
20/09/15
Programmer en langage C
Les fonctions
#include<stdio.h>
/* dclaration de la fonction cube*/
long cube(long x); /* prototype de la fonction cube */
/****************************************************/
long input, reponse;
void main()
{
printf("entrez une valeur entire : ");
scanf("%ld",&input);
reponse=cube(input);
printf("\n\n le cube de %ld est %ld\n", input, reponse);
}
172
/* dfinition de la fonction */
20/09/15
Programmer en langage C
Les fonctions
173
Exercice
20/09/15
Programmer en langage C
Les fonctions
174
Autre exemple
/*dfinition dune fonction, nomme max, qui fournit en
rsultat la plus grande des trois valeurs entires reues en
paramtres*/
20/09/15
Programmer en langage C
Les fonctions
175
Autre exemple
20/09/15
Programmer en langage C
Les fonctions
/*programme principal*/
void main()
{ int max (int, int, int) ; /* prototype de notre fonction max */
int n, p, q, m ;
n=3;p=5;q=2;
m = max (n, p, q) ;
printf (max de %d %d %d : %d\n, n, p, q, m) ;
m = max (5*n, n+p, 12) ;
printf (valeur : %d\n , m) ;
}
176
Programmer en langage C
Les fonctions
177
Remarques:
Aucune instruction return ne figure dans la dfinition
20/09/15
Programmer en langage C
Les fonctions
de notre fonction.
y = optimist (k) ; /* incorrect */
lappel de cette fonction ce fait laide dune instruction
de la forme :
optimist (k) ; /* instruction simple provoquant
lappel de optimist laquelle on
transmet en paramtre, la valeur de k */
178
20/09/15
Programmer en langage C
Les fonctions
void main()
{ void optimist (int) ; /* prototype de la fonction optimist */
int n = 2, p = 1 ;
optimist (n) ;
optimist (p) ;
optimist (n+p) ;
}
void optimist (int nfois)
{ int i ;
for (i=0 ; i<nfois ; i=i+1)
printf (il fait beau\n) ;
}
179
Les fonctions
Programmer en langage C
180
#include<stdio.h>
Void affiche(void);
Void main()
{ affiche();}
Void affiche(void)
{ printf(bonjour);}
20/09/15
Programmer en langage C
Les fonctions
181
Rgles
20/09/15
Programmer en langage C
Les fonctions
182
Les fonctions
{ double s ;
s=a+b;
if (s>0) return (s) ;
else
return (-s);
}
20/09/15
Programmer en langage C
183
Rgles : Prototype
Programmer en langage C
Les fonctions
184
Les fonctions
Programmer en langage C
185
20/09/15
Programmer en langage C
Les fonctions
186
20/09/15
Programmer en langage C
Les fonctions
void main(){
void echange (int a, int b) ;
int n=10, p=20 ;
printf (avant appel : %d %d\n, n, p) ;
echange (n, p) ;
avant appel :
10 20
printf (aprs appel : %d %d, n, p) ;
dbut echange : 10 20
}
fin echange :
20 10
void echange (int a, int b)
aprs appel :
10 20
{ int c ;
printf (dbut echange : %d %d\n, a, b) ;
c=a;a=b;b=c;
printf (fin echange : %d %d\n, a, b) ;
}
187
Programmer en langage C
Les fonctions
20/09/15
188
Solutions :
dune variable. La fonction recevra, certes, toujours une
copie de cette adresse, mais elle pourra ventuellement
agir sur ce qui se trouve cette adresse. Ceci est possible
grce aux pointeurs.
Utiliser des variables globales.
20/09/15
Programmer en langage C
Les fonctions
189
pointeur.
Exemple:
void add(int a, int b, int *c) {
/* c repre lentier o on veut mettre le rsultat */
*c = a + b;}
void main() {
int i=10,j=14,k;
/* on passe les valeurs de i et j comme premiers paramtres */
/* on passe ladresse de k comme troisime paramtre */
add(i,j,&k);}
20/09/15
Programmer en langage C
Les fonctions
190
20/09/15
Programmer en langage C
Les fonctions
191
Les fonctions
void main(){
void echange (int *a, int *b) ;
int n=10, p=20 ;
printf (avant appel : %d %d\n, n, p) ;
echange (&n, &p) ;
printf (aprs appel : %d %d, n, p) ; avant appel :
10 20
}
dbut echange : 10 20
fin echange :
20 10
void echange (int *a, int *b)
aprs appel :
20 10
{ int c ;
printf (dbut echange : %d %d\n, *a, *b) ;
c = *a ; *a = *b ; *b = c ;
printf (fin echange : %d %d\n, *a, *b) ;
}
20/09/15
Programmer en langage C
192
20/09/15
Programmer en langage C
Les fonctions
void main()
{ int i ;
int t[5] = { 1, 1, 1, 1, 1 } ; /* initialisation du tableau */
void affiche (int [5]) ; /* prototype de la fonction affiche */
printf (tableau t avant appel de affiche : ) ;
for (i=0 ; i<5 ; i=i+1) printf (%d , t[i]) ;
printf (\n) ;
affiche (t) ; /* appel de affiche, laquelle on transmet en paramtre le tableau t
*/
printf (tableau t aprs appel de affiche : ) ;
for (i=0 ; i<5 ; i=i+1) printf (%d , t[i]) ;
}
void affiche (int v[5])
{ int i ;
for (i=0 ; i<5 ; i=i+1)
v[i] = i+1 ;}
193
20/09/15
Programmer en langage C
Les fonctions
194
20/09/15
Programmer en langage C
Les fonctions
195
20/09/15
Programmer en langage C
Les fonctions
196
20/09/15
Programmer en langage C
Les fonctions
197
20/09/15
Programmer en langage C
Les fonctions
#include<stdio.h>
#include<conio.h>
struct data{
float montant;
char fnom[20];
char lnom[20];
}rec;
void affiche_rec(struct data x);
void main(){
printf("Entrez le montant du don\n");
scanf("%f",&rec.montant);
printf("Entrez le nom et le prnom du donateur\n");
scanf("%s %s", rec.lnom,rec.fnom);
printf("**********************\n");
affiche_rec(rec);
}
void affiche_rec(struct data x)
{ printf("\n le donateur %s %s a donn %.2f dh\n", x.lnom, x.fnom, x.montant);
}
198
Les fonctions
#include<stdio.h>
#define MAX 4
struct personne{
int numero;
char nom[10];
} data[MAX]={{1,"Smith"},{2,"Jones"},{3,"Adams"},{4,"Wilson"}};
void affiche_str(struct personne [MAX]);
void main(){
affiche_str(data);
}
void affiche_str(struct personne x[MAX])
{int i;
for(i=0; i<MAX;i++)
printf("%d \t %s \n", x[i].numero,x[i].nom);
}
20/09/15
Programmer en langage C
199
Fonctions rcursives
Programmer en langage C
200
20/09/15
Programmer en langage C
201
Les fonctions
20/09/15
Programmer en langage C
202
Dfinition
Dclarations
Chanes de
20/09/15
Programmer en langage C
203
Dfinition
20/09/15
Programmer en langage C
204
Dclarations
Exemples
Char nom[20];
Char *prenom;
20/09/15
Programmer en langage C
205
20/09/15
Programmer en langage C
206
Tableaux de caractres
char chaine[7];
Char chaine[10]=bonjour;
Char chaine[]=bonjour;
Char chaine[7]=bonjour; /*erreur pendant lexcution*/
Char chaine[6]=bonjour; /*erreur pendant la compilation*/
20/09/15
Programmer en langage C
207
Chanes et pointeurs
20/09/15
Programmer en langage C
208
Chanes et pointeurs
La fonction malloc:
La fonction malloc() est une fonction qui permet de rserver
Remarques:
char *ch1=une chane; char *ch2=une autre chane;
ch1=ch2;/* ch1 et ch2 pointent sur la mme chane*/
Programmer en langage C
209
,0,1,2,,9,,A,B,Z, ,b,,c
Exemples:
ABC prcde BCD car A <B
Abc prcde abc
ab prcde abcd car prcde cd
ab prcde ab car [(ASCII( =12), ASCII(a=97)]
20/09/15
Programmer en langage C
210
Fonction de <stdio.h>
Affichage de chanes de caractres
printf(%s,ch);
char *ch1;
puts(ch1); quivalente printf(%s,ch1);
20/09/15
Programmer en langage C
211
Fonctions de <string.h>
int strcmp(const char * chaine1, const char * chaine2);
char * strcat (char *destination, const char *source);
char * strcpy (char *destination, const char *source);
char * strncpy (char *destination, const char *source,
size_t n);
char * strchr(const char * chaine, int caractre);
char * strrchr(const char * chaine, int caractre);
20/09/15
Programmer en langage C
212
Fonctions de <string.h>
La fonction strlen calcule la longueur d'une chane de caractres
Programmer en langage C
213
Fonctions de <string.h>
La fonction strcmp compare deux chanes caractre par
20/09/15
Programmer en langage C
214
Fonctions de <string.h>
Comparaison de chanes de caractres
suivantes :
si la valeur est infrieure 0, alors la chane dont l'adresse est
donne par le premier paramtre de la fonction est infrieure
l'autre chane
si la valeur est gale 0, alors les deux chanes sont gales
si la valeur est suprieure 0, alors la chane dont l'adresse est
donne par le premier paramtre de la fonction est suprieure
l'autre chane.
La valeur transmise au programme peut tre stocke dans une
variable de type int.
Exemple:
int result;
result=strcmp(ch1,ch2);
20/09/15
Programmer en langage C
215
Fonctions de <string.h>
Copie de chanes de caractres
qui permet de copier une chane entire de caractres dans une
autre. Cette fonction admet comme paramtres les deux chanes
de caractres. Elle retourne 1 si la copie s'est effectue
correctement, sinon elle renvoie 0.
Exemple:
strcopy(ch1,ch2);
strncpy, est similaire strcopy, on notera que:
si la chane source a moins de n caractres non nuls, strncpy
rajoutera n - strlen(source) caractres nuls la suite, pour
complter;
si la chane source fait au moins n caractres, la fonction
n'insrera pas de caractre nul en fin de chaine (i.e.
destination ne sera pas une chane de caractres valide).
20/09/15
Programmer en langage C
216
Fonctions de <string.h>
Les fonctions strchr & strrchr recherche le caractre dans la
20/09/15
Programmer en langage C
217
20/09/15
Programmer en langage C
#include <stdio.h>
#include <string.h>
void main() {
char *str = "E.N.A.C.", c = 'A', *ptr;
if ( (ptr = strchr(str, c)) != NULL )
if (ptr)
printf("Le caractere %c est a la position %d\n", c, ptr-str);
else
printf("Le caractere %c n'est pas trouve dans %s\n", c, str
}
/* rsultat de l'excution*/
Le caractere A est a la position 4
218
20/09/15
Programmer en langage C
#include <stdio.h>
#include <string.h>
void main() {
char str[10];
char *ptr = "ABCDEFGHIJ";
strcpy(str, ptr); printf("%s\n", str);
} /* rsultat de l'excution: ABCDEFGHIJ*/
#include <stdio.h>
#include <string.h>
void main() {
char str[10]; char *ptr = "ABCDEFGHI";
strncpy(str, ptr, 3);
str[3] = '\0';
printf("%s\n", str); } /* rsultat de l'excution: ABC */
219
#include <string.h>
#include <stdio.h>
void main() {
char m1[60] = "Ecole Nationale";
char *m2 = " de l'Aviation Civile";
strcat(m1, m2); printf("%s\n", m1); }
/* rsultat de l'excution: Ecole Nationale de l'Aviation Civile*/
20/09/15
Programmer en langage C
#include <stdio.h>
#include <string.h>
void main() {
char *str = "E.N.A.C.";
printf("%d\n", strlen(str));} /* rsultat de l'excution: 8 */
220
Introduction
Dfinition
et proprits
Mmoire tampon
Types de Fichiers
Dclaration dun fichier
Ouverture de fichiers
Fermeture de fichiers
La fonction dcriture en fichier
La fonction de saisie en fichier
Lecture et criture par caractre
Positionnement dans un fichier
20/09/15
Programmer en langage C
221
Introduction
20/09/15
Programmer en langage C
Fichiers
222
Dfinition et proprits
Ouverture du fichier
Fichiers
Programmer en langage C
223
Mmoire tampon
Laccs au fichier se fait par lintermdiaire dune
zone mmoire de stockage appel mmoire
tampon(buffer).
Le buffer une zone de la mmoire centrale qui
stocke une quantit, assez importante, de donnes
du fichier.
Son rle est dacclrer les entres/sorties un
fichier.
Programmer en langage C
Fichiers
20/09/15
224
Types de Fichiers
Fichiers
clavier)
Stdout (standard output): sortie standard(par dfaut, li
lcran)
Stderr stderr (standard error) : affichage des messages
derreur (par dfaut, lcran).
20/09/15
Programmer en langage C
225
Fichiers
FILE *<pointeurfichier>;
Le type file est dfini dans <stdio.h> en tant que
structure. A louverture dun fichier, la structure FILE
contient un certain nombre dinformations sur ce
fichier telles que :
Programmer en langage C
226
Ouverture de fichiers
Lorsquon dsire accder un fichier, il est ncessaire
avant tout accs douvrir le fichier laide de la
fonction fopen.
Cette fonction, de type FILE * ouvre un fichier et lui
associe un flot de donnes. Sa syntaxe est :
fopen("nom-de-fichier","mode");
Smantique des paramtres
Fichiers
fichier.
Le second argument, mode, est une chane de caractres
qui spcifie le mode daccs au fichier.
20/09/15
Programmer en langage C
227
Ouverture de fichiers
Les spcificateurs de mode daccs diffrent suivant
le type de fichier considr.
On distingue
20/09/15
Programmer en langage C
Fichiers
228
Ouverture de fichiers
Fichiers
20/09/15
Programmer en langage C
229
Ouverture de fichiers
20/09/15
Programmer en langage C
Fichiers
230
Ouverture de fichiers
Fichiers
#include <stdio.h>
FILE *fp;
..
if ((fp = fopen("donnees.txt","r")) == NULL)
{
fprintf(stderr,"Impossible douvrir le fichier donnes en
lecture\n");
exit(1);
}
20/09/15
Programmer en langage C
231
Fichiers
Programmer en langage C
232
Fichiers
expressionn);
printf(...) fprintf(stdout,...)
Programmer en langage C
233
Programmer en langage C
Fichiers
adressen);
234
Programme: Exemple
20/09/15
Programmer en langage C
Fichiers
#include<stdio.h>
Void main(){
FILE *pf;
int i=100;
char=c;
float t=1.234;
pf=fopen(essai.txt,w+); /*ouverture et mise jour*/
fprintf(pf,%d %c %f ,i,c,t);
fscanf(pf,%d %c %f,&i,&c,&t);
fprintf(pf,%d %c %f,i,c,t);
fclose(pf);
}
235
Fichiers
Programmer en langage C
236
Exemple
20/09/15
Programmer en langage C
Fichiers
#include <stdio.h>
#include <stdlib.h>
#define ENTREE "entree.txt"
#define SORTIE "sortie.txt"
Void main() {
FILE *f_in, *f_out;
int c;
// Ouverture du fichier ENTREE en lecture
if ((f_in = fopen(ENTREE,"r")) == NULL)
fprintf(stderr, "\nErreur: Impossible de lire %s\n",ENTREE);
// Ouverture du fichier SORTIE en ecriture
if ((f_out = fopen(SORTIE,"w")) == NULL)
fprintf(stderr, "\nErreur: Impossible decrire dans %s\n",SORTIE);
// Recopie du contenu de ENTREE dans SORTIE
while ((c = fgetc(f_in)) != EOF)
fputc(c, f_out);
// Fermeture des flots de donnees
fclose(f_in);
fclose(f_out);
}
237
Exemples
#include <stdio.h>
void main ()
{
FILE *TheFic;
FILE *TheFic1;
char BigBuf[256];
Fichiers
Programmer en langage C
238
fseek
Les diffrentes fonctions dentres-sorties permettent
20/09/15
Programmer en langage C
Fichiers
239
20/09/15
Fichiers
Programmer en langage C
240
rewind
int rewind(FILE *flot);
permet de se positionner au dbut du fichier. Elle est
ftell
long ftell(FILE *flot);
Fichiers
20/09/15
Programmer en langage C
241