Vous êtes sur la page 1sur 39

Ecole Nationale des Ingénieurs de Sousse

ENISO

Fascicule
TP Langage C

Préparé par :
Mme Saoussen Ben Jabra

AU 2010/2011
TRAVAUX PRATIQUES N°1
Introduction au langage C , Types de base, Opérateurs,
Expressions du langage C et Les entrées-sorties
1-Introduction
Turbo C n’est pas qu’un langage de programmation, mais aussi un système complet de
développement de programmes. Il offre tous les outils permettant d’écrire, d’éditer, de compiler, de lier
et de déboguer vos programmes.
L’E.D.I possède 3 éléments principaux :
• La barre de menu (en haut de l’écran)
• La zone de travail (au milieu de l’écran).
• La ligne d’état (en bas de l’écran)
La barre des menus est votre moyen principal d’accès aux commandes des différents menus.
1-Chaque étudiant doit créer un répertoire de travail (Nom + Prénom + TPX).
2-Se familiariser avec l’environnement C/C++ :
• Barre de menu (File, Edit, Search, View, Project,...).
• Barre d’outils.
• Barre d’état.

2- Histoire de C + Avantages
¾ Le langage C a été créé dans les années 1970 par Dennis Rithcie.
¾ Un programme en langage C est une suite d'instructions.
¾ Un programme en C est un ensemble de fonctions, parmi ces fonctions, il existe une fonction de
démarrage dont le nom est "main".
Le grand succès du langage C s'explique par les avantages suivants; C est un langage:
™ Universel
C n'est pas orienté vers un domaine d'applications spéciales, comme par exemple FORTRAN
(applications scientifiques et techniques) ou COBOL (applications commerciales ou traitant de grandes
quantités de données).
™ Compact
C est basé sur un noyau de fonctions et d'opérateurs limités, qui permet la formulation
d'expressions simples, mais efficaces.
™ Moderne
C est un langage structuré, déclaratif et récursif; il offre des structures de contrôle et de
déclaration comparables à celles des autres grands langages de ce temps (FORTRAN, ALGOL68,
PASCAL).
™ Rapide
Comme C permet d'utiliser des expressions et des opérateurs qui sont très proches du langage
machine, il est possible de développer des programmes efficients et rapides.
™ Extensible
C ne se compose pas seulement de la fonction standard; le langage est animé par des
bibliothèques de fonctions privées ou livrées par de nombreuses maisons de développement.
3- Structure d’un programme en C
main()
{ < Déclarations >
< Instructions >
return 0 ;
}

Ben Jabra Saoussen Page : 1


Remarque :
Chaque programme en C doit renfermer une fonction du nom de "main"(Fonction principale de
chaque programme C).
Exemple :
main()
{
printf("Bonjour");
return 0 ;
}

4. Les bibliothèques de fonctions prédéfinies


Utilisation des bibliothèques de fonctions
La pratique en C exige l'utilisation de bibliothèques de fonctions. Ces bibliothèques sont
disponibles dans leur forme précompilées (extension: .LIB). Pour pouvoir les utiliser, il faut inclure
des fichiers en-tête (extension .h) dans nos programmes. Ces fichiers contiennent des 'prototypes' des
fonctions définies dans les bibliothèques et créent un lien entre les fonctions précompilées et nos
programmes.
L'instruction #include insère les fichiers en-tête indiqués comme arguments dans le texte du
programme au moment de la compilation.
Identification des fichiers
Lors de la programmation en C, nous travaillons donc avec différents types de fichiers qui sont
identifiés par leurs extensions:
*.C : fichiers source
*.OBJ : fichiers compilés (versions objet)
*.EXE : fichiers compilés et liés (versions exécutables)
Exemple
Nous avons écrit un programme qui fait appel à des fonctions mathématiques et des fonctions
graphiques prédéfinies. Pour pouvoir utiliser ces fonctions, le programme a besoin des bibliothèques:
MATHS.LIB
GRAPHICS.LIB
Nous devons donc inclure les fichiers en-tête correspondants dans le code source de notre programme à
l'aide des instructions:
#include <math.h>
#include <graphics.h>
Après la compilation, les fonctions précompilées des bibliothèques seront ajoutées à notre programme
pour former une version exécutable du programme (voir schéma).

5- Fichiers « include »
™ Se trouvent dans un répertoire nommé "include",
™ Ils possèdent l'extension h,
™ Ils renferment les déclarations des fonctions du système.
Exemple:
# include<stdio.h> (Fichiers d’entrée, sortie).
#include<math.h> (Fichiers Mathématiques).
#include <graph.h> (Fonctions Graphiques).
™ Le programme précédant devient :
#include<stdio.h>
main()
{
printf("Bonjour");
return 0 ;
}

Ben Jabra Saoussen Page : 2


6- Les identificateurs
Les noms des fonctions et des variables en C sont composés d'une suite de lettres et de chiffres. Le
premier caractère doit être une lettre. Le symbole '_' est aussi considéré comme une lettre.
™ L'ensemble des symboles utilisables est donc: {0,1,2,...,9,A,B,...,Z,_,a,b,...,z}
™ Le premier caractère doit être une lettre (ou le symbole '_')
™ C distingue les majuscules et les minuscules, ainsi: 'Nom_de_variable' est différent de
'nom_de_variable'
Remarque: Il est déconseillé d'utiliser le symbole '_' comme premier caractère pour un identificateur,
car il est souvent employé pour définir les variables globales de l'environnement C.
Exemples
Identificateurs corrects Identificateurs incorrects
nom1 1nom
nom_2 nom.2
_nom_3 -nom-3
Nom_de_variable Nom de variable
deuxieme_choix deuxième_choix
mot_francais mot_français

7-Les commentaires
Un commentaire commence toujours par les deux symboles '/*' et se termine par les symboles '*/'. Il est
interdit d'utiliser des commentaires imbriqués.
Exemples
/* Ceci est un commentaire correct */
/* Ceci est /* évidemment */ défendu */

7-Les types de bases


7-1-Le type entier ( int )
Ils existent 3 types différents:

Type Occupation mémoire Plage de valeur


short int ou short 2 ou 4 octets -32768 à 32767
int 2 ou 4 octets -32768 à 32767
long int 4 octets -2147483647 à 2147483648
7-2- Le type flottant ( float )
Permet de représenter de manière approchée une partie des nombres réels. Ils existent 3 types
différents:
Types Occupation mémoire Plage de valeur
float 4 octets 3.4*10-38 à 3.4*1038
double 8 octets 1.7*10-308 à 1.7*10308
long double 10 octets 3.4*10-4932 à 3.4*104932
7-3- Le type caractère ( char )
¾ Il est utilisé pour représenter un caractère.
¾ Un objet de type caractère contiendra le code binaire de n’importe quel caractère utilisé sur la
machine.
¾ Un objet de type caractère est pour C un entier occupant un octet.

Ben Jabra Saoussen Page : 3


8- Les variables
Une variable :
¾ possède un nom,
¾ possède un type,
¾ possède un contenu,
¾ est modifiable,
¾ est rangée en memoire à partir d'une certaine adresse.
Déclaration et initialisation des variables
Type NomVar1, NomVar2………………., NomVarN ;
Type NomVar1= val 1, NomVar2= Val 2………………., NomVar N= ValN ;
Exemples :
™ char c ;
™ int X, Y ;
™ float Z = 4.5 ;
™ double W ;
™ int t_presse

9- Les opérateurs standard


Affectation en C <NomVariable> = <Expression>;
Exemples d'affectations
Reprenons les exemples du cours d'algorithmique pour illustrer différents types d'affectations:
™ L'affectation avec des valeurs constantes
Affectation Type de la constante
LONG = 141; (const. entière)
PI = 3.1415926; (const. réelle)
NATION = 'L'; (caractère const.)

™ L'affectation avec des valeurs de variables


• VALEUR = X1A;
• LETTRE = COURRIER;
™ L'affectation avec des valeurs d'expressions
• AIRE = PI*pow(R,2);
• MOYENNE = (A+B)/2;
• UN=pow(sin(X),2)+pow(cos(X),2);
• RES = 45+5*X;
• PLUSGRAND = (X>Y);
Observations
Les opérateurs et les fonctions arithmétiques utilisées dans les expressions seront introduites
dans la suite du TP. Observons déjà que:
™ il n'existe pas de fonction standard en C pour calculer le carré d'une valeur; on peut se référer à
la fonction plus générale pow(x,y) qui calcule xy.
™ le test d'égalité en C se formule avec deux signes d'égalité ==, l'affectation avec un seul = .

10-Les fonctions arithmétiques standard


Les fonctions suivantes sont prédéfinies dans la bibliothèque standard <math>. Pour pouvoir
les utiliser, le programme doit contenir la ligne: #include <math.h>
Type des données : Les arguments et les résultats des fonctions arithmétiques sont du type double.

Ben Jabra Saoussen Page : 4


Fonctions arithmétiques
COMMANDE C EXPLICATION
exp(X) fonction exponentielle
log(X) logarithme naturel
log10(X) logarithme à base 10
pow(X,Y) X exposant Y
sqrt(X) racine carrée de X
fabs(X) valeur absolue de X
floor(X) arrondir en moins
fmod(X,Y) reste rationnel de X/Y (même signe que X) pour X différent de 0
sin(X) cos(X) tan(X) sinus, cosinus, tangente de X
asin(X) acos(X) atan(X) arcsin(X), arccos(X), arctan(X)
sinh(X) cosh(X) tanh(X) sinus, cosinus, tangente hyperboliques de X
Remarque avancée
La liste des fonctions ne cite que les fonctions les plus courantes. Pour la liste complète et
les constantes prédéfinies voir <math.h>.

11-Les opérateurs
11-1- Les opérateurs connus
Avant de nous lancer dans les 'spécialités' du langage C, retrouvons d'abord les opérateurs
correspondant à ceux que nous connaissons déjà en langage descriptif et en Pascal.

Opérateurs arithmétiques Opérateurs logiques Opérateurs de comparaison


+ addition && et logique (and) == égal à
- soustraction || ou logique (or) != différent de
négation logique <, <=, plus petit
* multiplication !
(not) >, >= que, ...
division (entière et
/
rationnelle!)
modulo (reste d'une
%
div. entière)

Opérations logiques
Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:
™ la valeur 1 correspond à la valeur booléenne vrai
™ la valeur 0 correspond à la valeur booléenne faux
Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro comme faux:
™ 32 && 2.3 → 1
™ !65.34 → 0
™ 0||!(32 > 12) → 0
11-2- Les opérateurs particuliers de C
11-2-1- Les opérateurs d'affectation
En pratique, nous retrouvons souvent des affectations comme: i=i+2
En C, nous utiliserons plutôt la formulation plus compacte: i += 2
L'opérateur += est un opérateur d'affectation.
Pour la plupart des expressions de la forme:
expr1 = (expr1) op (expr2)
il existe une formulation équivalente qui utilise un opérateur d'affectation:
expr1 op= expr2

Ben Jabra Saoussen Page : 5


+= ajouter à
-= diminuer de
*= multiplier par
/= diviser par
%= modulo

11-2-2- Opérateurs d'incrémentation et de décrémentation


Les affectations les plus fréquentes sont du type:
I = I + 1 et I = I - 1
En C, nous disposons de deux opérateurs inhabituels pour ces affectations:
™ I++ ou ++I pour l'incrémentation (augmentation d'une unité)
™ I-- ou –I pour la décrémentation (diminution d'une unité)
Les opérateurs ++ et -- sont employés dans les cas suivants:
™ Incrémenter/décrémenter une variable (p.ex: dans une boucle). Dans ce cas il n'y a pas de
différence entre la notation préfixe (++I --I) et la notation postfixe (I++ I--).
™ Incrémenter/décrémenter une variable et en même temps affecter sa valeur à une autre variable.
Dans ce cas, nous devons choisir entre la notation préfixe et postfixe:
• X = I++ passe d'abord la valeur de I à X et incrémente après
• X = I-- passe d'abord la valeur de I à X et décrémente après
• X = ++I incrémente d'abord et passe la valeur incrémentée à X
• X = --I décrémente d'abord et passe la valeur décrémentée à X
Exemple
Supposons que la valeur de N est égal à 5:
• Incrém. Postfixe : X = N++; Résultat: N=6 et X=5
• Incrém. préfixe: X = ++N; Résultat: N=6 et X=6

12-Les priorités des opérateurs


Exemple
Supposons pour l'instruction suivante: A=5, B=10, C=1
X = 2*A+3*B+4*C;
L'ordinateur évalue d'abord les multiplications:
2*A ==> 10 , 3*B ==> 30 , 4*C ==> 4
Ensuite, il fait l'addition des trois résultats obtenus:
10+30+4 ==> 44
A la fin, il affecte le résultat général à la variable:
X = 44
Priorité d'un opérateur
On dit alors que la multiplication a la priorité sur l'addition et que la multiplication et l'addition
ont la priorité sur l'affectation.
Si nous voulons forcer l'ordinateur à commencer par un opérateur avec une priorité plus faible,
nous devons (comme en mathématiques) entourer le terme en question par des parenthèses.
Exemple
Dans l'instruction:
X = 2*(A+3)*B+4*C;
L’ordinateur évalue d'abord l'expression entre parenthèses, ensuite les multiplications, ensuite l'addition
et enfin l'affectation. (En reprenant les valeurs de l'exemple ci-dessus, le résultat sera 164)
Entre les opérateurs que nous connaissons jusqu'ici, nous pouvons distinguer les classes de priorités
suivantes:
Ben Jabra Saoussen Page : 6
Classes de priorités
Priorité 1 (la plus forte): ( )
Priorité 2: ! ++ --
Priorité 3: * / %
Priorité 4: + -
Priorité 5: < <= > >=
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
= += -= *=
Priorité 9 (la plus faible): /= %=

Evaluation d'opérateurs de la même classe


™ Dans chaque classe de priorité, les opérateurs ont la même priorité. Si nous avons une suite
d'opérateurs binaires de la même classe, l'évaluation se fait en passant de la gauche vers la
droite dans l'expression.
™ Pour les opérateurs unaires (!,++,--) et pour les opérateurs d'affectation (=,+=,-
=,*=,/=,%=), l'évaluation se fait de droite à gauche dans l'expression.
Exemples
2-Pour A=3 et B=4, l'expression A *= B += 5 sera évaluée comme suit:

Pour A=1 et B=4, l'expression !--A==++!B sera évaluée comme suit:

Les parenthèses
Les parenthèses sont seulement nécessaires si nous devons forcer la priorité, mais elles sont
aussi permises si elles ne changent rien à la priorité. En cas de parenthèses imbriquées, l'évaluation se
fait de l'intérieur vers l'extérieur.
Exemple
En supposant à nouveau que A=5, B=10, C=1 l'expression suivante s'évaluera à 134:
X = ((2*A+3)*B+4)*C
Observez la priorité des opérateurs d'affectation :
X *= Y + 1 <=> X = X * (Y + 1)
X *= Y + 1 n'équivaut PAS à X = X * Y + 1

Ben Jabra Saoussen Page : 7


13-Écriture formatée de données : printf()
La fonction printf est utilisée pour transférer du texte, des valeurs de variables ou des résultats
d'expressions vers le fichier de sortie standard stdout (par défaut l'écran).
Ecriture formatée en C :
printf ("<format>", <Expr1>, <Expr2>, ... )
™ "<format>" : format de représentation
™ <Expr1>,....... : variables et expressions dont les valeurs sont à représenter
La partie "<format>" est en fait une chaîne de caractères qui peut contenir:
™ du texte
™ des séquences d'échappement
™ des spécificateurs de format
™ Les spécificateurs de format indiquent la manière dont les valeurs des expressions <Expr1..N>
sont imprimées.
™ La partie "<format>" contient exactement un spécificateur de format pour chaque expression
<Expr1..N>.
™ Les spécificateurs de format commencent toujours par le symbole % et se terminent par un ou
deux caractères qui indiquent le format d'impression.
Exemple 1 : (Le tester à la machine)
La suite d'instructions:
int A = 1234;
int B = 567;
printf("%d fois %d est %ld\n", A, B, (long)A*B);
va afficher sur l'écran:
1234 fois 567 est 699678
Les arguments de printf sont :
™ la partie format : "%d fois %d est %ld"
™ la variable : A
™ la variable : B
™ l'expression : (long)A*B
er
Le 1 spécificateur (%d) indique que la valeur de A sera imprimée comme entier relatif : 1234
Le 2ème spécificateur (%d) indique que la valeur de B sera imprimée comme entier relatif : 567
Le 2ème spécificateur (%ld) indique que la valeur de (long)A*B sera imprimée comme entier relatif
long : 699678
Exemple 2 (Le tester à la machine)
La suite d'instructions:
char B = 'A';
printf("Le caractère %c à le code %i !\n", B, B);
va afficher sur l'écran: Le caractère A à le code 65 !
Spécificateurs de format pour printf

SYMBOLE IMPRESSION COMME

%d ou %i entier relatif
%u entier naturel (unsigned)
%o entier exprimé en octal
%x entier exprimé en hexadécimal
%c caractère
%f rationnel en notation décimale
%e rationnel en notation scientifique
%s chaîne de caractères

Ben Jabra Saoussen Page : 8


Exercice 1
Soit le programme suivant :
#include<stdio.h>
void main()
{
printf("Ecole nationale des ingénieurs de Sousse") ;
}
1- Saisir ce programme source avec l’éditeur de texte.
2- Sauvegarder ce programme source sous le nom TP1_EX1 dans votre répertoire.
3- Manipuler ce programme source en utilisant les commandes de la barre de menu.
• Recopier 2 fois la ligne printf.
• Effacer 2 fois la ligne printf.
• Ajouter dans le programme source le commentaire suivant :
/* Instruction d'affichage d'un message sur l'écran*/
4- Compiler et exécuter ce programme :
• En utilisant la barre de menu.
• Avec le clavier.
5- Conclure.
6-Modifier le programme comme indiqué, sauvegarder, compiler et exécuter.
#include<stdio.h>
void main()
{
printf("Ecole nationale des ingénieurs de Sousse\n") ;
printf("Département Informatique") ;
}
7-Déduire le rôle de la séquence \n.

14-Lecture formatée de données : scanf()


La fonction scanf est la fonction symétrique à printf; elle nous offre pratiquement les mêmes
conversions que printf, mais en sens inverse.
Lecture formatée en C
scanf ("<format>", <AdrVar1>, <AdrVar2>, ...)
™ "<format>" : format de lecture des données
™ <AdrVar1>,... : adresses des variables auxquelles les données seront attribuées
• La fonction scanf reçoit ses données à partir du fichier d'entrée standard stdin (par défaut le
clavier).
• La chaîne de format détermine comment les données reçues doivent être interprétées.
• Les données reçues correctement sont mémorisées successivement aux adresses indiquées par
<AdrVar1>,... .
• L'adresse d'une variable est indiquée par le nom de la variable précédé du signe &.
Exemple
La suite d'instructions:
int JOUR, MOIS, ANNEE;
scanf("%d %d %d", &JOUR, &MOIS, &ANNEE);
Lit trois entiers relatifs, séparés par des espaces, tabulations ou interlignes. Les valeurs sont attribuées
respectivement aux trois variables JOUR, MOIS et ANNEE.
• scanf retourne comme résultat le nombre de données correctement reçues (type int).

Ben Jabra Saoussen Page : 9


Spécificateurs de format pour scanf

SYMBOLE IMPRESSION COMME

%d ou %i entier relatif
%u entier naturel (unsigned)
%o entier exprimé en octal
%b entier exprimé en hexadécimal
%c caractère
%f ou %e rationnel en notation décimale ou exponentielle (scientifique)
%s chaîne de caractères
1. Les signes d'espacement
Lors de l'entrée des données, une suite de signes d'espacement (espaces, tabulateurs, interlignes) est
évaluée comme un seul espace. Dans la chaîne de format, les symboles \t, \n, \r ont le même effet
qu'un simple espace.
Exemple
Pour la suite d'instructions
int JOUR, MOIS, ANNEE;
scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);
les entrées suivantes sont correctes et équivalentes:
12 4 1980
ou
12 004 1980
ou
12
4
1980
2. Formats 'spéciaux'
Si la chaîne de format contient aussi d'autres caractères que des signes d'espacement, alors ces
symboles doivent être introduits exactement dans l'ordre indiqué.
Exemple
La suite d'instructions
int JOUR, MOIS, ANNEE;
scanf("%i/%i/%i", &JOUR, &MOIS, &ANNEE);
accepte les entrées: rejette les entrées:
12/4/1980 12 4 1980
12/04/01980 12 /4 /1980
Exercice 2
Soit un programme C contenant les instructions suivantes :
#include<stdio.h>
void main()
{
int i, j, k ;
………..
………..
}
1- Ecrire un programme C qui permet de :
™ saisir des valeurs numériques pour i, j, et k.
™ D’afficher chacune des expressions suivantes en utilisant des messages, des codes formats et les
caractères de contrôles :
Ben Jabra Saoussen Page : 10
♦ i, j et k sont des entiers,
♦ i est un entier décimal, j un entier octal et k un entier hexadécimal,
♦ i et j sont des entiers hexadécimaux et k un entier octal,
♦ (i+j), (i-k),
♦ sqrt(i + j) , abs(i-k)
2- Saisir ce programme source avec l’éditeur de texte.
3- Sauvegarder ce programme source sous le nom TP1_EX2 dans votre répertoire.
4- Compiler le programme TP1_EX2 pour effectuer la correction
5- Exécuter ce programme.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… …………………………………………………….

Exercice 3
Les opérateurs d’incrémentation sont très utiles et très puissants ; ils peuvent être combinés avec
l’instruction d’affectation. Je vous propose de les découvrir au travers du programme suivant :
#include<stdio.h>
void main()
{
int X,Y,RES;
X=Y=6;
RES = X+Y;
printf("X = %i \t Y = %i \t RES = %i \n", X , Y, RES);
RES = X++ + Y;
printf("X = %i \t Y = %i \t RES = %i \n", X , Y, RES);
RES = ++X + Y;
printf("X = %i \t Y = %i \t RES = %i \n", X , Y, RES);
RES = X-- + Y;
printf("X = %i \t Y = %i \t RES = %i \n", X , Y, RES);
RES = --X + Y;
printf("X = %i \t Y = %i \t RES = %i \n", X , Y, RES);
RES = X+Y;
printf("X = %i \t Y = %i \t RES = %i \n", X , Y, RES);
}

1- Essayer de deviner les résultats, avant d’exécuter ce programme.


2- Préciser dans chacun des cas, s’il s’agit d’une pré ou d’une post-incrémentation ou -décémentation
3- Saisir ce programme source avec l’éditeur de texte.
4- Sauvegarder ce programme source sous le nom TP1_EX2 dans votre répertoire.
5- Compiler le programme TP1_EX2 pour effectuer la correction
6- Exécuter ce programme.
7- Conclure.

Ben Jabra Saoussen Page : 11


Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
Exercice 4
1- Ecrire un programme C qui permute et affiche les valeurs de trois variables A, B et C de type entier
qui sont entrées au clavier.
2-Saisir ce programme source avec l’éditeur de texte.
3- Sauvegarder ce programme source sous le nom TP1_EX4 dans votre répertoire.
4- compiler et exécuter ce programme.
Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Exercice 5
1-Essayez le programme suivant et modifiez-le de façon à ce qu'il affiche:
™ AB,
™ l'hypoténuse d'un triangle rectangle de côtés A et B,
™ la tangente de A en n'utilisant que les fonctions sin et cos,
™ la valeur arrondie (en moins) de A/B,
™ la valeur arrondie (en moins) à trois positions derrière la virgule de A/B.
2-Saisir ce programme source avec l’éditeur de texte.
3- Sauvegarder ce programme source sous le nom TP1_EX5 dans votre répertoire.
4- compiler et exécuter ce programme.

Ben Jabra Saoussen Page : 12


TRAVAUX PRATIQUES N°2
Les structures alternatives
Résumé
1-if-else
if (<expression>)
< Bloc d’instructions1> ;
else
<Bloc d’instructions 2> ;

2- if sans else
if (<expression>)
{
< Bloc d’instructions1> ;
}
3- Test Imbriqués
if (<expr 1>)
<Bloc 1> ;
else
if (<expr 2>)
<Bloc 2> ;
else
.
.
else
if (<expr N>)
<Bloc N> ;
else
< Bloc N+1> ;

4- Les opérateurs conditionnels


<expr 1> ? <expr 2> : <expr 3> ;
5- Test multiples (switch)
switch (<expression>)
{
case constante-1 : [<instruction(s)> ;]
case constante-1 : [<instruction(s)> ;]
.
.
case constante-N : [<instruction(s)> ;]
[ défault : [<intruction(s)> ;]]
}

Ben Jabra Saoussen Page : 13


Exercice 1
Soit le programme C suivant :
#include<stdo.h>
void Main()
{
float a,b,x
/*Résolution d’une équation du premier degré*/
print (Introduire la valeur de a :");
scanf ("%f" ,a);
printf ("Introduire la valeur de b :");
scanf ("%f" ,b);
if (a = 0)
if (b= =0)
prntf ("Infinité de solution");
else
printf ("Pas de solution");
else
{
x = =-b/a
printf ("La solution = %3f\n ; &x);
}
1-Saisir ce programme source avec l’éditeur de texte.
2- Sauvegarder ce programme source sous le nom TP2_EX1 dans votre répertoire.
3-Compiler le programme TP2_EX1 pour effectuer la correction.
4-Exécuter ce programme et introduire des valeurs.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………

Exercice 2
On considère 3 variables entières positives x, y et z .
1-Ecrire un programme permettant de :
a- de déclarer l’entier positif x.
b- de saisir un entier x.
c- d’insérer le commentaire.
d- si x est pair afficher un message signalant que x est pair sous la forme suivante " x est pair"
2- Sauvegarder ce programme source sous le nom TP2_EX2 dans votre répertoire.
3-Compiler le programme TP2_EX2 pour effectuer la correction.
4-Exécuter ce programme et introduire des valeurs.
5- Modifier ce programme pour qu’il puisse afficher, dans le cas ou x n’est pas pair, un massage
signalant que x est impair.
Ben Jabra Saoussen Page : 14
6- Enregistrer les modifications, compiler et exécuter le programme.
7- Ajouter au programme les déclarations des entiers positif x et y.
8- Saisir les valeur de y et z.
9- Insérer, après la dernière instruction, le commentaire suivant : " Partie 2 : Parité de deux entiers".
10- Ajouter l’instruction permettant de dire si x et y sont de même parité.
11- Enregistrer les modifications, compiler et exécuter le programme.
12- Insérer, après la dernière instruction, le commentaire suivant : " Partie 3 : une des trois variables est
paire".
13- Ecrire l’expression ainsi que l’instruction nécessaire permettant de dire l’une au moins des trois
variables est paire.
14- Enregistrer les modifications, compiler et exécuter le programme.
15- Insérer, après la dernière instruction, le commentaire suivant : " Partie 4 : Parité entre trois
variables".
16- Ecrire l’expression ainsi que l’instruction nécessaire permettant de dire que deux d’entre elles au
moins ont la même parité.
17- Enregistrer les modifications, compiler et exécuter le programme.
18- Insérer, après la dernière instruction, le commentaire suivant : " Partie 5 : deux variables,
exactement, parmi les trois sont de même parité".
19- Ecrire l’expression ainsi que l’instruction nécessaire permettant de dire qu’exactement deux sur les
trois sont paires.
20- Enregistrer les modifications, compiler et exécuter le programme.
21- Le programme est ainsi formé de 5 parties, on désire activer à chaque exécution une seule de ces
parties, suivant le choix de l’utilisateur. Ajouter les modifications nécessaires pour avoir ce résultat.

Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. ……………………………………………………
…………………………………………………… …………………………………………………….
……………………………………………………. ……………………………………………………
…………………………………………………… …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
…………………………………………………… ……………………………………………………
Ben Jabra Saoussen Page : 15
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………

Exercice 3
Ecrire un programme C qui permet de lire un entier N (On suppose qu’il est de 4 chiffres) et
déterminer :
¾ le plus grand chiffre et
¾ la position du plus grand chiffre.
Remarque :
¾ on suppose que les chiffres de N sont différents
¾ Les positions des chiffres sont numérotées de la gauche vers la droite en commençant par 1.
Exemple :
Donner l’entier N : 1925
Résultat
Le plus grand chiffre est 9 et sa position = 2
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………

Ben Jabra Saoussen Page : 16


Exercice 4
1- Ecrire un programme qui permet de saisir 2 nombres flottants et un caractère et qui fournit un
résultat correspondant à l’une des 4 opérations appliquées à ses deux réels, en fonction de la valeur du
dernier, à savoir :
♦ Addition pour le caractère +,
♦ Soustraction pour -,
♦ Multiplication pour *,
♦ Division /
Remarque :
™ Tout autre caractère que l’un des 4 cités sera erroné.
™ On tiendra compte des risques de division par zéro.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… …………………………………………………….
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………
……………………………………………………. …………………………………………………….
…………………………………………………… ……………………………………………………

Ben Jabra Saoussen Page : 17


TRAVAUX PRATIQUES N°3
Les structures répétitives
Résumé
1-while
while(<expression>)
{
< Bloc d’instructions> ;
}
2- for
for(<expression-I>) ; <expression-C> ; <expression-R>)
{
< Bloc d’instructions> ;
}
¾ Est équivalente à :
<expression-I> ;
while(<expression-C>)
{
< Bloc d’instructions> ;
<expression-R> ;
}
3- do-while
do
{
< Bloc d’instructions1> ;
} while (<expression>) ;

4- Choix de la structure répétitive

• Si le bloc d'instructions ne doit pas être exécuté si la condition est fausse, alors utilisez while ou
for.
• Si le bloc d'instructions doit être exécuté au moins une fois, alors utilisez do - while.
• Si le nombre d'exécutions du bloc d'instructions dépend d'une ou de plusieurs variables qui sont
modifiées à la fin de chaque répétition, alors utilisez for.
• Le choix entre for et while n'est souvent qu'une question de préférence ou d'habitudes.

Ben Jabra Saoussen Page : 18


Exercice 1
#include<stdio.h>
void main()
{ int n,d;
printf("Donner un entier :");
scanf("%d",&n);
d=2;
while((d*d)<=n)
if(n%d==0)
{ printf("%d\t",d);
n=n/d;
}
else
d++;
printf("%d",n);
}
1- Saisir ce programme source avec l’éditeur de texte.
2- Sauvegarder ce programme source dans votre répertoire.
3- Compiler le programme pour effectuer la correction
4- Exécuter ce programme pour les 2 cas suivants : a) n = 200 b) n= 153
5- Quelle est la fonction de ce programme.
6- Remplacer la boucle « while » par « do….while » puis par « for »
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
Exercice 2
Le PPCM (Plus Petit Commun Multiplicateur) de deux entiers a et b est le plus petit entier m
tel que m est divisible par a et b. Par exemple PPCM (4 ,3) = 12.
Ecrire un programme C qui permet de :
¾ saisir deux entiers a et b ( a>0, b>0 et a>b).
¾ calcule et affiche le PPCM de a et b.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 19


Exercice 3
On se propose de chercher parmi les entiers de l’intervalle [ a , b ] ( 2 ≤ a ≤ b ≤ 10 ) celui qui
représente le plus grand diviseur d’ un entier donné N ( 20 < N < 50 )
Ecrire un programme C permettant de chercher puis afficher cet entier.
N.B : a et b sont deux entiers saisis à partir du clavier,
N est un entier saisi à partir du clavier.
Exemple :
Si a = 2 et b = 9
N = 40
Résultat : le plus grand diviseur de 40 de [ 2 , 9 ] = 8
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
Exercice 4
On veut saisir des réels représentant les moyennes générales des N étudiants d’une classe, sachant
que chaque étudiant a une seule moyenne générale. Le nombre des étudiants est saisi à partir du clavier
(5<=N<=20). Ecrire un programme C permettant de faire les traitements suivants :
¾ Saisir les différentes moyennes des N étudiants (une moyenne doit être comprise entre 0 et 20).
¾ Déterminer le nombre d’étudiants admis : un étudiant est admis si sa moyenne est supérieure
ou égale à 10.
¾ Déterminer le nombre d’étudiants qui ont une mention : un étudiant est mentionné si sa
moyenne est supérieure ou égale à 12.
¾ Déterminer le nombre d’étudiants éliminés : un étudiant est éliminé si sa moyenne est
inférieure à 6.
¾ Calculer la moyenne de la classe.
¾ Calculer la moyenne des moyennes générales qui sont supérieures ou égales à 10.
¾ Déterminer la moyenne générale la plus forte.
¾ Déterminer la moyenne générale la plus faible.
¾ D’afficher les résultats.

Ben Jabra Saoussen Page : 20


Notes Personnelles
…………………………………………………………………………………………………………….
…………………………………………………………………………………………………………….……………
………………………………………………………………………………………….………………………………
……………………………………………………………………….…………………………………………………
…………………………………………………….……………………………………………………………………
………………………………….………………………………………………………………………………………
……………….…………………………………………………………………………………………………………
………………………………………………………………………………………………………….………………
……………………………………………………………………………………….…………………………………
…………………………………………………………………….……………………………………………………
………………………………………………….………………………………………………………………………
……………………………….…………………………………………………………………………………………
…………….……………………………………………………………………………………………………………
……………………………………………………………………………………………………….…………………
…………………………………………………………………………………….……………………………………
………………………………………………………………….………………………………………………………
……………………………………………….…………………………………………………………………………
…………………………….
Exercice 5
On considère deux suite ( U ) et ( V ) définies à partir de :

U1 = 1
U2 = 2
Un = Un-1 + Un-2 (n≥3)
Vn = Un / Un-1 (n≥2)
La suite (Vn) tend vers une limite, appelée nombre d’or.
On suppose que le kième terme de la suite ( V ) donne une valeur approchée du nombre d’or avec une
précision E, dés que |Vk – Vk-1| < E
Ecrire un programme C qui permet de calculer et d’afficher Vk à 10-4 prés et son rang.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
Exercice 6
Un nombre est dit totalement impair si tous ses chiffres impairs occupent des positions impaires.

Ben Jabra Saoussen Page : 21


Ecrire un programme C qui permet de (d’) :
¾ Saisir un entier NB ( NB > 10 ),
¾ Afficher les positions des chiffres impairs de NB,
¾ Vérifier et afficher si NB est totalement impair ou non.
Remarque :
¾ Les positions des chiffres sont numérotées de la droite vers la gauche en commençant par 1.
Exemple 1:
¾ Donner un entier : 213
Résultat :
Les positions : 1 2
213 n’est pas totalement impair.
Exemple 2:
¾ Donner un entier : 6745
Résultat :
Les positions : 1 3
6745 est totalement impair.

Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
Exercice 7
Ecrire un programme en C qui affiche les nombres premiers inférieurs à 100.Un nombre est
premier s’il est divisible par 1 et par lui même uniquement.

Ben Jabra Saoussen Page : 22


Exercice 8
Ecrire un programme C qui affiche tous les nombres compris entre 50 et 150 qui sont à la fois
amis et cousins. Deux nombres sont amis si la somme des chiffres du premier est égale à la
somme des chiffres du second. Deux nombres sont cousins si le produit des chiffres non nuls du
premier est égal au produit des chiffres non nuls du second.
Exemples :
122 et 140 sont amis et cousins puisque :
1+2+2=1+4+0 et 1*2*2=1*4
62 et 143 sont amis et cousins puisque :
6+2=1+4+3 et 6*2=1*4*3
105 et 150 sont amis et cousins puisque :
1+0+5=1+5+0 et 1*5=1*5

Ben Jabra Saoussen Page : 23


TRAVAUX PRATIQUES N°4
Les Fonctions
Exercice 1
1- Ecrire une fonction INVERSION qui permet de retourner un nombre comprenant les mêmes
chiffres que le nombre passé en paramètre mais dans l’ordre inverse.
Exemple :
Si N = 1236 est passé en paramètre alors la fonction retourne 6321.
2- Ecrire une fonction PALINDROME qui vérifie et retourne
™ 1 si un nombre N est un palindrome et ceci en faisant appel à la fonction de la question
précédente. Un palindrome est un nombre symétrique, par exemple 12321, 342243 et 77 sont
des palindromes.
™ 0 si non.
3- Ecrire un programme qui fait appel aux fonctions ci-dessus pour :
™ saisir un entier positif N,
™ et d’afficher si N palindrome ou non.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 24


Exercice 2
On se propose de calculer la racine carrée d’un réel positif X donné en utilisant la suite suivante :
U0 = (1 + X)/2
Un+1 = (Un + X/Un)/2
On vous demande d’écrire les fonctions suivantes :
1- Une fonction SAISIE permettant de saisir un réel positif.
2- Une fonction RACINE permettant de calculer et retourner la racine carrée de X.
Calculer les premiers termes jusqu’à ce que la différence entre deux termes successifs devient <=10-4,
le dernier terme calculé est une valeur approchée de racine de X.
3- Ecrire le programme principal qui fait appel aux procédures ci-dessus pour afficher la racine carrée
d’un réel.
Notes Personnelles
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………

Ben Jabra Saoussen Page : 25


Exercice 3
Tout nombre positif composé de deux chiffres ab (tel que a≠b) possède une liste appelée
« Liste vers 9 ».
Le principe est le suivant :
On calcul la différence (en valeur absolue) entre ab et son symétrique ba ; le résultat trouvé
subit le même traitement ; on répète ce processus jusqu’à obtenir une différence = 9. L’ensemble
constitué par le nombre initial et les résultats des différences est appelé « liste vers 9 ».
Exemple :
Si X = 18
La liste vers 9 de 18 est la suivante : 18 63 27 45 9
On vous demande d’écrire les procédures suivantes :
1- Une fonction SAISIE permettant de saisir un entier positif X composé de deux chiffres
obligatoirement différents.
2- Une fonction LISTE_9 permettant de chercher et d’afficher la liste vers 9 de X.
3- Ecrire un programme principal qui fait appel aux procédures ci-dessus pour saisir un entier positif X
composé de deux chiffres obligatoirement différents et d’afficher sa liste vers 9.
Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 26


Exercice 4
Soit la suite ( U ) définie à partir de :

U0 = 2
U1 = 3
Un = Un-1 + 2*Un-2 (n≥2)
On suppose que cette suite est croissante.
On vous demande d’écrire les procédures/fonctions suivantes :
1- Une fonction SAISIE permettant de saisir un entier X (X > 2).
2- Une fonction VERIFICATION permettant de vérifier et d’afficher si X est un terme de la suite U
ou non.
N.B : Si X est un terme de la suite U afficher aussi son rang.
3- Ecrire un programme principal pour tester les procédures/fonctions ci-dessus.
Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 27


Exercice 5
On souhaite convertir un nombre strictement positif NB de la base 8 en base 10. On vous
demande d’écrire les fonctions suivantes :
1- Une fonction SAISIE permettant de saisir un entier strictement positif.
2- Une fonction VERIFICATION permettant de retourner :
¾ 1 si tous les chiffres qui constituent le nombre NB appartiennent à la base 8.
¾ 0 si non.
3- Une fonction CONVERSION permettant de convertir et retourner le nombre NB en base 10.
4- Ecrire la fonction main permettant d’appeler les fonctions ci-dessus et d’afficher le nombre en
base 10.
Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 28


TRAVAUX PRATIQUES N°5
Les Tableaux à une dimension
Résumé
1-Déclaration
<type simple> <Nom tableau> [<dimension>] ;
Exemples :
1- int A[25] ;
2- float B[100];
3- char D[30];
2- Mémorisation
En C, le nom d’un tableau est le représentant de l’adresse du premier élément du
tableau.
Exemple: int T[5] = { 100,200,300,400,500};
…………. 100 200 300 400 500 ………….
Adresse : 1E06 1E08 1E0A 1E0C 1E0E 1E10

T
3-Accées aux composantes d’un tableau
Considérons un tableau T de dimension N
¾ L’accès au premier élément du tableau se fait par T[0]
¾ L’accès au dernier élément du tableau se fait par T[N-1]
Exemple :
int T[5] = { 100,200,300,400,500} ;
100 200 300 400 500
Nom :
T
Indice : 0 1 2 3 4
Contenu T[0] T[1] T[2] T[3] T[4]
4-Chargement d’un tableau
#include<stdio.h>
void main()
{
int T[5] , i ;
for (i=0 ; i<5 ; i++)
{
printf(" T[%d] : ",i) ;
scanf("%d" , &T[i]) ;
}
}
5- Affichage du contenu d’un tableau
#include<stdio.h>
void main()
{
int T[5], i ;
for (i=0 ; i<5 ; i++)
printf("%d\t", T[i]) ;
}

Ben Jabra Saoussen Page : 29


APPLICATION
Exercice 1
La recherche séquentielle
Compléter, taper, enregistrer, compiler et exécuter le programme suivant
#include<stdio.h>
/* FONCTION CHARGEMENT */
void CHARGEMENT( int T[ ] , int N)
{ int i ;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
}
/* FONCTION RECHERCHE */
int RECHERCHE ( int T[ ] , int N , int val )
{ int i , POS = -1 ;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
return …………………………………….
}
/*FONCTION MAIN*/
void main()
{
int T [50] ;
int N , val ;
do
{
…………………………………..……………………………………………….
…………………………………..……………………………………………….
}while((N<=1) || (N>50));
………………………………………………………………………………………….
…………………………………..………………………………………………………
…………………………………..………………………………………………………
if (RECHERCHE ( T , N , val ) == -1 )
…………………………………..……………………………………………….
else
…………………………………..……………………………………………….
}

Ben Jabra Saoussen Page : 30


Exercice 2
Tri par bulle et recherche dichotomique
Compléter, taper, enregistrer, compiler et exécuter le programme suivant
#include<stdio.h>
/* Fonction CHARGEMENT */
void CHARGEMENT ( int T[ ] , int N)
{ int i ;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
}
/* Fonction TRI */
void TRI ( int T[ ] , int N)
{ int i, j ,aux ;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
}
/* Fonction AFFICHER */
void AFFICHER ( int T[] , int N)
{ int i ;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
}
/* FONCTION RECHERCHE */
int RECHERCHE ( int T[ ] , int N , int val )
{ int pos = -1, inf, mil, sup ;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
return …………………………………….
}

Ben Jabra Saoussen Page : 31


/*Fonction MAIN*/
void main()
{ int T[50] ,N , val;
…………………………………..……………………………………………….
…………………………………..……………………………………………….
…………………………………..……………………………………………….
printf(" T avant tri\n");
…………………………………..……………………………………………….
…………………………………..……………………………………………….
printf(" T après tri\n");
…………………………………..……………………………………………….
if (…………………………………………….. )
…………………………………..……………………………………………….
else
…………………………………..……………………………………………….
}
Exercice 3
Soit T1, T2 et V trois tableaux de dimensions N, On vous demande d’écrire les
procédures/fonctions suivantes :
1- Ecrire une fonction SAISIE_TAILLE qui permet de lire la taille N d’un tableau T (1<N<=50)
2- Ecrire une fonction CHARGEMENT à deux paramètres T et N qui permet de lire les N
composantes d’un tableau T du type entier.
3-Ecrire une fonction AFFICHER à deux paramètres T et N qui affiche les composantes du tableau T.
4- Une fonction RECHERCHE à deux paramètres T1 et N permettant de :
¾ saisir une valeur A quelconque,
¾ chercher et afficher tous les éléments de T1 qui sont supérieurs à A et
¾ chercher et afficher le plus petit des éléments qui sont supérieurs à A.
5- Une fonction TRANSFERE à trois paramètres T2, V et N.
Cette fonction consiste à transférer les éléments de T2 dans V de telle sorte :
™ Les éléments du rang impair de T2 sont rangés dans V en ordre inverse en commençant par la
fin de V.
™ Les éléments du rang pair de T2 sont rangés dans V dans le même ordre.
6- Une fonction INSERTION à deux paramètres T1 et N qui permet d’insérer une valeur val
(introduite à partir du clavier) à une position pos (introduite à partir du clavier)
7- Ecrire une fonction INVERSE à deux paramètres T2 et N qui permet de ranger les éléments du
tableau T2 dans l’ordre inverse sans utiliser un tableau supplémentaire.
8- Une fonction ROTATION à deux paramètres T2 et N qui permet d’effectuer la rotation entre les
éléments de T2 de telle sorte que l’élément T2 [i+1] prend la valeur de T2 [i], T2 [i+2] prend la
valeur de T2 [i+1], …… et le premier élément prend la valeur du dernier.

Ben Jabra Saoussen Page : 32


9- Une fonction COMPACTER à deux paramètres T2 et N qui permet :
¾ compacter les éléments pairs du tableau T2. Cette opération consiste à supprimer les valeurs
paires du tableau.
¾ compter et afficher le nombre d’éléments supprimés.
10- Le programme principal qui permet de :
¾ saisir la dimension N de T1 et T2,
¾ charger T1 et T2,
¾ réaliser le menu suivant :
MENU GENERAL
1**RECHERCHE
2**TRANSFERE
3**INSERTION
4**INVERSE
5**ROTATION
6**COMPACTER
7**QUITTER
Donner votre choix SVP :
Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 33


……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 34


TRAVAUX PRATIQUES N°6
Les Tableaux à deux dimensions

Résumé
1-Déclaration et mémorisation
1-1-Déclaration
<type simple> <Nom tableau> [<dimlig>][<dimcol>];
Exemples :
1-int A[10] [10] ;
2-float B[2][20];
3-char C[10][20];
1-2- Mémorisation
Comme pour les tableaux à une dimension, le nom d’une matrice est le représentant de l’adresse du
premier élément du tableau (l’adresse de la première ligne du tableau).
Les composantes d’un tableau à deux dimensions sont stockées ligne par lignes dans la mémoire.
Exemple :
int A[3][2] = { {1,2},{10,20},{100,200}};

…………. 1 2 10 20 100 200


Adresse : 1E06 1E08 1E0A 1E0C 1E0E 1E10

A
Exemples :
int A[3][4] = { {1,2,3,4},{10,20,30,40},{100,200,300,400}};
Réservation : 3*4*2 = 24 octets
2-Accées aux composantes d’une matrice
Considérons un tableau A de L lignes et C colonnes.
¾ 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 : A[N-1][M-1].
<Nom du tableau> [<ligne>] [<colonne>]

3-Chargement d’une matrice 4-Affichage du contenu d’une matrice


#include<stdio.h> #include<stdio.h>
main() main()
{ int M[5][10] ; { int M[5][10] ;
int i , j; int i ;
for (i=0 ; i<5 ; i++) for (i=0 ; i<5 ; i++)
for (j=0 ; i<10 ; i++) { for (j=0 ; i<10 ; i++)
{ printf("M[%d][%d] : ",i,j) ; printf ("%d \t" , M[i][j]);
scanf("%d" , &M[i][j]) ; printf((" \n");
} }
} }

Ben Jabra Saoussen Page : 35


APPLICATION
Exercice 1
On vous demande d’écrire les fonctions suivantes :
1- Une fonction SAISIE_NB permettant de saisir un entier entre 0 et 10.
2- Une fonction CHARGEMENT permettant de remplir une matrice.
3- Ecrire la fonction ADDITION qui effectue l’addition de deux matrices MAT1 (dimensions N et
M) et MAT2 (dimensions N et M) en une troisième matrice MAT3 (dimensions N et M).

a1 b1 c1 a2 b2 c2 a1+a2 b1+b2 c1+c2


e1 f1 g1 + e2 f2 g2 = e1+e2 f1+f2 g1+g2

4- Une fonction AFFICHAGE permettant d’afficher les éléments d’une matrice.


5- Une fonction main permettant :
¾ Saisir les dimensions des deux matrices,
¾ charger deux matrices M1 et M2 avec des entiers.
¾ additionner M1 et M2 pour obtenir M3,
¾ afficher le contenu des matrices M1, M2 et M3.
Notes Personnelles
……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 36


Exercice 2
Ecrire un algorithme qui effectue la transposition tA d'une matrice A de dimensions N et M en
une matrice de dimensions M et N.
La matrice transposée sera mémorisée dans une deuxième matrice B qui sera ensuite affichée.
Rappel:
/ \ / \
tA = t | a b c d | = | a e i |
| e f g h | | b f j |
| i j k l | | c g k |
\ / | d h l |
\ /

Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
Exercice 3
Soit A une matrice de M lignes et N colonnes contenant des valeurs numériques quelconques. On
appelle COL de la matrice l’élément qui est le plus petit de sa ligne et le plus grand de sa colonne.
Ecrire un algorithme permettant de
¾ saisir les dimensions de la matrice A,
¾ saisir les éléments de la matrice A de dimension (M, N) et
¾ chercher et afficher tous les COLS de la matrice A.
Exemple :
Donner M : 4
Ben Jabra Saoussen Page : 37
Donner N : 3
A:
4 8 5
9 8 8
3 4 5
8 1 5
A(2,2) = 8 est un point COL .
A(2,3) = 8 est un point COL .

Notes Personnelles

……………………………………………………. ……………………………………………………
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….
……………………………………………………. …………………………………………………….

Ben Jabra Saoussen Page : 38