Aller au contenu

Exercices en langage C/Structures de contrôle

Un livre de Wikilivres.

Structures conditionnelles

[modifier | modifier le wikicode]

Analyse de programme : choix multiple

[modifier | modifier le wikicode]

Ces exercices d'analyses doivent être réalisés sans compilateurs, à la main à l'aide d'un crayon et d'une feuille de papier.

Soit le programme suivant :

#include <stdio.h>
#include <stdlib.h>
int main(void) {
  unsigned char i=7;
  i=i/2; //"/": division entière...
  switch(i) {
    case 1 : (void)printf("Premier\n");break;
    case 2 : (void)printf("Deuxième\n");break;
    case 3 : (void)printf("Troisième\n");break;
    default : (void)printf("Non classe\n");
  }
  return EXIT_SUCCESS;
}

Qu'est ce qui sera affiché à l'écran lors de l'exécution de ce programme ?

Même question pour le programme :

#include <stdio.h>
#include <stdlib.h>
int main(void) {
  int i=18;
  i=i-(--i);
  switch(i) {
    case 1 : (void)printf("Premier\n");
    case 2 : (void)printf("Deuxième\n");
    case 3 : (void)printf("Troisième\n");
    default : (void)printf("Non classe\n");
  }
  return EXIT_SUCCESS;
}

Test simple : programme non complet

[modifier | modifier le wikicode]

Écrire la partie de programme réalisant la structure de contrôle demandée. On ne demande pas le programme en entier : pas les "include" pas le main()...

Un test sur une valeur dans la variable i : si i vaut 19 on écrit "OK" autrement on écrit "Rejet"

Tester votre âge

[modifier | modifier le wikicode]

Écrire un programme testage.c contenant une fonction main qui :

  • lit sur le clavier l'âge de l'utilisateur avec la fonction scanf;
  • teste si la réponse est valide par analyse du code retour de scanf et teste si la valeur est comprise entre 0 et 130;
  • affiche si l'utilisateur est majeur (>= 18 ans) ou mineur.

Structures répétitives

[modifier | modifier le wikicode]

Analyse de programme : boucle simple

[modifier | modifier le wikicode]

Cet exercice d'analyse doit être réalisé sans compilateur, à la main à l'aide d'un crayon et d'une feuille de papier. Soit le programme suivant :

#include <stdio.h>
#include <stdlib.h>
int main(void){
  int i;
  for (i=0;i<5;i++) {// "/": division entiere
    (void)printf("Module EC%d\n",(i+9)/(i+1));
  }
  return EXIT_SUCCESS;
}

Qu'affichera à l'écran l'exécution de ce programme ?

Analyse de programme : boucle simple et tableau

[modifier | modifier le wikicode]

Cet exercice d'analyse doit être réalisé sans compilateur, à la main à l'aide d'un crayon et d'une feuille de papier.

Soit le programme suivant :

#include <stdio.h>
#include <stdlib.h>
int main(void){
  unsigned char i;
  unsigned char tab[5];
//initialisation du tableau
  tab[0]=1;tab[1]=2;tab[2]=4;tab[3]=8;tab[4]=16;
  for (i=0;i<5;i++) {
    (void)printf("Le %d° elt est %d\n",i+1,tab[i]);
  }
  return EXIT_SUCCESS;
}

Qu'affichera à l'écran l'exécution de ce programme ?

Somme d'entiers (boucle simple)

[modifier | modifier le wikicode]

Écrire un programme somme demandant à l'utilisateur de taper 10 entiers et qui affiche leur somme. Le programme ne devra utiliser que 3 variables et ne devra pas utiliser de tableau.

Analyse de programme (double boucle)

[modifier | modifier le wikicode]

Ces exercices d'analyses doivent être réalisés sans compilateurs, à la main à l'aide d'un crayon et d'une feuille de papier.

  • Soit le programme suivant :
#include <stdio.h> // pour printf
#include <stdlib.h> // pour system
main() {
  int i,j;
    system("clear"); //efface ecran sous linux (system("cls"); sous Windows)
    for(i=0;i<5;i++){
      for(j=i;j<5;j++)
        (void)printf("**");
      (void)printf("\n");
    }
    return EXIT_SUCCESS;
}

Que sera-t-il affiché à l'écran lors d'une exécution de ce programme ?

  • Même question pour le programme suivant :
#include <stdio.h> // pour printf
#include <stdlib.h> // pour system
main() {
  int i,j;
    system("clear"); //efface ecran sous linux (system("cls"); sous Windows)
    for(i=0;i<5;i++){
      for(j=5-i;j<5;j++)
        (void)printf("++");
      (void)printf("\n");
    }
    return EXIT_SUCCESS;
}

Triangle d'étoiles (double boucles)

[modifier | modifier le wikicode]

Compléter la fonction afficherTriangle dans le programme ci-dessous : cette fonction devra afficher un triangle rempli d'étoiles (*) sur un nombre de lignes donné passé en paramètre, exemple :

*
**
***
****
*****
******
*******
********
  • 1ère version  : sans utiliser de tableau à l'aide de deux boucles for imbriquées.
  • 2ème version : avec une seule boucle for et un tableau de chaîne de caractère où vous accumulerez des étoiles.
/*
Nom : etoile.c
Compilation : gcc -Wall -std=c99 -o etoile.exe etoile.c
Exécution : ./etoile.exe
*/
#include <stdio.h>
#include <stdlib.h>

/*
Nom ... : afficherTriangle
Role .. : Afficher un triangle d'etoiles
Parametre :
	nbLignes : nombre de lignes du triangle
*/
static void afficherTriangle(const int nbLignes)
{
// Partie à compléter
} // static void afficherTriangle(...

// Fonction principale pour test
int main(void)
{
	int nbLignes = 0;
	int nbChampsLu = 0;
	int codeRetour = EXIT_SUCCESS;

	(void)fputs("Lignes ? ", stdout);
	nbChampsLu = scanf("%u", &nbLignes);
	if (nbChampsLu == 1 && nbLignes > 0)
	{
		afficherTriangle(nbLignes);
	}
	else
	{
		(void)fputs("Erreur : Vous devez entrer un entier strictement positif !\n",
			stderr);
		codeRetour = EXIT_FAILURE;
    }

    return codeRetour;
} // int main(...