• Aucun résultat trouvé

Université de Xidian Université de Xidian

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Xidian Université de Xidian"

Copied!
2
0
0

Texte intégral

(1)

Université de Xidian Université de Xidian

Polytech’Sophia 2016–2017

Examen de Langage C

(V. Granet)

Durée : 2h

Aucun document autorisé Mobiles interdits

Notez que les affirmations (antécédents, conséquents, rôles, et invariants) dans vos codes C entreront pour partie dans la note finale.

I1. Deux entiers naturels sont des nombres amiables si chacun est égal à la somme des diviseurs de l’autre. Par exemple, 220 et 284 sont des nombres amiables. Écrivez une fonction qui teste si deux nombres sont amiables ou pas. La fonction renvoie un booléen (0 ou6= 0).

Question sur 5 pts: /*

* Antécédent : x >=0

* Rôle : renvoie la somme des diviseurs de x

*

*/

i n t sommeDiv (i n t x) { i n t som =1 , divMax =x /2;

/* sommer tous les diviseurs de x sur [2; divMax [ */

f o r (i n t i =2; i <= divMax ; i ++)

// invariant : som = somme des k premiers diviseurs de x sur [2;i[

i f (( x%i )==0) som += i;

r e t u r n som ; }

/*

* Antécédent : a >=0 et b >=0

* Rôle : renvoie 1 si a et b sont deux nombres amiables et 0 sinon

*/

i n t etesVousAmiables (i n t a , i n t b) { assert (a >=0 && b >=0);

r e t u r n sommeDiv (a )== b && a == sommeDiv (b );

}

1

. . . . I 2. Écrivez la fonctionquelleLignequi renvoie l’indice de la première ligne d’une matriceM×N dont la somme des éléments est comprise dans un intervalle[a;b]. La matrice et les bornes de l’intervalle sont passées en paramètre. Si une telle ligne n’existe pas, la fonction renvoie−1.

Question sur 5 pts: /*

* Antécédent : a6b

* Rôle : renvoie l ’ indice la première ligne de la matrice

* mat dont la somme est dans l ’ intervalle [a;b]

*/

i n t quelleLigne (double mat [M ][ N], double a , double b) { assert (a <= b );

f o r (i n t i =0; i <M; i ++) {

/* calculer la somme des valeurs de la ligne i */

double somme =0.0;

f o r (i n t j =0; j <N; j ++) somme += mat [i ][ j ];

/* somme dans [a;b] ? */

i f ( somme >= a && somme <= b) r e t u r n i;

}

/* aucune ligne dont la somme les valeurs dans [a;b] */

r e t u r n -1;

}

2

(2)

. . . . I3. Un polynômep(x)est représenté par un tableau tel que l’élément d’indiceiest égal au coefficient

dexi. En utilisant les déclarations suivantes :

#d e f i n e DEGREMAX 40

t y p e d e f double polynome [ DEGREMAX ];

Écrivez la fonction eval qui prend en paramètre un polynômepet un réelxqui renvoie l’éva- luation dep(x)selon la méthode de Hörner :

p(x) = (((. . .(p[n]×x+p[n-1])×x+· · ·+p[1])×x+p[0]

Question sur 5 pts: /*

* Rôle : renvoie l ’ évaluation de p(x)

* Note : Algorithme d ’ Horner

*/

double evaluer ( polynome p , double x) { i n t n = DEGREMAX -1;

double valeur = p[n ];

/* valeur = Pn

k=np[k]xk1=p[n] */

f o r (i n t d=n -1; d >= 0; d - -) { /* valeur = Pd

k=np[k]xk−1 */

valeur = valeur *x + p[d ];

}

/* valeur = P0

k=np[k]xk */

r e t u r n valeur ; }

3

. . . . I 4. Écrivez le programmeheadqui affiche les 10 premières lignes de l’entrée standard. Attention, le nombre de lignes existant sur le fichier d’entrée est quelconque, et peut contenir moins de 10 lignes. Par exemple, pour afficher les 10 premières du fichierfich.txt, on exécutera le programme headcomme suit :head < fich.txt.

Question sur 5 pts:

#i n c l u d e < stdio .h >

#i n c l u d e < stdlib .h >

i n t main (v oi d) {

i n t c , nbLignes = 10; // par défaut /* afficher les nbLignes premières lignes */

/* on s ’ arrête si EOF atteinte avant */

w h i l e ( nbLignes >0) s w i t c h (c= getchar ()) {

c a s e EOF : r e t u r n EXIT_SUCCESS ; c a s e ’\n ’ : nbLignes - -;

d e f a u l t : putchar (c );

r e t u r n} EXIT_SUCCESS ; }

. . . .

4

Références

Documents relatifs

En utilisant la fonction compter précédente, écrivez en C le programme myprog qui affiche sur la sortie standard le nombre de lettres et de chiffres d’une chaîne de caractères

En utilisant la fonction compter précédente, écrivez en C le programme myprog qui affiche sur la sortie standard le nombre de lettres et de chiffres d’une chaîne de caractères

Écrivez la fonction lireJour qui lit sur l’entrée standard un entier (∈ [0; 6]) et qui renvoie la valeur correspondante dans le type lesJours. Écrivez la fonction main dans

Écrivez la fonction lireReel qui lit sur l’entrée standard caractère à caractère (uniquement à l’aide de la fonction scanf(&#34;%c&#34;,...) , à l’exclusion de toute

Écrivez la fonction lireReel qui lit sur l’entrée standard caractère à caractère (uniquement à l’aide de la fonction scanf(&#34;%c&#34;,...) , à l’exclusion de toute

Écrivez un programme C qui lit un grade sur l’entrée standard, et qui écrit sur la sortie standard l’avis correspondant.. Vous utiliserez

Écrivez un programme C qui lit un grade sur l’entrée standard, et qui écrit sur la sortie standard l’avis correspondant. Vous utiliserez

Sachant que l’entier le plus grand sur le type long est donné par la constante LONG_MAX , écrivez un programme qui détermine le plus grand entier n dont on peut calculer n!. sur le