30
Royaume du Maroc OFFICE DE LA FORMATION PROFESSIONNELLE ET DE LA PROMOTION DU TRAVAIL Cours 13T Langage C et Gestion des Entrées/Sorties Résumé de Théorie Version préliminaire Deuxième Année Programme de Formation des Techniciens Spécialisés en Électronique DIRECTION DE LA RECHERCHE ET INGENIERIE DE LA FORMATION Septembre 1996

CH04_13T

  • Upload
    red-all

  • View
    215

  • Download
    2

Embed Size (px)

DESCRIPTION

CH04_13T

Citation preview

Rsum de Thorie

COMMENTAIRES \* FUSIONFORMAT Cours 13T

SUJET \* FUSIONFORMAT Langage C et Gestion des Entres/Sorties

TITRE \* FUSIONFORMAT Rsum de Thorie

Version prliminaire

TECCART INTERNATIONAL 2000 inc.

3155, rue Hochelaga,

Montral, Qubec (Canada)

H1W 1G4

RDACTION

Robert Pesant

DESSINS ET CONCEPTION GRAPHIQUE

Robert Pesant

RVISION TECHNIQUE

Robert Pesant

RVISION LINGUISTIQUE

Franois Gaudreau

COMMISSION DE VALIDATION

Formateurs de lOFPPT

Les droits de reproduction et de diffusion de ce document sont cds par Teccart International 2000 inc. lOffice de la Formation Professionnelle et de la Promotion du Travail du Royaume du Maroc, pour sa propre utilisation au Maroc.

Mis part lOFPPT, toute reproduction, en tout ou en partie, par quelque procd que ce soit, est interdite.

Imprim Montral, le HEURE \@ "j MMMM aaaa" 1er avril 1996

NOMFICHIER \* FUSIONFORMAT CH04_13T.DOC

TABLE DES MATIRES

TM \o "1-3" 4. Prises de dcisions et boucles BOUTONATTEINDRE _Toc352990289 RENVOIPAGE _Toc352990289 4-1

4.1 Types d'instructions en C BOUTONATTEINDRE _Toc352990290 RENVOIPAGE _Toc352990290 4-1

4.2 Prises de dcisions BOUTONATTEINDRE _Toc352990291 RENVOIPAGE _Toc352990291 4-2

4.2.1 Instruction slective if BOUTONATTEINDRE _Toc352990292 RENVOIPAGE _Toc352990292 4-2

4.2.2 Instruction slective if...else BOUTONATTEINDRE _Toc352990293 RENVOIPAGE _Toc352990293 4-4

4.2.3 Instruction slective avec l'oprateur conditionnel ?: BOUTONATTEINDRE _Toc352990294 RENVOIPAGE _Toc352990294 4-6

4.2.4 Instruction slective switch...case BOUTONATTEINDRE _Toc352990295 RENVOIPAGE _Toc352990295 4-8

4.3 Boucles BOUTONATTEINDRE _Toc352990296 RENVOIPAGE _Toc352990296 4-11

4.3.1 Instruction itrative do...while BOUTONATTEINDRE _Toc352990297 RENVOIPAGE _Toc352990297 4-11

4.3.2 Instruction itrative while BOUTONATTEINDRE _Toc352990298 RENVOIPAGE _Toc352990298 4-13

4.3.3 Instruction itrative for BOUTONATTEINDRE _Toc352990299 RENVOIPAGE _Toc352990299 4-15

Prises de dcisions et boucles

Types d'instructions en C

Une instruction est une structure de contrle qui dtermine le cheminement logique d'un programme. Le RENV _Ref349792552 \* FUSIONFORMAT Tableau 4-1 prsente les six catgories d'instructions en C. Dans ce chapitre, la discussion portera exclusivement sur les instructions slectives ou prises de dcisions et sur les instructions itratives ou boucles.

Tableau REFSTYLE 1 \n 4- SEQ Tableau \* ARABE \r 1 1: Catgories d'instructions en CCatgories dinstructionsMots-clsExemples et remarquesInstruction construite partir dun nonca = 234; 20)

{

gotoxy(21, wherey());

clreol();

printf("> que 20.");

}

}

L'usager doit entrer une valeur entire qui est affecte la variable b par la fonction scanf().

Par dfaut, la valeur est suppose infrieure ou gale 20. Elle est ensuite teste par l'instruction if: si elle est rellement infrieure ou gale 20, le bloc d'instructions de if n'est pas excut et le programme se termine immdiatement.

Par contre, si b > 20 est vraie, le bloc d'instructions de if est excut: le curseur est plac la position du caractre ' 20.00) ? 20.0 : courant; limite la valeur maximale entre par l'usager 20,0 mA. Si l'usager entre une valeur plus grande que 20, la valeur 20.0 est affecte la variable courant; sinon, la valeur de courant est affecte courant!!! Cela revient dire que sa valeur n'est pas change.

L'nonc courant = (courant < 4.00) ? 4.0 : courant; fonctionne de la mme faon pour la limite infrieure de 4,0 mA.

/* Programme: OP_COND.C

* ========= =========

*

* Auteur: Robert Pesant

* Date: 07/02/1993

* Rvision: 07/02/1993

* Version: V1.0

*

* Volume: COURS_13T

* Fichier: \CHAP.004\OP_COND.C

*

* Description: Test de l'oprateur conditionnel "?:"

*/

#include

#include

void main(void)

{

double courant;

clrscr();

printf("Simulation d'un transmetteur 420 mA\n");

printf("====================================\n\n");

printf("Tapez une valeur entre 4.00 et 20.00: ");

scanf("%lf", &courant); fflush(stdin);

courant = (courant > 20.00) ? 20.0 : courant;

courant = (courant < 4.00) ? 4.0 : courant;

printf("Le courant du transmetteur est: %5.2f mA\n\n", courant);

printf("Une touche pour quitter ...");

getch();

}

La RENV _Ref349792687 \* FUSIONFORMAT Figure 4-6 prsente les rsultats obtenus pour diverses valeurs de courant.

Simulation d'un transmetteur 4-20 mA

====================================

Tapez une valeur entre 4.00 et 20.00: 5.567

Le courant du transmetteur est: 5.6 mA

Une touche pour quitter ...

C:\BC_DATA\OBJ_EXE>

Simulation d'un transmetteur 4-20 mA

====================================

Tapez une valeur entre 4.00 et 20.00: 23.45

Le courant du transmetteur est: 20.0 mA

Une touche pour quitter ...

C:\BC_DATA\OBJ_EXE>

Simulation d'un transmetteur 4-20 mA

====================================

Tapez une valeur entre 4.00 et 20.00: 1.2

Le courant du transmetteur est: 4.0 mA

Une touche pour quitter ...

C:\BC_DATA\OBJ_EXE>

Figure REFSTYLE 1 \n 4- SEQ Figure \* ARABE 6: Excution de OP_COND.EXE

Instruction slective switch...case

L'instruction slective switch...case permet de remplacer plusieurs if...else imbriqus lorsqu'il s'agit d'effectuer un choix multiple. C'est l'nonc de contrle que l'on doit privilgier dans un programme o le menu offre l'usager plusieurs options. Cette structure de contrle utilise les mots-cls suivants:

switch:instruction slective pour choix multiple;

case:identification de chaque choix;

break:fin de l'instruction switch...case, aprs lexcution des instructions de l'option utilise;

default:prcise les instructions excuter si le choix de l'usager ne correspond pas un case.

La RENV _Ref349792710 \* FUSIONFORMAT Figure 4-7 prsente la syntaxe gnrale ainsi que l'ordinogramme de fonctionnement du switch...case.

INCORPORER Visio.Drawing.3

Figure REFSTYLE 1 \n 4- SEQ Figure \* ARABE 7: Instruction slective switch...case

Cet nonc de contrle est caractris par une flexibilit remarquable.

On peut dfinir autant de cas (case) que l'on dsire.

Le choix default est optionnel.

Les instructions break; sont optionnelles; toutefois, si le break de case const_a est omis et que expr == const_a, toutes les instructions seront excutes jusqu'au prochain break: ici instr_a et instr_b, mais pas default.

Il n'y a qu'une seule restriction switch...case: cette instruction s'applique uniquement des valeurs de type int. Donc,

expr doit obligatoirement tre de type int, tout comme

const_a, const_b, ...

L'excution de l'instruction slective switch...case dbute par l'valuation de l'expression entre les parenthses; cette expression est souvent le nom d'une variable.

Si cette expression (ou la variable) est identique la constante d'un case, les instructions de ce case sont excutes. Si la dernire de ces instructions est break;, alors le programme saute aux instructions qui suivent switch...case. Si l'instruction break; est omise, les instructions du case suivant sont aussi excutes. En gnral, on trouve break pour chaque case, mais on verra plus loin certaines applications o il est avantageux de ne pas l'utiliser.

Si l'expression (ou la variable) est diffrente des constantes de tous les case, on peut utiliser le mot-cl default pour faire excuter une srie d'instructions pertinentes. Par contre, selon l'application, l'usager peut liminer le default si son application exige qu'aucune instruction ne soit excute dans ce cas.

Notez finalement que le dernier choix de switch...case, qu'il soit dfini par un case ou default, ne ncessite pas de break: cet endroit de l'instruction slective, le programme n'a pas le choix de poursuivre avec les instructions suivantes.

Excutez SWITCH.C dans sa version intgrale. Puis, observez le comportement du programme en liminant tour de rle l'option default ainsi que les noncs break;.

La RENV _Ref349792733 \* FUSIONFORMAT Figure 4-8 montre la sortie du programme, version intgrale, pour diffrentes valeurs choisies par l'usager.

/* Programme: SWITCH.C

* ========= ========

*

* Auteur: Robert Pesant

* Date: 02/03/1990

* Rvision: 01/10/1992

* Version: V2.0

*

* Volume: COURS_13T

* Fichier: \CHAP.004\SWITCH.C

*

* Description: Test de l'instruction "switch ... case"

*/

#include

#include

void main(void)

{

int jour;

clrscr();

printf("Entrez le numro d'un jour de la semaine (1 7): ");

scanf("%d", &jour); fflush(stdin);

printf("Le jour #%d de la semaine est le ",jour);

switch(jour)

{

case 1:

printf("DIMANCHE!!!\n");

break;

case 2:

printf("LUNDI!!!\n");

break;

case 3:

printf("MARDI!!!\n");

break;

case 4:

printf("MERCREDI!!!\n");

break;

case 5:

printf("JEUDI!!!\n");

break;

case 6:

printf("VENDREDI!!!\n");

break;

case 7:

printf("SAMEDI!!!\n");

break;

default:

printf("... Petit drle, va!!!\n");

}

printf("Fin!\a");

}

Entrez le num(ro d'un jour de la semaine (1 ( 7): 2

Le jour #2 de la semaine est le LUNDI!!!

Fin!

C:\BC_DATA\OBJ_EXE>

Entrez le num(ro d'un jour de la semaine (1 ( 7): 5

Le jour #5 de la semaine est le JEUDI!!!

Fin!

C:\BC_DATA\OBJ_EXE>

Entrez le num(ro d'un jour de la semaine (1 ( 7): 9

Le jour #9 de la semaine est le ... Petit dr(le, va!!!

Fin!

C:\BC_DATA\OBJ_EXE>

Figure REFSTYLE 1 \n 4- SEQ Figure \* ARABE 8: Excution de SWITCH.EXE

Boucles

Instruction itrative do...while

Cette premire instruction itrative est dcrite par un ordinogramme la RENV _Ref345839264 \* FUSIONFORMAT Figure . On y prsente galement la syntaxe dans sa forme la plus gnrale.

INCORPORER Visio.Drawing.3

Figure REFSTYLE 1 \n 4- SEQ Figure \* ARABE 9: Instruction itrative do...while

La boucle do...while dbute par l'excution du bloc d'instructions. Puis, l'expression est value: tant qu'elle est vraie, le bloc d'instructions est rpt; lorsqu'elle devient fausse, le programme quitte la boucle et passe aux instructions suivantes.

Il faut s'assurer que le bloc d'instructions modifie la valeur de l'expression si on veut viter d'tre pris dans un boucle sans fin.

Le programme DOWHILE.C est une modification du programme TESTIF.C analys prcdemment. Pour quitter la boucle do...while et terminer l'excution du programme, il suffit de taper "0" en rponse la question pose. La RENV _Ref349792783 \* FUSIONFORMAT Figure 4-10 donne un exemple de fonctionnement.

/* Programme: DOWHILE.C

* ========= =========

*

* Auteur: Robert Pesant

* Date: 02/03/1990

* Rvision: 09/04/1995

* Version: V3.1

*

* Volume: COURS_13T

* Fichier: \CHAP.004\DOWHILE.C

*

* Description: Test de l'instruction "do ... while"

*/

#include

#include

#include

void main(void)

{

int b;

clrscr();

do

{

printf("Entrez une valeur pour la variable entire \"b\" (0 pour sortir): ");

scanf("%d", &b); fflush(stdin);

printf("La variable \"b\" est que");

}

printf(" 20.\n\n");

}

while(b!=0);

printf("Fin!\a");

}

Entrez une valeur pour la variable enti(re "b" (0 pour sortir): 3

La variable "b" est que 20

Entrez une valeur pour la variable enti(re "b" (0 pour sortir): -2

La variable "b" est ?

Fin!

C:\BC_DATA\OBJ_EXE>

Figure REFSTYLE 1 \n 4- SEQ Figure \* ARABE 14: Excution de TESTFOR.EXE

TITRE \* FUSIONFORMAT Rsum de Thorie SUJET \* FUSIONFORMAT Langage C et Gestion des Entres/Sorties

MOTSCLES \* FUSIONFORMAT Prises de dcisions et bouclesPage PAGE \* FUSIONFORMAT 4-1OFPPT/TECCART

INCORPORER CDraw4

Royaume du Maroc

OFFICE DE LA FORMATION PROFESSIONNELLE ET DE LA PROMOTION DU TRAVAIL

Deuxime Anne

Programme de Formation des Techniciens

Spcialiss en lectronique

DIRECTION DE LA RECHERCHE ET INGENIERIE DE LA FORMATION

Septembre 1996