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 Ir 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: ae aw ee Hindlude main()t init3Q; intz=-4; ink 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; printf\n *y=9%d",*y); x=init4(y)-3; i 22; printf("\n x=%d",x); 3 x=initlO+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)( init2y); ; * printf("\n 2=%d"2); 4 return *z; } 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 0 { ¥a,"; © saisir2( printf(‘les valeurs saisies sont :"); afficher2(. afficher2(.,.); system("pause"); Contréle 2016-2017 Questions de cours : a. Quelle est différence entre I es structures itératives suivante while et do.. while ? b. Quel est le réle de 'instructi ion goto ? donner un exemple simple d’u Exercice 1; Quelle fonction mathématique est implémentée Par la fonction suivante : int (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 11 f 1 414 toa 4 104 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 } xeInttL(y) +5; Vold init2(int y){ pert n 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(2); 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 include Int y=7; intinitA (int 2){ return z; } void inlt2(int *y){ tyt 3 void init3(){ y=3; J Intinit¢(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); xeinitly)+5; printf(*\n x=%d"x); printf("\n y=%d"y); free(p): pr8x; 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); printf("\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+11420422444+55+110 yointeurs comme Dans la fonction main, appeler la fonction Amis en utilisant deux p' arguments, Contrdé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 Ptr 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; tH=2; yatttx; } printf("\n x=%d",x);, int int3(int 2) printf(’\n y=%d"y); yeezeds x=Init3(y); printf("\n y(global)=%d",y); yainiti 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. Un nombre 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) { UN, n= 1)/2 si U(N,n—1) est pair 3*U(Njn=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 Contréle 2015-2016 Questions de cours : 4, Les identificateurs non acceptés sont: continue : car c'est un mot clé du langage C Prixen.$:: 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; 3. | | 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 une é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 | Hinclude #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(e ©) { 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(’ n); //Affichage du Jer triangle for(i=1; i<=n si+-4)( i ii) printi("\e’); for(j=1 3 }<=i3j+4) printi('1\e"); printf("\n"); } //Affichage du 2eme triangle for(i=1 ji<=n;i++){ //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 to eh rT SS = — — —— —— - return pow(an); else if (n%4==0) return 2°U(n-1,a)+UGH2,a}; else Q return U(t-1a)-+2°U(n-2.a); 31 Solution du'ContrOle 2017-2018 Bxercice 1: Sachant qu'un entier est coué 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 9 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 cod 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=> Ptr-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 cae oA adresse. Il est done 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 #include int Nb_Gentil (int M){ inti; : for(i=1ji<= 1014-4) if (M%i != 0) return 0; return 1; } main0{ 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 (m==0) return N; else if (U(N.n-1)%: return U(N,n-1)/2; else return 3*U(N.n-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