Représentation en langage C
(De l’algorithmique au langage C)
53
Structure d’un programme C
La structure d’un programme C est la suivante :
Votre programme doit
#include<stdio.h> Obligatoirement
void main () { contenir une fonction
principale
Déclaration des variables « main ( ) », qui est
Corps exécutée lorsque le
programme est lancé
}
monProgramme.c
54
Structure d’un programme C
#include<stdio.h>
Void main () {
Déclaration des variables
Corps
}
monProgramme.c
55
Structure d’un programme C
Mon premier programme : Bonjour tout le monde
#include <stdio.h>
void main()
{
printf(" Bonjour tout le monde ") ;
On sauvegarde ce programme dans un fichier qui se nomme
programme1.c
56
Structure d’un programme C
Mon premier programme : Bonjour tout le monde
La machine ne comprend que le langage machine
Il faut traduire mon programme programme1.c en langage
machine à l’aide d’un traducteur du langage C vers le langage
machine
Un programme appelé compilateur vérifie la syntaxe de mon
programme (on dit d’une façon générale, code source) et le
traduit en code objet, compris par le processeur
Le programme en code objet ainsi obtenu peut être exécuté sur la
machine
57
Compilation d'un programme C
Schéma simplifié de la compilation
#include <stdio.h>
void main()
{
printf(" Bonjour tout le monde ") ;
}
58
Compilation d'un programme C
Schéma: Bibliothèques de fonctions et compilation
59
Compilation d'un programme C
Quelques environnements de développement
Sous Windows Sous Linux
Eclipse Eclipse
Netbeans Netbeans
Visual C++ KDevelop
Turbo c++ …
Dev-C++
60
De l’algorithmique au C
Algorithme et programmation C
Algorithme somme #include <stdio.h>
variable X, Y: Entier void main ( ){
Début int X, Y ;
X4 X=4 ;
Ecrire("Donner Y ") printf("Donner Y");
Lire(Y) scanf("%d",&Y);
Ecrire(X+Y) printf("%d",X+Y);
Fin }
61
De l’algorithmique au C
Traduction de l’entête d’un algorithme
Syntaxe en pseudo-code: Syntaxe en langage C :
Algorithme <nom_algorithme> void main ( )
(éventuellement ajouter au début
du fichier #include<stdio.h>)
62
De l’algorithmique au C
Traduction des déclarations d’un algorithme : variables
Syntaxe en pseudo-code: Syntaxe en langage C :
variable<nom_variable> : <type_variable> <type_variable> <nom_variable> ;
63
De l’algorithmique au C
Traduction des déclarations d’un algorithme : variables
64
De l’algorithmique au C
Traduction des instructions : affectation
Exemple:
65
De l’algorithmique au C
Traduction des instructions : écriture
Exemple :
66
De l’algorithmique au C
Exemple : Traduire en C l'algorithme suivant
67
De l’algorithmique au C
Corrigé
#include<stdio.h>
Void main ( )
{
int A, B, C;
A = 3;
B=2;
printf(" Avant échange");
printf("La valeur de A =%d et de B =%d",A,B);
C=B;
B=A;
A=C;
printf(" Après échange") ;
printf("La valeur de A =%d et de B =%d",A, B);
}
68
De l’algorithmique au C
Traduction des instructions : lecture
Exemple :
69
De l’algorithmique au C
Exemple : Traduire en C l'algorithme suivant
70
De l’algorithmique au C
Corrigé #include<stdio.h>
Void main ( )
{
int A, B, C;
printf("Donner A");
scanf("%d",&A);
printf("Donner B");
scanf("%d ",&B) ;
C=B;
B =A;
A=C;
printf("Après échange") ;
printf("La valeur de A =%d et de B =%d",A, B);
}
71
Les Constantes caractères (Séquences d'échappement)
Une séquence d'échappement est un couple de symboles dont le premier
est le signe d'échappement '\'.
\a sonnerie \\ trait oblique
\b curseur arrière \? point d'interrogation
\t tabulation \' apostrophe
\n nouvelle ligne \" guillemets
\r retour au début de ligne \f saut de page (imprimante)
\0 NUL \v tabulateur vertical
72
Les opérateurs standards
Opérateurs arithmétiques Opérateurs logiques
+ addition && et logique
- soustraction || ou logique
* multiplication
/ division (entière et rationnelle!) ! négation logique
% modulo (reste d'une div. entière)
Opérateurs de comparaison
== égal à
!= différent de
<, <=, >, >= plus petit que, ...
73
Initialisation des variables
En C, il est possible d'initialiser les variables lors de leur déclaration:
Exemple:
int A,MAX = 1023;
char C,TAB = '\t';
float X = 1.05e-4;
Remarque:
int A=10; int A;
A=10;
74
Initialisation des variables
Les constantes
En utilisant l'attribut const, nous pouvons indiquer que la valeur d'une variable
ne change pas au cours d'un programme.
Exemple:
const int MAX = 767;
const double TVA = 0.25;
const double e = 2.7;
const char NEWLINE = '\n';
75
Commentaires
Les commentaires sont non seulement utiles, mais nécessaires à la
compréhension d'un programme.
Forme « standard » : /*... */ ou //…
Exemple:
a = a + 1; /* Ceci est un commentaire de ligne */
b = b - 1; /* Et ceci en est un autre */
76
Les opérateurs particuliers de C
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
77
Les opérateurs particuliers de C
Opérateurs d'affectation
+= ajouter à
-= diminuer de
*= multiplier par
/= diviser par
%= modulo
Exemple
A+=2; A=A+2;
A*=B A=A*B;
A%=B A=A%B;
78
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 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é)
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
var ++; Post-incrémentation
++ var; Pré-incrémentation
Exemple
Supposons que la valeur de N est égal à 5:
X = N++; Résultat: N=6 et X=5
X = ++N; Résultat: N=6 et X=6
79
Les priorités des opérateurs
Priorité 1 (la plus forte): ()
Priorité 2: ! ++ --
Priorité 3: */%
Priorité 4: +-
Priorité 5: < <= > >=
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
Priorité 9 (la plus faible): = += -= *= /= %=
80
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>
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
sin(X) cos(X) tan(X) sinus, cosinus, tangente de X
asin(X) acos(X) atan(X) arcsin(X), arccos(X), arctan(X)
sinh(X) cosh(X) tanh(X) sinus, cosinus, tangente hyperboliques de X
81
Les conversions de type
Les conversions de type automatiques
les valeurs des opérandes sont converties automatiquement dans un type
commun. Ces manipulations implicites convertissent en général des types plus
'petits' en des types plus 'larges';
char < short ≤ int ≤ long < float < double
Exemple
Pour le calcul de D, A est converti en float et divisé par C. Le
char A=3; résultat (0.75) est affecté à D qui est aussi du type float. On
int B=4; obtient donc: D=0.75
float C=4;
float D,E; Pour le calcul de E, A est converti en int et divisé par B. Le
char F; résultat de la division (type int, valeur 0) est converti en float.
D = A/C;
E = A/B; On obtient donc: E=0.000
F = A/C; Pour le calcul de F, A est converti en float et divisé par C. Le
résultat (0.75) est retraduit en char. On obtient donc: F=0
82
Les conversions de type
Les conversions de type forcées (casting)
Il est possible de convertir explicitement une valeur en un type quelconque en
forçant la transformation à l'aide de la syntaxe:
Casting (conversion de type forcée)
(<Type>) <Expression>
Exemple
La valeur de A est explicitement convertie
char A=3;
int B=4; en float. La valeur de B est automatiquement
float C;
C = (float)A/B;
convertie en float. Le résultat de la division
(type rationnel, valeur 0.75) est affecté à C.
Résultat: C=0.75
83
Écriture d'un caractère putchar('a');
putchar() c’est une fonction d’écriture d’un caractère.
Exemples
char A = 225;
char B = '\a';
int C = '\a';
putchar('x'); /* afficher la lettre x */
putchar('?'); /* afficher le symbole ? */
putchar('\n'); /* retour à la ligne */
putchar(65); /* afficher le symbole avec le code 65 (ASCII: 'A') */
putchar(A); /* afficher la lettre avec le code 225 (ASCII: 'ß') */
putchar(B); /* beep sonore */
putchar(C); /* beep sonore */
Remarque:
putchar(B); printf("%c",B) ;
84
Lecture d'un caractère getchar
getchar() c’est une fonction de lecture d’un caractère
Exemple:
int C;
Scanf("%c",&c);
C = getchar();
85
Exemple 1 : Traduire en C l'algorithme suivant
Algorithme Calcul
Variable A : Entier
C,B : Réel
D : caractère
E : Booléen
Début
A ← 30
B ←A* 2
Écrire('B=' , B)
C ← (B + A)/4
B←C/5
D ← ‘A’
E ← (A > 40) Ou (C < B)
Écrire('les valeurs obtenues sont : A = ' , A , 'B = ' ,B , ' C =’,C, ' D = ', D, ' E = ', E)
Fin
86
Exemple 2 : Traduire en C l'algorithme suivant
Algorithme Surface d’un cercle
Constante Pi=3.14
Variable Rayon : Entier * Donnée d’entrée*
Variable Surface : Réel * Donnée de sortie*
DEBUT
Écrire ( 'Saisir la valeur du rayon' )
Lire(Rayon)
Surface Rayon * Rayon * Pi
Écrire (' La Surface du cercle est : ', Surface)
FIN
87
Exemple 3 : Traduire en C l'algorithme suivant
Algorithme Commission
Constante M = 4000 * M: montant fixe*
Variable CA : Entier * Donnée d’entrée (CA: chiffre d’affaire) *
Com : Réel * Donnée intermédiaire (Com: commission )*
Sal : Réel * Donnée de sortie(Sal: salaire mensuel )*
DEBUT
Écrire ('Donner le CA mensuel en DHS')
Lire(CA)
Com CA * 10/100
Sal Com + M
Écrire ('Le salaire mensuel est de : ', Sal, ' en DHS ' )
FIN
88
• Structure alternative
Les conditions :
On appelle condition simple toute expression de la forme :
Variable 1 Opérateur Variable 2
Opération Signification
+ Addition
- Soustraction
* Multiplication
/ Division
% ou mod Modulo : le reste de la division de 2
valeurs entières
Pour exprimer les conditions, on utilise les opérateurs conditionnels suivants :
Opérateur Signification
= Égal
< Inférieur
> Supérieur
<= Inférieur ou égal
>= Supérieur ou égal
<> différent
On peut combiner des conditions à l’aide des opérateurs logiques :
Opérateur Signification
Et Et logique
Ou Ou logique
Non Négation logique
Ou = Xor Ou exclusif
Expression Résultat
(4 <7) ET (9>0) Vrai
(1 < 0) OU (1<>1) Faux
Non(13.4 < 15) Faux
Priorité de *, / div et % par rapport à + et -
5 + 9 * 3 = 32 et non 42
5*9+3 = 48 et non 60
Pour les opérateurs de même priorité, associativité à
partir de la gauche
15 / 5 * 3 = 9 et non 1
5 – 2 + 4 = 7 et non –1
On peut utiliser des parenthèses pour changer l’ordre
des opérations :
15 / (5 * 3) = 1
(5 + 9 ) * 3 = 42
Priorité de *, / div et % par rapport à + et -
5 + 9 * 3 = 32 et non 42
5*9+3 = 48 et non 60
Pour les opérateurs de même priorité, associativité à
partir de la gauche
15 / 5 * 3 = 9 et non 1
5 – 2 + 4 = 7 et non –1
On peut utiliser des parenthèses pour changer l’ordre
des opérations :
15 / (5 * 3) = 1
(5 + 9 ) * 3 = 42
Pour exprimer le fait que des instructions vont être exécutées
dans un cas alors que d’autres instructions peuvent être
exécutées dans l’autre cas, on utilise une structure alternative.
Syntaxe :
Si condition alors
Actions 1
[ Sinon
Actions 2] Option Facultative
Finsi
Titre : Test 1 Titre : Test 2
Variable x : entier Variable x : entier
Début Début
Écrire ('Saisir un entier x ') Écrire ('Saisir un entier x ')
Lire (x) Lire (x)
Si (x > 0) alors Si (x > 0) alors
Écrire('x est un nombre positif ') Écrire (' x est un nombre positif ')
Finsi Sinon
Fin Écrire (' x est un nombre négatif ou nul')
Finsi
Fin
Dans l’exercice précédent (Calcul la moyenne générale). Afficher
‘Admis’ si un étudiant a une moyenne générale >=10 et Afficher ‘Ajourné’
dans le cas contraire (Moyenne générale < 10).
Solution : …………….(Reste de l’algorithme)
Si (MG >= 10) alors
Écrire ('Admis')
Sinon
Écrire ('Ajourné')
Finsi
FIN
Écrire l’algorithme qui permet de calculer le
maximum de deux entiers quelconques.
Titre : Maximum
Variable a ,b, max : entier
Début
Écrire ('Saisir deux entiers a et b ')
Lire(a, b)
Si (a > b) alors
max a
Sinon
max b
Finsi
Écrire ('le maximum de ' , a , ' et de ' , b, ' est : ' , max)
Fin
L’instruction Selon cas constitue une structure
alternative à la forme en bloc [Si … Alors …Sinon…] et
permet de formuler de manière plus simple le choix du
groupe d’instructions.
Syntaxe : Suivant Cas variable Faire
Cas Valeur 1
Actions 1
Cas Valeur 2, Valeur3, Valeur 4
Actions 2
Cas Valeur 5 à Valeur 7
Actions 3
..
..
Sinon Cas
Actions N
Fin Suivant
Écrire l’algorithme qui permet de déterminer
le nombre de jours d’un mois d’une année donnée
….Reste de l’Algorithme
Selon Cas M Faire
Cas 2
Action 1
Cas 1, 3, 5, 7, 8, 10 , 12
Action 2
Cas 4, 6, 9, 11
Action 3
Sinon Cas
Écrire ( 'Attention : Mois Incorrect ')
Fin Suivant
FIN
Problème :
Écrire un algorithme permettant d’afficher 300 fois le message :
‘‘ bonjour tout le monde’’.
Solution Classique :
DEBUT
Écrire (' Bonjour tout le monde ') 1
Écrire (' Bonjour tout le monde ') 2
.
.
Écrire (' Bonjour tout le monde ') 300
FIN
On utilise cette instruction pour exécuter des actions tant
qu’une condition est réalisée.
Syntaxe :
<initialisation>
Tant que Condition Faire
<bloc de traitement>
<bloc de contrôle> Action
Fin tant que
Sémantique : Si condition = T
Tant que Valeur(T)=Vrai le bloc d'instructions R sera
exécuté.
Si valeur(T)=Faux on passe à l'instruction suivante.
Avec TANT QUE le test est fait à PRIORI.
Il se peut que l'on ne rentre jamais dans la
boucle.
La boucle n'est pas INCONDITIONNELLE. On
ne connaît pas à l’avance le nombre d'itérations.
Solution de l’exercice précédent :
Variable i : Entier
DEBUT
i 0 * Initialisation *
Tant que (i < 300) Faire
Écrire (' Bonjour tout le monde ')
i i+1
Fin tant que
FIN
Afficher tous les multiples de 9 inférieurs à 485
Titre : Multiples de 9
Variable M, i : Entier *i: variable intermédiaire: compteur*
DEBUT
i 0 * initialisation de la boucle*
M 0
Tant que (M < 485) Faire
i i+1 * incrémentation du compteur *
M i * 9
Écrire (M , ' est un multiple de 9 ' )
Fin tant que
FIN
Dans cet algorithme combien de fois la boucle est- elle exécutée ?
Titre : Boucle1
Variable i , y : Entier
Début
i i = variable intermédiaire
y0 = compteur
Tant Que (i<7) faire i i+1 = incrémentation
du compteur
i i+1
y y+i
Écrire (' y = ' , y)
Fin Tant que
Fin
On utilise cette instruction pour exécuter des actions
jusqu'à ce que une condition soit remplie.
Syntaxe :
<Initialisation>
Faire
<bloc de traitement>
<bloc de progression > Action
Jusqu’à Condition
Sémantique :
Si valeur(T)= Faux la boucle est à nouveau exécutée.
Si Valeur(T)=Vrai, on passe à l'instruction suivante.
Avec Faire jusqu’à le test est fait à POSTERIORI.
• Il y aura un passage dans la boucle. Le bloc
d’instructions sera exécuté au moins une fois.
• La boucle n’est pas INCONDITIONNELLE. On ne
connaît pas à l’avance le nombre d’itérations.
Titre : Boucle2
Variable i , y : Entier
Début
i
y0 Valeurs de y ?
faire
i i+1
y y+i
Écrire (' y = ' , y)
Jusqu’à (i >7)
Fin
Écrire un algorithme permettant de calculer, pour un
entier N> 0, la somme :
SN = 1 + 2 + 3 + …… + N
Variable N,S, i : Entier
DEBUT
Écrire (' Saisir une valeur entière positive :')
Lire (N)
S 0 * initialisation de la boucle*
i 0
Faire
i i + 1
S S + i
jusqu’à (i > =N)
Écrire (' La somme : S = ', S)
FIN
La spécification de cette instruction c’est qu’elle limite le
nombre de fois où doit se répéter le bloc Action
Syntaxe : La boucle est
<Initialisation> Inconditionnelle
On connaît à priori le
nombre d'itérations
Pour variable valeur1 à valeur2 faire
<Bloc de traitement>
Fin Pour
Écrire un algorithme permettant le calcul du factoriel
d’un entier N > 0 donné : N !
Titre : Factoriel
Variable N : Entier
i : Entier * i variable intermédiaire
F : Entier i = compteur *
DEBUT
Écrire (' Saisir une valeur entière N > 0: ')
Lire (N )
F 1 * initialisation de la boucle*
Pour i 1 à N Faire
F F*i
Fin Pour
Écrire (' Le factoriel de ', N , ' est : ' , F)
FIN
Écrire l’algorithme permettant de calculer la
moyenne des notes de N étudiants
Titre : Moyenne
Variable N, i : Entier
note, S, Moy : Réel
DEBUT
Écrire (' Saisir le nombre d’étudiants: ')
Lire (N)
S 0 * initialisation de la boucle*
Pour i 1 à N faire
Écrire (' Saisir la note de l’Etudiant ' , i , ' : ')
Lire (note)
S S + note
Fin Pour
Moy S/N
Écrire (' La moyenne est : ', Moy)
FIN
Si nombre d'itérations connu Alors
Boucle Pour
Sinon
Si itération exécutée au moins une fois Alors
Boucle Faire jusqu’à
Sinon
Boucle Tant que faire
Remarques: Soient T une condition et R l’action. Alors il y a équivalence
entre les boucles Tant que faire et Faire jusqu’à. La syntaxe est la suivante:
Si T alors
Tant Que T faire Faire
R ~ R
Fin Tant Que Jusqu ’à non(T)
FinSi
Et
Faire R
Tant Que non(T) faire
R ~ R
jusqu ’à T Fin Tant Que
1- Écrire un algorithme permettant de déterminer le Nème
terme d’une suite numérique connaissant son premier
terme et ses coefficients a et b et tels que:
Un = a * Un-1 + b 1 n N
2- Écrire un algorithme permettant de définir le
rang N et le terme correspondant de la suite tels que
UN > 1000
1) Le nombre d’itérations est connu : Boucle Pour
Variable N, i : Entier
Variable a, b, S : Réel
DEBUT
Écrire (' Saisir la valeur de N: ')
Lire (N)
Écrire ('Saisir la valeur du premier terme et les coefs a et b:')
Lire (S , a, b )
Pour i 1 à N faire
S a * S + b
Fin Pour
Écrire ( ' Le terme d’’ordre:’, N, ‘est : ', S )
FIN
2) Le nombre d’itérations inconnu : Boucle Faire jusqu’à
Variable N : Entier
Variable a, b, S : Réel
DEBUT
Écrire ('Saisir la valeur du premier terme et les coefs a et b:')
Lire (S , a, b)
N 0
Faire
S a * S + b
N N + 1
Jusqu’à S > 1000
Écrire (' La somme de la série est : ', S)
Écrire (' Le rang est : ', N )
FIN