Vous êtes sur la page 1sur 33

Langage C

Programmation C – Partie 2

Pr. Rashid AIT DAOUD


Partie 2: Les instructions sélectives
(alternatives) et répétitives
1- Les instructions sélectives (alternatives)
- Contrairement au traitement séquentiel, la structure alternative ou
conditionnelle permet d'exécuter ou non une série d'instructions
selon la valeur d'une condition.
• 1.1 L’instruction SI (if): Elle sélectionne le traitement (bloc d'instructions) à faire
si une condition est vérifiée.
Exemple :
Syntaxe : #include <stdio.h>
if (condition) main( )
{ {
instruction1; int a;
float note;
instruction2;
printf ("Introduire le nombre a");
… if (a%2==0)
Instruction n; {
} printf ("Le nombre %d est paire" ,a);
}
printf ("Introduire votre note");
if (note>=10 && note <12)
printf ("Mention: Passable");
}
1- Les instructions sélectives (alternatives)
• 1-1 L’instruction SI (if)
❑Remarque :
Si le traitement à effectuer est constitué d'une seule instruction, il est possible d'omettre les
accolades.
1- Les instructions sélectives (alternatives)
• 1-2 L’instruction if - else
Lorsque if est utilisée avec else (SI NON), elle indique également le
traitement à faire si la condition n'est pas vérifiée.
Syntaxe :
if (Condition)
Exemple :
{ #include <stdio.h>
instruction1; main( )
instruction2; {
… Traitement 1 int a,b; /*a et b entiers*/
Instruction n; printf ("Introduire a et b : ");
} scanf ("%d%d",&a,&b);
else if (a==b) /*si a=b affiche a égale à b sinon affiche a différent de b */
{ printf(« a et b sont égaux\n");
instruction1'; else
instruction2'; printf(« a et b sont différents \n");

Traitement 2
}
Instruction n';
}
1- Les instructions sélectives (alternatives)
• 1-2 L’instruction if – else
Exercice :
• Ecrire un programme qui permet de dire que le nombre saisi est positif ou négatif
1- Les instructions sélectives (alternatives)
• 1-2 L’instruction if – else
Exercice :
• Ecrire un programme qui permet de dire que le nombre saisi est positif ou négatif
→ Solution

#include <stdio.h>
void main()
{
int variable1; /* déclaration de varaibles */
printf ("Introduire un nombre\n");
scanf ("%d", &variable1);
if (variable1 >= 0)
{
printf ("Le nombre est Positif");
}
else
{
printf ("Le nombre est Négatif");
}
1- Les instructions sélectives (alternatives)
• 1-3 L’instruction if – else if - else
Exercice :
• Ecrire un programme qui permet de donner une mention à une note
saisie par l’utilisateur, les notes doivent être de 0 à 20
→ Solution
#include <stdio.h>
void main()
{
float N;
printf ("Donner une note");
scanf("%f",&N);
printf ("La mention est:\t"); #include "stdio.h"
if(N>=16) void main()
{
printf("TB"); {
} float N;
else if (N>=14) printf ("Donner une note: ");
{
printf("B");
scanf("%f",&N);
} printf ("La mention est:\t");
else if (N>=12) if (N>=16) printf("TB");
{ else if (N>=14) printf("B");
printf ("AB");
} else if (N>=12) printf ("AB");
else if (N>=10) else if (N>=10) printf("P");
{ else printf ("NV");
printf("P");
}
}
else
{
printf ("NV");
}
}
1- Les instructions sélectives (alternatives)
❑Remarque :
Dans une imbrication, else se rapporte toujours à if le plus rapproché (le plus interne).

Exemple
#include <stdio.h>
main( )
{
int a,b,z,n; /*a, b,z et n entiers*/
printf ("Introduire a, b et n : ");
scanf ("%d%d%d",&a,&b,&n);
if (n>0)
if (a>b) /*si n>0 et a>b*/
z=a;
else /*si n>0 et a<=b (else se rapporte à if (a>b))*/
z=b;
if (n>0)
{
if (a>b) /*si n>0 et a>b*/
z=a;
}
else /*si n<=0 (else se rapporte à if (n>0))*/
z=b;
}
1- Les instructions sélectives (alternatives)
• 1-4 L’instruction switch-case (SELON … FAIRE)
Cette structure conditionnelle permet de choisir le traitement à
effectuer en fonction de la valeur d'une variable ou d'une expression.
Le sélecteur de switch (la variable de contrôle) doit être un entier ou un
caractère.
Syntaxe :
switch (Variable de contrôle) le mot clé break est utilisé pour indiquer la
{ sortie de la structure conditionnelle
case Valeur1 : Traitement1 (bloc d'instructions)
break;
case Valeur2 : Traitement2
break;

case Valeurn : Traitementn
break;
default : Traitementm
}
1- Les instructions sélectives (alternatives)
• 1-4 L’instruction switch-case
Exemple 1
#include <stdio.h>
main( ) Exemple 2
{ #include <stdio.h>
int a; /*a entier*/ main( )
char c; /*c char*/ {
printf ("Introduire un nombre et une lettre: "); int j; /*j entier*/
scanf ("%d%c",&a,&c); printf ("Introduire le nombre de jour dans la semaine: ");
switch (a) /*le programme traite tous les cas de a (0,1 ou autres)*/ scanf ("%d",&j);
{ switch (j) /*le programme traite tous les cas de j (1… 7 ou autres)*/
case 0 : printf ("Le nombre introduit est zéro\n"); {
break; case 1: printf("C’est un Lundi"); break;
case 1 : printf ("Le nombre introduit est 1\n");
break; case 2: printf("C’est un Mardi"); break;
default : printf ("Le nombre introduit est différent de 0 et 1\n"); case 3: printf("C’est un Mercredi"); break;
} …
switch (c) /*Ici, on traite uniquement les cas où c égale à x ou y*/
{
case 7: printf("C’est un Dimanche"); break;
case 'x' : printf ("La lettre saisie est la lettre x\n"); default : printf("Ce n’est pas un jour valide!!");
break;
case 'y' : printf ("La lettre saisie est la lettre y\n"); }
break; }
}
}
1- Les instructions sélectives (alternatives)
• 1-4 L’instruction switch-case
Exercice
Ecrire deux programmes qui vérifient si le caractère saisi par
l’utilisateur est une voyelle ou une consonne on utilisant if et switch.
Les voyelles sont: a, e, i, o, u, y
1- Les instructions sélectives (alternatives)
• 1-4 L’instruction switch-case
Exercice
Ecrire deux programmes qui vérifient si le caractère saisi par l’utilisateur est une voyelle ou une
consonne on utilisant if et switch.
Les voyelles sont: a, e, i, o, u, y
→Solution (avec switch)
→Solution (avec if) #include <stdio.h>
#include <stdio.h> void main()
void main() {
{ char c;
char c; printf("Entrer un caractère: ");
printf("Entrer un caractère: "); scanf ("%c",&c);
scanf ("%c",&c); switch(c) {
if (c=='a'||c=='e'||c=='i'||c=='o'||c=='u') case 'a': printf("C’est une voyelle"); break;
{ case 'e': printf("C’est une voyelle"); break;
printf("C'est une voyelle"); case 'i': printf("C’est une voyelle"); break;
}
case 'o': printf("C’est une voyelle"); break;
else{
printf("C'est une consonne"); case 'u': printf("C’est une voyelle"); break;
} case 'y': printf("C’est une voyelle"); break;
} default : printf(« C’est une consonne");
}
1- Les instructions sélectives (alternatives)
• 1-5 Les opérateurs conditionnels
Le langage C possède une paire d'opérateurs un peu exotiques qui peut
être utilisée comme alternative à if - else et qui a l'avantage de pouvoir
être intégrée dans une expression:

Exemple:
Syntaxe: La suite d'instructions

<expr1> ? <expr2> : <expr3> if (A>B)


MAX=A;
* Si <expr1> fournit une valeur différente de zéro, else
alors la valeur de <expr2> est fournie comme
résultat
MAX=B;
* Si <expr1> fournit la valeur zéro, peut être remplacée par:
alors la valeur de <expr3> est fournie comme
résultat
✓ MAX = (A > B) ? A : B;
1- Les instructions sélectives (alternatives)
Exemple d’application:
En prenant en considération le nombre de cartes, afficher
correctement le message suivant en utilisant les opérateurs
conditionnels:
“Vous avez N carte(s)”
#include<stdio.h>
Main ()
{
int N;
printf("Combien avez-vous de cartes\n" );
scanf("%d" ,&N);
……………………………………….
}

→ printf ("Vous avez %d carte%c \n" , N, (N==1) ? ' ' : 's' );


2- Les instructions itératives (répétitives)

En C, nous disposons de trois structures dites répétitives qui nous


permettent la définition de boucles conditionnelles:

1) la structure : while

2) la structure : do – while

3) la structure : for
2- Les instructions itératives (répétitives)
2.1 L’instruction while (tant que)
• L'instruction while permet de répéter un traitement autant de fois qu'une
condition est vérifiée. Les instructions en question sont alors exécutées
tant que la condition est vraie.

Syntaxe : fonctionnement :
while (condition) while teste d'abord si la condition est vraie; si oui, elle
{ exécute le bloc d’instruction et remonte
<bloc d'instructions> automatiquement à la ligne while pour tester de
} nouveau la condition. Elle s'arrête quant la condition
devient fausse.

* Tant que la condition est vérifiée, le <bloc d'instructions> est exécuté.


* Si la condition fournit la valeur zéro, l'exécution continue avec l'instruction qui suit le bloc
d'instructions.
* Le <bloc d'instructions> est exécuté zéro ou plusieurs fois.
2- Les instructions itératives (répétitives)
2.1 L’instruction while (tant que)

Exemple 1 :
/* Afficher les nombres de 10 à 20 */
int I = 10;
while (I < 21)
{
printf("%i \n", I);
I++;
}
Exemple 2 :
/* Afficher les nombres de 10 à 1 */
int I=10;
while (I > 0)
printf("%i \n", I--);
2- Les instructions itératives (répétitives)
2.1 L’instruction while (tant que)

Exercice: En utilisant la boucle while, ecrire un programme qui permet de lire un entier (N) et qui calcule
la somme des nombres compris entre 0 et ce dernier (N).
2- Les instructions itératives (répétitives)
2.1 L’instruction while (tant que)
→ Solution:
#include <stdio.h>
main() Remarque :
{ • Lors de l'utilisation de
int nombre; l'instruction while, à chaque
itération, la condition est
int somme=0;
évaluée en premier, avant
int i=0; l'exécution du traitement.
printf("Entrer un nombre\n");
scanf("%d",&nombre);
while (i<=nombre)
{
somme+=i; /* somme=somme+i; */
i++;
}
printf("La somme des nombre comprise entre 0 et %d est
%d",nombre,somme);
}
2- Les instructions itératives (répétitives)
2.2 L’instruction do - while (Faire – Tant que)
• L'instruction do while permet de répéter un traitement jusqu'à ce qu'une
condition ne soit plus vérifiée. Elle joue le même rôle que while.

Syntaxe :
do fonctionnement :
{ La structure do - while exécute d'abord le traitement puis
<bloc d'instructions> teste si la condition est vraie; si oui, il remonte
} automatiquement à la ligne do pour exécuter de
while (condition); nouveau le traitement. Il s'arrête quant la condition
devient fausse.

La structure do - while est semblable à la structure while, avec la différence suivante :

* while évalue la condition avant d'exécuter le bloc d'instructions,

* do - while évalue la condition après avoir exécuté le bloc d'instructions. Ainsi le bloc
d'instructions est exécuté au moins une fois.
2- Les instructions itératives (répétitives)
2.2 L’instruction do - while (Faire – Tant que)

Exemple 2 :
Exemple 1 : #include <stdio.h>
#include <stdio.h> main()
main() {
{ int n, div;
float N; printf("Entrez le nombre à diviser : ");
do scanf("%d", &n);
{ do
printf("Introduisez un nombre entre 1 et 10 :"); {
scanf("%f", &N); printf("Entrez un diviseur ( !=0) : ");
} scanf("%d", &div);
while (N<1 || N>10); }
printf("___/Merci de votre participation\___n\n\n"); while (div==0);
} printf("%d / %d = %f\n", n, div, (float)n/div);
}
2- Les instructions itératives (répétitives)
2.2 L’instruction do - while (Faire – Tant que)

Exercice 1: En utilisant la boucle do while, écrire un programme qui permet de lire un entier positif (N) et
qui calcule sa racine carré

Exercice 2: En utilisant la boucle do - while, écrire un programme qui permet de lire un entier (N) et qui
calcule la somme des nombres compris entre 0 et ce dernier (N).
2- Les instructions itératives (répétitives)
2.2 L’instruction do - while (Faire – Tant que)

→Solution 1
#include <stdio.h>
main()
{
float N;
do
{
printf("Entrer un nombre (>= 0) : ");
scanf("%f", &N);
}
while (N < 0);
printf("La racine carrée de %.2f est %.2f\n", N, sqrt(N));
return 0;
}
2- Les instructions itératives (répétitives)
2.2 L’instruction do - while (Faire – Tant que)

→Solution 2
#include <stdio.h>

main()
{
int n, somme=0, i=0; /*n entier et somme et i entiers initialisés à 0*/
printf("Introduire un nombre : " );
scanf("%d",&n);
do /*le programme rajoute i à somme puis l'incrémente tant que i ≤ n*/
{
somme=somme+i;
i++;
}
while (i<=n) ;
printf ("%d",somme); /*le programme affiche la somme des nombres compris entre 0
et n*/
}
2- Les instructions itératives (répétitives)
2.3 L’instruction for (Pour)
• L'instruction for permet de répéter un traitement donné un nombre
de fois précis.

<expr1>;
Syntaxe : while ( <expr2> )
for ( <expr1> ; <expr2> ; <expr3> ) {
<bloc d'instructions> <bloc d'instructions>
<expr3>;
}

• <expr1> est évaluée une fois avant le passage de la boucle.


Elle est utilisée pour initialiser les données de la boucle.
• <expr2> est évaluée avant chaque passage de la boucle.
Elle est utilisée pour décider si la boucle est répétée ou non.
• <expr3> est évaluée à la fin de chaque passage de la boucle.
Elle est utilisée pour réinitialiser les données de la boucle.
2- Les instructions itératives (répétitives)
2.3 L’instruction for (POUR)

Exemple:
#include <stdio.h>
main( )
{
int i;
for (i=0; i<=10; i++)
{
printf ("%d\n",i);
}
}
2- Les instructions itératives (répétitives)
2.3 L’instruction for (POUR)
0
#include <stdio.h> 1
main( ) 2
{ 3
int i; 4
for (i=0; i<=10; i++) 5
{ 6
printf ("%d\n",i); 7
} 8
} 9
10
→ fonctionnement :
for commence au départ, par effectuer les initialisations (en premier argument), exécute le traitement tant que la
condition (en deuxième argument) est vérifiée et exécute les instructions (en troisième argument) à chaque fin
d'itération.
2- Les instructions itératives (répétitives)
2.3 L’instruction for (Pour)
Exercice 1: Quel est la sortie de ce programme?

Exemple

#include <stdio.h>
main()
{
int I;
for (I=1 ; I<=10 ; I++)
printf("Le carré de %d est %d
\n", I, I*I);
}
2- Les instructions itératives (répétitives)
2.3 L’instruction for (Pour)

Exemple

#include <stdio.h>
main()
{
int I;
for (I=1 ; I<=10 ; I++)
printf("Le carré de %d est %d
\n", I, I*I);
}
2- Les instructions itératives (répétitives)
2.3 L’instruction for (POUR)
• Exercice 2: En utilisant le boucle for, écrire un programme qui calcule la
moyenne de N notes. Le nombre de note N doit être saisi ainsi que les
notes. Avec N > 0 (utiliser la boucle do-while pour le contrôle de N).
2- Les instructions itératives (répétitives)
2.3 L’instruction for (POUR)
→ Solution :
#include <stdio.h>
int main()
{
int i,N;
float Note,M=0;
do
{
printf("entrer le nombre de notes: ");
scanf("%d",&N);
}
while(N<=0);
for (i=0; i<N; i++)
{
printf("entrer la note numéro %d: ",i+1);
scanf ("%f",&Note);
M+=Note;
}
printf("La moyenne est %.2f", M/N);
}

Vous aimerez peut-être aussi