Initiation
la programmation C
N. Chenfour 1
Chapitre 1 :
Rsum :
- Le programme est charg depuis le Disque Dur vers la mmoire (qui est contenu
volatil, mais accs trs rapide par rapport au disque dure).
- Chaque instruction sera dpose dans un registre dinstruction, traite par le bloc
de dcodage et excution des instruction. Si linstruction comporte ladresse dune
donne (Mov Ax, X),
N. Chenfour 2
- Pour faciliter la tche aux dveloppeurs, il fallait inventer un langage de
programmation (Le langage dassemblage) + le traducteur [Langage dassemblage
Binaire] (ce dernier est appel ASSEMBLEUR).
MOV AX, X
ADD AX, Y
MOV Z, AX
- Ce code qui signifie (Z X + Y) sera transform en binaire pour tre excut par
le Microprocesseur.
- Lvolution a permis plus tard de crer des langages plus volus (proche de la
syntaxe humaine). Linstruction devient par exemple (en Langage C) :
Z=X+Y;
void main() {
Instructions
N. Chenfour 3
II. Dclaration de variables
- Une variable peut tre globale ou locale au main. Si elle est dclare dans le main,
alors ces une variable locale (elle ne peut tre utilise que dans le main).
- Pour dclarer une variable, il faut lui donner un nom (significatif) et un type.
1. int : permettant de grer des entiers signs : 2 Octets de valeurs entre -32768 et
32 767. exemple : ages, quantits, annes, mois, etc
2. float : permettant de grer des valeurs rels sur 4 Octets. Exemples : salaires, prix
en DH, etc
- Les noms de variables, appels identificateurs, sont forms comme une suite de
lettres de chiffres et de blancs souligns ( _ ), qui commence par une lettre ou un
_ : alpha, a2, prix_unitaire, 2A, t, t#,
Exemple :
int a1=20, a2, a3=10 ;
float x1=14.5, y1 ;
char c = A ;
N. Chenfour 4
Liste des types de donnes standards
N. Chenfour 5
Exemples :
1. on a 2 variable X et Y et on veut changer leur valeur :
int X = 20, Y = 30 ;
on a besoin dune 3me variable Z :
int Z ;
en suite :
Z = X ;
X = Y ;
Y = Z ;
Remarque :
Attention, le langage C est sensible la casse, cd : X diffrent de x, int # Int,
Conversions implicites :
int X = 20.5 ; 20
char c = 65 ; A
int x = A ; 65
float x ;
x=1/2;0
Rgle : une expression sur des entiers donne un rsultat entier
Pour rsoudre le problme, il suffit que lune des valeurs soit un rel :
x = 1.0 / 2 ; x = 1 / 2.0 ; x = 1. / 2 ; x = 1 / 2. ; 0.5
Pb. Si les oprandes sont des variables :
int a =1, b=2 ;
float x = a / b ; 0
Solution 1 :
float x = 1. * a / b; 0.5
Solution 2 : le Casting Transtypage Transformation de type explicitement
float x = (float)a ;
#include <stdio.h>
#include <conio.h>
void main() {
int a=1, b=2;
float x;
x = (float)a / b;
clrscr();
printf("%f", x); 0.5 ;
}
N. Chenfour 6
IV- Les Entres/Sorties
4.1 Affichage :
Ralis par lintermdiaire de la fonction printf().
Syntaxe :
printf("chane de spcification de format", arg1, arg2, )
Informations afficher, de
type lmentaire qq (int,
float, char, ). On peut
Messages + descripteur de aussi fournir des
fromat constantes : 20, 30, a,
Les descripteurs de format, on utilisera :
%d pour afficher les entiers (int)
%f pour laffichage des rels (float)
%c pour laffichage des cractres (char).
Remarque 1 :
Dans la chane de spcification de format, on utilisera autant de spcificateurs de
format (%?) que darguments :
Exemple :
,
printf ("..%d.%c.%f.%d" arg1, arg2, arg3, arg4) ;
Si pour lexemple on na pas utilis le dernier (%d), alors arg4 ne sera pas affich.
Remarque 2 :
Le type des arguments correspond celui des spcificateurs de format : arg1 est
un entier, arg2 un char, arg3 un float et arg4 un int.
Remarque 3 :
Il existe cependant une possibilit de conversion automatique du type de donnes lors
de laffichage laide des descripteurs de format :
char c = A ;
printf("%d", c) ; 65 (code ascii de A) ;
int a = 65 ;
printf("%c", a) ; A (caractre de code ascii de 65) ;
float x = 3.4 ;
printf("%d", (int)x) ; 3 (partie entire) ;
int i = 30 ;
printf("%f", (float)i ) ; 30.0000
Remarque 4 :
La chane de caractres peut comporter des caractres de contrles :
\n : retour chariot ( le symbole \ avec le caractre suivant constitue un seule caractre).
\t : tabulation
\b : backspace (retour arrire)
\" : pour afficher des guillemets
\\ : pour afficher \
N. Chenfour 7
Remarque 5 :
La fonction printf peut tre utilise sans les arguments (arg1, arg2, ), son objectif
serait alors un simple affichage dun message dinvitation (gnralement utilis avant un
scanf) :
printf("entrer un entier : ") ;
scanf("%d", &x) ;
2. Les rels :
printf("%taille.ncavf", x) ;
avec taille est une constante qui dfinie la taille de la zone daffichage en nombre de
caractres et ncav : le nombre de chiffre aprs la virgule.
printf("%20.2f", x) ;
lentier x sera affich sur un emplacement de 20 caractres en compltant par des espaces
gauche, avec 2 chiffres aprs la virgule
printf("%.2f", x) ;
Remarque :
Si on veut liminer la partie flottante dans laffichage :
printf("%.0f", x) ;
Remarque :
Pour utiliser des couleurs lors de laffichage, il faut utiliser la fonction : cprintf au lieu
de printf. Celle-ci a la mme syntaxe dutilisation.
Exemple :
#include <stdio.h>
#include <conio.h>
void main() {
clrscr();
system("cls");
textcolor(14);
system("COLOR 27");
textbackground(3);
printf("Bonjour");
clrscr();// pour donner la couleur de fond tout lcran
cprintf("un message en rouge\n");
getchar();
getch();
}
N. Chenfour 8
4.2 La saisie :
4.2.1 fonction scanf() :
Sa syntaxe ressemble celle de la fonction printf avec 2 diffrences :
1. dans la chane, on utilise uniquement les descripteurs de format
2. les arguments sont prcds par le symbole & pour dsigner leurs adresses.
Remarque 1 :
Pour le cas de scanf() est ncessaire de respecter le format des argument laide des
descripteurs de format.
Remarque 2 :
La fonction scanf nest jamais utilise pour afficher, donc jamais autre caractre que
les spcificateurs de format dans la chane du scanf.
Remarque :
On peut utiliser la fonction getchar() pour arrter lexcution du programme une
position donne, car getchar() attendra une touche (retour chariot) depuis le clavier. Dans ce
cas, on peut lutiliser comme suit :
getchar() ;
Tampon intermdiaire de
lecture (RAM)
Clavier
N. Chenfour 9
La fonction getch() effectue UNE LECTURE AU VOL, cd directement depuis le clavier, en
ne passant pas par le tampon intermdiaire.
Autres caractristiques :
1. pas besoin de valider par retour chariot
2. naffiche pas le caractre tampon
3. mme si le tampon est plein, la fonction getch() lit depuis le clavier
Les autres fonctions lisent depuis le tampon jusqu ce quil soit compltement consom.
Exemple 1 :
#include <stdio.h>
#include <conio.h>
void main() {
int x, y;
char c;
clrscr();
printf("Entrer un entier : ");
scanf("%d", &x);
Exemple 2 :
#include <stdio.h>
#include <conio.h>
void main() {
int x, y;
char c;
clrscr();
printf("Entrer un entier : ");
scanf("%d", &x);
getch();
}
N. Chenfour 10
V. Les Instructions de choix
5.1 Linstruction if :
Syntaxe :
- cas du if sans else :
if (condition) instruction ;
ou :
if (condition) {
instruction 1 ; Bloc dinstructions imbriqu
instruction 2 ;
}
Exemple :
#include <stdio.h>
#include <conio.h>
void main() {
float MHT, MTHT, TTVA=0.2, TVA, MT, Remise;
int Q;
clrscr();
MTHT = MHT * Q;
TVA = MTHT * TTVA;
MT = MTHT + TVA;
getch();
N. Chenfour 11
5.2 Les Conditions :
Rgles dcriture des conditions :
- Une condition est toujours dfinie entre les 2 parenthses :
if ( condition ) {
...
}
- On distingue entre les conditions simples (lmentaires) et les conditions
composes.
- Une condition lmentaire est une comparaison entre 2 valeurs, 2 variables, une
variable et une valeur ou gnralement 2 expressions en utilisant lun des
oprateurs de relation :
infrieur <
Infrieur ou gal <=
Suprieur >
Suprieur ou gal >=
Egal ==
Diffrent (not equal) !=
Exemple :
if (x < y)
if (2*x+3 >= 3*y)
Cas Particuliers :
1. Le true en C++ est reprsent par toute valeur non nulle
if ( X ) ...
if ( X != 0 ) ...
N. Chenfour 12
La liste des oprateurs logique est la suivante :
N. Chenfour 13
5.2 Linstruction switch :
Elle permet de raliser autrement une squence dinstructions if else if else if,
dans le cas de test dgalit sur une mme variable de type ordinal (entier ou caractre).
if ( X == a ) {
T1 ;
}
else if (X == b) {
T2;
}
else if (X == c) {
T3;
}
else {
T4;
}
switch ( X ) {
case a:
T1;
break;
case b:
T2;
break;
case c:
T3;
break;
default:
T4;
}
N. Chenfour 14
VI. les Boucles
6.1 la boucle while :
Cest un if dont le traitement est rpt tant que la condition est vrifie. on sorira de
la boucle lorsque la condition na plus la valeur vrai. La syntaxe est la suivante :
while ( Condition ) {
}
Exemple 1 :
Calculer la premire puissance de 2 >= 1000 : chercher le p tq : 2n = p, le n tant incunu
int p = 1 ;
int n = 0 ;
while (p<1000) {
p = p * 2 ;
n ++ ;
}
Printf("2 puissance %d est = %d\n", n, p) ;
La seule diffrence entre le while et le dowhile est la position du test. Pour le while elle se
trouve au dbut, alors que pour le dowhile elle est la fin. Le rsultat de ceci est que : pour
le while le traitement risque de ne jamais tre excut si la condition nest pas vrifie au
dbut alors que pour le cas de dowhile le traitement sexcute au moins une fois, car le test
est effectu aprs le traitement. En dehors de cette contrainte les 2 boucles sont quivalentes.
Lexemple prcdent peut donc tre ralis avec la boucle dowhile.
int p = 1 ;
int n = 0 ;
do {
p = p * 2 ;
n ++ ;
}
while (p<1000) ;
Printf("2 puissance %d est = %d\n", n, p) ;
Remarques :
1. Ces 2 boucles sont parfaitement adaptes au cas o on ne connat pas au pralable
le nombre de rptition
2. Les 2 boucle peuvent tout de mme tre utilises si on connat le nombre de
rptition :
N. Chenfour 15
Exemple 2 : afficher les entiers de 1 10 :
int i = 1 ; //initialisation
while (i<=10) {// le test
printf("%d\n", i); //Le traitement rpter
i++ ; // lincrmentation
}
Exemple 3 : afficher les nombres pairs entre 0 et n :
scanf("%d", &n) ;
int i = 0 ; //initialisation
while (i<=n) {// le test
printf("%d\n", i); //Le traitement rpter
i = i + 2 ; // lincrmentation
}
Exemple 4 : afficher les nombres pairs entre n et m :
int n, m , p, i ;
scanf("%d", &n) ;
scanf("%d", &m) ;
//permuter si n>m on aura en rsultat n < m
if (n>m) {
p = n ;
n = m ;
m = p ;
}
if (n%2==0) {// n est paire
// on commence par n
i = n; //initialisation
}
Else {// n est impaire
// on commence par n + 1
i = n + 1; //initialisation
}
while (i<=m) {// le test
printf("%d\n", i); //Le traitement rpter
i = i + 2 ; // lincrmentation
}
Exemple 5 : lire une rponse saisie au clavier qui doit tre obligatoirement o, n, O ou N :
do {
printf("Encore une note ? ");
reponse = getch();
printf("%c\n", reponse);
if (reponse!='o' && reponse!='O'
&& reponse!='n' && reponse!='N') {
printf("Rponse Incorrecte!");
}
}
while (reponse!='o' && reponse!='O'
&& reponse !='n' && reponse!='N');
N. Chenfour 16
Exemple 6 : Exercice : afficher les nombres premiers entre n et m.
Remarques :
1. Il y a une diffrence entre le for du langage Pascal est celui du langage C : avec le for
du langage Pascal, on ne peut utiliser for que si on connat le nombre de rptition
lavance. Le for du langage C est plus gnral et peut tre utilis mme si on ne
connat pas le nombre de rptition.
2. On va tout de mme rserver le for pour des cas o lon connat le nombre de
rptition lavance.
N. Chenfour 17