une petite feuille d`exercices

Transcription

une petite feuille d`exercices
Institut Galilée, MACS2
Langage C : exercices
septembre 2010
Exercice 1
Dans la suite, on suppose que les ·int sont codés sur 4 octets. On a la déclaration suivante
int A []={2 ,6 ,5 ,1 ,3}; /* On suppose
du tableau
int * p ;
/* On suppose
p est 1050
que l ’ adresse de demarrage
est l ’ octet numero 1000 */
que l ’ adresse de la variable
*/
p=A;
Grâce à un schéma de représentation de mémoire, expliquer quel est le résultat des instructions suivantes
1) *p
2) *p+2 3) *(p+2)
4) &p
5) &p+1
6) p
7) A
8) & A[0]
9) &A[0]+3 10) A+3 11) p+(*(p+4)-3)
***
Exercice 2
Ecrire une fonction qui prend en argument un tableau de double et sa longueur, et retourne un double qui est la
valeur max des valeurs du tableau initial.
***
Exercice 3
Question 1.
Ecrire un type qui permette de décrire des tableaux de double de longueur quelconque.
Question 2.
Ecrire une fonction qui prend en argument deux de ces tableaux T1 et T2 et créé un tableau T dont elle retournera
l’adresse. Ce tableau T sera constitué des éléments de T1 suivis de ceux de T2.
Question 3.
Ecrire une fonction qui prend en argument en tableau et retourne un double qui représente la valeur moyenne de
ce tableau.
Question 4.
Ecrire une fonction qui prend en argument en tableau et retourne un double qui représente l’écart type de ce tableau.
***
Exercice 4
Ecrire une fonction qui prend en argument un entier N et qui construit une matrice de taille (N+1)×(N+1) dont la
partie triangulaire inférieure est remplie les coefficients du triangle de Pascal à l’ordre jusqu’à l’ordre N. Le reste de
la matrice sera rempli de zéros. La fonction affiche la matrice.
***
Exercice 5
On se donne la structure définie comme suit.
typedef struct student student ;
struct student {
char * name ;
char passwd [8];
int age ;
};
1/3
Institut Galilée, MACS2
septembre 2010
Langage C : exercices
On se propose de représenter le stockage en mémoire d’une variable de ce type grâce au schéma suivant (à lire de
haut en bas et de la gauche vers la droite) : la partie supérieure correspond au stockage de name, la partie du milieu
à celui de passwd et celle du bas à celui de age. On supposera que la taille de stockage d’un char* et d’un int sont
toutes deux de 4 octets.
Suivre pas à pas sur un diagramme représentant la mémoire, l’effet des opérations suivantes.
student group [4];
group [0]. name = group [2]. passwd +3 ;
group [5]. age = 21 ;
strcpy ( group [1]. passwd , " 1234567 " );
strcpy ( group - > name , " Marie Curie " );
strcpy (( char *) & group [0]. age , ( const char *) & group [2]. age );
On rappelle que la fonction char *strcpy(char *dest, const char *src) copie la chaı̂ne de caractère dont le
début est indiqué par src dans un espace mémoire commençant à l’adresse dest.
***
Exercice 6
Réécrire ces lignes de code en ajoutant toutes les parenthèses fonction de la priorité et l’associativité des opérateurs.
Que retourne ces lignes de codes ? On précisera si il y a ou non possibilité d’effets de bords et dans ce cas on détaillera
les différentes possibilités.
1
2
3
4
5
int x =0;
int a =0;
int y =0;
y = power (2 , a =2) + power (a ,3);
printf ( x = " % d a =% d y =% d \ n " );
***
Exercice 7
On supposera que les adresses de a, b sont respectivement 1000 et 2000. Compléter le tableau suivant avec les
valeurs des variables.
code
int a,b,c, *p1, *p2;
a = 1, b = 2, c = 3 ;
p1 = &a, p2 = &c ;
*p1 = (*p2)++ ;
p1 = p2 ;
p2 = &b ;
*p1 -= *p2 ;
++*p2 ;
*p1 *= *p2 ;
a = ++*p2 * *p1 ;
p1 = &a ;
*p2 = *p1 /= *p2 ;
a
?
b
?
2/3
c
?
p1
?
p2
?
*p1
?
*p2
?
Institut Galilée, MACS2
Langage C : exercices
***
3/3
septembre 2010