QCM en programmation C – Opérateurs arithmétiques – Partie 2

QCM sur C avec des réponses pour la préparation des entretiens, des tests en ligne, des examens etc.

 
 

1. Quelle est la sortie de ce code C ?
#include <stdio.h>

void main()
{
    int x = 3;
    int y = ++x + x++ + --x;
    printf("Valeur de y est %d", y);
}

A Valeur de y est 10

B Valeur de y est 13

C Valeur de y est 12

D Valeur indéfini

D
Cette expression modifie la variable x plusieurs fois (++x, x++ et –x) sans point de séquence entre les modifications. En C, cela entraîne un comportement indéfini (undefined behavior). Le compilateur est libre de produire n’importe quel résultat, et le programme ne possède pas de sortie garantie.

 

2. Déterminer la priorité de chaque opérateur (le plus élevé au plus bas) ?

A +, -, %, *, /

B %, +, -, *, /

C %, +, /, *, –

D %, *, /, +, –

D
Les opérateurs multiplication, division et modulo sont évalués avant addition et soustraction. En cas de même priorité, l’évaluation se fait généralement de gauche à droite. Donc l’ordre correct est: % → * → / → + → –

 

3. Lequel des éléments suivants n’est pas une opération arithmétique?

A x %= 10;

B x != 10;

C x /= 10;

D x *= 10;

B
Les opérateurs %=, /= et *= sont des opérateurs arithmétiques d’affectation en langage C, car ils effectuent respectivement une opération de modulo, de division et de multiplication avant d’affecter le résultat à la variable. En revanche, l’opérateur != est un opérateur de comparaison qui permet de vérifier si deux valeurs sont différentes, il ne réalise donc aucune opération arithmétique.

 

4. Lequel des types de données suivantes générera une erreur sur l’opération modulo %?

A float

B int

C short

D char

A
Pour effectuer le modulo entre des valeurs de types « float », nous pouvons utiliser la fonction « fmod() » de la bibliothèque math standard. Son prototype est dans l’en-tête standard <math.h>.

 

 

5. Parmi les options suivants, on peut citer les opérateurs arithmétiques fondamentaux, c’est-à-dire que l’exécution de l’opération souhaitée peut être effectuée en utilisant uniquement cet opérateur?

A +, -, *, /, %

B +, -, *, /

C +, -, %

D +, –

D
L’opérateur + et – sont les opérateurs de base.

 

6. Quelle est la valeur de « z » dans ce code ?
#include <stdio.h>

int main()
{
    int x = 10;
    double y = 5.6;
    int c;
    int z = x + y;
    printf("Valeur de z est %d", z);
}

A Valeur de z est 10

B Valeur de z est 15

C Valeur de z est 15,6

D Valeur de z est 16

B
Dans ce code C, la variable x est un entier (int) avec la valeur 10 et y est un nombre réel (double) avec la valeur 5.6. Lors de l’addition x + y, la valeur entière x est automatiquement convertie en double, ce qui donne 15.6. Cependant, le résultat est stocké dans la variable z qui est de type int, donc la partie décimale est supprimée et z prend la valeur 15. L’affichage avec %d affiche donc 15.

 

7. Quelle est la valeur de « z » dans ce code ?
#include <stdio.h>

int main()
{
    int x = 10, y = 5, w = 5;
    int d;
    int z = x == (y + w);
    printf("Valeur de z est %d", z);
}

A Valeur de z est 5

B Valeur de z est 1

C Valeur de z est 10

D Erreur de syntaxe

B
Dans ce code C, l’expression x == (y + w) utilise l’opérateur de comparaison == pour vérifier si les deux valeurs sont égales. La valeur de x est 10 et la somme de y + w est 5 + 5 = 10. La condition est donc vraie, et en langage C une expression vraie renvoie la valeur 1. La variable z reçoit donc 1, qui sera affiché par l’instruction printf().

 

3 réflexions sur “QCM en programmation C – Opérateurs arithmétiques – Partie 2

  • octobre 22, 2020 à 4:45 pm
    Permalien

    La réponse de la question 1 est 12 et non pas 13.

    Répondre
  • septembre 11, 2024 à 12:19 pm
    Permalien

    Quelle est la sortie de ce code C ?

    #include <stdio.h>
    void main()
    {
        int x = 3;
        int y = ++x + x++ + --x;
        printf("Valeur de y est %d", y);
    }

    Réponse correcte : C

    Répondre
  • octobre 2, 2024 à 12:44 pm
    Permalien

    La réponse de la question 1 est D: indéfini!
    La norme ne définit pas l’ordre d’exécution entre 2 « sequence points »
    « A sequence point is a point in the program’s execution sequence where all previous side- effects shall have taken place and where all subsequent side-effects shall not have taken place  »

    Quoiqu’il en soit ce code est exactement ce qu’il ne faut pas faire, car l’intention du programmeur est difficile/impossible à capter à la 1e lecture.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *