Académique Documents
Professionnel Documents
Culture Documents
Chap2 LangC
Chap2 LangC
Safa.chebbi@supcom.tn
LANGAGE C 18/11/2020
PLAN DU COURS
I. Les structures
II. Les tableaux
III. Les fonctions
IV. Les chaines de caractères
LES STRUCTURES
INTRODUCTION
En langage C, on peut:
1. la structure : while
2. la structure : do - while
3. la structure : for
LES STRUCTURES RÉPÉTITIVES
WHILE…
❑Test:
✓Est évaluée avant chaque passage de la boucle.
✓Elle est utilisée pour décider si la boucle est répétée ou non.
❑Avancement:
✓Est évaluée à la fin de chaque passage de la boucle.
✓Elle est utilisée pour réinitialiser les données de la boucle. les
parties initialisation et avancement peuvent contenir plusieurs
initialisations ou réinitialisations, séparées par des virgules.
LES STRUCTURES RÉPÉTITIVES
FOR
❑ Remarques:
LES STRUCTURES RÉPÉTITIVES
EXEMPLE FOR
❑ Exemple: Ecrire un programme qui calcule la somme des entiers de 1 à 100.
LES STRUCTURES RÉPÉTITIVES
CONTINUE
❑ continue: permet de passer prématurément à l'itération suivante de la boucle (si la condition est
vraie).
LES STRUCTURES RÉPÉTITIVES
GOTO
❑ goto: permet le branchement en un emplacement quelconque du programme.
EXERCICES
❑ Exercice 1:
Ecrire un programme qui lit des entiers. Le nombre d’entiers à lire n’est pas connu à l’avance. Le programme
s’arrêtera de lire les entiers quand leur somme dépasse 100
EXERCICES
❑ Exercice 1:
Ecrire un programme qui lit des entiers. Le nombre d’entiers à lire n’est pas connu à l’avance. Le programme
s’arrêtera de lire les entiers quand leur somme dépasse 100
EXERCICES
❑ Exercice 2:
Écrire un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur
produit et leur moyenne. Le nombre N est à entrer au clavier.
✓ en utilisant while,
✓ en utilisant do - while,
✓ en utilisant for.
EXERCICES
❑ Exercice 2: en utilisant while
EXERCICES
❑ Exercice 2: en utilisant do - while,
EXERCICES
❑ Exercice 2: en utilisant for
EXERCICES
❑ Exercice 3:
Ecrire un programme qui:
1. saisit un nombre formé de 3 chiffres (faites un test lors du saisie)
2. affiche le chiffre des dizaines et des centaines de ce nombre
EXERCICES
❑ Exercice 3:
Ecrire un programme qui:
1. saisit un nombre formé de 3 chiffres (faites un test lors du saisie)
2. affiche le chiffre des dizaines et des centaines de ce nombre
EXERCICES
❑ Exercice 4:
Écrire un programme qui lit deux entiers (A et B) au clavier et qui affiche le signe du produit de A et B sans
faire la multiplication.
EXERCICES
❑ Exercice 4:
Écrire un programme qui lit deux entiers (A et B) au clavier et qui affiche le signe du produit de A et B sans
faire la multiplication.
LES TABLEAUX
LES TABLEAUX À UNE DIMENSION
❑ Les tableaux sont certainement les variables structurées les plus populaires. Ils sont disponibles
dans tous les langages de programmation et servent à résoudre une multitude de problèmes.
❑ Les tableaux à une dimension (uni-dimensionnels): c’est une variable formée d'un nombre
entier n de valeurs de même type, qui sont appelées les éléments du tableau.
❖Réservation automatique:
✓ Exemples
int tab[] = {10, 20, 30, 40, 50}; ==> réservation de 5*sizeof(int)= 10
octets
int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; ==> réservation de 10*sizeof(int)=
20 octets
LES TABLEAUX À UNE DIMENSION
EXEMPLES
❑ Exemple 1: Ecrire un programme permettant de saisir le nombre d’éléments d’un tableau d’entiers
le remplit, puis l’affiche.
LES TABLEAUX À UNE DIMENSION
❑ Exercice: Ecrire un programme qui remplit et affiche un tableau d’entiers, ensuite calcule et affiche
la somme et la moyenne des éléments du tableau.
LES TABLEAUX À UNE DIMENSION
EXEMPLES
❑ Exemple 2: Ecrire un programme qui remplit et affiche un tableau d’entiers, ensuite calcule et
affiche la somme et la moyenne des éléments du tableau.
LES TABLEAUX À DEUX DIMENSIONS: MATRICES
❑ Déclaration: <type> <nom_matrice>[nb_lignes_l][nb_colonnes_c];
❑ Exemple: int mat [20][30]; //l=20 et c=30: mat est un tableau à deux dimensions de 20
éléments, tel que chaque élément est un tableau de 30 éléments.
❑ l et c sont alors les deux dimensions du tableau. Un tableau à deux dimensions contient
donc l*c éléments.
✓ Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la
liste des valeurs respectives entre accolades.
✓ A l'intérieur de la liste, les composantes de chaque ligne du tableau sont encore une fois comprises
entre accolades int mat[2][3]={ {10,11,12},{20,21,22}};
✓ Comme pour les tableaux à une dimension, le nom d'une matrice représente l'adresse du premier
élément du tableau (c.-à-d. l'adresse de la première ligne du tableau).
✓ Un tableau de dimensions l et c, formé d'éléments dont chacun a besoin de m octets, occupera l*c*m
octets en mémoire.
✓ Lors de l'initialisation, il n'est pas nécessaire d'indiquer toutes les valeurs: Les valeurs manquantes
seront initialisées par zéro.
✓ les indices du tableau varient de 0 à l-1, respectivement de 0 à c-1.
✓ la composante de la nième ligne et mième colonne est notée: mat[n-1][m-1]
LES TABLEAUX À DEUX DIMENSIONS: MATRICES
EXEMPLE
❑ Exemple: Ecrire un programme qui remplit et affiche un tableau à deux dimensions.
EXERCICES À FAIRE
❑ Exercice 1: Ecrire un programme qui permet de compter le nombre d’occurrences
d’un entier donné dans un tableau donné ainsi que l’indice de sa première
apparition.
EXERCICES À FAIRE
❑A l'aide des fonctions nous pouvons modulariser nos programmes pour obtenir des solutions plus efficientes.
✓Meilleure lisibilité
✓Diminution du risque d'erreurs
✓Possibilité de tests sélectifs
✓Réutilisation de modules déjà existants
✓ Simplicité de l'entretien
✓Favorisation du travail en équipe
✓Hiérarchisation des modules
LES FONCTIONS
FONCTION VS PROCEDURE
❑Une fonction dispose de 0 ou plusieurs arguments qui correspondent à des informations qui
lui sont transmises et elle fournit un unique résultat.
❑Une fonction peut apparaitre dans une expression. (exemple: g=somme(x,y,z)+9);
❑La procédure ne possède pas une valeur de retour, son appel ne peut pas apparaitre dans
une expression.
❑Une procédure dispose d'arguments. Parmi les arguments, certains sont des informations qui
lui sont transmises, d'autres, sont des informations qu'elle produit en retour de son appel.
➢En langage C, une fonction désigne à la fois une procédure et une fonction.
LES FONCTIONS
TYPE D’UNE FONCTION
❑Si une fonction F fournit un résultat du type T, on dit que 'la fonction F est du type T‘.
Exemple: somme est du type int.
❑Si une fonction ne fournit pas de résultat, il faut indiquer void (vide) comme type du
résultat.
❑Si une fonction n'a pas de paramètres, on peut déclarer la liste des paramètres
comme (void) ou simplement comme ().
❑Le type par défaut est int: si le type d'une fonction n'est pas déclaré explicitement,
elle est automatiquement du type int.
❑Il est interdit de définir des fonctions à l'intérieur d'une autre fonction.
LES FONCTIONS:
DÉFINITION D’UNE FONCTION
Dans la définition d'une fonction, nous
indiquons:
✓ le nom de la fonction
✓ le type, le nombre et les noms des
paramètres de la fonction
✓ le type du résultat fourni par la
fonction
✓ les variables locales à la fonction
✓ les instructions à exécuter
Les noms des arguments n'ont d'importance qu'au sein du corps de la fonction. Ils servent à décrire le travail que devra
effectuer la fonction quand elle est appelée: Ce sont des variables locales
LES FONCTIONS
DECLARATION D’UNE FONCTION (1)
❑ La déclaration (prototype) d'une fonction indique uniquement le type des paramètres transmis et reçus
par la fonction.
❑ Lors de la déclaration, le nombre et le type des paramètres doivent nécessairement correspondre à
ceux de la définition de la fonction.
❑ On peut facultativement inclure les noms des paramètres dans la déclaration, mais ils ne sont pas
considérés par le compilateur.
❑ Les noms fournissent une information intéressante pour le programmeur qui peut en déduire le rôle des
différents paramètres.
LES FONCTIONS
DECLARATION D’UNE FONCTION (2)
Pour écrire un programme comportant des fonctions, deux schémas sont possibles:
❖ Schéma 1: (c'est le schéma utilisé dans l'exemple précédent de somme). La fonction est définie avant son
appel. Dans ce cas, elle n'a pas besoin d'être déclarée.
❖ Schéma 2: Déclarer chaque fonction avant de l'utiliser. La déclaration informe le compilateur du type des
paramètres et du résultat de la fonction. A l'aide de ces données, le compilateur peut contrôler si le nombre
et le type des paramètres d'une fonction sont corrects.
LES FONCTIONS
RÈGLES DE VISIBILITÉ DES VARIABLES
❑Par définition, une variable est visible par toutes les fonctions et les expressions de code qui
suit sa déclaration si ces dernières sont à un niveau de bloc égal ou inférieur.
❑Les paramètres d'une fonction sont à considérer comme des variables locales qui sont
initialisées automatiquement par les valeurs indiquées lors d'un appel.
❑A l'intérieur de la fonction, nous pouvons donc changer les valeurs des paramètres sans
influencer les valeurs originales dans les fonctions appelantes.
LES FONCTIONS
PASSAGE DES PARAMÈTRES PAR VALEUR
❑Exemple: Ecrire un programme qui permute deux entiers saisis au clavier.
LES FONCTIONS
PASSAGE PAR ADRESSE (1)
❑Passage par valeur: une fonction n'obtient que les valeurs de ses paramètres.
❑Pour changer la valeur d'une variable de la fonction appelante, nous allons procéder comme
suit:
o la fonction appelante doit fournir l'adresse de la variable.
o la fonction appelée doit déclarer le paramètre comme pointeur.
i = 1 2 3 ... (n − 1) n
i =1
si n 0
erreur si n 0
Fact(n) = 1 si n = 0
n Fact(n − 1) si n 0
LES FONCTIONS
FONCTIONS RÉCURSIVES
❑Suite de l’exemple : le calcul de la factorielle
erreur si n 0
Fact(n) = 1 si n = 0
n Fact(n − 1) si n 0
Fonction-Factoriel (Nombre)
SI Nombre < 0
retourne erreur
Si Nombre = 0
retourne 1
SINON
retourne Nombre * Fonction-Factoriel(Nombre – 1)
int Factoriel(int N)
{
if (N < 0) { /* Parametre d’entree invalide */
return -1; /* -1 represente erreur */
} else if (N == 0) {
return 1; /* Cas limite */
} else {
return N * Factoriel(N – 1); /* Appel recursif */
}
}
Application 1:
Ecrire un programme qui permute deux entiers saisis
au clavier. Utiliser une fonction permuter avec un
passage par valeur et par adresse
Application 1:
Application 1:
Application 2:
Ecrire un programme qui retourne le maximum, le minimum, la somme et la moyenne d’un
tableau d’entiers.
Utiliser 3 fonctions:
➢Maximum: pour retourner le max d’un tableau
➢Minimum: pour retourner le min d’un tab
➢Somme: pour calculer les éléments d’un tab
Application 3:
Ecrire un programme qui permet de compter le nombre d’occurrences
d’un entier donné dans un tableau donné.
Utiliser une fonction:
➢Nb_Occurences: pour retourner le nombre d’occurrences d’un élément
dans un tab
Application 4:
Ecrire un programme qui lit un tableau et l'affiche dans l'ordre inverse
Utiliser une fonction:
➢Remplir_Tab(): pour remplir un tab donné.
➢Afficher_Tab(): pour afficher un tab donné.
➢Inverser_Tab: pour inverser un tab donné.
Application 5:
Ecrire un programme permettant de fusionner deux tableaux tab1 et tab2,
contenant respectivement N1 et N2 entiers.
Utiliser les fonctions :
➢Remplir_Tab(): pour remplir un tab donné.
➢Afficher_Tab(): pour afficher un tab donné.
➢Fusion_Tab() : pour fusionner les éléments de tab1 et tab2 dans un tableau
fusion.
LES CHAÎNES DE CARACTÈRES
LES CHAÎNES DE CARACTÈRES (1)
❑Définition: Une chaîne de caractères est un tableau à une
dimension de caractères. Il existe des notations particulières et
une bonne quantité de fonctions prédéfinies pour le traitement
de tableaux de caractères.
❑Déclaration et mémorisation:
✓Lors de la déclaration, il faut indiquer l'espace à réserver en
mémoire pour le stockage de la chaîne. (char nom[30]; )
✓La représentation interne d'une chaîne de caractères est terminée par
le symbole '\0'. Ainsi, pour un texte de n caractères, il faut prévoir
n+1 octets (taille de char est 1 octet).
✓Le nom d'une chaîne représente l'adresse du premier caractère de la
chaîne.
✓utilisation du format %s pour les chaines de caractères.
✓Comme le nom d'une chaîne de caractères est le représentant de
l'adresse du premier caractère de la chaîne, il ne doit pas être
précédé de l'opérateur adresse '&'.
LES CHAÎNES DE CARACTÈRES (2)
LES CHAÎNES DE CARACTÈRES (3)
Initialisation de chaînes de caractères:
❑ En général, les tableaux sont initialisés par l'indication de la liste des éléments du tableau entre accolades:
✓ char nom[8] = {'m','o','h','a','m','e','d','\0'}; obligatoire lors de l’initialisation avec une liste
ou bien
✓ char nom[] = {'m','o','h','a','m','e','d','\0'};
❑ Pour le cas spécial des tableaux de caractères, il est possible d’utiliser une initialisation plus confortable en
indiquant simplement une chaîne de caractère constante: char nom[] = "mohamed";
❑ Lors de l'initialisation par [], il y a réservation automatiquement du nombre d'octets nécessaires pour la
chaîne, c.-à-d.: le nombre de caractères + 1. Il est aussi possible d’indiquer explicitement le nombre d'octets
à réserver, si celui-ci est supérieur ou égal à la longueur de la chaîne d'initialisation.
LES CHAÎNES DE CARACTÈRES (4)
Exercice: Déclaration correcte? Nb octets?
1. char a[] = "un\ndeux\ntrois\n"; => oui, 15 octets (\n est un caractère aussi)
=>incorrecte, correction: char b[14] = "un deux trois"; ou mieux: char b[] = "un deux
2. char b[12] = "un deux trois"; trois";
4. char d[10] = 'x'; => Correction: char d[10] = {'x', '\0'} ou mieux: char d[10] = "x"; Espace: 2 octets
=> Déclaration incorrecte, Dans une liste de caractères, il faut aussi indiquer le symbole de fin
7. char h[4] = {'a', 'b', 'c'}; de chaîne, correction: char h[4] = {'a', 'b', 'c', '\0'}; Espace: 4 octets
LES CHAÎNES DE CARACTÈRES (5)
L'accès à un élément d'une chaîne de caractères peut se faire de la même façon que l'accès à un élément
d'un tableau.
LES CHAÎNES DE CARACTÈRES (5)
Les bibliothèques de fonctions de C contiennent une série de fonctions spéciales pour le traitement de chaînes de
caractères (stdio, string, stdlib, ctype)
➢ gets: permet de lire une ligne de caractères et la copie à l'adresse indiquée. Le retour à la ligne final est
remplacé par le symbole de fin de chaîne '\0'.
➢ Syntaxe: gets( char * )
LES CHAÎNES DE CARACTÈRES (6)
❑ Exemples avec puts et gets:
LES CHAÎNES DE CARACTÈRES (7)
❑ Les fonctions de string.h: La bibliothèque fournit une multitude de fonctions pratiques pour le traitement de
chaînes de caractères.
Ecrire un programme qui lit une chaine de caractères, et affiche le nombre d'occurrences
d'un caractère lu au clavier dans la chaine.
ch: bonjour bonjour
caract: o
le nombre d'occurrences de la lettre o est 4
PS: Utiliser deux fonctions:
1/saisir_caractere: pour saisir le caractère à chercher
2/nb_occurences: pour retourner le nombre d’occurrences d’un caractère dans une chaine
EXERCICES
EXERCICE 2:
Ecrire un programme qui lit une chaine de caractère et l'affiche dans l'ordre inverse, après avoir
permuté les caractères.
Exemple:
bonjour
ruojnob
PS: Utiliser une fonction:
1/Inverser_Chaine: pour inverser la chaine de caractères
EXERCICES
EXERCICE 3:
Ecrire un programme qui lit une chaine de caractères, et supprime toutes les occurrences d’un
caractère, lu au clavier, de la chaine
ch: bonjour bonjour
caract: o
bnjur bnjur
Utiliser 2 fonctions:
✓ saisir_caractere: pour saisir le caractère à supprimer de la chaine de caractères et le retourne.
✓ Supprimer_Caractere: pour supprimer toutes les occurrences d’un caractère, introduit en
paramètre, de la chaine.