Assignment Help logo
Chat en direct

Loading...

Score %0 (0 correct0 incorrect20 unanswered)

Q1. Quelle est la sortie de ce code ?

vector<int> v(22);
bool b = (v[6]);
printf("%d", !b);
  • Faux
  • 0
  • 1
  • Ce code comporte une erreur.

Q2. Pourquoi l'utilisation de cette ligne est-elle considérée comme une mauvaise pratique ? (Alternative : Pourquoi l'utilisation de cette ligne est-elle considérée comme une mauvaise pratique ?)

using namespace std;
  • Le code compilé est toujours plus volumineux en raison de tous les symboles importés.
  • Si le code utilise une fonction définie dans deux bibliothèques différentes avec le même prototype mais éventuellement avec des implémentations différentes, il y aura une erreur de compilation due à l'ambiguïté.
  • Il inclut automatiquement tous les fichiers d'en-tête de la bibliothèque standard (cstdint, cstdlib, cstdio, iostream, etc.).
  • Il oblige le compilateur à imposer l'inclusion exclusive des fichiers d'en-tête appartenant à la bibliothèque standard, générant une erreur de compilation lorsqu'un fichier d'en-tête différent est inclus.

Référence

Q3. Quelle est la plus petite taille qu'une variable du type child_t peut occuper en mémoire ?

typedef struct{
    unsigned int  age    : 4;
    unsigned char gender : 1;
    unsigned int  size   : 2;
}child_t;
  • 7 bits.
  • 25 octets.
  • 1 bit.
  • 1 octet.

Référence

Q4. Que contiennent les vecteurs v1 et v2 après l'exécution du code ?

std::vector<int> v1{1,2,3},v2;
v2=v1;
v1.push_back(4);
v2.push_back(5);
  • Erreur
  • v1:{1,2,3,4}; v2:{5};
  • v1:{1,2,3,4,5}; v2:{1,2,3,4,5};
  • v1:{1,2,3,4}; v2:{1,2,3,5};

Q5. Laquelle des affirmations suivantes concernant la différence entre les pointeurs et les itérateurs est vraie ?

  • Alors que les pointeurs sont des variables qui contiennent des adresses mémoire, les itérateurs sont des fonctions génériques utilisées pour parcourir des conteneurs. Cette fonction permet au programmeur de mettre en œuvre un code de lecture et d'écriture pendant que le conteneur est parcouru.
  • Incrémenter un itérateur signifie toujours accéder à l'élément suivant dans le conteneur (le cas échéant), quel que soit le conteneur. Incrémenter le pointeur signifie pointer vers l'élément suivant en mémoire, pas toujours l'élément suivant.
  • Les pointeurs sont des variables qui contiennent des adresses mémoire tandis que l'itérateur est des entiers non signés qui se réfèrent à des décalages dans les tableaux.
  • Tous les itérateurs sont implémentés avec des pointeurs donc tous les itérateurs sont des pointeurs mais tous les pointeurs ne sont pas des itérateurs.

Référence

Q6. Quelle est la taille occupée par u1 ?

union {
    uint16_t a;
    uint32_t b;
    int8_t c;
} u1;
  • 4 octets
  • 7 octets
  • 8 octets
  • 2 octets

Référence

Q7. Quel est l'opérateur suivant qui peut être surchargé ?

  • ?:
  • new
  • ::
  • .

Référence

Q8. Lequel des éléments suivants montre le contenu du vecteur pointé par v1 et v2 après l'exécution de ce code ?

std:: vector<int> *v1 = new std::vector<int>({1,2,3});
std:: vector<int> *v2;
v2=v1;
v1->push_back(4);
v2->push_back(5);
  • *v1:{1,2,3,4}; *v2:{5};
  • *v1:{1,2,3,4,5}; *v2:{1,2,3,4,5};
  • Erreur
  • *v1:{1,2,3,4}; *v2:{1,2,3,5};

v1 et v2 pointent vers le même vecteur.

Q9. Lequel des éléments suivants n'est pas une différence entre une classe et une structure ?

  • Parce que les structures font partie du langage de programmation C, il existe une certaine complexité entre les structures C et C++. Ce n'est pas le cas avec les classes.
  • Les classes peuvent avoir des fonctions membres ; les structures sont privées.
  • Le spécificateur d'accès par défaut pour les membres d'une structure est public, tandis que pour les membres de la classe, il est privé.
  • Les paramètres de type modèle peuvent être déclarés avec les classes, mais pas avec le mot-clé struct.

Les modèles peuvent être utilisés avec des classes et des structures Référence Référence

Q10. Supposez que vous devez conserver une structure de données avec une autorisation d'accès à une ressource basée sur les jours de la semaine, mais vous ne pouvez pas utiliser une variable booléenne pour chaque jour. Vous devez utiliser un bit par jour de la semaine. Lequel des éléments suivants est une implémentation correcte d'une structure avec des champs de bits pour cette application ?

  • A
typedef struct {
    int sunday:1;
    int monday:1;
    // more days
    int friday:1;
    int saturday:1;
} weekdays;
  • B
typedef char[7]: weekdays;
  • C
typedef struct {
    bit sunday:1;
    bit monday:1;
    // more days
    bit friday:1;
    bit saturday:1;
} weekdays;

  • D
typedef struct {
    bit sunday;
    bit monday;
    // more days
    bit friday;
    bit saturday;
} weekdays;

Référence NOTE: La syntaxe correcte est que la taille de chaque variable est de 1 bit. bit n'est pas un type en C++.

Q11. Qu'est-ce qu'une lvalue ?

  • C'est une expression constante, c'est-à-dire une expression composée de constantes et d'opérations.
  • C'est une expression qui représente un objet avec une adresse.
  • C'est une expression adaptée à l'opérande du côté gauche dans une opération binaire.
  • C'est une valeur de position, c'est-à-dire une adresse mémoire adaptée à l'assignation à un pointeur ou à une référence.

Q12. Que fait le spécificateur de type auto dans cette ligne de code (depuis C++11) ?

auto x = 4000.22;
  • Il spécifie que le type de x sera déduit de l'initialisateur - dans ce cas, double.
  • Il spécifie que le type de x est automatique, ce qui signifie qu'il peut être assigné à différents types de données tout au long du programme.
  • Il spécifie que x est une variable avec une durée de stockage automatique.
  • Il spécifie que plus de mémoire sera allouée pour x au cas où il aurait besoin de plus d'espace, évitant ainsi la perte de données due au débordement.

Q13. Qu'est-ce qu'un modèle de classe ?

  • classe écrite avec le paradigme de la programmation générique, spécifiant le comportement en termes de paramètre de type plutôt que de type spécifique.
  • superclasse vide destinée à l'héritage et au polymorphisme.
  • classe qui ne consiste qu'en une variable membre, sans constructeur, destructeur ou fonctions membres.
  • code source squelette pour une classe où le programmeur doit remplir des parties spécifiques pour définir les types de données et les algorithmes utilisés.

Référence

Q14. Quel est l'opérateur ternaire équivalent à ce morceau de code ?

if(x)
    y=a;
else
    y=b;
  • y=a?b:x;
  • y=if(x?a:b);
  • y=(x&a)?a:(x&b)?b:0;
  • y=x?a:b;

Référence

Q15. Quelle est la sortie du code donné ci-dessous ?

#include <iostream>

int main(){
    int x=10, y=20;
    std::cout << "x = " << x++ << " and y = " << --y << std::endl;
    std::cout << "x = " << x-- << " and y = " << ++y << std::endl;
    return(0);
}
  • x = 10 et y = 20
    x = 11 et y = 19
  • x = 11 et y = 19
    x = 10 et y = 20
  • x = 10 et y = 19
    x = 11 et y = 20
  • x = 11 et y = 20
    x = 10 et y = 19

Q16. Que signifient les deux parties spécifiées entre parenthèses dans une boucle for basée sur une plage, séparées par un deux-points ?

  • Le premier est une déclaration de variable qui contiendra un élément dans une séquence. Le second est la séquence à parcourir.
  • Le premier est un itérateur, et le second est la valeur d'incrémentation à ajouter à l'itérateur.
  • Le premier est la variable d'itération. Le second est une paire std::pair qui spécifie la plage (début et fin) dans laquelle la variable va itérer.
  • Le premier est un objet conteneur. Le second est une paire std::pair qui spécifie la plage (début et fin) dans laquelle les éléments seront accédés dans la boucle.

Q17. Quelle est la sortie du code donné ci-dessous ?

int8_t a=200;
uint8_t b=100;
if(a>b)
    std::cout<<"greater";
else
    std::cout<<"less";
  • Il n'y a pas de sortie car il y a une exception lors de la comparaison d'un int8_t avec un uint8_t.
  • plus grand
  • moins
  • Il n'y a pas de sortie car il y a une erreur de compilation.

Note : une variante de la question ci-dessous.

Q18. Quelle est la sortie de ce bloc de code ?

int8_t a=200;
uint8_t b=100;
std::cout<<"a="<<(int)a;
std::cout<<", b="<<(int)b;
  • a=-56, b=100
  • a=-55, b=100
  • a=200, b=-156
  • a=200, b=100

Note : La conversion implicite de 'int' en 'int8_t' (alias 'signed char') change la valeur de 200 à -56

Q19. Quelle est la sortie après l'exécution de ce extrait de code ?

int x=5, y=2;
if(x & y) {
    /*_part A_*/
}
else {
    /*_part B_*/
}
  • La partie A s'exécute car x==5 (vrai) et y==2 (vrai), donc l'opération AND est évaluée comme vraie.
  • La partie B s'exécute car (x & y) résulte en 0, ou faux.
  • La partie A s'exécute car (x & y) résulte en une valeur non nulle, ou vrai.
  • La partie B s'exécute car l'instruction (x & y) est invalide, donc faux.

Référence

Q20. Quelle est une définition valide pour la fonction get_length, qui renvoie la longueur d'une chaîne terminée par un null ?

  • A
int get_length(char *str) {
    int count=0;
    while(str[count++]);
    return count-1;
}
  • B
int get_length(char *str) {
    int count=0;
    while(str!=NULL){
        count++;
        str++;
    }
    return count;
}
  • C
int get_length(char *str) {
    int count=0;
    while((*str)++)
        count++;
    return count;
}
  • D
int get_length(char *str) {
    int count=0;
    while(str++)
        count++;
    return count;
}