Vous êtes sur la page 1sur 6

I.

Eléments de base
II. Opérateurs et expressions
III. Instructions
IV. Fonctions
V. Objets structurés
VI. Pointeurs
VII. Entrées-sorties
VIII. Autres éléments du langage C
Exercice langage C : calculer l'exponentielle de x et les
nombres parfaits inférieurs à une certaine limite
Exercice 1:

Ecrire un programme qui permet de calculer l'exponentielle de x en utilisant la série :

x x2 x3 x4

exponentielle de x = 1 + --- + --- + --- + --- + ....

1! 2! 3! 4!

Ajouter une boucle dans laquelle on demande à l'opérateur s'il veut faire une autre opération.

Exercice 2:

Ecrire un algorithme qui permet de trouver tous les nombres parfaits inférieurs à une certaine limite

Un nombre entier est parfait s'il est égal à la somme de ses diviseurs (sauf lui-même).

Ex : 6 = 1 + 2 + 3 est parfait

1 /* Calcul de l'exponentielle selon la formule expo x^i/i! (i dans [0,n])


2 * Attention, cette version cumule les erreurs commises à chaque étape */
3
4 #include
5
6 int main()
7 {
8 double x, expo, facteur;
9 int i, n;
10 char encore;
11
12 do
13 {
14 expo = 1.0;
15 facteur = 1.0;
16 printf("Entrez x : "); scanf("%lf", &x);
17 printf("Entrez n : "); scanf("%d", &n);
18
19 for (i=1; i<=n; i++)
20 {
21 facteur = facteur * (x/i);
22 expo = expo + facteur;
23 }
24
25 printf("exp(%f) = %20.20f\n", x, expo);
26
27 printf("Encore un calcul (o/n) ? ");
28 scanf(" %c", &encore);
29 }
30 while (encore == 'o' || encore == 'O');
31
32 return 0;
33 }
34
35 Exercice 2:
36
37
38 /* Calcul des nombres parfaits */
39
40 #include
41
42 int main()
43 {
44 int nombre, somme, limite, i;
45
46 printf("Limite : "); scanf("%d", &limite);
47
48 for (nombre=1; nombre<=limite; nombre++)
49 {
50 somme = 0;
51 for (i=1; i<=nombre/2; i++)
52 {
53 if (nombre % i == 0)
54 {
55 somme = somme + i;
56 }
57 }
58 if (nombre == somme)
59 {
60 int prem = 1;
61 printf("%d est un nombre parfait (", nombre);
62 /* Nous sommes obliges de refaire tout le calcul...
63 * mais bientot, nous saurons faire des tableaux
64 * pour eviter ca. */
65 somme = 0;
66 for (i=1; i<=nombre/2; i++)
67 {
68 if (nombre % i == 0)
69 {
70 somme = somme + i;
71 if (prem == 1)
72 {
73 prem = 0;
74 }
75 else
76 {
77 printf(" + ");
78 }
79 printf("%d", i);
80 }
81 }
82 printf(")\n");
83 }
84 }
85
86 return 0;
87 }
88
Exercice 2:

Calculez par des soustractions successives le quotient entier et le reste de la division entière de deux entiers
entrés au clavier.

Solution :
#include <stdio.h>
main()
{
int NUM; /* numérateur de la division entière */
int DEN; /* dénominateur de la division entière */
int DIV; /* résultat de la division entière */
int RES; /* reste de la division entière */

printf("Introduisez le numérateur : ");


scanf("%d", &NUM);
printf("Introduisez le dénominateur : ");
scanf("%d", &DEN);

RES=NUM;
DIV=0;
while(RES>=DEN)
{
RES-=DEN;
DIV++;
}

/* ou mieux encore : */
/*
for (RES=NUM, DIV=0 ; RES>=DEN ; DIV++)
RES-=DEN;
*/

printf(" %d divisé par %d est %d reste %d\n", NUM, DEN, DIV, RES);
return 0;
}
Exercice 3:
Calculez la factorielle N! = 1*2*3*...*(N-1)*N d'un entier naturel N en respectant que 0!=1.

1. a) Utilisez while,
2. b) Utilisez for.

Solution :

1. a) avec la boucle while,

#include <stdio.h>
main()
{
int N; /* La donnée */
int I; /* Le compteur */
double FACT; /* La factorielle N! - Type double à */
/* cause de la grandeur du résultat. */

do
{
printf("Entrez un entier naturel : ");
scanf("%d", &N);
}
while (N<0);

/* a */
/* Pour N=0, le résultat sera automatiquement 0!=1 */
I=1;
FACT=1;
while (I<=N)
{
FACT*=I;
I++;
}

printf ("%d! = %.0f\n", N, FACT);


return 0;
}
1. b) avec la boucle for,

#include <stdio.h>
main()
{
int N; /* La donnée */
int I; /* Le compteur */a
double FACT; /* La factorielle N! - Type double à */
/* cause de la grandeur du résultat. */

do
{
printf("Entrez un entier naturel : ");
scanf("%d", &N);
}
while (N<0);

for (FACT=1.0, I=1 ; I<=N ; I++)


FACT*=I;

printf ("%d! = %.0f\n", N, FACT);


return 0;
}