IAP2 - Feuille de TP numéro 1
Premiers programmes C

Olivier Pons

Dernière mise à jour,27 octobre 2006

On vous conseille d'utiliser la commande de compilation :

gcc  -Wall -o nonDeExecutable NomDuSouce.c 

On vous demande de toujours donner l'interface de vos fonctions (au moins la pré (s'il y en a) et la post condition).

1  Prise en main

  1. Écrire un programme qui affiche bonjour à l'écran.
  2. Après l'avoir compilé puis testé, introduire volontairement des erreurs dans le code source. À chaque fois essayer de recompiler et analyser le ou les éventuels messages d'erreur. (Exemple d'erreur à introduire : fautes de frappe dans le nom de la fonction d'affichage, oubli de ;, ajout de ; après une directive …)

2  Conditionnelles

  1. Écrire une fonction max qui étant donnés deux entiers renvoie le plus grand des deux. Tester cette fonction depuis la fonction main.
  2. Écrire une fonction est_impair qui renvoie 1 si un entier est impair et 0 sinon. Tester cette fonction depuis la fonction main. On utilisera le fait qu'en C un entier i est pair si et seulement si i est égal à (i/2)*2.

3  Boucles

  1. Écrire une fonction affichant un triangle rempli d'étoiles sur un nombre de lignes donné. Tester cette fonction depuis la fonction main. Exemple de résultat (pour 8 lignes) :
    *
    **
    ***
    ****
    *****
    ******
    *******
    ********
    
  2. Écrire une fonction affichant la table de multiplication des nombres de 1 à 10 sous la forme d'une matrice. Tester cette fonction depuis la fonction main.
  3. Les boucles for peuvent être réécrites comme une boucle while, et vice-versa. Le programme suivant est-il correct ? sinon le corriger et le réécrire avec une boucle while.
    int main() {
    int count = 1;
    for( ; count <=5 ; count++) {
        
         printf("%d\n", count);
    }
    return 0;
    }
    
    
  4. Écrire une fonction binaire qui affiche un nombre entier positif en base dix sous la forme d'un nombre binaire. Par exemple le nombre décimal 13 sera affiché 1101. Tester cette fonction depuis la fonction main. Ne pas traiter le problème des zéro inutilement affichés.
  5. Écrire une fonction base qui étant donnés un nombre décimal et une base affiche le nombre dans la base. Par exemple le nombre base(10,3) sera affiché 101. Tester cette fonction depuis la fonction main.

4  Récursivité

  1. Écrire en C la fonction factorielle. Tester cette fonction depuis la fonction main. Écrire les versions itératives avec boucle for et while.
  2. Écrire une fonction récursive qui résout le problème des tour de Hanoi. Essayer de trouver une version itérative .

5  Débordement mémoire

Écrire une fonction qui calcul le plus grand entier short. Pour cela on initialise deux short i et j à zéro et 1. On les incrémente dans une boucle et on cherche à partir de quelle valeur de i, la condition i<j n'est plus vérifiée.

6  Le type article

  1. Écrire en C un programme calculant la date du lendemain d'une date donnée sous la forme de trois entiers. Ce programme utilisera les fonctions : est_bissextile, longueur_mois et lendemain. La fonction lendemain aura pour résultat un article à trois champs représenatnt la date du lendemain. Tester le programme depuis la fonction main. Remarque : ce programme a déjà été écrit en Caml (en TD ou en TP selon les groupes).

Ce document a été traduit de LATEX par HEVEA