Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Programmation
Dr Guy MBATCHOU
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Dr Guy MBATCHOU 1
Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Objectif 13 : Associer des opérateurs et priorités aux opérations
Les opérations et leurs opérateurs
L’affectation
Elle se fait avec le signe =.
Une affectation peut elle-même être utilisée comme un opérande dans une autre opération, la valeur de cette
affectation est alors le résultat du calcul du membre de droite. Ainsi on pourra par exemple écrire a=(b=c+1)+2; dont
l'action est de calculer c+1, d'affecter le résultat à b, d'y ajouter 2 puis d'affecter le nouveau résultat à a. Il est à noter
que ce type d'écriture, sauf cas particuliers, rend la lecture du programme plus difficile et doit donc être si possible
évité.
Lorsque vous affectez à une variable une valeur ou une expression de type différent, cette dernière est
automatiquement convertie (si possible !) en type de la variable.
Par exemple, si vous affectez à une variable de type float une valeur de type int alors cette dernière sera convertie en
float.
Les opérations arithmétiques
Les opérations arithmétiques restent classiques à savoir : l’addition (+), la soustraction (-), la multiplication (*), la
division (/), le modulo (%), etc.
Par contre l’addition et la soustraction peuvent être utilisées sous forme unaire.
-a 0-a ; +b 0+b ;
Les opérations relationnelles ou de comparaison
Ce sont l’égalité (== double signes d’égalité), la supériorité (> ou >=), l’infériorité (< ou <=) et l’inégalité ( !=)
Les opérations logiques
OU ||
ET &&
NON !
Les opérations d’affectation avec calcul
Le langage C contient des opérateurs d’affectation qui permettent de faire des calculs avant l’affectation de la valeur.
Ce type d’opérateur est composé d’un opérateur arithmétique et de l’affectation : *=, /=, %=, +=, -=, <<=, >>=, &=, |=,
^=.
Exemples :
A += 5 est équivalent à A = A+5
B *= C/2 est équivalent à B = B * (C/2)
Les opérations unitaires d’’incrémentation et de décrémentation
Il s’agit des opérateurs unaires qui permettent d’incrémenter (++) ou décrémenter (--) d’une unité la variable.
++a ou a++ a= a + 1
Dr Guy MBATCHOU 2
Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
--b ou b-- b = b – 1
Lorsque l’opérateur (++ ou --) se trouve à gauche de la variable on parle de pré-incrémentation ou pré-décrémentation
et lorsqu’il se trouve à droite on parle de post-incrémentation ou post-décrémentation.
Dans la pré-incrémentation, on incrémente (ajoute) d’une unité la valeur de la variable avant de l’utiliser alors que
dans la post-décrémentation, on utilise la valeur contenue dans la variable avant de l’incrémenter d’une unité. Il en est
de même pour la pré-décrémentation et la post-décrémentation mais on décrémente (diminue) d’une unité.
Exemple 1
int A, B, C, D ;
{
B=1;
D=0;
A = B++ ; // A vaudra 1 et B vaudra 2
C = ++D ; // C vaudra 1 et D vaudra 1
}
Exemple 2
int a = 1,
b = 2;
int c = ++a + b++; //A = 2; B = 3; C = 4
int d = 4;
d+= c-- + --c; //A = 2; B = 3; C = 2; D = 10
a-= 2 * b++ - (a * c++) + (d++ / a++); //A = -4; B = 4; C = 3; D = 11
Le transtypage : cast
Lors de calculs d'expressions numériques, les types flottants sont dits absorbants car la présence d'un unique nombre
flottant dans une expression entraîne une évaluation complète sous forme de flottant.
Il est fréquent qu'une variable ait besoin d'être utilisée avec un autre type que son type naturel. Cela arrive par
exemple si l'on veut calculer le quotient de deux entiers et stocker le résultat dans un réel.
Ce transtypage s'obtient en faisant précéder l'expression que l'on souhaite utiliser avec un autre type par ce type entre
parenthèses.
(type) expression
Exemple :
int a, b ;
float c ;
b=9 ;
c=2 ;
c = ((float) a) / b ; /*Ici la valeur de a est transtypé en float et le résulat de la division sera un float. Ainsi C
vaudra 4.5*/
/*Sans le transtypage le résultat de la division aurait donné un entier*/
int d=a/b ; //d vaudra 4
L’ordre de priorité des opérateurs
Opérateurs Fonction Associativité Priorité
() appel de fonction maximale
Dr Guy MBATCHOU 3
Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Opérateurs Fonction Associativité Priorité
[] élément de tableau
. champ de structure ou d'union
-> champ désigné par pointeur
! négation booléenne
~ complémentation binaire
- Opposé
++ Incrémentation
-- Décrémentation
& Adresse
* déréférenciation de pointeur
(type) Transtypage
* Multiplication
/ Division
% reste euclidien
+ Addition
- Soustraction
<< décalage à gauche
>> décalage à droite
< strictement inférieur
<= inférieur ou égal
> strictement supérieur
>= supérieur ou égal
== Egal
!= Différent
& ET bit à bit
^ OU eXclusif (XOR) bit à bit
| OU bit à bit
&& ET booléen
|| OU booléen
?: Conditionnelle
= Affectation
*=
/= affectations avec calcul
%=
+=
-= affectations avec calcul
<<=
>>=
&=
affectations avec calcul
|=
^=
Dr Guy MBATCHOU 4
Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Opérateurs Fonction Associativité Priorité
, séquence d'expressions minimale
Les fonctions d’Entrée / Sortie
Afin de permettre aux programmes d'écrire sur leurs flux d'entrée / sortie standards, la bibliothèque C définit plusieurs
fonctions extrêmement utiles. Les deux principales fonctions sont sans doute les fonctions printf et scanf. La fonction
printf (« print formatted » en anglais) permet d'afficher des données à l'écran, et scanf (« scan formatted ») permet de
les lire à partir du clavier.
La fonction printf s'emploie comme suit : printf(format [, valeur [, valeur [...]]])
On peut passer autant de valeurs que l'on veut, pour peu qu'elles soient toutes référencées dans le format. Elle
renvoie le nombre de caractères affichés.
Le format peut contenir du texte, mais surtout elle doit contenir autant de formateurs que de variables à afficher. Si ce
n'est pas le cas, le programme plantera ! Les formateurs sont placés dans le texte là où les valeurs des variables
doivent être affichées.
Un formateur commence donc toujours par le caractère %. Pour afficher ce caractère sans faire un formateur, il faut le
dédoubler (%%).
Type de donnée à afficher Caractère de formatage
Entier court signé hd
Entier signé d
Entier long signé ld
Entier court non signé hu
Nombre
Entier non signé u
entier
Entier long non signé lu
Entier octal non signé o
x (avec les caractères 'a' à 'f') ou
Entier hexadécimal non signé
X (avec les caractères 'A' à 'F')
Réel simple précision (float) f
Nombre Réel double précision (double) lf
réel Réel simple précision en notation exponentielle e ou E
Réel double précision en notation exponentielle g ou G
Caractère c
Caractère
Chaîne de caractères s
Dr Guy MBATCHOU 5
Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Exemple :
#include <stdio.h> /* Elle est nécessaire pour utiliser la fonction printf*/
int main(void)
{
int i = 2;
float k = 2.19 ;
printf("Voici la valeur de i : %d.\n", i);
printf("Voici la valeur de k : %f.\n", k);
return 0;
}
La fonction scanf permet de faire une ou plusieurs entrées de données (lecture des données). Comme la fonction
printf, elle attend un format en premier paramètre. Il faut ensuite passer les variables devant contenir les entrées dans
les paramètres qui suivent.
Sa syntaxe est la suivante : scanf(format, &variable [, &variable [...]]);
Elle renvoie le nombre de variables lues.
Ne cherchez pas à comprendre pour l'instant la signification du symbole & se trouvant devant chacune des variables.
Sachez seulement que s'il est oublié, le programme plantera !
Le format peut contenir des chaînes de caractères. Toutefois, si elle contient autre chose que des formateurs, le texte
saisi par l'utilisateur devra correspondre impérativement avec les chaînes de caractères indiquées dans le format. scanf
cherchera à reconnaître ces chaînes, et arrêtera l'analyse à la première erreur.
#include <stdio.h> /* Autorise l'emploi de printf et de scanf. */
float x, y;
int main(void)
{
printf("Calcul de moyenne\n"); /* Affiche le titre. */
printf("Entrez le premier nombre : ");
scanf("%f", &x); /* Lecture du premier nombre. */
printf("\nEntrez le deuxième nombre : ");
scanf("%f", &y); /* Lecture du deuxième nombre. */
printf("\nLa valeur moyenne de %f et de %f est %f.\n",x, y, (x+y)/2);
return 0;
}
Permutation
Ecrire un programme qui lie, permute et affiche les valeurs de trois variables A, B, C de type entier qui sont entrées au
clavier.
Division entière
Ecrire un programme qui affiche le quotient et le reste de la division entière de deux nombres entiers entrés au clavier
ainsi que le quotient rationnel de ces nombres.
Instruction et bloc d’instructions
En langage C, une instruction se termine par un point-virgule ( ;).
Un bloc d’instructions commence par le caractère { et se termine par le caractère }.
Dr Guy MBATCHOU 6
Programmation
Séquence 3 : Objectif 13 : Associer des opérateurs et priorités aux opérations
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O13(50%)
Seuil de validation : 60% - Titre : Calcul de l’hypoténuse d’un triangle Objectifs visés : O13(50%)
Dr Guy MBATCHOU 7