td1 correction

6
Universit´ e Paris 7 C IUP2 Ann´ ee 2004-2005 TD n 1 - Correction Structures de contrˆ ole 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. Compl´ eter le programme en d´ efinissant la fonction additionne et en ajoutant des com- mentaires dans la fonction main expliquant le d´ eroulement du programme. 2. Compiler le programme avec gcc ` a l’aide de la commande suivante : gcc -Wall -o premiers_pas premiers_pas.c L’option -Wall permet d’afficher tous les warnings qui correspondent ` a des anomalies potentielles n’empˆ echant pas la production de code ex´ ecutable. L’option -o permet de pr´ eciser le nom de l’ex´ ecutable produit par la compilation. 3. Ex´ ecuter le programme ` a l’aide de la commande ./premiers_pas 4. Ex´ ecuter la commande unix man gcc pour d´ ecouvrir 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) ; 1

Upload: abdelghani-moro

Post on 23-Jan-2016

94 views

Category:

Documents


0 download

DESCRIPTION

4

TRANSCRIPT

Page 1: Td1 Correction

Universite Paris 7 CIUP2 Annee 2004-2005

TD n◦1 - 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 com-mentaires dans la fonction main expliquant le deroulement du programme.

2. Compiler le programme avec gcc a l’aide de la commande suivante :gcc -Wall -o premiers_pas premiers_pas.c

L’option -Wall permet d’afficher tous les warnings qui correspondent a des anomaliespotentielles n’empechant pas la production de code executable. L’option -o permet depreciser le nom de l’executable produit par la compilation.

3. Executer le programme a l’aide de la commande ./premiers_pas

4. Executer la commande unix man gcc pour decouvrir les autres options du compilateurgcc.

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) ;

1

Page 2: Td1 Correction

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 estbissextile. On rappelle qu’une annee est bissextile si c’est un multiple de 4 et que ses deuxderniers 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!") ;

elseprintf("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 qu’il saisisse deux entiers m et n et qu’il affiche m lignes de netoiles.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") ;}

}

2

Page 3: Td1 Correction

Exercice 4 Ecrire un programme qui cree un tableau d’entiers 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 d’afficher tous les entiers nons nuls du tableau.

3. Ajoutez une boucle qui permet de calculer la somme des entiers du tableau, et affichez leresultat.

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 C’est plus, C’est moins qui consistea cacher un nombre qu’un utilisateur devra trouvrer. Le programme indique a chaque reponsesi le nombre cache par le programme est plus petit ou plus grand que le nombre propose. Vousutiliserez 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") ;

elseif (essai < secret)printf("C’est plus!\n") ;

else

3

Page 4: Td1 Correction

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

}

Exercice 6 Ecrire une fonction triangle affichant un triangle d’etoiles de hauteur n avec : 1symbole * sur la 1-iere ligne, 2 symboles * sur la 2-ieme ligne, etc. Les etoiles seront diposeescomme 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 d’etoilesde 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");}

4

Page 5: Td1 Correction

}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 l’utilisateur.On utilisera pour cela l’algorithme 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 l’echanger avec l’element a laposition n.

Ainsi, on cherche le plus petit element a partir de la position 0, et on l’echange avec celui dela position 0, puis on cherche le plus petit element a partir de la position 1 et on l’echange aveccelui 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

Page 6: Td1 Correction

Ecrire un programme qui affiche le triangle ”numerique” ci-dessous en utilisant des bouclesimbriquees :

1232

345434567654567898765678901098767890123210987

890123454321098901234567654321090123456789876543210

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") ;}

}

6