Vous êtes sur la page 1sur 11

1 exercices simples

Rappels : scanf et printf


Exemples: tester int main() { char alpha; int i; float r; scanf("%c",&alpha); /* saisie d'un caractre */ scanf("%d",&i); /* saisie d'un nombre entier en dcimal */ scanf("%x",&i); /* saisie d'un nombre entier en hexadcimal*/ scanf("%f",&r); /* saisie d'un nombre rel */ printf ("%f",r); /* affichage d'un nombre rel Remarquez : pas de &*/ return 1 ;
}

Remarque: Si l'utilisateur ne respecte pas le format indiqu dans scanf, la saisie est ignore. Aucune erreur n'est gnre. Programme tester #include <stdio.h> #include <conio.h> void main() { char c; printf("ENTRER UN CARACTERE: "); scanf("%c",&c); printf("VOICI SON CODE ASCII: %d\n",c); printf("POUR CONTINUER FRAPPER UNE TOUCHE "); }

Traduire les Algorithmes suivants en programmes C


Exercice 1 : Ecrire un Algorithme dun Algo qui change deux variables A et B en utilisant une variable intermdiaire. Algo Echange Variable : A, B, C : rels Dbut : Afficher ( Saisissez deux variables ) Lire (A, B) CA AB BC Afficher ( les valeurs de , A, et de , B, ont t changes ) Fin

Exercice 2 : Ecrire un Algo qui donne les carr dun rel Algo : carr (x :rel) :rel Var : x_au_carr Dbut x_au_carr x*x retourner x_au_carr fin

structures ifelse - switch


Exercice 3 : Ecrire un Algo qui fournit les flicitations ou lajournement dun lve suivant sa note en utilisant Si-alorssinon. Algo : Jury Var : note : rel Dbut : lire (note) Si note <10 alors crire ( ajourn ) Sinon crire ( reu ) Fin

Exercice 4 : Ecrire un programme qui donne la valeur absolue de 2 rels : Algo : Valeur_absolue Var : a, b : rels Dbut : Afficher ( saisissez 2 rels ) Lire (A, B) Ecrire les valeurs absolues de A et de B sont : ) Si A<0 alors crire (-A) Sinon crire (A) Afficher ( et ) Si B<0 alors crire (-A) Sinon crire (A) Fin Remarque : on peut aller plus vite en crant une fonction valeur absolue et en faisant appel cette fonction dans un Algo : Algo : valAbs (x :rel) :rel Var : absx : rel Dbut : si x <0 alors absx -x Sinon absx x Retourner absx Fin

Et

Algo : Valeur_absolue2 Var : A, B rels Dbut : Afficher ( saisissez 2 rels ) Lire (A, B) Afficher ( les valeurs de A et B sont : , valAbs(A), et , valAbs(B)) Ecrire 5 : Faire un programme qui donne le volume dun cylindre en faisant appel une fonction aire dun cercle. Fonction : aire_cercle (rayon :rel) :rel Var : Aire : rel Const : PI====3.14 Dbut : Aire PI*rayon*rayon Retourner (Aire) Fin Fonction : volume_cercle (hauteur, rayon :rels) :rel Var : volume : rel Dbut : Volume aire_cercle (rayon)*hauteur Retourner volume Fin

Exercice 6 : Ecrire un Algorithme permettant de rsoudre une quation du premier degr Algo : premierdegre Var : a, b, x rels Dbut : Afficher ( saisissez les valeurs a et b de lquation ax+b=0 : ) Lire (a, b) Si a == 0 alors crire ( pas de solution ) Sinon crire ( la solution est x== , -b/a) Fin

Exercice 7 : Ecrire un Algorithme permettant de rsoudre une quation du second degr en utilisant des if else.. Algo : seconddegr Var : a, b, c, delta Dbut : Afficher ( saisissez les valeurs a, b et c de lquation ax+bx+c=0 : ) Lire (a, b, c) Si a==0 alors crire ( quation du premier degr ) Sinon delta b-4*a*c Dbut Si delta>0 alors crire ( les solutions de lquation sont , (-b-sqrt(delta))/(2*a), et , (b+sqrt(delta))/(2*a)) Sinon Dbut Si d==0 alors crire ( -b/(2a)) Sinon crire ( pas de solutions relles ) Fin Fin Fin

Ecrire le mme Algorithme avec des if et switch : Algo : seconddegr Var : a, b, c, delta Dbut : Afficher (saisissez les valeurs de a, b et c de lquation ax+bx+c=0 ) Lire (a, b, c) Si a==0 alors crire ( rsoudre permier degr ) Sinon dbut Delta b-4*a*c Selon que Delta > 0 : crire ((-b-sqrt(delta))/(2*a), (-b+sqrt(delta))/(2*a)) Delta == 0 : crire (( -b/(2a)) Sinon crire ( pas de solution relle ) Fin selon Fin

Exercice 8 1) Ecrire une fonction max3 qui retourne le maximum de trois entiers 2) Ecrire une fonction min3 qui retourne le minimum de trois entiers 3) Ecrire une fonction max2 qui retourne le maximum de deux entiers 4) Ecrire une fonction max3 qui retourne le maximum de trois entiers en faisant appel max2

1) Fonction : max3(a, b, c : entier) : entier : Var : max3 : entier Dbut : Si a>b alors Si a>c alors max3 a Sinon max3 c Sinon Si c>b alors max3 c Sinon max3 b Retourner (max3) Fin 2) Fonction : min3(a, b, c : entier ) : entier : Var min3 : entier Dbut Retourner (max3(-a, -b, -c)) Fin 3) Fonction : max2 (a, b : entier) : entier Var : max2 : entier Dbut : Si a<b alors max2 b Sinon max2 a Retourner (max2) Fin 4) Fonction : max3 (a, b, c : entier) : entier : Var : max3 : entier Dbut : max3 max2 [max2 (a, b), c) Retourner (max3) Fin

Exercice 10 Ecrire avec des If else un Algo permettant la saisie dune note n (0n20) et qui affiche la mention (n16 : TB, n14 : B, n12 : AB, n10 : Passable, n10 : Ajourn) Algo : Mention Var Note : rel Dbut : Afficher ( saisissez une note ) Lire (Note) Si Note16 alors crire ( mention TB ) Sinon Si Note14 alors crire ( mention B ) Sinon Si Note12 alors crire ( mention AB ) Sinon Si Note10 alors crire ( mention Passable ) Sinon crire ( Ajourn ) Fin Alternative : crire le programme prcdent avec des switch : Algo : Note Var : Note : rel Selon que Note 16 crire ( mention TB ) Note 14 crire ( mention B ) Note 12 crire ( mention AB ) Note 10 crire ( mention Passable ) Sinon crire ( Ajourn )

2 exercices en utilisant les structures rptitives TANT QUE et REPETERJUSQU'A et POUR

Exercice 12 Ecrire le programme qui affiche la somme dune suite dentiers saisie par lutilisateur se terminant par zro. Exemple : lutilisateur entre 1, puis 5, puis 2, puis 0 : affiche : 8 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lAlgorithme Spcifications : - donnes : suite de nombre entiers se terminant par zro - rsultat : la somme de ces entiers Solution en langage naturel : tant que lentier saisi nest pas zro, lajouter la somme partielle et saisir lentier suivant. Structure de donnes : - entier : entier courant (saisi) - entier : somme partielle Algorithme : Algo : Somme Suite Var : a, s : entiers Dbut s0 Lire (a) Tant que a0 faire Dbut ss+a Lire (a) Fin Afficher (s) Fin

Attention : dans une structure tant que ne pas oublier dinitialiser!!!

Exercice 14 Ecrire un Algorithme qui affiche la moyenne dune suite dentiers se terminant par zro (le zro nentrant pas en compte dans la moyenne : il est juste la pour indiquer la fin de saisie) 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lAlgorithme Spcification : - donnes : suite dentier se terminant par zro - rsultat : la moyenne de ces entiers (zro exclu) Solution en langage naturel : Tant que lentier saisi diffrent de 0 alors ajouter lentier aux entiers prcdents et faire la moyenne (cest dire diviser par le nombre dentiers

Structures de donnes : - entier : entier saisi - entier : rsultat moyenne Algorithme : Algo : Moyenne Var : n, moy, s : entiers Dbut : moy0 s0 Lire (n) Tant que n0 faire Dbut Moy moy*s+n)/(s+1) ss+1 lire (n) fin Afficher (moy) Fin

Exercice 15 Ecrire un Algorithme permettant la saisie dune suite dentiers se terminant par zro et vrifier si cette suite contient deux entiers conscutifs gaux en utilisant les structures tant que. 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lAlgorithme Spcifications : - donnes : suite dentier se terminant par zro - rsultat : vrai si deux entiers conscutifs, faux sinon. Solution en langage naturel : comparer lentier courant et le prcdent. Et tant que ils sont diffrents, on continu la lecture et tant que lentier courant est diffrent de zro. Structures de donnes : - entier : nombre courant - entier : nombre prcdent Algorithme : Algo : Entiers conscutifs Var : nc, np : entier {on dsignera par nc le nombre courant et np le nombre prcdent} Dbut Lire (nc) npnc-1 {pour tre sur que le nombre courant ne sera pas le mme que le nombre prcdent ds le dpart on affecte la valeur nc-1 au nombre prcdent. On aurait tout aussi bien pu lui donner la valeur zro) Tant que nc0 et np nc faire Dbut npnc lire (nc) fin Si nc0 alors crire ( oui ) Sinon crire ( non ) Fin

Refaire le mme Algorithme en utilisant une structure rpter jusqu' Algo : Entiers conscutifs Var : nc, np : entiers Dbut Lire (nc) Si nc 0 alors Rpter Dbut np nc lire (nc) jusqu' (nc==np OU nc==0) Si nc==0 alors crire ( oui ) Sinon crire ( non ) Fin

Exercice 16 Ecrire un Algorithme qui affiche le maximum dune suite se terminant par zro 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lAlgorithme Spcifications : - donnes : une suite dentiers se terminant par zro - rsultat : un entier : le maximum de cette suite Solution en langage naturel : comparer lentier courant avec le maximum et tant que nc<max on continue, sinon on affiche la rsultat et on continue, et tant que nc 0 Structures de donnes - n : entier courant (saisi) - max : entier max de la suite Algorithme : Algo : max suite Var : n, max : entiers Dbut Lire (n) Maxn Tant que n 0 faire Dbut Lire (n) Si max<n alors maxn Fin Afficher (max) Fin

Exercice 17 Ecrire un programme mettant en uvre le jeu suivant : Le premier utilisateur saisi un entier que le second doit deviner. Pour cela, il a le droit autant de tentatives quil souhaite. A chaque chec, le programme lui indique si lentier cherch est plus grand ou plus petit que sa proposition. Un score indiquant le nombre de coups jous est mis jour et affich lorsque lentier est trouv. Spcifications : - donnes : nombre entier - rsultat : nombre de tentatives

Solution en langage naturel : saisir un nombre entier par le premier joueur. Tant que le joueur 2 nsaisie, dire si n est > ou < nombre cherch, incrmenter de 1 et continuer. Quand le rsultat est trouv, afficher le nombre de tentatives. Structures de donnes : - a : nombre saisi par lutilisateur 1 - n : nombre saisi par lutilisateur 2 - t : tentatives Algorithme : Algo : devinette Var : a, n, t : entiers Dbut : Lire (a) Lire (n) t==0 Tant que an faire Dbut Si n>a alors crire ( nombre cherch plus petit ) Sinon crire ( nombre cherch plus grand ) tt+1 lire (n) fin crire (t+1) fin

Exercice 18 Ecrire un Algorithme permettant de calculer le PGCD de deux nombres en utilisant lastuce suivante : soustraite le plus petit des deux entiers du plus grand jusqu' ce quils soient gaux Ecrire le mme programme en utilisant lAlgorithme dEuclide : dune part en utilisant uniquement les structures TANT QUE, dautre part en utilisant uniquement les structures REPETER JUSQU'A. Algo : PGCD Var : a, b entiers Lire (a, b) Dbut a == ValAbs (a) b == ValAbs (b) Rpter Selon que a>b aa-b a<b bb-a jusqua a==b crire (a) Fin

Mme programme avec Euclide et des TANT QUE : Algo : PGCD Var : a, b, r entiers Lire (a, b) ra%b tant que r0 faire dbut ab br ra%b fin crire (b) fin

Mme programme avec Euclide et des REPETER JUSQU'A : Algo : PGCD Var : a, b, r entiers Lire (a, b) Rpter ra%b ab br jusqu' r==0 crire (b) fin

Exercice 19 Ecrire avec la commande POUR un Algorithme qui permet de faire la somme dune suite de nombre entre par lutilisateur. Faire la mme chose en comptant par pas de 1. Algo :somme_nombre Var : k, nb, n, somme : entier Dbut : Somme 0 Afficher ( combien voulez-vous entrer de nombres ? ) Lire (nb) Pour k de 1 nb faire Dbut Lire (n) Sommesomme + n Fin Afficher (somme) Fin Mme programme par pas de 1 : Algo : somme_entier Var : k, nb, n, somme : entiers Dbut : Somme0 Afficher ( combien voulez-vous entrer de nombres ? Lire (nb) Pour k de nb 1 par pas de 1 faire Dbut Lire (n) Sommesomme + n Fin Afficher (somme) Fin

10

Exercice 20 Traduire le POUR de lAlgorithme suivant en REPETER JUSQU'A : Algo : bidon Var : k, nb : entiers Dbut Lire (nb) Pour k de 1 nb faire Afficher (k) Fin Algo : Bidon Var : k, nb : entier Dbut Lire (nb) K1 Si nb>0 alors Rpter crire (k) Kk+1 Jusqu k>nb Fin

Exercice 21 Ecrire une fonction qui fait la somme des entiers compris dans un intervalle. Fonction : intervalle (a, b ; entiers) : entier Var : k, somme : entier Dbut Somme 0 Pour k de a b faire Sommesomme + k Retourner (somme) Fin

Exercice 22 Ecrire une fonction multiplication de a et b par addition successives. Fonction : multiplication (a, b : entiers) : entier Var : k, produit : entiers Dbut produit0 Pour k de 1 a faire Produitproduit + b Retourner (produit) Fin

11