6

Click here to load reader

Exam 2005

Embed Size (px)

Citation preview

Page 1: Exam 2005

MONTIGNY Eric Page 1 sur 6 Correction de l’examen de langage C du 26 mai 2006

EXERCICE 1 ( SUR 3 POINTS SUR 20) # include <stdio.h> int mafonction (int *,int*); main() { int *r,*t,a,b,e; a=2;b=3; r=&a; t=&b; printf("\n %d %d",*r,b); t=r; printf ("\n %d %d",*t,b); e= mafonction(t,&b); r=&b; printf ("\n %d %d %d",a,*r,e); } int mafonction (int *a, int*b ) { int c; c=*a+1; *a=*b+3; *b=c+2; return c; }

Le résultat en images :

Page 2: Exam 2005

MONTIGNY Eric Page 2 sur 6 EXERCICE 2 (SUR 9 POINTS SUR 20) : # include <stdio.h> // QUESTION 1: DECLARER UNE STRUCTURE NOM typedef struct N { char lettre; int position; struct N *suivant; struct N *precedent; }Nom; // QUESTION 2: ALLOCATION Nom *allouer_maille(char titi) { Nom *p; p=(Nom *)malloc( sizeof ( Nom ) ); p -> lettre = titi; p -> suivant = NULL; p -> precedent = NULL; return p; } // QUESTION 3: REMPLISSAGE void remplir_position( Nom *p) { char i= 'a'; int b=0; while ( ( p->lettre != i ) && ( i <= 'z') ) { b++; i++; } if ( p->lettre == i ) p->position = b; else { i= 'A'; b= 0; while ( ( p->lettre != i ) && (i <= 'z') ) { b++; i++; } p->position = b; } } // QUESTION 4: AFFICHER MAILLE void afficher_maille (Nom *p) { printf (" lettre : %c\n",p->lettre); printf (" position : %d\n",p->position); }

Page 3: Exam 2005

MONTIGNY Eric Page 3 sur 6 // QUESTION 5: CHAINAGE ARRIERE Nom *chainage_arriere (Nom *tete, Nom *p) { Nom *q; q= tete; if (tete == NULL) return p; while ( q ->suivant != NULL) q=q->suivant; q->suivant = p; p->precedent= q; return tete; } // QUESTION 6: AFFICHE LISTE void affiche_liste (Nom *p) { int i=1; while (p != NULL) { printf ("maille %d\n",i); afficher_maille (p); p=p->suivant; i++; } } // QUESTION 7: CREER LISTE Nom *crer_liste(char *c) { Nom *p,*tete=NULL; int i=1,j; while ( *(c+i) != '\0' ) i++; for (j=i-1;j>=0;j--) { p=allouer_maille( *(c+j) ); remplir_position( p); tete = chainage_arriere (tete, p); } return tete; } // QUESTION 8: MINUSCULE VERS MAJUSCULE void min_maj(Nom*p) { while(p != NULL) { if ( !((p->lettre>'A') && (p->lettre<'Z')) ) { if (p->lettre != ' ') { p->lettre=p->lettre - 0X20; remplir_position( p); } } p=p->suivant; } }

Page 4: Exam 2005

MONTIGNY Eric Page 4 sur 6 // QUESTION 9: RECOMPOSER LA CHAINE char *recomposer_chaine(Nom *tete) { char *s; int i=0; Nom *q=tete; while (q!=NULL) { i++; q=q->suivant; } s=(char *)malloc(i*sizeof(char)); i=0; q=tete; while (q !=NULL) { *(s+i++)=q->lettre; q=q->suivant; } return s; } // QUESTION 10: LA FONCTION PRINCIPALE int main () { Nom *tete=NULL; char *c; c=(char*)malloc(400*sizeof(char)); printf("entrer une chaine de caractere : "); scanf("%s",c); printf("chaine de caractere saisie : %s",c); tete=crer_liste(c); min_maj(tete); c=recomposer_chaine(tete); printf("\nchaine finale : %s",c); }

Le résultat en images :

Page 5: Exam 2005

MONTIGNY Eric Page 5 sur 6 EXERCICE 3 (SUR 8 POINTS SUR 20) # include <stdio.h> // QUESTION 1: DECLARER UNE STRUCTURE TOTO typedef struct toto { int *tab; int dim; }Toto; // QUESTION 2: ALLOCATION MEMOIRE Toto *allouer_toto(int N) { int *tablo; Toto *p; p = (Toto *)malloc (sizeof( Toto )); tablo = (int *)malloc (N*sizeof(int)); p->tab=tablo; p->dim=N; return p; } // QUESTION 3: REMPLISSAGE DU TABLEAU void remplir_tab (Toto*p) { int i; printf ("Entrer les valeurs de :\n"); for (i=0; i< p->dim ; i++) { printf (" case [%d] : ",i); scanf("%d",p->tab+i); //**** p->tab+i == &(p->tab[i] ****// } } // QUESTION 4: AFFICHAGE DU CONTENU void affiche_toto(Toto *p) { int i; for (i=0;i<p->dim;i++) printf ("\tcase[%d]= %d\n",i,p->tab[i]); } // QUESTION 5: CALCUL DE LA MOYENNE float calculer_moyenne(Toto *p) { int i; float b,a=0.0; for(i=0 ; i< p->dim ;i++) a = a + p->tab[i]; return (a/(p->dim)); } // QUESTION 6: ALLOCATION D'UN TABLEAU Toto **allouer_tab(int N) { Toto **p; p=(Toto **)malloc(N*sizeof(Toto)); return p; }

Page 6: Exam 2005

MONTIGNY Eric Page 6 sur 6 // QUESTION 7: REMPLISSAGE DU TABLEAU void remplir_tab2(Toto **p,int a, int b) { int i; for (i=0;i<a;i++) { p[i]=allouer_toto(b); printf("\n****REMPLISSAGE DU TABLEAU %d *****\n",i+1); remplir_tab(p[i]); } } // QUESTION 8: AFFICHAGE DU TABLEAU void affiche_tab(Toto **p,int a) { int i; printf("\n\n**** AFFICHAGE ****\n"); for (i=0 ;i<a;i++) { printf("tableau %d\n",i+1); affiche_toto(p[i]); } } // QUESTION 9: MOYENNE GENERALE float moyenne_generale( Toto**p, int N) { float a=0.0; int i; for (i=0;i<N;i++) a = a + calculer_moyenne(p[i]); return (a/N); } // FONCTION PRINCIPALE int main() { Toto **b; b=allouer_tab(2); remplir_tab2(b,2, 4); affiche_tab(b,2); printf ("moyG = %f ",moyenne_generale(b,2) ); }

[FIN DU CONTRÔLE]