Académique Documents
Professionnel Documents
Culture Documents
Cours d’Algorithmique et
Programmation en Langage C
ISBS Sfax
Cours d’Algorithmique et Programmation en Langage C
Première partie
Les bases de la programmation
2
Cours d’Algorithmique et Programmation en Langage C
Sommaire de la Partie I
3
Cours d’Algorithmique et Programmation en Langage C
Les bases de la programmation
Algorithme
4
Cours d’Algorithmique et Programmation en Langage C
6
Cours d’Algorithmique et Programmation en Langage C
Programme et algorithme
Définition
Un programme est la traduction d’un algorithme en un langage
compilable ou interprétable par un ordinateur.
Il est souvent écrit en plusieurs parties, dont une qui pilote les
autres, le programme principal.
Le type entier
Ensemble de définition : Z
Opérations sur les entiers :
n1 + n2n1 − n2n1 ∗ n2
division entière : n1/n2 (35 / 8 donne 4)
reste de la division entière : n1%n2 (35 % 8 donne 3)
Notation algorithmique : n1,n2 : entier
Notation C : int n1, n2;
10
Cours d’Algorithmique et Programmation en Langage C
Le type flottant
Ensemble de définition : IR
Opérations sur les flottants :
x1 + x2 x1 − x2 x1 ∗ x2 x1/x2
toutes les opérations mathématiques usuelles : ln,
cos,arctan...
Notation algorithmique : x1,x2 : flottant (ou réel)
Notation C : float x1, x2;
12
Cours d’Algorithmique et Programmation en Langage C
13
Cours d’Algorithmique et Programmation en Langage C
Les bases de la programmation
Types de base
Le type caractère
14
Cours d’Algorithmique et Programmation en Langage C
NOTATION RESULTAT
\a cloche ou bip (alert ou audible bell)
\b Retour arrière (Backspace)
\f Saut de page (Form Feed)
\n Saut de Ligne (Line Feed)
\r Retour chariot (Carriage Return)
\t Tabulation horizontaLe (HorizontaL Tab)
\v Tabutation verticale (VerticaL Tab)
\\ \
\' ‘
\ '' ‘’
\? ? 16
Cours d’Algorithmique et Programmation en Langage C
Tableaux
Déclaration de tableaux
17
Cours d’Algorithmique et Programmation en Langage C
Exemples
int tab[4]; déclare un tableau !
tab[0] tab[1] tab[2] tab[3]
de 4 valeurs entières
#define SIZE 10
int a[SIZE]; /* a est un vecteur de 10 entiers */
20
Cours d’Algorithmique et Programmation en Langage C
21
Cours d’Algorithmique et Programmation en Langage C
L’affectation
Définition
C’est l’opération qui permet de donner une valeur à une variable.
Notations algorithmiques :
index ← 3
i ← i +1
Notations C :
index = 3; // Attention!
i = i + 1; // ce n’est pas l’égalité mathématique
23
Cours d’Algorithmique et Programmation en Langage C
Les bases de la programmation
Entrées/Sorties
Les entrées/sorties
Ces deux opérations de base permettent de dialoguer : soit on
saisit une valeur (i-e l’ordinateur attend une valeur pour une
variable), soit on l’affiche à l’écran.
Notations algorithmiques :
ECRIRE (”Entrez une couleur primaire”)
LIRE (couleurPrim)
Notations en C :
printf
scanf
24
Cours d’Algorithmique et Programmation en Langage C
Les bases de la programmation
Entrées/Sorties
Les possibilités de la fonction printf
La fonction printf a comme 1er argument une chaîne de
caractères qui spécifie:
▪ Des caractères à afficher tels quels;
▪ Des code de format repérés par %. Un code
de conversion (c, d, f..) précise le type de
l’information à afficher.
25
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
Les possibilités de la fonction printf
Les principaux codes de conversion:
27
Cours d’Algorithmique et
Cours d’Algorithmique et Programmation
Programmationen
enLangage
LangageCC
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
Les possibilités de la fonction printf
Action sur le gabarit d’affichage:
Les entiers sont affichés par défaut sans espaces avant ou
après. Les flottants avec six chiffres après le point.
Pour agir sur l’affichage ➔ un nombre est placé après %
et précise le nombre de caractère minimum à utiliser.
Exemples: printf("%3d" , n );
n = 20 ^20
n=3 ^^3
n = 2358 2358
n = -5200 -5200
28
Cours d’Algorithmique
Cours d’Algorithmique et en
et Programmation Programmation
Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
x = 1.2345 1.234500
x = 12.3456789 12.345678
printf("%10f" , x );
x = 1.2345 ^^^1.234500
29
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
Les possibilités de la fonction printf
Actions sur la précision :
pour les flottants, on peut préciser un nombre de
chiffres après le point décimal
Exemples: printf("%10.3f" , x );
x = 1.2345 ^^^^^^1.235
30
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
31
Cours d’Algorithmique
Cours d’Algorithmique et en
et Programmation Programmation
Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
32
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction printf
Entrées/Sorties
Les possibilités de la fonction printf
Erreur 2: Nombre de code de format différents du nombre
d’expressions de la liste
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
• c : char
• d : int
• u : unsigned int
• hd : short int
• hu : unsigned short
• ld : long
• lu : unsigned long
• f ou e : float écrit en notation "décimale" ou ‘'exponentielle''
34
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
Les possibilités de la fonction scanf
Rôle d’un espace dans le format :
Un espace entre deux codes de format demande à scanf de
faire avancer le pointeur au prochain caractère différent d’un
séparateur !!
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
41
Cours d’Algorithmique
Cours d’Algorithmique et en
et Programmation Programmation
Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
42
Cours d’Algorithmique
Cours d’Algorithmique et en
et Programmation Programmation
Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
43
Cours d’Algorithmique
Cours d’Algorithmique et en
et Programmation Programmation
Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
44
Cours d’Algorithmique
Cours d’Algorithmique et en
et Programmation Programmation
Langage C en Langage C
Les bases de la programmation
Les Entrées/Sorties
bases de la programmation
Les possibilités de la fonction scanf
Entrées/Sorties
45
Cours d’Algorithmique et Programmation en Langage C
int fonc1(int x) {
return x; Définitions
} des fonctions
int fonc2(int x) {
return (x * x);
}
49
Cours d’Algorithmique et Programmation en
Langage C
Les bases de la programmation
Structure d’un programme C
Préprocesseur
Le préprocesseur effectue un prétraitement du programme
source avant qu'il soit compilé.
Ce préprocesseur exécute des instructions particulières appelées
directives.
Ces directives sont identifiées par le caractère # en tête.
Inclusion de fichiers
#include <nom-de-fichier> /* répertoire standard */
#include "nom-de-fichier" /* répertoire courant */
50
Cours d’Algorithmique et Programmation en Langage C
Préprocesseur
51
Cours d’Algorithmique et Programmation en Langage C
Deuxième partie
Les instructions en
algorithmique et en langage C
52
Cours d’Algorithmique et Programmation en Langage C
Sommaire de la Partie II
53
Cours d’Algorithmique et Programmation en Langage C
54
Cours d’Algorithmique et Programmation en Langage C
Les instructions en algorithmique et en C
Opérateurs relationnels
opérateur algorithmique C
égal == ==
différent ≠ !=
inférieur < <
supérieur > >
inférieurouégal <= <=
supérieurouégal >= >=
55
Cours d’Algorithmique et Programmation en Langage C
Les instructions en algorithmique et en C
Opérateurs booléens
opérateur algorithmique C
négation NON(a) !a
ou a OU b a || b
et a ET b a && b
56
Cours d’Algorithmique et Programmation en Langage C
57
Cours d’Algorithmique et Programmation en Langage C
58
Cours d’Algorithmique et Programmation en Langage C
59
Cours d’Algorithmique et Programmation en Langage C
60
Cours d’Algorithmique et Programmation en Langage C
FinSi
62
Cours d’Algorithmique et Programmation en Langage C
Les structures en algorithmique et en C
Sélection
Notations de la sélection complète
Sélection complète : notation algorithmique
Si (condition)
bloc instructions
Sinon
bloc instructions
FinSi
68
Cours d’Algorithmique et Programmation en Langage C
Les structures en algorithmique et en C
Boucle Répéter .. TantQue
Répéter .. TantQue : exemples C
do // Exemple 1 de saisie filtree
{ Printf ( "Entrez un entier < 4 : “ );
Scanf (“%d”, &n);
} while(n >= 4);
69
Cours d’Algorithmique et Programmation en Langage C
FinTantQue
while(condition)
bloc_instructions
70
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Les structures en algorithmique et en C
Boucle pré-testée
Il s'agit de l'instruction while : tant que, pas jusqu’à ce que!
TantQue (n%2 == 0)
n ← n/2
cpt ← cpt + 1
FinTantQue
while((n % 2) == 0)
{
n = n / 2;
cpt = cpt + 1;
}
Printf ("32 est “ cpt " fois divisible par 2.“ );
}
73
Cours d’Algorithmique et Programmation en Langage C
Les structures en algorithmique et en C
Boucle Pour .. FinPour
Notation de la boucle Pour .. FinPour
Boucle Pour .. FinPour : notation algorithmique
Pour cpt Dans [a..b] ParPasDe n
bloc instructions
FinPour
Boucle Pour .. FinPour : notation C
for(expression_1; expression_2; expression_3)
bloc_instructions
DébutDéclaration
n ← 5,fact ← 1,cpt : entier
FinDéclaration
Pour cpt Dans [1..n] ParPasDe 1
fact ← fact*cpt
FinPour
Afficher(”5! = ”, fact)
FinProgramme
75
Cours d’Algorithmique et Programmation en Langage C
76
Cours d’Algorithmique et Programmation en Langage C
Selon <identificateur>
(liste de) valeur(s) : instructions
(liste de) valeur(s) : instructions
…
[ Autres : instructions]
77
Cours d’Algorithmique
Cours d’Algorithmique et Programmation en et Programmation
Langage C en Langage C
Les structures en algorithmique et en C
Boucle Selon
Les structures en algorithmique et en C
Notations de la boucle Selon
Boucle Selon
78
Cours d’Algorithmique
Cours d’Algorithmique et Programmation en et Programmation
Langage C en Langage C
Les structures en algorithmique et en C
Boucle Selon
Les structures en algorithmique et en C
Notations de la boucle Selon
Boucle Selon
char choix;
printf("SAISIE TAPER 1\n");
printf("AFFICHAGE TAPER 2\n");
printf("POUR SORTIR TAPER S\n");
printf("\nVOTRE CHOIX: ");
choix = getchar();
switch(choix)
{
case '1': .......; break;
case '2': ......; break;
case 'S': printf("\nFIN DU PROGRAMME ...."); break;
default; printf("\nCE CHOIX N'EST PAS PREVU "); /* pas de
break ici */
}
79
Cours d’Algorithmique et Programmation en Langage C
80
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les structures en algorithmique et en C
Ruptures de boucle
Les structures en algorithmique et en C
Les instructions C de ruptures de boucle
Ruptures de boucle
Pour rompre le déroulement séquentiel d'une suite d'instructions
Continue; 8
Break; #
for (i = -10; i <= 10; i++)
int i, j=1;
char a; {
for (i = -10; i <= 10; i++){ if (i == 0)
continue;
while(j!=0) /* boucle // pour éviter la division par zéro
infinie */ printf(“ %f”, 1 / i);
{ }
a=getchar();
return (expression);
if(a= ='x')
permet de sortir de la fonction qui la
break;
contient
}
} exit (expression); La fonction est interrompu.
expression : un entier indiquant le code de
Si x est tapée au clavier
terminaison du processus 81
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les structures en algorithmique et en C
Ruptures de boucle
Les structures en algorithmique et en C
Les instructions C de ruptures de boucle
Ruptures de boucle
Quatrième partie IV
Les fonctions en algorithmique
et en C
83
Cours d’Algorithmique et Programmation en Langage C
Sommaire de la Partie IV
Les fonctions
Caractéristiques
Notation
Le passage des arguments
Récursivité
84
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les fonctions
Caractéristiques
Les fonctions
Caractéristiques
Les fonctions
Notation
Notation algorithmique
L’écriture d’une fonction requiert un en-tête et un corps :
l’en-tête comprend : DébutFonction, le nom de la fonction, une
liste d’arguments entre parenthèses, puis le type de la fonction.
Les arguments sont séparés par une virgule.
notés → nom_arg : type_arg ;
Les fonctions
Notation
Notation C
L’écriture d’une fonction requiert un en-tête et un corps :
l’en-tête comprend : le type de retour, le nom de la fonction
suivit d’une liste d’arguments entre parenthèses. Les
arguments sont séparés par une virgule et sont notés :
Type_arg nom_arg, type_arg nom_arg, ...
le corps est un bloc d’instructions précédé d’une instruction de
retour d’une expression de même type que la fonction.
Exemple :
float Doubler(float x)
{ return 2.0*x;
}
87
d’Algorithmique
Cours d’Algorithmique
Cours et Programmation
et Programmation en Langage C en Langage C
Les fonctions
Notation
Les fonctions
Notation C
Notation
Notation C
Une fonction possède trois aspects :
le prototype : c’est la déclaration nécessaire avant tout;
88
Cours d’Algorithmique et Programmation en Langage C
Les fonctions
Notation
printf("Celsius\tFarenheit\n");
for(d = start; d <= end; d += step, lines++)
printf("%.1lf\t%.1lf\n", d, d * 1.8 + 32);
return lines;
}
Valeur renvoyée 89
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les fonctions
Notation
Les fonctions
Notation
#include <stdio.h>
#include <stdio.h>
void change(int v);
void main(void)
{ int var = 5; change: v = 500
change(var); main: var = 5
printf("main: var = %d\n", var);
}
void change(int v)
{ v *= 100;
printf("change: v = %d\n", v);
}
92
Cours d’Algorithmique et Programmation en Langage C
Les fonctions
Return
Fonction renvoyant une valeur au programme
#include <stdio.h>
int change(int v);
void main(void)
{ int var = 5;
int valeur;
valeur = change(var); change: v =
printf("main: var = %d\n", var); main: var =
printf("main: valeur = %d\n", valeur); main: valeur =
}
int change(int v)
{ v *= 100;
printf("change: v = %d\n", v);
return (v+1);
} 93
d’Algorithmique
Cours d’Algorithmique
Cours et enProgrammation
et Programmation Langage C en Langage C
Les fonctions
Les Return
fonctions
ReturnFonction renvoyant une valeur au programme
Une fonction se termine et « rend la main » au code
appelant lorsque son exécution rencontre l’instruction :
return expression; ou return;
#include <stdio.h>
int return_Val(int v);
void main(void)
return_Val : rien
{ int var = 5;
main: var =
int valeur;
valeur = return_Val(var); main: valeur =
printf("main: var = %d\n", var);
printf("main: valeur = %d\n", valeur);
}
int return_Val(int v)
{ if (v == 10) return (2*v);
else return (3*v);
94
}
Cours d’Algorithmique et Programmation en Langage C
Les fonctions
Récursivité
Fonction récursive
Une fonction est dite récursive si elle se fait appel pour
calculer une sous partie de la valeur finale qu'elle retournera.
#include <stdio.h>
int fact(int n);
int return_Val(int v);
void main(void) return_Val : rien
{ int var = 5, int valeur; main: var =
valeur = return_Val(var); main: valeur =
printf("main: var = %d\n", var);
printf("main: valeur = %d\n", valeur); }
int fact(int n)
{ if (n == 0) return 1; (0)=0*fact(-1)
else return n * fact(n - 1); }
int return_Val(int v) int temp=1;
{ if (v == 10) return (2*v); while(n>1) temp*=n--;
else return fact(v); } 95
Cours d’Algorithmique et Programmation en Langage C
Les fonctions
Récursivité
Fonction récursive
int fact( int n) {
if (n < 1) return 1; void hanoi(int n, int
else return ( n * fact(n-1) a, int b){
); int c ;
} …
if (n == 1)
move(a,b);
else { hanoi(n-1, a,
c);
move (a,
b);
96
Cours d’Algorithmique et Programmation en Langage C
Cinquième partie V
Procédure, pointeurs et
tableaux
97
Cours d’Algorithmique et Programmation en Langage C
Sommaire de la Partie V
Les procédures, pointeurs et tableaux
Procédures
Pointeurs
Passage des arguments par adresse
Relation avec les tableaux
98
Cours d’Algorithmique et Programmation en Langage C
Les procédures, pointeurs et tableaux
Procédures
Les procédures
Généralisant la notion de fonction, les procédures permettent
de modifier la valeur de plusieurs arguments;
Notation algorithmique proche de celle des fonctions, sauf :
DébutProcédure ...FinProcédure
pas de type de retour (donc pas d’instruction Retourner)
les arguments peuvent encore être en entrée (→) non
modifiés, mais peuvent aussi être modifiés en étant soit
en sortie (←) soit en entrée/sortie (↔)
Leur appel constitue à lui seul une instruction.
99
Cours d’Algorithmique et Programmation en Langage C
Les pointeurs
Un pointeur est une variable particulière, dont la valeur est
l'adresse d'une autre variable.
• Pointeur p: valeur 5A0F3 (adresse hexadécimale)
• Adresse 5A0F3: valeur 17 (correspondant à la valeur d'un entier i)
En accédant à cette adresse, on peut accéder indirectement à
la variable et donc la modifier.
i=17
5A0F3 17
p=5A0F3
p i
Un pointeur est une adresse mémoire. On dit que le pointeur p
pointe vers i, puisque p pointe vers l’emplacement mémoire où est
enregistrée i. 101
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Les pointeurs, tableaux et procédures
LesPointeurs
procédures, pointeurs et tableaux
Les pointeurs
Pointeurs
Les pointeurs
• Les pointeurs sont nécessaires pour:
– effectuer les appels par référence (i.e. écrire des
fonctions qui modifient certains de leurs paramètres)
– manipuler des structures de données dynamiques (liste,
pile, arbre,…)
– allouer dynamiquement de la place mémoire
Déclaration des pointeurs
Le symbole * est utilisé entre le type et le nom du pointeur
• Déclaration d’un entier: int i;
• Déclaration d’un pointeur vers un entier: int *p;
102
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Les pointeurs, tableaux et procédures
LesPointeurs
procédures, pointeurs et tableaux
Les pointeurs
Pointeurs
103
Cours d’Algorithmique et Programmation en Langage C
Les procédures, pointeurs et tableaux
Pointeurs
Opérateurs unaires pour manipuler les pointeurs, & (adresse de) et * (contenu)
Exemple: int i = 8;
printf("VOICI i: %d\n",i);
printf("VOICI SON ADRESSE EN HEXADECIMAL: %p\n",&i);
nom_de_Pointeur = &nom_de_variable
void main(void) p c
{ char c = 'a', d = 'z';
0x1132 0x1132 'a'
char *p;
p d
p = &c; 0x91A2 'z'
*p = c; 0x91A2
printf("%c\n", *p);
p = &d; L’opérateur * (“valeur pointée
par”)
printf("%c\n", *p);
} a
z
104
#include <stdio.h>
void main() {
int *p, x, y;
p = &x; /* p pointe sur x */
x = 10; /* x vaut 10 */
y = *p - 1; printf(" y= *p - 1 =? = %d\n" , y); y vaut ?
*p += 1; printf(" *p += 1 =? *p = x= ? = %d %d\n" , *p, x); x vaut ?
(*p)++; printf(" (*p)++ =? *p = x= ? = %d %d alors y=%d \n" , *p,
x, y);
incrémente aussi de 1 la variable pointée par p, donc x vaut ??.
y vaut 9
LesPointeurs
procédures, pointeurs et tableaux
Les pointeurs
Pointeurs
106
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Les pointeurs, tableaux et procédures
LesPointeurs
procédures, pointeurs et tableaux
Les pointeurs
Pointeurs
Les pointeurs
* et ++
*p++ signifie:
*p++trouver la valeur pointée
*p++passer à l’adresse suivante
(*p)++ signifie: !
(*p)++ trouver la valeur pointée
(*p)++ incrémenter cette valeur (sans changer le pointeur)
*++p signifie:
*++pincrémenter d’abord le pointeur
*++ptrouver la valeur pointée
107
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Les pointeurs, tableaux et procédures
LesPointeurs
procédures, pointeurs et tableaux
Les pointeurs
Pointeurs
109
Utiliser des pointeurs - exemple
#include <stdio.h>
long sum(long*, int);
Tab Tab
int main(void)
{ long Tab[6] = { 1, 2, 3, 5, 7, 11 }; 1 1000 1
printf("%ld\n", sum(Tab, 6)); 2 1004 2
return 0; 3 3
1008
}
5 1012 5
long sum(long *p, int sz) 7 1016 7
{ long *end = p + sz; 11 1020 11
long total = 0;
while(p < end) 1024
total += *p++; p
return total; 1000
} end 1024
110
Cours d’Algorithmique et Programmation en Langage C
Sixième partie VI
Aspects avancés du langage C
111
Cours d’Algorithmique et Programmation en Langage C
Sommaire de la Partie VI
Quelques aspects avancés du langage C
Chaînes de caractères
Listes chainées
Gestion des fichiers
Structures
Allocation programmée
Arguments du main()
112
Cours d’Algorithmique et Programmation en Langage C
114
d’Algorithmique
Cours d’Algorithmique
Cours et Programmation
et Programmation en Langage C en Langage C
Quelques aspects avancés du langage C
Chaînes de caractères
Quelques aspects avancés du langage C
Chaînes de caractères
p Denis
Denis
Claire
Claire
debut NULL
NULL
prec
prec
debut
119
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Quelques aspects avancés du langage C
Listes chaînées
Quelques aspects avancés du langage C
Listes chaînées
Parcourir une liste
void parcours (struct Node *debut) debut est un pointeur
{ sur la cellule qui
struct Node *p;
p = debut;
contient le premier
while ( p != NULL) { élément de la liste
printf (“%s\n”, p->name);
p = p->next; Liste identifier par
} l'adresse de sa première
} cellule
debut NULL
120
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Quelques aspects avancés du langage C
Listes chaînées
Quelques aspects avancés du langage C
Listes chaînées
Listes chaînées
Listes chaînées
Exemple
LIFO
Last-In-First-Out
Listes chaînées
PUSH procédure
Push(5)
7 3 9 5
Push(9)
NULL
Push(3)
Top Top Top Top
Push(7)
Listes chaînées
POP procédure
Pop(7) 3
7 9 5
Pop(3) Underflow risk NULL
si la pile est vide !!!
Pop(9)
Pop(5) Top Top Top
Top Top
Top
124
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Quelques aspects avancés du langage C
Listes chaînées
Quelques aspects avancés du langage C
Listes chaînées
Listes chaînées
fin 125
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Quelques aspects avancés du langage C
Listes chaînées
Quelques aspects avancés du langage C
Listes chaînées
doublement chaînées
Listes chaînées
NULL NULL
début fin
126
Cours d’Algorithmique et Programmation en Langage C
Quelques aspects avancés du langage C
Listes chaînées
NULL NULL
debut fin
NULL NULL
act fin
debut 127
Cours d’Algorithmique et Programmation en Langage C
Quelques aspects avancés du langage C
Listes chaînées
tmp
NULL NULL
act
debut fin 128
Cours d’Algorithmique et Programmation en Langage C
Quelques aspects avancés du langage C
Gestion des fichiers
Fonctions d’écriture
int fprintf (FILE* stream, const char* format, ...);
int fputc (int ch, FILE* stream);
int fputs (const char* buffer, FILE* stream);
int feof(FILE *f); /*renvoie une valeur non nulle si fin de fichier*/
131
Exemple d’écriture (lecture) de fichier
#include <stdio.h> #include <stdio.h>
void sauvegarde( char titre[], int n, void main(void)
float x[], int ind [] ) { char titre[81];
float x[10];
{ int i=0;
int ind[10], i=0;
FILE *f;
FILE *f;
f = fopen(“monfichier.dat”,”w”);
f = fopen(“monfichier.dat”,”r”);
if (f !=NULL){
if (f!= NULL) {
fprintf(f,”%s\n”,titre);
fgets(titre,80,f);
for (i=0; i < n; i++ ) { while(!feof(f)) {
fprintf(f,”%f %d\n”, x[i],ind[i]); fscanf(f,”%f d”,&x[i],&ind[i]);
} i++; }
Mon titre
} }
3.0 1
fclose(f); 4.5 2 fclose(f); }
7.3 3
La constante NULL (définie comme 0 dans stdio.h) réfère à une
adresse non définie 132
Cours d’Algorithmique et Programmation en Langage C
Quelques aspects avancés du langage C
Gestion des fichiers
Cas I Cas II
133
Cours d’Algorithmique et Programmation en Langage C
Quelques aspects avancés du langage C
Gestion des fichiers
135
Cours d’Algorithmique et Programmation en Langage C
136
Cours d’Algorithmique et Programmation en Langage C
138
Cours d’Algorithmique et Programmation en Langage C
141
Cours d’Algorithmique et Programmation en Langage C
142
Cours d’Algorithmique et Programmation en Langage C
L’allocation programmée
Lorsqu’on utilise un tableau, on doit le déclarer en précisant son
type et sa taille. La taille est parfois inconnue a priori, on doit la
gérer àl’exécution. On parle d’allocation programmée ou de
tableaux dynamiques.
145
d’Algorithmique et Programmation en Langage C
Cours d’Algorithmique et Programmation en Langage C
Cours
Quelques aspects avancés du langage C
Allocation programmée
L’allocation
Quelques aspects avancés du langage C
Allocation programmée
programmée
L’allocation programmée
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{ char * str;
// allocation programmee
if ((str = (char *) malloc(10)) == NULL) {
printf("pas assez de memoire !\n");
exit(1); // sortie en erreur }
strcpy(str, "Bonjour");
printf("Message : %s\n", str);
free(str); // libere la memoire
return 0; } 146
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions mathématiques
148
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions mathématiques
149
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions mathématiques
150
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions mathématiques
Annexes
Les fonctions portant sur les chaînes
Nom En C Rôle Bibliothèque Exemple
Strcat(ch1, recopie la seconde chaîne Ch1 = “Langage”
ch2) ch2 à la suite de la première Ch2 = “ de
ch1 #include Programmation”
<String.h> Ch = Strcat(Ch1, Ch2)
➔ Ch = “Langage de
Concat(ch1
programmation”
, ch2)
Strncat(ch1, travaille de la même façon Ch = Strncat(Ch1, Ch2,
ch2, lgmax) que Strcat en offrant un 6)
#include
contrôle sur le nombre de ➔Ch = "Langage de
<String.h>
caractères qui seront Pr"
concaténés de la chaine ch2.
152
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions portant sur les chaînes
153
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions portant sur les chaînes
Strchr(ch, recherche dans ch, la première Strchr(première, e)
#include
caractère) position où apparait le caractère →3
<String.h>
mentionné.
Strrchr(ch, opère de même mais en #include Strrchr(première, e)
caractère) partant de la fin de ch <String.h> →8
Strcspn(ch, recherche la première occurrence str = "fcba73" ;
caractère) dans une chaîne, de l’un des touch =
caractères d’une seconde chaîne. #include "1234567890" ;
<String.h> i = strcspn (str,
touch);
Pos(ch1, ➔i = 5
caractère) Strspn(ch, recherche dans str1 la position du strT = "129e" ;
caractère) premier caractère n’ayant pas cset =
d’équivalent dans str2 et renvoie #include "1234567890" ;
cette position, ou NULL si aucune <String.h> i = strspn (strT,
correspondance n’est découverte. cset);
➔i = 3
Strpbrk(str recherche la première occurrence, str1 = "ae2fi3jk4l";
1, str2) dans une chaîne, d’un des str2 = "34" ;
caractères d’une seconde chaîne ; #include ret = strpbrk ( str1 ,
mais, en plus, elle inclut le <String.h> str2 );
terminateur \0 dans la recherche. ➔ret = "3" 154
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions portant sur les chaînes
155
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions portant sur les chaînes
156
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions portant sur les chaînes
Annexes
Les fonctions de test de caractères
Leurs prototypes se trouvent dans le fichier d’en-tête ctype.h (#include
<ctype.h>). Toutes renvoient un résultat de type booléen (vrai ou faux).
En C Rôle Exemple
isalnum(int ch) Renvoie vrai si ch est une lettre ou var1 = 'd' ; var2 = '2 ' ; var3 = '\ t' ; var4 =
un chiffre " '';
isalnum(var1)→ vrai /* d : alphanumérique
isalnum(var2)→ vrai /* 2 : alphanumérique
isalnum(var3)→ faux / * \t : pas
alphanumérique
isalnum(var4)→ faux /* " " : pas
alphanumérique
isalpha(int ch) Renvoie vrai si ch est une lettre isalpha(var1)→ vrai /* d : alphabet
isalpha(var2)→ vrai /* 2 : alphabet
isalpha(var3)→ faux / * \t : pas alphabet
isalpha(var4)→ faux /* " " : pas alphabet
isascii() Renvoie vrai si ch est un caractère
ASCII standard (compris entre 0 et
127)
iscntrl( int ch) Renvoie vrai si ch est un caractère
de contrôle
ASCII, ces caractères ont des codes
octaux de 000 à 037, et 177 (DEL). 158
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions de test de caractères
isdigit(int Renvoie vrai si ch est un chiffre isdigit(var1)→ faux /* d : pas chiffre
ch) isdigit(var2)→ vrai /* 2 : chiffre
isgr Renvoie vrai si ch est un caractère isgraph(var1)→ vrai /* d : imprimé
aph(int ch) imprimable (autre qu’un espace) isgraph (var2)→ vrai /* 2 : imprimé
isgraph (var4)→ faux /* " " : pas imprimé
islo Renvoie vrai si ch est une lettre var5 = 'D' ;
wer(int ch) minuscule (bas de casse) islower(var1)→ vrai /* d : minuscule
islower (var2)→ faux /* 2 : pas minuscule
islower(var5)→ faux /* D : pas minuscule
isprint (int Renvoie vrai si ch est un caractère isprint(var1)→ vrai /* d : imprimé
ch) imprimable (espace compris) isprint (var2)→ vrai /* 2 : imprimé
isprint (var3)→ faux / * \t : pas imprimé
isprint (var4)→ vrai /* " " : imprimé
159
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions de test de caractères
Annexes
Les fonctions relatives au temps
Annexes
Les fonctions relatives au temps
162
Cours d’Algorithmique et Programmation en Langage C
Annexes
Les fonctions relatives au temps
163