Vous êtes sur la page 1sur 24

Programmation Le langage C

TP 1
1. Mise ne place de lespace de travail
Tlcharger le fichier http://priimaths.free.fr/lynsli/IMG/zip/TP_C.zip
le dcompresser dans votre espace de travail. Ce rpertoire contient les fichiers indispensables pour le bon
droulement de vos TP : ne les supprimer pas, ne les modifier pas,
Tous vos programmes doivent sauvegarder dans ce rpertoire
Lancer geany, puis ouvrir un nouveau fichier
Taper le programme ci-contre :
#include <stdio.h>
Remarque :
int main(){
\n : new line
printf("Salut tout le monde !\n");
\t : tabulation
return 0;
\b : backspace
}
Enregistrer le programme sous le nom programme_poli.c
cliquer successivement sur
Le rsultat du votre programme sera afficher dans la console :
Remarquez le code de sortie de votre programme.

Question
Ecrire un
programme qui
affiche

Modifier votre
programme pour
affiche r

Remarque
1.

Si la compilation choue, les erreurs sont


affiches dans la fentre de compilation :
Un minimum de connaissance de langlais est
donc requis.

2. Les instructions commenant par #


sont des directives destination du
prprocesseur
#include <stdio.h> : permet dintroduire, avant
compilation, les directives dfinie dans le fichier
stdio.h . Elles concernent, par exemple, les fonctions sprintf() et scanf()
1/5

Question
Quelle est le type derreur indique dans le message ci-dessus ?

2. Quelques conseil pour crire un programme


a. Commentaires : une bonne lisibilit du programme
Le langage C autorise la prsence de commentaires dans les programmes source. Il sagit de textes explicatifs
destins aux programmeurs et aux lecteurs du programme pour facilit sa comprhension et ventuelles
corrections et volutions. Ces commentaires sont ignores par le compilateur.
Les commentaires sont placs tout endroit et forms de caractres quelconques placs
entre les symboles /* et */ sur plusieurs lignes
ou prcd par // sur une seule ligne
voir http://vincentlaine.developpez.com/tuto/dotnet/comdoc/
b. Rgles respecter pour crire un proggramme :
Une seul instruction par ligne ;
L'enchanement des instructions doit tre facile suivre
Utiliser les tabulations pour les blocs imbriqus
Choisir des noms de variables judicieux
Placer des commentaires pertinents
Exemple 2. Un exemple graphique
Ouvrez un fichier et crire le programme suivant :

/* -------------------------------------------------------------------------------------------------------|
* Programme : 01exemple_ggraphique (version 01)
*
* Auteur : le corbu , Date : 20/11/14
*
* ------------------------------------------------------------------------------------------------------- */
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

#include "graphics.h" // pour utiliser les fonctions graphiques .


int main() {
init_graphics(900,600); // creation dune fentre graphique de largeur 900 et hauteur 600
POINT P , Q; //dclaration de 2 points P et Q
P.x = 10 ; P.y = 10; // initialisation des coordonnes du point P
Q.x = 400; Q.y = 500; // et du point Q
draw_line(P,Q,rouge); // traage en rouge du segment [PQ]
P.x = 300; P.y = 350;
// r-initialisation des coordonnes du point P
draw_circle(P,100, magenta); // Traage du cercle en magenta de centre P et de rayon 100
P.x = 100; Q.y = 90;
P.x = 200; Q.y = 300;
draw_fill_rectangle(P, Q, bleu);
wait_escape(); // On attend ESCAPE pour fermer la fentre console
exit(0);
// on quitte avec le code 0
}
2/5

1. Tester ce programme
2. Commenter les lignes 10,11 et 12.
3. Modifier ce programme de sorte afficher un triangle rectangle dont les trois cts sont de couleurs
diffrentes.

3. Tester les exemples du cours


l

a. Dclaration et initialisation.
Rappel :
les diffrents types simples de donnes dfinis
dans le langage C
Pour les format daffichage voir lannexe
Dautres types plus complexes seront abords
ultrieurement

Exercices
Exercice 1
a. Commenter le programme ci-dessous

int main(){
int a , c ;
a=2;
b=3 ;
printf("La valeur de a est %d, la valeur de b est %d \n",a,b,c) ;
b=a ;
a=b ;
printf("La valeur de a est %d, la valeur de b est %d \n",a,b,c) ;}

b. Que fait ce programme ?


c. Le modifier pour pouvoir permuter les valeur de a et b.

3/5

Exercice 2
On considre le programme ci-dessous

int main()
{double ht, ttc, taux;
taux=19.6 ;
printf ("Entrer le prix hors taxe : ") ;
scanf("%lf", &ht);
ttc = ht + ht * taux / 100;
printf("Le prix toutes taxes comprises est %.2lf\n",ttc);
}

1. Que fait ce programme ? le commenter !


2. Modifier ce programme pour permettre lutilisateur de choisir le taux de TVA.
Exercice 3.
Incrmenter une valeur entire entre au clavier puis afficher le rsultat
Exercice 4.
Ecrire un programme moyenne.c qui calcule la moyenne de deux notes donnes par lutilisateur
Exercice 5.
a. Ecrire un programme qui calculer la surface d'un disque connaissant son rayon.
b. Le modifier pour afficher Le disque de rayon R a pour diamtre D, a pour primtre P et a pour surface S .
La valeur du rayon R est donne par lutilisateur, le programme calcul le diamtre D, le primtre P et la
surface S puis affiche la phrase rponse.
Exercice 6.
Ecrire un programme discriminant.c qui calcule le discriminant dun trinme de second degr.
et donne le nombre de solutions selon la valeur de delta.
Exercice 7.
Ecrire en pseudo-code un algorithme max2 et un programme max2.c qui retourne le maximum de
deux nombres rels donns par lutilisateur.

4/5

Annexe
La fonction printf est utilise pour transfrer du texte, des valeurs de variables ou des rsultats d'expressions vers le fichier de sortie standard stdout (par dfaut
l'cran). Ecriture formate en C : printf("<format>",<Expr1>,<Expr2>, ... )
type de C
int
short int
long int
unsigned int

reprsentation de la donne saisie


dcimale signe
dcimale signe
dcimale signe
dcimale non signe

format
%d
%hd
%ld
%u

unsigned short int

dcimale non signe

%hu

unsigned long int


int
short int
long int
int
short int
long int
float
double
long double
float
double
long double

%lu
%o
%ho
%lo
%x
%hx
%lx
%f
%lf
%Lf
%e
%le
%Le

char

dcimale non signe


octale
octale
octale
hexadcimale
hexadcimale
hexadcimale
flottante virgule fixe
flottante virgule fixe
flottante virgule fixe
flottante notation exponentielle
flottante notation exponentielle
flottante notation exponentielle
flottante virgule fixe ou notation
exponentielle
flottante virgule fixe ou notation
exponentielle
flottante virgule fixe ou notation
exponentielle
caractre

char *

chane de caractres

%s

float
double
long double

Exemples
#include <stdio.h>
main()
{
int i = 23674;
int j = -23674;
long int k = (1l << 32);
double x = 1e-8 + 1000;
char c = 'A';
char *chaine = "chaine de caracteres";
printf("impression de i: \n");
printf("%d \t %u \t %o \t %x",i,i,i,i);
printf("\n impression de j: \n");
printf("%d \t %u \t %o \t %x",j,j,j,j);
printf("\n impression de k: \n");
printf("%d \t %o \t %x",k,k,k);
printf("\n%ld \t %lu \t %lo \t %lx",k,k,k,k);
printf("\n impression de x: \n");
printf("%f \t %e \t %g",x,x,x);
printf("\n%.2f \t %.2e",x,x);
printf("\n%.20f \t %.20e",x,x);
printf("\n impression de c: \n");
printf("%c \t %d",c,c);
printf("\n impression de chaine: \n");
printf("%s \t %.10s",chaine,chaine);
printf("\n");

%g
%lg
%Lg
%c

Ce programme affiche l'cran

impression de i: 23674 23674


56172 5c7a
impression de j:
-23674 4294943622
37777721606 ffffa386
impression de k:
0
0
0
4294967296
4294967296
40000000000
100000000
impression de x:
1000.000000
1.000000e+03 1000
1000.00
1.00e+03
1000.00000001000000000000
1.00000000001000000000e+03
impression de c:
A
65
impression de chaine:
chaine de caracteres chaine de

5/5

Programmation Le langage C
TP 2

1. Constantes et variables numriques


Les programmes dordinateur travaillent avec diffrents types de donnes et ont besoin de mmoire pour les
stocker. Le langage C peut stocker des donnes sous formes de variable ou de constante avec de multiples options.
Une variable dispose dune zone de stockage en mmoire et sa valeur peut changer en cours de programme. Une
constante, au contraire, contient une valeur fixe.

a. La mmoire
Un ordinateur utilise de la mmoire vive (RAM, Random Access Memory) pour stocker des informations pendant
son fonctionnement. Cette mmoire est alloue ou libre pour de nouvelles informations aussi souvent que
ncessaire.
La quantit de mmoire vive installe sur chaque ordinateur est variable. On lexprime en multiples doctets
(mgaoctets ou gigaoctets). Si autrefois la mmoire tait compte, nos ordinateurs disposent aujourdhui de
mgaoctets, voire de gigaoctets, et les programmeurs ont la fcheuse tendance lutiliser sans compter. Voici
quelque exemples de tailles
Donne
Le caractre x
Le nombre 500
Le nombre
La phrase "japprends le C"
Une page de manuel

Nombre doctets ncessaires


1
2
4
25
Environ : 3 000

La mmoire RAM est sollicite de faon squentielle et chaque octet est identifi par une adresse unique gre
automatiquement par votre compilateur.

b. Les variables
Une variable est le nom dune zone mmoire de votre ordinateur. En utilisant ce nom dans votre programme, vous
adressez la donne qui y est stocke.
A retenir : Les noms de variable doit
contenir des lettres, des chiffres.
Le premier caractre doit tre une lettre. Le caractre ( ) est aussi autoris, mais dconseille.
Les lettres majuscules sont diffrentes des minuscules. Par exemple, compte et Compte ne reprsentent
pas la mme variable.
Il ne faut pas utiliser les mots cls, ils font partie du langage C.
Utiliser des noms de variables mnmotechniques. Se fixer une convention pour les noms de variables.

6/5

c. Les types de variables numriques


Tableau 3.2 : Les types de donnes numriques en C (reprsentation ILP32)
Type de variable

Mot cl

Intervalle des valeurs

char
short
int
long
unsigned char
unsigned short
unsigned int
unsigned long
float

Octets
ncessair
es
1
2
4
4
1
2
4
4
4

Caractre
Entier court
Entier
Entier long
Caractre non sign
Entier court non sign
Entier non sign
Entier long non sign
Simple prcision virgule
flottante
Double prcision virgule
flottante

double

2,2 10308 1,8 10308 (prcision 10-19 prs

128 127
32 768 32 767
2 147 483 648 2 147 438 647
2 147 483 648 2 147 438 647
0 255
0 65 535
0 4 294 967 295
0 4 294 967 295
1,21038 3,4 1038 (prcision 10-7 prs)

Remarque
La prcision dune variable dpend du type de votre matriel. Sur un ancien systme 16 bits, long et int nont pas
la mme taille.
La commande sizeof() permet de donner la taille dune variable.
Exemple :

Exercice
Ecrire un programme qui affiche la taille de chacune de type des variables du tableau 2.
Remarque
On peut crer un synonyme pour un type de donne existant. Par exemple, dans mon programme je veux utiliser
entier au lieu de int . Pour cela on utilise le mot cl typedef :
7/5

Linstruction : typedef int entier;


cre le synonyme entier pour int . Vous pourrez ainsi utiliser entier pour dfinir des variables de type
int , comme dans lexemple suivant :
entier compte;

d. Les constantes
Une constante est un emplacement mmoire utilis par votre programme. linverse dune variable, la valeur
stocke dans une constante ne peut changer pendant lexcution du programme. Le langage C possde deux types
de constantes qui ont chacune un usage spcifique.
Les constantes littrales
Une constante littrale est une valeur qui est introduite directement dans le code source. Voici deux exemples :
int count = 20;
float tax_rate = 0.28;

20 et 0,20 sont des constantes


littrales

Les constantes symboliques


Une constante symbolique est une constante reprsente par un nom (symbole) dans votre programme. Comme la
constante littrale, cette constante symbolique ne peut changer. Vous utilisez son nom dans le programme chaque
fois que vous avez besoin de sa valeur. Cette valeur doit tre initialise une fois au moment de la dfinition de la
variable.
Exemple
sans constate symbolique
perimetre = 3.14* (2 * rayon);
aire = 3.14 * (rayon) * (rayon);

avec constate symbolique


On dfinit une variable PI de valeur 3.14, puis
perimetre = PI* (2 * rayon);
aire = PI* (rayon) * (rayon);

Deux intrts :
Instructions facile comprendre
Lorsque jai besoin de modifier la valeur de PI, je le ferai une seule fois.
Comment ?
commande
#define PI 3.14159
const float PI = 3.14159;

Commentaire
pas de ;

Exemple dutilisation de variables et constantes


Ce programme demande lutilisateur dentrer son poids et son anne de naissance. Il affiche ensuite le poids
de lutilisateur en grammes et lge quil avait en lan 2000.
Vous pouvez saisir, compiler.

8/5

1: /* Exemple dutilisation de variables et de constantes */


2: #include <stdio.h>
3: #include <stdlib.h>
4: /* Dfinition dune constante pour convertir les livres en grammes */
5: #define GRAMS_PAR_LIVRE 454
6:
7: /* Dfinition dune constante pour le dbut du sicle */
8: const int DEBUT_SIECLE = 2000;
9:
10: /* Dclaration des variables requises */
11: int poids_en_grams, poids_en_livres;
12: int an_naissance, age_en_2000;
13:
14: int main()
15: {
16:
/* Lecture des donnes de lutilisateur */
17:
18:
printf("Entrez votre poids en livres : ");
19:
scanf("%d", &poids_en_livres);
20:
printf("Entrez votre anne de naissance : ");
21:
scanf("%d", &an_naissance);
22:
23:
/* conversions */
24:
25:
poids_en_grams = poids_en_livres * GRAMS_PAR_LIVRE;
26:
age_en_2000 = DEBUT_SIECLE an_naissance;
27:
28:
/* Affichage des rsultats */
29:
30:
printf("\nVotre poids en grammes = %d", poids_en_grams);
31:
printf("\nEn lan %d vous avez eu %d ans.\n",
32: DEBUT_SIECLE,age_en_2000);
33:
34:
exit(EXIT_SUCCESS);
: }

9/5

Exercice 1.
a. Que se passera-t-il si jessaye de stocker un nombre dcimal dans un entier ?
b. (i) quaffichera le bout de programme
unsigned short var=-1 ;
printf("La valeur de var est %hu \n",var) ;
(ii) le tester, puis expliquer

1.

2.
3.
4.

Exercice 2 .
Quel type de variable convient le mieux pour stocker les valeurs suivantes :
a. Lge dune personne.
b. Le poids dune personne.
c. Le rayon dun cercle.
d. Votre salaire annuel.
e. Le prix dun article.
f. La note la plus haute dun test (supposons que ce soit toujours 100).
g. La temprature.
h. Le gain dune personne.
i. La distance dune toile en kilomtres.
Donnez un nom appropri chaque variable de lexercice 1.
crivez les dclarations pour les variables de lexercice 2.
Dans la liste suivante, quels sont les noms de variable corrects ?
a. 123variable.
b. x.
c. score_total.
d. Poids_en_#s.
e. one.0.
f. gross-cost.
g. RAYON.
h. Rayon.
i. rayon.
j. cela_est_une_variable_pour_stocker_la_largeur

e. Oprateurs mathmatiques binaires


Tableau 4.2 : Les oprateurs mathmatiques binaires du langage C
Oprateur
Addition
Soustraction
Multiplication
Division
Modulo

Symbole
+
*
/
%

Opration
Additionne les deux oprandes
Soustrait la valeur du second oprande la valeur du premier
Multiplie les deux oprandes
Divise le premier oprande par le second
Donne le reste de la division du premier oprande par le second

Exemple
x+y
x- y
x*y
x/y
x%y

10/
5

Exemple

/* Utilisation de loprateur modulo */


/* ce programme converti le nombre de secondes que vous lui */
/* donnerez en heures, minutes, secondes. */
#include <stdio.h>
#include <stdlib.h>
/* Dfinition des constantes */
#define SECS_PER_MIN 60
#define SECS_PER_HOUR 3600
unsigned seconds, minutes, hours, secs_left, mins_left;
int main()
{
/* Saisie du nombre de secondes */
printf("Entrez le nombre de secondes (< 65 000): ");
scanf("%d", &seconds);
hours = seconds / SECS_PER_HOUR;
minutes = seconds / SECS_PER_MIN;
mins_left = minutes % SECS_PER_MIN;
secs_left = seconds % SECS_PER_MIN;
printf("%u secondes reprsentent ", seconds);
printf("%u h, %u m, et %u s\n", hours, mins_left, secs_left);
exit(EXIT_SUCCESS); }

f. Les oprateurs mathmatiques unaires


Les oprateurs unaires oprent sur une seule valeur ou oprande
Oprateur
Incrmentation

Symbole
++

Opration
Augmente de 1 la valeur de loprande

Exemples
++x, x++

Dcrmentation

--

Dcrmente de 1 la valeur de loprande

--y , y--

++x

x = x + 1; y

y = y 1;

En mode prfix (avant) : lincrmentation et la dcrmentation sont effectues avant lutilisation de


loprande.
Si x = 10; et y = ++x; alors x vaut 11 et y vaut 11.
En mode postfix (aprs) : les oprateurs dincrmentation et de dcrmentation modifient
loprande aprs son utilisation. Si x = 10; et y = x++; alors x vaut 11 et y vaut 10

11/
5

/* Dmonstration des modes prfix et postfix */


#include <stdio.h>
#include <stdlib.h>
int main(){
int a, b;
/* initialise a et b la valeur 5 */
a = b = 5;
/* on les affiche, en les dcrmentant chaque fois */
/* mode prfixe pour b, mode postfix pour a */
printf("\n%d %d", a , b);
printf("\n%d %d", a , b);
printf("\n%d %d", a , b);
printf("\n%d %d", a , b);
printf("\n%d %d\n", a , b);
exit(EXIT_SUCCESS);
}

Exemple

g. Les oprateurs de comparaison


Les oprateurs de comparaison sont utiliss pour comparer des expressions en posant des questions du type
"x est-il plus grand que 100 ?" ou "y est-il gal 0 ?". La valeur finale dune expression qui contient un
oprateur de comparaison est "vrai" (diffrent de 0) ou "faux" (0).
Tableau 4.4 : Les oprateurs de comparaisons du langage C
Oprateur
gal
Suprieur
Infrieur
Suprieur ou gal

Symbole
==
>
<
>=

Infrieur ou gal

<=

Diffrent

!=

Question pose
Le premier oprande est-il gal au second ?
Le premier oprande est-il plus grand que le second ?
Le premier oprande est-il plus petit que le second ?
Le premier oprande est-il suprieur ou gal au
second ?
Le premier oprande est-il infrieur ou gal au
second ?
Le premier oprande est-il diffrent du second ?

Exemple
x == y
x>y
x<y
x >= y
x <= y
x != y

Tableau 4.5 : Exemples dutilisations des oprateurs de comparaison


Expression
5 == 1
5>1
5 != 1
(5 + 10) == (3 * 5)

Signification
La valeur 5 est-elle gale 1 ?
5 est-elle plus grande que 1
La valeur 5 est-elle diffrente de 1 ?
Lexpression (5 + 10) est-elle gale (3 * 5) ?

Valeur
faux
? vrai
vrai
vrai

12/
5

2. Les instructions conditionnel


1. Enbranchement if---else
Exemple : combine de solution possde lquation suivante
Algorithme
Si (delta >=0)
afficher(lquation a au moins une solution)
sinon
afficher(lquation na aucune solution);

En C
If (Delta >=0)
{ printf(le trinome a au moins une
racine)}
Else {printf(le trinome nadmet pas de racine)}

Syntaxe :

En algorithmique
Si condition alors
instruction1(s)
Sinon
instruction2(s)
FinSi

En C
if (condition)
{instruction1(s) ;}
else
{instruction2(s) ;}

Remarque.
1. Pour crire une condition, on dispose des relations mathmatiques habituelles :
Symbole mathmatique
=
<
>

criture en C
==
!=
<
>
<=
2. On peut tester plusieurs conditions simultanment.
operateur logique
Notation
Exemple
si
&&
if ((a>0) && (b<0)) { instructions}
ou
||
if ((a>0) || (b<0)) { instructions}
ngation
!
if( !(a>0)) {instructions}

>=

13/
5

Un exemple graphique
Exemple Bataille navale

Ouvrir dans lditeur geany, le code contenu dans le fichier bataille_navale.c :


Exercice bataille navale. bataille_navale.c
#include <stdio.h>
#include "graphics.h"
int main() {
/* Dclarer les variables ci-dessous */
POINT P,Q,A,B;
/* Initialisation de la fentre graphique */
init_graphics (800,600);
/* Affectation*/
A.x = WIDTH/2 - largeur_texte("Cliquer dans la fentre",20)/2;
A.y = 2*hauteur_texte("Cliquer dans la fentre",20);
B.x = WIDTH/2 - largeur_texte("Cliquer dans la fentre",20)/2;
B.y = HEIGHT - 2*hauteur_texte("Cliquer dans la fentre",20);
P.x=WIDTH/2; // abscisse du milieu de la fenetre
P.y=HEIGHT/2; // ordonne du milieu de la fenetre
aff_pol("Bataille Navale : A toi de jouer",20,B,rouge); // 20 est la taille de la police de couleur rouge
aff_pol("Cliquer dans la fentre ",20,A,rouge);
Q =wait_clic();
if ( Q.x == P.x || Q.y == P.y)
{ aff_pol("Gagn",20,Q,gris); }
else
{ aff_pol("Perdu",20,P,gris);}
/* Permet dattendre un appui sur Echap */
wait_escape();
exit(0);
}

Exercices
Exercice 1.

1. Tester le programme bataille_navale.c


2. Modifier le contenu de bataille_navale.c pour quil dessine un cercle lorsqu'on perd et un
disque de rayon 50 si on gagne.

Exercice 2.
Ecrire un algorithme max2 et un programme max2.c qui retourne le maximum de deux nombres
rels donns par lutilisateur.

14/
5

Exercice 3.
Ecrire un algorithme discriminant et un programme discriminant.c qui calcule le discriminant dun
trinme de second degr.

Exercice 4. Clic 1

1. Afficher une ligne verticale en blanc qui spare lcran en deux parties gales.
2. Attendre un clic de lutilisateur. Si le clic est gauche de la ligne afficher un cercle bleu et sil
est droite afficher un cercle rouge.
Dans les deux cas, le cercle devra tre centr l o lutilisateur a cliqu.
Exercice 5. Clic 2

1. Afficher une ligne verticale en blanc qui spare lcran en deux parties gales.
2. Attendre un clic de lutilisateur. Si lutilisateur clique droite de la ligne, afficher un cercle bleu
la mme ordonne mais gauche de lcran (abscisse au choix) et vice versa (si le clic est
gauche, afficher le cercle droite).

Exercice 6 Double clic


1. Afficher une ligne verticale en blanc qui spare lcran en deux parties gales.
2. Attendre deux clics. Si les deux clics sont chacun dun ct de la ligne verticale afficher une
ligne rouge reliant les deux points o lutilisateur a cliqu. Si les deux clics sont du mme ct de
la ligne verticale afficher une ligne bleu reliant ces deux points.

15/
5

Programmation Le langage C
TP 3
Remarque Importante
Les exemples de ce TP comme pour les TP prcdents servent illustrer et exprimenter les techniques de
programmation C abordes. Vous devez les saisir et les excuter, puis manipuler ventuellement le code pour
trouver dautres applications. Ces sections sont destines lexprimentation.

3. Les instructions de contrle


Instructions, Blocs
Une instruction se termine par un point-virgule (;)
Les expressions (variables, constantes) peuvent tre combines ensemble l'aide d'oprateurs
pour former des expressions plus complexes.
Elles peuvent contenir des appels des fonctions
Diffrentes instructions peuvent tres rassembls en bloc l'aide d'accolade ({ et })
Slection
Test simple
Test choix multiple
Itrations
Boucles
Ruptures
Avec break
a) Conditionnelle (Rappel)
Simple (dj rencontr ) ou Complte, Imbriqu ou Non
En pseudo code : Si condition Alors instructions

en C : : if (condition) {instruction;}

A noter
Un else se rapporte toujours au dernier if rencontr auquel un else na pas encore t attribu.
Exemple :
if ( condition1 ) {
if ( condition1 )
if ( condition2 )
instruction1;
else

if ( condition2 )
instruction1;
else
instruction2;

instruction2;

if ( condition1 )
instruction1;
else {
if ( condition2 )
instruction2;
else
instruction3;
}

if ( conditions 1 )
{instructions 1;}
else if ( conditions 2 )
{instruction2;}
else
{instructions 3;}

16/
5

Exemple
#include <stdio.h>
#define TAUX_TVA 19.6
int main() {
float ht, ttc, net, tauxr, remise ;
printf("donnez le prix hors taxes : ") ;
scanf ("%f", &ht) ;
ttc = ht * ( 1. + TAUX_TVA/100.) ;
if ( ttc < 1000.) tauxr = 0 ;
else if ( ttc < 2000 ) tauxr = 1. ;
else if ( ttc < 5000 ) tauxr = 3. ;
else tauxr = 5. ;
remise = ttc * tauxr / 100. ;
net = ttc - remise ;
printf ("prix ttc %10.2f\n", ttc) ;
printf ("remise %10.2f\n", remise) ;
printf ("net a payer %10.2f\n", net) ;
}

Les oprateurs logiques


Les oprateurs logiques de C permettent de vrifier plusieurs comparaisons dans une mme question.
Par exemple
sil est 7 heures du matin, un jour de semaine, et que je ne suis pas en vacances, faire sonner le rveil .
Oprateur
ET

Symbole
&&

OU

||

NON

Description
exp1 && exp2 (Vraie si exp1et exp2
vraies. Sinon faux )
exp1 || exp2 : Vraie si exp1vraie ou
exp2vraie. Faux si les deux
expressions sont fausses.
!exp1 : Faux si exp1est vraie. Vraie si
exp1est fausse.

Exemple
if ( x<1 && x>0)
{printf(" %f est compris entre 0 et 1 ",x) ; }
if ( x<1 || x>0)
{printf(" %f est un rel" ,x) ; }
if (x !=0)
{printf(" %f est non nul " ,x) ; }

Exemples dutilisation des oprateurs logiques


Expression
(5 == 5) && (6 != 2)
(5 > 1) || (6 < 1)
(2 == 1) && (5 == 5)
!(5 == 4)

Valeur
Vraie, car les deux oprandes sont vrais
Vraie, car un oprande est vrai
Faux, car un oprande est faux
Vrai, car loprande est faux

17/
5

Exercice
crivez une instruction if pour savoir si une personne est un adulte (21 ans), mais pas
une personne ge (65 ans).
Exercice
Corrigez le programme ci-contre.

/*Programme : Afficherles valeurs et


lintervalle *-1,1[
/* programme bogu */
#include <stdio.h>
#include <stdlib.h>
int main()
{ float x ;
Printf( "\n Entrer une valeur de x : ") ;
scanf("%f",x) ;
if ( -1<= x <1);
printf("x gal 1");
sinon
printf("x nest pas gal 1");

exit(EXIT_SUCCESS)
}
b) Choix Multiple
Lorsque plusieurs alternatives se prsentent. L'imbrication est peu recommande.
En pseudo code

En C

Selon expression faire


dans le cas o expression =val1 : faire A1
dans le cas o expression =val2 : faire A2
...
sinon : faire Ax

switch ( expression )
{
case val1 : instruction1.1;
instruction1.2;
case val2 instruction2;
case val3 :
case val4 : instruction4.1;
instruction4.2;
default : instructionD ;
}

Remarque
Dans le cas o aucune valeur satisfaisante naura t rencontre auparavant, le programme se branchera sur
Ltiquette default

18/
5

main(){

Exemple
Excuter ce programme
R-excuter ce programme sans linstruction
break . Interprter !

int n ;
printf ("donnez un entier : ") ;
scanf ("%d", &n) ;
switch (n) {
case 0 : printf ("zero \n") ;
break ; //sortie forc de switch
case 1 : printf ("un\n") ;
break ;
case 2 : printf ("deux\n") ;
break ;
default : printf ("au revoir\n") ;
break ;
}

Remarque

Cet exemple peut servie pour faire le menu dans programme.

c) Boucles (Itration)
Itrer :
Refaire plusieurs fois le mme traitement sur un objet
Faire des actions sur plusieurs objets identiques
Modifier les objets sur lesquels l'action est rpte
Exemples :
Afficher n fois le mme caractre
Calculer la somme des n premier entiers
Il faut donc exercer un contrle sur les instructions pour :
Recommencer au bon endroit
Compter le nombre d'itration et donc tre capable de
dterminer si oui ou non on doit recommencer

Boucle pour (boucle avec compteur)


En pseudo code
compteur : entier
Pour compteur allant de par pas de faire
instruction(s)
FinPour
Exemples
Compter de 1 10 (incrmentation)
Pour i allant de
par pas de faire
afficher i
FinPour
Compter de 10 1 (dcrmentation)
Pour i allant de 10 1 par pas de -1 faire
afficher i
FinPour

..
for (

En C
for ( initialisation ; condition ; in(d)crmentation )
{
instruction1;
instruction2;
}

{printf(%d, );}

for (
;
;
{ printf(%d, );}
.

) //

) //

19/
5

Compter de deux en deux


Pour i allant de 0 10 par pas de 2 faire
afficher i
FinPour

..
for (i=1 ; i <=10 ; i+=2) // i+=2 i=i+2
{ printf(%d, );}
..

Exercice
1) Ecrire un seul programme, qui affiche les rsultats des deux exemples prcdents ?
2) Le modifier pour afficher les 100 multiples de 7 suprieurs 10
Exercice
3) Quaffiche le programme ci-contre
4) Le modifier pour afficher ::

#include <stdio.h>
int main()
{ int i,j;
for (i=1 ; i <=10 ; i++)
{
printf("\n");
for (j=1;j< i ; j++)
printf("*");
}
printf("\n");
}

Exercice

1. Afficher une ligne verticale en blanc qui spare lcran en deux parties gales.
2. Attendre un clic de lutilisateur. Si lutilisateur clique droite de la ligne, afficher 10 cercle bleu
concentrique de rayon multiple de 20 la mme ordonne mais gauche de lcran (abscisse
au choix) et vice versa (si le clic est gauche, afficher les cercles droite).
Exercice
1) Ecrire un programme qui calcule la somme des 100 premiers entiers naturels :

2)
3)
4)
5)

Ecrire le programme permettant de calculer factoriel de 100 :


Ecrire le programme permettant de calculer factoriel de 100 :
Ecrire le programme permettant de calculer
.
Modifier ces programmes pour calculer ,
et , o N est entier naturel et
donne par lutilisateur.

.
.
un rel fourni en

20/
5

Boucle tant que


En pseudo code
Tant que Condition faire
instructions
FinTantque

EXEMPLE
TantQue i<10 faire
aa*i
i i+1
FinTantQue

En C
while ( condition ){
instruction1;
instruction2 ; }

int main(){
int i=0,a=2;
while (i<10) {
a=a*i;
i=i+1 ;

Remarque 1. La boucle tant que faire est Utilise lorsque :


La progression de la condition n'est pas rgulire
On ne sait pas au moment d'y entrer combien d'itrations sont faire
Remarque
Dune manire gnrale, nous pouvons dire que :
for (initialisation ; condition ; in(d)crmentation)
{
instructions ;
}

initialisation ;
while (condition)
{
instruction

in(d)crmentation;}
Exemple.
avec for
main()
{
int i ;
for ( i=1 ; i<=5 ; i++ )
{ printf ("bonjour ") ;
printf ("%d fois\n", i) ;
}
}
Boucle faire ... tant que
Pseudo code
Rpter
{instructions}
Tant que condition

n : entier
Faire {lire n ;
afficher " vous avez fourni n ", n
}
tanque (n0)

avec while
main()
{
int i ;
i=1;
while (i<=5){
printf ("bonjour ") ;
printf ("%d fois\n", i) ;
i++ ; }
}

En C
do {
instruction1;
instruction2;
} while ( condition );
main()
{
int n ;
do{
printf ("donnez un nb >0 : ") ;
scanf ("%d", &n) ;
printf ("vous avez fourni %d\n", n) ;
}
while (n<=0) ;
printf ("rponse correcte") ;}
21/
5

Remarque. La boucle faire . tant que est Utilise lorsque :


Les instructions sont toujours excuts au moins une fois
Si la condition est toujours vraie, on boucle indfiniment
Si la valeur initiale de la condition est fausse, la boucle n'est pas excute

Exercice
Quaffiche le programme ci-contre
Le modifier pour afficher le numro de lafffichage

Exercice

1. Que fait le programme ci-contre


2. Rcrire ce programme en utilisant :
la boucle while.
3. Les rsultats sont-ils diffrents ?

Exercice

On donne le programme ci-contre :


1. Que fait ce programme
2. crire un programme ralisant exactement
la mme chose, en employant, la place de
linstruction for :
a. une instruction while,
b. une instruction do... while.

i = 1;
while (i < 10)
{
printf("\n cuicui ");
i++;
}

int a;
do
{
printf("\n Entrez un entier entre 1 et 10 : ");
scanf("%d",&a);
}
while ((a <= 0) || (a > 10));

#include <stdio.h>
main() {
int i, n, sum ;
sum = 0 ;
for (i=0 ; i<4 ; i++)
{ printf ("donnez un entier ") ;
scanf ("%d", &n) ;
sum += n ;
}
printf ("Somme : %d\n", som) ;
}

22/
5

Annexe : exemples de fonctions prdfinies dans graphics.c.


Fonction Dfinie l'aide de la bibliothque graphics.h (SDL.h)

Commentaire

wait_escape()

on attend un escape :

init_graphics(int W, int H);

Cre une fentre de largeur W et de hauteur H

affiche_image(char *nomfic, POINT bg, int w, int h);

Affiche une image bmp

fill_screen(COULEUR color);

Remplissage de tout l'cran

draw_pixel(POINT p, COULEUR color);

Affichage un pixel

draw_line(POINT p1, POINT p2, COULEUR color);

Dessine un segment

draw_rectangle(POINT p1, POINT p2, COULEUR color);

Dessine un rectangle non rempli

draw_fill_rectangle(POINT p1, POINT p2, COULEUR color);

Dessine un rectangle rempli

draw_circle(POINT centre, int rayon, COULEUR color)

Dessine un cercle non rempli

draw_fill_circle(POINT centre, int rayon, COULEUR color)

Dessine un cercle rempli

draw_circle_HD(POINT centre, int rayon, COULEUR color)

Dessine un quart de cercle en haut droite

draw_circle_BD(POINT centre, int rayon, COULEUR color)

Dessine un quart de cercle en bas droite

draw_circle_HG(POINT centre, int rayon, COULEUR color)

Dessine un quart de cercle en haut gauche

draw_circle_BG(POINT centre, int rayon, COULEUR color)

Dessine un quart de cercle en bas gauche

draw_fill_ellipse(POINT F1, POINT F2, int r, COULEUR color)

Dessine une ellipse remplie

draw_triangle(POINT p1, POINT p2, POINT p3, COULEUR color)

Dessine un triangle

draw_fill_triangle(POINT p1, POINT p2, POINT p3, COULEUR color)

Dessine un triangle rempli

aff_pol(char *a_ecrire, int taille, POINT p, COULEUR C)

Affiche du texte en couleur

write_text(char *a_ecrire)

Affiche un texte tap au clavier.

write_int(int n)

Renvoie l'entier tap au clavier.


23/
5

24/
5