Conditions | Exercices 1-5

Enoncé exercice 1

Ecrire un programme C qui permet de dire si un entier est pair ou impair.

Correction exercice 1

Comme on en est l’habitude jusqu’à l’instant, on commence par la lecture de l’entier sur lequel on va effectuer le test. Ceci va être fait vers la variable entière a (ligne 7).

On rappelle maintenant qu’un entier sera pair s’il admet 2 comme diviseur, dans l’autre cas il sera dit impair. En d’autres termes, a sera impair si le reste de sa division sur 2 est égal à 1, et dans l’autre cas il sera pair.

L’opérateur qui donne le reste de la division en langage C, est appelé modulo. Il est noté %. Tout ce qu’il faut donc faire, est un simple test sur la valeur de a%2. Si elle est égale à 1 il s’agira d’un nombre impair, sinon d’un nombre pair. Donc la condition pour que a soit impair est : a%2==1 (il faut faire la différence entre == qui veut dire égalité et = l’opérateur d’affectation). Si cette dernière condition est vérifiée, le programme va exécuter le bloc d’instructions de if (entre les deux accolades des lignes 9 et 11) qui comporte une fonction printf qui va informer l’utilisateur que le nombre saisi est impair. En même temps le bloc de else sera ignoré.

Dans l’autre cas, c’est-à-dire lorsque a%2 est égal à 0, c’est le bloc de esle qui sera exécuté, et un message indiquant que le nombre est pair sera affiché par la fonction printf (ligne 14).

Solution exercice 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a;
    printf("Donnez un entier:\n");
    scanf("%d",&a);
    if(a%2==1)
    {
       printf("%d est impair\n",a);
    }
    else
    {
       printf("%d est pair\n",a);
    }
    system("pause");
    return 0;
}
Enoncé exercice 2

Ecrire un programme C qui permet de comparer deux entiers a et b, et d’afficher selon le cas l’un des messages suivants: a=b, a>b ou a<b.

Correction exercice 2

On commence comme toujours par la lecture des deux entiers à comparer, et ceci à l’aide de la fonction scanf et vers les variables entières a et b (ligne 7).

La première condition à être vérifiée est l’égalité entre a et b (a==b). Si celle-ci est vraie, le bloc du premier if sera exécuté et le message a=b sera affiché (ligne 10).

Dans le cas où cette dernière condition n’est pas vraie, c’est le bloc else du premier if qui sera alors exécuté. à l’intérieur de celui-ci, on trouve un deuxième test effectué sur la condition a<b. Si cette condition est vraie, le message correspondant sera affiché, et dans l’autre cas c’est l’autre bloc else qui sera exécuté et le message a>b sera affiché.

Ainsi tous les trois cas sont traités et aucun test redondant n’est rencontré.

Solution exercice 2
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a,b;
    printf("Donnez les deux entiers a comparer:\n");
    scanf("%d%d",&a,&b);
    if(a==b)
    {
       printf("%d=%d\n",a,b);
    }
    else
    {
       if(a<b)
       {
          printf("%d<%d\n",a,b);
       } 
       else
       {
          printf("%d>%d\n",a,b);
       }
    }
    system("pause");
    return 0;
}
Enoncé exercice 3

Ecrire un programme C qui lit trois entiers pour les afficher ensuite dans un ordre croissant.

Correction exercice 3

Dans cet exercice il est demandé de trier trois entiers a, b et c dans un ordre croissant. C’est-à-dire de les afficher du plus petit au plus grand. On va traiter cet exercice d’une manière très simple, en suivant la logique suivante: si a est le plus grand, on compare alors b et c pour trouver le nombre le plus petit et du coup celui du milieu.

De cette façon on est devant trois cas possibles, au sein de chacun d’eux une bifurcation en deux sous cas :

  • Si a est le plus grand : b>=c ou c>=b;
  • Si b est le plus grand : c>=a ou a>=c;
  • Si c est le plus grand : b>=a ou a>=b.

Ces trois cas seront traités séparément, et d’une manière similaire. En conséquence seul le premier cas sera détaillé ici (lignes 8-12).

Le nombre a est le plus grand peut être décomposé en a>=b et a>=c. Le symbole du et en langage C est &&. Donc (si a est le plus grand) correspond à : if(a>=b && a>=c).

A l’intérieur du bloc de ce dernier if on doit faire la comparaison entre b et c. Si b est plus grand que c on doit afficher alors les trois nombre dans cet ordre : c b a (ligne 10). Et dans l’autre cas on les affiche dans l’ordre b c puis a (ligne 11).

On rappelle que dans le cas où on n’a qu’une seule instruction dans un bloc de if ou de else on peut enlever ces accolades.

Solution exercice 3
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a,b,c;
    printf("Donnez 3 entiers:\n");
    scanf("%d%d%d",&a,&b,&c);
    if(a>=b && a>=c)
    {
       if(b>=c) printf("%d %d %d\n",c,b,a);
       else printf("%d %d %d\n",b,c,a);
    }
 
    if(b>=a && b>=c)
    {
       if(a>=c) printf("%d %d %d\n",c,a,b);
       else  printf("%d %d %d\n",a,c,b);
    }
 
    if(c>=a && c>=b)
    {
       if(a>=b) printf("%d %d %d\n",b,a,c);
       else printf("%d %d %d\n",a,b,c);
    }  
    system("pause");
    return 0;
}
Enoncé exercice 4

Ecrire un programme C qui lit un nombre réel et détermine s’il est entier ou non.

Correction exercice 4

L’astuce de cet exercice est de tout simplement comparer un nombre réel entré avec sa partie entière. S’ils sont égaux le nombre est entier, sinon il ne l’est pas.

On va commencer donc par la lecture du nombre réel, sur lequel on va effectuer le test, vers la variable de type float x (ligne 7). Une fois fait, on va procéder au calcul de sa partie entière. Chose qui se fera en exploitant la technique de conversion de type.

La partie entière de x est donc (int) x qui sera comparée avec x pour afficher ensuite sa nature en utilisant la structure de contrôle if else (lignes 8-9).

Solution exercice 4
#include<stdio.h>
#include<stdlib.h>
int main()
{
    float x;
    printf("Donnez un reel:\n");
    scanf("%f",&x);
    if(x==(int)x) printf("%f est un entier.\n",x);
    else printf("%f n'est pas un entier.\n",x);      
    system("pause");
    return 0;
}
Enoncé exercice 5

Ecrire un programme C qui lit un caractère et détermine s’il fait partie des alphabets ou non. Et s’il l’est, dire en plus s’il est une minuscule ou une majuscule.

Correction exercice 5

On commence par la lecture du caractère vers une variable c de type char, à l’aide la fonction scanf. Et en utilisant le format dédié à ce type qui est %c.

Ce qu’il faut savoir pour faire l’exercice, c’est que les caractères en langage C sont traités comme des entiers. On peut donc comparer deux caractères sans aucun problème. Par exemple on a ‘a'<‘b’ et ‘3’>’1′.

Donc pour le caractère entré c, il sera une lettre minuscule s’il est compris entre les deux caractères ‘a’ et ‘z’. Ceci sera traduit par la condition c>=’a’ && c<=’z’ (ligne 8).

D’une manière similaire, il sera une alphabet majuscule s’il vérifie la condition c>=’A’ && c<=’Z’ (ligne 10).

S’il est ni l’une ni l’autre, il n’est donc pas une alphabet. Ce qui correspond à la négation des deux conditions précédentes qui est !(c>=’a’ && c<=’z’) && !(c>=’A’ && c<=’Z’) (ligne 12). L’opérateur unitaire ! est l’opérateur de négation en C.

Pour chaque une de ces conditions, on a effectué le test en utilisant la structure de contrôle simple if. Et pour chacun des cas le message adéquat est affiché par une fonction printf.

Solution exercice 5
#include<stdio.h>
#include<stdlib.h>
int main()
{
    char c;
    printf("Donnez un caractere:\n");
    scanf("%c",&c);
    if(c>='a' && c<='z')
       printf("%c est une alphabet en minuscule.\n",c);
    if(c>='A' && c<='Z')
       printf("%c est une alphabet en majuscule.\n",c);
    if( !(c>='a' && c<='z') && !(c>='A' && c<='Z'))
       printf("%c n'est pas une alphabet.\n",c);
    system("pause");
    return 0;
}