39
Ecole Nationale des Ingénieurs de Sousse ENISO AU 2010/2011 Fascicule TP Langage C Préparé par : Mme Saoussen Ben Jabra

Fascicule de TP Langage C

Embed Size (px)

DESCRIPTION

TP OF C LANGAGE FROM ENISO TUNISIA

Citation preview

Page 1: Fascicule de TP Langage C

Ecole Nationale des Ingénieurs de Sousse ENISO

AU 2010/2011

Fascicule

TP Langage C

Préparé par :

Mme Saoussen Ben Jabra

Page 2: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 1

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 ; }

Page 3: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 2

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 ; }

Page 4: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 3

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 1nomnom_2 nom.2_nom_3 -nom-3Nom_de_variable Nom de variabledeuxieme_choix deuxième_choixmot_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 int long int

2 ou 4 octets 2 ou 4 octets 4 octets

-32768 à 32767 -32768 à 32767 -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 double long double

4 octets 8 octets 10 octets

3.4*10-38 à 3.4*1038

1.7*10-308 à 1.7*10308 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.

Page 5: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 4

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 constanteLONG = 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.

Page 6: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 5

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 0sin(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

* multiplication ! négation logique (not)

<, <=, >, >=

plus petit 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

Page 7: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 6

+= 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:

Page 8: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 7

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

Page 9: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 8

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

Le 1er 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

Page 10: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 9

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).

Page 11: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 10

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 :

Page 12: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 11

♦ 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.

Page 13: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 12

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.

Page 14: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 13

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)> ;]]

}

Page 15: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 14

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.

Page 16: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 15

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 …………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………… ……………………………………………………

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

Page 17: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 16

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

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

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 …………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………….……………………………………………………

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

Page 18: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 17

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 …………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………… …………………………………………………….…………………………………………………… …………………………………………………….……………………………………………………

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

Page 19: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 18

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.

Page 20: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 19

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 …………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….

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

Page 21: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 20

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.

Page 22: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 21

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.

Page 23: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 22

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.

Page 24: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 23

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

Page 25: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 24

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 …………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….

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

Page 26: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 25

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 …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… …………………………………………………………………………………………………………… ……………………………………………………………………………………………………………

Page 27: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 26

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

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

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

Page 28: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 27

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

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

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

Page 29: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 28

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

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

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

Page 30: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 29

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} ;

Nom : T

100 200 300 400 500

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]) ; }

Page 31: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 30

AAPPPPLLIICCAATTIIOONN 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 …………………………………..……………………………………………….

}

Page 32: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 31

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 …………………………………….

}

Page 33: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 32

/*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.

Page 34: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 33

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

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

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

Page 35: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 34

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

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

Page 36: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 35

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 #include<stdio.h> main() { int M[5][10] ; int i , j; for (i=0 ; i<5 ; i++) for (j=0 ; i<10 ; i++) { printf("M[%d][%d] : ",i,j) ; scanf("%d" , &M[i][j]) ; } }

4-Affichage du contenu d’une matrice #include<stdio.h> main() { int M[5][10] ; int i ; for (i=0 ; i<5 ; i++) { for (j=0 ; i<10 ; i++) printf ("%d \t" , M[i][j]); printf((" \n"); } }

Page 37: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 36

AAPPPPLLIICCAATTIIOONN 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 …………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….…………………………………………………….

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

+ =

Page 38: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 37

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

Page 39: Fascicule de TP Langage C

Ben Jabra Saoussen Page : 38

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

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

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