Université Moulay Ismail Année universitaire : 2020/2021
Faculté des Sciences et Techniques Filière MIP (S1) : Module I111
Département d’Informatique Prof Yousef FARHAOUI
Errachidia
Chapitre II (suite):
les éléments de base d’un
algorithme et leur représentation
en langage C
(De l’algorithmique au langage C)
Prof Yousef FARHAOUI 1 Filière MIP (S1) : Module I111
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
Prof Yousef FARHAOUI 2 Filière MIP (S1) : Module I111
Structure d’un programme C
#include<stdio.h>
Void main () {
Déclaration des variables
Corps
}
monProgramme.c
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
3
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
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
4
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
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
5
Compilation d'un programme C
Schéma simplifié de la compilation
#include <stdio.h>
void main()
{
printf(" Bonjour tout le monde ") ;
}
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
6
Compilation d'un programme C
Schéma: Bibliothèques de fonctions et compilation
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
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++
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
8
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 ;
X 4 X=4 ;
Ecrire("Donner Y ") printf("Donner Y");
Lire(Y) scanf("%d",&Y);
Ecrire(X+Y) printf("%d",X+Y);
Fin }
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
9
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>)
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
10
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> ;
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
11
De l’algorithmique au C
Traduction des déclarations d’un algorithme : variables
12
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
De l’algorithmique au C
Traduction des instructions : affectation
Exemple:
Prof Yousef FARHAOUI 13 Filière MIP (S1) : Module I111
De l’algorithmique au C
Traduction des instructions : écriture
Exemple :
14
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
De l’algorithmique au C
Exemple : Traduire en C l'algorithme suivant
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
15
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);
}
Prof Yousef FARHAOUI 16 Filière MIP (S1) : Module I111
De l’algorithmique au C
Traduction des instructions : lecture
Exemple :
Prof Yousef FARHAOUI 17 Filière MIP (S1) : Module I111
De l’algorithmique au C
Exemple : Traduire en C l'algorithme suivant
Prof Yousef FARHAOUI 18 Filière MIP (S1) : Module I111
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);
}
Prof Yousef FARHAOUI 19 Filière MIP (S1) : Module I111
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
Prof Yousef FARHAOUI 20 Filière MIP (S1) : Module I111
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, ...
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
21
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;
Prof Yousef FARHAOUI
22 Filière MIP (S1) : Module I111
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';
Prof Yousef FARHAOUI
23 Filière MIP (S1) : Module I111
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 */
Prof Yousef FARHAOUI 24
Filière MIP (S1) : Module I111
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
Prof Yousef FARHAOUI 25 Filière MIP (S1) : Module I111
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;
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
26
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
Prof Yousef FARHAOUI 27 Filière MIP (S1) : Module I111
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): = += -= *= /= %=
Prof Yousef FARHAOUI Filière MIP (S1) : Module I111
28
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
Prof Yousef FARHAOUI 29 Filière MIP (S1) : Module I111
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
Prof Yousef FARHAOUI 30 Filière MIP (S1) : Module I111
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
Prof Yousef FARHAOUI 31 Filière MIP (S1) : Module I111
É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) ;
Prof Yousef FARHAOUI 32 Filière MIP (S1) : Module I111
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();
Prof Yousef FARHAOUI 33 Filière MIP (S1) : Module I111
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
34
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
35
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
36