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

Chap 1

chap1

Transféré par

frameoagency
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)
1 vues102 pages

Chap 1

chap1

Transféré par

frameoagency
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

Introduction Générale

Variables Opérateurs ES en C
Pr Mostafa SAADI – ENSAK

L’Ecole Nationale des Sciences Appliquées à Khouribga


saadi mo@[Link]

21 novembre 2020

1/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Plan du Cours I
1 Un peu d’histoire
2 La compilation
3 Les composants élémentaires du C
Les identificateurs
Les mots-clefs
Les commentaires
4 Structure d’un programme C
5 Les types prédéfinis
Le type caractère
Les types entiers
Les types flottants
6 Les variables & Les constantes
Introduction
Les variables
Les constantes
Les constantes entières 2/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Plan du Cours II
Les constantes réelles
Les constantes caractères
Les constantes chaı̂nes de caractères

7 Les opérateurs
L’affectation
Les opérateurs arithmétiques
Les opérateurs relationnels
Les opérateurs logiques booléens
Les opérateurs logiques bit à bit
Les opérateurs d’affectation composée
Les opérateurs d’incrémentation et de décrémentation
L’opérateur virgule
L’opérateur conditionnel ternaire
L’opérateur de conversion de type
L’opérateur adresse
Les priorités des opérateurs 3/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Plan du Cours III
8 Les fonctions d’entrées-sorties classiques
La fonction d’écriture  printf 
La fonction de saisie  scanf 
Impression et lecture de caractères

9 Quelques conseils pour l’écriture d’un programme C

10 Références

4/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
1⇒ Un peu d’histoire

1 Un peu d’histoire

5/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
6/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
2⇒ La compilation

2 La compilation

7/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
8/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
3⇒ Les composants élémentaires du C

3 Les composants élémentaires du C


Les identificateurs
Les mots-clefs
Les commentaires

9/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les Composants élémentaires du C

Un programme en langage C est constitué des six groupes de


composants élémentaires suivants :
v les identificateurs,
v les mots-clefs,
v les constantes,
v les chaı̂nes de caractères,
v les opérateurs,
v les signes de ponctuation.
On peut ajouter à ces six groupes les commentaires, qui sont
enlevés par le préprocesseur.

10/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Definition d’un Identificateur

Le rôle d’un identificateur est de donner un nom à une entité du


programme. Plus précisément, un identificateur peut désigner :
v un nom de variable ou de fonction,
v un type défini par typedef, struct, union ou enum,
v une étiquette.
Un identificateur est une suite de caractères parmi :
v les lettres (minuscules ou majuscules, mais non accentuées),
v les chiffres,
v le ”blanc souligné” ( ).

11/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Definition d’un Identificateur

v Aucun espace ne peut figurer dans un identificatgeur.


v les caractères sont les lettres (A..Z,a..z) et les chiffres 0..9
(pas de caractères spéciaux, pas de blancs) et le caractère ” ”.
v Les caractères accentués ne sont pas admis, pas plus que le
”ç”.
v Le premier caractère d’un identificateur ne peut pas être un
chiffre.
v minuscules et majuscules sont différentes fred ?Fred
v longueur maximum = 31 (plus de caractères sont tolérés, mais
ils sont ignorés)

12/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Definition d’un Identificateur

v Il est cependant déconseillé d’utiliser   comme premier


caractère d’un identificateur car il est souvent employé pour
définir les variables globales de l’environnement C.
v Le compilateur peut tronquer les identificateurs au-delà d’une
certaine longueur.
v ATTENTION :
Les majuscules et minuscules sont différenciées.
Un identificateur ne peut pas être un mot réservé du langage.

13/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Identificateur : Exmples

Voici quelques identificateurs corrects :


A A1 n n1 nombre 1
racine carree Taxe Valeur Ajoutee

Et quelques uns incorrects :


v 1b (il commence par un chiffre)
v nombre 1 (il comporte un espace)
v racine carrée (il comporte un caractère accentué)
v nombre-1 (il comporte le signe -, qui est différent du signe )

14/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les mots-clefs du C

Mots-clefs
v Un certain nombre de mots, appelés mots-clefs, sont réservés
pour le langage lui-même et ne peuvent pas être utilisés
comme identificateurs. L’ANSI C compte 32 mots clefs.
v Les mots réservés du langage C doivent être écrits en
minuscules.

15/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les mots-clefs du C

mots-clefs
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

16/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les mots-clefs du C

Catégories des mots-clefs


1 les spécificateurs de stockage : auto register static extern
typedef
2 les spécificateurs de type : char double enum float int long
short signed struct union unsigned void
3 les qualificateurs de type : const volatile
4 les instructions de contrôle : break case continue default do
else for goto if switch while
5 divers : return sizeof

17/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les commentaires

v Il est préférable d’ajouter des commentaires facilitant la


lecture et la compréhension du programme.
v Il y a deux façons :
1 Le début d ?un commentaire est marqué par /* et sa fin par */

/∗ ce programme est écrit en C ∗/


2 Une ligne commençant par //

int i = 0; // sert d'indice dans la boucle

v On ne peut pas imbriquer des [Link] commentaire


ne peut pas contenir de commentaire.

18/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
4⇒ Structure d’un programme C

4 Structure d’un programme C

19/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

Expression
Une expression est une suite de composants élémentaires
syntaxiquement correcte, par exemple :

x=0
// ou bien
(i >= 0) && (i < 10) && (p[i] != 0)
// ou bien
somme + = 20

20/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

Instruction
v Une instruction est une expression suivie d’un point-virgule ;.
v Plusieurs instructions peuvent être rassemblées par des
accolades et pour former une instruction composée ou bloc
qui est syntaxiquement équivalent à une instruction.

if (x != 0)
{
z = y / x;
t = y % x;
}

21/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

Déclaration
C’est une instruction composée d’un spécificateur de type et
d’une liste d’identificateurs séparés par une virgule. Par exemple,

int a;
int b = 2, c;
double x = 2.38e4;
char message[80];

Attention
En C, toute variable doit faire l’objet d’une déclaration avant d’être
utilisée.

22/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

Structure d’un programme C


Un programme C se présente de la façon suivante :

[directives au préprocesseur]
[déclarations de variables externes]
[fonctions secondaires]

main()
{
déclarations de variables internes,
instructions
}

[autres fonctions secondaires]

23/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C I

#include <stdio.h> //Directives du préprocesseur : accès avant la


compilation
#define DEBUT −10
#define FIN 10
#define MSG ”Programme de démonstration\n”

int fonc1(int x); //Déclaration de fonctions


int fonc2(int x);

void main()
{ /∗ début du bloc de la fonction main∗/
int i; /∗ définition des variables locales ∗/
i=0;
fonc1(i) ; //appel de la fonction fonc1
fonc2(i) ; // appel de la fonction fonc2
24/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C II

} /∗ fin du bloc de la fonction main ∗/

//Définitions des fonctions

int fonc1(int x) {
return x;
}

int fonc2(int x) {
return (x ∗ x);
}

25/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

Fonctions précompilées et header files


v Il existe en C des fonctions précompilées qui peuvent être
incluses dans nos programmes, ces fonctions sont contenues
dans des fichiers spéciaux appelés library files (extension *.lib).
v Pour accéder à ces fonctions une directive doit être issue au
compilateur indiquant d ?inclure les header files (extension
*.h) contenant les déclarations correspondantes à ces
fonctions.
v La syntaxe de la directive écrite au tout début du programme
est la suivante :

#include<fichier.h>

26/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

préprocesseur
v Le préprocesseur effectue un prétraitement du programme
source avant qu’il soit compilé.
v Ce préprocesseur exécute des instructions particulières
appelées directives.
v Ces directives sont identifiées par le caractère # en tête.
v Inclusion de fichiers
1 #include < nom − de − fichier > /* répertoire standard */
2 #include ”nom − de − fichier ” /* répertoire courant */

27/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

préprocesseur : exemples de directives


v La gestion des fichiers (stdio.h) /* Entrees-sorties standard */
v Les fonctions mathématiques (math.h)
v Taille des type entiers (limits.h)
v Limites des type réels (float.h)
v Traitement de chaı̂nes de caractères (string.h)
v Le traitement de caractères (ctype.h)
v Utilitaires généraux (stdlib.h)
v Date et heure (time.h)

28/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C
La fonction main
v La fonction main est la fonction principale des programmes
en C : Elle se trouve obligatoirement dans tous les
programmes. L’exécution d’un programme entraı̂ne
automatiquement l’appel de la fonction main.
v Syntaxe :

main()
{
<déclarations>
<instructions>
return 0; // return 0 indique que le programme s'est
terminé avec succès
}

v Atention ! La fonction main() ainsi que toutes les instructions


du C ont besoins d’être écrites en minuscule. 29/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Structure d’un programme C

Les fonctions secondaires


v Les fonctions secondaires peuvent être placées indifféremment
avant ou après la fonction principale.
v Une fonction secondaire peut se décrire de la manière
suivante :

type ma_fonction( arguments )


{déclarations de variables internes;
instructions;
}

v Plus de détails dans le chapitre sur les fonctions en C.

30/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
5⇒ Les types prédéfinis

5 Les types prédéfinis


Le type caractère
Les types entiers
Les types flottants

31/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les types prédéfinis

Introduction
v Le C est un langage typé.
v Cela signifie en particulier que toute variable, constante ou
fonction est d’un type précis.
v Le type d’un objet définit la façon dont il est représenté en
mémoire.

32/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les types prédéfinis

introduction
v La mémoire de l’ordinateur se décompose en une suite
continue d’octets.
v Chaque octet de la mémoire est caractérisé par son adresse,
qui est un entier.
v Deux octets contigus en mémoire ont des adresses qui
diffèrent d’une unité.
v Quand une variable est définie, il lui est attribué une adresse.
Cette variable correspondra à une zone mémoire dont la
longueur (le nombre d’octets) est fixée par le type.
v La taille mémoire correspondant aux différents types dépend
des compilateurs ;
v la norme ANSI spécifie un certain nombre de contraintes
(float codé sur 4octets).
33/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les types prédéfinis

Types de base
v Les types de base en C concernent les caractères, les entiers
et les flottants (nombres réels).
v Ils sont désignés par les mots-clefs suivants :

char int float double short long unsigned

34/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Le type caractère

Le type caractère : char


v Le mot-clef char désigne un objet de type caractère.
v Un char peut contenir n’importe quel élément du jeu de
caractères de la machine utilisée.
v La plupart du temps, un objet de type char est codé sur un
octet ; c’est l’objet le plus élémentaire en C.
v Le jeu de caractères utilisé correspond généralement au
codage ASCII (sur 7 bits).
v La plupart des machines utilisent désormais le jeu de
caractères ISO-8859 (sur 8 bits), dont les 128 premiers
caractères correspondent aux caractères ASCII.
v Les 128 derniers caractères (codés sur 8 bits) sont utilisés
pour les caractères propres aux différentes langues.

35/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Le type caractère

Le type caractère : char


v Une des particularités du type char en C est qu’il peut être
assimilé à un entier : tout objet de type char peut être utilisé
dans une expression qui utilise des objets de type entier.
v Par exemple, si c est de type char, l’expression c+1 est valide.
Elle désigne le caractère suivant dans le code ASCII. Ainsi, le
programme suivant imprime le caractère ’B’.

main()
{
char c = 'A';
printf(”%c”, c + 1);
}

36/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les types entiers

Les types entiers : int


v Le mot-clef désignant le type entier est int.
v Un objet de type int est représenté par le mot ”naturel” de la
machine utilisée, 32 bits pour un DEC alpha ou un PC Intel.
v Le type int peut être précédé d’un attribut de précision (short
ou long) et/ou d’un attribut de représentation (unsigned).

37/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les types entiers

Les types entiers : int


v Un objet de type short int a au moins la taille d’un char et
au plus la taille d’un int.
v En général, un short int est codé sur 16 bits.
v Un objet de type long int a au moins la taille d’un int (64
bits sur un DEC alpha, 32 bits sur un PC Intel).

38/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les types flottants

Les types flottants : float


v Les types float, double et long double servent à représenter
des nombres en virgule flottante.
v Ils correspondent aux différentes précisions possibles.

39/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
6⇒ Les variables & Les constantes

6 Les variables & Les constantes


Introduction
Les variables
Les constantes
Les constantes entières
Les constantes réelles
Les constantes caractères
Les constantes chaı̂nes de caractères

40/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les variables & Les constantes

Introduction
v Les variables et les constantes sont les données principales qui
peuvent être manipulées par un programme.
v Les déclarations introduisent les variables qui sont utilisées,
fixent leur type et parfois aussi leur valeur de départ.
v Les opérateurs contrôlent les actions que subissent les valeurs
des données.
v Pour produire de nouvelles valeurs, les variables et les
constantes peuvent être combinées à l’aide des opérateurs
dans des expressions.
v Le type d’une donnée détermine :
l’ensemble des valeurs admissibles,
le nombre d’octets à réserver en mémoire,
l’ensemble des opérateurs qui peuvent y être appliqués.

41/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les variables & Les constantes

Definition
1 Constante : Elle ne change pas de valeur pendant l’exécution

du programme
2 Variable : Elle peut changer sa valeur pendant l’exécution du
programme

Caractèristiques
Une variable ou une constante est définie par :
1 L’identificateur : c’est le nom de la variable ou la constante
2 Le type : entier, caractère, chaine de caractère, réel, booléen
ou structure.

42/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les variables

Déclaration d’une variable


Les déclarations introduisent les variables qui seront utilisées, fixent
leur type et parfois aussi leur valeur de départ (initialisation)

Syntaxe de déclaration en C
<Type> <NomVar1>,<NomVar2>,...,<NomVarN> ;

Exemples:
int i, j,k;
float x, y ;
double z=1.5; // déclaration et initialisation
short compteur;
char c=`A`;

43/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les variables

Types de base

char : caractères (entier sur 1 octet : − 128 à 127)


short ou short int : entier court (entier sur 2 octets : −
32768 à 32767)
int : entier standard (entier sur 2 ou 4 octets )
long ou long int : entier long (4 octets : − 2147483648 à
2147483648) Entier : int I; short S;
float : réel simple précision codé sur 4 octets de
−3.4∗{10}ˆ{38} à 3.4∗{10}ˆ{38}
double : réel double précision codé sur 8 octets de
−1.7∗{10}ˆ{308} à 1.7∗{10}ˆ{308}
long double : réel très grande précision codé sur 10 octets
de −3.4∗{10}ˆ{4932} à 3.4∗{10}ˆ{4932}

44/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les variables

Remarques
v Le préfixe unsigned indique des valeurs positives.
v Une expression est estimée fausse si elle vaut 0, et est estimée
vraie pour toute autre valeur.
v Il n’existe pas de type spécial chaı̂ne en C. Une chaı̂ne de
caractères est traitée comme un tableau à une dimension de
caractères (vecteur de caractères).

45/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les variables

Opérateur de forçage de type (cast)


Il est possible d ?effectuer des conversions explicites ou de forcer le
type d ?une expression

Syntaxe :
(<type>) <expression>

Exemple :
int n, p ;
(double) (n / p); // convertit l?entier n / p en double

46/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes

Définition
v Une constante est une valeur qui apparaı̂t littéralement dans
le code source d’un programme.
v Le type de la constante étant déterminé par la façon dont la
constante est écrite.
v Les constantes peuvent être de 4 types : entier, flottant
(nombre réel), caractère, énumération.
v Ces constantes vont être utilisées, par exemple, pour initialiser
une variable.

47/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les Constantes

Déclaration
En C, il y a deux façons pour déclarer une constante :
1 la directive #define :

#define nom_constante valeur


Ici la constante ne possède pas de type.
Exemple : #define Pi 3.141592
2 le mot clé const :

const type nom = expression ;


Dans cette instruction la constante est typée.
Exemple : const float Pi =3.141592

48/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes entières

Une constante entière peut être représentée de 3 manières


différentes suivant la base dans laquelle elle est écrite :
1 décimale : par exemple, 0, -2224 et 2437348 sont des
constantes entières décimales.
2 octale : la représentation octale d’un entier correspond à sa
décomposition en base 8. Les constantes octales doivent
commencer par un zéro. Par exemple, les représentations
octales des entiers 0 et 255 sont respectivement 00 et 0377.
3 hexadécimale : la représentation hexadécimale d’un entier
correspond à sa décomposition en base 16. Les lettres de a à
f sont utilisées pour représenter les nombres de 10 à 15. Les
constantes hexadécimales doivent commencer par 0x ou 0X.
Par exemple, les représentations hexadécimales de 14 et 255
sont respectivement 0xe et 0xff.

49/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes entières

Les constantes entières


On peut spécifier explicitement le format d’une constante entière
en la suffixant par u ou U pour indiquer qu’elle est non signée,
ou en la suffixant par l ou L pour indiquer qu’elle est de type long.
Constante type
1234 int
02322 int /* octal */
Par exemple : 0x4D2 int /* hexadécimal */
123456789L long
1234U unsigned int
123456789UL unsigned long int

50/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes réelles

Les constantes réelles


v Les constantes réelles sont représentées par la notation
classique par mantisse et exposant.
v L’exposant est introduit par la lettre e ou E ; il s’agit d’un
nombre décimal éventuellement signé.
v Par défaut, une constante réelle est représentée avec le
format du type double.

51/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes réelles

Les constantes réelles


v Les suffixes f et F forcent la représentation de la constante
sous forme d’un float.
v les suffixes l et L forcent la représentation sous forme d’un
long double.
Constante type
12.34 double
Par exemple : 12.3e-4 double
12.34F float
12.34L long double

52/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes cacartères : imprimable

caractère imprimable
v Pour désigner un caractère imprimable, il suffit de le mettre
entre apostrophes ’ ’ (par ex. ’A’ ou ’$’).
v Les seuls caractères imprimables qu’on ne peut pas représenter
de cette façon sont l’antislash et l’apostrophe, qui sont
respectivement désignés par \\ et \’.
v Le point d’intérrogation et les guillemets peuvent aussi être
désignés par les notations \ ? et \”.

53/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes caractères : non imprimables

caractères non imprimables


v Les caractères non imprimables peuvent être désignés par
leurs codes octaux ou exadécimaux. \code-octal ou
\code-hexa.
1 code-octal est le code en octal du caractère.
2 code-hexa est le code en hexadécimal du caractère.
Par exemple, ’\33’ et ’\x1b’ désignent le caractère escape.

54/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes caractères : non imprimables

caractères non imprimables


les caractères non-imprimables les plus fréquents disposent aussi
d’une notation plus simple :

\n nouvelle ligne
\r retour chariot
\t tabulation horizontale
\f saut de page
\v tabulation verticale
\a signal d'alerte
\b retour arrière

55/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes chaı̂nes de caractères

chaı̂ne de caractères
v Une chaı̂ne de caractères est une suite de caractères
entourés par des guillemets. Par exemple,
”Ceci est une chaı̂ne de caractères”
v Une chaı̂ne de caractères peut contenir des caractères non
imprimables, désignés par les représentations vues
précédemment.
Par exemple :
”ligne 1 \n ligne 2”

56/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les constantes chaı̂nes de caractères

chaı̂ne de caractères
v A l’intérieur d’une chaı̂ne de caractères, le caractère ” doit
être désigné par \”.
v Le caractère \ suivi d’un passage à la ligne est ignoré. Cela
permet de faire tenir de longues chaı̂nes de caractères sur
plusieurs lignes.
Exemple :
”ceci est une longue longue longue longue longue longue longue
longue \ chaı̂ne de caractères”

57/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
7⇒ Les opérateurs

7 Les opérateurs
L’affectation
Les opérateurs arithmétiques
Les opérateurs relationnels
Les opérateurs logiques booléens
Les opérateurs logiques bit à bit
Les opérateurs d’affectation composée
Les opérateurs d’incrémentation et de décrémentation
L’opérateur virgule
L’opérateur conditionnel ternaire
L’opérateur de conversion de type
L’opérateur adresse
Les priorités des opérateurs

58/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
L’affectation

L’affectation
v En C, l’affectation est un opérateur à part entière.
v Elle est symbolisée par le signe =. Sa syntaxe est la suivante :

variable = expression

v Le terme de gauche de l’affectation peut être une variable


simple, un élément de tableau mais pas une constante.
v Cette expression a pour effet d’évaluer expression et
d’affecter la valeur obtenue à variable.
v Cette expression possède une valeur, qui est celle expression.
Ainsi, l’expression i = 5 vaut 5.

59/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
L’affectation
L’affectation
v L’affectation effectue une conversion de type implicite : la
valeur de l’expression (terme de droite) est convertie dans
le type du terme de gauche.
Exemple, le programme suivant :

main()
{
int i, j = 2;
float x = 2.5;
i = j + x;
x = x + i;
printf(”\n %f \n”,x);
}
imprime pour x la valeur 6.5 (et non 7), car dans l’instruction i = j
+ x ;, l’expression j + x a été convertie en entier. 60/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs arithmétiques

opérateurs arithmétiques classiques


v Les opérateurs arithmétiques classiques sont :
1 l’opérateur unaire - (changement de signe)
2 les opérateurs binaires :
+ addition
- soustraction
* multiplication
/ division
% reste de la division (modulo)
v Ces opérateurs agissent de la façon attendue sur les entiers
comme sur les flottants.

61/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs arithmétiques

Les spécificités
v le C ne dispose que de la notation / pour désigner à la fois
la division entière et la division entre flottants.
v Si les deux opérandes sont de type entier, l’opérateur /
produira une division entière (quotient de la division).
v Par contre, il délivrera une valeur flottante dès que l’un des
opérandes est un flottant.

Par exemple,
float x;
x = 3 / 2;
affecte à x la valeur 1. Par contre
x = 3 / 2. ;
affecte à x la valeur 1.5.

62/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs arithmétiques

Les spécificités
v L’opérateur % ne s’applique qu’à des opérandes de type
entier.
v Si l’un des deux opérandes est négatif, le signe du reste
dépend de l’implémentation, mais il est en général le même
que celui du dividende.
v Il n’y a pas en C d’opérateur effectuant l’élévation à la
puissance.

63/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs relationnels

Les opérateurs relationnels

> supérieur
>= supérieur ou égal
< strictement inférieur
<= inférieur ou égal
== égal
!= différent
Leur syntaxe est
expression1 op expression2
v Les deux expressions sont évaluées puis comparées.
v La valeur rendue est de type int (il n’y a pas de type booléen
en C) ;
v La valeur vaut 1 si la condition est vraie, et 0 sinon.
64/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs relationnels

ATTENTION
ATTENTION : à ne pas confondre l’opérateur de test d’égalité
= = avec l’opérateur d’affection =. Ainsi, le programme

main()
{
int a = 0;
int b = 1;

if (a = b)
printf(”\n a et b sont egaux \n”);
else
printf(”\n a et b sont differents \n”);
}
imprime à l’écran a et b sont egaux !
65/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs logiques booléens

&& et logique
|| ou logique
! négation logique

Comme pour les opérateurs de comparaison, la valeur retournée


par ces opérateurs est un int qui vaut 1 si la condition est vraie
et 0 sinon.

66/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs logiques booléens

Dans une expression de type


expression1 op1 expression2 op2 ... opN expressionN
l’évaluation se fait de gauche à droite et s’arrête dès que le
résultat final est déterminé. Par exemple dans

int i;
int p[10];
if ((i >= 0) && (i <= 9) && !(p[i] == 0))
...
la dernière clause ne sera pas évaluée si i n’est pas entre 0 et 9.

67/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs logiques bit à bit

Les six opérateurs suivants permettent de manipuler des entiers


au niveau du bit. Ils s’appliquent aux entiers de toute longueur
(short, int ou long), signés ou non.

& et
| ou inclusif
ˆ ou exclusif
˜ complément à 1
<< décalage à gauche
>> décalage à droite

68/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs d’affectation composée

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
est équivalente à

expression1 = expression1 op expression2


Toutefois, avec l’affection composée, expression1 n’est évaluée
qu’une seule fois.

69/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs d’incrémentation et de décrémentation

incrémentation ++ et de décrémentation - -
v Les opérateurs d’incrémentation ++ et de décrémentation –
s’utilisent aussi bien en suffixe (i++) qu’en préfixe (++i).
v Dans les deux cas la variable i sera incrémentée
1 la notation suffixe la valeur retournée sera l’ancienne valeur
de i
2 la notation préfixe se sera la nouvelle.
Par exemple :

int a = 3, b, c;
b = ++a; /∗ a et b valent 4 ∗/
c = b++; /∗ c vaut 4 et b vaut 5 ∗/

70/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs d’incrémentation et de décrémentation

incrémentation ++ et de décrémentation - -

1 int a = 0;
2 int b = 10;
3 a = b++; //ici, a prend l'ancienne valeur de b, c'est−à−dire 10
; et b prend 11 (10+1).
4 a = 0;
5 a = ++b; //ici, b est incrémenté et vaut 12 (11+1), et a prend
la nouvelle valeur de b, c'est−à−dire 12.
6 a = a++; //ici, a prend la valeur retournée par a++, c'est son
ancienne valeur, 12, donc a reste inchang´e et vaut 12.
7 a = 0;
8 a = a++ + ++a; //a prend la valeur retourn´ee par a++ +
++a. Dans cette expression, a++ renvoie 0 et passe a à 1, et
++a passe a à 2 et renvoie 2. On a donc finalement a = 2.
71/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs d’incrémentation et de décrémentation

Affectation combin´ee
v Pour gagner du temps, on peut compacter l’écriture de la
somme d’une expression à une variable.
v On prendra l’exemple de la somme, mais il est possible
d’effectuer ce genre d’op´erations pour la soustraction, le
produit et le quotient.
1 a+ =< expression > calcule l’expression, lui ajoute a (Si a est
modifié dans l’expression, c’est la dernière valeur prise par a
qui est retournée) et retourne le résultat dans a,
2 a = + < expression > ajoute à a (la valeur de a à l’instruction
précédente) la valeur de l’expression et retourne le résultat
dans a.

72/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les opérateurs d’incrémentation et de décrémentation

incrémentation ++ et de décrémentation - -

1 int a = 2;
2 int b = 10;
3 a += a++ + b; //ici, a++ renvoie 2 et a vaut alors 3, (a++
+ b) vaut donc 12 (10+2), on ajoute a (3) et on stocke le
résultat (2+10+3=15) dans a.

4 a =+ a++ + ++b; //on prend a (15), on ajoute a++ (15), on


a alors (15+15=30), on ajoute ++b (11) et on stocke le
résultat (15+15+11=41) dans a.

73/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
L’opérateur virgule
L’opérateur virgule ,
v Une expression peut être constituée d’une suite
d’expressions séparées par des virgules :
expression1, expression2, ... , expressionN
v Cette expression est alors évaluée de gauche à droite.
v Sa valeur sera la valeur de l’expression de droite.
Exemple, le programme

main()
{
int a, b;
b = ((a = 3), (a + 2));
printf(”\n b = %d \n”,b);
}
imprime b = 5.
74/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
L’opérateur conditionnel ternaire

L’opérateur conditionnel ternaire ?


v L’opérateur conditionnel ? est un opérateur ternaire.
v Sa syntaxe est la suivante :
condition ? expression1 : expression2
v Cette expression est égale à expression1 si condition est
satisfaite, et à expression2 sinon.
Par exemple, l’expression

x >= 0 ? x : −x
correspond à la valeur absolue d’un nombre. De même l’instruction

m = ((a > b) ? a : b);


affecte à m le maximum de a et de b.
75/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
L’opérateur de conversion de type

cast ( )
v L’opérateur de conversion de type, appelé cast, permet de
modifier explicitement le type d’un objet.
v (type) objet
Exemple

main()
{
int i = 3, j = 2;
printf(”%f \n”,(float)i/j);
}
retourne la valeur 1.5.

76/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
L’opérateur adresse

L’opérateur adresse &


v L’opérateur d’adresse & appliqué à une variable retourne
l’adresse mémoire de cette variable.
v La syntaxe est

&objet

77/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les priorités des opérateurs
Les priorités des opérateurs
v L’ordre de l’évaluation des différentes parties d’une
expression correspond en principe à celle que nous connaissons
des mathématiques.
v On dit alors que la multiplication a la priorité sur l’addition et
que la multiplication et l’addition ont la priorité sur
l’affectation.
v Si nous voulons 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

X = 2∗(A+3)∗B+4∗C;
l’ordinateur évalue d’abord l’expression entre parenthèses, ensuite
les multiplications, ensuite l’addition et enfin l’affectation. 78/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les priorités des opérateurs

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): = += −= ∗= /= %=

79/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les priorités des opérateurs

Evaluation d’opérateurs de la même classe


1 Dans chaque classe de priorité, les opérateurs ont la même
priorité.
2 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.
3 Pour les opérateurs unaires ( !,++,–) et pour les opérateurs
d’affectation (=,+=,-=,*=,/=,%=), l’évaluation se fait de
droite à gauche dans l’expression.

80/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Les priorités des opérateurs

Exemple 1
Pour A=4 et B=7, l’expression A *= B += 3 sera évaluée comme
suit : A=40

Exemple 2
Pour A=1 et B=4, l’expression !–A==++ !B sera évaluée comme
suit : 1 (vrai)

81/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
8⇒ Les fonctions d’entrées-sorties classiques

8 Les fonctions d’entrées-sorties classiques


La fonction d’écriture  printf 
La fonction de saisie  scanf 
Impression et lecture de caractères

82/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Lire et Ecrire des données

entrées-sorties standards
v Il s’agit des fonctions de la librairie standard stdio.h utilisées
avec les unités classiques d’entrées-sorties, qui sont
respectivement le clavier et l’écran.
v L’appel à la librairie stdio.h par la directive au préprocesseur

#include <stdio.h>

v Sur certains compilateurs cet appel n’est pas nécessaire pour


utiliser printf et scanf.

83/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Lire et Ecrire des données

entrées-sorties standards
v La bibliothèque standard < stdio.h > contient un ensemble de
fonctions qui assurent la communication de la machine
avec le monde extérieur. Nous allons en discuter les plus
importantes :

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

84/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction d’écriture  printf 

printf
v La fonction printf est une fonction d’impression formatée,
ce qui signifie que les données sont converties selon le format
particulier choisi.
v Sa syntaxe est

printf(”chaı̂ne de contrôle ”,expression1, ...,


expressionN);
v La chaı̂ne de contrôle contient :
1 le texte à afficher
2 et les spécifications de format correspondant à chaque
expression de la liste.
v Les spécifications de format ont pour but d’annoncer le
format des données à visualiser.
v Elles sont introduites par le caractère %, suivi d’un caractère
désignant le format d’impression. 85/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction d’écriture  printf  I

Les formats d’impression en C

%d int décimale signée


%ld long int décimale signée
%u unsigned int décimale non signée
%lu unsigned long int décimale non signée
%o unsigned int octale non signée
%lo unsigned long int octale non signée
%x unsigned int hexadécimale non signée
%lx unsigned long int hexadécimale non signée
%f double décimale virgule fixe
%lf long double décimale virgule fixe

86/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction d’écriture  printf  I

Les formats d’impression en C

%e double décimale notation exponentielle


%le long double décimale notation exponentielle
%g double décimale, représentation la plus courte parmi
%f et %e
%lg long double décimale, représentation la plus courte
parmi %lf et %le
%c unsigned char caractère
%s char∗ cha^ıne de caractères

87/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction d’écriture  printf  I

largeur minimale
v En plus du caractère donnant le type des données, on peut
éventuellement préciser certains paramètres du format
d’impression, qui sont spécifiés entre le % et le caractère de
conversion dans l’ordre suivant :
v largeur minimale du champ d’impression : %10d spécifie
qu’au moins 10 caractères seront réservés pour imprimer
l’entier.
v Par défaut, la donnée sera alignée à droite du champ.
v Le signe - avant le format signifie que la donnée sera alignée à
gauche du champ (%-10d).

88/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction d’écriture  printf  I

précision
v précision : %.12f signifie qu’un flottant sera imprimé avec 12
chiffres après la virgule.
v De même %10.2f signifie que l’on réserve 12 caractères
(incluant le caractère .) pour imprimer le flottant et que 2
d’entre eux sont destinés aux chiffres après la virgule.
v Lorsque la précision n’est pas spécifiée, elle correspond par
défaut à 6 chiffres après la virgule.
v Pour une chaı̂ne de caractères, la précision correspond au
nombre de caractères imprimés.
v %30.4s signifie que l’on réserve un champ de 30 caractères
pour imprimer la chaı̂ne mais que seulement les 4 premiers
caractères seront imprimés (suivis de 26 blancs).

89/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction de saisie  scanf 

scanf
v La fonction scanf permet de saisir des données au clavier
et de les stocker aux adresses spécifiées par les arguments
de la fonction.

scanf(”chaı̂ne de contrôle”,argument1,...,argumentN)

v La chaı̂ne de contrôle indique le format dans lequel les


données lues sont converties.
v Elle ne contient pas d’autres caractères (notamment pas de
\n).
v Comme pour printf, les conversions de format sont spécifiées
par un caractère précédé du signe %.
v Les formats valides pour la fonction scanf diffèrent légèrement
de ceux de la fonction printf.
90/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction de saisie  scanf 

scanf
v Les données à entrer au clavier doivent être séparées par des
blancs ou des < RETURN > sauf s’il s’agit de caractères.
v On peut fixer le nombre de caractères de la donnée à lire.
%3s pour une chaı̂ne de 3 caractères,
%10d pour un entier qui s’étend sur 10 chiffres, signe inclus.

#include <stdio.h>
main()
{
int i;
printf(”entrez un entier sous forme hexadecimale i = ”);
scanf(”%x”,&i);
printf(”i = %d\n”,i);
}
Si on entre au clavier la valeur 3c, le programme affiche i = 60. 91/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction de saisie  scanf 

Formats de saisie pour la fonction scanf

%d int décimale signée


%hd short int décimale signée
%ld long int décimale signée
%u unsigned int décimale non signée
%hu unsigned short int décimale non signée
%lu unsigned long int décimale non signée
%o int octale
%ho short int octale
%lo long int octale
%x int hexadécimale
%hx short int hexadécimale
%lx long int hexadécimale

92/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
La fonction de saisie  scanf 

Formats de saisie pour la fonction scanf

%f float flottante virgule fixe


%lf double flottante virgule fixe
%Lf long double flottante virgule fixe
%e float flottante notation exponentielle
%le double flottante notation exponentielle
%Le long double flottante notation exponentielle
%g float flottante virgule fixe ou notation
exponentielle
%lg double flottante virgule fixe ou notation
exponentielle
%Lg long double flottante virgule fixe ou notation
exponentielle
%c char caractère
%s char∗ cha^ıne de caractères
93/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Impression et lecture de caractères

getchar et putchar
v Les fonctions getchar et putchar permettent respectivement
de lire et d’imprimer des caractères.
v Il s’agit de fonctions d’entrées-sorties non formatées.

94/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Impression et lecture de caractères

getchar
v La fonction getchar retourne un int correspondant au
caractère lu.
v Pour mettre le caractère lu dans une variable caractere, on
écrit

caractere = getchar();

95/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Impression et lecture de caractères

putchar
v La fonction putchar écrit caractere sur la sortie standard :

putchar(caractere);

v Elle retourne un int correspondant à l’entier lu.

96/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
9⇒ Quelques conseils pour l’écriture d’un programme C

9 Quelques conseils pour l’écriture d’un programme C

97/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Quelques conseils pour l’écriture d’un programme C

Conseils
v Il existe très peu de contraintes dans l’écriture d’un
programme C.
v Ne prendre aucune précaution aboutirait à des programmes
illisibles.
Aussi existe-t-il un certain nombre de conventions.
v On n’écrit qu’une seule instruction par ligne : le point
virgule d’une instruction ou d’une déclaration est toujours le
dernier caractère de la ligne.
v Les instructions sont disposées de telle façon que la structure
modulaire du programme soit mise en évidence.
v Une accolade { ouvrante marquant le début d’un bloc doit
être seule sur sa ligne.

98/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
Quelques conseils pour l’écriture d’un programme C

Conseils
v { est alignée sur le caractère de gauche de la ligne précédente,
v } est alignée avec l’accolade ouvrante correspondante,
v après { , on commence à écrire deux caractères plus à droite.
v On laisse un blanc entre les mots-clefs if, while, do, switch et
la parenthèse ouvrante qui suit, après une virgule, de part et
d’autre d’un opérateur binaire.
v On ne met pas de blanc entre un opérateur unaire et son
opérande, ni entre les deux caractères d’un opérateur
d’affectation composée.
v Les instructions doivent être indentées afin que toutes les
instructions d’un même bloc soient alignées.
v Le mieux est d’utiliser le mode C d’Emacs (ou un autre
éditeur de texte équivalent).
99/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
10⇒ Références

10 Références

100/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
v Delannoy (C.). – Programmer en langage C. – Eyrolles, 2007.
v https ://[Link]/cours/

101/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale
The End

102/102
Pr Mostafa SAADI – ENSAK Programmation C : CH1 - Introduction générale

Vous aimerez peut-être aussi