td1 correction

Post on 23-Jan-2016

94 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

4

TRANSCRIPT

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

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

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

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

}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

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

top related