Vous êtes sur la page 1sur 20

Atelier de programmation C

Elaboré par Dr. Emna HKIRI


Emna.hkiri@gmail.com

ISIGK
1ère SI/ISI

Notions de base de l’algorithmique et de la programmation

1 Introduction

2 Définition.

3 Déclaration et utilisation.

4 Structures et pointeurs.

5 Tableaux de structures.

6 Structures et fonctions.
2

1
Activité
 Le directeur de l’établissement veut créer un programme permettant la saisie et le traitement de ces
listes sachant que chaque classe comporte au maximum 40 étudiants.

Est-il possible de
regrouper ces
variables au sein
d'un même
tableau ?

 Donnez la structure de données nécessaire pour les objets à utiliser


 Donnez une déclaration algorithmique de ces objets. .

Les Enregistrements en langage C

1. Introduction

Etudiant
-CIN
- Nom
-Prénom
- Moyenne
-Observation

2
1. Introduction

Les Enregistrements en langage C


1. Introduction

3
Les Enregistrements en langage C
2. Définition

Etudiant Nom
-CIN: entier
- Nom: chaine
-Prénom: chaine Champs
- Moyenne: réel

Les Enregistrements en langage C


3. Déclaration et utilisation

3.1. Déclaration

4
Exemple Définition d’une adresse et d’une personne

3. Déclaration et utilisation
3.1. Déclaration

10

5
Les Enregistrements en langage C
3. Déclaration et utilisation

3.1. Déclaration

11

3. Déclaration et utilisation

Déclaration de la structure sans typedef : Déclaration de la structure avec typedef :

struct Complexe typedef struct Complexe


{ float reel; { float reel; float
float imaginaire; }; imaginaire; }
Complexe;

struct Complexe nombre1; Complexe nombre1;

Dans ce cas, une structure nommée En l'occurrence, Complexe devient un


Complexe est définie. nouveau type de données qui peut être
Pour déclarer une variable de type struct utilisé directement, sans avoir besoin du
Complexe, on doit utiliser le mot-clé mot-clé struct pour déclarer des
struct. variables.

12

6
Les Enregistrements en langage C
3. Déclaration et utilisation

3.1. Accès à un champs ou membre

13

Les Enregistrements en langage C


Application

Ecrire un programme C qui permet de:

 Déclarer la structure Complexe définissant un nombre complexe


 Calculer la somme et le produit de deux nombres complexes

14

7
Corrigé
#include <stdio.h> // Saisie des nombres complexes
#include <math.h> printf("Entrez la partie réelle du premier nombre
// Définition de la structure pour un nombre complexe : ");
complexe scanf("%f", &nombre1.reel);
struct Complexe printf("Entrez la partie imaginaire du premier nombre
{ float reel; complexe : ");
float imaginaire; }; scanf("%f", &nombre1.imaginaire);
printf("Entrez la partie réelle du deuxième nombre
complexe : ");
int main()
scanf("%f", &nombre2.reel);
{ struct Complexe nombre1, nombre2;
printf("Entrez la partie imaginaire du deuxième nombre
struct somme, produit;
complexe : ");
scanf("%f", &nombre2.imaginaire);

15

Corrigé
// Calcul de la somme // Affichage des résultats
somme.reel = nombre1.reel + nombre2.reel; printf("La somme des nombres complexes est :
somme.imaginaire = nombre1.imaginaire + %.f + %.f\n", somme.reel, somme.imaginaire);
nombre2.imaginaire;
printf("Le produit des nombres complexes est :
%.f + %.f\n", produit.reel,
produit.imaginaire);
// Calcul du produit
produit.reel = (nombre1.reel * nombre2.reel) -
(nombre1.imaginaire * nombre2.imaginaire);

produit.imaginaire = (nombre1.reel *
nombre2.imaginaire) + (nombre1.imaginaire *
nombre2.reel);

16

8
Les Enregistrements en langage C
3. Déclaration et utilisation

3.2. Initialisation et affectation

17

Application
 Ecrire un programme C qui:
 définit une structure permettant de stocker le nom, le prénom et l’âge
d’une personne.
 Lit ensuite ces informations pour deux personnes
 Affiche le nom complet de la moins âgée d’entre elles en utilisant une
seule fonction printf pour l’affichage du résultat.

18

9
Corrigé
#include<stdio.h> scanf("%d",&a.age);
#include<stdlib.h> printf("Entrez le nom de la personne 'B': ");
struct personne scanf("%s",&b.nom);
{ char nom[20]; printf("Entrez le prenom de la personne 'B': ");
char pre[20]; scanf("%s",&b.pre);
int age; }; printf("Entrez l'age de la personne 'B': ");
int main() scanf("%d",&b.age);
{ struct personne a,b; if(a.age<b.age)
printf("Entrez le nom de la personne 'A': "); printf("La moins agee: %s %s.\n",a.nom,a.pre);
scanf("%s",&a.nom); Else
printf("Entrez le prenom de la personne 'A': "); printf("La moins agee: %s %s.\n",b.nom,b.pre);
scanf("%s",&a.pre); return 0; }
printf("Entrez l'age de la personne 'A': ");

19

4. Structures et fonctions
s Enregistrements en langage C

20

10
Application
 Ecrire une fonction en C qui prend en paramètre deux objets de
type structure personne et qui teste s’ils sont identiques ou non.
 Ecrire le programme principal correspondant

21

4. Structures et fonctions
#include <stdio.h> int main()
#include <string.h> { Personne personne1 = {"Alice", 25};
typedef struct { char nom[50]; Personne personne2 = {"Bob", 30};
int age;} Personne; if (comparerPersonnes(personne1, personne2)==0)
int comparerPersonnes(Personne p1, Personne p2) { printf("Les personnes sont identiques.\n");
{ }
if (strcmp(p1.nom, p2.nom) == 0 else
&& p1.age == p2.age) { printf("Les personnes sont différentes.\n");
}
{ return 1; }
return 0;}
else {return 0;}
}

22

11
5.Structures et pointeurs :Exemple
struct personne *pointpers ; pointeur sur une structure
personne
pointpers = &pers

struct personne pers

23

5. Structures et pointeurs
On peut déclarer des pointeurs sur des structures. Elle est notamment nécessaire
lorsque la structure est un paramètre modifiable par une fonction.

 Exemple :
struct personne *pointpers ; pointeur sur une structure personne

Si pointpers = &pers
alors (* pointpers) et pers sont équivalents.
 Pour accéder à un membre (membre) d’une structure (pointée par pt:
 En utilisant l’opérateur . : (*pt).membre
 Accès en utilisant l’opérateur spécial ->i : pt->membre

24

12
#include <stdio.h>
// Affectation de l'adresse de pers à pointpers;
#include <string.h>
pointpers= &pers;
struct personne // on peut accéder aux membres de la structure
{ char nom[50]; pointpers->age = 30;
int age;}; // Affichage des informations de la personne via le
int main() pointeur p

{ struct personne pers; printf("Nom:%s\n",pointpers->nom);


struct personne *pointpers; printf("Age : %d\n", pointpers->age);
return 0;}

25

Remarque
struct personne pers;
(*p).age,=pers.age = p->age struct personne *pointpers;
pointpers; = &pers;

 (*p).age : Accès à la valeur de âge dans la structure pointée par p en


déréférençant le pointeur.
 pers.age : Accès à la valeur de âge dans la structure pers.
 p->âge : Accès à la valeur de âge dans la structure pointée par p à
l'aide de l'opérateur ->.

 Ces trois expressions se réfèrent toutes à la même valeur si p pointe


vers une instance valide de la structure personne.
26

13
Remarque
 & pointpers->nom = &pers.nom
 Pour clarifier :
 & pointpers->nom : Cela signifie que vous prenez l'adresse du
membre nom de la structure pointée par pointpers;.
 &pers.nom : Cela signifie que vous prenez l'adresse du membre nom
de la structure pers.

pointpers.nom : Cela n'a struct personne pers;


pas de sens en C. struct personne *pointpers;
pointpers est un pointeur,
pointpers; = &pers;
pas une structure.

27

Exemple
typedef struct { Incorrect car . est plus prioritaire que *
int no_compte ;
char etat ;
char nom[80];
float solde;
pc = &c1;
struct date dernier_versement;
} cpt ;
*pc.no_compte = ...
cpt c1 , * pc; (*pc).no_compte = ...
c1 est de type cpt pc->no_compte = ...
pc est un pointeur sur une variable de type cpt

28

14
Les Enregistrements en langage C
5. Structures et pointeurs

29

Les Enregistrements en langage C


5. Structures et pointeurs

30

15
Les Enregistrements en langage C
5. Structures et pointeurs

31

Les Enregistrements en langage C


5. Structures et pointeurs

32

16
5. Structures et pointeurs

 &ptrPersonne->age : Utilisé avec un pointeur vers une structure.


 On utilise une flèche (->) pour accéder à un membre de la structure
à travers le pointeur.
 &p.age : Utilisé directement avec une structure. On accède au
membre age de la structure p en utilisant l'opérateur .

33

5. Structures et pointeurs

 Passage par référence : Utiliser des pointeurs permet de passer des


structures par référence plutôt que par valeur.
 Cela signifie éviter de copier toute la structure chaque fois qu'elle est passée à
une fonction.
 Cela économise de la mémoire et des ressources CPU, surtout si la structure
est grande

Passage par référence


&
Passage par valeur

34

17
Les Enregistrements en langage C
6. Structures et tableaux

35

6. Structures et tableaux

36

18
6. Structures et tableaux: application

 Un programme en C qui permet à l'utilisateur :


 de spécifier la taille du tableau d'étudiants
 de remplir le tableau avec des saisies de données,
 de parcourir le tableau pour afficher les éléments,

37

Corrigé
#include <stdio.h> for (i = 0; i < tailleTableau; i++)
// Définition de la structure Etudiant { printf("Entrez le nom de l'etudiant %d : ");
struct Etudiant { char nom[50]; int age;}; scanf("%s", &tableauEtudiants[i].nom);
int main() printf("Entrez l'age de l'etudiant %d : ");
{ int tailleTableau, i; scanf("%d", &tableauEtudiants[i].age); }
// Demande à l'utilisateur de saisir la taille // Affichage des info sur chaque étudiant
printf("Entrez la taille du tableau d'etudiants : ");
scanf("%d", &tailleTableau); for (i = 0; i < tailleTableau; ++i)
{ printf("Etudiant %d : Nom : %s, Age :
// Déclaration d'un tableau d'étudiants %d\n", i + 1, tableauEtudiants[i].nom,
tableauEtudiants[i].age);
struct Etudiant tableauEtudiants[tailleTableau];
}
return 0;}
// Saisie des données pour chaque étudiant
38

19
Formalisme pointeur
#include <stdio.h> // Saisie des données pour chaque étudiant
#include <stdlib.h> for (i = 0; i < tailleTableau; i++)
// Définition de la structure Etudiant { printf("Entrez le nom de l‘étudiant %d : ", i + 1);
struct Etudiant { char nom[50]; scanf("%s", &(tableauEtudiants + i)->nom);
int age;};
int main() printf("Entrez l'age de l‘étudiant %d : ", i + 1);
{ int tailleTableau, i; scanf("%d", &(tableauEtudiants + i)->age); }
// Demande à l'utilisateur de saisir la taille du tableau
printf("Entrez la taille du tableau d'etudiants : "); // Affichage des informations sur chaque étudiant
scanf("%d", &tailleTableau); for (i = 0; i < tailleTableau; i++)
{ printf("Etudiant %d : Nom : %s, Age : %d\n", i + 1,
// Allocation dynamique du tableau d'étudiants (tableauEtudiants + i)->nom,
struct Etudiant *tableauEtudiants = (tableauEtudiants + i)->age);
malloc(tailleTableau * sizeof(struct // Libération de la mémoire allouée dynamiquement
Etudiant)); free(tableauEtudiants);
return 0;
39 }

20

Vous aimerez peut-être aussi