You are on page 1of 61

Cours Algorithmique et Programmation en C

Universit Sultan Moulay Slimane Facult des Sciences et Techniques Bni-Mellal

IDRISSI NAJLAE Filire Ingnieur 2009 - 2010

Gnralits 1/
Que dsigne le terme Informatique ?
Science qui tudie les ordinateurs (partie matriel = hardware ) Traitement automatique de linformation (partie logicielle = software)

Structure gnrale dun ordinateur


1. Unit centrale (micro-processeur) est compose de :
registres internes destins stocker temporairement les informations lintrieur du micro-processeur; dunit arithmtique et logique qui effectue un ensemble doprations; dunit de commande et de contrle qui permet dextraire, dinterprter et dexcuter les instructions dun programme

Suite 2/
2. Mmoire centrale
0
N bits
case mmoire

Donnes et
. . .
2M - 1

programmes

La mmoire centrale RAM permet de stocker les informations traiter. Elle est compose dun ensemble de bits (1 bit = 0 ou 1) dit case mmoire. Chaque case est identifie par un numro dit adresse

3.

Units priphriques
1. 2. dentre & sortie qui permettent lutilisateur de communiquer avec lordinateur (saisie, affichage, ) mmoires auxiliaires qui permettent de stocker les informations en permanence (disque dur, CD, )

Codage binaire
Les informations traites par une machine sont traduites en informations binaires (suite de bits de 0 et 1). On parle du codage binaire. Pour une base de numrotation b, un nombre n peut scrire sous la forme: n = aibi / 0ai<b i0,m
Code binaire pur: reprsente les entiers positifs en base 2. Avec n bits, on peut coder de 0 2n -1;
exemple: n = 23, b=2 sur 8 bits n = (00010111)2

23 = 2(10+1)+1 = 2( 2 x ( 2 x 2 + 1) + 1) + 1 = 2( 2 x (22+20) + 20 ) + 20 = 2(23 + 21 + 20) + 20 = 1x24 + 0x23 + 1x 22 + 1x21 + 1x20 = (10111)2

Code complment 2: reprsente les entiers ngatifs; dans ce cas, on rajoute la valeur 1 au complment 1 du nombre coder;
exemple : n = -15, b=2 sur 8 bits n = (11110001)2 15 = 2x7 + 1= 2 x (22 + 21 + 20) + 20 = 1x23 + 1x22 + 1x21 + 1x20 = (00001111)2 (11110000)2 complment 1 (00000001)2 on rajoute la valeur 1 (11110001)2 donc (-15) = (11110001)2

Partie I Algorithmique

Introduction
Que signifie le terme Algorithme?
ensemble dtapes qui permettent de rsoudre un problme donn; une suite de rgles appliquer dans un ordre dtermin afin darriver au rsultat attendu; un algorithme est indpendant des donnes, de la machine et du langage de programmation Exemple: problme pos = calcul de la moyenne de 2 entiers
Analyse: les donnes fournies = 2 entiers Rsultat dsir = un nombre qui reprsente la moyenne des donnes il faut ensuite dcrire les tapes qui permettent de passer des donnes au rsultat (algorithme)
Saisir deux entiers Calculer leur somme Diviser la somme par 2 Problme

analyse

I . algorithme

traduction

II. programmation

Rsultat

Mthodologie gnrale

Comprendre la nature du problme pos et prciser les donnes (entres) Prciser le(s) rsultat(s) dsir(s) (sorties) Les entres et les sorties sont des variables Dterminer le processus de transformation des donnes en rsultats

Reprsentation dun algorithme


1. Organigramme
Reprsentation graphique de lenchanement de la suite dinstructions relatives un algorithme donn

Nom_algorithme

Entres

2. Pseudo-code
Reprsentation textuelle de la solution propose Squelette dun algorithme:
Dclaration de variables (entres) Dbut Bloc dinstructions Fin rsultat1 tests

rsultat2

Schma dun organigramme

Notion de variables
a. Dfinition = information stocker et utiliser au cours dun programme dsigne par son nom (identificateur attribu par un utilisateur) et une tiquette (rfrence attribue par lordinateur) Dclaration
Attribuer un nom une variable au sein dun programme en prcisant son type Syntaxe = Variables nom_var en Type

b.

c.

Initialisation
Affecter une valeur aux variables laide de loprateur Syntaxe = nom_var valeur

d.

Types de variables
Type numrique (entier, rel, ) Type alphanumrique (caractres et chanes de caractres) Type boolen (vrai ou faux)

Familles dinstructions 1/
-- Ensemble doprations manipuler sur les diffrentes variables a. Affectation
Attribuer une valeur pour initialisation ou modification par loprateur

b.

Lecture & criture


Lire = saisir, introduire des donnes
Syntaxe : Lire nom_var

Ecrire = excuter laffichage lcran


Syntaxe : Ecrire texte explicatif , nom_var

c.

Structure de choix
Dans le cas o il existe plusieurs choix correspondants un certain rsultat, on utilise une structure de choix indiquant quel ensemble doit tre excut i. forme simple: si (condition est vraie) alors (excuter bloc dinstructions 1) sinon (excuter bloc dinstructions 2) finsi ii. forme complexe: selon que (condition 1) faire (bloc dinstructions 1) ou que (excuter bloc dinstructions 2) ou que (excuter bloc dinstructions n) autrement (excuter bloc dinstructions n+1) fselon (fin du selon)

Suite 2/
d.
i.

Structures de rptition
Boucle pour : utiliser lorsque le nombre doprations ou de rptitions effectuer est connu davance;
Syntaxe : pour nom_var val_initiale val_finale faire (bloc instructions) nom_var Suivant Exemple : calculer la moyenne dune classe
Donnes = n nombre dtudiants, nt note de chaque tudiant Rsultat = moyenne de la classe = somme divise par n Algo = lire n S0 Pour i 1 n Lire nt S S + nt i Suivant Ecrire la moyenne des notes est :, S/n

ii.

Boucle tantque : aucune condition sur le nombre ditrations. Le bloc est excut tant que la
condition est vraie. Sinon on sarrte.
Syntaxe : tantque (condition) faire (bloc instructions) fintantque

iii.
iv.

Boucle rpter jusqu : ici on rpte lexcution du bloc jusqu ce que la valeur de la condition
soit vraie. On sarrte dans ce cas.
Syntaxe : rpter (bloc instructions) jusqu (condition)

Exemple : somme dune suite dentiers positifs


Algo: variables x, s en Entier Dbut s0 x0 tantque x >= 0 faire s s + x Lire x Fintantque Ecrire la somme de la suite est : , s fin Algo: variables x, s en Entier Dbut s0 x0 rpter s s + x Lire x jusqu (x < 0) Ecrire la somme de la suite est : , s fin

Tableau logique
and ^

0 1 0 0 0 1 0 1

or v

0 1

xor

0 0 1 1 1 1

0 1 0 0 1 1 1 0

Donner la table de vrit des expressions suivantes : 1. A = (a ^ b) v c = (a v c) ^ (b v c) 2. B = (a ^ b) v (a ^ b)


a 0 1 c 0 0
avc

b 0 1

b 1 0

bvc

A 0 0

a 0 1

b 0 0

a^b

b 1 1

b^a

B 0 1

0 1

1 0

0 0

0 1

0
1

1
1

1
1

0
1

1
0

1
1

1
1

0
1

1
1

0
1

0
0

0
0

0
1

Exercices 1/
1.
2. 3.

Donner un algorithme qui calcule la somme de deux entiers Donner un algorithme qui permet dchanger les valeurs de 3 variables Donner le type et la valeur des expressions suivantes:
2 + 3*2 -0.5 + 3*5 Vrai et (faux ou vrai) (2 <3) ^(4>5)

4.

Traduire les expressions suivantes en pseudo-code:


X = (2a bc)/d Y = (exp(2*a)/2) Z = log(1/1-x)

5. 6.

crire un algorithme qui calcule partir dun rel x et une valeur positive a, la puissance xa crire un algorithme qui retourne la partie entire infrieure de la racine carre dun entier donn m

Suite 2/
7. 8. crire un programme qui demande un nombre lutilisateur, ensuite il lui rpond si cest un chiffre pair ou impair crire un programme qui lit trois chanes de caractres puis les retourne tries dans lordre alphabtique inverse

9.
10. 11. 12. 13.

crire un algorithme qui donne le signe (+/-) du produit de 2 nombres sans le calculer
crire un programme qui dcrmente la valeur dun produit sachant quil na pas atteint sa valeur minimale crire un programme qui naffiche que les valeurs paires dun d crire un programme qui demande lutilisateur de saisir une chane de caractres jusqu la lecture du mot bye . Dans ce cas, on sarrte Reformuler ce pseudo-code:
Variables A, N en Rel Dbut A0 N0 ecrire entrez votre variable N: Tantque N >= 0 AN Lire N si N > A ecrire le max est : , N sinon ecrire le max est : , A finsi fin

Suite 3/
14. Reformuler ce pseudo-code:
Variables x, cptp, cptn en Numrique Variables rep en caractres Dbut cptp 0 cptn 0 Lire rep rpter ecrire voulez-vous continuer?: Lire x si x >= 0 alors cptp cptp +1 sinon cptn cptn + 1 finsi jusqu rep = non Fin

15.

crire un algorithme qui daprs une valeur initiale affiche les cents chiffres suivants dun pas de 2. par exemple, si la valeur est 25 alors les chiffres suivantes seront 27, 29, jusqu 225

16.
17. 18.

crire un algorithme qui calcule le factoriel dun entier N


crire un algorithme qui affiche la valeur maximale et minimale dune srie de 30 chiffres saisis par lutilisateur Mme algorithme que 17 sauf que le nombre de chiffres saisir nest pas connu. On sarrte lorsquune valeur nulle est saisie

Tableaux
Un autre type de variable que nous traitons dans cette partie concerne les variables indices. IL sagit de regrouper un ensemble de valeurs portant le mme nom de variable et diffrencies par un numro dit indice. A chaque fois que lon veut insrer, chercher, modifier un lment du tableau, on le fait par le nom du tableau suivi de lindice entre (). Lindice dbute par dfaut 0;
Syntaxe : Tableau nom_tableau(taille) en Type Exemple : soit Note(10) en Numrique un tableau de rels de taille 10 si je cherche la 3me note, il suffit dcrire Note(2) Remplissage et affichage dun tableau numrique
Variables N, i en Numrique Tableau Tab(N) en Numrique Dbut saisie Pour i 0 N-1 Ecrire saisir la donne n=, i Lire Tab(i) i Suivant Ecrire Maintenant, nous allons afficher notre tableau Pour i 0 N-1 Ecrire la valeur de llment : , i Ecrire est : , Tab(i) i Suivant fin

1.

Tableau de caractres
Tableau Tab(7) en caractres Variable i en Entier Dbut Tab(0) b Tab(1) o Tab(2) n Tab(3) j Tab(4) o Tab(5) u Tab(6) r Fin

Exercices 1/
19. crire un algorithme qui saisi la note dune matire X pour 30 tudiants; ensuite la note dune autre matire Y. Puis calcule la moyenne pondre de ce module sachant que le coefficient respectif de X et Y est 4 et 3

20.

crire un algorithme qui affiche les lments dune suite de Fibonacci de taille 15. une suite de Fibonacci est donne par F0 = 0; F1 = F2 = 1; Fn = Fn-1 + Fn-2
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

21.

Que fait cet algorithme. Peut-on le rduire?


Tableau Tab(10) en Entier Tableau Tabn(10) en Numrique Variables i en Entier Dbut Tab(0) 2 Pour i 1 9 Tab(i) - Tab(i-1) + 1 i Suivant Pour i 0 9 si Tab(i) mod 2 = 0 Tabn(i) - Tab(i) sinon Tabn(i) Tab(i) finsi i Suivant fin

Tableau dynamique
Jusquici nous avons trait des tableaux statiques o leur taille maximale est connue lavance. Dans certains cas, cette information dpend des donnes insrer et donc inconnue lors de la dclaration du tableau. Ce nest quaprs la saisie par lutilisateur que cette information devient disponible. Ainsi, pour lattribuer au tableau en question, on utilise la fonction Redim Syntaxe: Redim nom_tableau (taille - 1)

Exemple :
variables i, N en Entier Tableau Tab() en Numrique taille non connue Dbut crire donner la taille du tableau lire N Redim Tab(N-1) pour i 0 N-1 Tab(i) 0 i Suivant Fin

Exercices 2/
22. crire un algorithme qui mesure lamplitude de la mare (diffrence entre la pleine et la basse mer), linsre dans un tableau. Ensuite, affiche la frquence des valeurs suprieures et infrieures la mare moyenne durant une certaine priode crire un algorithme qui somme 2 tableaux de mme dimension. Est quon peut le faire pour des tableaux de dimensions diffrentes) crire un algorithme qui multiplie un tableau par son inverse crire un algorithme qui partir de 2 tableaux saisis, calcule leur Schtroumpf S. Le Schtroumpf se calcule en multipliant chaque lment du 1er tableau par chaque lment du 2me et additionne le tout.
1 2 3

23. 24. 25.

Le Schtroumpf sera S = 1*4 + 1*5 + 2*4 + 2*5 + 3*4 + 3*5 = 54 26. crire un algorithme qui inverse un tableau en gardant la mme variable.

Techniques sur les tableaux


I. Tri

Le tri est une opration darrangement des valeurs dans un ordre donn croissant ou dcroissant.

A. Tri par slection

Il consiste chercher llment le plus petit (le plus grand), le mettre dans la 1re (dernire) position. Ensuite, chercher le second le plus petit(grand) et le mettre en seconde (avant-dernire) position et ainsi de suite jusqu ce que le tableau soit tri. Le nombre de comparaison ncessaire pour ce tri est N(N-1)/2 Le nombre dchange est de lordre de N et sa complexit est de O(N2)
Algorithme :
Tableau Tab(N) en Numrique Variables i, j, min, c en Entier Dbut pour i 0 N-1 min i //on suppose que chaque est un minimum puis on teste sur le reste du tableau pour j 1 N-1 si Tab(j) < tab(min) alors min j finsi j Suivant // fin de la boucle sur j si min <> i alors // on change c Tab(i) Tab(i) Tab(min) Tab(min) c finsi i Suivant // fin de la boucle sur i Fin

A. Tri bulles

Le tri bulles consiste comparer deux lments successifs du tableau. Sils sont dans le bon ordre, on passe aux suivants; sinon, on les permute et on reprend la comparaison ds le dbut.
Algorithme :
Tableau Tab(N) en Numrique Variables i, c en Entier Variables test en Boolen Dbut test vrai tantque test test faux pour i 0 N-1 si Tab(i) > tab(i+1) alors c Tab(i) Tab(i) Tab(i+1) Tab(i+1) c test vrai finsi i Suivant // fin de la boucle sur i fintantque Fin

Techniques sur les tableaux


II. Recherche

Il sagit de trouver la position ou un lment donn dans un tableau.

Recherche
1. Recherche squentielle
Elle consiste parcourir le tableau ds sa premire valeur et tester lment par lment jusqu atteindre celui en question

2.

Recherche dichotomique
Llment trouver est compar au milieu du tableau. Sil est suprieur, la recherche est effectue sur la partie droite du tableau, sinon la partie gauche est traiter. La tableau est suppos tri dans lordre croissant

Exercices
27. crire un algorithme qui trie dans lordre dcroissant un tableau numrique pour les 2 types de tri slectif Mme exercice pour le tri bulles Donner lalgorithme de recherche squentielle et dichotomique pour un tableau numrique et alphanumrique tri dans lordre croissant Mme question que (29) sauf que dans ce cas le tableau est tri dans lordre dcroissant

28. 29.

30.

Partie II Programmation en C

Introduction
A. Historique:
1972 : Dennis M. Ritchie a fond ses premires origines 1978: publication du standard K&R-C (Brian w.Kerrighan) 1982: publication du standard ANSI-C universel : il est utilisable pour tous types dapplication et non spcifique pour un domaine prcis (Fortran applications scientifiques) haut niveau: le langage C est structur, dclaratif et rcursif

B.

Caractristiques du langage C:

proche de la machine : offre des oprateurs et fonctions proches du langage machine


portable : un programme en C peut tre utilis sur tout systme possdant un compilateur C compil :

saisir un texte programme source l'aide d'un programme appel EDITEUR, le traduire en langage machine (en codes binaires) : c'est la compilation et, si plusieurs modules ont t compils sparment, l'dition de liens (LINK ou BIND), l'excuter.

C.

Phases de programmation en C:
Fichiers en tte (*.h) stdio.h math.h programme source (.c) #include<stdio.h> #include<math.h> #include main() { Corps excuter } dition

Compilation

Programme .objet (.ob)

Bibliothques pr compils math.h

dition de liens

Programme excutable (.exe)

Notions de base
Premier programme en C:
include fonctions standards

#include<stdio.h> directives #include<math.h> define dfinit une constante #define Pi 3.14 main fonction principale int main(void) { int a, b, s; dclaration de variables (type nom_var) s = 0; printf( veuillez saisir deux entiers); Instructions (affichage, lecture, affectation,) scanf( %d, %d: , &a, &b); bloc dinstructions s = a + b; printf( la somme des deux entiers est %d\n, s); return 0; valeur de retour pour la fonction main }

Dclaration de variables :
Syntaxe : <Type> <liste des identificateurs> (nom attribu aux variables commenant par une lettre et suivi de caractres et de chiffres) Le C distingue entre les minuscules et les majuscules Les mots cls suivants sont des identificateurs rservs par le systme:
auto, break, case, char, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, sizeof, static, typedef, switch, unsigned, void, while, strucy, asm, large, fortran, far, pascal, near

Dclaration de fonctions :
Syntaxe: <type rsultat><nom fonction>(<type arg1>, <type arg2>, , <type argn>) {
<dclarations locales>; // donnes utilises uniquement lintrieur de la fonction <bloc dinstructions>; // liste des instructions qui dfinissent laction excuter

} Fonction main :
Fonction principale pour lexcution du programme Un seul appel main par programme Le type du rsultat du main est un int . Il peut ne pas tre dclar. Linstruction return 0 signifie que le programme sest termin avec succs

Commentaires en C :
/* ceci est un commentaire sur plusieurs lignes */ // ceci est un commentaire sur une seule ligne

Types de base
Un type dfinit les valeurs que peut prendre une variable, la taille mmoire allouer et les oprateurs que lon peut appliquer dessus; Les types entiers:
4 variables du type entier existent en C : les caractres (char), les entiers courts (short int), les entiers standards (int) et les entiers larges (long int); Un caractre sidentifie son code ASCII. Ainsi, une variable de type char peut subir les mmes oprations que les autres entiers; Si on ajoute le prfixe unsigned lune de ces variantes, ceci signifie que nous sommes entrain de manipuler des entiers non signs (positifs)

1.

Type
char short int

Valeur minimale
-128 -32768

Valeur maximale
127 32767

Nombre doctets
1 2

int long int

-32768 -2147483648

32767 2147483647

2 4

2. Les types rels :


3 types rels existent : les rels simple prcision (float), les rels double prcision (double) et les rels trs grande prcision (long double);

Type

Prcision

Nombre de chiffres significatifs

approximation

Nombre doctets

float
double long double

simple
double trs grande

6
15 19

1.1 10-38 3.4 1038


2.2 10-308 1.7 1308 3.4 10-4932 1.1 104932

4
8 10

3. Dclaration dune constante :


a) Les constantes entires peuvent tre reprsentes :
sous la forme standard dcimale (134) sous la forme octale en les prcdant par 0 (0206)
sous la forme hexadcimale en les prcdant par 0x (0X86)

b) Les constantes relles peuvent tre reprsentes:


sous la forme standard dcimale (101.34) sous la forme exponentielle (1013.4 e-1 ou 10134 e-2)

c) Les caractres constants


Une constante caractre est indique entre apostrophes (a, b)

d) Les chanes de caractres constantes


Une constante chane de caractres est indique entre guillemets (chane, bonjour)

e) Loprateur (const) pour fixer une valeur dune variable, on utilise lattribut const
const int a = 10; // la valeur de a ne change pas au cours du programme

Caractres de contrle
\a \b \t \n \\ bip sonore retour arrire tabulation horizontale retour la ligne antislash

signification

\o \? \
\ \f \v \nombre \xnombre

caractre nul point dinterrogation apostrophe


guillemets saut de page tabulation verticale nombre en octale nombre en hexadcimale

Oprateurs standards
1. Oprateurs classiques:
a. Affectation <variable> = <nouvelle expression>;
int a = 5, b=2, c; //initialisation et affectation c = a + b; //affectation avec autres valeurs Loprateur % permet dobtenir le reste de la division entire (mod) Loprateur / retourne le quotient entier des deux oprandes Sappliquent des expressions logiques (vrai ou faux) (cf. tableau logique, 1re partie) Exemple: (2>3) && 40 vaut 0 !!1 vaut 1

b.

Oprateurs arithmtiques <+, -, /, %>


c.

Oprateurs logiques <&& (and), || (ou), ! (ngation)>


d.

Oprateurs de comparaison < ==, !=, <, >, <=, >= >
0 si la comparaison est fausse, 1 sinon Exemple: 0 || (32 >12) vaut 1 0 || !(32 >12) vaut 0

e.

Les oprateurs de bits < >>, << >

a << (>>) b
Les oprandes sont de type entier (char, short int, int, long int); Loprande gauche a est lobjet dcaler; (conversion en binaire) Loprande droite b reprsente le nombre de bits de dcalage Si lentier dcaler est sign alors le bit sign (position binaire dextrme gauche) est prserv lors du dcalage droite Si lentier dcaler est non sign, alors les bits laisss libres sont mis 0; Exemple : int i, j; i= 5; // i en binaire (0000 0101) j = i<<2; /* j aprs dcalage (00010100) = 20 */ j = i>>2; /* j aprs dcalage (00000001) = 1 */ i = - 3; /* i en binaire (11111101) */ j = i <<2; /* j devient (11110100) = -15 */ j = i >>2; /* j devient (11111111) = -1 */

f.

Les oprateurs bit bit < &, |, ^>


Les oprateurs portent sur les bits du mme rang Exemple : int i = 5, j = -3 ; i & j vaut 5 i | j vaut -3 i ^ j vaut -15

2.

Oprateurs particuliers de C:
a. Oprateur daffectation <+=, -=, /=, %=, <<=, >>=, &=, |=, ^= >;
oprande1 = oprande1 op oprande2 <==> oprande1 op= oprande2 Exemple: a = a /b a /= b; c = c >> 2 c >>= 2 post-incrmentation (dcrmentation) <variable>++(--) La valeur de variable est dabord utilise puis incrmente (dcrmente) pr incrmentation (dcrmentation) (- -)++<variable> La valeur de variable est dabord incrmente (dcrmente) puis utilise Exemple: int a = 3, b = 0; Que vaut a++ et ++b?

b.

Oprateurs dincrmentation et de dcrmentation <++, -->

c.

Oprateur conditionnel <?:>


<expression>?<expression1>:<expression2> Lexpression est value. Si sa valeur est vraie, alors cest la valeur de lexpression1 qui est retourne sinon, cest lexpression2 Exemple: max = i>j ? matin: soir

d.

Oprateur squentiel <expression1, expression2>


Cet oprateur permet de regrouper deux sous expressions en une seule. On value la premire puis la seconde. La valeur finale retourne de l'expression tant la seconde. On peut aussi l'utiliser pour valuer deux (ou plus) expressions en mme temps

e.

Oprateur sizeof sizeof(<variable || type>)


retourne le nombre doctets quoccupe un type ou variable sizeof(float) retourne 4 octets

f.

Oprateur de forage de type (cast)


(type) <variable> convertit la variable dun type donn en le type spcifi (type)

3.

Priorit et associativit des expressions


Lors de lvaluation des expressions, les oprateurs respectent certaines lois de priorit et dassociativit;

Lecture et criture de donnes


1. criture formate des donnes printf
printf(format, <expr1>, <expr2>, , <exprn>); a. La partie format est une chane de caractres qui peut contenir:
du texte; des caractres de contrle; des spcificateurs de format

b. c. d.

Un spcificateur indique la manire dont les valeurs des expressions <expr1>,,<exprn> seront affiches Un spcificateur par expression, il commence par le symbole % et se termine par 1 ou 2 caractres qui indiquent le format daffichage On peut indiquer la largeur minimale du champ o sera affiche la valeur. La forme est donne par : %[ [-] <n1>] [.<n2>] <spcificateur> avec: - : aligne laffichage sur la gauche n1> : taille minimale du champ daffichage n2 : dans le cas des rels, n2 indique le nombre de chiffres afficher aprs la virgule

2. Lecture formate des donnes scanf


scanf (format, <add var1>,, <add varn>); a. Le scanf lit le fichier standard en entre stdin puis fait correspondre les caractres lus au format indiqu dans la chane de format ; b. La spcification du format est identique printf sauf quon fournit ladresse (&) des variables suivi de leurs identificateurs

Tableau de spcificateur de format


spcificateur affichage type

%c %d ou %i %u %o %x %X

un seul caractre un entier relatif un entier non sign un entier en octale un entier en hexadcimale(a-f) un entier en hexadcimale(A-F)

char int unsigned int int int int

%f
%e %E %s

un rel
un rel en exponentiel (e) un rel en exponentiel (E) une chane de caractres

float ou double
`` `` *char

Exemples
1. Donner lordre et la valeur dvaluation des expressions suivantes:
a=5, b= 10, c = -1; X = 2*a + 3*b 4*c; a = b = c; a *= b += 5; !- -a == ++ !b; ((2*a + 3)*b 4)*c; int x = 4,y; float z = 15. 76; char c; A = x*z + y; c = c + 1; y = z/x; (float)y = (float)z/x; printf(%4d, 14297); printf(%4x, 142); printf(%f, 1429.7); printf(%.2f, 14.297); printf(%4f, 142.97);

2.

Donner le type des expressions suivantes:


3.

Quel est le rsultat des instructions suivantes:


Lecture et criture dun caractre


1. criture dun caractre putchar
putchar(caractre) Permet dcrire un caractre sur stdout. Elle est quivalente printf(%c, caractre) Exemple:
char a= 63, b = \n, c= \a; putchar(x); putchar(\); putchar(b); putchar(66); putchar(a); putchar(c);

2.

Lecture dun caractre getchar


caractre = getchar() Permet de lire un caractre sur stdin. Elle retourne le caractre lu

Structures de contrle
1. Structures de choix:
Utilisable lorsquon a besoin de n'effectuer certaines instructions que dans certains cas. On dispose pour cela du if et du switch . a. Linstruction if
if (expression)
bloc dinstructions1

else
bloc dinstructions2

Si lexpression est vraie, alors le bloc dinstructions 1 est excut sinon cest le second bloc; Remarques :
if (!expr) <==> if (expr == 0) if (expr1) if (expr2) if (expr3) bloc1 else bloc2 else bloc 3 Un else se rapporte au if le plus proche; un if peut aussi se terminer sans else

Exemples :
int a = 0, b=2, n= -1, m = 0; 1. if(n>0)
if(a>b)

m = a;
else m = b;

2.

if(n>0) { }
if(a>b) m = a;
m = b;

else

3. 4. 5.

crire un programme qui permet de rsoudre lquation du second degr Ax2 + Bx + C = 0; crire un programme qui vrifie la validit de lheure saisie(hh:mm:ss); crire un programme qui calcule le chiffre daffaires dune entreprise (recettes dpenses). Si ce chiffre dpasse les 100000 dhs, lentreprise est en bonne tat sinon elle souffre dune crise.

b.

Linstruction switch
switch (expression) {
case <choix1> : bloc dinstructions1 case <choix2> : bloc dinstructions2 case <choixn> : bloc dinstructionsn

default : bloc dinstructions } Le test seffectue sur la valeur de lexpression, si elle prend la ime valeur, alors on excute le ime bloc correspondant Exemple : char c; switch ( c) {
case + : puts(opration daddition); break; case - : puts(opration de soustraction); break; case * : puts(opration de multiplication); break; case / : puts(opration de division); break; default : puts(opration non valide); break; }

Remarques : linstruction break permet de sortir immdiatement du bloc excut, sinon le switch risque de tester le cas suivant.

2.

Structures de rptition:
Utilisable lorsquon a besoin de rpter un bloc dinstructions plusieurs fois. a. La boucle for
for (expr1; expr2; expr3)
{ bloc dinstructions } expr1 : valeur dpart; expr2 : condition darrt; expr3 : mise jour de la condition darrt On value lexpression1, puis on ritre le processus suivant: valuer lexpression 2; si elle est valide, on excute le bloc dinstructions puis on value lexpression3; sinon on sarrte

Exemple :
/* affichage du double des valeurs entre 0 et 15 */ int i; for (i=0; i<=15; i++) printf(%d\t, 2*i); 1. crire ce programme en utilisant loprateur squentiel , ; 2. crire un programme qui calcule pour un nombre compris entre 1 et 10 les cinq premiers termes de la suite Un dfinie par : U0 = une valeur saisir; Un = 2Un-1 si n est impair ; Un-1 + 1 si n est pair; 3. crire un programme qui fait le compte rebours dune valeur donne

b.

La boucle while

while (expr)
{ bloc dinstructions } Elle correspond tantque (expr) faire bloc instructions
L'expression est au moins value une fois. Tant qu'elle est vraie, on excute le bloc d'instructions; ds qu'elle est fausse, on sort du bloc et on passe aux autres instructions (si elle est fausse ds le dbut, le bloc n'est jamais excut).

Exemple :
/* affichage de la racine des chiffres entre 0 et 10 */
.. float nombre,racine=0; puts("entrez un nombre rel entre 0 et 10"); scanf("%f",&nombre); while (racine*racine<nombre) racine+=0.01; printf("la racine de %f vaut %4.2f 1%% prs\n", nombre, racine);

1. 2. 3.

crire un programme qui affiche les puissances dun entier n saisi jusqu atteindre une valeur

maximale fixe par lutilisateur

crire un programme qui fait le compte rebours dune valeur donne Que fait ce programme?:

c.

La boucle do while
do

{ bloc dinstructions } while (expr) Elle correspond faire bloc instructions tantque (expr) Semblable while mais le bloc d'instructions est au moins excut une fois, avant la premire valuation de l'expression.

int i, j; puts( donner le i"); scanf("%d",&i); puts("entrez un j"); scanf("%d",&j); while (i != j) { puts( donner le i"); scanf("%d",&i); puts("entrez un j"); scanf("%d",&j); if (i == j) { printf(votre pivot est (%d,%d), i,j); break;} }

Exemple :
/* affichage du double des valeurs entre 0 et 15 */ int i; do printf(%d\t, 2*i); while (i<0|| i>15)

1. 2.

Refaire les mmes exercices du while crire un programme daffichage de menu

3.

Branchements inconditionnels : Utilisable lorsquon a besoin de terminer un bloc immdiatement. a.

break
Il provoque la sortie immdiate de la boucle ou switch en cours. Il est limit un seul niveau d'imbrication

b.

continue
Elle permet de passer directement litration suivante dune boucle

c.

return
Permet de sortir de la fonction actuelle (par exemple main), en se branchant son dernier }. Return permet galement de rendre la valeur rsultat dune fonction

d.

Exit
Permet de quitter directement le programme

Tableaux

Dfinition
Un tableau est une variable structure forme dun ensemble de valeurs de mme type dites composantes du tableau ;

Le nombre de composantes constitue la dimension du tableau ;


Chaque lment est repr par un indice prcisant sa position au sein du tableau; Le nom du tableau est lidentificateur de ce tableau .

Tableau une dimension


1. Dclaration :
Syntaxe: <type><nom tableau>[dimension] Le type dtermine le type des diffrentes valeurs composantes le tableau; Le nom tableau est lidentificateur du tableau; La dimension est la taille maximale que peut atteindre ce tableau float Note[30];

2.

Initialisation :
Syntaxe: <type><nom tableau>[dimension] = {c1,c2,,cn} Si la liste des composantes c1,,cn ne contient pas toutes les valeurs, les composantes restantes sont initialises 0; Si la dimension nest pas fixe linitialisation, le systme alloue automatiquement lespace ncessaire. float Note[] = {10, 12, 16, 8}

3.

Mmorisation :
Le nom du tableau est le reprsentant de ladresse du 1er lment du tableau; Les adresses des autres composantes sont calcules relativement cette adresse; par exemple, ladresse du ime lment dun tableau donn X se calcule par : X + (i*taille_de_la_composante) Pour un tableau form de N composantes de taille M octets, lespace total allouer pour ce tableau est (N*M) octets.

4. Accs :
Pour accder au ime lment du tableau, on utilise son indice selon la syntaxe suivante: Syntaxe : nom_tableau[indice-1], avec indice >= 0

5. Exemples :
a. saisie et affichage dun tableau de rels #include<stdio.h> main() { // dclaration int i, N; printf(veuillez saisir une dimension\n); scanf(%d, &N); flaot T[N]; // saisie for(i=0; i<N; i++) { printf(llment %d\n, i); scanf(%f, &T[i]); } // affichage for(i=0; i<N; i++) printf(%f\n,T[i]); return 0; }

Tri dun tableau


1.

Tri par slection


Il sagit de parcourir le tableau en cherchant llment le plus petit (le plus grand), le mettre dans la 1re (dernire) position. Ensuite, procder la recherche du second plus petit(grand) et le mettre en seconde (avantdernire) position et ainsi de suite jusqu ce que le tableau soit tri.

2.

Tri par propagation (bubble sort)


Il sagit comparer les lments du tableau deux deux successivement. Sils sont dans le bon ordre, on passe aux suivants; sinon, on les permute et on reprend la comparaison ds le dbut.

3.

Exercices :
crire un programme de tri par slection et par propagation;

Recherche dans un tableau


1.

Recherche squentielle
Il sagit de comparer successivement les valeurs du tableau avec la valeur donne

2.

Recherche dichotomique
Dcomposer le tableau en 2. Comparer la valeur recherche celle du milieu; si elle est suprieure, la recherche est effectue sur la partie droite du tableau, sinon la partie gauche est traiter. La tableau est suppos tri dans lordre croissant.

3.

Exercices :
crire un programme de recherche squentielle et dichotomique dans le cas croissant et dcroissant

Tableau plusieurs dimensions


1. Dclaration :
Syntaxe: <type><nom tableau>[dim1] [dim2][dimn]

2.

Cas de deux dimensions (matrices)


Syntaxe: <type><nom matrice>[lignes] [colonnes] La taille lignes reprsente le nombre maximale de lignes composantes la matrice; (sens horizontal) La taille colonnes reprsente le nombre maximale de colonnes composantes la matrice; (sens vertical) float classe [30][5];

3.

Mmorisation :
Le nom dune matrice est le reprsentant de ladresse du 1er lment(ladresse de la 1re ligne); Les composantes dune matrice sont stockes ligne par ligne en mmoire; Les adresses des autres composantes sont calcules comme suit : M + (i* lignes* taille_de_la_composante) + (j* taille_de_la_composante) Pour une matrice forme de L lignes et C colonnes de taille M octets, lespace total allouer est (L*C*M) octets.

4. Accs :
Pour accder llment (i,j) dune matrice, on utilise ses indices selon la syntaxe suivante: Syntaxe : nom_matrice[i] [j]

5. Exemples :
a. saisie et affichage dune matrice de rels
#include<stdio.h> main() { // dclaration int i, j, L, C; printf(veuillez saisir un nombre de lignes\n); scanf(%d, &L); printf(veuillez saisir un nombre de colonnes); scanf(%d, &C); flaot M[L][C]; // saisie for(i=0; i<L; i++) for (j=0; j;C; j++) { printf(llment [%d,%d]\n, i,j); scanf(%f, &M[i][j]); } // affichage for(i=0; i<L; i++) for (j=0; j;C; j++) printf (%f\t, M[i][j]); return 0;

Pointeurs

Fonctions

Chanes de caractres

Structures

You might also like