03.07.2013 Views

TD 3 : pointeurs, tableaux

TD 3 : pointeurs, tableaux

TD 3 : pointeurs, tableaux

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>TD</strong> 3 : <strong>pointeurs</strong>, <strong>tableaux</strong><br />

Programmation en C (LC4)<br />

Semaine du 6 février 2006<br />

Exercice 1 — Retour sur le TP2 Écrire une fonction « void affichage_binaire(unsigned<br />

int m) » qui affiche la valeur de m en binaire (on suppose que les unsigned int sont codés sur<br />

32 bits). On affichera les bits de poids faible à droite, par exemple : « 459601 en binaire :<br />

00000000000001110000001101010001 »<br />

◮ Correction<br />

void affichage_binaire(int m){<br />

int i=0;<br />

unsigned int t=1;<br />

printf("%i␣en␣binaire␣:",m);<br />

for(i=31;i>=0;i−−){<br />

printf("%i", (m>>i)&t);<br />

}<br />

printf("\n");<br />

}<br />

Exercice 2 — On s’amuse avec les <strong>pointeurs</strong>... Compléter le tableau en indiquant les valeurs<br />

des différentes variables au terme de chaque instruction du programme suivant (on peut<br />

aussi indiquer sur quoi pointent les <strong>pointeurs</strong>) :<br />

programme a b c p1 *p1 p2 *p2<br />

int a, b, c, *p1, *p2 ; ? ? ? ? ? ? ?<br />

a = 1, b = 2, c = 3 ;<br />

p1 = &a, p2 = &c ;<br />

*p1 = (*p2)++ ;<br />

p1 = p2 ;<br />

p2 = &b ;<br />

*p1 -= *p2 ;<br />

++*p2 ;<br />

*p1 *= *p2 ;<br />

a = ++*p2 * *p1 ;<br />

p1 = &a ;<br />

*p2 = *p1 /= *p2 ;<br />

◮ Correction<br />

int main() {<br />

int a, b, c, ∗p1, ∗p2;<br />

a = 1, b = 2, c = 3;<br />

p1 = &a, p2 = &c;<br />

printf("0:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

∗p1 = (∗p2)++;<br />

printf("1:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

1


p1 = p2;<br />

printf("2:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

p2 = &b;<br />

printf("3:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

∗p1 −= ∗p2;<br />

printf("4:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

++∗p2;<br />

printf("5:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

∗p1 ∗= ∗p2;<br />

printf("6:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

a = ++∗p2∗∗p1;<br />

printf("7:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

p1 = &a;<br />

printf("8:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

∗p2 = ∗p1 /= ∗p2;<br />

printf("9:␣a:%i,␣b:%i,␣c:%i,␣p1:%i,␣p2:%i␣\n",a,b,c,∗p1,∗p2);<br />

return 0;<br />

}<br />

> ./bla<br />

0: a:1, b:2, c:3, p1:1, p2:3<br />

1: a:3, b:2, c:4, p1:3, p2:4<br />

2: a:3, b:2, c:4, p1:4, p2:4<br />

3: a:3, b:2, c:4, p1:4, p2:2<br />

4: a:3, b:2, c:2, p1:2, p2:2<br />

5: a:3, b:3, c:2, p1:2, p2:3<br />

6: a:3, b:3, c:6, p1:6, p2:3<br />

7: a:24, b:4, c:6, p1:6, p2:4<br />

8: a:24, b:4, c:6, p1:24, p2:4<br />

9: a:6, b:6, c:6, p1:6, p2:6<br />

Exercice 3 — Échange de variables Écrivez une fonction « void echange(...) » qui permet<br />

d’échanger le contenu de deux variables de type int qui lui sont extérieures. Écrire l’appel<br />

de cette fonction dans un main.<br />

◮ Correction<br />

void echange(int ∗a, int ∗b){<br />

int tmp=∗a;<br />

∗a=∗b;<br />

∗b=tmp;<br />

}<br />

int main() {<br />

int ec1=4, ec2=2;<br />

printf("%i,␣%i␣\n",ec1, ec2);<br />

echange(&ec1, &ec2);<br />

printf("%i,␣%i␣\n",ec1, ec2);<br />

}<br />

Exercice 4 — Concaténation 1 Écrivez une fonction « int* concat_tab(int n1,int t1[],int<br />

n2, int t2[]) » qui prend en arguments deux <strong>tableaux</strong> et leurs tailles respectives, et qui<br />

renvoie leur concaténation. Il faudra allouer un nouveau tableau pour contenir cette concaténation.<br />

2


◮ Correction<br />

int∗ concat_tab(int n, int t[], int m, int r[]){<br />

int i=0;<br />

int j=0;<br />

int ∗ res = malloc((n+m)∗sizeof(int));<br />

for(;i


◮ Correction<br />

struct lvr ∗ init(int n){<br />

int i=0;<br />

struct lvr ∗ res= (struct lvr ∗)malloc(n ∗ sizeof(struct lvr));<br />

for(;i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!