Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
PROGRAMMATION
CLASSE DE MPCI
PLAN
Introduction
Chapitre I. Notions de base de la programmation
Chapitre II. Les Structures de contrôle
Chapitre III. Les Structures de données élémentaires : tableaux et structures
Introduction
A. Problème Posé
B. Analyse du problème
C. Ecriture de l’algorithme
1
Chapitre I. Notions de base de la programmation
Une variable est une case mémoire destinée à contenir des valeurs d’un type
particulier. Elle est définie par son nom composé des lettres de l’alphabet et des chiffres, avec
l’obligation de commencer par des lettres ou le caractère "_". Il est recommandé d’avoir des
noms significatifs et moins long. Les caractères suivants sont interdits : l’espace, les
opérateurs arithmétiques, les caractères de ponctuation, (, ), {, }, [, ], …
Les types algorithmiques de base :
Le type entier
Le type réel
Le type caractère
Eventuellement, le type booléen
Notion d’instruction
C’est un ordre donné à la machine qui peut être : une déclaration de variables, une
affectation, une opération d’entrée/sortie, …
L’affectation
Elle consiste à placer une valeur dans une variable.
Syntaxe :
NomVariable ← Valeur ;
NomVariable ← Variable ;
NomVariable ← Expression ;
Exemple :
I ← 100 ;
J ← I;
K ← J + I;
I ← I + K;
2
I.1.3. L’instruction de lecture
Elle permet d’afficher à l’écran, la valeur contenue dans une variable ou une chaine de
caractères placée entre double quottes ".
Syntaxe : ecrire(I) ;
ecrire(K, J, choix) ;
ecrire("Bonjour") ;
Les données d’un programme sont constituées de l’ensemble d’information qu’il est
nécessaire d’avoir ou de disposer au préalable pour résoudre le problème posé par un énoncé.
Elles sont déterminées sous forme de variables dont les valeurs sont obtenues au début de
l’exécution du programme, généralement en sollicitant l’intervention de l’utilisateur à partir
du clavier.
Les résultats sont constitués de l’ensemble d’information que le programme doit
fournir à la fin de son exécution. Il peut s’agir également de variables portant des valeurs
finales recherchées ou des messages informant l’utilisateur de la conclusion à laquelle le
programme est parvenu à la fin de l’exécution de toutes les instructions.
Données :
Résultats :
Début
/* Déclaration des variables */
/* Lecture des données */
/* Calcul des résultats */
/* Affichage des résultats */
Fin
1. Ecrire un programme qui permet de résoudre une équation du second degré dans IR,
de la forme ax2+bx+c=0
Données : ………………………………………………………………………………………
Résultats : ………………………………………………………………………………………
2. Ecrire un programme algorithmique qui permet d’évaluer la fonction entière à valeur
entière f(x) suivante :
F(x) = 15x4 + 3x3 + x – 4
Données : ………………………………………………………………………………………
3
Résultats : ………………………………………………………………………………………
3. Ecrire un programme algorithmique qui permet d’évaluer la fonction réelle à valeur
réelle g(x) suivante :
g(x,y) = x3 - 3y2
Données : ………………………………………………………………………………………
Résultats : ………………………………………………………………………………………
4. Ecrire un programme qui calcule la moyenne arithmétique simple d’un étudiant dans
les matières suivantes : Informatique, Math, Physique, Anglais
Données : ………………………………………………………………………………………
Résultats : ………………………………………………………………………………………
5. Ecrire un programme qui calcule la moyenne arithmétique pondérée d’un étudiant
dans les matières suivantes : Informatique, Math, Physique, Anglais
Données : ………………………………………………………………………………………
Résultats : ………………………………………………………………………………………
6. Un mur clôture une parcelle de long x larg (en mètre) avec 3 couches de briques
pleines et 11 couches de briques creuses. Dans ces dernières couches, un portail de 3m
est programmé. Ecrire un programme algorithmique qui détermine le nombre de
briques à utiliser pour clôturer cette parcelle pour des briques longues de 40cm.
Données : ………………………………………………………………………………………
Résultats : ………………………………………………………………………………………
7. Le service de solde d’une société établit les bulletins de salaire en utilisant les
formules suivantes :
Salaire de base = taux x indice
Salaire brut = salaire de base + indemnités
Salaire net = Salaire brut – IUTS
Ecrire un programme qui calcule le salaire d’un employé et détermine sa catégorie :
Si Salaire net <= 50 000, l’employé est PAT
Si 50 000 < Salaire net < 300 000, l’employé est cadre
Si Salaire net > 300 000, l’employé est du STAFF
Données : ………………………………………………………………………………………
Résultats : ………………………………………………………………………………………
I.2. Le Langage C
exemple :
les fonctions de lecture et écriture en C sont disponibles dans la bibliothèque sous le
nom de fichier "stdio.h". D’où l’obligation d’inclure ce fichier pour l’usage de ces fonctions.
#include <stdio.h>
Equivalent à "Début"
main()
{
instructions en langage C
} Equivalent à "Fin"
4
I.2.2. Notion de variable et d’instruction
Notion d’instruction
Comme dans le cas du langage algorithmique, une instruction est un ordre donné à la
machine qui peut être : une déclaration de variables, une affectation, une opération
d’entrée/sortie, …
Notion d’affectation :
Syntaxe :
NomVariable = Valeur ;
NomVariable = Variable ;
NomVariable = Expression ;
Exemple :
I = 100 ;
J = I;
K = J + I;
I = I + K;
5
I.2.5. L’instruction d’écriture
printf("%d", x) ;
à l’affichage :
10
printf("\nLa note de l’étudiant est : %f et y = %d", note, y) ;
à l’affichage :
La note de l’étudiant est : 13 et y = 1
printf("Bonjour") ;
à l’affichage :
Bonjour
Enoncé 1
Ecrire un programme qui permet d’évaluer la fonction entière f(x) suivante :
f(x) = 17x3 – 4 x² + x + 7
Données : l’entier x
Résultats : l’entier fdex = f(x)
Début
entier x, fdex ;
lire(x) ;
fdex ← 17 *(x * x* x) – (4 * x * x )+ x + 7 ;
ecrire(fdex) ;
Fin
Permet d’informer l’utilisateur de la
#include <stdio.h> donnée attendue par la machine
main()
{ int x, fdex ;
char arret; Permet d’informer l’utilisateur du
printf("\nEntrer la valeur de x : ") ; résultat obtenu par la machine
scanf("%d", &x);
fdex = 17 *(x * x* x) - (4 * x * x )+ x + 7 ;
printf("\nLa valeur de f de x = %d", fdex);
Permet d’arrêter la machine pour la
scanf("%c", &arret) ; lecture du résultat
scanf("%c", &arret) ;
}
Exercices d’application
Corriger et traduire dans la syntaxe du langage C, les exercices de la section
algorithmique précédente.
6
Chapitre II. Les structures de contrôle
II.1.1. Définition
7
Exemple :
Soit l’instruction de déclaration suivante :
int MaVar1, MaVar2 ;
Les expressions conditionnelles suivantes sont valides :
( ! MaVar1)
( ! MaVar1+MaVar2)
- (Opérande Op1 Opérande) : dans cette expression, les opérandes peuvent être des
variables, des valeurs immédiates ou des expressions arithmétiques parenthésées ou pas.
L’opérateur utilisé est un opérateur binaire de la catégorie 1.
Exemple :
Soit les instructions de déclaration suivantes :
int MaVar1, MaVar2 ;
char MonCaractere ;
Les expressions conditionnelles suivantes sont algorithmiquement valides :
(MaVar1 > 0)
(MaVar1 - MaVar2 > 0)
(MaVar2/11 != MaVar1)
(MonCaractere != ‘a’)
- Op2 Expression : il s’agit de la même forme que précédemment, mais en remplaçant
l’opérande par une sous expression conditionnelle. Elle traduit également le cas de l’usage de
l’opérateur de jointure "!". Elle exprime la négation de la sous expression. Si celle-ci est vraie,
alors l’évaluation de l’expression globale renvoie la valeur de vérité "faux", et vice-versa.
Exemple :
Soit l’instruction de déclaration suivante :
int MaVar1, MaVar2 ;
Les expressions conditionnelles suivantes sont algorithmiquement valides :
!(MaVar1 > 0)
!(MaVar2 != MaVar1)
Ces expressions sont équivalentes respectivement à :
(MaVar1 <= 0)
(MaVar2 == MaVar1)
De ce fait, une expression conditionnelle utilisant l’opérateur de négation NON dans une
forme factorisée peut être traduite dans une forme développée par introduction de l’opérateur
NON à l’intérieur des parenthèses et en l’appliquant aux opérandes et aux opérateurs.
La lisibilité d’une expression conditionnelle complexe est facilitée par l’usage des
parenthèses. Ces parenthèses également facilitent l’application de l’ordre de priorité entre les
différents termes de l’expression. Le respect des règles de parenthésage est une contrainte
pour la création des expressions bien parenthésées. La forme générale des expressions
composites est la suivante :
Expression [Op2 Expression]n
- Expression désigne une expression simple ou une expression composite.
- Les crochets symbolisent une partie optionnelle, qui lorsqu’elle doit apparaître,
désigne une autre expression rattachée aux précédentes au moyen d’un opérateur de
jointure de catégorie 2.
- L’exposant n symbolise la répétition plusieurs fois de la partie délimitée par les
crochets, ce qui donne une expression plus complexe qui nécessite l’usage des
parenthèses.
8
Exemple :
Soit l’instruction de déclaration suivante :
int MaVar1, MaVar2, MaVar2 ;
Les expressions conditionnelles suivantes sont algorithmiquement valides :
(MaVar1 > 0) && (MaVar2 != MaVar1)
(MaVar1 < 100) || (MaVar2 == 12)
L’expression suivante est vraie si MaVar1 ∈ [MaVar2, MaVar3]
(MaVar1 >= MaVar2) && (MaVar1 <= MaVar3)
L’expression suivante est vraie si MaVar1 ∉ [MaVar2, MaVar3]
(MaVar1 < MaVar2) || (MaVar1 > MaVar3)
Soit à proposer une expression traduisant l’assertion selon laquelle une année est bissextile si
elle est divisible par 4, pas par 100, en dehors des années multiples de 400 qui sont
bissextiles. Pour cela l’opérateur "%" est utilisé pour obtenir le reste de la division d’un
nombre par un autre.
((Année % 4 == 0) && (Année % 100 != 0)) || (Année % 400 == 0)
La première sous expression (Année % 4 = 0) permet d’évaluer si l’année est divisible par 4.
Et puisque cette seule condition ne suffit pas, il faut vérifier que l’année n’est pas divisible par
100 (Année % 100 != 0), d’où l’usage de l’opérateur de rattachement "&&". Puisque par
défaut les années multiples de 400 sont bissextiles, et que cette condition suffit à elle seule à
faire déduire le caractère bissextile de l’année, la troisième sous expression (Année % 400 =
0) sera rattachée aux autres par l’opérateur "||".
Une année est bissextile si les deux derniers chiffres sont divisibles par 4. Ecrire un
programme C qui permet de vérifier si une année est bissextile.
9
R = Annee % 100 ; /* Obtenir les deux derniers chiffres */
if (R % 4 == 0) /* Vérifier si les deux derniers chiffres sont divisibles par 4*/
printf("\nL’année %d est bissextile !", X) ;
else
printf("\nL’année %d n’est pas bissextile !", X) ;
}
1. Ecrire un programme qui lit deux entiers X et Y, et donne leur différence en valeur
absolue.
2. Ecrire un programme qui établit le bulletin de notes avec une moyenne arithmétique
simple, d’un étudiant dans les matières suivantes : Informatique, Anglais, Biologie,
Environnement.
3. Ecrire un programme qui lit 2 entiers et affiche le plus grand au sens large
4. Ecrire un pgm qui donne la différence en valeur absolue entre 2 entiers donnés
5. Ecrire un programme qui lit 2 entiers et affiche le plus grand au sens strict
6. Ecrire un programme qui indique si un entier lu est pair ou impair
II.3.1. Définition
10
à chaque tour de boucle. Chaque valeur de l’indice permet d’accéder à un élément du tableau
et le nombre d’éléments est connu à priori. Dans de tels cas, le parcours de tous les éléments
stockés dans un tableau suppose nécessairement l’usage d’une structure répétitive.
Trois questions complètent la grille d’analyse à ce stade pour permettre de déterminer
l’usage possible de la structure "pour …". Les réponses aux trois questions permettront de
déterminer si l’usage de la structure répétitive avec compteur est requis dans le déroulement
d’une partie d’un programme, tout en spécifiant le schéma d’évolution de l’état du
programme :
Q5 : Y a-t-il un schéma qui illustre l’évolution progressive des valeurs des variables au fil des
itérations pour atteindre un résultat ?
Q6 : Quel est le groupe d’instructions à mettre en place pour assurer cette évolution ?
Q7 : Quelle est la limite maximale du nombre d’itérations ?
Syntaxe en langage C :
for (instruction initiale ; condition de continuation ; instruction de continuation)
instruction
- instruction : peut être une seule instruction ou un bloc d’instruction de la forme :
{ instruction1 ;
instruction2 ;
…
instructionN ;
}
Légende :
- instruction initiale : est une instruction qui sera exécutée avant la première itération
- condition de continuation : est une expression logique (la même que celle du if) qui
sera évaluée avant chaque tour de boucle, y compris le premier. Le tour de boucle est
réalisé si l’expression est vraie.
- instruction de continuation : est une instruction exécutée à la fin de chaque tour de
boucle.
Données : l’entier N
Résultats : affichage du message "bonjour" N fois
#include<stdio.h>
main()
{ int I, N ;
printf("\nEntrer la valeur de N :") ;
scanf("%d", &N) ;
for(I = 1; I <= N; I++)
printf("\nbonjour") ;
}
11
3. Ecrire un programme qui calcule la moyenne arithmétique simple d’une série de vingt
notes réelles sans stockage des notes individuelles.
4. Ecrire un programme qui calcule la moyenne arithmétique pondérée d’une série de dix
notes réelles sans stockage des notes individuelles.
5. Reprendre l’exercice précédent en permettant à l’utilisateur de choisir n’importe quel
nombre de notes.
6. Ecrire un programme qui affiche la table de multiplication sous la forme :
1 2 3 4 5 6 7 8 9 10 11 12
1 1 2 3 4 5 6 7 8 9 10 11 12
2 2 4 6 8 10 12 14 16 18 20 22 24
3 3 6 9 12 15 18 21 24 27 30 33 36
4 4 8 12 16 20 24 28 32 36 40 44 48
5 5 10 15 20 25 30 35 40 45 50 55 60
6 6 12 18 24 30 36 42 48 54 60 66 72
7 7 14 21 28 35 42 49 56 63 70 77 84
8 8 16 24 32 40 48 56 64 72 80 88 96
9 9 18 27 36 45 54 63 72 81 90 99 108
10 10 20 30 40 50 60 70 80 90 100 110 120
11 11 22 33 44 55 66 77 88 99 110 121 132
12 12 24 36 48 60 72 84 96 108 120 132 144
II.4.1. Définition
- instruction : peut être une seule instruction ou un bloc d’instruction (voir "for")
- expression : est une expression logique comme celle du "if". Elle est évaluée avant la
première itération et à chaque itération ou tour de boucle. Les itérations sont arrêtées
dès que l’expression est fausse. De ce fait, l’expression doit être composée de
variables dont la valeur change dans le corps de la boucle pour éviter des boucles
infinies.
12
avec compteur peut être remplacée par la structure répétitive conditionnelle. L’inverse n’est
pas toujours possible.
Données : l’entier N
Résultat : le message « bonjour » affiché N fois
#include<stdio.h>
main()
{ int I, N ;
printf("\nEntrer la valeur de N :") ;
scanf("%d", &N) ;
I = 1;
while (I <= N)
{ printf("\nbonjour") ;
I++;
}
}
1. Ecrire l’algorithme d’un programme qui lit de façon itérative un entier X et indique si
X est pair ou impair, jusqu’à ce que l’utilisateur décide d’arrêter ces itérations en
tapant la valeur zéro pour X.
2. Ecrire un programme algorithmique qui lit les bornes BI et BS d’un intervalle
d’entiers. Le programme oblige l’utilisateur à respecter la contrainte BI < BS. De
même, pour quitter le programme, l’utilisateur doit taper une valeur entière N
comprise entre [BI, BS]. Le programme indique à chaque fois la position de la valeur
tapée par l’utilisateur par rapport aux bornes de l’intervalle : hors borne supérieure, en
deçà de la borne inférieure.
3. Ecrire l’algorithme d’un programme qui permet de lire un nombre dans une variable N
portant sur deux octets au maximum en représentation non signée et affiche N chiffre
par chiffre.
4. Ecrire un pgm qui affiche le numéro d’itération en demandant à l’utilisateur son avis
par ‘o’ ou ‘n’ pour arrêter l’affichage.
5. Ecrire un pgm qui présente le menu suivant à un utilisateur en affichant un message
indiquant à chaque fois l’option choisie par l’utilisateur :
MENU
1. Afficher
2. Lecture
3. Supprimer
0. Quitter
13
octet. Le programme donne la valeur décimale de chaque nombre de la série à chaque
itération. La série est terminée par les caractères 00.
2. Ecrire un programme qui lit trois entiers X, Y et Z et les affiche dans l’ordre croissant.
3. Ecrire un programme qui lit plusieurs fois deux entiers X et Y et indique si X est divisible
par Y tant que la variable Y n’est pas nulle.
4. Ecrire un programme qui lit plusieurs fois deux entiers X et calcule XY/Y ! tant que la
variable Y n’est pas nulle.
5. Ecrire un programme qui lit N fois trois entiers X, Y et Z et indique s’ils sont divisibles
deux à deux, de façon exclusive.
6. Ecrire un programme qui répète N fois le calcule de la moyenne arithmétique simple
d’une série de notes réelles sans stockage des notes individuelles. Le programme
indiquera l’admissibilité à chaque moyenne calculée, si elle est supérieure ou égale à 10.
7. Reprendre l’exercice sur l’affichage d’une table de multiplication par le nombre entier N.
Le programme algorithmique se répète tant que N est différent de 0.
8. Ecrire un programme qui répète N fois le calcule de la moyenne arithmétique pondérée
d’une série de notes réelles sans stockage des notes individuelles. Le programme
indiquera l’admissibilité à chaque moyenne calculée, si elle est supérieure ou égale à 10.
14
Chapitre III. Les tableaux
III.1. Définitions
Le parcours des éléments du tableau en C se fait en utilisant un indice qui prend des
valeurs dans l’intervalle [0, TailleMax-1]. De ce fait, le premier élément du tableau précédent
est tab[0], le dernier élément est tab[99].
15
la ligne à la position voulue par le programmeur. Pour afficher le vecteur de l’exemple
précédent, les instructions suivantes peuvent être utilisées :
for (I = 0; I<=9; I++)
printf("\nL’élément Tab[%d] = %d", I, Tab[I]) ;
Ecrire un programme qui permet avec des parcours séparés, de lire 10 entiers, de les
stocker en mémoire, de rechercher le plus grand ainsi que le plus petit des entiers stockés et
de calculer la moyenne arithmétique simple des entiers ainsi stockés.
Données : 10 entiers
Résultats : E le tableau contenant les 10 entiers stockés en mémoire
PG = Plus grand entier PP = Plus petit entier
#include<stdio.h>
main()
{ int E[10], PG, PP, i ;
float Moyenne;
/*lecture du tableau */
for (i=0; i<=9; i++)
{ printf("\nEntrer l’élément numéro %d",i) ;
scanf("%d", &E[i]) ;
}
/* Recherche du plus grand */
PG=E[0] ;
for (i=1; i<=9; i++)
{ if (E[i] > PG)
PG = E[i] ;
}
/* Recherche du plus petit */
PP=E[0] ;
for (i=1; i<=9; i++)
{ if (E[i] < PP)
PP = E[i] ;
}
/* Calcul de la moyenne des éléments du tableau*/
Moyenne=E[0] ;
for (i=1; i<=9; i++)
Moyenne = Moyenne + E[i] ;
Moyenne = Moyenne /10 ;
/* Affichage du tableau */
printf("\nLes éléments du tableau sont : ") ;
for (i=0; i<=9; i++)
printf(" %d", E[i]) ;
/* Affichage du plus grand, du plus petit et de la moyenne*/
printf("\nLe plus grand est : %d", PG) ;
printf("\nLe plus petit est : %d", PP) ;
printf("\nLa moyenne est : %f", Moyenne) ;
}
16
III.2.4. Opération de tri sur un vecteur
Principe du tri-bull
Soient les entiers suivants contenus dans un tableau :
3 1 24 12 6 7
Le principe du tri-bull est le suivant :
1. parcourir le tableau
2. comparer les éléments consécutifs
3. s’ils sont dans le mauvais ordre, il faut les permuter
4. s’il y a eu au moins une permutation, aller à 1
5. sinon le tableau est trié
Exercice d’application
Ecrire un programme qui lit un tableau de 10 entiers, le trie par ordre croissant et
affiche le tableau trié et non trié.
#include<stdio.h>
main()
{ int E[10], PG, PP, I, perm=1, temp ;
/*lecture du tableau */
for (i=0; i<=9; i++)
{ printf("\nEntrer l’élément numéro %d",i) ;
scanf("%d", &E[i]) ;
}
/* Affichage du tableau non trié */
printf("\nLes éléments du tableau sont : ") ;
for (i=0; i<=9; i++)
printf(" %d", E[i]) ;
/*Tri du tableau */
while(perm)
{ perm=0 ;
for (i=0; i<9; i++)
if (E[i] > E[i+1])
{ perm=1 ;
temp= E[i] ;
17
E[i]=E[i+1] ;
E[i+1]=temp ;
}
}
/* Affichage du tableau trié */
printf("\nLes éléments du tableau sont : ") ;
for (i=0; i<=9; i++)
printf(" %d", E[i]) ;
}
Le parcours des éléments d’une matrice en C se fait en utilisant les indices de ligne et
de colonne. Chaque indice prend des valeurs dans l’intervalle [0, Taille_Max-1].
Exemple 2 :
Tab[0][9] fait référence à l’élément qui est à la première ligne dernière colonne.
Tab[0][0] Tab[0][9]
Tab[7][3] Tab[2][5]
Tab[9][0] Tab[9][9]
18
avec la déclaration des compteurs Ligne et Colonne par la syntaxe "int Ligne, Colonne ;",
alors les instructions suivantes permettent de lire les éléments de cette matrice :
for (Ligne = 0; Ligne <=9; Ligne ++)
for (Colonne = 0; Colonne <=9; Colonne ++)
{ printf("\nEntrer l’élément Tab[%d, %d] : ", Ligne, Colonne) ;
scanf("%d", &Tab[Ligne][Colonne]) ;
}
#include<stdio.h>
main()
{ int M[3][3] , N[3][3] , P[3][3], i, j ;
char r ;
/*Lecture des éléments de la matrice M*/
for(i=0 ; i<= 2 ; i++)
for(j=0 ; j<= 2 ; j++)
{ printf("\n Entrer l’élément M(%d, %d) : ", i, j);
scanf("%d", &M[i][j]) ;
}
19
/*Lecture des éléments de la matrice N*/
for(i=0 ; i<= 2 ; i++)
for(j=0 ; j<= 2 ; j++)
{ printf("\n Entrer l’élément N(%d, %d) : ", i, j);
scanf("%d", &N[i][j]) ;
}
/*Calcul des éléments de P*/
for(i=0 ; i<= 2 ; i++)
for(j=0 ; j<= 2 ; j++)
P[i][j] = M[i][j] + 2 * N[i][j] ;
/*Affichage des éléments de M*/
printf ("\n Les éléments de M sont:\n") ;
for(i=0 ; i<= 2 ; i++)
{ for(j=0 ; j<= 2 ; j++)
printf(" %d", M[i][j]) ;
printf ("\n");
}
/*Affichage des éléments de N*/
printf ("\n Les éléments de N sont:\n") ;
for(i=0 ; i<= 2 ; i++)
{ for(j=0 ; j<= 2 ; j++)
printf(" %d", N[i][j]) ;
printf ("\n");
}
/*Affichage des éléments de P*/
printf ("\n Les éléments de P sont:\n") ;
for(i=0 ; i<= 2 ; i++)
{ for(j=0 ; j<= 2 ; j++)
printf(" %d", P[i][j]) ;
printf ("\n");
}
scanf("%c", &r) ;
scanf("%c", &r) ;
}
20
7. Ecrire un programme qui lit un entier LIMITE et 100 entiers, les stocke en mémoire puis
calcule et affiche la somme des entiers qui sont supérieurs ou égaux à LIMITE.
8. Refaire le même programme avec les entiers qui sont inférieurs à LIMITE.
1. Ecrire un programme qui lit une matrice carrée M d’ordre x<=10 et calcule la matrice N
sa transposée.
2. Reprendre l’exercice précédent sans utilisation de la matrice N.
3. Ecrire un programme qui stocke et affiche dans une matrice, la table de multiplication par
un entier N<=20.
4. Ecrire un programme qui lit un vecteur V de taille TV<=10 et une matrice M de LxC
avec L et C<=30, et affiche les colonnes dont le parcours verticale des lignes contient au
moins une occurrence de V.
5. Ecrire un programme qui lit un vecteur V de taille TV<=10 et une matrice M de LxC
avec L et C<=30, et affiche les lignes dont le parcours horizontal des colonnes contient au
moins une occurrence de V.
6. Ecrire un programme qui lit un vecteur V de taille TV<=10 et une matrice M de LxC
avec L et C<=30, et affiche le nombre d’occurrences de V dans chaque colonne
parcourue de façon verticale.
7. Ecrire un programme qui lit un vecteur V de taille TV<=10 et une matrice M de LxC
avec L et C<=30, et affiche le nombre d’occurrences de V dans chaque ligne parcourue
de façon horizontale.
21
Chapitre IV. Les structures et les tableaux de
structures
IV.1.1. Définition
matricule nom
prenom genre
Cette déclaration crée un modèle, pour l’utiliser, il faut déclarer les variables de ce type.
22
struct Etud
{ int matricule ;
char nom[50] ;
char prenom[50] ;
char genre ;
} E, MP ;
Opérateur : "."
Syntaxe :
NomVariable.nomchamp
Exemple :
E.matricule=1 ;
scanf("%s", &E.nom) ;
E.genre= 'F' ;
La primitive "typedef" permet de créer un alias d’un type. De ce fait, l’alias peut être
utilisé partout à la place du type initial. Par exemple, avec l’instruction "typedef int entier ;"
placée dans la liste des déclarations, "entier" peut dorénavant être utilisé à la place de "int".
Lors du processus de compilation, le pré-compilateur se chargera de remplacer par "int",
toutes les occurrences du mot "entier".
Exemple :
typedef int entier ; ⇒ entier i ; int i ;
La déclaration d’une structure peut elle même être associée à l’usage de la primitive
"typedef" par une déclaration directe ou différée :
- Par usage du modèle de déclaration directe, un alias peut être défini pour éviter le
rappel constant de l’entête de la structure pour toute nouvelle déclaration de variable.
typedef struct nom_de_la_structure
{ type1 NomVariable1 ;
type2 NomVariable2 ;
…
typeN NomVariableN ;
} NomTYPE ;
Exemple : Soit à définir "E" comme nom d’alias de la structure précédente représentant un
étudiant par le modèle de la déclaration directe :
typedef structure Etud
{ int matricule ; char nom[50] ;
char prenom[50] ; char genre ;
}E;
- Par usage du modèle de déclaration différée.
Exemple : Soit à définir "E" comme nom d’alias de la structure précédente représentant un
étudiant par le modèle de déclaration différée :
typedef structure Etud E ;
23
Quelle que soit l’une des deux formes utilisées par usage de "typedef", les variables
"E3" et "Etudiant3" peuvent être déclarées de la façon suivante après la création du type E :
E E3, Etudiant3 ;
Exercice d’application
Ecrire un programme qui lit et qui affiche les caractéristiques d’un seul étudiant.
#include<stdio.h>
main()
{ /* Déclaration de la structure de données */
typedef struct Etud
{ int matricule ; char nom[50] ;
char prenom[50] ; char genre ;
}E;
E Etudiant ;
/* Lecture des caractéristiques de l’étudiant */
printf("\nEntrer le matricule de l’étudiant :");
scanf("%d", &Etudiant.matricule) ;
printf ("\nEntrer le nom de l’étudiant :");
scanf("%s", &Etudiant.nom) ;
printf ("\nEntrer le prénom de l’étudiant :");
scanf("%s", &Etudiant.prenom) ;
printf("\nEntrer le genre de l’étudiant :");
scanf("%c", &Etudiant.genre) ;
scanf("%c", &Etudiant.genre) ;
/* Affichage des caractéristiques de l’étudiant */
printf("\nLe matricule de l’étudiant est : %d", Etudiant.matricule) ;
printf("\nLe nom de l’étudiant est : %s", Etudiant.nom) ;
printf("\nLe prénom de l’étudiant est : %s", Etudiant.prenom) ;
printf("\nLe genre de l’étudiant est : %c", Etudiant.genre) ;
}
IV.2.1. Définition
24
IV.2.2. Syntaxe de déclaration d’un tableau de structure
Le tableau de structure est une variable. Il peut donc être déclaré pendant la
déclaration de la structure, après la déclaration de la structure ou après la déclaration du
nouveau type en utilisant la primitive TYPEDEF.
Exemple :
Déclaration du tableau CLASSE de 10 étudiants du type précédent.
Etudiant CLASSE[10] ;
Représentation schématique
matricule nom
CLASSE
0 prenom genre
1
matricule nom
prenom genre
9 matricule nom
prenom genre
Syntaxe :
NomTableau[indice].NomChamp
Exemple :
CLASSE[0].matricule = 11 ;
Ecrire un programme C qui lit et affiche sous forme de liste, tous les étudiants de la
classe précédente
#include<stdio.h>
main()
{ /* Déclaration de la structure de données */
typedef struct Etud
{ int matricule ; char nom[50] ;
char prenom[50] ; char genre ;
}E;
E CLASSE[50] ; int i ;
25
/* SP1 : Lecture des caractéristiques des étudiants */
for(i=0 ; i<50 ; i++)
{ printf("\nEntrer le matricule de l’étudiant No : %d", i+1);
scanf("%d", &CLASSE[i].matricule) ;
printf ("\nEntrer le nom de l’étudiant No : %d", i+1);
scanf("%s", & CLASSE[i].nom) ;
printf ("\nEntrer le prénom de l’étudiant No : %d", i+1);
scanf("%s", & CLASSE[i].prenom) ;
printf("\nEntrer le genre de l’étudiant No : %d", i+1);
scanf("%c", & CLASSE[i].genre) ;
scanf("%c", & CLASSE[i].genre) ;
}
/* SP2 : Affichage en liste des étudiants de la classe */
printf ("\nMatricule Nom prénom Genre");
for(i=0 ; i<50 ; i++)
printf("\n %d %s %s %c", CLASSE[i].matricule,
CLASSE[i].nom,
CLASSE[i].prenom,
CLASSE[i].genre
);
}
1. Une classe est composée de 14 étudiants, chacun étant identifié par un matricule entier,
un nom (40 caractères max), son équipe sportive (30 caractères max). Dans un même
programme C, écrire :
- le code C de la déclaration de la variable qui permet de stocker les étudiants de cette
classe en mémoire.
- le code C qui lit, affiche la liste des étudiants et renvoie la liste des étudiants qui
jouent au football.
2. Une classe est composée de 14 étudiants, chacun étant identifié par un matricule entier,
un nom (40 caractères max), son équipe sportive (30 caractères max). Dans un même
programme C, écrire :
3. Une classe est composée de 20 étudiants identifiés chacun par un matricule entier. Dans
un même programme C :
- Donner la déclaration de la variable qui permet de stocker ces étudiants en mémoire.
- Ecrire le code C qui permet de lire la liste des étudiants
- Ecrire le code C qui permet de trier les étudiants par ordre croissant de matricule et qui
renvoie le matricule le plus élevé.
- Ecrire le code C qui permet d’afficher les matricules sous forme de liste
26
Introduction ............................................................................................................................................. 1
Chapitre I. Notions de base de la programmation .................................................................................. 2
I.1. Le Langage Algorithmique ............................................................................................................. 2
I.1.1. Notion de variable et d’instruction ........................................................................................ 2
I.1.2. L’affectation et les opérateurs arithmétiques disponibles .................................................... 2
I.1.3. L’instruction de lecture .......................................................................................................... 3
I.1.4. L’instruction d’écriture ........................................................................................................... 3
I.1.5. Notion de données et résultats .............................................................................................. 3
I.1.6. Structure générale d’un programme algorithmique .............................................................. 3
I.1.7. Exercices d’application ........................................................................................................... 3
I.2. Le Langage C .................................................................................................................................. 4
I.2.1. Structure générale d’un programme C................................................................................... 4
I.2.2. Notion de variable et d’instruction ........................................................................................ 5
I.2.3. L’affectation et les opérateurs arithmétiques disponibles .................................................... 5
I.2.4. L’instruction de lecture .......................................................................................................... 5
I.2.5. L’instruction d’écriture ........................................................................................................... 6
I.2.6. Exemple d’illustration............................................................................................................. 6
Chapitre II. Les structures de contrôle .................................................................................................... 7
II.1. La structure conditionnelle .......................................................................................................... 7
II.1.1. Définition ............................................................................................................................... 7
II.1.2. Exercice d’application ............................................................................................................ 9
II.1.3. Exercices sur la structure conditionnelle............................................................................. 10
II.2. Les structures de contrôle répétitives ........................................................................................ 10
II.3. La structure répétitive avec compteur ....................................................................................... 10
II.3.1. Définition ............................................................................................................................. 10
II.3.2. Exercice d’application .......................................................................................................... 11
II.3.3. Exercices sur la structure répétitive avec compteur ........................................................... 11
II.4. La structure répétitive conditionnelle ........................................................................................ 12
II.4.1. Définition ............................................................................................................................. 12
II.4.2. Exercice d’application .......................................................................................................... 13
II.4.3. Exercices sur la structure répétitive conditionnelle ............................................................ 13
Chapitre III. Les tableaux ....................................................................................................................... 15
III.1. Définitions ................................................................................................................................. 15
III.2. Les vecteurs ou tableaux à une dimension ............................................................................... 15
III.2.1. Syntaxe de déclaration d’un vecteur .................................................................................. 15
III.2.2. Opérations sur les vecteurs ................................................................................................ 15
III.2.3. Exercice d’application ......................................................................................................... 16
III.2.4. Opération de tri sur un vecteur .......................................................................................... 17
III.3. Les matrices ou tableaux à deux dimensions ............................................................................ 18
III.3.1. Syntaxe de déclaration d’une matrice................................................................................ 18
III.3.2. Opérations sur les matrices ................................................................................................ 18
III.3.3. Exercice d’application ......................................................................................................... 19
III.4. Exercices sur les vecteurs .......................................................................................................... 20
III.5. Exercices sur les matrices .......................................................................................................... 21
Chapitre IV. Les structures et les tableaux de structures ...................................................................... 22
IV.1. Les structures ............................................................................................................................ 22
IV.1.1. Définition............................................................................................................................ 22
IV.1.2. Syntaxe de déclaration du type.......................................................................................... 22
IV.1.3. Syntaxe de déclaration des variables ................................................................................. 22
IV.1.4. Syntaxe d’accès aux champs d’une variable de type structure ......................................... 23
IV.1.5. Usage de la primitive typedef ............................................................................................ 23
IV.2. Les tableaux de structures ........................................................................................................ 24
27
IV.2.1. Définition............................................................................................................................ 24
IV.2.2. Syntaxe de déclaration d’un tableau de structure ............................................................. 25
IV.2.3. Accès aux champs dans un tableau de structure ............................................................... 25
IV.2.3. Exercice d’application ........................................................................................................ 25
IV.3. Exercices sur les structures et les tableaux de structures ........................................................ 26
28