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