Anda di halaman 1dari 36

Les outils de base de la programmation en langage C

Exercice 1 :
Ecrire un programme en langage C qui permute et affiche les valeurs de trois variables A, B, C de type entier qui sont entres au clavier : A ==> B , B ==> C , C ==> A

Solution :
include !stdio"h> main#$ % int A, B, C, A&'E( printf#)&ntroduise* trois nombres #A, B, C$ : )$( scanf("%d %d %d", &A, & , &C!" +, Affichage - l.aide de tabulations ,+ printf("A # %d$t # %d$tC # %d$n", A, , C!" A&'E=A( A=C( C=B( B=A&'E( printf("A # %d$t # %d$tC # %d$n", A, , C!" return /( 0

Exercice % :
Ecrire un programme en langage C qui affiche le quotient et le reste de la division enti1re de deu2 nombres entiers entrs au clavier ainsi que le quotient rationnel de ces nombres"

Solution :
include !stdio"h> main#$ % int A, B( printf#)&ntroduise* deu2 nombres entiers : )$( scanf("%d %d", &A, & !" printf#)'ivision entiere : %d3n), A& $( printf#)4este : %d3n), A% $( printf#)5uotient rationnel : %f3n), (float!A& $( return /( 0

Exercice ' :
Ecrire un programme en langage C qui affiche la rsistance quivalente - trois rsistances 46, 47, 48 #type double$, 9 si les rsistances sont branches en srie: 4sr = 46:47:48 9 si les rsistances sont branches en parall1le: 4par = #46,47,48$+#46,47:46,48:47,48$

Solution :
include !stdio"h> main#$ % double 46, 47, 48, 44E;( printf#)&ntroduise* les valeurs pour 46, 47 et 48 : )$( scanf#)%lf %lf %lf), &(1, &(%, &('$( 44E;=46:47:48( printf#)4esistance resultante serielle : %f3n), 44E;$( 44E;=#46,47,48$+#46,47:46,48:47,48$( printf#)4esistance resultante parallele : %f3n), 44E;$( return /( 0

Exercice ) :
Ecrire un programme en langage C qui calcule et affiche l.aire d.un triangle dont il faut entrer les longueurs des trois c<ts" =tilise* la formule : ;7 = >#>9A$#>9B$#>9C$ o? A, B, C sont les longueurs des trois c<ts #type int$ et > le demi9prim1tre du triangle"

Solution :
include !stdio"h> *include +mat,-,. main#$ % +, >our ne pas perdre de prcision lors de la division, ,+ +, dclarons > comme rationnel" ,+ int A, B, C( float /" printf#)&ntroduise* les valeurs pour A, B et C : )$( scanf#)%d %d %d), &A, & , &C$( +, En for@ant la conversion de A, les autres oprandes ,+ +, sont converties automatiquement" ,+ /#((float!A0 0C!&%" printf("Surface du triangle S # %f$n",s1rt(/2(/3A!2(/3 !2(/3C!!!" return /( 0

Exercice 4 :
Ecrire un programme en langage C qui calcule la somme de quatre nombres du type int entrs au clavier"

Solution :
main#$ % int A( long S56" S56 # 7" printf#)Entre* le premier nombre : )$( scanf#)Ad), BA$( S560#A" printf#)Entre* le deu2i1me nombre : )$( scanf#)Ad), BA$( S560#A" printf#)Entre* le troisi1me nombre : )$( scanf#)Ad), BA$( S560#A" printf#)Entre* le quatri1me nombre : )$( scanf#)Ad), BA$( S560#A" printf#)Ca somme des nombres entrs est %ld3n), S56$( return /( 0

Exercice 8 :
Ecrire un programme en langage C qui calcule et affiche la distance '&;D #type double$ entre deu2 points A et B du plan dont les coordonnes #EA, FA$ et #EB, FB$ sont entres au clavier comme entiers"

Solution :
include !stdio"h> *include +mat,-,. main#$ % int EA, FA, EB, FB( double '&;D( +, Attention: Ca chaGne de format que nous utilisons ,+ +, s.attend - ce que les donnes soient spares par ,+ +, une virgule lors de l.entre" ,+ printf#)Entre* les coordonnes du point A : EA,FA )$( scanf#)%d,%d), BEA, BFA$( printf#)Entre* les coordonnes du point B : EB,FB )$(

scanf#)%d,%d), BEB, BFB$( 9:S;#s1rt(po<(=A3= ,%!0po<(>A3> ,%!!" printf("La distance entre A(%d,% d! et (%d, %d! est %-%f$n", =A, >A, = , > , 9:S;!" return /( 0

Exercice ?:
Ecrire un programme en langage C qui lit un caract1re au clavier et affiche le caract1re ainsi que son code numrique"

Solution :
include !stdio"h> main#$ % int C( printf#)&ntroduire un caract1re suivi de .Enter.3n)$( C # getc,ar(!" printf#)Ce caract1re %c a le code A;C&& %d3n), C, C$( return /( 0

Ces structures alternatives en langage c


Exercice 1:
Ecrive* un programme en langage C qui lit trois valeurs enti1res #A, B et C$ au clavier et qui affiche la plus grande des trois valeurs, en utilisant: a! if 3 else et une variable d.aide HAE b! if 3 else if 3 --- 3 else sans variable d.aide c! les oprateurs conditionnels et une variable d.aide HAE d! les oprateurs conditionnels sans variable d.aide

Solution :
a! if 3 else et une variable d.aide HAE include !stdio"h> main#$ % int A, , C" int 6A=" printf(":ntroduise@ trois nombres entiers :"!" scanf("%i %i %i", &A, & , &C!" if (A. ! 6A=#A" else 6A=# "

if (C.6A=! 6A=#C" printf("La Aaleur maximale est %i$n", 6A=!" return /( 0 b! if 3 else if 3 --- 3 else sans variable d.aide int A, B, C( printf#)&ntroduise* trois nombres entiers :)$( scanf#)Ai Ai Ai), BA, BB, BC$( printf#)Ca valeur ma2imale est )$( if #A>B BB A>C$ printf#)Ai3n),A$( else if #B>C$ printf#)Ai3n),B$( else printf#)Ai3n),C$( c! oprateurs conditionnels et une variable d.aide HAE int A, B, C( int HAE( printf#)&ntroduise* trois nombres entiers :)$( scanf#)Ai Ai Ai), BA, BB, BC$( HAE = #A>B$ I A : B( HAE = #HAE>C$ I HAE : C( printf#)Ca valeur ma2imale est Ai3n), HAE$( d! oprateurs conditionnels sans variable d.aide int A, B, C( printf#)&ntroduise* trois nombres entiers :)$( scanf#)Ai Ai Ai), BA, BB, BC$( printf#)Ca valeur ma2imale est Ai3n),#A>##B>C$IB:C$$ I A : ##B>C$IB:C$$(

Exercice %:
Jcrive* un programme en langage C qui lit trois valeurs enti1res #A, B et C$ au clavier" Drie* les valeurs A, B et C par changes successifs de mani1re - obtenir : val#A$ val#B$ val#C$ Affiche* les trois valeurs"

Solution :
include !stdio"h> main#$ % +, Dri par ordre dcroissant de trois entiers en changeant les valeurs ,+ int A, B, C, A&'E( printf#)&ntroduise* trois nombres entiers :)$( scanf#)Ai Ai Ai), BA, BB, BC$( printf#)Avant le tri : 3tA = Ai3tB = Ai3tC = Ai3n), A, B, C$(

&2 Baleur maximale 3. A 2& if (A+ ! C A:9E # A" A# " # A:9E" D if (A+C! C A:9E # A" A # C" C # A:9E" D &2 trier et C 2& if ( +C! C A:9E # " # C" C # A:9E" D printf("AprEs le tri : $tA # %i$t # %i$tC # %i$n", A, , C!" return /( 0

Exercice ':
Ecrive* un programme en langage C qui lit deu2 valeurs enti1res #A et B$ au clavier et qui affiche le signe du produit de A et B sans faire la multiplication"

Solution :
include !stdio"h> main#$ % +, Afficher le signe du produit de deu2 entiers sans faire la multiplication ,+ int A, B( printf#)&ntroduise* deu2 nombres entiers :)$( scanf#)Ai Ai), BA, BB$( if ((A.7 && .7! FF (A+7 && +7!! printf("Le signe du produit %i 2 %i est positif$n", A, !" else if ((A+7 && .7! FF (A.7 && +7!! printf("Le signe du produit %i 2 %i est nGgatif$n", A, !" else printf("Le produit %i 2 %i est @Gro$n", A, !" return /( 0

Exercice ):
Ecrive* un programme en langage C qui lit deu2 valeurs enti1res #A et B$ au clavier et qui affiche le signe de la somme de A et B sans faire l.addition" =tilise* la fonction fabs de la biblioth1que <math.h>"

Solution :
include !stdio"h> *include +mat,-,. main#$ % +, Afficher le signe de la somme de deu2 entiers sans faire l.addition ,+ int A, B( printf#)&ntroduise* deu2 nombres entiers :)$( scanf#)Ai Ai), BA, BB$( if ((A.7 && .7! FF (A+7 && .7 && fabs(A!+fabs( !! FF (A.7 && +7 && fabs(A!.fabs( !!! printf("Le signe de la somme %i 0 %i est positif$n",A, !" else if ((A+7 && +7! FF (A+7 && .7 && fabs(A!.fabs( !! FF (A.7 && +7 && fabs(A!+fabs( !!! printf("Le signe de la somme %i 0 %i est nGgatif$n",A, !" else printf("La somme %i 0 %i est @Gro$n", A, !" return /( 0

Exercice 4:
Ecrive* un programme en langage C qui calcule les solutions relles d.une quation du second degr ax2+bx+c = 0.

Solution :
include !stdio"h> *include +mat,-,. main#$ % +, Calcul des solutions relles d.une quation du second degr ,+ int A, B, C( double '( +, 'iscriminant ,+ printf#)Calcul des solutions relles d.une quation du second 3n)$( printf#)degr de la forme a2K7 : b2 : c = / 3n3n)$( printf#)&ntroduise* les valeurs pour a, b, et c : )$( scanf#)Ai Ai Ai), BA, BB, BC$(

+, Calcul du discriminant bK79Lac ,+ 9 # po<( ,%! 3 )-72A2C" +, 'istinction des diffrents cas ,+ if (A##7 && ##7 && C##7! +, /2 = / ,+ printf(";out rGel est une solution de cette G1uation-$n"!" else if (A##7 && ##7! +, Contradiction: c / et c = / ,+ printf("Cette G1uation ne possEde pas de solutions-$n"!" else if (A##7! +, b2 : c = / ,+ C printf("La solution de cette G1uation du premier degrG est :$n"!" printf(" x # %-)f$n", (double!C& !" D else if (9+7! +, bK79Lac ! / ,+ printf("Cette G1uation nHa pas de solutions rGelles-$n"!" else if (9##7! +, bK79Lac = / ,+ C printf("Cette G1uation a une seule solution rGelle :$n"!" printf(" x # %-)f$n", (double!3 &(%2A!!" D else +, bK79Lac > / ,+ C printf("Les solutions rGelles de cette G1uation sont :$n"!" printf(" x1 # %-)f$n", (3 0s1rt(9!!&(%2A!!" printf(" x% # %-)f$n", (3 3s1rt(9!!&(%2A!!" D return /( 0

Les structures rGpGtitiAes en langage C


Exercice 1:
Ecrive* un programme en langage C qui lit M nombres entiers au clavier et qui affiche leur somme, leur produit et leur moyenne" Choisisse* un type appropri pour les valeurs - afficher" Ce nombre M est - entrer au clavier" 4solve* ce probl1me, a$ en utilisant <,ile, b$ en utilisant do 3 <,ile, c$ en utilisant for" d$ Caquelle des trois variantes est la plus naturelle pour ce probl1meI

Solution :
a$ en utilisant <,ile, include !stdio"h> main#$ %

int M( +, nombre de donnes ,+ int MNHB( +, nombre courant ,+ int &( +, compteur ,+ long ;NH( +, la somme des nombres entrs ,+ double >4N'( +, le produit des nombres entrs ,+ printf#)Mombre de donnes : )$( scanf#)Ad), BM$( S56#7" /(59#1" :#1" <,ile(:+#I! C printf("%d- nombre : ", :!" scanf("%d", &I56 !" S56 0# I56 " /(59 2# I56 " :00" D printf#)Ca somme des Ad nombres est Ald 3n), M, ;NH$( printf#)Ce produit des Ad nombres est A"/f3n), M, >4N'$( printf#)Ca moyenne des Ad nombres est A"Lf3n), M, #float$;NH+M$( return /( 0 b$ en utilisant do 3 <,ile, include !stdio"h> main#$ % int M( +, nombre de donnes ,+ int MNHB( +, nombre courant ,+ int &( +, compteur ,+ long ;NH( +, la somme des nombres entrs ,+ double >4N'( +, le produit des nombres entrs ,+ printf#)Mombre de donnes : )$( scanf#)Ad), BM$( ;NH=/( >4N'=6( &=6( do % printf#)Ad" nombre : ), &$( scanf#)Ad), BMNHB$( ;NH := MNHB( >4N' ,= MNHB(

&::( 0 Ohile#&!=M$( printf#)Ca somme des Ad nombres est Ald 3n), M, ;NH$( printf#)Ce produit des Ad nombres est A"/f3n), M, >4N'$( printf#)Ca moyenne des Ad nombres est A"Lf3n), M, #float$;NH+M$( return /( 0 c$ en utilisant for" main#$ % int M( +, nombre de donnes ,+ int MNHB( +, nombre courant ,+ int &( +, compteur ,+ long ;NH( +, la somme des nombres entrs ,+ double >4N'( +, le produit des nombres entrs ,+ printf#)Mombre de donnes : )$( scanf#)Ad), BM$( for #;NH=/, >4N'=6, &=6 ( &!=M ( &::$ % printf#)Ad" nombre : ), &$( scanf#)Ad), BMNHB$( ;NH := MNHB( >4N' ,= MNHB( 0 printf#)Ca somme des Ad nombres est Ald 3n), M, ;NH$( printf#)Ce produit des Ad nombres est A"/f3n), M, >4N'$( printf#)Ca moyenne des Ad nombres est A"Lf3n), M, #float$;NH+M$( return /( 0 d$ Caquelle des trois variantes est la plus naturelle pour ce probl1meI Ca structure for est la plus compacte et celle qui e2prime le mieu2 l.ide de l.algorithme" '.autre part, elle permet d.intgrer tr1s confortablement l.initialisation et l.incrmentation des variables dans la structure"

Exercice %:
Calcule* par des soustractions successives le quotient entier et le reste de la division enti1re de deu2 entiers entrs au clavier"

Solution :

include !stdio"h> main#$ % int M=H( +, numrateur de la division enti1re ,+ int 'EM( +, dnominateur de la division enti1re ,+ int '&P( +, rsultat de la division enti1re ,+ int 4E;( +, reste de la division enti1re ,+ printf#)&ntroduise* le numrateur : )$( scanf#)Ad), BM=H$( printf#)&ntroduise* le dnominateur : )$( scanf#)Ad), B'EM$( (ES#IJ6" 9:B#7" <,ile((ES.#9EI! C (ES3#9EI" 9:B00" D +, ou mieu2 encore : ,+ +, for ((ES#IJ6, 9:B#7 " (ES.#9EI " 9:B00! (ES3#9EI" ,+ printf#) Ad divis par Ad est Ad reste Ad3n), M=H, 'EM, '&P, 4E;$( return /( 0

Exercice ':
Calcule* la factorielle MQ = 6,7,8,""",#M96$,M d.un entier naturel M en respectant que /Q=6" a$ =tilise* <,ile, b$ =tilise* for"

Solution :
a$ avec la boucle <,ile, include !stdio"h> main#$ % int M( +, Ca donne ,+ int &( +, Ce compteur ,+ double KAC;" +, Ca factorielle MQ 9 Dype double - ,+ +, cause de la grandeur du rsultat" ,+ do C printf#)Entre* un entier naturel : )$(

scanf#)Ad), BM$( D <,ile (I+7!" +, a ,+ +, >our M=/, le rsultat sera automatiquement /Q=6 ,+ :#1" KAC;#1" <,ile (:+#I! C KAC;2#:" :00" D printf #)AdQ = A"/f3n), M, RACD$( return /( 0 b$ avec la boucle for, include !stdio"h> main#$ % int M( +, Ca donne ,+ int &( +, Ce compteur ,+ double KAC;" +, Ca factorielle MQ 9 Dype double - ,+ +, cause de la grandeur du rsultat" ,+ do C printf#)Entre* un entier naturel : )$( scanf#)Ad), BM$( D <,ile (I+7!" for (KAC;#1-7, :#1 " :+#I " :00! KAC;2#:" printf #)AdQ = A"/f3n), M, RACD$( return /( 0

Exercice ):
Calcule* par multiplications successives EM de deu2 entiers naturels E et M entrs au clavier"

Solution :
include !stdio"h> main#$

% int E, M( +, Ces donnes ,+ int &( +, Ce compteur ,+ double (ESJ" +, Dype double - cause de la ,+ +, grandeur du rsultat" ,+ do C printf#)Entre* l.entier naturel E : )$( scanf#)Ad), BE$( D <,ile (=+7!" do C printf#)Entre* l.e2posant M : )$( scanf#)Ad), BM$( D <,ile (I+7!" +, >our M=/, le rsultat sera automatiquement EK/=6 ,+ for ((ESJ#1-7, :#1 " :+#I " :00! (ESJ2#=" +, Attention: >our E=/ et M=/ , /K/ n.est pas dfini ,+ if (I##7 && =##7! printf("@Gro exposant @Gro nHest pas dGfini L$n"!" else printf("(Gsultat : %d M %d # %-7f$n", =, I, (ESJ!" return /( 0

Exercice 4:
Calcule* la somme des M premiers termes de la srie harmonique : 6 : 6+7 : 6+8 : """ : 6+M

Solution :
include !stdio"h> main#$ % int M( +, nombre de termes - calculer ,+ int &( +, compteur pour la boucle ,+ float S56" +, Dype float - cause de la prcision du rsultat" ,+ do C printf #)Mombre de termes: )$( scanf #)Ad), BM$( D <,ile (I+1!"

for (S56#7-7, :#1 " :+#I " :00! S56 0# (float!1&:" printf#)Ca somme des Ad premiers termes est Af 3n), M, ;NH$( return /( 0

Exercice 8:
Calcule* la somme, le produit et la moyenne d.une suite de chiffres non nuls entrs au clavier, sachant que la suite est termine par *ro" 4etene* seulement les chiffres #/, 6 """ S$ lors de l.entre des donnes et effectue* un signal sonore si les donnes sortent de ce domaine"

Solution :
include !stdio"h> main#$ % int E( +, Ce chiffre courant ,+ int M=/( +, Ce compteur des donnes ,+ int ;NH=/( +, Ca somme actuelle ,+ long >4N'=6( +, Ce produit actuel 9 Dype long - ,+ +, cause de la grandeur du rsultat" ,+ ,+ do C +, ;aisie des donnes #pour perfectionnistes$ ,+ printf#)Entre* le AdAs chiffre : ), #M:6$, #M$I)e):)er)$( scanf#)Ad), BE$( if (=+7FF=.N! printf("$a"!" else if (=! C I00" S560#=" /(592#=" D else if (L= && I.7! C+, ;eulement si au moins un chiffre a t accept ,+ printf#)Ca somme des chiffres est Ad 3n), ;NH$( printf#)Ce produit des chiffres est %ld3n), >4N'$( printf#)Ca moyenne des chiffres est %f 3n), (float!S56&I$( D D <,ile (=!" return /( 0

Exercice ?:
Calcule* le nombre lu - rebours d.un nombre positif entr au clavier en supposant que le fichier d.entre standard contient une suite de chiffres non nuls, termine par *ro #Contr<le* s.il s.agit vraiment de chiffres$" Exemple: Entre: 6 7 8 L / Affichage: L876

Solution :
include !stdio"h> main#$ % int E( +, Ce chiffre courant ,+ int M=/( +, Ce compteur des dcimales ,+ long PAC'=6( +, Paleur de la position dcimale courante ,+ long MNHB=/( +, Ce nombre rsultat ,+ do C printf#)Entre* le AdAs chiffre : ), #M:6$, #M$I)e):)er)$( scanf#)Ad), BE$( if (=+7FF=.N! printf("$a"!" else if (=! C I56 0# BAL92=" I00" BAL9 2# 17" D else printf("La Aaleur du nombre renAersG est %ld$n", I56 !" D <,ile (=!" return /( 0

Exercice O:
Calcule* le nombre lu - rebours d.un nombre positif entr au clavier en supposant que le fichier d.entre standard contient le nombre - inverser" Exemple: Entre: 678L Affichage: L876

Solution :
include !stdio"h> main#$ % int MNHB( +, Ce nombre - inverser ,+ int M&MP( +, Ce nombre invers ,+ +, Attention: en utilisant le type int, il est impossible ,+

+, d.inverser correctement des nombres comme 6//88 """ ,+ do C printf#)Entre* un nombre positif #!6////$ : ), MNHB$( scanf#)Ad), BMNHB$( D <,ile (I56 +7 FF I56 .NNNN!" I:IB#7" <,ile(I56 .7! C I:IB 2# 17" I:IB 0# I56 %17" I56 &# 17" D +, Autre possibilit : ,+ +, for (I:IB#7 " I56 .7 " I56 &#17! I:IB # I:IB217 0 I56 %17" ,+ printf#)Ce nombre .invers. est : Ad3n), M&MP$( return /( 0

Exercice N:
Calcule* le >"T"C"'" de deu2 entiers naturels entrs au clavier en utilisant l.algorithme d.E=CC&'E"

Solution :
include !stdio"h> main#$ % int A, B( +, donnes ,+ int E, F, 4E;DE( +, var" d.aide pour l.algorithme d.Euclide ,+ do C printf#)Entrer l.entier A #non nul$ : )$( scanf#)Ad), BA$( D <,ile(LA!" do C printf#)Entrer l.entier B #non nul$ : )$( scanf#)Ad), BB$( D <,ile(L !"

for ((ES;E#A, =#A, ># " (ES;E " =#>, >#(ES;E! (ES;E # =%>" printf#)Ce >TC' de Ad et de Ad est Ad3n), A, B, E$( return /( 0

Les tableaux en langage C


Exercice 1:
Ecrire un programme en langage C qui lit la dimension M d.un tableau D du type int #dimension ma2imale: U/ composantes$, remplit le tableau par des valeurs entres au clavier et affiche le tableau" Calculer et afficher ensuite la somme des lments du tableau"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int ;P47Q" +, tableau donn ,+ int M( +, dimension ,+ int &( +, indice courant ,+ long ;NH( +, somme des lments 9 type long - cause ,+ +, de la grandeur prvisible du rsultat" ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for (:#7" :+I" :00! C printf("ElGment %d : ", :!" scanf("%d", &;P:Q!" D +, Affichage du tableau ,+ printf#)Dableau donn :3n)$( for (:#7" :+I" :00! printf("%d ", ;P:Q!" printf("$n"!" +, Calcul de la somme ,+ for (S56#7, :#7" :+I" :00! S56 0# ;P:Q" +, Edition du rsultat ,+ printf#);omme de lments : %ld3n), ;NH$( return /(

Exercice %:
Ecrire un programme en langage C qui lit la dimension M d.un tableau D du type int #dimension ma2imale: U/ composantes$, remplit le tableau par des valeurs entres au clavier et affiche le tableau" Effacer ensuite toutes les occurrences de la valeur / dans le tableau D et tasser les lments restants" Afficher le tableau rsultant"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int DVU/W( +, tableau donn ,+ int M( +, dimension ,+ int &,X( +, indices courants ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for #&=/( &!M( &::$ % printf#)Elment Ad : ), &$( scanf#)Ad), BDV&W$( 0 +, Affichage du tableau ,+ printf#)Dableau donn : 3n)$( for #&=/( &!M( &::$ printf#)Ad ), DV&W$( printf#)3n)$( &2 Effacer les @Gros et comprimer : 2& &2 Copier tous les GlGments de : Aers R et 2& &2 augmenter R pour les GlGments non nuls- 2& for (:#7, R#7 " :+I " :00! C ;PRQ # ;P:Q" if (;P:Q! R00" D &2 IouAelle dimension du tableau L 2& I # R" +, Edition des rsultats ,+ printf#)Dableau rsultat :3n)$( for #&=/( &!M( &::$ printf#)Ad ), DV&W$( printf#)3n)$( return /( 0

Exercice ':
Ecrire un programme en langage C qui lit la dimension M d.un tableau D du type int #dimension ma2imale: U/ composantes$, remplit le tableau par des valeurs entres au clavier et affiche le tableau" 4anger ensuite les lments du tableau D dans l.ordre inverse sans utiliser de tableau d.aide" Afficher le tableau rsultant" :dGe: Echanger les lments du tableau - l.aide de deu2 indices qui parcourent le tableau en commen@ant respectivement au dbut et - la fin du tableau et qui se rencontrent en son milieu"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int DVU/W( +, tableau donn ,+ int M( +, dimension ,+ int &,X( +, indices courants ,+ int A&'E( +, pour l.change ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for #&=/( &!M( &::$ % printf#)Elment Ad : ), &$( scanf#)Ad), BDV&W$( 0 +, Affichage du tableau ,+ printf#)Dableau donn : 3n)$( for #&=/( &!M( &::$ printf#)Ad ), DV&W$( printf#)3n)$( &2 :nAerser le tableau 2& for (:#7, R#I31 " :+R " :00,R33! &2 Ec,ange de ;P:Q et ;PRQ 2& C A:9E # ;P:Q" ;P:Q # ;PRQ" ;PRQ # A:9E" D +, Edition des rsultats ,+ printf#)Dableau rsultat :3n)$( for #&=/( &!M( &::$ printf#)Ad ), DV&W$( printf#)3n)$( return /( 0

Exercice ):

Ecrire un programme en langage C qui lit la dimension M d.un tableau D du type int #dimension ma2imale: U/ composantes$, remplit le tableau par des valeurs entres au clavier et affiche le tableau" Copie* ensuite toutes les composantes strictement positives dans un deu2i1me tableau D>N; et toutes les valeurs strictement ngatives dans un troisi1me tableau DMET" Afficher les tableau2 D>N; et DMET"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ +, Ces tableau2 et leurs dimensions ,+ int DVU/W, D>N;VU/W, DMETVU/W( int M, M>N;, MMET( int &( +, indice courant ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for #&=/( &!M( &::$ % printf#)Elment Ad : ), &$( scanf#)Ad), BDV&W$( 0 +, Affichage du tableau ,+ printf#)Dableau donn :3n)$( for #&=/( &!M( &::$ printf#)Ad ), DV&W$( printf#)3n)$( &2 :nitialisation des dimensions de ;/5S et ;IES 2& I/5S#7" IIES#7" &2 ;ransfer des donnGes 2& for (:#7" :+I" :00! C if (;P:Q.7! C ;/5SPI/5SQ#;P:Q" I/5S00" D if (;P:Q+7! C ;IESPIIESQ#;P:Q" IIES00" D D +, Edition du rsultat ,+ printf#)Dableau D>N; :3n)$( for #&=/( &!M>N;( &::$ printf#)Ad ), D>N;V&W$( printf#)3n)$( printf#)Dableau DMET :3n)$(

for #&=/( &!MMET( &::$ printf#)Ad ), DMETV&W$( printf#)3n)$( return /( 0

Exercice 4:
Ecrire un programme en langage C qui lit les dimensions C et C d.un tableau D - deu2 dimensions du type int #dimensions ma2imales: U/ lignes et U/ colonnes$" 4emplir le tableau par des valeurs entres au clavier et afficher le tableau ainsi que la somme de tous ses lments"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int DVU/WVU/W( +, tableau donn ,+ int C, C( +, dimensions ,+ int &, X( +, indices courants ,+ long ;NH( +, somme des lments 9 type long - cause ,+ +, de la grandeur prvisible du rsultat" ,+ +, ;aisie des donnes ,+ printf#)Mombre de lignes #ma2"U/$ : )$( scanf#)Ad), BC $( printf#)Mombre de colonnes #ma2"U/$ : )$( scanf#)Ad), BC $( for (:#7" :+L" :00! for (R#7" R+C" R00! C printf("ElGmentP%dQP%dQ : ",:,R!" scanf("%d", &;P:QPRQ!" D +, Affichage du tableau ,+ printf#)Dableau donn :3n)$( for (:#7" :+L" :00! C for (R#7" R+C" R00! printf("%?d", ;P:QPRQ!" printf("$n"!" D +, Calcul de la somme ,+ for (S56#7, :#7" :+L" :00! for (R#7" R+C" R00! S56 0# ;P:QPRQ" +, Edition du rsultat ,+ printf#);omme des lments : %ld3n), ;NH$( return /( 0

Exercice 8:
Ecrire un programme en langage C qui lit les dimensions C et C d.un tableau D - deu2 dimensions du type int #dimensions ma2imales: U/ lignes et U/ colonnes$" 4emplir le tableau par des valeurs entres au clavier et afficher le tableau ainsi que la somme de chaque ligne et de chaque colonne en n.utilisant qu.une variable d.aide pour la somme"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int DVU/WVU/W( +, tableau donn ,+ int C, C( +, dimensions ,+ int &, X( +, indices courants ,+ long ;NH( +, somme des lments 9 type long - cause ,+ +, de la grandeur prvisible des rsultats" ,+ +, ;aisie des donnes ,+ printf#)Mombre de lignes #ma2"U/$ : )$( scanf#)Ad), BC $( printf#)Mombre de colonnes #ma2"U/$ : )$( scanf#)Ad), BC $( for #&=/( &!C( &::$ for #X=/( X!C( X::$ % printf#)ElmentVAdWVAdW : ),&,X$( scanf#)Ad), BDV&WVXW$( 0 +, Affichage du tableau ,+ printf#)Dableau donn :3n)$( for #&=/( &!C( &::$ % for #X=/( X!C( X::$ printf#)AYd), DV&WVXW$( printf#)3n)$( 0 &2 Calcul et affic,age de la somme des lignes 2& for (:#7" :+L" :00! C for (S56#7, R#7" R+C" R00! S56 0# ;P:QPRQ" printf("Somme 3 ligne %d : %ld$n",:,S56!" D &2 Calcul et affic,age de la somme des colonnes 2& for (R#7" R+C" R00! C for (S56#7, :#7" :+L" :00! S56 0# ;P:QPRQ" printf("Somme 3 colonne %d : %ld$n",R,S56!"

D return /( 0

Exercice ?:
Ecrire un programme en langage C qui transf1re un tableau H - deu2 dimensions C et C #dimensions ma2imales: 6/ lignes et 6/ colonnes$ dans un tableau P - une dimension C,C" Exemple:
& $ FabcdF & $ F e f g , F ##. F a b c d e f g , i T U l F FiTUl F $ & $ &

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int HV6/WV6/W( +, tableau - 7 dimensions ,+ int PV6//W( +, tableau - 6 dimension ,+ int C, C( +, dimensions ,+ int &, X( +, indices courants ,+ +, ;aisie des donnes ,+ printf#)Mombre de lignes #ma2"6/$ : )$( scanf#)Ad), BC $( printf#)Mombre de colonnes #ma2"6/$ : )$( scanf#)Ad), BC $( for #&=/( &!C( &::$ for #X=/( X!C( X::$ % printf#)ElmentVAdWVAdW : ),&,X$( scanf#)Ad), BHV&WVXW$( 0 +, Affichage du tableau 79dim ,+ printf#)Dableau donn :3n)$( for #&=/( &!C( &::$ % for #X=/( X!C( X::$ printf#)AYd), HV&WVXW$( printf#)3n)$( 0 &2 ;ransfer des GlGments ligne par ligne 2& for (:#7" :+L" :00! for (R#7" R+C" R00! BP:2C0RQ # 6P:QPRQ" +, Affichage du tableau 69dim ,+ printf#)Dableau rsultat : )$(

for #&=/( :+L2C( &::$ printf#)Ad ), PV&W$( printf#)3n)$( return /( 0

Exercice O:
Ecrire un programme en langage C qui calcule le produit scalaire de deu2 vecteurs d.entiers = et P #de mZme dimension$" Exemple:
& $ & $ F ' % 3) F 2 F % 3' 4 F # '2%0%2(3'!0(3)!24 # 3%7 $ & $ &

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int =VU/W, PVU/W( +, tableau2 donns ,+ int M( +, dimension ,+ int &( +, indice courant ,+ long >;( +, produit scalaire ,+ +, ;aisie des donnes ,+ printf#)'imension des tableau2 #ma2"U/$ : )$( scanf#)Ad), BM $( printf#),, >remier tableau ,,3n)$( for #&=/( &!M( &::$ % printf#)Elment Ad : ), &$( scanf#)Ad), B=V&W$( 0 printf#),, 'eu2i1me tableau ,,3n)$( for #&=/( &!M( &::$ % printf#)Elment Ad : ), &$( scanf#)Ad), BPV&W$( 0 &2 Calcul du produit scalaire 2& for (/S#7, :#7" :+I" :00! /S 0# (long!JP:Q2BP:Q" +, Edition du rsultat ,+ printf#)>roduit scalaire : %ld3n), >;$( return /( 0

Exercice N:
Ecrire un programme en langage C qui dtermine la plus grande et la plus petite valeur dans un tableau d.entiers A" Afficher ensuite la valeur et la position du ma2imum et du minimum"

;i le tableau contient plusieurs ma2ima ou minima, le programme retiendra la position du premier ma2imum ou minimum rencontr"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int AVU/W( +, tableau donn ,+ int M( +, dimension ,+ int &( +, indice courant ,+ int H&M( +, position du minimum ,+ int HAE( +, position du ma2imum ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for #&=/( &!M( &::$ % printf#)Elment Ad : ), &$( scanf#)Ad), BAV&W$( 0 +, Affichage du tableau ,+

Les c,aines de caractEres en langage C


Exercice 1 :
Ecrire un programme en langage C qui lit U mots, spars par des espaces et qui les affiche ensuite dans une ligne, mais dans l.ordre inverse" Ces mots sont mmoriss dans U variables H6, """ ,HU" Exemple
Aoici une petite p,rase L L p,rase petite une Aoici

Solution :
include !stdio"h> main#$ % char H6V8/W, H7V8/W, H8V8/W, HLV8/W, HUV8/W( printf#)Entre* U mots, spars par des espaces :3n)$( scanf ("%s %s %s %s %s", 61, 6%, 6', 6), 64!" printf("%s %s %s %s %s$n",64, 6), 6', 6%, 61!" return /( 0

Exercice % :
Ecrire un programme en langage C qui lit une ligne de te2te #ne dpassant pas 7// caract1res$ la mmorise dans une variable DED et affiche ensuite: a! la longueur C de la chaGne" b! le nombre de .e. contenus dans le te2te" c! toute la phrase - rebours, sans changer le contenu de la variable DED" d! toute la phrase - rebours, apr1s avoir invers l.ordre des caract1res dans DED:
Aoici une petite p,rase L L esar,p etitep enu icioA

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ char DEDV7/6W( +, chaGne donne ,+ int &,X( +, indices courants ,+ int C( +, longueur de la chaGne ,+ int C( +, compteur des lettres .e. ,+ int A&'E( +, pour l.change des caract1res ,+ +, ;aisie des donnes ,+ printf#)Entre* une ligne de te2te #ma2"7// caract1res$ :3n)$( gets#DED$( +, C.utilisation de scanf est impossible pour ,+ +, lire une phrase contenant un nombre variable de mots" ,+ &2 a! Compter les caractEres 2& &2 La mar1ue de fin de c,aVne H$7H est 2& &2 utilisGe comme condition dHarrWt- 2& for (L#7" ;=;PLQ" L00! " printf("Le texte est composG de %d caractEres-$n",L!" &2 b! Compter les lettres HeH dans le texte 2& C#7" for (:#7" ;=;P:Q" :00! if (;=;P:Q##HeH! C00" printf("Le texte contient %d lettres $He$H-$n",C!" &2 c! Affic,er la p,rase X lHenAers 2& for (:#L31" :.#7" :33! putc,ar(;=;P:Q!" &2 ou printf("%c",;=;P:Q!" 2& putc,ar(H$nH!" &2 ou printf("$n"!" 2& &2 d! :nAerser lHordre des caractEres 2& for (:#7,R#L31 " :+R " :00,R33! C A:9E#;=;P:Q"

;=;P:Q#;=;PRQ" ;=;PRQ#A:9E" D puts(;=;!" +, ou printf#)As3n),DED$( ,+ return /( 0

Exercice ' :
Ecrire un programme en langage C qui lit un te2te DED #de moins de 7// caract1res$ et qui enl1ve toutes les apparitions du charact1re .e. en tassant les lments restants" Ces modifications se feront dans la mZme variable DED" Exemple:
Cette ligne contient 1uel1ues lettres eCtt lign contint 1ul1us lttrs -

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ char DEDV7/6W( +, chaGne donne int &,X( +, indices courants ,+

,+

+, ;aisie des donnes ,+ printf#)Entre* une ligne de te2te #ma2"7// caract1res$ :3n)$( gets(;=;!" &2 Eliminer les lettres HeH et comprimer : 2& &2 Copier les caractEres de : Aers R et incrGmenter R 2& &2 seulement pour les caractEres diffGrents de HeH- 2& for (R#7,:#7 " ;=;P:Q " :00! C ;=;PRQ # ;=;P:Q" if (;=;P:Q L# HeH! R00" D &2 ;erminer la c,aVne LL 2& ;=;PRQ#H$7H" +, Edition du rsultat ,+ puts(;=;!" return /( 0

Exercice ) :
Ecrire un programme en langage C qui demande l.introduction du nom et du prnom de l.utilisateur et qui affiche alors la longueur totale du nom sans compter les espaces" Employer la fonction strlen"

Solution :
include !stdio"h> *include +string-,.

main#$ % char MNHVL/W, >4EMNHVL/W( printf#)&ntroduise* votre nom et votre prnom: 3n)$( scanf#)As As), MNH, >4EMNH$( printf#)3nBon[our As As Q3n), MNH, >4EMNH$( printf#)Potre nom est compos de Ad lettres"3n), strlen(I56! 0 strlen(/(EI56!!" +, ou bien printf#)Potre nom est compos de Ad lettres"3n), strlen(strcat(I56,/(EI56!!!" ,+ return /( 0

Exercice 4 :
Ecrire un programme en langage C qui lit un verbe rgulier en )er) au clavier et qui en affiche la con[ugaison au prsent de l.indicatif de ce verbe" Contr<le* s.il s.agit bien d.un verbe en )er) avant de con[uguer" =tiliser les fonctions gets, puts, strcat et strlen"

Solution :
include !stdio"h> *include +string-,. main#$ % +, 'clarations ,+ char PE4BV7/W( +, chaGne contenant le verbe ,+ char ARR&V8/W( +, chaGne pour l.affichage ,+ int C( +, longueur de la chaGne ,+ +, ;aisie des donnes ,+ printf#)Perbe : )$( gets#PE4B$( &2 ContrYler sHil sHagit dHun Aerbe en HerH 2& L#strlen(BE( !" if ((BE( PL3%QL#HeH! FF (BE( PL31QL#HrH!! puts("$aCe nHest pas un Aerbe du premier groupe-L"!" else C &2 Couper la terminaison HerH- 2& BE( PL3%Q#H$7H" &2 ConTuguer --- 2& AKK:P7Q#H$7H" strcat(AKK:, "Te "!" strcat(AKK:, BE( !" strcat(AKK:, "e"!" puts(AKK:!" ---

AKK:P7Q#H$7H" strcat(AKK:, "ils "!" strcat(AKK:, BE( !" strcat(AKK:, "ent"!" puts(AKK:!" D return /( 0

Exercice 8 :
Ecrire un programme en langage C qui lit deu2 chaGnes de caract1res C\6 et C\7 et qui copie la premi1re moiti de C\6 et la premi1re moiti de C\7 dans une troisi1me chaGne C\8" Afficher le rsultat" a! =tiliser les fonctions spciales de <string>. b! =tiliser uniquement les fonctions gets et puts"

Solution :
a! =tiliser les fonctions spciales de <string>. include !stdio"h> *include +string-,. main#$ % +, 'clarations ,+ char C\6V6//W, C\7V6//W( +, chaGnes donnes ,+ char C\8V6//W=))( +, chaGne rsultat ,+ +, ;aisie des donnes ,+ printf#)&ntroduise* la premi1re chaGne de caract1res : )$( gets#C\6$( printf#)&ntroduise* la deu2i1me chaGne de caract1res : )$( gets#C\7$( &2 ;raitements 2& strncpZ(C[', C[1, strlen(C[1!&%!" strncat(C[', C[%, strlen(C[%!&%!" +, Affichage du rsultat ,+ printf#)=n demi 3)As3) plus un demi 3)As3) donne 3)As3)3n),C\6, C\7, C\8$( return /( 0 b! =tiliser uniquement les fonctions gets et puts" include !stdio"h> main#$ % +, 'clarations ,+ char C\6V6//W, C\7V6//W( +, chaGnes donnes ,+ char C\8V6//W=))( +, chaGne rsultat ,+ int C6,C7( +, longueurs de C\6 et C\7 ,+

int &( int X(

+, indice courant dans C\6 et C\7 ,+ +, indice courant dans C\8 ,+

+, ;aisie des donnes ,+ puts#)&ntroduise* la premi1re chaGne de caract1res : )$( gets#C\6$( puts#)&ntroduise* la deu2i1me chaGne de caract1res : )$( gets#C\7$( &2 9Gtermination les longueurs de C[1 et C[% 2& for (L1#7" C[1PL1Q" L100! " for (L%#7" C[%PL%Q" L%00! " &2 Copier la premiEre moitiG de C[1 Aers C[' 2& for (:#7 " :+(L1&%! " :00! C['P:Q#C[1P:Q" &2 Copier la premiEre moitiG de C[% Aers C[' 2& R#:" for (:#7 " :+(L%&%! " :00! C C['PRQ#C[%P:Q" R00" D &2 ;erminer la c,aVne C[' 2& C['PRQ#H$7H" +, Affichage du rsultat ,+ puts#)ChaGne rsultat : )$( puts#C\8$( return /( 0

Les pointeurs en langage C


Exercice 1 :
;oit > un pointeur qui .pointe. sur un tableau A:
int APQ # C1%, %', '), )4, 48, 8?, ?O, ON, N7D" int 2/" / # A"

5uelles valeurs ou adresses fournissent ces e2pressions:


a! b! c! d! e! f! g! ,! 2/0% 2(/0%! &/01 &AP)Q3' A0' &AP?Q3/ /0(2/317! 2(/02(/0O!3AP?Q!

Solution :
;oit > un pointeur qui .pointe. sur un tableau A: int AVW = %67, 78, 8L, LU, U], ]Y, Y^, ^S, S/0( int ,>( > = A( 5uelles valeurs ou adresses fournissent ces e2pressions: a! ,>:7 => la valeur 6L b! ,#>:7$ => la valeur 8L c! B>:6 => l.adresse du pointeur derri1re le pointeur > #rarement utilise$ d! BAVLW98 => l.adresse de la composante AV6W e! A:8 => l.adresse de la composante AV8W f! BAVYW9> => la valeur #indice$ Y g! >:#,>96/$ => l.adresse de la composante AV7W ,! ,#>:,#>:^$9AVYW$ => la valeur 78

Exercice % :
Ecrire un programme en langage C qui lit un entier E et un tableau A du type int au clavier et limine toutes les occurrences de E dans A en tassant les lments restants" Ce programme utilisera les pointeurs >6 et >7 pour parcourir le tableau"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int AVU/W( +, tableau donn ,+ int M( +, dimension du tableau ,+ int E( +, valeur - liminer ,+ int ,>6, ,>7( +, pointeurs d.aide ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for (/1#A" /1+A0I" /100! C printf("ElGment %d : ", /13A!" scanf("%d", /1!" D printf#)&ntroduire l.lment E - liminer du tableau : )$( scanf#)Ad), BE $( +, Affichage du tableau ,+ for (/1#A" /1+A0I" /100! printf("%d ", 2/1!"

printf#)3n)$( +, Effacer toutes les occurrences de E et comprimer : ,+ +, Copier tous les lments de >6 vers >7 et augmenter ,+ +, >7 pour tous les lments diffrents de E" ,+ for (/1#/%#A" /1+A0I" /100! C 2/% # 2/1" if (2/% L# =! /%00" D +, Mouvelle dimension de A ,+ I # /%3A" +, Edition du rsultat ,+ for (/1#A" /1+A0I" /100! printf("%d ", 2/1!" printf#)3n)$( return /( 0

Exercice ' :
Ecrire un programme en langage C qui range les lments d.un tableau A du type int dans l.ordre inverse" Ce programme utilisera des pointeurs >6 et >7 et une variable numrique A&'E pour la permutation des lments"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int AVU/W( +, tableau donn ,+ int M( +, dimension du tableau ,+ int A&'E( +, pour la permutation ,+ int ,>6, ,>7( +, pointeurs d.aide ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau #ma2"U/$ : )$( scanf#)Ad), BM $( for (/1#A" /1+A0I" /100! C printf("ElGment %d : ", /13A!" scanf("%d", /1!" D +, Affichage du tableau ,+ for (/1#A" /1+A0I" /100! printf("%d ", 2/1!" printf#)3n)$( +, &nverser la tableau ,+ for (/1#A,/%#A0(I31!" /1+/%" /100,/%33! C

A:9E # 2/1" 2/1 # 2/%" 2/% # A:9E" D +, Edition du rsultat ,+ for (/1#A" /1+A0I" /100! printf("%d ", 2/1!" printf#)3n)$( return /( 0

Exercice ) :
Ecrire un programme en langage C qui lit deu2 tableau2 d.entiers A et B et leurs dimensions M et H au clavier et qui a[oute les lments de B - la fin de A" =tiliser deu2 pointeurs >A et >B pour le transfer et afficher le tableau rsultant A"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ int AV6//W, BVU/W( +, tableau2 ,+ int M, H( +, dimensions des tableau2 ,+ int 2/A,2/ " +, pointeurs d.aide ,+ +, ;aisie des donnes ,+ printf#)'imension du tableau A #ma2"U/$ : )$( scanf#)Ad), BM $( for (/A#A" /A+A0I" /A00! C printf("ElGment %d : ", /A3A!" scanf("%d", /A!" D printf#)'imension du tableau B #ma2"U/$ : )$( scanf#)Ad), BH $( for (/ # " / + 06" / 00! C printf("ElGment %d : ", / 3 !" scanf("%d", / !" D +, Affichage des tableau2 ,+ printf#)Dableau donn A :3n)$( for (/A#A" /A+A0I" /A00! printf("%d ", 2/A!" printf#)3n)$( printf#)Dableau donn B :3n)$( for (/ # " / + 06" / 00! printf("%d ", 2/ !"

printf#)3n)$( &2 Copier X la fin de A 2& for (/A#A0I,/ # " / + 06 " /A00,/ 00! 2/A # 2/ " &2 IouAelle dimension de A 2& I 0# 6" +, Edition du rsultat ,+ printf#)Dableau rsultat A :3n)$( for #>A=A( >A!A:M( >A::$ printf#)Ad ), ,>A$( printf#)3n)$( return /( 0

Exercice 4 :
Ecrire de deu2 fa@ons diffrentes, un programme en langage C qui vrifie sans utiliser une fonction de <string>, si une chaGne C\ introduite au clavier est un palindrome: a! en utilisant uniquement le formalisme tableau b! en utilisant des pointeurs au lieu des indices numriques (appel: =n palindrome est un mot qui reste le mZme qu.on le lise de gauche - droite ou de droite - gauche:

Solution :
a! en utilisant uniquement le formalisme tableau include !stdio"h> main#$ % +, 'clarations ,+ char C\V6/6W( +, chaGne donne ,+ int :,R" &2 indices courants 2& int /AL:" &2 indicateur logi1ue: 2& &2 Arai si C[ est un palindrome 2& +, ;aisie des donnes ,+ printf#)Entre* une ligne de te2te #ma2"6// caract1res$ :3n)$( gets#C\$( &2 /lacer R sur la derniEre lettre de la c,aVne 2& for(R#7" C[PRQ" R00! " R33" &2 ContrYler si C[ est un palindrome 2& /AL:#1" for (:#7 " /AL: && :+R " :00,R33! if (C[P:Q L# C[PRQ! /AL:#7" +, Affichage du rsultat ,+ if #>AC&$ printf#)Ca chaGne 3)As3) est un palindrome"3n), C\$( else

printf#)Ca chaGne 3)As3) n.est pas un palindrome"3n), C\$( return /( 0 b! en utilisant des pointeurs au lieu des indices numriques : include !stdio"h> main#$ % +, 'clarations ,+ char C\V6/6W( +, chaGne donne ,+ c,ar 2/1,2/%" &2 pointeurs dHaide 2& int >AC&( +, indicateur logique: ,+ +, vrai si C\ est un palindrome ,+ +, ;aisie des donnes ,+ printf#)Entre* une ligne de te2te #ma2"6// caract1res$ :3n)$( gets#C\$( &2 /lacer /% sur la derniEre lettre de la c,aVne 2& for (/%#C[" 2/%" /%00! " /%33" &2 ContrYler si C[ est un palindrome 2& /AL:#1" for (/1#C[ " /AL: && /1+/% " /100,/%33! if (2/1 L# 2/%! /AL:#7" +, Affichage du rsultat ,+ if #>AC&$ printf#)Ca chaGne 3)As3) est un palindrome"3n), C\$( else printf#)Ca chaGne 3)As3) n.est pas un palindrome"3n), C\$( return /( 0

Exercice 8 :
Ecrire un programme en langage C qui lit une chaGne de caract1res C\ et dtermine la longueur de la chaGne - l.aide d.un pointeur >" Ce programme n.utilisera pas de variables numriques"

Solution :
include !stdio"h> main#$ % +, 'clarations ,+ char C\V6/6W( +, chaGne donne ,+ char ,>( +, pointeur d.aide ,+ +, ;aisie des donnes ,+ printf#)Entre* une ligne de te2te #ma2"6// caract1res$ :3n)$(

gets#C\$( &2 /lacer / X la fin de la c,aVne 2& for (/#C[" 2/" /00! " +, Affichage du rsultat ,+ printf#)Ca chaGne 3)As3) est forme de Ad caract1res"3n), C\, /3C[$( return /( 0

Anda mungkin juga menyukai