You are on page 1of 19
Contréle 2015-2016 Questions de cours ; 1. Lesquels des 8 identificateurs suivants ne sont pas acceptés. Justifier vos réponses. | continue break.1 Prix_en_$ 1e11-09-2014 Retourne IF Else prix unitaire Quelle est la différence entre une variable globale et une variable locale ? . Sachant qu'un entier est codé sur 4 Octets et que la valeur (en hexadécimal) du pointeur sur entier P est 154C quelles sont les valeurs de P + 6 et P-3? Exercice 1: Donner le résultat d’exécution du programme suivant: eae e e Hindude main()t init3Q; intz=-4; ik way: printf("\n x=%d",x); intinit1(){ printf("\n 2=%d",2); y=(int *)malloc(sizeof(int)); z=1; init2(2); ] returnz; } *y=init4 (Sex) +2; printf("\n x=%d"x); 7 void init2(int z){ printf("\n x=%d",x); printf("\n 2=%d"2); . int x; printfC\n *y=9%d",*y); x=init4(y)-3; i 22; printf(*\n x=%d",x); 3 xeinitlO+5; 7 x=5; } printt("\n x=%d"x); printf("\n * y=%d",*y); 2 void init3( ){ 3 7 printf("\n 2=%d"z); 5 2=3;) 2 int init4(int *2)( init2Cy); ; * printf("\n 2=%d"z); 4 return *2; } printf("\n *y=%d",'y); Exercice 2: E ‘une fonction Nbr_Chiff_1_N(int N) qui retourne le nombre du chiffre 1 dans la représentation binaire d'un entier N positif, Exercice 3: Vobjectif de cet exercice est d’écrire un programme qui contient : 1. void saisir2(.,.) : qui doit saisir les valeurs de deux entiers 2 void afficher2(.,.) : qui doit afficher les valeurs de deux entiers 3. void Min Max(.,..) : qui doit permuter ces arguments de fagon a ce que la plus petite valeurs soit stockée dans le premier argument et la plus grande valeur soit stockée dans le deuxiéme argument. 4. Compléter la fonction principale : main Q { ¥a,"; © saisir2( printf(‘les valeurs saisies sont :"); afficher2(. afficher2(.,.); system("pause"); Contréle 2016-2017 Questions de cours a Quelle est différence entre | es structures itératives suivante while et do.. while ? b. Quel est le rdle de l'instructi ion goto ? donner un exemple simple d’u Exercice 1; Quelle fonction mathématique est implémentée Par la fonction suivante : int f(int a) { return a* ((a>=0) - (a<0)) ; } Exercice 2: Ecrire un programme qui permet de saisir trois variables réelles A, B et C. trier ces trois variables de facon a ce que A <= B <= C. Vous n’avez le droit d'utiliser qu'une seule variable supplémentaire autre que A, B et C. Exercice 3 : : Ecrire un programme qui permet, & partir d'un entier n>0 saisi au clavier, d'afficher la forme suivante :* Pourn=3: j ; 1 14 f 1 41 4 1414 14 1 Exercice 4: Vonner le résultat d'exécution du programme suivan Winelude ; ming) int 2=0, y=10; ( foe tea int 2 Int. x=5, ¥=5i x=init4(y)- print(C*\n return 2; printf("\n } xeInitL(y)+5; Void init2¢int y)f peat in ee i yeas printi(\n 2=%d"2); 252; inlt2Q); } printt¢*\n void init3(){ printiC\n ‘nit30; printf("\n y=%d"y); } printf("\n 2=%d"2); int intta int 2){ init2(@); printf(*\n x=%d"x); printf(*\n 2=%d",2); printf("\n y(G)=%d"y); y=init4(2)- return z; Exercice 5: Ecrire la fonction suivante : printf("\n x printf("\n y=%d"y); 1. La fonction U(.,.) définie par: U(0)=a U(n)= a" sin impair U(n)=2*U(n-1)+U(n-2) si nestun multipe de 4 U(n) =U(n-1)+2*U(n—2) _ sinon Exercice 1 Contréle 2017-2018 1, Sachant qu'un entier est codé sur 4 Octets et que la valeur (en hexadécimal) du pointeur sur entier Ptr est 0A124 quelles sont les valeurs de P+2 et P17 2. Dans les fonctions, quelle est la différence entre le passage d’arguments par valeur et le passage d’arguments par adresse ? 3. Soit Ptr un pointeur sur type caractére. Donner les instructions nécessaires pour initialiser le contenu de ce pointeur ala valeur ‘A’, Exercice 2: Donner le résultat d'exécution du programme suivant Programme Winclude Int y=7; intinitA (int 2){ return z; } void inlt2(int *y){ yt J void init3.(){ y=3; J Int init¢(int *2){ printf("\n y=%d",y); return *z; main() { int x, y=8,*p; P=Cint*) malloc(sizeof(int) }; x=inita(p)-3; printf("\n x=%d"x); printf("\n y=%d"y); xeinitl(y)+5; printf(*\n x=%d"x); printf("\n y=%d"y); free(p): prea; init2(&y) printf("\n x=%d"y); printf("\n y=%d"y); init30; printf("\n x=9%d"x); printf("\n y=%d",y); init2(8ex); printf("\n x=%d"x); printf("\n y=%d"y); y=init1(*p)-3; printf("\n x=%d"x); PrintfC"\n y=%d"y); 2 Exercice Ecrire un programme en langage C qui permet de définir 1. “une fonction Amis(int M, int N) qui permet de retourner 1 si M et N sont amis et 0 sinon. Deux nombres M et N sont appelés nombres amis si la somme des diviseurs stricts: de Mest gale aN et la somme des diviseurs stricts de N est égale a M Exemple: 220 et 284 sont des nombres amis car: 220=somme des diviseurs stricts de 284 -_-284=somme des diviseurs stricts de 220 +2444 714-142 S1424445410+11420422444455+110 jointeurs comme Dans la fonction main, appeler la fonction Amis en utilisant deux pi arguments, Contréle 2018-2019 Exercice 1; 1, Sachant qu'un entier est codé sur 4 Octets et que la valeur (en hexadécimal) du pointeur 2, Wurentier Pte est 1B56C, quelles sont les valeurs de P-+2 et P=17 - Dans les fonctions, quelle est la différence entre le passage d'arguments par valeur et le Passage d'arguments par adresse ? 3. Soit Ptr un pointeur sur type float. Donner les instructions nécessaires pour que le contenu de l'espace pointé par ce pointeur‘ait la valeur 12.8 Exercice 2: Donner le résultat d’exécution du programme suivant: Programme #include main() ( int x,y=55 x=init3(y) ; printf("\n tey"2; printfC\n y=%d"y); printf("\n t=%d"0; yeinltL@ +5; return t; printf("\n } printf("\n void init20{ init20; t=2; yattix; } printf("\n x=%d",x);, int init3(int 2) printf(’\n y=%d"y); yeeztds x=init3(y); printf(\n y(global)=%d",y); yainitl a+ return z; rintf(’\n ) printf("\n } Exercice 3: Ecrire un programme en langage C qui permet de définir 1. Une fonction Nb_gentil(int M) qui permet de retourner 1 siM est gentil et 0 sinon. Unnombre est dit gentil s'il est multiple des 10 premiers entiers positifs non nuls. Exemple : 2520 est gentil car il est multiple des nombres 1,2,3,4,5,6,7,8,9 et10. 2. Dans la fonction main, calculer et afficher le plus petit entier gentil. 7 Exercice 4: Ecrire en langage C, la fonction U(int N, int n) définie par : N si n=0 UCN, n) { UCN, n = 1)/2 si U(N,n—1) est pair 3*U(Wn=1) 44 si U(N,n—1) est imprai Dans la fonction main, calculer et afficher le plus petit entier n pour lequel U(N.n Nest un entier strictement positif saisir au clavier. 18 Solution du Contrdle 2015-2016 Questions de cours : 4. Les identificateurs non acceptés sont: continue : car c'est un mot clé du langage C Prix_en.$:: car il contient le caractére spécia! $ Je11-09-2014 : car il contient deux caractéres spéciaux ~ prix unitaire : car il contient le caractre espace 5S. Quelle est la différence entre une variable globale et une variable locale : Une variable locale est déclarée a ntérieur d’une fonction et elle est détruite a sa sortie. Tandis qu'une variable globale est déciarée au début du programme en dehors de toute fonction et elle vit dans toutes les fonctions du programme. 6. Sachant qu'un entier est codé sur 4 Octets et que la valeur (en hexadécimal) du pointeur sur entier P est 154C quelles sont les valeurs de P + 6 et P-37 La valeur de P+6 est 154C + 6%4 = 1564. "4 = 1540 La valeur de P-3 est 154C - Exercice 1: Le résultat d’exécution du programme : 22 Exercice 2: Berire une fonction Nbr_Chiff_1_N(int N) qui retourne le nombre du chiffre 1 dans la Feprésentation binaire d’un entier N positif. int Nbr_Chif€1_N (int N) ( int compt=0; do{ N=N/10; compt++; } while(N !=0) ; return compt; } Exercice 3: 1. void saisir2(int *a,int *b) { printf ("saisir deux entiers"); scanf("%d%d" a,b); j} 2, void afficher2(int a,int b) { printf ("\n a= %d et b= %d",ab); 3 ve oid Min Max(int *a, int *b) { int tmp; if (ta>*){ tmp=*a; ER | | 4, mainQ{ int *a, *b; a=(int* ) malloc(sizeof (int)); b=(int * ) malloc(sizeof (int)); saisir2(a,b); printf("\nles valeurs saisies sont : afficher2(“a,*b); Min_Max(a,b) ; printf("le Min est %d et le Max est %d :",*a,*b); free(a) ; free(b) ; 3 23 Solution du Contréle 2016-2017 Questions de cours: a. Quelle est différence entre les structures itératives suivante while et do.. while? | Le traitement intégré a la boucle While peut ne pas s‘executer sia condition n’est pas vraie. Le traitement intégré ala boucle do.. while s'exécute au moins une seule fois. ,_ Quel est le réle de I'instruction goto ? donner un exemple simple d'utilisation Le rile de gato est de brancher l'exécution & une instruction spécifique du programme marquée par tune étiquette, Exemple: for( i=N1;i <=N2; i++) t if (i%3 == 0) goto fin; } fin: printf(le plus petit entier multiple de 3 compris entre %d et %d est %d",N1,N2,i); Exercice 1: Quelle fonction mathématique est implémentée par la fonction suivant int f(int a) t La fonction f permet de calculer et de retourner la valeur absolue de I'entier passé dans son argument. return a* ((a>=0) - (a<0)) ; Exercice 2: Ecrire un programme qui permet de saisir trois variables réeiles A, B et C. trier ces trois variables de fagon a ce que A <= B <= C. Vous n'avez le droit d'utiliser qu'une seule variable supplémentaire autre que A, B et C. 28 | Winclude #include main(} C float A, B, C, aide; printf("Saisir trois valeurs réelles : Scanf(("%F %f WE", KA, &B, &C); if( A>B || A>c) { i(B ©) { aide : B=G C=aide; } Printf("A = %f \t B = %f\t C = %f \n", A, B, C); 3 Exercice 3: #include : main(){ int nj; printf("saisir un entier"); 29 scanf(’ in); //Affichage du Jer triangle for(i=1; i<=n si+-4)( i iit) printi("\e"); for(j=1 5 }<=i 3 j++) printi('1\e"); printf("\n"); } //Affichage du 2eme triangle for(i=1 j i<=ni+-+){ //Affichage de n-1 tabulations sur chaque ligne for(j=1; j<=n-1 ; j++) printh("\t"); for (j=; j<=n-it1 j j++) printf("1\t"); printf(*\n"); } } Exercice 4: Le résultat d’exécution du programme Exercice 5: int U(int n,int a){ if (n==0) return a else if (n%2!=0) 30 C(t ah eS a return pow(aa); else if (n%4==0) return 2°U(n-1,a)+UGH2,a); else g return U(i-1a)-+2°U(n-2.a); 31 Solution du'ContrOle 2017-2018 Bxercice 1: Sachant qu'un entier est coudé sur 4 Octets et que la valeur (en hexadécimal) du pointeur Sur entier Ptr est 0A124 quelles sont les valeurs de P-+2 et P~1.? P42 =>P + 2*4=0A12C P-L => P-1*4= 04120 2 Dans les fonctions, quelle est la différence’entre le passage d'arguments par valeur et le Passage d'arguments par adresse ? Dans le passage d'arguments par valeur, toute modification des parametres dans la fonction est sans effet sur les paramétres originaux Dans le passage d’argument par adresse, on ne passe pas la valeur de la variable mals son adresse, Il est donc possible par les pointeurs de modifier le contenu de I'adresse, donc la variable originale ns nécessaires pour 3. Soit Ptr un pointeur sur type taractére. Donner les instruct initialiser le contenu de ce pointeur a la valeur ‘A’. char *Ptr; Ptr=(char*) malloc (sizeof(char)) ; Pra! Exercice 2: Le résultat d’exécution du programme : 37 Exercice 3: #include #include int Amis(int M,int N){ //Calcul de la somme des diviseurs de N return 0; } mainO{ int *N,*M; int*) malloc(sizeof(int)); M=(int*)malloc(sizeof(int)); printf('saisir deux entiers"); scanf("%d%d",N,M); if (Amis(*N,*M)==1) ' printf("\n %d et %d sont des nombres AMIS",*N,*M); else rintf("\n 96d et 94 ne sont pas des nombres AMIS",*N,*M); free(N);free(M); } 38 Solution du Contréle 2018-2019 Exercice 1; 1, Sachant qu’un entier est code sur 4 Octets et que la valeur (en hexadécimal) du pointeur Sur entier Ptr est 1B56C, quelles sont les valeurs de Ptr+2 et Ptr-1? Ptrt2 => Ptr+2%4 = 1B574 Pt-i=> Pur-1"4 = 1B568 2, Dans les fonctions, quelle est la différence entre Je passage d’arguments par valeur et le passage d’arguments par adresse ? Dans |e passage d’arguments par valeur, toute modification des paramétres dans la fonction est sans effet sur les paramatres originaux . Dans le passage d’argument par adresse, on ne passe pas la valeur de la variable aa oA adresse. Il est donc possible par les pointeurs de modifier le contenu de I'adresse, donc la variable originale 3. Soit Ptr un pointeur sur type float. Donner les instructions nécessaires pour que le contenu de l'espace pointé par ce pointeur ait la valeur 12.8 float *Ptr ; Ptr=(float *) malloc (sizeof{float)) ; *Ptr=12.8; Exercice 2: Le résultat d’exécution du programme : 45 Exercice 3: #include Hinclude int Nb_Gentil (int M){ inti; : for(i=1ji<= 1014-4) if (MMi != 0) return 0; return 1; } main({ int N=1; dof Nets } while(Nb_Gentil(N)==0); printf(*\n %d est le plus petit nombre gentil", } Exercice 4: #include #include int UGint N int n)( if (@==0) return N; else if (U(N.n-1)%: return U(N,n-1)/2; else return 3*°U(N.n-4)4+15 46 maing{ int n=0,N; dof printf("saisiv: scanf€"%d",&N). }while(N<=0); dof nth te] 3 while(U(N,n)!= i printf("\n le plus entier pour lequel U(Nin)=1 est %d",n); 47

You might also like