Correction examen de Structures De Données Avancées Et Programmation

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 5

Correction examen de Structures De Données Avancées Et Programmation

Semestre 3 ; session 1

Exercice 1 :

1. Décomposer l’expression s*=i++

s=s*i;
i++ ;

2. Le programme calcule et affiche la factorielle de n qui est un nombre saisi


par l’utilisateur
3. La sortie : Le resultat est 120

Exercice 2 :

1. Le type client
struct CompteBancaire{
char numero[20];
float montant;
char typeCompte[10];
};
typedef struct CompteBancaire CompteBancaire;

struct Date{
int jour;
int mois;
int annee;
};
typedef struct Date Date;

struct Client{
char nom[20];
char prenom[20];
Date ddn;
char CIN[20];
int nbCompte;
CompteBancaire *infoComptes;
};
typedef struct Client Client;

2. Ecrire un programme permettant de saisir et d’afficher toutes les informations d’un


client.
int main(){
Client cl;
//Saisie du client
printf("Entrer le nom du client : ");
gets(cl.nom);
printf("Entrer le prenom du client : ");
gets(cl.prenom);
printf("Entrer la date de naissance du client (jj mm annee) : ");
scanf("%d%d%d",&cl.ddn.jour,&cl.ddn.mois,&cl.ddn.annee);
printf("Entrer le CIN du client : ");
scanf("%s",cl.CIN);
printf("Entrer le nombre de comptes du client : ");
scanf("%d",&cl.nbCompte);
//inclure stdlib.h pour la fonction malloc()
cl.infoComptes = (CompteBancaire*)
malloc(sizeof(CompteBancaire)*cl.nbCompte);
int i;
printf("Saisie des %d compte(s) du client\n",cl.nbCompte);
for(i=0;i<cl.nbCompte;i++){
printf("Entrer le numero du Compte %d : ",(i+1));
scanf("%s",(cl.infoComptes+i)->numero);
printf("Entrer le montant du Compte %d : ",(i+1));
scanf("%f",&((cl.infoComptes+i)->montant));
printf("Entrer le type du Compte %d : ",(i+1));
scanf("%s",(cl.infoComptes+i)->typeCompte);
}

//Affichage du client
printf("Prenom : %s \n",cl.prenom);
printf("Nom : %s \n",cl.nom);
printf("Date de naissance : %d - %d - %d
\n",cl.ddn.jour,cl.ddn.mois,cl.ddn.annee);
printf("CIN %s \n",cl.CIN);
printf("Le(s) compte(s) : \n");
for(i=0;i<cl.nbCompte;i++){
printf("\t Numero du Compte : %s \n",(cl.infoComptes+i)->numero);
printf("\t Montant du Compte : %f\n",(cl.infoComptes+i)->montant);
printf("\t Type du Compte : %s\n",(cl.infoComptes+i)->typeCompte);
}
return 1;
}

Exercice 3 :

#define N 101 //On parcourt de 1 à 100


struct personne{
char nom[20];
char prenom[20];
int age;
};
typedef struct personne Personne;
int main(){
Personne tab[N];
int n,i;
//Saisie des personnes initiales
do{
printf("Entrer le nombre de personnes : ");
scanf("%d",&n);
}while(n<=0 || n>100);
for(i=1;i<=n;i++){
fflush(stdin);//Vider le tampon pour pouvoir une chaine apres la lecture
d'un numeric
printf("Entrer le nom de la personne numero %d : ",i);
gets(tab[i].nom);
printf("Entrer le prenom de la personne numero %d : ",i);
gets(tab[i].prenom);
printf("Entrer l'age de la personne numero %d : ",i);
scanf("%d",&tab[i].age);
}

//Insertion d'une personne


int pos;
Personne pers;
fflush(stdin);
printf("Entrer le nom de la personne à inserer : ");
gets(pers.nom);
printf("Entrer le prenom de la personne à inserer : ");
gets(pers.prenom);
printf("Entrer l'age de la personne à inserer : ");
scanf("%d",&pers.age);
printf("Entrer la position (entre 1 et %d): ",n+1);
scanf("%d",&pos);
if(pos<1 || pos>(n+1)){
printf("Saisie incorrecte \n");
}
else{
if(n == N-1){
printf("Table est pleine \n");
}
else{
for(i=n;i>=pos;i--){
tab[i+1] = tab[i];
}
tab[pos] = pers;
n++;
}
//Affiche apres insertion
for(i=1;i<=n;i++){
printf("Personne à la position %d \n",i);
printf("\tNom : %s\n",tab[i].nom);
printf("\tPrenom : %s\n",tab[i].prenom);
printf("\tNom : %d \n",tab[i].age);
}
}
}

Exercice 4 :
int tab[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *ptr=NULL;
ptr = tab;

Quelles valeurs ou adresses fournissent ces expressions :

A. *ptr + 2;
Réponse :
tab[0] + 2
= 12+2
= 14
B. *(ptr+2);
Réponse :
tab[2] = 34
C. &tab[0] + 1;
Réponse :
(tab + 1)
= &tab[1]
D. tab + 3,
Réponse :
&tab[3]
E. ptr + (*ptr - 10)
Réponse :
tab + (tab[0] - 10)
= tab + (12-10)
= tab + 2
= &tab[2]
F. *(ptr + *(ptr+8) - tab[7])
Réponse :
*(tab + *(tab+8) -tab[7])
= *(tab + tab[8] – tab[7])
= *(tab + 90 – 89)
= *(tab +1)
= tab[1]
= 23

Vous aimerez peut-être aussi