Notions | Exercices 11-15

Enoncé exercice 11

Ecrire un programme C qui lit un entier V représentant un volume en litres. Puis calcule le nombre de canettes de 33cl que peut remplir en entier une citerne contenant un volume V de soda.

Correction exercice 11

Dans le programme qu’on va réaliser, on aura à lire et à afficher des données. Donc il faudra utiliser la fonction de lecture scanf et celle d’écriture printf. Ceci va nous obliger à mentionner la bibliothèque stdio.h, qui fait fonctionner ces deux fonctions (ligne 1).

Au sein de la fonction main, on aura à déclarer les variables nécessaires. Deux variables entières v et n sont dans notre cas assez suffisantes. Pour faire ceci, il suffira d’utiliser le mot int, qui représente le type entier en langage C, suivi des identifiants des deux variables, séparés par une virgule et le tout terminé par un point-virgule (ligne 5).

Une fois les variables déclarées, on va entrer dans le vif du sujet. C’est-à-dire dans la partie opérationnelle du programme. Et on va demander à l’utilisateur d’entrer le volume V. En exploitant dans ceci la fonction printf qui permet d’afficher des messages sur la console d’exécution (ligne 6). Au cours de l’exécution du programme, et juste après l’affichage de ce message, l’utilisateur va saisir un nombre. Pour pouvoir le lire vers la variable v, on va faire appel à la fonction scanf (ligne 7).

Maintenant que la valeur du volume de la citerne est stockée dans la variable v, il nous faudra calculer le nombre de canettes qu’on peut remplir avec du soda. Il est clair qu’on doit diviser v par 0.33 (qu’est 33cl en litres). En effectuant cette division, le résultat obtenu sera un réel. Car l’un des deux opérandes est un réel (0.33). Ce qui nous intéresse, est seulement la partie entière de cette division, puisqu’on cherche le nombre de canettes pouvant être remplies en entier. Pour l’obtenir, on doit convertir ce résultat vers le type int, en exploitant la conversion de type du langage C. On affecte ensuite le résultat converti à la variable entière n (ligne 8).

Finalement, on utilisera de nouveau la fonction printf pour afficher la valeur de n (ligne 9). Et on termine le programme en utilisant l’instruction system(“pause” ) pour figer la console d’exécution après l’affichage du résultat et éviter ainsi sa disparition.

Solution exercice 11
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int v,n;
    printf("Entrer le volume de la citerne en litres:\n");
    scanf("%d",&v);
    n=(int)(v/0.33);
    printf("Le nombre de cannettes que peut remplir la citerne est: %d.\n",n);
    system("pause");
    return 0;
}
Enoncé exercice 12

Ecrire un programme C qui permet de tracer la forme suivante :

Correction exercice 12

Dans ce programme, on va utiliser les deux caractères * et – en plus de l’espace pour tracer la forme demandée. Il est clair que ce programme ne va pas nécessiter des entrées à lire. Ce qui explique l’absence de la fonction scanf dans le programme. En plus de ceci, on n’aura pas besoin de variables. Par contre, le programme est complétement basé sur fonction printf.

La stratégie pour réussir cet exercice, est de consacrer à chaque ligne de la forme à tracer une fonction printf. Cette fonction va se charger de la tracer en entier. En plus de ça, il va falloir avoir une démarche en tête. La démarche proposée ici, permet de faire le tracé en plusieurs étapes.

La première étape consiste à créer la première ligne dans l’éditeur et la dupliquer huit fois avec des copier/coller pour avoir un total de neuf lignes comme suit :

La deuxième étape, consiste à construire la deuxième et l’avant dernière ligne en supprimant les symboles au milieu et en les remplaçant par des espaces. Ceci va donner:

Dans la troisième étape, on va créer les colonnes vides sur les deux côtés et avoir comme résultat :

Ensuite, il faudra avec un peu d’attention créer les deux colonnes vides du milieu. Toujours en supprimant les caractères adéquats et en les remplaçant par des espaces.

Après la création de la première colonne du milieu :

Et après la création de la deuxième :

Il est important de faire attention à ne pas oublier le retour à la ligne mentionné à la fin de chaque fonction printf.

Solution exercice 12
#include<stdio.h>
#include<stdlib.h>
int main()
{
	printf("--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--\n");
	printf("--*                                       *--\n");
	printf("--*   *-*-*-*-*   *-*-*-*-*   *-*-*-*-*   *--\n");
	printf("--*   *-*-*-*-*   *-*-*-*-*   *-*-*-*-*   *--\n");
	printf("--*   *-*-*-*-*   *-*-*-*-*   *-*-*-*-*   *--\n");
	printf("--*   *-*-*-*-*   *-*-*-*-*   *-*-*-*-*   *--\n");
	printf("--*   *-*-*-*-*   *-*-*-*-*   *-*-*-*-*   *--\n");
	printf("--*                                       *--\n");
	printf("--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--\n");
	printf("\n\n");
    system("pause");
    return 0;
}
Enoncé exercice 13

Ecrire un programme C qui lit un nombre réel et affiche sa partie fractionnaire.

Exemple : la partie fractionnaire de 3.09 est 0.09.

Correction exercice 13

Dans ce programme, on va essayer d’extraire la partie fractionnaire d’un nombre réel. En termes de variables, on peut se servir de deux variables de type float a et b (ligne 5). La première pour contenir le nombre réel qui sera entré par l’utilisateur. Et la deuxième pour recevoir sa partie fractionnaire. Il est à noter qu’on peut réaliser ce programme, en se limitant seulement à une seule variable.

Une fois les variables déclarées, on va afficher un message à l’utilisateur lui demandant d’entrer un nombre réel, et ceci en utilisant la fonction d’affichage printf (ligne 6). Le nombre qui sera entré, sera lu vers la variable a à l’aide de la fonction scanf (ligne 7).

La variable a étant maintenant prête, on pourra alors passer au traitement qui va extraire sa partie fractionnaire. Plusieurs démarches peuvent être adoptées. La démarche suivie dans ce programme est toute simple. Elle consiste à soustraire de a sa partie entière.

La partie entière d’un nombre réel, est obtenue on effectuant une opération de conversion de type vers le type int. Elle est exécutée en précédant la variable a par le mot int entre parenthèses (int). Donc la partie fractionnaire de a est a-(int)a qui sera affectée à la variable b (ligne 8).

On terminera le programme en affichant la valeur de la variable b comme étant la partie fractionnaire de a (ligne 9).

Solution exercice 13
#include<stdio.h>
#include<stdlib.h>
int main()
{
	float a,b;
	printf("Entrer un nombre reel:\n");
	scanf("%f",&a);
	b=a-(int)a;
	printf("La partie fractionnaire de %f est %f.\n",a,b);
	system("pause");
    return 0;
}
Enoncé exercice 14

Ecrire un programme C qui lit les dimensions (nombres entiers) a, b et c d’un parallélépipède rectangle puis calcule et affiche sa superficie.

Correction exercice 14

Un parallélépipède rectangle est un cas particulier du parallélépipède où toutes les faces sont des rectangles. Sa superficie est la somme des superficies de ses six faces. Sur la figure ci-dessous les faces en question sont les deux faces vertes, les deux faces rouges et les deux faces bleues.

Puisqu’il s’agit de rectangle, l’aire de chacune des trois faces, sera obtenue en multipliant les longueurs de ses deux côtés.
Comme ça, l’aire d’une face verte est b*c, de celle rouge a*b et de la bleue a*c. Donc la superficie totale d’après ce que vient d’être dit est 2*(a*b+a*c+b*c).

En ce qui concerne le programme, on va commencer par la déclaration de quatre variables a, b, c et s de type int (ligne 5). Les trois premières pour recevoir les dimensions du parallélépipède. Et la quatrième pour contenir sa superficie. Puis, on va demander à l’utilisateur, à travers la fonction printf, d’entrer les trois dimensions (ligne 6). Qui seront lus vers les variables a, b et c en utilisant la fonction scanf (ligne 7). Ensuite viendra le calcul de la superficie et son affectation à la variable s (ligne 8).

On terminera le programme en affichant la valeur de la variable s, comme étant la superficie du parallélépipède. Et ce, par le biais de la fonction printf (ligne 9).

Solution exercice 14
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a,b,c,s;
	printf("Entrer les dimensions du parallelepipede:\n");
	scanf("%d%d%d",&a,&b,&c);
	s=2*(a*b+a*c+b*c);
	printf("La superficie du parallelepipede est: %d\n",s);
	system("pause");
	return 0;
}
Enoncé exercice 15

Ecrire un programme C qui lit un entier n. Puis affiche les trois entiers impairs qui le suivent.

Exemple : pour 5 on affiche 7 9 11, et pour 2 on affiche 3 5 7.

Correction exercice 15

Dans cet exercice, il est demandé d’afficher les trois entiers impairs qui viennent directement après un nombre entré par l’utilisateur. La difficulté de cet exercice réside dans la nature du nombre entré. Il pourra être pair comme il pourra être impair. Et ceci selon la volonté de l’utilisateur. A ce stade où l’on est de notre apprentissage du langage C, on ne peut pas distinguer entre les deux. Donc il faudra penser à une méthode qui marche pour les deux cas. Indépendamment de la parité du nombre.

La solution proposée se base sur le fait que pour un nombre impair donné et le nombre pair qui le suit, le résultat est le même. Par exemple, si l’entrée est soit 5 ou 6, les séries de nombres impairs à afficher sont identiques. Elle sera 7, 9 et 11.

Du coup, on doit penser à une formule qui va permettre d’incrémenter les nombres impairs par 1 et qui garde intacts les nombres pairs (ligne 8). Si on arrive à cet objectif, il suffira d’ajouter alors 1, 3 puis 5 au nombre pair constitué, pour avoir ainsi la série de nombres impairs souhaitée.

Cette formule se basera sur la division entière par 2. Car elle donnera le même résultat pour deux nombres consécutifs où le premier est pair. Avec un peu de tâtonnement, on arrivera au fait qu’il faudra ajouter un 1 au nombre entré puis diviser cette somme par 2, et multiplier ensuite le résultat par 2 pour avoir le nombre pair souhaité. En appliquant cette formule pour les deux nombres 5 et 6 on obtient :


Où ⌊ ⌋ est le symbole de la partie entière.

Donc, indépendamment de la parité du nombre entré on peut créer la série des trois nombres impairs qui le suivent en se basant sur le nombre calculé. En revenant à l’exemple traité, si on ajoute 1, 3 puis 5 au nombre 6 on va avoir 7, 9 puis 11 qui est la série recherchée et qui sera valable autant pour 5 qu’à 6.

Solution exercice 15
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n,m;
	printf("Entrer un entier:\n");
	scanf("%d",&n);
	m=((n+1)/2)*2;
	printf("Les trois nombres impairs qui suivent %d sont: %d %d %d.\n",n,m+1,m+3,m+5);
	system("pause");
	return 0;
}