Vous êtes sur la page 1sur 6

Universite Paris 7

IUP2

C
Annee 2004-2005

TD n1 - Correction
Structures de controle

Exercice 1 Ecrire et sauvegarder le programme suivant sous le nom premiers_pas.c :


#include <stdio.h>
int main(void)
{
int resultat ;
int add1,add2 ;
printf( "Bonjour!\nDonnez moi deux entiers que je les additionne : \n" ) ;
scanf( "%d %d" , &add1 , &add2 ) ;
resultat = additionne( add1 , add2 ) ;
printf( "%d plus %d font %d!\n" , add1 , add2 , resultat ) ;
return 0 ;
}
1. Completer le programme en definissant la fonction additionne et en ajoutant des commentaires dans la fonction main expliquant le deroulement du programme.
2. Compiler le programme avec gcc `a laide de la commande suivante :
gcc -Wall -o premiers_pas premiers_pas.c
Loption -Wall permet dafficher tous les warnings qui correspondent a` des anomalies
potentielles nempechant pas la production de code executable. Loption -o permet de
preciser le nom de lexecutable produit par la compilation.
3. Executer le programme `a laide de la commande ./premiers_pas
4. Executer la commande unix man gcc pour decouvrir les autres options du compilateur
gcc.
Correction :
#include <stdio.h>
int additionne(int m , int n){
return (m + n) ;
}
int main(void)
{
int resultat ;
int add1,add2 ;
printf("Bonjour!\nDonnez moi deux entiers que je les additionne:\n") ;
scanf("%d%d",&add1 , &add2) ;

resultat = additionne(add1,add2) ;
printf("%d plus %d font %d!\n", add1 , add2 , resultat) ;
return 0 ;
}

Exercice 2 Ecrire un programme qui permet de saisir une annee et calcule si cette annee est
bissextile. On rappelle quune annee est bissextile si cest un multiple de 4 et que ses deux
derniers chiffres sont differents de 0, ou si elle est divisible par 400.
Correction :
#include <stdio.h>
int main(void){
int annee ;
printf("Donnez moi une annee:\n") ;
scanf("%d",&annee) ;
if ( ((annee%4 == 0) && (annee%100 != 0)) || (annee%400 == 0) )
printf("Annee bissextile!") ;
else
printf("Annee non bissextile") ;
return 0 ;
}

Exercice 3 Boucle for


1. Ecrire un programme qui saisit un entier n, et qui affiche une ligne de n etoiles :
Exemple pour n = 5 :
*****
2. Modifiez ce programme pour quil saisisse deux entiers m et n et quil affiche m lignes de n
etoiles.
Exemple pour m = 3 et n = 5 :
*****
*****
*****
Correction :
#include <stdio.h>
int main(void){
int m,n ;
int i,j ;
printf("Donnez moi deux entiers\n") ;
scanf("%d%d",&m,&n) ;
for( i = 0 ; i < m ; i++){
for( j = 0 ; j < n ; j++)
printf("*") ;
printf("\n") ;
}
}

Exercice 4 Ecrire un programme qui cree un tableau dentiers de taille 10.


1. Ajoutez une boucle qui permet de remplir le tableau avec des entiers saisis au clavier
2. Ajoutez une boucle qui permet dafficher tous les entiers nons nuls du tableau.
3. Ajoutez une boucle qui permet de calculer la somme des entiers du tableau, et affichez le
resultat.
Correction :
#include <stdio.h>
int main(void){
int tab[10] ;
int saisie ;
int i ;
int somme ;
for( i = 0 ; i< 10 ; i++ ){
printf("Donnez moi un entier:\n") ;
scanf("%d",&saisie) ;
tab[i] = saisie ;
}
for( i = 0 ; i < 10 ; i++)
if ( tab[i] != 0 )
printf("%d ",tab[i]) ;
printf("\n") ;
for( i = 0 ; i < 10 ; i++){
somme = somme + tab[i] ;
}
printf("%d\n",somme) ;
}

Exercice 5 Ecrire un programme qui implemente le jeu Cest plus, Cest moins qui consiste
`a cacher un nombre quun utilisateur devra trouvrer. Le programme indique `a chaque reponse
si le nombre cache par le programme est plus petit ou plus grand que le nombre propose. Vous
utiliserez une boucle do ... while
Correction :
#include <stdio.h>
int main(void){
int secret = 12 ;
int essai ;
do{
printf("Essayez de deviner le nombre secret:\n") ;
scanf("%d",&essai) ;
if (essai == secret)
printf("Gagne!\n") ;
else
if (essai < secret)
printf("Cest plus!\n") ;
else

printf("Cest moins!\n") ;
} while(essai != secret) ;
return 0 ;
}

Exercice 6 Ecrire une fonction triangle affichant un triangle detoiles de hauteur n avec : 1
symbole * sur la 1-i`ere ligne, 2 symboles * sur la 2-i`eme ligne, etc. Les etoiles seront diposees
comme ceci :
*
**
***
****
*****
Testez cette fonction dans un programme.
Les derniers exercices sont plus difficiles.
Exercice 7 Ecrire `a present une fonction triangle centre(int n) affichant un triangle detoiles
de hauteur n dont la pointe sera centree, comme ceci :
*
***
*****
*******
*********
Testez cette fonction dans un programme.
Correction :
#include <stdio.h>
void triangle(int n){
int i,j ;
for(i = 1 ; i <= n ; i++){
for(j = 0 ; j < i ; j++){
printf("*") ;
}
printf("\n") ;
}
}
void triangle_centre(int n) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < (n - 1) - i; j++)
printf(" ");
for (j = 0; j < 2*i + 1; j++)
printf("*");
printf("\n");
}

}
int main(void){
int saisie ;
printf("Entrez un entier:\n") ;
scanf("%d",&saisie) ;
triangle(saisie) ;
triangle_centre(saisie) ;
return 0 ;
}

Exercice 8 Ecrire un programme qui trie un tableau de taille 10, saisi par lutilisateur.
On utilisera pour cela lalgorithme du tri par selection qui consiste `a chercher dans le tableau,
`a partir de la position n, le plus petit element du tableau et de lechanger avec lelement `a la
position n.
Ainsi, on cherche le plus petit element `a partir de la position 0, et on lechange avec celui de
la position 0, puis on cherche le plus petit element `a partir de la position 1 et on lechange avec
celui de la position 1, etc...
Correction :
#include <stdio.h>
int main(void){
int tab[10] ;
int saisie ;
int i,j ;
int echange ;
int minimum ;
int indice_minimum ;
for( i = 0 ; i< 10 ; i++ ){
printf("Donnez moi un entier:\n") ;
scanf("%d",&saisie) ;
tab[i] = saisie ;
}
for( i = 0 ; i < 10 ; i++){
minimum = tab[i] ;
indice_minimum = i ;
for( j = i ; j < 10 ; j++){
if (minimum > tab[j]){
minimum = tab[j] ;
indice_minimum = j ;
}
}
echange = tab[indice_minimum] ;
tab[indice_minimum] = tab[i] ;
tab[i] = echange ;
}
for( i = 0 ; i< 10 ; i++ )
printf("%d",tab[i]) ;
}

Exercice 9 A la limite du casse-tete...


5

Ecrire un programme qui affiche le triangle numerique ci-dessous en utilisant des boucles
imbriquees :
1
232
34543
4567654
567898765
67890109876
7890123210987
890123454321098
90123456765432109
0123456789876543210
Correction :
#include <stdio.h>
main(){
int i,j ;
for( i = 1 ; i <= 10 ; i++){
for( j = i+1 ; j <= 10 ; j++)
printf(" ") ;
for( j = i ; j < (2 * i-1) ; j++)
printf("%d",j%10) ;
for(; j>=i ; j--)
printf("%d",j%10) ;
printf("\n") ;
}
}