0% ont trouvé ce document utile (0 vote)
2 vues6 pages

Test

Transféré par

efouir maddison
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues6 pages

Test

Transféré par

efouir maddison
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

DS 2 : Programmation langage C

Nom & Prénom :


Groupe :

Exercice 1 : QCM (7 points)


Pour chaque question, choisir la bonne réponse (entourer a), b), c) ou d)).
Q1 : Si p est un pointeur sur une structure Struc, et champ est un membre de Struc,
comment accéder à champ en utilisant p ?
a) [Link] b) *[Link] c) p->champ d) &[Link]
Q2 : Que fait la fonction fgetc(fp) où fp est un pointeur de fichier ouvert en mode
lecture ?
a) Lit une chaîne de caractères depuis le fichier.
b) Lit un caractère depuis le fichier et avance le pointeur de fichier.
c) Écrit un caractère dans le fichier.
d) Retourne la position actuelle dans le fichier.
Q3 : Soit int a = 5; int *ptr = &a;. Quelle est la valeur de *ptr après l’instruction
(*ptr)++; ?
a) 5 b) 6 c) L’adresse de a plus 1. d) Erreur de compilation.
Q4 : Lors du passage d’un tableau à une fonction en C, qu’est-ce qui est réellement passé ?
a) Une copie complète du tableau.
b) L’adresse du premier élément du tableau.
c) La taille du tableau.
d) Le dernier élément du tableau.
Q5 : Quelle est la principale différence entre char s[] = "texte"; et char *p = "texte"; ?
a) Il n’y a pas de différence, les deux sont modifiables.
b) s est un tableau dont le contenu peut être modifié, p pointe vers une chaîne
littérale (constante) qui ne devrait pas être modifiée.
c) p est un tableau dont le contenu peut être modifié, s pointe vers une chaîne lit-
térale (constante).
d) sizeof(s) et sizeof(p) retourneront la même valeur.
Q6 : Pour ajouter des données à la fin d’un fichier existant sans effacer son contenu, quel
mode doit-on utiliser avec fopen() ?
a) "w" b) "r" c) "a" d) "w+"
Q7 : Que retourne la fonction strcmp("abc", "abd") ?
a) Une valeur positive. b) Une valeur négative. c) Zéro. d) La longueur de la
première chaîne.

1
Exercice 2 : Pour chaque question, écrire le résultat af-
fiché par le programme (5 points)
Q1 : Quel est le résultat affiché par le programme ci-dessous ?
#include<stdio.h>
void fct(int x, int *y) {
x = x + 10;
*y = *y + 5;
printf("Dans fct: x=%d, *y=%d\n", x, *y);
}
int main() {
int a = 5;
int b = 10;
printf("Avant fct: a=%d, b=%d\n", a, b);
fct(a, &b);
printf("Apres fct: a=%d, b=%d\n", a, b);
return 0;
}

Réponse :

Q2 : Quel est le résultat affiché par le programme ci-dessous ?


#include<stdio.h>
#include<string.h>
int main() {
char chaine[20] = "Salut";
char *ptr = chaine;
strcat(ptr, " Monde");
*(chaine + 5) = ’!’;
printf("%s\n", ptr);
return 0;
}

Réponse :

Q3 : Quel est le résultat affiché par le programme ci-dessous ?


#include<stdio.h>
struct Coords {
int x;
int y;
};
void initCoords(struct Coords *p) {
p->x = 100;
(*p).y = 200;
}
int main() {

2
struct Coords pt1;
pt1.x = 10;
pt1.y = 20;
initCoords(&pt1);
printf("Point: x=%d, y=%d\n", pt1.x, pt1.y);
return 0;
}

Réponse :

Q4 : Quel est le résultat affiché par le programme ci-dessous (consi-


dérez que fichier_test.txt n’existe pas avant l’exécution) ?
#include<stdio.h>
int main() {
FILE *f_write, *f_read;
char c;

f_write = fopen("fichier_test.txt", "w");


if (f_write == NULL) return 1;
fprintf(f_write, "Test1\n");
fputc(’A’, f_write);
fclose(f_write);

f_read = fopen("fichier_test.txt", "r");


if (f_read == NULL) return 1;
while((c = fgetc(f_read)) != EOF) {
printf("%c", c);
}
fclose(f_read);
printf("-FIN-\n");
return 0;
}

Réponse :

Q5 : Quel est le résultat affiché par le programme ci-dessous ?


#include<stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *p = arr;
printf("*p = %d\n", *p);
p++;
printf("*(p) = %d\n", *(p));
printf("*(p+2) = %d\n", *(p+2));
printf("p[1] = %d\n", p[1]); // Attention ici
return 0;
}

3
Réponse :

Exercice 3 : Ecrire devant chaque instruction le résultat


affiché ou la valeur de la variable / contenu du fichier
demandé (5 points)
Le code suivant est exécuté :

#include <stdio.h>
#include <string.h>

typedef struct {
char nomProduit[30];
float prix;
int quantite;
} Produit;

void majPrix(Produit *p, float nouveauPrix) {


p->prix = nouveauPrix;
}

int main() {
Produit art1 = {"Stylo", 1.5, 100};
Produit art2;
Produit *ptrArt = &art1;

// Etat initial: art1 = {"Stylo", 1.5, 100}, ptrArt pointe sur art1

// 1.
printf("Produit: %s, Prix: %.2f\n", ptrArt->nomProduit, ptrArt->prix); // Résultat affiché
// Après l’instruction 1:
// [Link] est 100

// 2.
art2 = art1;
strcpy([Link], "Cahier");
[Link] = 50;
printf("Art1 Nom: %s, Art2 Nom: %s\n", [Link], [Link]); // Résultat affi
// Après l’instruction 2:
// [Link] est 1.5
// [Link] est 50

// 3.
majPrix(&art1, 1.75);
printf("Nouveau prix Art1: %.2f\n", [Link]); // Résultat affiché
// Après l’instruction 3:
// [Link] est 1.75
// [Link] est 1.5 (car art2 est une copie)

4
// 4.
ptrArt = &art2;
ptrArt->quantite -= 10;
printf("Qte Art2: %d\n", [Link]); // Résultat affiché
// Après l’instruction 4:
// [Link] est 40

// 5.
FILE *f_out = fopen("[Link]", "w");
if (f_out != NULL) {
fprintf(f_out, "Item1: %s, Qte: %d\n", [Link], [Link]);
fprintf(f_out, "Item2: %s, Qte: %d\n", [Link], [Link]);
fclose(f_out);
}
// Question: Quel est le contenu du fichier [Link] après l’exécution ?
// Contenu du fichier [Link]:_________________________________________
return 0;
}

Réponses pour Exercice 3 :


— Résultat affiché :
— Résultat affiché :
— Résultat affiché :
— Résultat affiché :
— Contenu du fichier [Link] :

Exercice 4 : Ecrire un programme C (3 points)


Sujet :
Écrire un programme C qui gère une petite liste de contacts.
Définir une structure Contact avec les champs :
— nom (chaîne de caractères, max 30)
— telephone (chaîne de caractères, max 15)
Écrire une fonction void ajouterContact(Contact liste[], int *nbContacts, const
char *nom, const char *tel) :
Prend en argument un tableau de Contact, un pointeur vers le nombre actuel de contacts,
le nom et le téléphone du nouveau contact.
Ajoute le nouveau contact à la fin du tableau liste (si le tableau n’est pas plein – sup-
posez une taille max de 10 contacts pour le tableau).
Incrémente le nombre de contacts.
Si le tableau est plein, affiche un message “Liste pleine.”.

Écrire une fonction void afficherContacts(const Contact liste[], int nbContacts) :


Affiche tous les contacts (nom et téléphone) présents dans la liste.

5
Dans la fonction main() :
Déclarer un tableau de 10 Contact et une variable nbContacts initialisée à 0.
Utiliser ajouterContact pour ajouter au moins 3 contacts (vous pouvez coder en dur les
noms et numéros pour cet exercice ou demander à l’utilisateur).
Appeler afficherContacts pour montrer la liste.
Tenter d’ajouter un contact alors que la liste est pleine (si vous avez défini une taille max
petite pour le test, par exemple 3, et que vous ajoutez 4 contacts).

(Écrire votre code pour l’Exercice 4 ci-dessous)

Vous aimerez peut-être aussi