PROGRAMMER EN LANGAGE C
Mme khadija bouzaachane
Introduction
*
Programmer en langage C
2
Introduction : Bref historique
*
3
Programmer en langage C
Introduction
Introduction : Pourquoi utiliser le langage C
*
4
Programmer en langage C
Introduction
Introduction : Cycle de développement du programme
*
5
Programmer en langage C
Introduction
Introduction : Cycle de développement du programme
*
6
Programmer en langage C
Introduction
Introduction : Cycle de développement du programme
*
7
Programmer en langage C
Introduction
Introduction : Cycle de développement du programme
*
8
Programmer en langage C
Edition
Programme source (.c)
#include…
#include <math.h>
…..
Main()
{
…..
}
Compilation
Edition de lien
Programme objet (.obj)
Programme executable (.exe)
Fichier en-tête (.h)
………………..
math .h
/*déclaration*/
Bibliothèques précompilées (.lib)
…………………..
math.lib
Introduction
Introduction : votre premier programme
*
9
Programmer en langage C
#include<stdio.h> Main()
{
printf(‘’Bonjour’’);
}
Affichage
Bonjour
Introduction
Eléments de base du langage C
*
Programmer en langage C
10
Exemple de programme en langage C
#include <stdio.h>//standard input/output
#include <math.h>
#define NFOIS 5
main ()
{ int i;
float x, racx;
printf("Bonjour\n");
printf("je vais vous calculer %d racines carrées\n",NFOIS);
for(i=0;i<NFOIS;i++)
{ printf("donnez un nombre:");
scanf("%f",&x);
if(x<0.0)
printf("le nombre %f ne possède pas de racine carrée\n",x);
else
{ racx=sqrt(x);
printf("le nombre %f a pour racine carrée :%f\n",x,racx);
}
}
printf("travail terminé Au revoir");
}
*
11
Programmer en langage C
Eléments de base du langage C
Programme principal
Bloc
Exemple de programme en langage C
#include<conio.h>
#include<stdio.h>
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();
}
*
Programmer en langage C
12
Eléments de base du langage C
Exemple de programme en langage C
#include<conio.h>
#include<stdio.h>
#define a 4
main()
{
clrscr();
gotoxy(4,4);
printf("%d",a );
getch();
}
*
Programmer en langage C
13
Eléments de base du langage C
#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();
}
*
Programmer en langage C
14
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();
}
Structure d’un programme en Langage C
#include <math.h>
#include <stdio.h>
#define NFOIS 5
*
Programmer en langage C
15
Eléments de base du langage C
Programme exécuté automatiquement avant la compilation, il transforme le fichier source à partir d’un certain nombre de directive
Structure d’un programme en Langage C
Type nom_variable [=<valeur>];
*
Programmer en langage C
16
Eléments de base du langage C
Structure d’un programme en Langage C
*
Programmer en langage C
17
Eléments de base du langage C
Structure d’un programme en Langage C
délimiter par des guillemets pour dire que c’est une chaîne de caractères. La notation \n est conventionnelle : elle représente un caractère de fin de ligne, lorsqu’il est envoyé à l’écran, elle provoque le passage à la ligne suivante.
printf("je vais vous calculer %d racines carrées\n",NFOIS);
Ressemble à la précédente avec la différence qu’il reçoit un argument que l’on nomme un format, c’est comme un guide qui précise comment afficher les informations, dans notre cas le code format %d précise qu’il s’agit d’un entier.
*
Programmer en langage C
18
Eléments de base du langage C
Structure d’un programme en Langage C
*
Programmer en langage C
19
Eléments de base du langage C
Structure d’un programme en Langage C
if(x<0.0)
printf("le nombre %f ne possède pas de racine carrée\n",x);
else
{ racx=sqrt(x);
printf("le nombre %f a pour racine carrée :%f\n",x,racx);
}
Constituent une instruction de choix basée sur la condition x<0.0, si cette condition est vrai, on exécute l’instruction 1, si elle est fausse on exécute l’instruction 2.
*
Programmer en langage C
20
Eléments de base du langage C
1
2
Structure d’un programme en Langage C
Qui s’étend sur plusieurs ligne*/
*
Programmer en langage C
21
Eléments de base du langage C
Les mots-clés
*
Programmer en langage C
22
Eléments de base du langage C
Les types de base : Les caractères
// a laquelle on affecte la valeur ’a’
// A noter l’utilisation du simple quotte
*
Programmer en langage C
23
Eléments de base du langage C
Les types de base : Les caractères
*
Programmer en langage C
24
Eléments de base du langage C
Les types de base : Les caractères
// noter l’utilisation du double
// quotte
*
Programmer en langage C
25
Eléments de base du langage C
Les types de base : Entiers
*
Programmer en langage C
26
Eléments de base du langage C
Les types de base : Entiers
*
Programmer en langage C
27
Eléments de base du langage C
Les types de base : Entiers
*
Programmer en langage C
28
Eléments de base du langage C
Les types de base : Entiers
*
Programmer en langage C
29
Eléments de base du langage C
Les types de base : Les flottants
*
Programmer en langage C
30
Eléments de base du langage C
Les types de base : Les flottants
*
Programmer en langage C
31
Eléments de base du langage C
Les types de base : Le type void
*
Programmer en langage C
32
Eléments de base du langage C
Déclarations des variables simples
*
Programmer en langage C
33
Eléments de base du langage C
Déclarations des variables simples
*
Programmer en langage C
34
Eléments de base du langage C
Le mot-clé typedef
Crée le synonyme entier pour int. Vous pouvez ainsi utiliser entier pour définir des variables de type int, comme dans l’exemple suivant:
*
Programmer en langage C
35
Eléments de base du langage C
Exercices
*
Programmer en langage C
36
Exercices
*
Programmer en langage C
37
�Définition de variables�
*
Programmer en langage C
38
Eléments de base du langage C
Définition de variables : classes mémoires
*
Programmer en langage C
39
Eléments de base du langage C
Définition de variables : classes mémoires
– dans le cas d’une variable locale il modifie son implantation en attribuant une partie de l’espace de mémoire globale pour cette variable. Une variable locale de type statique a un nom local mais a une durée de vie égale à celle du programme en cours d’exécution.
– dans le cas d’une variable globale, ce prédicat restreint la visibilité du nom de la variable à l’unité de compilation. Une variable globale de type statique ne peut pas être utilisée par un autre fichier source participant au même programme par une référence avec le mot réservé extern.
*
Programmer en langage C
40
Définition de variables : classes mémoires
*
Programmer en langage C
41
Définition de variables : classes mémoires
Déclaration/définition | Classe mémoire |
Int a; main () { Int b; Static char c; } extern int b ; Int coucou(const int c)�{ register int a ; if (b == 1) } | Définition d’une variable global Définition d’une variable local à main déclaration d’une variable qui est définie dans un autre fichier(rien à voir la variable b de main), variable globale externe paramètre constant, variable locale variable locale à coucou, à mettre en registre si possible référence à la variable b externe |
*
Programmer en langage C
42
La syntaxe du langage�
*
Programmer en langage C
43
Instructions, Expressions et Opérateurs
x=2+3;
est une instruction d’affectation. Elle demande à l’ordinateur
d’ajouter 2 et 3 et d’attribuer le résultat à la
variable x.
*
Programmer en langage C
44
La syntaxe du langage C
{
printf("Hello");
printf("world!");
}
{printf("Hello");
printf("world!");}
Instructions, Expressions et Opérateurs
Une expression est une combinaison d’opérateurs et d’opérandes(variables, constantes). Autrement tout ce qui représente une valeur numérique. Une expression génère toujours un résultat d’un type bien défini qu’on appellera le type de l’expression.
*
Programmer en langage C
45
La syntaxe du langage C
Instructions, Expressions et Opérateurs
ne signifie pas ‘x égal y’. Elle indique à l’ordinateur ‘d’affecter la valeur de y à x’. Cette instruction doit être composée d’une expression à droite du signe égale, et d’un nom de variable à gauche de ce signe:
variable=expression;
*
Programmer en langage C
46
La syntaxe du langage C
Instructions, Expressions et Opérateurs
var += exp ; équivalent à var = var + (exp) ;
var -= exp ; var = var - (exp) ;
var *= exp ; var = var * (exp) ;
var /= exp ; var = var / (exp) ;
var %= exp ; var = var % (exp) ;
pas d’espace entre l’opérateur op et le égal =,
x *= y+1 est équivalent à x = x*(y+1) et pas x = x*y+1.
*
Programmer en langage C
47
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
48
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
49
La syntaxe du langage C
Instructions, Expressions et Opérateurs
Résultat : N = 4 et X = 3
Résultat : N = 4 et X = 4
Résultat : N = 2 et X = 3
Résultat : N = 2 et X = 2
*
Programmer en langage C
50
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
51
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
52
La syntaxe du langage C
Instructions, Expressions et Opérateurs
#include <stdio.h>
void main ()
{
int x=14,y=1; // x est différent 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 différent de y (%i!=%i)\n",x,y);
}
*
Programmer en langage C
53
La syntaxe du langage C
Instructions, Expressions et Opérateurs
Les opérateurs logiques, permettent de combiner le résultat de
plusieurs expressions de comparaison en une seule expression
logique. Les opérandes des opérateurs logiques peuvent être
n’importe quel scalaire. Toute valeur différente de 0 est interprétée
comme vraie (et 0 correspond à ’faux’). Comme pour les expressions
de comparaisons les expressions logiques renvoient une valeur
entière (0 =faux ; 1=vraie).
Remarque :
les opérateurs && et || évaluent les opérandes de gauche à droite et
le résultat est connu dès l’opérande de gauche. Ainsi, l’opérande de
droite n’est évaluée que si celle de gauche est vraie dans le cas de
l’opérateur && (respectivement fausse dans le cas de l’opérateur ||).
Exemple:
(i < max) && (f(14) == 1), la fonction f n’est appelée que si i < max.
*
Programmer en langage C
54
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
55
La syntaxe du langage C
Instructions, Expressions et Opérateurs
Les opérateurs bits à bits n’opèrent que sur des entiers. Les opérandes sont interprétées bits par bits (le bit 1 correspondant à une valeur vraie, 0 est considéré comme une valeur fausse).
*
Programmer en langage C
56
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
57
La syntaxe du langage C
Instructions, Expressions et Opérateurs
un pointeur vers x.
*
Programmer en langage C
58
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
59
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
60
La syntaxe du langage C
Instructions, Expressions et Opérateurs
*
Programmer en langage C
61
La syntaxe du langage C
Instructions, Expressions et Opérateurs
Priorité | Opérateurs | Associativité |
1 | () | 🡺 |
2 | + - ++ -- ! | 🡸 |
3 | * / % | 🡺 |
4 | + - | 🡺 |
5 | < <= > >= | 🡺 |
6 | == != | 🡺 |
7 | && | 🡺 |
8 | || | 🡺 |
9 | ? : | 🡺 |
10 | = += -= *= /= %= | 🡸 |
*
Programmer en langage C
62
La syntaxe du langage C
Exercices
Int n=10, p=4;
Long q=2;
Float x=1.75;
Donner le type et la valeur de chacune des expressions suivantes
*
Programmer en langage C
63
La syntaxe du langage C
Exercices
2. n étant de type int, écrire une expression qui prend la valeur :
-1 si n est négatif
0 si n est nul
1 si n est positif
*
Programmer en langage C
64
n ? (n>0 ? 1: -1) : 0
La syntaxe du langage C
Les structures de contrôle
*
Programmer en langage C
65
La syntaxe du langage C
Les structures de contrôle : if-else
la forme if est ici dans sa forme la plus simple. Si expression est vraie, instruction-1 est exécutée. Si expression est fausse, instruction-1 est ignorée.
*
Programmer en langage C
66
La syntaxe du langage C
Les structures de contrôle : if-else
else instruction-2;
Si expression est vraie, instruction-1 est exécutée, sinon c’est instruction-2 qui est
exécutée.
instruction-1;
else if (expression-2)
instruction-2;
else
instruction-3;
Les instructions if sont imbriquées. Si expression-1 est vraie, instruction-1
est exécutée. Dans le cas contraire expression-2 est évaluée si cette dernière est
vraie instruction-2 est exécutée. Si les deux expressions sont fausses, c’est
instruction-3 qui est exécuté
*
Programmer en langage C
67
La syntaxe du langage C
Les structures de contrôle : if-else
tax=0.30;
else
tax=0.25;
printf(‘’mineur’’);
else if (age <65)
printf(‘’adulte’’);
else
printf(‘’personne agée’’);
*
Programmer en langage C
68
La syntaxe du langage C
Les structures de contrôle : if-else
#include <stdio.h>
void main ()
{ int i;
printf("Tapez un nombre entier positif ou negatif: ");
scanf("%d", &i);
if (i<0) {
i=-i;
printf("J'ai remis i à une valeur positive.\n");
}
else {
printf("Vous avez tapé un nombre positif.\n");
}
}
*
Programmer en langage C
69
Les structures de contrôle : Switch
*
Programmer en langage C
70
La syntaxe du langage C
Les structures de contrôle : Switch
switch (<condition>) {
case <valeur 1> : <action 1>; break;
case <valeur 2> : <action 2>; break;
…
default : <action n>;
}
*
Programmer en langage C
71
La syntaxe du langage C
Les structures de contrôle : Switch
*
Programmer en langage C
72
La syntaxe du langage C
Les structures de contrôle : Switch
#include<stdio.h>
void main() {
int a,b,d;
char operateur;
Printf(‘’ Entrez un opérateur (+, -,* 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(‘’opérateur inconnu\n’’);break;
}
}
*
Programmer en langage C
73
La syntaxe du langage C
Les structures de contrôle : while
while (condition)
une-instruction;
while (condition) {
Des instructions;
}
}
*
Programmer en langage C
74
La syntaxe du langage C
Les structures de contrôle :while
#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");
}
*
Programmer en langage C
75
La syntaxe du langage C
Les structures de contrôle :while
#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++;
}
*
Programmer en langage C
76
La syntaxe du langage C
Les structures de contrôle : do-while
do
une-instruction;
while (condition)
do {
Des instructions;
} while (condition)
*
Programmer en langage C
77
La syntaxe du langage C
Les structures de contrôle : do-while
#include <stdio.h>
#define MAX 4
void main()
{
int i=MAX;
do {
printf("Valeur de i : %i\n",i);
i++;
} while (i < MAX);
}
*
Programmer en langage C
78
La syntaxe du langage C
Les structures de contrôle : for
{
liste d’instructions
}
*
Programmer en langage C
79
La syntaxe du langage C
Les structures de contrôle : for
*
Programmer en langage C
80
La syntaxe du langage C
Les structures de contrôle : for
for ( expression1 ; expression2 ; expression3 )
{
liste d’instructions
}
est équivalente à
expression1;
while(expression2)
{
instructions;
expression3;
}
*
Programmer en langage C
81
La syntaxe du langage C
Les structures de contrôle :for
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);
Int n, i,fact;
For(fact=1,i=1;i<=n;i++)
fact*=i;
Printf(’’%d!= %d\n’’,n,fact);
*
Programmer en langage C
82
La syntaxe du langage C
Les structures de contrôle : break, goto et continue
*
Programmer en langage C
83
La syntaxe du langage C
Les structures de contrôle : break, goto et continue
#include <stdio.h>
void main( )
{ int i;
for (i = 1 ; i<=10 ; i++){
printf(’’début tour %d\n’’ ,i) ;
printf(’’ bonjour\n’’);
if (i ==3) break ;
printf(" fin tour%d\n", i) ;
}
printf(" après la boucle\n") ;
}
*
Programmer en langage C
84
La syntaxe du langage C
Evaluation:
Début tour 1
Bonjour
Début tour 2
bonjour
fin tour 2
Début tour 3
Bonjour
Après la boucle
Les structures de contrôle : break, goto et continue
*
Programmer en langage C
85
La syntaxe du langage C
Les structures de contrôle : break, goto et continue
Void main()
{ int i;
for(i=1;i<=10;i++)
{ printf(’’début tour %d\n’’ ,i) ;
if (i <4) continue ;
printf(’’ bonjour\n’’);
}
}
*
Programmer en langage C
86
La syntaxe du langage C
Evaluation:
Début tour 1
Début tour 2
Début tour 3
Début tour 4
Bonjour
Début tour 5
Bonjour
Les structures de contrôle : break, continue et goto
Void main()
{ int i;
for(i=1;i<=10;i++)
{ printf(’’début tour %d\n’’ ,i) ;
printf(’’ bonjour\n’’);
if (i ==3) goto sortie ;
printf(’’ fin tour%d\n", i);
}
Sortie:printf (" après la boucle\n") ;
}
*
Programmer en langage C
87
La syntaxe du langage C
Evaluation:
Début tour 1
Bonjour
fin tour 1
Début tour 2
bonjour
fin tour 2
Début tour 3
Bonjour
Après la boucle
La récursivité
*
Programmer en langage C
88
La syntaxe du langage C
La récursivité
#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)) ;
}
*
Programmer en langage C
89
La syntaxe du langage C
Les conversions de types
*
Programmer en langage C
90
La syntaxe du langage C
Les conversions de types
expression à deux opérandes doit se faire est donné par les règles suivantes :
*
Programmer en langage C
91
La syntaxe du langage C
Les conversions de types
*
Programmer en langage C
92
La syntaxe du langage C
La syntaxe du langage C
long double
double
Float
unsigned long long
long long
unsigned long
long
unsigned int
int
Les conversions de types
(type) expression
*
Programmer en langage C
93
La syntaxe du langage C
Les conversions de types
*
Programmer en langage C
94
La syntaxe du langage C
float f ; double d ; int i ; long li ; | |
li = f + i ; | i est transformé en float puis additionné à f, le résultat est transformé en long et rangé dans li. |
d = li + i ; | i est transformé en long puis additionné à li, le résultat est transformé en double et rangé dans d. |
i = f + d ; | f est transformé en double, additionné à d, le résultat est transformé en int et rangé dans i. |
Principales fonctions d’entrées-sorties standard
*
Programmer en langage C
95
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
#include <stdio.h>
void main() {
char c;
printf("Entrer un caractère:");
c = getchar();
printf("Le caractère entré est %c\n",c);
}
*
Programmer en langage C
96
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
#include <stdio.h>
Void main() {
char c;
printf("Entrer un caractère:");
c = getchar();
putchar(c);
}
*
Programmer en langage C
97
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
#include <stdio.h>
void main() {
char * toto = "on est super content!";
puts(toto);
}
*
Programmer en langage C
98
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
printf("chaîne de contrôle", expression1, . . . , expressionn);
*
Programmer en langage C
99
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
*
Programmer en langage C
100
La syntaxe du langage C
format | Conversion en | écriture |
%d | int | décimale signée |
%ld | long int | décimale signée |
%u | unsigned int | décimale non signée |
%lu | unsigned long | décimale non signée |
%o | unsigned int | Octale non signée |
%lo | unsigned long | Octale non signée |
%x | unsigned int | Héxadécimal non signée |
%lx | unsigned long | Héxadécimal non signée |
Principales fonctions d’entrées-sorties standard
*
Programmer en langage C
101
La syntaxe du langage C
format | Conversion en | écriture |
%f | float | décimale virgule fixe |
%lf | Long float | décimale virgule fixe |
%e | Double | décimale notation exponentielle |
%le | Long double | décimale notation exponentielle |
%g | Double | décimale, représentation la plus courte parmi %f et %e |
%lg | Long double | décimale, représentation la plus courte parmi %lf et %le |
%c | unsigned char | caractère |
%s | char* | Chaîne de caractères |
Principales fonctions d’entrées-sorties standard
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); |123456.789012|
printf("|%.4f|\n",1.234567890123456789e5); |123456.7890|
*
Programmer en langage C
102
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
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|
*
Programmer en langage C
103
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
scanf("chaîne de contrôle", arg1, . . . , argn);
*
Programmer en langage C
104
La syntaxe du langage C
Principales fonctions d’entrées-sorties standard
#include <stdio.h>
void main()
{
int i ;
printf("entrez un entier sous forme hexadecimale i = ");
scanf("%x",&i);
printf("i = %d\n",i);
}
*
Programmer en langage C
105
La syntaxe du langage C
Les Types Dérivés
*
Programmer en langage C
106
Les énumérations
enum modele {constante1, constante2,. . . ,constanten} ;
*
Programmer en langage C
107
Les types dérivés
Les énumérations
#include <stdio.h>
enum boolean {FALSE, TRUE};
void main ()
{
enum boolean b1 = TRUE;
printf("b = %d\n",b1);
}
*
Programmer en langage C
108
Les types dérivés
Les tableaux
type de donnée*le nombre d’éléments.
*
Programmer en langage C
109
Les types dérivés
Les tableaux
<type simple> Nom_du_tableau[nombre_elements];
*
Programmer en langage C
110
Les types dérivés
Les tableaux
Il est possible d’initialiser le tableau à la définition :
<type > Nom_du_tableau[nombre_elements]={c1,c2,…cn};
Ou c1, c2,…cn sont des constantes dont le nombre ne doit pas dépasser le nombre _elements.
#define Mois 12
int tableau[12];
int tab[4] ={100,200,300,400;}\\ initialisation
char voyelles[6]={‘a’,’e,’i’,’o’,’u’,’y’};
*
Programmer en langage C
111
Les types dérivés
Les tableaux
Nom_du_Tableau [indice]
// A[3] = 45 ; A[4] = 56 ;
printf(‘’A[%d] = %d \t‘’,i,A[i)); // du tableau A
*
Programmer en langage C
112
Les types dérivés
Les tableaux
// entier saisi depuis la clavier
//sera affiché sur écran
// = TAB[i] 2
for( i = 0 ; i < taille_tableau ; i++ )
TAB1[i] = TAB2[i];
*
Programmer en langage C
113
Les types dérivés
Les tableaux
int mat[10][20];
*
Programmer en langage C
114
Les types dérivés
Les tableaux
#include <stdio.h>
#define L 3 //nombre de lignes
#define C 2 //nombre de colonnes
short tab[L][C] = {{1, 2}, {14, 15}, {100, 200}};
void main() {
int i, j;
for (i = 0 ; i < L; i++) {
for (j = 0; j < C; j++)
printf("tab[%d][%d]=%d\n",i,j,tab[i][j]);}}
*
Programmer en langage C
115
Les types dérivés
Les tableaux
#include <stdio.h>
void print_tab(int tab[], int nb_elem) {...}
/* incrémente 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);}
*
Programmer en langage C
116
Les types dérivés
Les structures
struct enreg {
int numero;
int qte;
float prix;
};
*
Programmer en langage C
117
Les types dérivés
Les structures
struct nom_structure {
type_1 membre_1 ;
type_2 membre_2 ;
...
type_n membre_n ;
} ;
*
Programmer en langage C
118
Les types dérivés
Les structures
2. Pour déclarer un objet de type structure correspondant au modèle
précédent, on utilise la syntaxe :
struct nom_structure identificateur_objet ;
Ou bien, si le modèle n’a pas encore été déclaré au préalable :
struct nom_structure {
type_1 membre_1 ;
type_2 membre_2 ;
...
type_n membre_n ;
} identificateur_objet ;
3. On accède aux différents membres d’une structure grâce à
l’opérateur membre de structure, noté ”.”. Le i-ème membre de objet
est désigné par l’expression :
identificateur_objet.membre_i
*
Programmer en langage C
119
Les types dérivés
Les structures
au champ prix de la structure art2 */
numero de la structure art1*/
*
Programmer en langage C
120
Les types dérivés
Les structures
*
Programmer en langage C
121
Les types dérivés
Les structures
char prenom[20];
float heures[31];
} employe, courant;
/*heures: nbre d’heures du travail dans chaque jours du mois*/
*
Programmer en langage C
122
Les types dérivés
Les structures
struct point { char nom;
int x;
int y;
};
struct point courbe[50];
*
Programmer en langage C
123
Les types dérivés
Les structures
int mois;
int annee;};
char prenom[20];
float heures[31];
struct date date_embauche;
struct date date_poste;
} employe, courant;
*
Programmer en langage C
124
Les types dérivés
Les structures
Représente l’année d’embauche correspondant à la structure employe. Il s’agit d’une valeur de type int.
Représente la date d’embauche de la structure courant, et nous pouvons faire l’affectation:
*
Programmer en langage C
125
Les types dérivés
Les structures
Struct point{
int num;
frloat x;
float y;
}
Le nombre d’éléments du tableau sera fixé par une instruction #define.
*
Programmer en langage C
126
Les types dérivés
Les unions
*
Programmer en langage C
127
Les types dérivés
Les unions
Union partage{
char c;
int i;
}
union nombre{
int i;
float f;
}
*
Programmer en langage C
128
Les types dérivés
Les unions
*
Programmer en langage C
129
Les types dérivés
Les pointeurs
*
Programmer en langage C
130
La mémoire de votre ordinateur
*
Programmer en langage C
131
Les pointeurs
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
1000
1004
1008
1009
1010
1014
1018
Bus
Processeur
Mémoire(RAM)
Adresses
Un octet = 8 bits
rate
100
La mémoire de votre ordinateur
*
Programmer en langage C
132
Les pointeurs
La création d’un pointeur
*
Programmer en langage C
133
Les pointeurs
La création d’un pointeur
*
Programmer en langage C
134
Les pointeurs
?
100
1001 1002 1003 1004 1005
p_rate
rate
1004
100
1001 1002 1003 1004 1005
p_rate
rate
Définition
*
Programmer en langage C
135
Les pointeurs
Déclaration
type *nom_du_pointeur ;
Exemple : int *p; float *p_float; char *p_char;
On dira que :p est un pointeur sur une variable du type int , ou bien p peut contenir l'adresse d'une variable du type int
*p est de type int, c’est l’emplacement mémoire pointé par p.
Initialisation
*
Programmer en langage C
136
Les pointeurs
Initialisation
la variable pointée par P */
pointé par P*/
*
Programmer en langage C
137
Les pointeurs
Exemple 1:
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);
}
*
Programmer en langage C
138
Les pointeurs
Exemple 2 :
#include <stdio.h>
#include <conio.h>
Void main( )
{ float a , *p; /*supposons que ces variables sont représentées en
mémoire à partir de l’adresse 1000*/ �clrscr( ); // pour effacer l’écran<conio.h>
p = &a;
printf(‘’Entrer une valeur : ‘’);
scanf(‘’%f’’ ,p); // on saisie la valeur 12.4
printf(‘’\nAdresse de a = %d Contenu de a = %f’’ ,p,*p);
*p += 0.4;
printf(‘’a = %f *p = %f ‘’, a,*p);
getch( ); // pour lire un caractère <conio.h>}
*
Programmer en langage C
139
Les pointeurs
Opérations élémentaires sur les pointeurs
*
Programmer en langage C
140
Les pointeurs
Opérations élémentaires sur les pointeurs
#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 même type*/
t = pt ; /* Incorrect : p et pt pointe sur des variable de type différent */
*
Programmer en langage C
141
Les pointeurs
Exercices
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
Les pointeurs
b) p = x est incorrect. Pour que p pointe sur x :p = &x
c) q = p incorrect. q et p deux
pointeurs sur des types différent
d)&x = p incorrect. &x n’est pas
une variable (lvalue) et par conséquent ne peut pas figurer à gauche d’une affectation.
Pointeurs et tableaux
*
Programmer en langage C
143
Les pointeurs
Pointeurs et tableaux
*
Programmer en langage C
144
Les pointeurs
Exemple ( Lecture et Affichage d’un tableau matérialisé par un pointeur)
#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]*/
}
*
Programmer en langage C
145
Les pointeurs
Exemple ( Lecture et Affichage d’un tableau matérialisé par un pointeur)
/* Autre Solution sans déclarer la variable i */
#include <stdio.h>
#define N 10
void main()
{ float T[N] , *pt ;
printf("Entrez %d entiers\n", N) ;
for (pt = T ; pt<T+N; pt++)
scanf("%f", pt) ;
printf("\nTableau lu : \n") ;
for (pt = T ; pt<T+N; pt++)
printf("%7.2f", *pt) ;
}
*
Programmer en langage C
146
Les pointeurs
Pointeurs et tableaux à deux dimensions
p pointe sur A[0][0] et * p désigne A[0][0]
p + 1 pointe sur A[0][1] et * ( p + 1 ) désigne A[0][1]
..
p + N pointe sur A[1][0] et * ( p + N ) désigne A[1][0]
p + N + 1 pointe sur A[1][1] et * ( p + N + 1 ) désigne A[1][1]
..
p + M * N-1 pointe sur A[M-1][N-1] et * ( p + M * N -1 ) désigne A[M-1][N-1]
*
Programmer en langage C
147
Les pointeurs
Exemple ( Lecture et Affichage d’une matrice matérialisé par un pointeur)
#include <stdio.h>
#define M 4
#define N 10
void main()
{ short A[M][N] ;
short *pt ;
int i, j ;
/* lecture d’une 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") ; }}
*
Programmer en langage C
148
Les pointeurs
Arithmétiques des pointeurs
*
Programmer en langage C
149
Les pointeurs
Arithmétiques des pointeurs
*
Programmer en langage C
150
Les pointeurs
Autres déclarations des pointeurs :
*
Programmer en langage C
151
Les pointeurs
Allocation dynamique
*
Programmer en langage C
152
Les pointeurs
Allocation dynamique
//bloc
*
Programmer en langage C
153
Les pointeurs
Allocation dynamique: Fonctions malloc et free
*
Programmer en langage C
154
Les pointeurs
Allocation dynamique: Fonctions malloc et free
*
Programmer en langage C
155
Les pointeurs
Exemple (Allocation dynamique, Saisie et Affichage d’un tableau )
#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("Mémoire non disponible") ;
system("pause");
}
*
Programmer en langage C
156
Les pointeurs
Exemple (Allocation dynamique, Saisie et Affichage d’un tableau )
printf("Saisie du tableau : ");
for ( i = 0 ; i < N; i++)
scanf("%d", pt + i ) ;
printf("Affichage du tableau ") ;
for ( i= 0 ; i < N; i++)
printf("%d\t", *( pt + i ) ) ;
free( pt );
}
*
Programmer en langage C
157
Les pointeurs
Annexe A:
*
Programmer en langage C
158
Les pointeurs
Annexe A:
/* Déclaration d'un pointeur sur des entiers p et de la taille du tableau N */
int* p=NULL;
int N;
/* Saisie de la taille du tableau par l'utilisateur */
scanf ("%d",&N);
/* Allocation dynamique de la zone mémoire occupée par le tableau */
p = (int*)malloc (N*sizeof(int));
*
Programmer en langage C
159
Les pointeurs
Pointeurs et structures
Struct data {
int *valeur;
int *taux;
} premier;
*
Programmer en langage C
160
Les pointeurs
Pointeurs et structures
Struct point{
int num;
float x;
float y;
}
*
Programmer en langage C
161
Les pointeurs
Pointeurs et structures
*
Programmer en langage C
162
Les pointeurs
Pointeurs et structures
int nombre;
char nom[10];
};
Nous pouvons déclarer un tableau appartenant au type part
Nous pouvons ensuite déclarer un pointeur vers une structure de
type part, et l’initialiser pour pointer sur la première structure du
tableau data:
Nous obtenons un tableau de structures de type part et un pointeur
vers le premier élément du tableau. On affiche le contenu du premier
élément avec l’instruction:
*
Programmer en langage C
163
Les pointeurs
Pointeurs et structures
#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 l’adresse %d : %d %s\n’’,p_part,p_part->nombre,p_part->nom);
p_part++;}}
*
Programmer en langage C
164
Les pointeurs
Les Fonctions
*
Programmer en langage C
165
Définition
*
Programmer en langage C
166
Les fonctions
Définition : Syntaxe
type identificateur ( liste de-déclarations-de-paramètres )
{
liste-de-déclarationsoption(optionnel)
liste-d'instructions
}
🖝porte le nom de prototype de fonction.
*
Programmer en langage C
167
Les fonctions
Définition : Sémantique
*
Programmer en langage C
168
Les fonctions
Définition: Appel d’une fonction
🡺 identificateur ( liste-d'expressions )
*
Programmer en langage C
169
Les fonctions
Exemple de définition et d’utilisation d’une fonction en C
#include <stdio.h>
/***** le programme principal (fonction main) *****/
void main()
{ /* déclaration 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) ;
}
*
Programmer en langage C
170
Les fonctions
Exemple de définition et d’utilisation d’une fonction en C
/*************** la fonction fexple ****************/
float fexple (float x, int b, int c)
{
float val ; /* déclaration d’une variable "locale" à fexple
val = x * x + b * x + c ;
return val ;
}
*
Programmer en langage C
171
Les fonctions
Exemple de définition et d’utilisation d’une fonction en C
#include<stdio.h>
/* déclaration de la fonction cube*/
long cube(long x); /* prototype de la fonction cube */
/****************************************************/
long input, reponse;
void main()
{
printf("entrez une valeur entière : ");
scanf("%ld",&input);
reponse=cube(input);
printf("\n\n le cube de %ld est %ld\n", input, reponse);
}
*
Programmer en langage C
172
Les fonctions
Exemple de définition et d’utilisation d’une fonction en C
/* définition de la fonction */
long cube(long x) /* en-tête de la fonction cube*/
{ /*attention pas de ; */
long x_cube; /* variable “locale” à la fonction cube */
x_cube= x*x*x;
return x_cube;
}
*
Programmer en langage C
173
Les fonctions
Exercice
Quels seront les résultats fournis par ce programme :
main()
{ int arrondi (float) ; /* prototype de la fonction arrondi */
float v1 = 1.6, v2 = 2.8 ;
int p ;
p = arrondi (v1) ; printf (“%d\n”, p) ;
p = arrondi (v2) ; printf (“%d\n”, p) ;
printf (“%d %d\n”, arrondi(v1+v2), arrondi(v1) + arrondi(v2) ) ;
}
int arrondi (float r)
{ float y ;int n ;
y = r + 0.5 ;
n = y ;
return n ;
}
*
Programmer en langage C
174
Les fonctions
Autre exemple
/*définition d’une fonction, nommée max, qui fournit en
résultat la plus grande des trois valeurs entières reçues en
paramètres*/
int max (int a, int b, int c)
{ int m ;
m = a ;
if ( b>m ) m = b ;
if ( c>m ) m = c ;
return m ;
}
*
Programmer en langage C
175
Les fonctions
Autre exemple
/*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) ;
}
*
Programmer en langage C
176
Les fonctions
Exemple de fonction sans résultat
Soit la définition de fonction nommée optimist :
void optimist (int nfois)
{ int i ;
for (i=0 ; i<nfois ; i=i+1)
printf (“il fait beau\n”) ;
}
*
Programmer en langage C
177
Les fonctions
Exemple de fonction sans résultat
optimist (k) ; /* instruction simple provoquant
l’appel de optimist à laquelle on
transmet en paramètre, la valeur de k */
*
Programmer en langage C
178
Les fonctions
Exemple de fonction sans résultat
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”) ;
}
*
Programmer en langage C
179
Les fonctions
Le cas des fonctions sans paramètres
int fexple1 (void) ;
*
Programmer en langage C
180
Les fonctions
Le cas des fonctions sans paramètres
#include<stdio.h>
Void affiche(void);
Void main()
{ affiche();}
Void affiche(void)
{ printf(‘’bonjour’’);}
*
Programmer en langage C
181
Les fonctions
Règles
*
Programmer en langage C
182
Les fonctions
Règles: L’instruction return
{ return (x * x + b * x + c) ;}
{ double s ;
s = a + b ;
if (s>0) return (s) ;
else return (-s);
}
*
Programmer en langage C
183
Les fonctions
Règles : Prototype
*
Programmer en langage C
184
Les fonctions
Règles : Initialisation des variables locales
void affiche (void)
{ int n = 10 ;
printf (“%d”, n) ;
n = n + 1 ;
}
*
Programmer en langage C
185
Les fonctions
Une fonction peut en appeler une autre
void main()
{ int f1 (float) ; /* prototype de f1 */
.....
f1 (...) ; /* appel de f1 */
.....
}
int f1 (float)
{ void f2 (int) ; /* prototype de f2 */
.....
f2 (...) ;
.....
}
*
Programmer en langage C
186
Les fonctions
En langage C, les paramètres sont transmis par valeur
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 (“après appel : %d %d”, n, p) ;
}
void echange (int a, int b)
{ int c ;
printf (“début echange : %d %d\n”, a, b) ;
c = a ; a = b ; b = c ;
printf (“fin echange : %d %d\n”, a, b) ;
}
*
Programmer en langage C
187
Les fonctions
avant appel : 10 20
début echange : 10 20
fin echange : 20 10
après appel : 10 20
En langage C, les paramètres sont transmis par valeur
emplacements nommés a et b. C’est effectivement sur ces copies qu’a travaillé la fonction echange, de sorte que les valeurs des variables n et p n’ont, quant à elles, pas été modifiées. C’est ce qui explique le résultat constaté.
*
Programmer en langage C
188
Les fonctions
En langage C, les paramètres sont transmis par valeur
*
Programmer en langage C
189
Les fonctions
Passage des paramètres par adresse
void add(int a, int b, int *c) {
/* c repère l’entier où on veut mettre le résultat */
*c = a + b;}
void main() {
int i=10,j=14,k;
/* on passe les valeurs de i et j comme premiers paramètres */
/* on passe l’adresse de k comme troisième paramètre */
add(i,j,&k);}
*
Programmer en langage C
190
Les fonctions
Passage des paramètres par adresse
/*passage d’arguments par valeur et par adresse */
#include<stdio.h>
void par_valeur(int a, int b, int c);
void par_adresse(int *a, int *b,int *c);
void main(){
int x=2, y=4, z=6;
par_valeur(x,y,z);
par_adresse(&x,&y,&z); }
void par_valeur(int a, int b, int c)
{a=0;b=0;c=0;}
void par_valeur(int *a, int *b, int *c)
{*a=0;*b=0;*c=0;}
*
Programmer en langage C
191
Les fonctions
Passage des paramètres par adresse
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 (“après appel : %d %d”, n, p) ;
}
void echange (int *a, int *b)
{ int c ;
printf (“début echange : %d %d\n”, *a, *b) ;
c = *a ; *a = *b ; *b = c ;
printf (“fin echange : %d %d\n”, *a, *b) ;
}
*
Programmer en langage C
192
Les fonctions
avant appel : 10 20
début echange : 10 20
fin echange : 20 10
après appel : 20 10
Passage de tableau en paramètre
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 paramètre le tableau t */
printf (“tableau t après 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 ;}
*
Programmer en langage C
193
Les fonctions
Passage de tableau en paramètre
*
Programmer en langage C
194
Les fonctions
Passage de tableau en paramètre
/* Initialise les éléments d’un tableau */
void init (int tab[], int n)
{ int i;
for (i = 0; i < n; i++)
tab[i] = i;
}
void main()
{ int i, n = 5;
int *tab;
tab = (int*)malloc(n * sizeof(int));
init(tab,n);
for(i=0;i<n;i++) printf(‘’ %d\n’’,*tab++);
}
*
Programmer en langage C
195
Les fonctions
Passage de tableau en paramètre
void mat (int t[5][4])
{ int i, j ;
for (i=0 ; i<5 ; i++)
for (j=0 ; j<4 ; j++)
t[i][j] = 1 ;
}
Voici quelques exemples d’utilisation de cette fonction :
void main ()
{ int tab [5] [4] ;
mat (tab) ;
}
*
Programmer en langage C
196
Les fonctions
Passage de tableau en paramètre
*
Programmer en langage C
197
Les fonctions
Passage de structure en paramètre
#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 prénom 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);
}
*
Programmer en langage C
198
Les fonctions
Passage de structure en paramètre
#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);
}
*
Programmer en langage C
199
Les fonctions
Fonctions récursives
long fac (int n)
{
if (n>1) return (fac(n-1)*n) ;
else return(1) ;
}
*
Programmer en langage C
200
Les fonctions
Fonctions prédéfinies : math.h
*
Programmer en langage C
201
Les fonctions
Fonctions prédéfinies : math.h
*
Programmer en langage C
202
Les fonctions
Chaînes de Caractères
*
Programmer en langage C
203
Définition
*
Programmer en langage C
204
Les chaînes de caractères
Déclarations
*
Programmer en langage C
205
Les chaînes de caractères
Chaînes de caractères constantes(chaînes littérales)
*
Programmer en langage C
206
Les chaînes de caractères
Tableaux de caractères
*
Programmer en langage C
207
Les chaînes de caractères
Chaînes et pointeurs
*
Programmer en langage C
208
Les chaînes de caractères
Chaînes et pointeurs
*
Programmer en langage C
209
Les chaînes de caractères
Ordre alphabétique et lexicographique
*
Programmer en langage C
210
Les chaînes de caractères
Manipulation des chaînes de caractères
*
Programmer en langage C
211
Les chaînes de caractères
Manipulation des chaînes de caractères
*
Programmer en langage C
212
Les chaînes de caractères
Manipulation des chaînes de caractères
*
Programmer en langage C
213
Les chaînes de caractères
Manipulation des chaînes de caractères
*
Programmer en langage C
214
Les chaînes de caractères
Manipulation des chaînes de caractères
*
Programmer en langage C
215
Les chaînes de caractères
Manipulation des chaînes de caractères
*
Programmer en langage C
216
Les chaînes de caractères
Manipulation des chaînes de caractères
#include <stdio.h>
#include <string.h>
void main() {
char *str="E.N.A.C.", c = '.', *ptr;
if ( (ptr = strrchr(str, c)) != NULL)
printf("Le caractere %c est en position %d\n", c, ptr-str);
else
printf("Pas trouve\n"); }
___________________________________________
/* résultat de l'exécution */
Le caractere . est en position 7
*
Programmer en langage C
217
Les chaînes de caractères
Manipulation des chaînes de caractères
#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
}
/* résultat de l'exécution*/
Le caractere A est a la position 4
*
Programmer en langage C
218
Les chaînes de caractères
Manipulation des chaînes de caractères
#include <stdio.h>
#include <string.h>
void main() {
char str[10];
char *ptr = "ABCDEFGHIJ";
strcpy(str, ptr); printf("%s\n", str);
} /* résultat de l'exécution: 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); } /* résultat de l'exécution: ABC */
*
Programmer en langage C
219
Les chaînes de caractères
Manipulation des chaînes de caractères
#include <stdio.h>
#include <string.h>
void main() {
char *str = "E.N.A.C.";
printf("%d\n", strlen(str));} /* résultat de l'exécution: 8 */
#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); }
/* résultat de l'exécution: Ecole Nationale de l'Aviation Civile*/
*
Programmer en langage C
220
Les chaînes de caractères
Fichiers
*
Programmer en langage C
221
Introduction
*
Programmer en langage C
222
Fichiers
Définition et propriétés
*
Programmer en langage C
223
Fichiers
Mémoire tampon
*
Programmer en langage C
224
Fichiers
Types de Fichiers
*
Programmer en langage C
225
Fichiers
Déclaration d’un fichier
FILE *<pointeurfichier>;
*
Programmer en langage C
226
Fichiers
Ouverture de fichiers
fopen("nom-de-fichier","mode");
*
Programmer en langage C
227
Fichiers
Ouverture de fichiers
*
Programmer en langage C
228
Fichiers
Ouverture de fichiers
*
Programmer en langage C
229
Fichiers
Ouverture de fichiers
*
Programmer en langage C
230
Fichiers
Ouverture de fichiers
#include <stdio.h>
FILE *fp;
…..
if ((fp = fopen("donnees.txt","r")) == NULL)
{
fprintf(stderr,"Impossible d’ouvrir le fichier données en
lecture\n");
exit(1);
}
*
Programmer en langage C
231
Fichiers
Fermeture de fichiers : la fonction fclose
FILE *fp;
fp = fopen("donnees.txt","r")
fclose(fp);
*
Programmer en langage C
232
Fichiers
La fonction d’écriture en fichier: fprintf
*
Programmer en langage C
233
Fichiers
La fonction de saisie en fichier : fscanf
*
Programmer en langage C
234
Fichiers
Programme: Exemple
#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);
}
*
Programmer en langage C
235
Fichiers
Lecture et écriture par caractère : fgetc et fputc
*
Programmer en langage C
236
Fichiers
Exemple
#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 d’ecrire 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);
}
*
Programmer en langage C
237
Fichiers
Exemples
#include <stdio.h>
void main ()
{
FILE *TheFic;
FILE *TheFic1;
char BigBuf[256];
TheFic = fopen ("esai.txt", "r"); /*doit être créé avant compilation*/
TheFic1 = fopen ("esai1.txt", "w");
if (TheFic == NULL)
printf ("Impossible d ouvrir le fichier \n");
/*char *fgets(char *, int , FILE *) ;*/
while (fgets (BigBuf, sizeof BigBuf, TheFic) != NULL)
/* char *fputs(char *, FILE *) ; */
fputs (BigBuf, TheFic1);
fclose (TheFic);
fclose (TheFic1);
}
*
Programmer en langage C
238
Fichiers
Positionnement dans un fichier : fseek, rewind et ftell
*
Programmer en langage C
239
Fichiers
Positionnement dans un fichier : fseek, rewind et ftell
*
Programmer en langage C
240
Fichiers
Positionnement dans un fichier : fseek, rewind et ftell
*
Programmer en langage C
241
Fichiers