Vous êtes sur la page 1sur 22

La programmation en langage C

01/13/2022 1
Etapes de Programmation
 Edition de programme source : se fait à
l’aide d’un éditeur de texte. Le nom de fichier a pour extension
« .c » ou « .cpp » (pour le c++).

 Compilation du programme source :


création des codes machines déstinés au microprocesseur
utilisé. Génération d’un fichier objet « .obj »

 Edition des liens : code machine des fonctions


bibliothéques utilisées + code des fichiers « .obj »  génération
d’un fichier « .exe »

01/13/2022 2
Exemple d’un programme en C

/* Exemple de programme en C */ Commentaire


#include <stdio.h> Directives au
#define N 39 préprocesseur
main()
{ Begin
int Numero; Déclaration de
variable
Numero = N;
Assignation Fonction
printf(“Nous allons reussir.\n”);
printf()
printf(“Mon numero est le %d\n”, Numero);
}
End
Bloc
01/13/2022 3
Anatomie d’un programme en C
Programme typique en C

include
Main() toujours la
1ere fonction appelée
main()

fonction a() instructions

fonction b() instructions

instructions
01/13/2022 4
Types de base
– char : caractère (en général 8 bits), qui peuvent aussi être
déclarés explicitement signés (signed char) ou non signés
(unsigned char),

– int : entier (16 ou 32 bits, suivant les machines), qui


possède les variantes short [int] et long [int], tous trois
pouvant également être declarés non signés (unsigned),

– float : réel (1 mot machine),

– double : réel en double précision (2 mots machines), et sa


variante long double (3 ou 4 mots machine),

– void qui spécifie un ensemble vide de valeurs.

01/13/2022 5
Opérateurs
• Opérateurs arithmétiques
+ addition
- soustraction
* multiplication
/ division (entière ou réelle)
% modulo (sur les entiers)

• Opérateurs relationnels
> >= <= < comparaisons
== != égalité et inégalité
! négation (opérateur unaire)
&& ET relationnel
|| OU relationnel

01/13/2022 6
Opérateurs logiques

Ce sont les opérateurs permettant d’effectuer des


opérations au niveau des bits (masquages).
• & AND. Exemple: a & 0x000F extrait les 4 bits de
poids faible de a.
• | OR. Ainsi, b = b | 0x100 met à 1 le 9ème bit de b.
• ^ XOR.
• << SHIFT à gauche. a = b << 2 met dans a la
valeur de b où tous les bits ont été décalés de 2
positions vers la gauche.
• >> SHIFT à droite.
• ~ complément à 1 (opérateur unaire).

01/13/2022 7
LES ENTRÉES-SORTIES
LES POSSIBILITÉS DE LA FONCTION PRINTF
le premier argument de printf est une chaîne de caractères qui spécifie à la fois :
-des caractères à afficher tels quels,
-des "codes de format'' repérés par %. Un "code de conversion" (tel que c, d ou f) y précise le
type de l'information à afficher.

Les principaux codes de conversion


c char: caractère affiché ''en clair" (convient aussi à short ou à int compte tenu des
conversions systématiques)
d int (convient aussi à char ou à int, compte tenu des conversions systématiques)
u unsigned int (convient aussi à unsigned char ou à unsigned short, compte tenu des
conversions systématiques)
ld long
lu unsigned long
f double ou float (compte tenu des conversions systématiques float - > double) écrit en
notation "décimale" avec six chiffres après le point (par exemple: 1.234500 ou
123.456789)
e double ou float (compte tenu des conversions systématiques float - > double) écrit en
notation ‘’exponentielle’’ (mantisse entre 1 inclus et 10 exclu) avec six chiffres après le
point décimal, sous la forme x.xxxxxxe+yyy ou x.xxxxxxe-yyy pour les nombres positifs et
-x.xxxxxxe+yyy ou -x.xxxxxxe-yyy pour les nombres négatifs
s chaîne de caractères dont on fournit l'adresse

01/13/2022 8
LES ENTRÉES-SORTIES
LES POSSIBILITÉS DE LA FONCTION SCANF
l'opérateur & désignr l'adresse de la variable pour laquelle on souhaite lire une
valeur.
cette fonction possédait une certaine ressemblance avec printf et qu'en particulier
elle faisait, elle aussi, appel à des ''codes de format''.

Les principaux codes de conversion de scanf


c char
d int
u unsigned int
hd short int
hu unsigned short
ld long int
lu unsigned long
f ou e float écrit indifféremment dans l'une des deux notations: décimale
(éventuellement sans point, c'est-àdire comme un entier) ou exponentielle (avec
la lettre e ou E)
lf ou le double avec la même présentation que ci-dessus
s chaîne de caractères dont on fournit l' adresse

01/13/2022 9
Exercice
a et b sont des entiers :
a = -21b = 4
Calculer et afficher :
• S = a + b;
• D = a - b;
• P = a * b;
• R = a / b.

01/13/2022 10
Les pointeurs
• Un pointeur contient l’adresse d’une
autre variable.

• Déclaration:
 int *p;

01/13/2022 11
Les pointeurs
• Utilisation:

 int *p, N;
 p = &N;
• Contenu de p = adresse de addr
 *p = 30
• Même effet que N = 30

01/13/2022 12
Les pointeurs et les Tableaux
• Déclaration:
float *Tab1;
float Tab2[30];

• Utilisation:
 Tab1 = Tab2;
ou Tab1 = &Tab2[0];

01/13/2022 13
Les pointeurs et les Tableaux
• Accès à une valeur dans le tableau
(vecteur):
 *(Tab1+3) équivalent à Tab1[3]

• Balayage simple avec ++Tab1

01/13/2022 14
Fonctions en C
/* Routine de calcul du maximum */
int imax(int n, int m)
{ Déclaration de la fonction
int max;
Variable locale
if (n>m)
max = n;
else
max = m; Valeur retournée par la fonction
return max;
}

01/13/2022 15
Fonctions en C
• Fonctions sans arguments et ne
retournant pas de valeur.
 void fonction(void)

• Fonctions avec arguments ne


retournant pas de valeur.
 void fonction(int x, int y, char ch)

01/13/2022 16
Fonctions en C
• Les fonctions exigent la déclaration d’un
prototype avant son utilisation:

/* Programme principal */
#include <stdio.h>
int imax(int,int);
main() Prototype de la fonction
{ … }

int imax(int n, int m)


{ … } La fonction est définie ici
01/13/2022 17
Boucle « for »

/* Boucle for */ Initialisation


#include <stdio.h>
#define NUMBER 22 Condition de fin
main() de boucle
{
int count;

for(count =1; count <= NUMBER; count++)


printf(“Iteration Numero %d !!!\n”,count);
}

Incrémentation
01/13/2022
et autres fonctions 18
Boucle « while »

/* Boucle while */
#include <stdio.h> Initialisation
#define NUMBER 22
main() Condition de fin de boucle
{ (boucle tant que vrai)
int count = 1, total = 0; (boucle faite que si vrai)

while(count <= NUMBER)


{
printf (“Iteration Numero %d !!!\n”,count);
count++;
total += count;
Incrémentation
}
printf(“Le
01/13/2022
total est %d\n”, total); 19
}
Boucle « do while »

/* Boucle do while */
#include <stdio.h> Initialisation
#define NUMBER 22
main() Incrémentation
{
int count = 1, total = 0; Condition de fin de boucle
do (boucle tant que vrai)
{ (boucle faite au moins 1 fois)
printf (“Iteration Numero %d !!!\n”,count);
count++;
total += count;
} while(count <= NUMBER);
printf(“Le
01/13/2022
total est %d\n”, total); 20
}
Choix multiple: « switch
case »
/* Utilisation de switch case */
main() Paramètre de décision
{
char choix;
… Exécuté si choix = a
switch(choix)
{ Exécuté si choix = a ou b
case ‘a’ : fonctionA();

case ‘b’ : fonctionB(); Exécuté si choix = a, b ou c

case ‘c’ : fonctionC();


Exécuté si choix non
default : erreur(3); répertorié par un « case »
}
01/13/2022 et si choix = a, b ou c 21
}
Effet du « break »
/* Utilisation de switch case */
main() Paramètre de décision
{
char choix;
… Exécuté si choix = a
switch(choix)
{ Exécuté si choix = b
case ‘a’ : fonctionA(); break;

case ‘b’ : fonctionB(); break;Exécuté si choix = c

case ‘c’ : fonctionC(); break;


Exécuté si choix non
default : erreur(3); répertorié par un « case »
}
01/13/2022 22
}

Vous aimerez peut-être aussi