Exercices en langage C/Les opérateurs
Pour les besoins de certains exercices, on rappelle le tableau de priorité des opérateurs du C :
Catégorie d'opérateurs
|
Opérateurs
|
Associativité
|
fonction, tableau, membre de structure, pointeur sur un membre de structure | ( ) [ ] . -> | Gauche -> Droite |
opérateurs unaires | - ++ -- ! ~
* & sizeof (type) |
Droite ->Gauche |
multiplication, division, modulo | * / % | Gauche -> Droite |
addition, soustraction | + - | Gauche -> Droite |
décalage | << >> | Gauche -> Droite |
opérateurs relationnels | < <= > >= | Gauche -> Droite |
opérateurs de comparaison | == != | Gauche -> Droite |
et binaire | & | Gauche -> Droite |
ou exclusif binaire | ^ | Gauche -> Droite |
ou binaire | ǀ | Gauche -> Droite |
et logique | && | Gauche -> Droite |
ou logique | ǁ | Gauche -> Droite |
opérateur conditionnel | ? : | Droite -> Gauche |
opérateurs d'affectation | = += -= *= /= %=
&= ^= |= <<= >>= |
Droite -> Gauche |
opérateur virgule | , | Gauche -> Droite |
La priorité des opérateurs va décroissante lorsqu'on se déplace du haut du tableau vers le bas du tableau. Quand les opérateurs ont même priorité, c'est la colonne de droite sur la distributivité qui est utilisée.
Analyse de programmes
[modifier | modifier le wikicode]Nous allons présenter dans cette section un ensemble d'exercices destinés à se familiariser avec les opérateurs du langage C.
Exercice 1
[modifier | modifier le wikicode]- Quelle est la valeur de i après la suite d'instructions :
int i=10;
i = i-(i--);
La série d'instructions donnée est équivalente à :
int i=10;
i = i-(i); // on retire la post décrémentation pour la mettre après
i--;
Donc i vaut -1
- Quelle est la valeur de i après la suite d'instructions :
int i=10;
i = i-(--i);
La série d'instructions donnée est équivalente à :
int i=10;
i--; // i passe à 9
i = i-(i); // on retire la pré-décrémentation pour la mettre avant
Donc i vaut 0
Exercice 2 : la priorité des opérateurs
[modifier | modifier le wikicode]Enlever les parenthèses des expressions suivantes lorsqu'elles peuvent être retirées.
a=(25*12)+b;
if ((a>4) &&(b==18)) { }
((a>=6)&&(b<18))||(c!=18)
c=(a=(b+10));
Évaluer ces expressions pour a=6, b=18 et c=24. On supposera que les valeurs données le sont pour chacune des lignes : il n'y a pas d'exécution séquentielle comme dans un programme.
Petit programme de calcul
[modifier | modifier le wikicode]Écrivez un programme calcul.c qui calcule la distance entre deux points d'un plan :
- Lit les coordonnées de deux points : X1 (x1, y1) et X2 (x2, y2).
- Affiche les données lues
- Calcule la distance d entre les deux points X1 et X2, avec la formule :
- Affiche le résultat à l'écran.
/*
Nom : calcul.c
Auteur : Thierry46
Role : calcule la distance entre deux points d'un plan.
Paramètres : non pris en compte.
Code retour : 0 (EXIT_SUCCESS)
Pour produire un exécutable avec le compilateur libre GCC :
gcc -lm -Wall -o calcul.exe calcul.c
Pour exécuter, tapez : ./calcul.exe
Remarque : Utilise des fonctions requises par la norme C99
Version : 1.0 du 6/1/2008
Licence : GNU GPL
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
// Declaration et initialisation des variables
float x1 = 0.0;
float y1 = 0.0;
float x2 = 0.0;
float y2 = 0.0;
float d = 0.0;
float dx, dy;
// Lit les coordonnées de deux points : X1 (x1, y1) et X2 (x2, y2)
(void)puts("Entrez les coordonnees du point X1 (deux nombres reels x1 et y1) :");
(void)scanf("%f %f", &x1, &y1);
(void)puts("Entrez les coordonnees du point X2 (deux nombres reels x2 et y2) :");
(void)scanf("%f %f", &x2, &y2);
// Affiche les nombres saisis
(void)printf("\nX1(%g, %g) et X2(%g, %g)\n", x1, y1, x2, y2);
// Calcule la distance d entre les deux points X1 et X2
dx = x2 - x1;
dy = y2 - y1;
d = sqrtf(dx*dx + dy*dy);
// Affiche le résultat à l'écran
(void)printf("d(X1, X2) = %g.\n", d);
return EXIT_SUCCESS;
}