0% ont trouvé ce document utile (0 vote)
51 vues102 pages

Introduction au langage C et sa structure

Le document présente le langage de programmation C, créé par Dennis Ritchie dans les années 1970, et décrit sa structure, ses éléments de base, ainsi que ses types de données. Il explique également les identificateurs, les mots clés, les commentaires, et les opérateurs utilisés dans le langage. Enfin, des exemples de programmes en C illustrent les concepts abordés.

Transféré par

ghorbelemna1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
51 vues102 pages

Introduction au langage C et sa structure

Le document présente le langage de programmation C, créé par Dennis Ritchie dans les années 1970, et décrit sa structure, ses éléments de base, ainsi que ses types de données. Il explique également les identificateurs, les mots clés, les commentaires, et les opérateurs utilisés dans le langage. Enfin, des exemples de programmes en C illustrent les concepts abordés.

Transféré par

ghorbelemna1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation en C

ENIT - 1A GE

Année Universitaire : 2018-2019


Le langage de Programmation C
Présentation du C

 C est un langage de programmation inventé par Dennis


Ritchie sur un système UNIX vers les années 1970.
 Il est issu des langages BCPL de M. Richards (1967) et B
développé aux Bel-Labs (1970).
 C est un:
 langage de Haut Niveau (de la famille du langage Pascal) car il possède
les principales structures de contrôle
 langage de Bas Niveau (de la famille du langage Assembleur) car il
possède les outils de manipulation d‟informations système.
 C est un des premiers langages offrant des possibilités de
programmation modulaire

3
Structure d’un programme C

Un programme C comporte:
 Une entête (header) constitué de méta-instructions ou
directives destinées au préprocesseur (Exp: Inclusion de
librairies de fonctions prédéfinies)
 Un bloc Principal appelé main() qui représente la
fonction principale
 Le corps des fonctions placées avant ou après le
main() dans un ordre quelconque, les unes après les
autres
Partout, les variables et les fonctions font l‟objet d‟une
déclaration précisant leurs types

4
Fichier C (extension .c)
/* exemple de programme C :
- somme des nb de 1 à 10 et affichage
de la valeur*/ En C le programme principal 1
#include <stdio.h> 0 s'appelle toujours main
void main () 1
déclarations de variables de
{ type entier (cases mémoire
2
int somme; int i; 2 pouvant contenir un entier)
somme = 0; 3 instruction d'affectation de 3
for (i = 1; i <= 10; i++) valeur à la variable somme
4 { instructions exécutées
somme = somme + i; en séquence
} l'instruction entre accolades 4
printf ("%d\n", somme); 5 est exécutée pour les valeurs
} de i allant de 1 à 10
affiche à l'écran la valeur de 5
l'entier contenu dans somme

5
Exemple: Calcul de la surface d’un cercle

En Pascal En C

Program surface ; #include <stdio.h>


Const PI = 3.14 ; #define PI 3.14
Function surf (rayon : real) : real ; float surf(float rayon)
Var surfacecercle : real; {
Begin float surfacecercle ;
surfacecercle := rayon*rayon*PI; surfacecercle=rayon*rayon*PI;
surf := surfacecercle; return(surfacecercle );
End; }
Var s : real ; void main()
Begin {
s=surf(2.0); float s;
writeln(s); s=surf(2.0);
end; printf("%f\n",s);
}

6
Structure d’un programme C
Programme typique en C

include
Main() est toujours la
1ère fonction appelée
main()

fonction a() instructions

fonction b() instructions

instructions
7
1. Les éléments de base du langage C

Considérations Lexicales
Les Identificateurs
 Un identificateur est constitué de lettres („a‟...„z‟, „A‟..„Z‟), de
chiffres („0‟...„9‟) et éventuellement du caractère souligné („_‟).
 Un identificateur doit impérativement commencer par une
lettre ou un ‟_‟ et ne pas faire partie de la liste des mots
réservés.
 Attention, une distinction est faite entre les caractères
majuscules et minuscules (NbLignes et nblignes sont deux
identificateurs différents).
 La norme ANSI a fixé à 31 le nombre de caractères
significatifs d‟un identificateur bien que la longueur de ce
dernier puisse être plus importante.

9
Les mots clés

 Voici les mots réservés du langage C. Ils ne doivent pas


être utilisés comme identificateurs.
auto break case char const continue
default do double else enum extern float
for goto if int long register return short
signed sizeof static struct switch typedef
union unsigned void volatile while
 Les mots réservés const, signed et volatile sont
propres à la norme ANSI.

10
Les Commentaires

 Toute suite de caractères encadrée par les symboles „/*‟ et „*/‟


correspond à un commentaire et ne joue évidemment aucun rôle
lors de l‟exécution du programme.
 Les commentaires sont donc ignorés par le compilateur mais sont
indispensables sur le plan de la documentation du programme.
 Exemples de commentaires :
/* Ceci est un commentaire */
/* Les commentaires peuvent etre formules sur
plusieurs lignes */
/* Il est frequent
* de formuler
* des commentaires ainsi
*/

11
L’appel d’une bibliothèque : #include

 #include indique au compilateur C qu‟il doit inclure le


contenu du fichier entête *.h (ou header file) dans le
programme lors de la compilation
 Exemples de bibliothèques:
 "stdio.h" : (standard input output), elle contient les macros
standards pour les opérations d‟entrées/sorties. Exp: printf,
scanf, puts, gets.
 "conio.h" : elle contient les routines d‟E/S du DOS. Exp: clrscr,
pour clear screen et getch pour get character.
 "string.h" : pour la manipulation des chaines de caractères.
Exp : strcmp, strcpy.
 "math.h" : pour l‟utilisation des fonctions mathématiques. Exp:
sqr, sqrt.

12
Les éléments de base du langage C

Les Constantes
Définition Constante

Ce sont les données les plus simples qu‟un


programme C sache manipuler. Elles
permettent d‟écrire une valeur n‟importe où
dans le programme. On distingue quatre
types de constantes :
• Les nombres entiers.
• Les nombres réels, avec partie décimale.
• Les caractères.
• Les chaînes de caractères.

14
Nombres Entiers

 Les constantes littérales numériques entières ou


réelles suivent les conventions habituelles, avec
quelques particularités.
 Les constantes littérales entières peuvent aussi
s„écrire en octal et en hexadécimal :
 une constante écrite en octal (base 8) commence par 0 (zéro)
 une constante écrite en hexadécimal (base 16) commence par
0x ou 0X
 Voici par exemple trois manières d„écrire le même
nombre :
27 033 0x1B

Décimal octal hexadécimal

15
Nombres Flottants
 Une constante littérale est l'expression d'un nombre flottant si elle présente, dans
l'ordre :
 une suite de chiffes décimaux (la partie entière)
 un point, qui joue le rôle de virgule décimale
 une suite de chiffres décimaux (la partie fractionnaire)
 une des deux lettres E ou e
 éventuellement un signe + ou -
 une suite de chiffres décimaux
 Les trois derniers éléments forment l'exposant.
 Exemple : 123.456E-78.
 On peut omettre :
 la partie entière ou la partie fractionnaire, mais pas les deux
 le point ou l'exposant, mais pas les deux.
Exemples : .5e7, 5.e6, 5000000., 5e6
 Une constante flottante est supposée de type double, à moins de comporter un suffixe
explicite :
 les suffixes F ou f indiquent qu'elle est du type float
 les suffixes L ou l indiquent qu'elle est du type long double
Exemples : 1.0L, 5.0e4f

16
Caractères et Chaînes de Caractères(1)

 Une constante de type caractère se note en


écrivant le caractère entre apostrophes.
Exemple : 'A' '2' '"'
 Une constante de type chaîne de caractères
se note en écrivant ses caractères entre
guillemets.
 Quatre chaînes de caractères :
"A" "Bonjour à tous !" "" "'"

17
Caractères et Chaînes de Caractères(2)

 Une constante de type chaîne de caractères représente une suite


finie de caractères, de longueur quelconque.
 Le codage interne d'une chaîne de caractères est le suivant :
 les caractères constituant la chaîne sont rangés en mémoire, de
manière contiguë, dans l'ordre où ils figurent dans la chaîne ;
 un caractère nul est ajouté immédiatement après le dernier caractère de
la chaîne, pour en indiquer la fin ;
 la constante chaîne représente alors, à l'endroit où elle est écrite,
l'adresse de la cellule où a été rangée le premier caractère de la chaîne.

18
Caractères et Chaînes de Caractères(3)

 Par conséquent, une constante chaîne de caractères


a pour type celui d'un tableau de caractères (c'est-à-
dire char[] ) et pour valeur l'adresse d'une cellule de
la mémoire.
 Par caractère nul on entend le caractère dont le
code interne est 0 ; on peut le noter indifféremment
0, '\000' ou '\0' (mais certainement pas '0') ; il est
utilisé très fréquemment en C.

19
Déclaration Constante

C permet de déclarer des constantes par la


commande :
#define <Nom> <Valeur>
Ou encore (ajouté par l‟ANSI) :
const <type> <nom>=<valeur>;
Exemples :
#define TEL 71000100
const int annee = 2018;

20
Les éléments de base du langage C

Les Types de Base en C


Deux catégories de types

 Les types scalaires :


Les variables de type scalaire ne peuvent stocker
qu‟une seule valeur dans l‟intervalle des valeurs
possibles.
 Les types composés :
Les variables de type composé permettent de
stocker simultanément plusieurs valeurs
(tableaux, pointeurs, structures, unions, etc.)

22
C possède 4 types de base

Plage de
Type Signification Taille (bits)
valeurs
int Entier 16 (2 o) -32768 à +32767

float Réel 32 (4 o) ±10-37 à ± 10+38

Réel en double
double 64 (8 o) ±10-307 à ± 10+308
précision

char Caractère 8 (1 o)

23
Les littéraux entiers
 Les notations utilisées pour écrire les littéraux entiers sont :
 la notation décimale,
 la notation octale, (doit commencer par 0)
 et la notation hexadécimale. (doit finir par h et commencer par 0 si le
premier est une lettre).
 Il existe la possibilité d‟ajouter un attribut (ou modificateur ) :
 unsigned : entier ou caractère non signé, de 0 à 65535
 long : entier double longueur, de -2.109 à +2.109
 short : entier court, de -32768 à +32767
On peut omettre d‟écrire int avec un attribut.

24
Les littéraux réels

 Deux notations habituelles sont utilisées:


 la notation fixée. Ex : 1.34
 et la notation flottante. Ex : -3.14e-10

25
Les littéraux caractères(1)
 Les littéraux caractères permettent de désigner les valeurs
entières correspondant aux code ASCII des caractères. Les
notations possibles sont :
 la notation éditable : présentation du caractère entre apostrophes,
 la notation décimale : valeur décimale du code ASCII correspondant,
 la notation octale : valeur octale du code ASCII correspondant,
 la notation hexadécimale : valeur hexadécimale du code ASCII
correspondant,
 la notation symbolique : certains littéraux caractères possèdent des
notations symboliques, le tableau ci-dessous les résume :

26
Les littéraux caractères(2)
Notation Signification
'\a' Signal sonore
'\n' Passage à la ligne suivante
'\r' Retour du curseur en début de ligne
'\b' Déplacement du curseur d’un caractère vers la gauche
'\f' Déplacement vers la page suivante
'\t' Déplacement du curseur d’une tabulation vers la droite

'\v' Déplacement du curseur d’une tabulation vers le bas


'\'' Apostrophe
'\''' Double cote
'\\' Anti-slash

27
Les littéraux chaînes de caractères

 Une chaîne de caractère est constituée d‟une


séquence de caractères délimitée par double
cotes.
 Lorsque elle est mémorisée, une chaîne de
caractère est complétée automatiquement
par le caractère NUL (0 en code ASCII). Ce
terminateur est nécessaire pour la bonne
exécution de certaines fonctions standards.
 'A' et "A" sont deux variables distinctes

28
Définition de nouveaux types

 La norme ANSI permet de définir de nouveaux types de variables


par typedef.
 Syntaxe: typedef <type_de_base> nouveau_nom;
 Ceci permet de donner un nom à un type donné, mais ne crée
aucune variable. Une déclaration typedef est normalement globale
et publique.
 Exemple:
typedef long int entierlong; /* définition d'un nouveau type */
entierlong i; /* création d'une variable i de type entierlong */
tyedef char* STRING ; /* fait de string un synonyme de char* */

29
Les éléments de base du langage C

Les Opérateurs
Les opérateurs
 Symboles simples :
( ) [ ] . ! ~ < > ? :
= , + - * / % & ^
 Symboles composés :
-> ++ -- <= >= == != && || << >>
+= -= *= /= %= <<= >>= |= &= ^=
 Tous ces symboles sont reconnus par le compilateur comme des
opérateurs.
 Il est interdit d'insérer des caractères blancs à l'intérieur d'un
symbole composé. En outre, il est conseillé d'encadrer par des
blancs (laisser des espaces) 0 toute utilisation d'un opérateur.

31
Classes d’opérateurs

les opérateurs unaires : qui précèdent un identificateur,


une expression ou une constante. Exp: -x
 les opérateurs binaires : qui mettent en relation 2
termes ou expressions. Exp: a+b
 les opérateurs ternaires : qui mettent en relation 3
termes . Exp : « ? : ». Exp:
printf("%s", 1==2 ? "1 est égal à 2" : "1 est différent de
2") ;

32
Les opérateurs arithmétiques

+ : addition,
- : soustratction,
* : multiplication,
/ : division :
 division entière : si les 2 opérandes sont entières,
 division réelle : si au moins une des 2 opérandes est réel
% : reste de la division
 Exp: float x;
x = 3 / 2; /*affecte à x la valeur 1 */
x = 3 / 2.0; /*affecte à x la valeur 1.5 */
 L'opérateur % ne s'applique qu‟à des opérandes de type entier.
 En C, il n‟y a pas d‟opérateur effectuant l‟élévation à la puissance.
Donc, il faut utiliser la fonction pow(x,y) de la librairie math.h pour
calculer xy

33
Les opérateurs relationnels

== : égal,
!= : différent,
> : Strictement supérieur,
>= : supérieur ou égal,
< : Strictement inférieur,
<= : inférieur ou égal.

34
Les opérateurs logiques

! : négation unaire,
&& : ET logique binaire
|| : OU logique binaire
 Le type booléen n‟existe pas en C, la valeur
retournée par ces opérateurs est un entier
qui vaut 0 si la condition est faux.

35
Les opérateurs de traitement de bits

& : ET niveau bit


| : OU niveau bit & 0 1
0 0 0
^ : O U exclusif (xor) 1 0 1

<< : décalage à gauche 0


| 0
0
1
1
1 1 1
>> : décalage à droite
^ 0 1

~ : complément à 1 0
1
0
1
1
0

36
Les opérateurs d’incrémentation et de décrémentation

i++ : post-incrémentation : utilise la valeur de i ensuite incrémente sa valeur,


++i : pré-incrémentation : incrémente la valeur de i puis utilise sa valeur,
i-- : post-décrémentation : utilise la valeur de i ensuite décrémente sa
valeur,
--i : pré-décrémentation : décrémente la valeur de i puis utilise sa valeur,
 Exemple :
int a = 3, b, c;
b = ++a; /* après exécution de cette instruction a et b valent 4
equivalent à a=a+1 ;
b=a ; */
c = b++; /* après exécution de cette instruction c vaut 4 et b vaut 5
equivalent à c=b ;
b=b+1 ;*/

37
L’opérateur d'affectation

 L’Opérateur d’affectation est le symbole =


 Syntaxe:
<Nomvariable> = <Expression>;
 Expression peut être:
 Une constante
 Le nom d‟une variable
 Une expression
 Exemples:
 a=5 (met la valeur 5 dans la variable a. Si a est float, il y a conversion implicite en
float);
 b=(a*5)/2 (calcule d'abord l‟expression, puis met le résultat dans b);
 a=5+(b=2) (Le compilateur lit l'expression de gauche à droite. la première affectation
nécessite le calcul d'une expression : 5+(b=2). Celle ci comporte une addition, dont il
évalue le premier opérande (5) puis le second (b=2). Il met donc 2 dans b, le résultat
de l'opération est 2, qui sera donc ajouté à 5 pour être mis dans a. a vaut donc 7 et b,
2. Le résultat de l'expression est 7).

38
Les opérateurs d'affectation composée

 Les opérateurs d'affectation composée sont


+= -= *= /= %= &= ^= |= <<= >>=
 Pour tout opérateur op, l'expression :
expression1 op= expression2

expression1 = expression1 op expression2
 Exemple :
x+=y ; /*equivalent à x = x+y*/

39
L'opérateur virgule

 Une expression peut être constituée d'une suite d'expressions


séparées par des virgules :
expression1, expression2, ..., expressionN
 Cette expression est alors évaluée de gauche à droite. Sa
valeur sera la valeur de l'expression de droite. Le programme
suivant:
main()
{
int a, b;
b = ((a = 3), (a + 2));
printf(''\n b = %d \n'',b);
}
Affiche à l‟écran : b = 5
 La virgule séparant les arguments d'une fonction ou les
déclarations de variables ne représente pas l'opérateur virgule.

40
L'opérateur de conversion de type

 L'opérateur de conversion de type, appelé


cast, permet de modifier explicitement le type
d'un objet. La syntaxe est:
(type) objet
 Exemple :
int i = 3, j = 2;
float r ;
r=(float)i/j;
r va contenir la valeur 1.5

41
L'opérateur de référencement &

 L'opérateur & appliqué à une variable


retourne l'adresse mémoire de cette variable.
 Exemple:
int i=5 ;
printf("\n%x ",&i) ;
Affiche à l‟écran l‟adresse mémoire de i en
hexadécimale, exemple: FFF4

42
Opérateur de déréférencement *

 Le * est l'opérateur d'indirection. Il permet


d'accéder à une variable à partir d'une
adresse (le plus souvent en utilisant la valeur
contenue dans un pointeur).
 Pour l‟exemple précedent *&i donne la valeur
5, de même que *p, si p été initialisé avec
l'adresse de i, soit (p=&i).

43
L’Opérateur SizeOf()

 Le langage C offre l‟opérateur SizeOf() qui


donne la taille en octets de l‟opérande
passée en paramètre.
 sizeof(char) retourne 1 octets

44
Priorité des opérateurs(1)

Exemple

 Soit l'instruction: A=5, B=10, C=1;


 Pour calculer la valeur de X après l‟instruction:
X = 2*A+3*B+4*C;
L'ordinateur évalue d'abord les multiplications:
2*A ==> 10 , 3*B ==> 30 , 4*C ==> 4
Ensuite, il fait l'addition des trois résultats obtenus:
10+30+4 ==> 44
A la fin, il affecte le résultat général à la variable:
X = 44

45
Priorité des opérateurs(2)

 Si on veut forcer l'ordinateur à commencer par un


opérateur avec une priorité plus faible, nous devons
(comme en mathématiques) entourer le terme en
question par des parenthèses.

 Exemple
Dans l'instruction: X = 2*(A+3)*B+4*C;
(En reprenant les valeurs du dernier exemple, le résultat
sera 164)

46
Priorité des opérateurs(3)

Classes de priorités
Priorité 1 (la plus forte): ( )

Priorité 2: ! ++ --

Priorité 3: * / %

Priorité 4: + -

Priorité 5: < <= > >=

Priorité 6: == !=

Priorité 7: &&

Priorité 8: ||

Priorité 9 (la plus faible): = += -= *= /= %=

47
Priorité des opérateurs(4)

 Evaluation d'opérateurs de la même classe


Dans chaque classe de priorité, les opérateurs ont la
même priorité. Si nous avons une suite d'opérateurs
binaires de la même classe, l'évaluation se fait en
passant de la gauche vers la droite dans l'expression.
 Pour les opérateurs unaires (!,++,--) et pour les
opérateurs d'affectation (=,+=,-=,*=,/=,%=), l'évaluation
se fait de droite à gauche dans l'expression.

48
Priorité des opérateurs(5)

 Exemples
L'expression 10+20+30-40+50-60 sera évaluée comme suit:
10+20 ==> 30 - 30+30 ==> 60 - 60-40 ==> 20 - 20+50 ==> 70 - 70-60 ==> 10

Pour A=3 et B=4, l'expression A *= B += 5 sera évaluée comme suit:

49
Conversion Implicite de type(1)

 Le compilateur fait de lui-même des


conversions lors de l‟évaluation des
expressions. Pour cela, il applique des règles
de conversion implicite

50
Conversion Implicite de type(2)

 Exemple

51
Conversion Implicite de type(3)

52
Les éléments de base du langage C

Les Variables
Déclaration de variables

 Les variables doivent toutes être déclarées avant d‟être utilisées.


En C, une variable est caractérisée par :
 Son nom (un identificateur)
 Son type (type de base ou type défini par l‟utilisateur)
 Syntaxe de déclaration:
<type> <nomvariable1>[=<initialisation1>] , [<nomvariable2>[=<initialisation2>] ];
Exemples :
int x=10;
int y=10,z;
Float s;
char guillemet=„\"„;

54
Les fonctions d’E/S standards
Les fonctions d’E/S standards

 Les fonctions d’E/S standards sont les fonctions assurant


l’échange d’information entre la mémoire centrale et les
périphériques standard, principalement le clavier et l’écran.
 les fonctions les plus utilisées sont
printf()
écriture formatée de données

scanf()
lecture formatée de données
putchar()
écriture d'un caractère

getchar()
lecture d'un caractère

56
Ecriture formatée de données(1)

 Syntaxe
printf( "Chaine de format" {, argument});

 La chaîne de format contrôle comment les


arguments seront convertis, formatés et
affichés. Elle contient deux types
d‟informations:
 des caractères ordinaires qui sont simplement
recopiés à l‟écran
 des caractères de spécification de format.

57
Ecriture formatée de données(2)
 Les spécifications de format commencent toutes par le
caractère pourcent (‟%‟), peuvent ensuite contenir une
indication de largeur (minimale), de précision (maximale)
et finalement un caractère code pour le type de
l’argument. Voici les codes de type essentiels
• d pour les entiers
• f pour les nombres flottants sous forme décimale
• e pour les nombres flottants sous forme scientifique
• c pour les caractères
• s pour une chaîne de caractères
• % pour afficher le caractère ‟%‟

58
Ecriture formatée de données(3)

 Remarque :
Il doit y avoir au moins autant d‟arguments
qu‟il en est prévu dans la chaîne de format;
sinon, le résultat n‟est pas prévisible

59
Ecriture formatée de données(4)

 Exercice:
 Déclarer une constante contenant le nom d‟une
classe exemple "1AENIT"
 Déclarer une var nom de type chaîne de caractère
et lui assigner une valeur exemple "ahmed"
 Déclarer 2 variables test et exam de type réel et
leur assigner 2 valeurs quelconques exemple 12.5
et 17.0
 Afficher à l‟écran le nom de la classe, le nom de
l‟étudiant, les notes de test et examen ainsi que sa
moyenne ( test * 0.4 + exam * 0.6 )

60
Ecriture formatée de données(5)

 Remarques :

 printf ("%kd",n) ;  Affiche au moins k caractères à droite.


Exp1 : k=3 et n = 25  affiche _25 (tiré bas remplace l‟espace)
Exp2 : k=2 et n = 355  affiche 355
 printf ("%-kd",n) ;  Affiche au moins k caractères à gauche.
Exp1 : k=3 et n = 25  affiche 25_ (tiré bas remplace l‟espace)
Exp2 : k=2 et n = 355  affiche 355
 printf ("%f",x) ;  Affiche le nombre réel en décimal avec 6 chiffre après la virgule, par défaut.
Exp1 : x=1.5  1.500000
 printf ("%kf",x) ;  Affiche le nombre réel en décimal avec 6 chiffre après la virgule, par défaut.
Avec k représente la longueur minimale du nombre.
Exp1 : k=9, x=1.5  _ _1.500000
 printf ("%kf.J",x) ;  Affiche le nombre réel en décimal avec 6 chiffre après la
virgule, par défaut. Avec k représente la longueur
minimale du nombre et J représente le nombre de chiffre
après la virgule.
Exp1 : k=9, J=3 ,x=1.5  _ _ _ _ _1.500

61
Lecture formatée de données(1)

 La fonction scanf() permet au programme de demander


des informations à l‟utilisateur au moyen du clavier. La
syntaxe est
scanf( "Chaine de format" {, adresse});

 Cette fonction lit une chaîne de caractères au clavier et


stocke les données lues aux adresses indiquées.
 La chaîne de format est très semblable à celle de printf().
Elle contrôle comment les valeurs seront lues et
converties pour être mémorisées.

62
Lecture formatée de données(2)

 Pour chaque adresse de variable spécifiée, il faudra


une spécification de format dans la chaîne.
 Ces spécifications de format seront séparées par des
caractères séparateurs.
 Les caractères séparateurs possibles sont l‟espace ‟ ‟,
la tabulation ‟\t‟ et l‟interligne ‟\n‟.
 Lorsqu‟un caractère séparateur est spécifié dans la
chaîne de format, tous les caractères séparateurs
rencontrés dans la chaîne d‟entrée sont lus, jusqu‟au
prochain caractère qui ne soit pas un séparateur.

63
Lecture formatée de données(3)

 Les spécifications de format commencent par un


caractère pourcent (‟%‟), comme pour la fonction
printf(). On peut ensuite mettre une spécification de
largeur (nombre maximal de caractères à lire) et un
caractère donnant le type de l’entrée. Les codes de
types les plus importants sont
• d pour un entier
• e ou f pour un nombre flottant
• s pour une chaîne de caractères
• c pour un seul caractère

64
Lecture formatée de données(4)

 Attention lors de la lecture d‟un caractère, si le prochain


caractère est un séparateur, il sera stocké quand-même.
 Pour que scanf() puisse stocker les valeurs lues dans des
variables, il ne lui suffit pas d‟avoir le nom de la variable,
il veut connaître l‟adresse à laquelle la variable est
stockée en mémoire centrale.
 Pour qu‟il reçoive bien cette adresse, nous devons faire
précéder chacun des noms de variables du caractère ‟&‟.
C‟est un opérateur très utilisé en C qui retourne l‟adresse
de la variable qui suit.

65
Lecture formatée de données(5)
Remarques:
 On peut placer la longueur de la variable entre le signe
% et la lettre spécificateur. Par exemple « %3d »
indique qu‟on va lire un entier de 3 chiffres et le reste
des chiffres sont ignorés. scanf("%3d",&i) ;
 Si l‟on sépare les spécificateurs de format par des
espaces ou par des virgules alors les valeurs à lire
seront séparées par les mêmes séparateurs.

Exercice:
Changer l‟Exercice précédent de telle façon que le nom de
l‟étudiant et ses notes seront demandés de l‟utilisateur.

66
La fonction putchar

 Envoie un caractère vers stdout (écran)


 Exemple :
char c ;
c= „A‟
putchar (c);
putchar („B‟);

67
La fonction getchar()

 La fonction getchar pemet la saisie d'un caractère (char). Elle


appartient à la bibliothèque stdio.h. Les 2 écritures suivantes sont
équivalentes:
char c;
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);
 ET
char c;
printf("ENTRER UN CARACTERE: ");
c = getchar();
 Non formatée, la fonction getchar est moins gourmande en place
mémoire que scanf. Il vaut mieux l'utiliser quand cela est
possible; getchar utilise le flux d'entrée exactement comme scanf.

68
2. Les structures de contrôle
Contrôle de flux

 Jusqu‟à maintenant, les programmes que nous avons


vus étaient tous séquentiels. Les instructions
devaient s‟exécuter l‟une après l‟autre selon l‟ordre
dans lequel nous les avons écrites, du haut vers le
bas.
 On trouve aussi dans les langages de haut niveau la
possibilité d‟offrir des structures itératives (boucles),
des structures conditionnelles (tests) et des
ruptures (sauts).

70
Les structures conditionnelles
 Elles permettent au programme de suivre
plusieurs chemins différents, en fonction de
conditions que l‟on teste en cours
d‟exécution. Le programme choisira un
chemin et n‟exécutera qu‟un sous-ensemble
des instructions données. Les structures
conditionnelles de C sont
• if ... else ... (si ... sinon ...)
• switch (choix multiple : Selon)
• l’opérateur ( ... )? ... : ...; (alternative)

71
Les structures de contrôle

L‟instruction if … else
if...else... (1)
 Syntaxe
 Sans alternative:
if ( expression )
instruction ou bloc d’instructions
 Avec alternative:
if ( expression )
instruction1 ou bloc d’instructions 1
else
instruction2 ou bloc d’instructions 2

73
if...else... (2)
if (expression) action1 ;
else action2 ;

fin de l'instruction if

calcul …
Vrai "calcul juste" if (z == 3) {
z = z+10 printf("calcul juste");
z=3 ? z=z+10;
}
Faux else printf ("problème");
"problème" printf ("%d",z);

Imprimer z

74
if...else... (3)

 Si l‟expression entre parenthèses est évaluée à vrai


(valeur non nulle) alors l‟instruction ou le bloc
d‟instructions qui suit le if est exécutée.
 Si l‟expression est évaluée à faux (valeur nulle) alors
l‟instruction se trouvant après le else est exécutée si on
l‟a spécifiée. Si on ne l‟a pas spécifiée, le programme
passe à l‟instruction suivante directement.
 Dans le cas où plusieurs tests se suivent, la clause else
se rapporte toujours au if le plus proche.

75
if...else... (4)
Exp1:
if (A-B)
printf("A est différent de B\n");
else
printf("A est égal à B\n");

Exp2:
if (a==0)
printf("a est nul\n");
else if (a<0)
printf("a est strictement négatif\n");
else
printf("a est strictement positif\n");

76
if...else... (5)
Exemple: Lire un nombre à partir du clavier et tester si ce nombre est pair ou impair
#include <stdio.h>
void main() {
int nbr;
printf ("Entrez un nombre SVP ");
scanf ("%d", &nbr);
if (nbr > 0)
if (nbr % 2 == 0)
printf ("C\'est un nombre pair\n");
else
printf ("C'est un nombre impair\n");
else
printf ("C\'est un nombre negatif\n");
getch();
}

77
Opérateur (condition )? (vrai): (faux)

 Le C fournit aux programmeurs un opérateur


permettant d'obtenir une valeur si une
condition est vraie, et une autre si la
condition est fausse ; il s'agit de l'opérateur
?:, qui s'utilise comme ceci :
condition ? valeur_si_vrai : valeur_si_faux

78
Opérateur (condition )? (vrai): (faux)

79
Les structures de contrôle

Sélection multiple : L‟instruction switch


switch(1)
Action 1
z=3
"ok"

z? z=4
"PB1"
autres
"PB2"

Action 3

switch (z) {
case 3 : printf("ok"); break;
case 4 : printf("PB1"); break;
default : "printf ("PB2");
};

81
switch(2)
switch (expression )
{
case constante1: liste d'instructions 1
break;
case constante2: liste d'instructions 2
break;
...
case constanten: liste d'instructions n
break;
default: liste d'instructions
break;
}

82
Switch(3)

 Le bloc default n‟est pas obligatoire


 « expression » doit être de type char ou int
 expression, constante1, constante2 et les autres
valeurs sont de même type
 L‟instruction break permet de sortir de l‟instruction
switch. Elle est importante car si on ne la met pas
après chaque cas d‟exécution alors toutes les
instructions après ce cas seront exécutées (bien sur
s‟ils ne sont pas suivis d‟une autre instruction break).

83
switch(4)

Exemple:
int mois ;
scanf(" %d" ,&mois) ;
switch ( mois )
{
case 1 : printf(" janvier" ) ;
break ;
case 2 : printf(" fevrier" ) ;
break ;

case 12 : printf(" décembre" ) ;
break ;
default : printf(“erreur”)
}

84
3. Les structures Répétitives
Les structures itératives

 Elles permettent de spécifier des instructions


qui seront exécutées plusieurs fois par le
processeur. On parle aussi de boucles. Les
structures itératives de C sont
• while (<==> tant que … faire)
• do ... while (<==> répéter … jusqu‟à)
• for (pour parcourir un intervalle)
 Elles permettent de couvrir tous les cas
possibles d‟itérations.

86
Les structures Répétitives

La boucle while
La boucle while(1)
 Syntaxe
while ( expression )
instruction ou bloc d’instructions
 Fonctionnement
 Lorsque le programme atteint l‟instruction while, il évalue
l‟expression entre parenthèses.
 Si le résultat est vrai (différent de zéro), alors il exécute
l‟instruction ou le bloc d‟instructions qui suit puis il
recommence. Il évalue une nouvelle fois l‟expression, etc.
 Si le résultat est faux (au premier, deuxième,... ou Xème
passage) alors il n‟exécute pas l‟instruction et arrête de boucler,
passant à l‟instruction suivante.

88
La boucle while(2)
 Remarques :
 Le test s‟effectuant au début, il est très possible
que l‟instruction ne soit jamais exécutée.
 L‟expression entre les parenthèses est
obligatoire.
 Il est important que l‟instruction ou le bloc puisse
influencer sur l‟évaluation de l‟expression entre
les parenthèses (par exemple en modifiant une
variable de fin ou un compteur), sinon, le
programme bouclera indéfiniment (CTRL-C pour
l‟arrêter).

89
La boucle while(3)
Exemple1:
/* Afficher les nombres de 1 à 10 */
int I = 0 ;
while (I<10)
printf(“%d\n”,++I);
Exemple2:
/* calculer la somme des N premiers entiers naturels*/
int somme=0, i = 0;
while (i<N)
{
somme += i;
i++ ;
}

90
La boucle while(4)

Exemple: Affichage de toutes les lettres majuscules


#include <stdio.h>
#include <conio.h>
main() {
char uncar='A';
while (uncar<='Z') {
printf ("%c, ",uncar);
uncar += 1; /* code ASCII suivant */
}
printf ("\n");
getch();
}

91
Les structures Répétitives

Les boucles while.. et do…while


while.. et do…while(1)
Exemple, on veut imprimer tous les nombres de 1 à 10
x=1;
while (x <=10) {
x=1
printf("%d\n",x);
x=x+1;
imprimer x
};
Tant que x ≤ 10
x=x+1 …

JUSQU'À CE QUE : do action while (condition);


x=1;
x=1 do {
printf("%d\n",x);
imprimer x x=x+1;
Jusqu'à ce que x >11 }
x=x+1 while (x <= 11);

93
La boucle do…while(2)

do
{
bloc d’instructions;
} while ( expression );
 Le bloc d'instructions est exécuté au moins une
fois et jusqu‟à ce que l'expression fournit une
valeur égale à zéro (false).
 Les { } ne sont pas obligatoires, si le bloc
d‟instruction contient une seule instruction.

94
while.. et do…while(3)
 do - while est comparable à la structure Repeat du
langage Pascal si la condition finale est inversée
logiquement.
 La structure do - while est semblable à la structure
while, avec la différence suivante :
 while évalue la condition avant d'exécuter le bloc d'instructions.
 do - while évalue la condition après avoir exécuté le bloc
d'instructions. Ainsi le bloc d'instructions est exécuté au moins
une fois.
 Une application typique de do - while est la saisie de
données qui doivent remplir une certaine condition.

95
La boucle do…while(4)

Exemple: Lecture d‟un nombre réel dans


l‟intervalle [1,10]
float N;
do
{
printf("Donner un nombre entre 1 et 10 :");
scanf("%f", &N);
}while (N<1 || N>10);

96
Les structures Répétitives

La boucle for…
La boucle for ... (1)
 L‟instruction for est une sorte de while plus complexe
que l‟on utilise généralement dans le cas de boucles où
le nombre d‟itérations est connu. Son usage n‟est
toutefois pas limité à ce seul cas comme dans d‟autres
langages.
 Syntaxe
for ( initialisation; continuation; progression )
instruction ou bloc d’instructions
 initialisation, continuation et progression sont des
expressions C quelconques.

98
La boucle for ... (2)

 Fonctionnement
 Lorsque le programme arrive à une instruction for, l‟expression
initialisation est évaluée. Ensuite, l‟expression continuation est
évaluée, si elle est vraie, l‟instruction ou le bloc est exécuté et
l‟expression progression est évaluée. On revient ensuite à
l‟évaluation de l‟expression de continuation et on recommence
jusqu‟à ce qu‟elle soit fausse.
 Il est possible que les expressions initialisation, continuation ou
progression soient vides; dans ce cas, il faut tout de même mettre
le bon nombre de points-virgule. Il manquera une des étapes et le
comportement sera différent. Si l‟expression continuation est
absente, la boucle ne s‟arrêtera jamais, à moins qu‟une instruction
de rupture appropriée soit rencontrée.

99
La boucle for ... (3)

 Equivalence
 Une instruction for peut
être transformée en son
équivalent while:
initialisation;
while ( continuation) {
instruction ou bloc d‟instructions
progression;
}

100
La boucle for ... (4)

for(x=1; x≤10; x=x+1)


printf("%d\n",x);
Pour x E {1,2,…,10} imprimer x

équivalent TANT QUE


x=1;
while (x <=10) {
x=1
printf("%d\n",x);
x=x+1;
imprimer x
};
Tant que x ≤ 10
x=x+1 …

101
Les ruptures

• goto (aller à)
• break (arrêter)
• continue (passer à l‟itération suivante)
• return (sortie de fonction)
• exit (fin du programme)

102

Vous aimerez peut-être aussi