Vous êtes sur la page 1sur 65

CHAPITRE I :

Rappels sur la
programmation en
langage C
Préparation de
l’environnement de
développement
Préparation de l’environnement de développement
Les outils nécessaires

 un éditeur de texte pour écrire le code source du programme. En


théorie un logiciel comme le bloc-notes sous Windows, ou "vi" sous
Linux, fait l'affaire. L'idéal, c'est d'avoir un éditeur de texte intelligent
qui colore tout seul le code, ce qui vous permet de vous y repérer
bien plus facilement ;
 un compilateur pour transformer (compiler) votre source en binaire ;
 un débogueur pour vous aider à traquer les erreurs dans votre
programme.
Préparation de l’environnement de développement
Choix d’un IDE (environnement de développement)

Code::Blocks (Windows, Mac et Linux)


http://www.codeblocks.org/downloads/binaries/
Préparation de l’environnement de développement

Visual Studio (Windows seulement)


https://visualstudio.microsoft.com/fr/vs/community/

Xcode (Mac OS seulement)


https://www.apple.com/fr/app-store/
Premier programme
Types de programmes

Il faut savoir qu'en fait il existe deux types de programmes, pas plus :

1. Les programmes en console. 2. Les programmes graphiques.

Ont parlent de GUI (Graphical


User Interface – interface
utilisateur graphique, en
français).
Premier programme
Le code de base
Premier programme
Affichage à l’écran (DEMO)

Utilisez des caractères spéciaux

Les caractères spéciaux permettent d'indiquer qu'on veut aller à la ligne, faire une
tabulation, etc.

Ils sont faciles à reconnaître : c'est un ensemble de deux caractères :

1. Le premier est toujours un anti-slash \ ;


2. Le second, un nombre ou une lettre.

Voici deux caractères spéciaux courants que vous aurez probablement besoin d'utiliser :

 \n: retour à la ligne (= "Entrée") ;


 \t: tabulation.

Pour faire une entrée, il suffit donc de taper \n pour créer un retour à la ligne :
Premier programme
Le problème des accènts

À partir de là, vous avez deux solutions.

 Passer à Linux : Nous verrons comment au troisième chapitre


 Ne pas utiliser d'accents. C'est malheureusement la solution que vous
risquez de choisir. La console de Windows a ses défauts, que voulez-vous.
Il va vous falloir prendre l'habitude d'écrire sans accents. Bien entendu,
comme plus tard vous ferez probablement des programmes avec des
fenêtres, vous ne rencontrerez plus ce problème-là.
Les variables
Les types de variables

Nom du type Minimum Maximum Taille (octets)


signed char -127 127 1 unsigned char
int
0 à 255
-32 767 32 767 2 (sur 16 bits) unsigned int 0 à 65 535
4 (sur 32 bits) unsigned long 0 à 4 294 967
long -2 147 483 647 2 147 483 647 4 (32 bits)
float 10 10 4 295
double 10 10 8
Les variables
Les types de variables
Les variables
Les types de variables

Conclusions
 N’utilisez pas plus de précision que nécessaire pour stocker des données.
 Si vous additionnez beaucoup de données, passez à un accumulateur de précision supérieure.
Les variables
Déclarez une variable

Déclarer une variable, c’est demander à l'ordinateur la permission d'utiliser un peu de mémoire.

Etapes à suivre :

1. D'indiquer le type de la variable que l'on veut créer.


2. D'insérer un espace.
3. D'indiquer le nom que vous voulez donner à la variable.
4. Et enfin, de ne pas oublier le point-virgule.

type nom_variable;
Les variables
Les identificateurs
Maintenant que nous avons vu les types, parlons des identificateurs. Comme dit précédemment, un
identificateur est un nom donné à une variable pour la différencier de toutes les autres. Et ce nom, c’est au
programmeur de le choisir. Cependant, il y a quelques limitations à ce choix.

 seuls les 26 lettres de l’alphabet latin (majuscules ou minuscules), le trait de soulignement « _ » (underscore
en anglais) et les chiffres sont acceptés. Pas d’accents, pas de ponctuation ni d’espaces ;
 un identificateur ne peut pas commencer par un chiffre ;
 les mots-clés ne peuvent pas servir à identifier une variable ; il s’agit de :
Les variables
Les séparateurs
// Commentez votre code
// Commentez votre code
Les variables
Initialiser une variable
type identificateur = valeur;

Notez qu’il est important de bien placer ce point, même si vous


voulez stocker un nombre rond. Par exemple, vous ne devez pas
écrire double a = 5 mais double a = 5. (certains préfèrent double a =
5.0, cela revient au même).
Les variables
Affecter une valeur à une variable

Nous savons donc déclarer (créer) nos variable :

identificateur = nouvelle_valeur;
Les variables
Les représentations octales et hexadécimales

Binaire Octal Décimal Hexadéci


mal Il vous est possible de préciser la base d’une constante entière
00000 0 0 0 en utilisant des préfixes. Ces préfixes sont 0 pour les constantes
00001 1 1 1 octales et 0x ou 0X pour les constantes hexadécimales.
00010 2 2 2
00011 3 3 3
00100 4 4 4
00101 5 5 5
00110 6 6 6
00111 7 7 7
01000 10 8 8
01001 11 9 9
01010 12 10 a
01011 13 11 b
01100 14 12 c
01101 15 13 d
01110 16 14 e
01111 17 15 f
10000 20 16 10
Les variables
En résumé

 Les informations sont numérisées (traduites en nombres) afin de pouvoir être traitées par un ordinateur ;
 Un ordinateur calcule en base deux ;
 Un chiffre binaire est appellé un bit (contraction de l’expression « binary digit ») ;
 Les bits sont regroupés en mutiplets (ou byte en anlgais) qui sont le plus souvent composés de huit bits
(on parle alors d’octet) ;
 Les données sont stockées dans différents types de mémoire, notamment : les registres, la mémoire vive
(ou RAM) et les disques durs ;
 Chaque multiplet de la RAM est identifié par une adresse ;
 Une variable est déclarée à l’aide d’un type et d’un identificateur ;
 Le C fourni neuf types de base : _Bool, char, short int, int, long int, long long int, float, double, long
double ;
 Tous les types ont une capacité limitée avec un minimum garantit par la norme ;
 Une variable peut être initialisée en lui fournissant une valeur lors de sa déclaration ;
 Il est possible d’affecter une valeur à une variable une fois celle-ci déclarée ;
 Sans initialisation ou affectation, la valeur d’une variable est indéterminée ;
 Il est possible de représenter des nombres entiers en base 8 (octale) ou en base 16 (hexadécimale).
Les variables
Opérateurs et expression en langage C

Comme tous les langages, C dispose d’opérateurs classiques « binaires » (c’est-à-dire portant sur deux « opérandes »),
à savoir l’addition (+), la soustraction (-), la multiplication (*) et la division (/), ainsi que d’un opérateur « unaire » (c’est-
à-dire ne portant que sur un seul opérande) correspondant à l’opposé noté - (comme dans -n ou dans -x+y).

Les opérateurs binaires ne sont a priori définis que pour deux opérandes ayant le même type parmi : int, long int, float,
double, long double et ils fournissent un résultat de même type que leurs opérandes.

Les priorités relatives des opérateurs

Lorsque plusieurs opérateurs apparaissent dans une même expression, il est nécessaire de savoir dans quel ordre ils sont
mis en jeu. En C, comme dans les autres langages, les règles sont naturelles et rejoignent celles de l’algèbre
traditionnelle (du moins, en ce qui concerne les opérateurs arithmétiques dont nous parlons ici).
Les variables
Opérateurs et expression en langage C

Les opérateurs unaires + et - ont la priorité la plus élevée. On trouve ensuite, à un même niveau, les opérateurs *, / et
%. Enfin, sur un dernier niveau, apparaissent les opérateurs
binaires + et -.

En cas de priorités identiques, les calculs s’effectuent de gauche à droite. On dit que l’on a affaire à une associativité
de gauche à droite (nous verrons que quelques opérateurs, autres
qu’arithmétiques, utilisent une associativité de droite à gauche).
Enfin, des parenthèses permettent d’outrepasser ces règles de priorité, en forçant le calcul préalable de l’expression
qu’elles contiennent. Notez que ces parenthèses peuvent également
être employées pour assurer une meilleure lisibilité d’une expression
Les variables
Notion d’expression mixte

Comme nous l’avons dit, les opérateurs arithmétiques ne sont définis que lorsque leurs deux opérandes sont de
même type. Mais vous pouvez écrire ce que l’on nomme des « expressions mixtes » dans lesquelles interviennent
des opérandes de types différents. Voici un exemple d’expression autorisée, dans laquelle n et p sont supposés de
type int, tandis que x est supposé de type float :

n * x + p

Dans ce cas, le compilateur sait, compte tenu des règles de priorité, qu’il doit d’abord effectuer le produit n*x. Pour
que cela soit possible, il va mettre en place des instructions de conversion de la valeur de n dans le type float (car on
considère que ce type float permet de repré-senter à peu près convenablement une valeur entière, l’inverse étant
naturellement faux). Au bout du compte, la multiplication portera sur deux opérandes de type float et elle fournira
un résultat de type float. Pour l’addition, on se retrouve à nouveau en présence de deux opérandes de types
différents (float et int). Le même mécanisme sera mis en place, et le résultat final sera de type float.
Les variables
Notion d’expression mixte
Les variables
Les promotions numériques

Les conversions d’ajustement de type ne suffisent pas à régler tous les cas. En effet, comme nous l’avons déjà dit, les
opérateurs numériques ne sont pas définis pour les types char et short.

En fait, le langage C prévoit tout simplement que toute valeur de l’un de ces deux types apparaissant dans une
expression est d’abord convertie en int, et cela sans considérer les types des éventuels autres opérandes. On parle alors,
dans ce cas, de « promotions numériques » (ou encore de « conversions systématiques »).

Par exemple, si p1, p2 et p3 sont de type short et x de type float, l’expression :


Les variables
Les promotions numériques

p1 * p2 + p3 * x
Les variables
Le cas du type char

A priori, vous pouvez être surpris de l’existence d’une conversion systématique (promotion numérique) de char en
int et vous interroger sur sa signification. En fait, il ne s’agit que d’une question de point de vue. En effet, une valeur
de type caractère peut être considérée de deux façons :

 comme le caractère concerné : a, Z, fin de ligne,


 comme le code de ce caractère, c’est-à-dire un motif de 8 bits ; or à ce dernier on peut toujours faire
correspondre un nombre entier (le nombre qui, codé en binaire, fournit le motif en question) ; par exemple, dans
le code ASCII, le caractère E est représenté par le motif binaire 01000101, auquel on peut faire correspondre le
nombre 65.
Les variables
Les variables
Les opérateurs
Les variables
Les opérateurs
Les variables
Les opérateurs
Travail pratique (A deposer à la prochaine séance)
Travail pratique (A deposer à la prochaine séance)

Opérateur ternaire, si …. Alors …. sinon


Cas 1 : a > b
Z=a+b

Cas 2 : a < b
Z=b+a

Cas 3 : a = b
Z=b+a

z=a+b
Les variables
Les tests
Les variables
Les boucles
Les variables
Les instructions d'échappement break; continue;

L'INSTRUCTION continue ARRÊTE L'ITÉRATION COURANTE QUAND ELLE RENCONTRE CETTE INSTRUCTION ET
L'ITÉRATION RECOMMENCE EN DÉBUT DE BOUCLE. DANS LE CAS, D’UNE BOUCLE for LES INSTRUCTIONS
CORRESPONDANT À L'ÉVOLUTION SONT EXÉCUTÉES ET L’ON RECOMMENCE À ÉVALUER LA CONDITION.
L'INSTRUCTION break FAIT PUREMENT ET SIMPLEMENT SORTIR DE LA BOUCLE.
Les variables
Les entrées-sorties
La fonction printf
Nous avons déjà vu que le premier argument de printf est une chaîne de caractères qui spécifie à la fois : des
caractères à afficher tels quels et des codes de format repérés par %.

Les principaux codes de conversion

Code Descriptions
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
Les variables

Code Description
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.xxxxxx-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 (notion qui sera peut-être étudiée ultérieurement)

NB : Un nombre placé après % dans le code de format précise un gabarit d’affichage, c’est-à-dire un nombre minimal de
caractères à utiliser. Si le nombre peut s’écrire avec moins de caractères, printf le fera précéder d’un nombre suffisant
d’espaces ; en revanche, si le nombre ne peut s’afficher convenablement dans le gabarit imparti, printf utilisera le nombre
de caractères nécessaires.
Les variables
Les variables
La fonction scanf
Lorsque scanf attend que vous lui fournissiez des données, l’information frappée au clavier est rangée temporairement
dans l’emplacement mémoire nommé « tampon ». Ce dernier est exploré, caractère par caractère par scanf, au fur et à
mesure des besoins. Il existe un pointeur qui précise quel est le prochain caractère à prendre en compte.
D’autre part, certains caractères dits « séparateurs » (ou « espaces blancs ») jouent un rôle particulier dans les données. Les
deux principaux sont l’espace et la fin de ligne (\n). Il en existe trois autres d’un usage beaucoup moins fréquent : la
tabulation horizontale (\t), la tabulation verticale (\v) et le changement de page (\f).
Exercices
1. Ecrire un programme qui saisit deux entiers et affiche leur produit. Modifier ensuite
le programme afin de saisir deux réels,
2. Ecrire un programme qui échange deux entiers saisis. Afficher les entiers avant et
après l’échange.
3. Ecrire un programme qui affiche les code ASCII des lettres et des chiffres sous la
forme suivante :
caractère = A code = 65 code hexa = 41
caractère = B code = 66 code hexa = 42

caractère = 1 code = 49 code hexa = 31

caractère = 9 code = 57 code hexa = 39

4. Ecrire un programme qui détermine si l’entier saisi est pair ou impair


5. Ecrire un programme qui détermine le plus grand de 3 entiers saisis
Exercices
1. Ecrire un programme qui saisit deux entiers et afficge leur produit. Modifier ensuite
le programme afin de saisir deux réels,
2. Ecrire un programme qui échange deux entiers saisis. Afficher les entiers avant et
après l’échange.
3. Ecrire un programme qui affiche les code ASCII des lettres et des chiffres ssous la
forme suivante :
caractère = A code = 65 code hexa = 41
caractère = B code = 66 code hexa = 42

caractère = 1 code = 49 code hexa = 31

caractère = 9 code = 57 code hexa = 39

4. Ecrire un programme qui détermine si l’entier saisi est pair ou impair


5. Ecrire un programme qui détermine le plus grand de 3 entiers saisis
2.4. Programmation modulaire
Comme tous les langages, C permet de découper un programme en plusieurs parties nommées souvent «
modules ». Cette programmation dite modulaire se justifie pour de multiples raisons :

 Un programme écrit d’un seul tenant devient difficile à comprendre dès qu’il dépasse une ou deux
pages de texte. Une écriture modulaire permet de le scinder en plusieurs parties et de regrouper dans le
programme principal les instructions en décrivant les enchaînements. Chacune de ces parties peut
d’ailleurs, si nécessaire, être décomposée à son tour en modules plus élémentaires ; ce processus de
décomposition pouvant être répété autant de fois que nécessaire, comme le préconisent les méthodes de
programmation structurée.

 La programmation modulaire permet d’éviter des séquences d’instructions répétitives, et cela d’autant
plus que la notion d’argument permet de paramétrer certains modules.

 La programmation modulaire permet le partage d’outils communs qu’il suffit d’avoir écrits et mis au
point une seule fois. Cet aspect sera d’autant plus marqué que C autorise effectivement la compilation
séparée de tels modules.
2.4. Programmation modulaire
Découpez votre programme en fonctions

Structure d’une fonction


2.4. Programmation modulaire
Avec :

 type (correspond à la sortie) : c'est le type de la fonction.

Si la fonction renvoie un nombre décimal, vous mettrez sûrement double ; si elle renvoie un entier, vous mettrez int ou
long par exemple. Mais il est aussi possible de créer des fonctions qui ne renvoient rien, elles seront alors de type void
("vide", en français).

 nomFonction : c'est le nom de votre fonction.

Vous pouvez appeler votre fonction comme vous voulez, du moment que vous respectez les mêmes règles que pour
les variables (pas d'accents, pas d'espaces, etc.)

 parametres (correspond à l'entrée) : ce sont les paramètres de la fonction.

Ils sont entre parenthèses. Ce sont en fait des valeurs avec lesquelles la fonction va travailler.
2.4. Programmation modulaire
Maintenant que vous savez ça, voyons un exemple pratique ! Disons que : notre fonction triple reçoit un nombre
entier de type int ; et qu'elle renvoie un nombre entier également de type int
2.4. Programmation modulaire
Affectez plusieurs paramètres à une fonction

N'affectez aucun paramètre à fonction


2.4. Programmation modulaire
Appelez une fonction
2.4. Programmation modulaire
Découper le programme dans plusieurs fichiers

Annoncez une fonction à l'aide d'un prototype


Regardez la première ligne de notre fonction aireRectangle :
2.4. Programmation modulaire
2.4. Programmation modulaire
Créez plusieurs fichiers par projet
2.4. Programmation modulaire
Faites la différence entre les fichiers .h et .c
Il y a deux types de fichiers différents :

1. .h: fichiers header, ils contiennent les prototypes des fonctions.


2. .c: les fichiers source, ils contiennent les fonctions elles-mêmes.

En général, on met donc rarement les prototypes dans les fichiers .c comme on l'a fait
tout à l'heure dans le main.c (sauf si votre programme est tout petit).

Pour chaque fichier .c , il y a donc son équivalent .h qui contient les prototypes des
fonctions :

NB : Les fichiers que vous avez créés et placés dans le répertoire de votre projet
doivent être inclus avec des guillemets ("view.h").
2.5. Les pointeurs et les tableaux
schéma de la mémoire vive
2.5. Les pointeurs et les tableaux
Faites afficher l'adresse d'une variable

Supposons une variable age : int age = 10;

Pour afficher l'adresse de la variable, on doit :

Utiliser le symbole %p (le p du mot « pointeur ») dans le printf .

Envoyer à la fonction printf non pas la variable age , mais son adresse… Et pour faire cela, vous devez mettre le symbole
& devant la variable age , comme je vous avais demandé de le faire pour les scanf , il y a quelque temps, sans vous
expliquer pourquoi.
2.5. Les pointeurs et les tableaux
Utilisez des pointeurs

Pour créer une variable de type pointeur, on rajoute le symbole * devant le nom de la variable.

Pour initialiser un pointeur, c'est-à-dire lui donner une valeur


par défaut, on n'utilise généralement pas le nombre 0 mais le
mot-clé NULL (veillez à l'écrire en majuscules) :
2.5. Les pointeurs et les tableaux
Utilisez des pointeurs
2.5. Les pointeurs et les tableaux
Afficher la valeur pointée à partir du pointeur

En plaçant le symbole * devant le


nom du pointeur, on accède à la
valeur de la variable age . Si au
contraire on avait utilisé le symbole
& devant le nom du pointeur, on
aurait obtenu l'adresse à laquelle se
trouve le pointeur (ici, c'est 3).
2.5. Les pointeurs et les tableaux

Qu'est-ce qu'on y gagne ?


2.5. Les pointeurs et les tableaux
Les Tableaux

Voici le schéma d'un tableau de 4 cases en mémoire qui commence à l'adresse 1600.

Lorsque vous demandez à


créer un tableau de 4 cases
en mémoire, votre
programme demande au
système d'exploitation la
permission d'utiliser 4 cases
en mémoire.
2.5. Les pointeurs et les tableaux
Les tableaux

Chaque case du tableau contient un nombre du même type. Si le tableau est de type int ,
alors chaque case du tableau contiendra un int . On ne peut pas faire de tableau
contenant à la fois des int et des double
Déclaration d’un tableau Comment accéder à chaque case du tableau ?

Il faut écrire tableau[numeroDeLaCase] .


2.5. Les pointeurs et les tableaux
Créez des tableaux à taille dynamique

Parcourez un tableau
2.5. Les pointeurs et les tableaux
Initialisez un tableau
FIN DU CHAPITRE II
Contacts :
KALELA NGOY SALMAN
+243 99 435 1324
ngoy.kalela@gmail.com

Vous aimerez peut-être aussi