Vous êtes sur la page 1sur 18

Université Cadi Ayyad

Ecole Supérieure de Technologie de Safi


GIM 1ère année

TD/TP
INFORMATIQUE – LANGAGE C

A.Soulmani & A.Boussalhi


Liste des TD/TP d’informatique :

 TD/TP 1 : Les structures conditionnelles


 TD/TP 2 : Les structures répétitives
 TD/TP 3 : Les Tableaux
 TD/TP 4 : Fonctions et Tableaux (suite)
 TD/TP 5 : Le tri de tableaux
 TD/TP 6 : Les chaînes de caractères
 TD/TP 7 : Pointeurs / Structures

2
Université Cadi Ayyad-Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 1 : Les structures conditionnelles


Exercice 1 : Quelles sont les valeurs de X, Y et Z après exécution de l’algorithme suivant ?
Algorithme test
Variables X, Y, Z : entiers
Début:
X← 4
Y← 10
Z←X+Y
X←8
Y←X+Z
Fin

Exercice 2 : Que fait l’algorithme suivant ?


Algorithme essai
VAR X,Y : REEL
Début
LIRE(X)
Si X ≥ 0 alors
Y X
Sinon
Y  -X
Finsi
ECRIRE(Y)
Fin

Exercice 3 : Ecrire un programme en C qui permet de lire une somme d’argents S (entier), puis déterminer
le nombre de billets de 100, 50, 20 et les pièces de 10, 5 et 1 DH.

Exercice 4 : Ecrire un programme en C qui permet de lire 3 réels a, b et c puis les afficher dans l’ordre
croissant.

Exercice 5 : Un étudiant passe trois examens. Il est déclaré admis si :


- il a au moins 9 points à chaque examen,
ou
- la moyenne des trois examens est au moins égale à 10 points et la plus basse note est au moins égale 8
points.
S'il n'est pas admis alors il est refusé.
Ecrire un programme en C qui permet de vérifier si un étudiant est admis ou refusé.

Exercice 6 : Ecrire un programme en C qui permet de résoudre l’équation (ax² + bx + c = 0) dans


l’ensemble des réels : distinguer les différents cas.

Exercice 7 : Ecrire un programme en C qui permet de simuler le travail d’une calculatrice. Le programme
permet tout d’abord de lire un réel, suivi d’un caractère (’+’,’-’,’*’,’/’), puis d’un autre réel, et d’afficher par
la suite le résultat selon l’opération demandée. (utiliser switch)

Exercice 8 : Ecrire un programme en C qui permet de lire l’année et le numéro d’un mois puis affiche le
nombre de jours correspondant à ce mois. (avec et sans switch)

Exercice 9 : Écrire un programme qui permet de lire une date donnée sous la forme : nombre jour, mois,
année. Il affiche ensuite son lendemain sous forme décrite ci-dessous.
Exemple : si le jour est : 30/09/2019 l’algorithme affiche 01/10/2019.

3
Université Cadi Ayyad - Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 2 : Les structures répétitives


Exercice 1 : Ecrire un programme qui demande un nombre de départ, et qui ensuite écrit la table de
multiplication de ce nombre, présentée comme suit :
Si l’utilisateur saisit le nombre 7, le programme affiche :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70
Exercice 2 : Modifier le programme précédent pour qu’il affiche la table de multiplication de tous les
nombres de 1 jusqu’à 10.

Exercice 3 : Ecrire un programme qui demande à l’utilisateur de saisir des nombres jusqu’à ce qu’il
saisisse 0, puis affiche le nombre des valeurs saisies, leur somme, leur Max, Min, la position du Max et celle
du Min.

Exercice 4 : Écrire un programme qui affiche les 50 premiers nombres pairs (2,4,6,...), de trois façons
différentes :
– avec une boucle while (...) { ... } ;
– avec une boucle do { ... } while (...) ;
– avec une boucle for (...;...;...) { ... } ;

Exercice 5 : Ecrire un programme permettant de dessiner un carré de 5 sur 3 :


*****
* *
*****

Exercice 6: En utilisant l’instruction de répétition while, dessinez la figure :


*
**
***
****
*****

Exercice 7: Ecrire un programme permettant de dessiner la figure suivante :


*****
****
***
**
*

Exercice 8 : Écrivez un programme effectuant le dessin suivant :


*
***
*****
*******
*********

4
Le nombre de lignes de la pyramide (ici 5) devrait être donné par une variable hauteur.

Exercice 9 : Ecrire un programme qui demande à l’utilisateur de saisir un entier n et détermine le nième
terme d'une suite définie par :

S0 = 2, S1 = 3,
Sn = Sn-2 + (-1)n * Sn-1 (pour n>1)

Exercice 10 : Calcul des termes d’une suite


Soit la suite de nombres entiers définie par :

Cette suite atteint la valeur 1 quelle que soit le nombre entier A! Par exemple, si A= 10, la suite des termes
est 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, ...
Le cycle 1, 4, 2, 1 se répète indéfiniment.
1. Écrire un programme qui affiche les termes de la suite jusqu’à arriver à la valeur 1.
2. Modifier le programme pour qu’il affiche le nombre de termes avant convergence (c’est à dire la
première valeur de n telle que Un soit égal à 1.
3. Écrire un programme qui affiche le nombre de termes défini dans la question précédente, pour toutes les
valeurs de A comprises entre 2 et 20.

Exercice 11 : Calcul de séries


La constante d’Euler e peut s’écrire comme :

Écrire un programme qui calcule une approximation de e en utilisant p termes de la série.


Note : il n’est pas nécessaire d’utiliser la fonction factorielle, exprimez une relation de récurrence entre deux
termes successifs.

Exercice 12 : On démontre en mathématique que le cosinus d'un angle exprimé en radian est donné par la
somme infinie suivante :

On décide d'arrêter la somme à un certain rang n (n>3) donné. Prenons par exemple n=10.
Ecrire le programme qui permet d'évaluer le cosinus d'une valeur x donnée par l’utilisateur.

Exercice 13 : On peut calculer une approximation du sinus d’un angle x grâce à la série de Taylor :

1. Écrire un programme qui donne une approximation du sinus de x calculée avec nb termes.
2. Écrire un programme qui détermine quel est le nombre de termes nécessaires pour approximer
avec une erreur inférieure à 10−4.

5
Université Cadi Ayyad-Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 3 : Les Tableaux

Exercice 1 : Soit un tableau T de short. Supposons que l’élément T[0] soit rangé à l’adresse 0400H.
1. Quelle est l’adresse de l’élément T[4] ?
2. Même question pour un tableau de nombres flottants (float).

Exercice 2: Ecrire un programme qui permet de saisir 10 nombres entiers dans un tableau à une dimension,
puis affiche la somme et la moyenne de ces 10 nombres.

Exercice 3: Ecrire un programme dans lequel vous déclarerez et initialiserez un tableau d’entiers T avec des
valeurs dont certaines seront nulles. Le programme doit parcourir le tableau et afficher les index des
éléments nuls du tableau.

Exercice 4: Déclarer et initialiser une matrice [5,5] d’entiers (iMat). Afficher les éléments de la matrice
iMat sous forme d’un tableau.

Exercice 5: On considère deux matrices 3x3 notées A et B. Ecrire un programme en C permettant de


calculer et d’afficher la matrice C = A + B.

Exercice 6: On considère deux matrices 3x3 notées A et B. Ecrire un programme en C permettant de


calculer et d’afficher la matrice C = A x B.

Exercice 7: Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Ranger ensuite les éléments du tableau T dans l'ordre inverse sans utiliser de tableau d'aide. Afficher le
tableau résultant.
Idée: Echanger les éléments du tableau à l'aide de deux indices qui parcourent le tableau en commençant
respectivement au début et à la fin du tableau et qui se rencontrent en son milieu.

Exercice 8: Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Copier ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS et toutes les
valeurs strictement négatives dans un troisième tableau TNEG. Afficher les tableaux TPOS et TNEG.

Exercice 9: Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int
(dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier et
afficher le tableau ainsi que la somme de tous ses éléments.

Exercice 10: Ecrire un programme qui détermine la plus grande et la plus petite valeur dans un tableau
d'entiers A. Afficher ensuite la valeur et la position du maximum et du minimum. Si le tableau contient
plusieurs maxima ou minima, le programme retiendra la position du premier maximum ou minimum
rencontré.

Exercice 11: Insérer une valeur dans un tableau trié


Un tableau A de dimension N+1 contient N valeurs entières triées par ordre croissant; la (N+1)ième valeur
est indéfinie. Insérer une valeur VAL donnée au clavier dans le tableau A de manière à obtenir un tableau de
N+1 valeurs triées.

6
Université Cadi Ayyad-Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 4 : Fonctions et Tableaux (suite)


Exercice 1: Ecrire une fonction permute() permettant de permuter les valeurs de deux variables entières et
écrire un programme dans lequel on saisira deux nombres entiers, on fait appel à cette fonction puis on
affiche le contenu des deux variables pour vérifier si la permutation a eu lieu.
Exercice 2 :
1. Ecrire une fonction qui prend en paramètre deux entiers et retourne le plus petit.
2. En utilisant la fonction précédente, refaire la question précédente avec trois paramètres.
Exercice 3 : Ecrire une fonction permettant d’évaluer pour (x,y)donnés la fonction suivante:
f(x,y) = x2 + y2 + xy + x + y
Exercice 4 : Ecrire une fonction qui prend en paramètre un réel x et un entier n, puis calcule et retourne xn.

Exercice 5: Ecrire un programme comportant :


1. La déclaration de trois variables globales entières iHeures, iMinutes, iSecondes.
2. Une fonction afficheHeure ( ) qui imprimera le message suivant :
Il est … heure(s) … minute(s) … seconde(s)
En respectant l’orthographe du singulier et du pluriel .

3. Une fonction saisirHeure ( ) qui admettra trois paramètres entiers iH, iM et iS, dont elle affectera les
valeurs respectivement à iHeures, iMinutes et iSecondes.
4. Une fonction tick ( ) qui incrémentera l’heure d’une seconde.
5. La fonction main sera un jeu d’essai des fonctions précédentes.

Exercice 6 : Écrire une fonction afficheTableau ( ) qui affiche le tableau de nombres flottants passé en
paramètre.
Prototype : void afficheTableau (float T[ ], int N) ; /* N nombre d’elements*/
Exemple :
void main(void) {
float T[5] = { 1.0, 3.6, 3.14, 0, 0 };
AfficheTableau(T,5);
}

Résultat de l’exécution : { 1.0, 3.6, 3.14, 0, 0 }.


(On fera attention à l’affichage des accolades et des virgules.)

Exercice 7 : Opérations élémentaires sur les tableaux


1. Écrire une fonction changeSigne ( ) qui change le signe de tous les éléments d’un tableau d’entiers.
2. Écrire une fonction moyenne ( ) qui retourne la valeur moyenne des éléments d’un tableau de nombres
flottants.
3. La fonction indexElement ( ) cherche un élément dans un tableau d’entiers et retourne son index.
Voici un exemple d’utilisation :
void main(void) {
int T[6] = { 41, 73, 36, 61, 91, 38 };
int idx1 = IndexElement( T, 6, 36 );
int idx2 = IndexElement( T, 6, 99 );
printf( "index de 36= %d", idx1 );
printf( "index de 99= %d\n", idx2 );

7
}
Résultat de l’exécution : index de 36= 2 index de 99= -1.
3.1. Quel est le prototype de la fonction indexElement ( ) ?
3.2. Que retourne la fonction lorsque l’élément cherché n’est pas dans le tableau ?
3.3. Écrire le corps de indexElement ( ).
4. Écrire une fonction maximum ( ) qui retourne l’élément le plus grand d’un tableau de nombres flottants.
5. Écrire une fonction indexMaximum ( ) qui fournit l’index de l’élément le plus grand du tableau.

Exercice 8 : Écrire une fonction afficheTableau2 ( ) qui affiche le tableau à deux dimensions de nombres
entiers passé en paramètre.
Prototype : void afficheTableau2 (int T[ ], int N, int M) ;
/* N nombre de lignes et M nombre de colonnes*/

Exemple :
void main(void) {
int TAB[3][5]={{-2,5,15,33,0},{-1,-10,25,2,100},{200,-27,3,10,10}} ;
AfficheTableau2(TAB,3,5);
}

Résultat de l’exécution :
-2 5 15 33 0

-1 -10 25 2 100

200 27 3 10 10

Exercice 9 : Écrire une fonction maximumTab2 ( ) qui retourne l’élément le plus grand d’un tableau à deux
dimensions de nombres entiers.

8
Université Cadi Ayyad-Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 5 : Le tri de tableaux


Exercice 1 : Tri par minimum successif
Implémenter une fonction de tri par minimum successif d’un tableau d’entier permettant de classer les
éléments du tableau par ordre croissant.

Exercice 2: Tri par propagation ou par bulles (bubble sort)


On souhaite classer les éléments d'un tableau A d’entiers par ordre croissant.
Méthode: En recommençant chaque fois au début du tableau, on effectue à plusieurs reprises le traitement
suivant: On propage, par permutations successives, le plus grand élément du tableau vers la fin du tableau
(comme une bulle qui remonte à la surface d'un liquide).
Exemple:

Implémenter l'algorithme en considérant que:


- La partie du tableau (à droite) où il n'y a pas eu de permutations est triée.
- Si aucune permutation n'a eu lieu, le tableau est trié.

Exercice 3 : Tri par sélection du maximum


Proposer une fonction de tri par ordre décroissant d’un tableau A d’entiers basée sur la sélection du
maximum. L’algorithme consiste à parcourir le tableau de gauche à droite à l'aide de l'indice I. Pour chaque
élément A[I] du tableau, déterminer la position PMAX du (premier) maximum à droite de A[I] et échanger
A[I] et A[PMAX].
Exemple :

9
Exercice 4 : Tri avec qsort()
Proposer un programme de tri par ordre croissant d’un tableau A à l’aide de la fonction qsort ( ).

Exercice 5 : Comparaison d’algorithmes de Tri


On souhaite effectuer une comparaison entre les algorithmes de tri à bulles, par minimums successifs et
utilisant qsort ( ). Le critère sur lequel on va se baser est le temps d’exécution. Pour cela, on va remplir trois
tableaux d’entiers tab1, tab2 et tab3 avec les mêmes valeurs qui seront aléatoires, puis on va “mesurer” le
temps nécessaire pour chaque algorithme. La taille des tableaux sera importante pour voir la différence entre
les trois algorithmes.
1. Écrire une fonction remplirAleatTabInt ( ) qui remplit un tableau d’entiers par des valeurs aléatoires.
Pour cela on va utiliser la fonction srand ( ) et rand ( ) de la bibliothèque < math.h >. On aura également
besoin de la bibliothèque < time.h >.
#include <time.h>
#include <math.h>

srand ( time ( NULL ) ) ;

x = rand ( ); /* permet d’affecter à x une valeur entière aléatoire */

Prototype : void remplirAleatTabInt ( int T[ ], int N) ;

2. Pour “mesurer” le temps nécessaire à l’exécution d’un bloc d’instructions appelé Algorithme_de_tri, on
fait appel à la fonction clock ( ) de la bibliothèque < time.h >. Le code est le suivant :

n1 = clock(); /* n1 donne le nbre de périodes d’horloge depuis le début du main() */

Algorithme_de_tri;
n2 = clock(); /* n2 donne le nbre de périodes d’horloge depuis le début du main() */

temps = (float)(n2 – n1)/CLOCKS_PER_SEC;

Écrire un programme permettant de “mesurer” le temps nécessaire pour les trois algorithmes pour les tailles
suivantes : 1000, 10000, 20000, 50000 et 100000.

10
Université Cadi Ayyad-Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 6 : Les chaînes de caractères

Exercice 1 : Les codes ASCII des lettres minuscules (de 'a' à 'z') sont rangés dans l'ordre de 97 à 122, et les
majuscules (de 'A' à 'Z') de 65 à 90. (voir annexe 1 joint)
1. Ecrire un programme pour afficher à l'écran les caractères de la table ASCII de code allant de 0 à 128. On
les présentera par ligne de 16 caractères.
2. Ecrire une fonction maj ( ) qui prend en argument une chaine de caractère non accentuée et qui renvoie la
chaîne avec minuscules converties en majuscules.
3. Ecrire une fonction qui calcule le nombre de mots dans une chaîne de caractères.
4. Ecrire une fonction qui calcule le nombre de voyelles et le nombre de consonnes présentes dans une
chaîne.
5. Donner les codes ASCII de la chaîne : “Hello World !”
Exercice 2 : Sans utiliser de fonction de la bibliothèque sting.h, écrire une fonction myStrlen ( ) permettant
de connaître la taille d’une chaîne fournie en argument. Celle-ci retourne une valeur de type int. Noter bien
que la longueur retournée ne comprend pas le caractère nul.
Prototype: int myStrlen(char *chaine);

Exercice 3 : Sans utiliser de fonction de la bibliothèque sting.h, écrire une fonction myStrcpy ( ) qui copie
le contenu de la chaîne source dans la chaîne destination, caractère nul compris. La fonction retourne
l’adresse de destination.

Prototype: char *myStrcpy(char *destination, char *source);

Exercice 4 : Sans utiliser de fonction de la bibliothèque sting.h, écrire une fonction myStrcmp ( ) qui
compare deux chaines de caractères. Cette fonction retourne :
- une valeur positive si la première chaîne est « plus grande » que la seconde ;
- zéro si elles sont égales ;
- une valeur négative si la seconde chaîne est « plus grande » que la première.

Prototype: int myStrcmp(char *chaine1, char *chaine2);

Exercice 5 : Un palindrome est un mot ou une phrase se lisant de la même façon à l’endroit et à l’envers.
Exemples : rotor, ressasser.
Les deux phrases suivantes sont des phrases palindromes :
“Engage le jeu que je le gagne”
“Tu l’as trop écrasé, César, ce Port-Salut !”
Ecrire une fonction qui prend en paramètre une chaine de caractères et retourne vrai si elle représente un
palindrome ou faux sinon.

Exercice 6 : La légende raconte que Jules César transmettait ses messages en décalant chaque lettre de 3
positions : A devient D, B devient E,... W devient Z, X devient A, Y devient B et Z devient C.
Les chiffres sont décalés de la même façon, les autres caractères (espaces, virgules, points...) ne sont pas
modifiés.
Ecrire une fonction réalisant le chiffrement d’un message passé en paramètre sous forme d’une chaîne en
utilisant la méthode précédente.

11
Exercice 7 : On cherche à supprimer les espaces multiples qui se succèdent dans une chaine et de ne
conserver qu’un seul espace.
Exemple : Soit la chaîne de caractères ch = ’’ ceci est un essai ’’
Après la suppression des espaces superflus, on doit avoir le résultat suivant : ch = ’’ceci est un essai’’.
Ecrire une fonction suppEspaces() qui supprime les espaces multiples consécutifs (qui se suivent) entre les
caractères de la chaîne transmise comme paramètre. S’il y’a plusieurs espaces au début ou à la fin, on ne
conserve aucun.
Exercice 8 : Déclarer un tableau de chaînes de caractères puis proposer un programme de tri selon l’ordre
croissant.

Annexe 1:
CODE ASCII

Annexe 2:
Bibliothèque string.h
UTILISATION DES FONCTIONS DE LA BIBLIOTHEQUE string.h

strlen
size_t strlen(char *chaine);
La fonction strlen() vous permet de connaître la taille d’une chaîne fournie en argument. Celle-ci retourne une valeur de
type size_t. Notez bien que la longueur retournée ne comprend pas le caractère nul. L’exemple ci-dessous affiche la taille de la
chaîne « Bonjour ».

#include <stdio.h>
#include <string.h>
int main(void)
{
printf("Longueur : %u\n",(unsigned)strlen("Bonjour"));

12
return 0;
}
Longueur : 7

strcpy

char *strcpy(char *destination, char *source);

La fonction strcpy() copie le contenu de la chaîne source dans la chaîne destination, caractère nul compris. La fonction retourne
l’adresse de destination. L’exemple ci-dessous copie la chaîne « Au revoir » dans la chaîne chaine.

#include <stdio.h>
int main(void)
{
char chaine[25] = "Bonjour\n";

strcpy(chaine, "Au revoir");


printf("%s\n", chaine);
return 0;
}
Au revoir

La fonction strcpy() n’effectue aucune vérification. Vous devez donc vous assurer que la chaîne de destination dispose de
suffisamment d’espace pour accueillir la chaîne qui doit être copiée (caractère nul compris !).

strcat

char *strcat(char *destination, char *source);

La fonction strcat() ajoute le contenu de la chaine source à celui de la chaîne destination, caractère nul compris. La fonction
retourne l’adresse de destination. L’exemple ci-dessous ajoute la chaîne « tout le monde » au contenu de la chaîne chaine.

#include <stdio.h>
#include <string.h>
int main(void)
{
char chaine[25] = "Bonjour";

strcat(chaine, " tout le monde");


printf("%s\n", chaine);
return 0;
}
Bonjour tout le monde

Comme strcpy(), la fonction strcat() n’effectue aucune vérification. Vous devez donc vous assurer que la chaîne de destination
dispose de suffisamment d’espace pour accueillir la chaîne qui doit être ajoutée (caractère nul compris !).

strcmp

int strcmp(char *chaine1, char *chaine2);

La fonction strcmp() compare deux chaines de caractères. Cette fonction retourne :

• une valeur positive si la première chaîne est « plus grande » que la seconde ;
• zéro si elles sont égales ;
• une valeur négative si la seconde chaîne est « plus grande » que la première.

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

int main(void)
{
char chaine1[] = "Bonjour";
char chaine2[] = "Au revoir";

if (strcmp(chaine1, chaine2) == 0)
printf("Les deux chaînes sont identiques\n");
else
printf("Les deux chaînes sont différentes\n");

return 0;
}
Les deux chaînes sont différentes

strchr

char *strchr(char *chaine, int ch);

La fonction strchr() recherche la présence du caractère ch dans la chaîne chaine. Si celui-ci est rencontré, la fonction retourne
l’adresse de la première occurrence de celui-ci au sein de la chaîne. Dans le cas contraire, la fonction renvoie un pointeur nul.

#include <stddef.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char chaine[] = "Bonjour";
char *p;

p = strchr(chaine, 'o');
if (p != NULL)
printf("La chaîne `%s' contient la lettre %c\n", chaine, *p);

return 0;
}
La chaîne `Bonjour' contient la lettre o

strpbrk

char *strpbrk(char *chaine, char *liste);

La fonction strpbrk() recherche la présence d’un des caractères de la chaîne liste dans la chaîne chaine. Si un de ceux-ci est
rencontré, la fonction retourne l’adresse de la première occurrence au sein de la chaîne. Dans le cas contraire, la fonction renvoie
un pointeur nul.

#include <stddef.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char chaine[] = "Bonjour";
char *p;

p = strpbrk(chaine, "aeiouy");
if (p != NULL)
printf("La première voyelle de la chaîne `%s' est : %c\n", chaine, *p);

14
return 0;
}
La première voyelle de la chaîne `Bonjour' est : o

strstr

char *strstr(char *chaine1, char *chaine2);

La fonction strstr() recherche la présence de la chaîne chaine2 dans la chaîne chaine1. Si celle-ci est rencontrée, la fonction
retourne l’adresse de la première occurrence de celle-ci au sein de la chaîne. Dans le cas contraire, la fonction renvoie un pointeur
nul.

#include <stddef.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char chaine[] = "Bonjour";
char *p;

p = strstr(chaine, "jour");
if (p != NULL)
printf("La chaîne `%s' contient la chaîne `%s'\n", chaine, p);

return 0;
}
La chaîne `Bonjour' contient la chaîne `jour'

15
Université Cadi Ayyad-Marrakech
Ecole supérieure de Technologie de Safi
GIM 1ère année / Informatique

TD/TP 7 : Pointeurs / Structures

Exercice 1 :
Soit P un pointeur qui 'pointe' sur un tableau A:

1. Quelles valeurs ou adresses fournissent les expressions suivantes ?


*P + 2
*(P + 2)
&P + 1
&A[4] - 3
A+3
&A[7] - P
P + (*P - 10)
*(P + *(P + 8) - A[7])
2. Tester.
Exercice 2 :
1. Compléter le tableau suivant en justifiant vos réponses. (vous pouvez vous servir de l’annexe sur la
priorité des opérateurs)

2. Tester.

PROBLEME
Partie 1 :
On considère la structure date suivante :

16
Effectuer les opérations de base sur cette structure :

1. Déclaration d’une variable de type struct date avec initialisation.


2. Déclaration d’une variable de type struct date puis mise à jour des différents champs.
3. Vérification de la taille mémoire allouée à une variable de type struct date.
4. Incrémentation de la date d’un jour.
5. Allocation dynamique de la mémoire pour une variable de type struct date. (utilisation de malloc())
6. Libération de la mémoire à l’aide de free().

Partie 2 :
On souhaite écrire un programme pour gérer les notes des étudiants d’une classe de N étudiants. N est une
variable globale à déclarer et à initialiser.

Un étudiant est caractérisé par :


- un numéro national d’examen : cne,
- un numéro de la carte d’identité nationale : cin,
- un nom : nom, (30 caractères max)
- un prénom : prenom, (30 caractères max)
- une date de naissance : dateNaiss( jour, mois, année),
- trois notes : notes,
- une moyenne : moyenne.
1. Déclarer la structure etudiant pour représenter ces informations.
2. Ecrire une fonction saisirClasse() qui permet de saisir les données (sans la moyenne) des étudiants d’un
tableau passé en paramètre.
3. Ecrire une fonction afficherClass()e qui permet d’afficher les données des étudiants d’un tableau passé
en paramètre.
4. Ecrire une fonction anniversaireListe() qui affiche les noms et prénoms des étudiants nés en une date
passée en paramètre.
5. Ecrire une fonction estDansLaClass()e qui vérifie si un étudiant dont le nom est passé en paramètre
appartient à la classe. (valeur de retour égale à 1 si oui, 0 sinon).
6. Ecrire une fonction calculerMoyenn()e qui met à jour le champ moyenne des étudiants du tableau passé
en paramètre.
7. Ecrire une fonction moyenneClasse() qui calcule la moyenne de la classe.
8. Ecrire une fonction majeurClass()e qui affiche le nom et prénom de l’étudiant ayant la plus grande
moyenne de la classe.
9. Un étudiant doit passer un rattrapage dans une matière si sa moyenne est inferieure à 12. Ecrire une
fonction listeRattrapage() qui affiche la liste des étudiants qui ont un rattrapage à passer.

Partie 3 :
Organiser votre programme en proposant un menu pour l’utilisateur.

Partie 4 :
Refaire les questions de la partie 2 en utilisant à chaque fois que c’est possible des pointeurs.

Partie 5 : (utilisation de malloc())

17
1. Ecrire une fonction ajouterEtudiant() qui permet de créer une variable de type struct etudiant et de la
mettre à jour si opération d’allocation mémoire est réussie.
2. Vérifier la taille de l’espace mémoire allouée pour une variable de type struct etudiant puis tester la
libération de la mémoire avec free().

Partie 6 : (Tri de tableau de structures)


1. Ecrire une fonction classement() qui permet de trier la classe selon la moyenne (tri à bulles).
2. Proposer une solution qui ne modifie pas le tableau d’origine, mais plutôt les données d’un tableau de
pointeurs dont les éléments sont des pointeurs sur les éléments du tableau d’origine.
3. Trier le tableau en utilisant qsort().

18

Vous aimerez peut-être aussi