• Aucun résultat trouvé

else printf("%4d",a

N/A
N/A
Protected

Academic year: 2022

Partager "else printf("%4d",a"

Copied!
2
0
0

Texte intégral

(1)

Universit´e de Paris X Nanterre vendredi 3 f´evrier 2006 Licence MMIA deuxi`eme ann´ee

enseignant : L. PIERRE

contrˆole d’informatique Qu’´ecrit le programme suivant quand on l’ex´ecute ?

#include<stdio.h>

void pr(int a,int b)

{ if(b>0) pr(a+4,b-1),pr(a+3,b-2),pr(a+2,b-1);

else printf("%4d",a);

}

void pr2(int a,int b) { printf("%4d",a);

while(b) a+=b,pr2(a,--b);

}

#define a

#define b int main()

{ int i,j,k,l,*p=&i,*q=&j,*r;

printf("%4d %4d %4d %4d\n",a&b,a|b,a^b,(a,b));

printf("%4d %4d %4d %4d\n",-a,~a,!a,!!a);

printf("%4d %4d %4d %4d\n",i=a,j=b,k=a+b,l=a-b);

printf("%4d %4d %4d %4d\n",++i*j--,k+=l--,a<<3,a>>1);

printf("%4d %4d %4d %4d\n",++i*j--,k+=l--,a<<3,a>>1);

r=p,p=q,q=r;

i=a,j=b;

printf("%4d %4d %4d %4d\n",i,j,*p,*q);

j+=i+=*q, j+=i+=*q;

printf("%4d %4d %4d %4d\n",i,j,*p,*q);

pr (a,3); printf("\n");

pr2(a,3); printf("\n");

return 0;

}

Compl´eter les trois proc´edures int sommepairs(liste a);

void echminmax(liste a);

liste otemin(liste a);

sommepairs(a) rend la somme des ´el´ements pairs de la liste a.

echminmax(a) ´echange la plus petite valeur et la plus grande valeur dans la liste a.

otemin(a) est la liste obtenue en enlevant le chaˆınon contenant la plus petite valeur de la liste a.

(2)

barˆeme sur 21.25 points

Les 7 printf du programme principal affichent chacun 4 nombres. Cela fait en tout 28 nombres qui comptent chacun 0.25 point. 28/4=7 points

pr(a,3) affiche 17 nombres qui comptent chacun 0.25 point. 17/4=4.25 points pr2(a,3) affiche 8 nombres qui comptent chacun 0.25 point. 8/4=2 points sommepairs() 2 points echminmax() 3 points otemin() 3 points

int sommepairs(liste a) // 2 pt void echminmax(liste a) // 3 points { int s=0; // 0.33

{ int x; for(;a; // 0.33

liste p=a, g=a; // 0.33 a=a->suite) // 0.33

for(;a; // 0.33 if(a->val%2==0) // 0.33

a=a->suite) // 0.33 s+=a->val; // 0.33

if(a->val<p->val) p=a; else // 0.33 return s; // 0.33 if(a->val>g->val) g=a; // 0.33 }

if(p!=g) // 0.33 ou if(!a) return; au d´ebut

x=p->val, // 0.33

p->val=g->val, // 0.33

g->val=x; // 0.33

}

int valmin(liste a) // 0 point car c’est une partie de echminmax() { int m=a->val;

for(;a;a=a->suite) if(a->val<m) m=a->val;

return m;

}

liste oteval(liste a,int x) // 6*0.33=2 points

{ if(a->val==x) // 0.33

{ liste b=a->suite; // 0.33 ou b=a, a=a->suite

free(a); // 0.33

return b; // 0.33

}

a->suite=oteval(a->suite,x); // 0.33

return a; // 0.33

}

liste otemin(liste a) // 3*0.33=1 point

{ return a ? // 0.33 if(a)

oteval(a,valmin(a)) // 0.33 a=oteval(a,valmin(a));

: 0; // 0.33 return a;

}

liste otemin2(liste a) // version it´erative { liste *m=&a, *p, b;

for(p=&a;*p;p=&(*p)->suite) if((*p)->val<(*m)->val) m=p;

if(a) b=*m, *m=b->suite, free(b);

return a;

}

Références

Documents relatifs

On rencontre au hasard un adhérent

[r]

Erire un programme C permettant de saisir au lavier un nombre entier stritement

[r]

[r]

x1 , x2 : sont les solutions recherchées pour cette équation de type réel delta : variable de type réel intermédiaire pour le calcul de delta.. 4/5 Remarque : Dans cet algorithme,

Soient premier et dernier les extrémités gauche et droite de l'intervalle dans lequel on cherche la valeur x, on calcule m, l'indice de l'élément médian :. m(premier + dernier) div

* Pour son anniversaire Nicolas a distribué 6 cartes d'invitation dans sa classe, 7 cartes dans la classe voisine et 3 cartes dans une autre carte.. Combien de cartes