Académique Documents
Professionnel Documents
Culture Documents
ISIGK
1ère SI/ISI
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 ?
1. Introduction
Etudiant
-CIN
- Nom
-Prénom
- Moyenne
-Observation
2
1. Introduction
3
Les Enregistrements en langage C
2. Définition
Etudiant Nom
-CIN: entier
- Nom: chaine
-Prénom: chaine Champs
- Moyenne: réel
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
12
6
Les Enregistrements en langage C
3. Déclaration et utilisation
13
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
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
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
25
Remarque
struct personne pers;
(*p).age,=pers.age = p->age struct personne *pointpers;
pointpers; = &pers;
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.
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
30
15
Les Enregistrements en langage C
5. Structures et pointeurs
31
32
16
5. Structures et pointeurs
33
5. Structures et pointeurs
34
17
Les Enregistrements en langage C
6. Structures et tableaux
35
6. Structures et tableaux
36
18
6. Structures et tableaux: application
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