2) Objectifs du cours :
1) Familiariser l'tudiant avec le langage de programmation C et
avec quelques nouveauts du langage C++.
2) Permettre l'tudiant de crer des programmes simples mais qui
requirent une connaissance complte du langage utilis, en
l'occurrence le C.
3) Prparer l'tudiant un cours plus avanc, par exemple, le cours
IFT 1166 : Programmation Oriente Objet avec C++.
3) Population cible :
Ce cours de programmation s'adresse une population qui a dj
une connaissance de base en langage de programmation structure et
qui dsire connatre les fondements d'un langage de programmation
qui est de plus en plus utilis par les grandes firmes d'informatique.
Le langage C++ occupe le premier rang avec 71 % tandis que le langage
C se classe bon deuxime avec 58 %.
Page 1
4) Cours pralable :
Page 2
Allure1.C
*/
#include <stdio.h>
valeur2 = %d\n",
= valeur1 ;
= valeur2 ;
= temporaire ;
valeur2 = %d\n",
Page 3
Excution:
Entrez 2 entiers suivis par la touche <Entre> 53
Avant l'change, valeur1 =
53, valeur2 =
17
Aprs l'change, valeur1 =
17, valeur2 =
53
17
7)
Page 4
8)
9)
de l'instruction
printf("\nCliquez sur le bouton de fermeture ");
permettant de rappeler l'usager quitter l'cran des rsultats
en cliquant sur le bouton de fermeture d'une fentre.
Allure2.C
*/
#include <stdio.h>
/* une fonction en C : cette fonction dtermine et retourne
la plus grande valeur entre deux rels x et y
*/
float plusGrande (float x, float y)
{
if (x > y)
return x ;
else
return y ;
}
void main()
{ /* prototype (sera aborde vers la troisime semaine du cours)
de la fonction Absolue */
float valeur1, valeur2 ;
float absolue(float z) ; /* l'criture de cette fonction se
trouvera aprs son appel */
Page 5
*/
*/
Excution:
Entrez 2 rels 5.7 10.5
Les valeurs lues: valeur1 =
5.70,
La plus grande valeur est : 10.50
La valeur absolue de -4.80 est 4.80
valeur2 =
10.50
Page 6
#include <xxxx.h>
Page 7
/* .... */
/* la taxe TPS */
;
2.b) Identificateur
Attention :
En C, les caractres majuscules et minuscules sont diffrents:
TP1 et tp1 sont 2 identificateurs diffrents en C.
La plupart des identificateurs prdfinis sont en minuscules :
main, int, float, char, etc...
Page 8
entier
rel
un seul caractre
2
4
1
-5, 3214
-1.7, 6.82
'A', '4'
-32768 32767
3.4e-38 3.4e+38
256 caractres
int
float
char
age
;
taille ;
sexe
;
age
taille
sexe
= 23 ;
/* 23 ans
= 1.75 ; /* mesure 1.75 mtre
= 'f' ; /* de sexe fminin
*/
*/
*/
Page 9
nbFemmes ;
somTailleFem ;
somTailleFem =
nbFem = 0 ;
nbHommes = 0 ;
plusPetite = 100000.0 ;
=
=
=
=
A
B
A
A
+
*
/
-
5
3
3
5
;
;
;
;
peut
peut
peut
peut
s'crire
s'crire
s'crire
s'crire
aussi
aussi
aussi
aussi
:
:
:
:
A
B
A
A
+=
*=
/=
-=
5
3
3
5
;
;
;
;
d.5) Attention
age
;
taille ;
lettre ;
= 23.87 ;
= taille ;
lettre
= 67 ;
Page 10
de 'A'
de 'B'
de 'C'
est 65
est 66
est 67
de 'a'
de 'b'
de 'c'
est 97
est 98
est 99
Ainsi,
lettre = 67 ; permet d'affecter le caractre dont
l'ordre est 67 la variable lettre, c'est le caractre 'C'.
De mme, l'affectation : age = 'b' ; n'est pas non plus
une erreur : le C convertit 'b' en entier (son ordre est
98), et dpose 98 comme valeur de la variable age.
On utilise cette sorte d'affectation dans les conversions :
char lettre ;
lettre = 'B';
lettre = lettre + 'a' - 'A'; /* valeur de lettre
deviendra 'b'
*/
A droite de l'affectation :
et
lettre + 'a'
lettre + 'a' - 'A'
vaut 66 + 97 = 163
vaut 163 - 65 = 98
l'addition et la soustraction
la multiplication
la division (relle ou entire)
le reste dans une division (le modulo)
Page 11
Exemples :
6 / 4
vaut 1
est gale
!=
est diffrent de
<
est infrieur
<=
>
est suprieur
>=
Exemples :
(17 % 3) == 2
5 * 4
<
vaut vrai
vaut faux
le contraire de ....
&&
le et logique
||
le ou logique
Rappels :
A && B
A || B
Page 12
Exemples :
!( 27 < 13 )
(15 > 4)
vaut
vrai
vaut vrai
les parenthses
oprateurs unaires
* / %
+ <
<=
>
>=
==
!=
&&
||
Consquences :
(le contraire)
3) Les constantes:
3.a) Avec la directive #define :
En C, on utilise surtout la directive #define pour dfinir
un synonyme :
#define
#define
#define
#define
TAUX_TPS 0.07
MAX_PERS 80
Nom_A_Lire
"Metrique.Dta"
analyste
'A'
Page 13
125
*/
Attention :
Le symbole # devrait tre le premier caractre sur la ligne
ou il n'est prcd que des espaces :
void main()
{ #define PI = 3.14159
La deuxime ligne provoque une erreur car la directive #define
est prcde par le caractre { qui n'est pas une espace (un
blanc).
Page 14
pour
pour
pour
pour
...
un entier
un rel
un caractre
une chane de caractres (plus tard dans le cours)
nbCafe ;
float taille ;
char
sexe ;
age = 23
;
nbCafe = 3
;
taille = 1.72 ;
sexe = 'M'
;
1.
printf("%d%d", age,
fait afficher :
2.
233
nbCafe);
printf("%3d%4d", age,
fait afficher :
^23^^^3
4.
printf("age
: %4d\n\n", age);
printf("Nombre de tasses de caf : %4d\n", nbCafe);
fait afficher :
age
: ^^23
Page 15
5.
1.7200001.720000^1.720^^^^1.72
7.
M^^M^^^^M
fait afficher :
Les informations de la personne :
-
sexe
age
taille
Nb. caf
:
:
:
:
^^^^M
^^^23 ans
^1.72 mtre
^^^^3 tasse(s)
d.5) Attention :
Pour un long messsage qui dpasse une ligne :
printf("L'employ est un analyste qui gagne %6.2f $ par "
"semaine et reoit un bonus de %5.1f $\n", salHebdo,
bonus);
Nous reviendrons plus tard sur les autres dtails de printf.
Page 16
2.
41^1.70
Page 17
Entrez sexe,
nbJrs = 30 ;
Page 18
OU
if (condition)
instruction 1
6.b) Fonctionnement :
Si la condition vaut vraie (c'est--dire, en C, sa valeur
est non nulle) on excute l'instruction numro 1
Dans le cas contraire (sinon) et si la clause else se
prsente, on effectue l'instruction 2.
6.c) Remarques :
1)
2)
3)
4)
6.d) Exemples :
1.
if ( age <= 11 )
printf("C'est un enfant\n") ;
else
printf("C'est un adolescent ou un adulte\n") ;
2.
3.
nbFem =
nbFem + 1 ;
Page 19
4.
5.
Cas spcial :
int a, b = 5 ;
if ( a = b ) /* on reoit souvent un "warning" */
printf("Est-il possible ?\n");
else
printf("L'instruction sous else\n");
if (a == b)
au lieu de
if ( a = b).
Cependant, notre surprise, le bloc fait afficher :
Est-il possible ?
Premirement, le compilateur affecte b a, ainsi a vaut 5.
Aprs, il vrifie : if (a) , c'est--dire, si a est non nul.
Comme a vaut 5 qui n'est pas zro, la condition vaut vraie,
le compilateur fait excuter l'instruction sous if.
Page 20
7.a) Syntaxe :
switch (expresion)
{
case constante 1 :
case constante 2 :
suite 1 d'instruction(s)
suite 2 d'instruction(s)
.......
case constante n :
default
suite n d'instruction(s)
suite n+1 d'instruction(s)
}
Le mot "default" a le sens de "autrement".
Exemple d'illustration de cette syntaxe :
char poste ;
float bonus ;
.....
switch ( toupper(poste) ) /* suivant que le poste
(en MAJUSCULE) vaut */
{ case 'A'
bonus = 235.50 ;
printf("analyste\n");
break ;
case 'O'
case 'P'
:
:
case 'S'
bonus = 150.75 ;
printf("Secrtaire\n");
break ;
default
printf("poste erron\n");
bonus = 175.00 ;
break ;
Page 21
7.b) Fonctionnement
7.c) Remarque
7.d) Exemples
Exemple 1 :
crire un bloc d'instruction permettant de saisir le rang d'une
journe de la semaine ( 1 : dimanche, 2 : lundi, ...) et
d'afficher un message du genre :
On travaille trs fort!
La fin de semaine s'en vient
Youpi! c'est la fin de semaine
rang erron!
(pour
(pour
(pour
(pour
lundi jeudi)
vendredi)
samedi, dimanche)
rang imprvu)
Page 22
Solution :
int rang ;
printf("Entrez le rang d'une journe (entre 1 et 7) ");
scanf ("%d", &rang);
switch (rang)
{ /* du lundi jeudi : */
case 2 :
case 3 :
case 4 :
case 5 : printf("On travaille trs fort!\n");
break;
/* le vendredi : */
case 6 : printf("La fin de semaine s'en vient\n");
break ;
/* samedi ou dimanche : */
case 7 :
case 1 : printf("Youpi! c'est la fin de semaine\n");
break ;
/* autrement : */
default: printf("rang erron!\n");
}
Exemple 2 :
Pour satisfaire tout le personnel, la socit "LA GNREUSE"
dcide d'accorder une bonification de 500 $ aux analystes,
400 $ pour les programmeurs, oprateurs et 375 $ pour les
secrtaires.
crire un programme en C permettant :
- d'obtenir le salaire hebdomadaire
- d'obtenir le poste de travail : c'est un seul caractre
dont :
'A'
'P'
'O'
'S'
ou
ou
ou
ou
'a'
'p'
'o'
's'
pour
pour
pour
pour
analyste
programmeur
oprateur
secrtaire
Page 23
Solution :
#include <stdio.h>
#include <ctype.h>
void main()
{ char poste ;
float bonus, salHebdo ;
#define BONUS_A
#define BONUS_OP
500.0
400.0
#define BONUS_S
375.0
/*
/*
/*
/*
Bonus
Bonus
ou un
Bonus
pour un analyste
*/
pour un programmeur*/
oprateur
*/
pour un secrtaire */
:
: bonus = BONUS_OP ;
if ( poste == 'O')
printf("oprateur ");
else printf("programmeur ");
break ;
case 'S'
}
: bonus = BONUS_S ;
printf("secrtaire ");
Page 24
7.e) Exercices :
pour
pour
pour
un cercle
un rectangle
un carr
du
du
du
du
du
du
du
du
du
du
du
du
21-3
21-4
21-5
22-6
23-7
23-8
23-9
23-10
22-11
21-12
21-1
20-2
au
au
au
au
au
au
au
au
au
au
au
au
20-4
20-5
21-6
22-7
22-8
22-9
22-10
21-11
20-12
20-1
19-2
20-3
Page 25
Page 26