#include <stdio.h>
int main()
{
int j = -3;
int a = j % 2;
printf("%d\n", a);
}
A 0
B 1
C -1
D Erreur de compilation
C
L’opérateur % calcule le reste de la division entière. En C, le reste a le même signe que le dividende (le premier opérande). Ainsi, -3 % 2 donne -1, qui est ensuite affiché par printf().
2. Quelle est la sortie de ce code C ?
#include <stdio.h>
int main()
{
int j = 3;
int a = j / -2;
int b = j % -2;
printf("%d %d\n", a, b);
return 0;
}
A -1 1
B 1 -1
C -1 0
D Erreur de compilation
A
En C, la division entière est tronquée vers zéro. Ainsi, 3 / -2 donne -1. Le reste est ensuite calculé avec l’opérateur % : 3 % -2 vaut 1, car le reste conserve le signe du dividende (3). Le programme affiche donc -1 1.
3. Quelle est la sortie de ce code C ?
#include <stdio.h>
int main()
{
int j = 5;
j = j / 3;
printf("%d\n", j);
return 0;
}
A 3
B 1
C 5
D Erreur de compilation
B
Les variables j et 3 sont de type int, donc l’opération 5 / 3 est une division entière. La partie décimale (1,666…) est supprimée, ce qui donne 1. La variable j prend donc la valeur 1, qui est ensuite affichée.
4. Quelle est la sortie de ce code C ?
#include <stdio.h>
int main()
{
int j = -5;
j = j / 3;
printf("%d\n", j);
return 0;
}
A -3
B -1
C -5
D Erreur de compilation
B
Les deux opérandes sont de type int, donc -5 / 3 est une division entière. En C (depuis C99), le résultat est tronqué vers zéro, ce qui donne -1. La variable j prend donc la valeur -1, qui est ensuite affichée.
5. Quelle est la valeur de « y » dans ce code?
#include <stdio.h>
void main()
{
int y = 5 * 9 / 3 + 9;
}
A 24
B 3
C 2.68
D Dépend du compilateur
A
En C, les opérateurs * et / ont la même priorité et sont évalués de gauche à droite, avant l’opérateur +. Le calcul s’effectue donc ainsi : 5 * 9 = 45, puis 45 / 3 = 15, puis 15 + 9 = 24. La variable y prend donc la valeur 24.
6. Quelle est la valeur de « y » dans ce code?
#include <stdio.h>
void main()
{
int y = 5.3 % 2;
printf("Valeur de y est %d", y);
}
A Valeur de y est 0,3
B Valeur de y est 1
C Valeur de y est 2,3
D Erreur de compilation
D
Nous ne pouvons pas effectuer le modulo entre une valeur de type double et une valeur de type int. La sortie est comme suite :
$ gcc main.c
$ a.out
main.c: In function ‘main’:
main.c:5:21: error: invalid operands to binary % (have ‘double’ and ‘int’)
int y = 5.3 % 2;
^
Pour effectuer ce type d’opération nous utilisons la fonction « fmod() » qui se trouve dans la bibliothèque « math.h » comme suit:
#include <stdio.h>
#include <math.h>
void main()
{
int y = fmod(5.3, 2) ;
printf("Valeur de y est %d", y);
}
7. Quelle est la valeur de « b » dans ce code ?
#include <stdio.h>
void main()
{
int a = 3;
int b = 5 % 2 * 3 / 2;
printf("Valeur de b est %d", b);
}
A Valeur de b est 3
B Valeur de b est 1
C Valeur de b est 2
D Erreur de compilation
B
Les opérateurs %, * et / ont la même priorité et sont évalués de gauche à droite. Le calcul se déroule ainsi : 5 % 2 = 1, puis 1 * 3 = 3, puis 3 / 2 = 1 (division entière). La variable b vaut donc 1, et le programme affiche Valeur de b est 1.