Langage C : LES BOUCLES (Cours et Exercices corrigés)
Monday, June 6, 2011     17:19
  • Mon @ IP: 54.161.77.58



retour

Poster un commentaire ou une réponse

LES BOUCLES (Cours et Exercices corrigés)

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:42:20

-----------------L'INSTRUCTION SI ... ALORS ... SINON ...--------------


Il s'agit de l'instruction:
si (expression conditionnelle vraie)
alors {BLOC 1 D'INSTRUCTIONS}
sinon {BLOC 2 D'INSTRUCTIONS}

Organigramme:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:53:34

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:53:52

Syntaxe en C:
if (expression)
{
............;/* bloc 1 d'instructions */
............;
............;
}
else
{
............;/* bloc 2 d'instructions */
............;
............;
}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:54:03

Le bloc "sinon" est optionnel:si (expression vraie)
alors {BLOC D'INSTRUCTIONS}


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:54:20

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:54:38

Syntaxe en C:
if (expression)
{
............;/* bloc d'instructions */
............;
............;
}


Remarque: les {} ne sont pas nécessaires lorsque les blocs ne comportent qu'une seule instruction.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:55:31

                                LES OPERATEURS LOGIQUES


test d'égalité:if (a==b)   " si a égal b "

test de non égalité:if (a!=b)   " si a différent de b "

tests de relation d'ordre:if (a<b)   if (a<=b)  if (a>b)  if (a>=b)

test de ET LOGIQUE: if ((expression1) && (expression2))
" si l'expression1 ET l'expression2 sont vraies "

test de OU LOGIQUE if ((expression1) || (expression2))
" si l'expression1 OU l'expression2 est vraie 

test de NON LOGIQUEif (!(expression1))
" si l'expression1 est fausse "

Toutes les combinaisons sont possibles entre ces tests.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:57:02

Exercice III-1: L'utilisateur saisit un caractère, le programme teste s'il s'agit d'une lettre majuscule, si oui il renvoie cette lettre en minuscule, sinon il renvoie un message d'erreur.


Le langage C admet des écritures contractées dans les expressions de test:

char reponse;                      est équivalent à     char reponse;
printf("Voulez-vous jouer ?");                          printf("Voulez-vous jouer ?");
reponse = getchar();
if(reponse == 'o')                                      if((reponse = getchar()) =='o')
printf("BONJOUR\n");                                    printf("BONJOUR\n");
else printf("TANT-PIS"\n);                              else printf("TANT-PIS"\n);

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:57:15

LA BOUCLE TANT QUE ... FAIRE ...


Il s'agit de l'instruction:

tant que (expression vraie)
faire{BLOC D'INSTRUCTIONS} 

Organigramme:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:57:30


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:58:01

Syntaxe en C:
while (expression)
{
............;/* bloc d'instructions */
............;
............;
}

Le test se fait d'abord, le bloc d'instructions n'est pas forcément exécuté.

Remarque: les {} ne sont pas nécessaires lorsque le bloc ne comporte qu'une seule instruction.

Remarque: On peut rencontrer la construction suivante: while (expression); terminée par un  et sans la présence du bloc d'instructions. Cette construction signifie: "tant que l'expression est vraie attendre".

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:58:16

                            L'INSTRUCTION POUR ...


Il s'agit de l'instruction:

pour (initialisation; condition de continuité vraie;modification)
{BLOC D'INSTRUCTIONS} 

Organigramme:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:58:31

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:59:04

Syntaxe en C:

for(initialisation  condition de continuité  modification)
{
............;/* bloc d'instructions */
............;
............;
}

Remarques: 
Les {} ne sont pas nécessaires lorsque le bloc ne comporte qu'une seule instruction.
Les 3 instructions du for ne portent pas forcément sur la même variable.
Une  instruction peut être omise, mais pas les 


Exemples:
for(i = 0  i<10  i++)
{
............;/* bloc d'instructions */
............;
............;
}

correspond à l'organigramme suivant:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:59:20

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:59:40

La boucle
for(;;)
{
............;/* bloc d'instructions */
............;
............;
}

est une boucle infinie (répétition infinie du bloc d'instructions).


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 13:59:56

Utilisation de variables différentes:

resultat = 0;
for(i = 0  resultat<30  i++)
{
............;/* bloc d'instructions */
............;
............;
resultat = resultat + 2*i;
}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:00:04

Exercice III-2:

Saisir un entier, calculer n!
Utiliser une boucle while puis une boucle for.
Quelle est la plus grande valeur possible de n, si n est déclaré int, puis unsigned ?

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:00:58

                               L'INSTRUCTION AU CAS OU ... FAIRE ...


L'instruction switch permet des choix multiples uniquement sur des entiers (int) ou des caractères (char).

Syntaxe:

switch(variable de type char ou int)au cas où la variable vaut:
{
case  valeur1: ......;          - cette valeur1: executer ce bloc d'instructions.
.......;
break;
           valeur2:........;               - cette valeur2:  executer ce bloc d'instructions.
 ........;
 break;
.
.etc ...
.
       default:  .......;                - aucune des valeurs précédentes: executer ce bloc
          ........;            d'instructions, pas de "break" ici.
 
}

le bloc "default" n'est pas obligatoire.

L’instruction switch correspond à une cascade d’instructions if ...else

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:01:22

Exemple:
Cette instruction est commode pour fabriquer des "menus":

char choix;
printf("LISTE PAR GROUPE TAPER 1\n");
printf("LISTE ALPHABETIQUE TAPER 2\n");
printf("POUR SORTIR TAPER S\n");
printf("\nVOTRE CHOIX: ");
choix = getchar();
switch(choix)
{
case '1': .......;
    .......;
   break;

case '2':  ......;
     ......;
    break;

case 'S': printf("\nFIN DU PROGRAMME ....");
    break;

default;  printf("\nCE CHOIX N'EST PAS PREVU ");  /* pas de break ici */
}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:01:32

                          L'INSTRUCTION REPETER ... TANT QUE ...



Il s'agit de l'instruction:répéter{BLOC D'INSTRUCTIONS} 
tant que (expression vraie)


Organigramme: 

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:01:49

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:02:05

Syntaxe en C:
do
{
............;/* bloc d'instructions */
............;
............;
}
while (expression);

Le test se faisant après, le bloc est exécuté au moins une fois.

Remarque: les {} ne sont pas nécessaires lorsque le bloc ne comporte qu'une seule instruction.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:03:09

COMPLEMENT SUR LES TESTS


En langage C, une expression nulle de type entier (int) est fausse, une expression non nulle de type entier (int) est vraie.

Exemples:

int a,b,c,delta;                est équivalent à        int a,b,c,delta;
delta = b*b-4*a*c;                                      delta = b*b-4*a*c;
if(delta != 0)                                          if(delta)
{ ....... }                                             { ....... }


int a,b,c,delta;                est équivalent à        int a,b,c,delta;
delta = b*b-4*a*c;                                      delta = b*b-4*a*c;
if(delta == 0)                                          if(!delta)
{ ....... }                                             {.......}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:03:41

                             EXERCICES RECAPITULATIFS


Exercice III_3: résoudre ax2 + bx +c = 0.

Exercice III_4: Saisir une suite de caractères, compter et afficher le nombre de lettres e et d'espaces. Utiliser les propriétés du tampon.

Exercice III_5: La fonction kbhit appartient à la bibiothèque conio.h. Une fonction équivalente peut exister avec d'autres compilateurs. La fonction kbhit teste si un caractère a été frappé au clavier. Tant que ce n'est pas vrai kbhit renvoie 0 (ceci signifie que la valeur de la fonction kbhit est 0).

Exemple: while(kbhit() == 0)/*tant qu'aucun caractère n'a été frappé exécuter la boucle*/
{ ..... }

Cette écriture est équivalente à:
 while(!kbhit()); /* tant que kbhit est faux,  exécuter la boucle */
{ ..... }

Ecrire un programme qui affiche le carré des entiers 1, 2, 3 ......, toutes les 500 ms tant qu'aucun caractère n'a été frappé au clavier. Générer la temporisation à l’aide d’une boucle for et d’un décompteur.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:04:12

CORRIGE DES EXERCICES


Exercice III-1:

#include <stdio.h>
#include<conio.h>
void main()
{
char c;
printf("ENTRER UNE LETTRE:");
c = getchar();
if((c>='A') && (c<='Z')) printf("CETTE LETTRE EN MINUSCULE: %c\n",c);
else printf("CE N'EST PAS UNE LETTRE MAJUSCULE\n");
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}

Exercice III-2:

#include <stdio.h>
#include <conio.h>
void main()
{
int n,i,fac= 1;
printf("ENTRER UN ENTIER: ");scanf("%d",&n);
for (i=1;i<=n;i++) fac= fac * i;
printf("\nn = %d  n! = %d",n,fac);
printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE");
getch();
}

 Les entiers sont des nombres de 32 bits:
n int: n! maximum= 12!
n unsigned: n! maximum = 12!

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:04:31

Exercice III_3: 

#include <stdio.h>
#include <conio.h>
#include <math.h>/* contient la fonction racine */ 
void main()
 {
 float a,b,c,delta,x1,x2;
 /* saisie de A,B,C */
 printf("\t\t\tRESOLUTION DE L'EQUATION DU SECOND DEGRE\n");
 printf("\t\t\t               2\n");
 printf("\t\t\t             AX +BX+C=0\n\n\n");
 printf("SAISIR A B C SEPARES PAR RETURN\n");
 printf("A = ");scanf("%f",&a);
 printf("B = ");scanf("%f",&b);
 printf("C = ");scanf("%f",&c); 

 /* debut du calcul */
 /* cas particuliers */
 if((a==0)&&(b==0)&&(c==0))printf("INFINITE DE SOLUTIONS\n");
 if((a==0)&&(b==0)&&(c!=0))printf("PAS DE SOLUTIONS\n");
 if((a==0)&&(b!=0))printf("UNE SOLUTION: X= %f\n",-c/b);
 
 /*cas general */
 if(a!=0)
 {
 delta = b*b-4*a*c;
 printf("DELTA= %f\n",delta);
 if(delta<0)printf("DELTA NEGATIF PAS DE SOLUTION\n");
 else
 {
 if(delta==0)printf("DELTA NUL, UNE SOLUTION X= %f\n",-b/2/a);
else

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:04:40

{
 x1= (-b+sqrt(delta))/2/a;
 x2= (-b-sqrt(delta))/2/a;
 printf("DELTA POSITIF DEUX SOLUTIONS\n");
 printf("X1= %f  X2= %f\n",x1,x2);
 }
 }
 }
 
 /* calculs termines */
 printf("\n\nPOUR CONTINUER FRAPPER UNE TOUCHE");
 getch();
 }

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:04:51

Exercice III_4:

#include <stdio.h>
#include <conio.h>
void main()
{
char c,compt_espace= 0,compt_e= 0;
printf("ENTRER UNE PHRASE:\n");/* l'utilisateur saisit la totalite de sa phrase */

while((c=getchar())!='\n')     /* lors du 1er passage, getchar ne prend */
       /* en compte que le 1er caractere */
{                      /* les autres sont ranges dans le tampon */
if(c=='e')compt_e++;   /* et recuperes par getchar lors */ 
/* des autres passages */
if(c==' ')compt_espace++;
}

printf("NOMBRE DE e: %d\n",compt_e);
printf("NOMBRE D'ESPACE: %d\n",compt_espace);
printf("POUR SORTIR FRAPPER UNE TOUCHE ");
getch();
}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:05:06

Exercice III_5:

#include <stdio.h>
#include <conio.h>
void main()
{
int i = 0;
float x,tempo=5000000;
printf("POUR SORTIR DE CE PROGRAMME FRAPPER UNE TOUCHE ...\n");
do
{
printf("i = %d i*i = %d\n",i,i*i);
for(x=tempo;x>0;x--);
i++;
}
while(kbhit()==0);      /* on peut aussi ‚crire while(!kbhit()); */

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:05:23

Voici les exécutables

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:05:46

EXIII_1.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:05:59

EXIII_2.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:06:11

EXIII_3.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:06:24

EXIII_4.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 14:06:36

EXIII_5.CPP

Poster un commentaire ou une réponse :
Poster
     Ajouter un document à la discussion:
       

Actualité informatique et High-Tech

16-10-2015               lire

Dropbox propose aussi un outil d'écriture collaborative à son service

16-10-2015               lire

Bientôt des DRM dans des JPEG

17-04-2015               lire

Google propose une requête pour retrouver son téléphone

17-04-2015               lire

Youtube prépare une offre payante sans publicité

17-04-2015               lire

Sony Pictures : Des milliers de mails et documents confidentiels dévoilés

07-04-2015               lire

T411 bloqué par les FAI français

07-04-2015               lire

NVIDIA publie un pilote correctif et met à jour SHIELD Hub ainsi que GeForce Experience

07-04-2015               lire

Linkedin acquiert la start-up Refresh

03-04-2015               lire

Chromebit, la clé USB Google et Asus qui transforme n’importe quel écran en ordinateur

03-04-2015               lire

Une personne aurait pu supprimer toutes les vidéos d’une chaine Youtube en quelques secondes

03-04-2015               lire

Firefox 37 apporte un cryptage complémentaire à HTTPS

03-04-2015               lire

Windows XP, ce système qui ne veut pas mourir

02-04-2015               lire

Piratage de Labio.fr : le laboratoire répond à nos questions et ne payera pas la rançon

02-04-2015               lire

AWS lance des instances géantes avec 48 To de stockage

02-04-2015               lire

WhatsApp ajoute les appels gratuits et illimités à son application

31-03-2015               lire

Nadim Kobeissi : de Cryptocat à Peerio, du piratage au doctorat

31-03-2015               lire

L'Université de Nantes inaugure son datacenter modulaire taillé pour le HPC

31-03-2015               lire

GitHub victime d’une attaque DDoS majeure

27-03-2015               lire

Googlinette : les recherches de Google en devinettes

27-03-2015               lire

F8 : Facebook ouvre Messenger au e-commerce

27-03-2015               lire

À la SNCF, une fuite de données simple comme une touche F5

23-03-2015               lire

Des satellites GPS de Boeing affectés par une erreur technique

23-03-2015               lire

Plus de 700 000 routeurs ADSL vulnérables au piratage

23-03-2015               lire

Twitter sous le coup d’une action collective pour discrimination

22-03-2015               lire

Les montres connectées étaient déjà présentes dans les films, séries et dessins animés

22-03-2015               lire

Une Audi autonome va traverser les USA de SF à New York

20-03-2015               lire

Éclipse du Soleil : comment la suivre en direct sur Internet

20-03-2015               lire

Projet Leap : des bus 2.0 à San Francisco

20-03-2015               lire

Nvidia dévoile Drive PX, un système de conduite autonome

17-03-2015               lire

Embarquez pour Apollo 11, expérience virtuelle hors du commun

16-03-2015               lire

Ce jour où Google a exposé les données de 282 867 domaines

16-03-2015               lire

Yahoo publie le code de son plug-in de chiffrement mail

16-03-2015               lire

Après un an sans mise à jour, HAWKEN revient à la vie

12-03-2015               lire

Le big data au service du séquençage ADN pour accélérer les diagnostics

12-03-2015               lire

Clap de fin pour PlayStation Mobile

12-03-2015               lire

Apple : retour à la normale après une panne de plus de 11 heures

12-03-2015               lire

Ericsson va supprimer 2 200 postes en Suède

12-03-2015               lire

Le plan de Fleur Pellerin contre le piratage sur Internet

10-03-2015               lire

Apple Watch, Watch Edition et Watch Sport : de 399 à 18.000 euros !

10-03-2015               lire

Apple présente le “nouveau MacBook” qui remplace le MacBook Air

09-03-2015               lire

Google développe une version d'Android pour la réalité virtuelle

09-03-2015               lire

Quand la MPAA demande à Google de déréférencer son propre site

09-03-2015               lire

Heroes of the Dorm : un tournoi HotS avec 450 000 $ de bourses d'études à gagner

09-03-2015               lire

1 milliard d'adresses mails volées, 2 pirates inculpés

09-03-2015               lire

VMware accusé de violation de code Linux

09-03-2015               lire

Les drones civils bientôt immatriculés ?

05-03-2015               lire

7 sites qui permettent d’envoyer des fichiers de + ou – 2 Go

04-03-2015               lire

Smartphones : Apple passe en tête devant Samsung56% des consommateurs inquiets pour leurs données en Europe

04-03-2015               lire

Smartphones : Apple passe en tête devant Samsung

04-03-2015               lire

MWC 2015 : Onevisage pésente un scan facial 3D pour smartphones

04-03-2015               lire

Caméras sportives : Xiaomi s'attaque au monopole GoPro

04-03-2015               lire

Yi Camera, la caméra embarquée de Xiaomi à moins de 60€

04-03-2015               lire

Faille FREAK : quand des connexions SSL/TLS se contentent d'un chiffrement RSA sur... 512 bits

04-03-2015               lire

Bientôt des pubs sur Google Play (Android)

28-02-2015               lire

En partenariat avec "Positive Technologies", Esprit a l'honneur d'inviter ses étudiants à la 1ère édition de l’événement ESPRIT HACK DAYS dans les locaux d'ESPRIT Chotrana 2 et ce le 03 et le 04 Mars 2015.

28-02-2015               lire

La direction des stages d’ESPRIT et Ernst & Young ont le plaisir d'inviter ses étudiants à la journée de l’entreprise du mercredi 4 mars 2015 dans la salle E5 d’ESPRIT Factory.

25-02-2015               lire

Adobe fête les 25 ans de son logiciel Photoshop

25-02-2015               lire

Linux 4.0 : gros numéro et petite version

Haut de page.