"#$
!
"#
$ % %&%' ( )%
'
% " ********************************************************************************************************************
*
' +,)-" ,'****************************************************************************************************************************************
*
% .%( .%+&%
'
/%) ,'0
& (% - ., ' 0 /%1%"- ,' )/-'
.+, + &&%********************************************************************************************************************************************************
*
%( )
%+%' ( 2.%( )% 3 + 4 %(******************************************************************************************5
5*
%( '
(
,'( ****************************************************************************************************************************6
7*
(,+ %( )% ',&4+%( ,- )% %1 %
/%"+ ' ************************************************************************
6*
%( ,.%+ %-+(************************************************************************************************************************************8
*
%( ",'3%+( ,'( )% 2.%(************************************************************************************************************ 9
"#
$ ( ( % )% ',&4+%( % )% " + " %+%( - " 3 %+ ************************************************************
*
,'" ,' % ": **************************************************************************************************************************
*
,'" ,' (" ' ***************************************************************************************************************************
*
,'" ,' % ": + ********************************************************************************************************************
"#
$ %( ( +-" -+%( ",') ,''% %( %
%( 4,-" %( ********************************************************* 5
*
/ '( +-" ,' ( ***
,+( *** ( ',' ******************************************************************************************** 5
*
%( ,.%+ %-+( , ;-%(************************************************************************************************************ 7
*
/ '( +-" ,' - " ( ,- ***
+% ********************************************************************************************* 6
5*
4,-" %
' ;-% ***
+% *** ***************************************************************************************************
7*
/ '( +-" ,' .,-+ *** ********************************************************************************************************************* <
6*
/ '( +-" ,' +%.% %+ ***
' ;-% **************************************************************************************** 8
"#
5 $ %(
4 % -1 %
%( ": '%( )% " + " %+%(*********************************************************************
*
%(
4 % -1 )% ',&4+%( = '
, >*****************************************************************************
*
'
(
,' )%(
4 % -1 *****************************************************************************************************
*
%( ": '%( )% " + " %+%( ********************************************************************************************************
5*
,'" ,'( (-+ %( ": '%( )% " + " %+%(***********************************************************************
"#
7 $ %( ,'" ,'(**************************************************************************************************************************************** 5
*
' +,)-" ,'************************************************************************************************************************************** 5
*
)%" +
,'**************************************************************************************************************************************** 5
*
,'" ,'( ( '( . (( % )/ + -&%' ( % '% +%'3,2 ' + %' .+, + &&%****************************************************************************************************************************************************** 7
5*
,'" ,' +%'3,2 ' -'% 3 %-+ - .+, + &&% % ( '( . (( %
)/ + -&%' ( *************************************************************************************************************************************************** <
7*
,'" ,'( 3%" . (( % )/ + -&%' (******************************************************************************** <
6*
+%(-&% (-+ 3 + 4 %( %
,'" ,'(************************************************************************************* 8
*
% . (( % )% . + &% +%( %' +% ,'" ,'( ,- %' +% ,'" ,'( %
.+, + &&% .+ '" . ******************************************************************************************************************************* 8
. ? *********************************************************************************************************************************************************************************
"
. ? ********************************************************************************************************************************************************
. ? ********************************************************************************************************************************************************************************* 5
"
. ? ********************************************************************************************************************************************************
. ? *********************************************************************************************************************************************************************************5
"
. ? ********************************************************************************************************************************************************55
. ?5 *********************************************************************************************************************************************************************************79
",++%" ,' )- . '?5**********************************************************************************************************************************************75
. ?7 *********************************************************************************************************************************************************************************6
"
. ?7 ********************************************************************************************************************************************************6
%
=@ A
998> ***********************************************************************************************************************66
"
B
**************************************************************************************************************************6
%
C =@
998>*************************************************************************************************************************** 9
"
B
C ******************************************************************************************************************************
4! D
# **********************************************************************************************************************************************************************
"#
% %&%' ( )%
,!E
'
%"
,
!!
A
*
"
"FF
! "FF
D
* % .%( .%+&%
.+, + &&%
*
'
/%)
,'0
,' )/-'
"#
, l'aide d'un diteur (traitement de textes). Le nom du fichier
contient l'extension .CPP, exemple: EXI_1.CPP (menu edit ).
$#
0 c'est dire cration des codes machine destins au
microprocesseur utilis. Le compilateur indique les erreurs de syntaxe mais ignore les fonctions
bibliothque appeles par le programme.
Le compilateur gnre un fichier binaire, non listable, appel fichier objet: EXI_1.OBJ (commande
compile ).
%#
: Le code machine des fonctions bibliothque est charg, cration d'un fichier
binaire, non listable, appel fichier executable: EXI_1.EXE (commande build all ).
&#
Les compilateurs permettent en gnral de construire des programmes composs de plusieurs fichiers
sources, d'ajouter un programme des units dj compiles ...
%
G
G
A
L
H
H
=>
*#I
*#I
=M4,'@,-+M>N
=M.
#=>N J
/
D
O
J!!
/
# ***M>N
A
K! !
Le langage C distingue les minuscules, des majuscules. Les mots rservs du langage C doivent tre
crits
*
On a introduit dans ce programme la notion dinterface homme/machine (IHM).
Lutilisateur visualise une information sur lcran,
Lutilisateur, par une action sur le clavier, fournit une information au programme.
%
G
G
A
L
H
H
=>
*#I
*#I
J!!
0 !0
N J
A
! J
=M4,'@,-+M>N
J
/
P 9N J
J
! P 79 N J
J
P = F !>J N J
J
=M3
$ Q R M0
>N
=M.
# ***M>N
D #=>N J
/
A J
O
+
K! !
%( )
%+%' ( 2.%( )% 3 +
4 %(
>
Le langage C distingue plusieurs types d'entiers:
___________________________________________________________
2.%
)%("+ . ,'
% &%&, +%
___________________________________________________________
int
unsigned int
short
unsigned short
char
caractre sign
1 octet : 27 n 27 1
unsigned char
caractre non sign
1 octet : 0 n 28
_____________________________________________________________
Numration: En dcimal les nombres s'crivent tels que, prcds de 0x en hexadcimal.
exemple: 127 en dcimal s'crit 0x7f en hexadcimal.
Remarque: En langage C, le type # est un cas particulier du type entier:
Exemples:
Les caractres alphanumriques s'crivent entre
Le
Le
Le
Le
%
G
G
A
L
H
H
=>
*#I
*#I
J!!
0 !0
N J
A
! J
#
0 AN
=M4,'@,-+M>N
J
/
P 9N J
J
! P 79 N J
J
P 67 N
APS BN
P = F !>J N J
J
=T 3
$ Q R U0
>N
=T
# D
$ Q R U0 > N
=T
# D
A $ Q R U0 > N
=T
# D
$ Q R U0A> N
=T
# D
A$ Q R U0A> N
=M.
# ***M>N
D #=>N J
/
A J
K! !
O
+
7* (,+
%( )% ',&4+%( ,- )% %1 %
>
,'"
/%"+ '
,' .+ '
Ce n'est pas une instruction du langage C, mais une fonction de la bibliothque stdio.h.
'!
! (
printf("BONJOUR");
printf("BONJOUR\n");
%
G
G
A
L
H
H
=>
*#I
*#I
=M4,'@,-+ M>N
=M
4% -R M>N J
A
=M4,'@,-+MN J
=M4,''%( 3 " '"%(M>N
=M.
# ***M>N
#=>N J
/
A J
D
O
+
(
!
G
G
A
L
H
H
=>
*#I
*#I
#
N
P66N
=MQ R M0 >N
J
J
J
J
J
J
J
J
J
=MQ R M0 >N
=MQ R M0 >N
=MQ R M0 >N
D
O
=M.
#=>N J
#
# D
("
V
D J
# D
("
V
D J
# D
("
V
D J
# D
J
D J
# ***M>N
A J
J
J
!
#
# D
$
"
%
G
G
A
L
6
H
H
=>
#
N
P/ /N
=M
=M.
D #=>N J
# $$$$
"
# $$$$$$$
*#I
*#I
J
PQ
/
("
#
P Q R M0 0 >N
# ***M>N
A J
O
+
*
%d
%x
%u
(
affichage en dcimal (entiers de type int),
affichage en hexadcimal (entiers de type int),
affichage en dcimal (entiers de type unsigned int),
%
/
?
Soit a et b sont des entiers, a = 21430
b = 4782, calculer et afficher a+b, a b, a*b, a/b, a%b en
format dcimal, et en soignant linterface homme/machine.
a/b donne le quotient de la division, a%b donne le reste de la division.
(
G
G
A
L
H
H
=>
*#I
*#I
0!N
P K 5 9N
!P 5 < N
=M F 4 P Q R M0 F!>N
=M K 4 P Q R M0 K!>N
=M
4 P Q R M0 J!>N
=M
4 P Q R M0 !>N
=M
4 P Q R M0 Q!>N
=M.
D #=>N J
/
A
# ***M>N
J
O
<
%
/
?
Soit a et b sont des rels,
a = 21,43
b = 4,782, calculer et afficher a+b, a b, a*b, a/b, en
soignant linterface homme/machine.
'4 $ Pour le format de sortie pour les rels c'est : %f
(
G
G
A
L
H
H
=>
*#I
*#I
0!N
P K *5 N
!P 5* < N
=M F 4 P Q R M0 F!>N
=M K 4 P Q R M0 K!>N
=M
4 P Q R M0 J!>N
=M
4 P Q R M0 !>N
=M.
D #=>N J
/
O
>
- +%( ,'"
# ***M>N
A
,'( )% (,+
%(
char c,d;
c = 'G';
d = c+'a' 'A';
Les caractres sont des entiers sur 8 bits, on peut donc effectuer des oprations. Sur cet exemple, on
transforme la lettre majuscule G en la lettre minuscule g.
Oprateurs logiques sur les entiers:
& ET | OU ^ OU EXCLUSIF
~ COMPLEMENT A UN
DECALAGE A DROITE.
%
p = n 3;
p = n 3;
DECALAGE A GAUCHE
INCREMENTATION DECREMENTATION
Le langage C autorise des critures simplifies pour l'incrmentation et la dcrmentation de
variables:
i = i+1; est quivalent i++;
i = i 1; est quivalent i ;
OPERATEURS COMBINES
Le langage C autorise des critures simplifies lorsqu'une mme variable est utilise de chaque ct
du signe = d'une affectation. Ces critures sont viter lorsque l'on dbute l'tude du langage C car
elles nuisent la lisibilit du programme.
a = a+b;
est quivalent
a+= b;
a = a b;
est quivalent
a = b;
a = a & b;
est quivalent
a&= b;
LES DECLARATIONS DE CONSTANTES
Le langage C autorise 2 mthodes pour dfinir des constantes.
"
:
d'une variable, dont la valeur sera constante pour tout le programme:
Exemple:
A
L
=>
. P * 5 78N
0 W P <* N
P J W J. N
****
O
Dans ce cas, le compilateur rserve de la place en mmoire (ici 4 octets), pour la variable pi, mais
dont on ne peut changer la valeur.
$
Exemple:
G
A
L
W !
. P * 5 78N
=>
0 W P <* N
J W J. N
****
O
Le compilateur ne rserve pas de place en mmoire. Les constantes dclares par G
traditionnellement en majuscules, mais ce n'est pas une obligation.
*
s'crivent
Le langage C permet d'effectuer des oprations de conversion de type: On utilise pour cela l'oprateur
de "cast"().
9
Exemple :
G
G
A
L
H
H
=>
*#I
*#I
P9
50EN
0 N
P<8*6 0 N
EP= > N
P=
>N
P= # >N
P= # > N
=M" A
=M" A
=M" A
=M" A
=M.
#
KI $ Q7* KI Q R M0 0E>N
KI
$ Q KI Q7* R M0 0 >N
KI # $ Q KI Q R M0 0 >N
KI # $ Q7* KI Q R M0 0 >N
# M>N D #=>N
O
+
"#
(
,!E
3 %+
$
!
,'"
,'
% ":
# de deux faons:
Exemple:
K A
Exemple:
char alpha;
printf("ENTRER UN CARACTERE (ATTENTION PAS DE RETURN) ");
alpha = getch();
printf("\nVOICI CE CARACTERE: %c",alpha);
#
D
*
#=> D
*
,'"
La fonction
, appartenant la bibliothque
type de variable.
Les variables saisir sont formates, le nom de la variable est prcd du symbole & dsignant
l'adresse de la variable.
Exemples:
char alpha;
int i;
float r;
scanf("%c",&alpha);
scanf("%d",&i);
scanf("%x",&i);
scanf("%f",&r);
+
$ Si l'utilisateur ne respecte pas le format indiqu dans
erreur n'est gnre.
%
char alpha;
scanf("%d",&alpha);
Si l'utilisateur saisie 97 tout va bien, alpha devient le caractre dont le code ASCII vaut 97.
Si l'utilisateur saisie a, sa saisie est ignore.
*
,'"
,'
% ": +
*#.
char c;
printf("ENTRER UN CARACTERE: ");
c = getchar();
La fonction D # est moins gourmande en place mmoire que scanf. Il vaut mieux l'utiliser quand
cela est possible; D # utilise le flux d'entre exactement comme scanf.
"#
%( ( +-" -+%( ",')
,!E
,''%
%( %
%( 4,-" %(
$
!
+
/ '( +-"
,' ( ***
Il s'agit de l'instruction:
>
L4 ," )/ '( +-" ,'(O
L4 ," )/ '( +-" ,'(O
Organigramme:
oui
non
condition
vraie
bloc 1 d'
instructions
bloc 2 d'
instructions
suite du programme
Syntaxe en C:
>
L
************N
************N
************N
O
L
************N
************N
************N
O
5
J!
J!
oui
A
>
L4 ," )/ '( +-"
,'(O
non
condition
vraie
bloc d'
instructions
suite du programme
=
Syntaxe en C:
+
*
>
L
************N
************N
************N
O
J!
$ les {} ne sont pas ncessaires lorsque les blocs ne comportent qu'une seule instruction.
%( ,.%+
%-+( ,
;-%(
test d'galit:
= PP!>
= XP!>
= H!>
= HP!>
= I!>
test de ET LOGIQUE:
==
>>
> YY =
% /
> ZZ =
,- /
M
==
test de OU LOGIQUE
M
=X=
!M
!M
>>
>>
/
= IP!>
/ '( +-"
est quivalent
char reponse;
printf("Voulez vous jouer ?");
==
P D # =>> PP/ />
printf("BONJOUR\n");
else printf("TANT PIS"\n);
+% ***
>
Syntaxe:
[
L
#=A
$ ******N
*******N
! \N
$********N
********N
! \N
>
*
*
*
etc ...
$ *******N
********N
O
le bloc "default" n'est pas obligatoire.
Linstruction switch correspond une cascade dinstructions if ...else
Exemple:
Cette instruction est commode pour fabriquer des "menus":
#
#
[
L
# N
=M ( % . + +,-.%
.%+ R M>N
=M ( %
.: 4% ;-%
.%+ R M>N
=M.,-+ (,+ +
.%+ (R M>N
=MR 3, +% ":, 1$ M>N
P D # =>N
#= # >
/ /$ *******N
*******N
! \N
/ /$ ******N
******N
! \N
/(/$
!
=MR
\N
O
5*
4,-" %
+% ***
=
A
>
L4 ," )/ '( +-" ,'(O
Il s'agit de l'instruction:
Organigramme:
oui
non
condition
vraie
bloc d'
instructions
Syntaxe en C:
[#
>
L
************N
************N
************N
O
J!
Le test se fait / !
+
K
K
7*
les {} ne sont pas ncessaires lorsque le bloc ne comporte qu'une seule instruction.
On peut rencontrer la construction suivante: [# =
>N termine par un ; et
sans la prsence du bloc d'instructions. Cette construction signifie: M
/
A
M*
/ '( +-"
Il s'agit de l'instruction:
=
N
L4 ," )/ '( +-"
>
,'(O
Organigramme:
initialisation
condition de
continuit vraie
non
oui
bloc d'instructions
modification
suite du programme
Syntaxe en C:
=
>
L
************N
************N
************N
O
J!
Remarques:
Les {} ne sont pas ncessaires lorsque le bloc ne comporte qu'une seule instruction.
Les 3 instructions du for ne portent pas forcment sur la mme variable.
Une instruction peut tre omise, mais pas les ;
<
= P 9 N H 9 N FF>
L
************N
J!
************N
************N
O
Exemples:
non
i < 10
oui
bloc d'instructions
suite du
programme
i=i+1
=NN>
La boucle
L
************N
************N
************N
O
J!
H 9 N FF>
J!
F JN
O
%
6*
Il s'agit de l'instruction:
,'(O
Organigramme:
bloc d'
instructions
oui
non
condition
vraie
suite du programme
Syntaxe en C:
L
************N
************N
************N
O
[# =
Le test se faisant
+
J!
>N
$ les {} ne sont pas ncessaires lorsque le bloc ne comporte qu'une seule instruction.
"#
%(
4 % -1 %
,!E
%( ":
$
!,
%(
4 % -1 )% ',&4+%( = '
!
taille et par ses lments.
%
Dclaration:
>
* Un tableau est caractris par sa
&
W
^N
Exemples:
] 9^N
! ] 9^N
Utilisation: Un lment du tableau est repr par son indice. En langage C les tableaux
commencent l'indice 0. L'indice maximum est donc dim 1.
Appel:
Exemples:
] ^ P 7N
! ] ^ P 6* <8N
=MQ M0
] ^>N
=MQ M0Y
! ] ^>N
&
^]
^N
Exemples:
]5^]7^N
! ] ^] 9^N
Utilisation: Un lment du tableau est repr par ses indices. En langage C les tableaux
commencent aux indices 0. Les indices maximum sont donc dim1 1, dim2 1.
Appel:
^]
Exemples:
] ^]5^ P 7N
! ] ^]E^ P 6* <8N
=MQ M0
] ^]E^>N
=MQ M0Y
! ] ^]E^>N
'
,' )%(
4 % -1
0650
! ]5^ P L *6 07*8<0K<09*98ON
] ^] ^ P LL 070 O0L<050 OON J
%( ":
] 9^N
^N
1 ] 9^ P M4,'@,-+ XMN
>N
] 9^N
=M%' +%+ -' %1 %$ M>N
=MQ M0
>N est quivalent
>N
+
$ scanf ne permet pas la saisie d'une chane comportant des espaces: les caractres saisis
partir de l'espace ne sont pas pris en compte (l'espace est un dlimiteur au mme titre que LF) mais
rangs dans le tampon d'entre. Pour saisir une chane de type "il fait beau", il faut utiliser gets.
A l'issue de la saisie d'une chane de caractres, le compilateur ajoute '\0' en mmoire aprs le dernier
caractre.
5*
,'"
La bibliothque /
0 fournit une multitude de fonctions pratiques pour le traitement de chanes
de caractres. Voici quelques fonctions les plus frquemment utilises:
# _
=H I>
W=H I0 H I>
=H I0 H I>
=H I0 H I>
+
Comme le nom d'une chane de caractres reprsente une adresse fixe en mmoire, on ne peut
pas 'affecter' une autre chane au nom d'un tableau:
"#
%( ,'"
,!E
,'(
$
1
L'imbrication de fonctions n'est pas autorise en C: une fonction ne peut pas tre dclare l'intrieur
d'une autre fonction. Par contre, une fonction peut
une autre fonction. Cette dernire doit tre
dclare A
celle qui l'appelle.
Une fonction possde un et un seul point d'entre, mais ventuellement plusieurs points de sortie (
l'aide du mot
).
-
A
A
!
!
* )%"
/
D
+
,'
=>
! D !
D >
est le type de la valeur renvoye par la fonction. ' " est le type du 1
Les variables locales sont des variables qui ne sont connues qu lintrieur de la fonction.
est value lors de linstruction return (expression) ;, cest la valeur que renvoie
la fonction quand elle est appele depuis main().
%
$
=
>L J
J
0! N
P N
!P7 N
J F! N J A
B
A
A W
O
5
%
G
G
H
H
A
L
*#I
*#I
=>
=M!
R M>N
O
A
L
=>
!
=>N J
=M.,-+ ",'
#=>N
J
'-%+ + ..%+ -'% ,-":%$ M>N
O
)
# D
D M4
!
M
# D
*
%
G
G
H
H
A
L
*#I
*#I
=>
=M!
R M>N
O
A
L
!
=>
E
=>N
=M
J
R M>N
O
A
L
D
O
=>
=>N J
=M.,-+ ",'
#=>N
J
'-%+ + ..%+ -'% ,-":%$ M>N
%
G
G
H
H
A
L
=>
*#I
*#I
J
N
JA
!
=M%' +%+ -' ',&4+%$ M>N
=MQ M0Y >N
P J N
=M3, " (,' " ++%$ Q R M0
O
A
L
=>
=>N J
=M.,-+ ",'
#=>N
>N
J
'-%+ + ..%+ -'% ,-":%$ M>N
O
"
Les variables n et n2 ne sont connues que de la fonction carr on les appels des variables locaux.
%
G
G
5
H
H
A
L
=>
*#I
*#I
J
N
JA
!
=M%' +%+ -' ',&4+%$ M>N
=MQ M0Y >N
P J N
=M3, " (,' " ++%$ Q R M0
>N
O
A
L
! =>
N
JA
!
! J
=M%' +%+ -' ',&4+%$ M>N
=MQ M0Y >N
P J J N
=M3, " (,' "-4%$ Q R M0 >N
O
A
L
=>
#
# N
JA
!
=> J
=M" "- )- " ++%
.%+ R M>N
=M" "- )- "-4%
.%+ R M>N
=MR 3, +% ":, 1$ M>N
=MQ M0Y # >N
#= #
L
>
/ /$
=>N!
/ /$ ! =>N!
O
=MR .,-+ ",'
#=>N
\N
\N
O
"
Les 2 variables locales n sont indpendantes l'une de l'autre.
La variable locale choix n'est connue que de main().
%
G
G
7
H
H
N
A
L
*#I
*#I
JA
=>
! D !
N JA
!
J
=M%' +%+ -' ',&4+%$ M>N
=MQ M0Y >N
P J N
=M3, " (,' " ++%$ Q R M0
>N
O
A
L
! =>
N JA
!
J
=M%' +%+ -' ',&4+%$ M>N
=MQ M0Y >N
P J J N
=M3, " (,' "-4%$ Q R M0 >N
O
A
L
#
=>
# N
JA
!
=> J
=M" "- )- " ++%
.%+ R M>N
=M" "- )- "-4%
.%+ R M>N
=MR 3, +% ":, 1$ M>N
=MQ M0Y # >N
[ #= # >
L
/ /$
=>N! \N
/ /$ ! =>N! \N
O
=MR .,-+ ",' '-%+ + ..%+ -'% ,-":%$ M>N
D #=>N
O
"
La variable globale n est connue de tout le programme (fonctions et main()).
La variable locale choix n'est connue que de main().
Le fichier den tte na pas chang.
2
5*
%
G
G
6
H
H
*#I
*#I
!
=> J
L
N JA
L
=M%
=MQ M0Y
>N
O[# ==
I > YY =
=
>N
O
A
L
9 $ M>N
HP 9>>
=>
N
P
=>N
=M
=M.,-+ (,+
#=>N
$ Q R M0 >N
+ + ..%+ -'% ,-":% M>N
O
7*
,'"
,'( 3%" . ((
% )/ + -&%' (
Ce paragraphe traite directement du cas gnral: fonctions de type void ou non (renvoyant une valeur
ou non).
Ces fonctions utilisent les valeurs de certaines variables du programme les ayant appel: on passe ces
valeurs au moyen d'arguments dclars avec la fonction.
%
G
G
H
H
=
J
N JA
P J N
= >N
*#I
*#I
> J
J
J
O
<
A
L
=>
0 0
0
N
JA
!
J
=M%' +%+ -' ',&4+%$ M>N
=MQ M0Y >N
P
= >N
=M%' +%+ -' - +% ',&4+%$ M>N
=MQ M0Y >N
P
= >N
=M3, " %-+( " ++%($ Q Q R R M0
0
=M.,-+ (,+ + + ..%+ -'% ,-":%$ M>N
#=>N
>N
O
On peut ainsi appeler la fonction carre autant de fois que l'on veut avec des variables diffrentes.
x est un paramtre, ou argument: ce n'est pas une variable du programme.
S'il y a plusieurs arguments passer, il faut respecter la syntaxe suivante:
Exemples: void fonction1(int x, int y)
6* +%(-&% (-+ 3 +
4 %( %
,'(
On a donc vu qu'une variable D ! est dclare au dbut du programme et qu'elle est connue de
tout le programme.
A
! D !
9
!
/
D
0
A
*
On a vu aussi qu'une variable
(dclare au dbut d'une fonction ou de main()) n'est connue que
de cette fonction ou de main(). Une variable locale est encore appele
*
Les variables locales ne sont pas initialises (sauf si on le fait dans le programme) et elles perdent
leur valeur chaque appel la fonction.
On peut allonger la dure de vie d'une variable locale en la dclarant
* Lors d'un nouvel appel
la fonction, la variable garde la valeur obtenue la fin de l'excution prcdente. Une variable
est initialise 0 lors du premier appel la fonction.
Exemple:
devient
,'( %
*%
(W
$
#include <stdio.h>
A
#= J 0
JW>
L
int tampon;
tampon = Jx;
Jx = Jy;
Jy = tampon;
O
A
=>
L
int a = 5 , b = 8 ;
#=Y 0Y!>N
printf(%a=%d\n%, a) ;
printf(%b=%d\n%, b) ;
O
. (( % )%( . + &% +%(
. + )+%((%
# les adresses
# $% ! " #
+ ,
! &''()&'*'
!
!"# I
"
%
!*
&
!*
! .
! #!+
. ?
%
Ecrire un programme qui saisit 2 entiers et affiche successivement la somme, la diffrence, le produit
et le quotient de ces 2 entiers.
%
Ecrire un programme qui demande lutilisateur de donner le rayon dun cercle et lui retourne sa
surface et son primtre.
%
Ecrire un programme qui saisit deux entiers a et b et permute la valeur de ces deux entiers.
Ecrire un programme qui saisit un caractre c puis affiche son code ASCII en dcimal, en octal(base
huit) et en hexadcimal(base seize).
"
. ?
%
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b;
printf("Entrer deux nombres entiers :");
scanf("%d %d",&a,&b);
printf("\nLa
printf("\nLa
printf("\nLe
printf("\nLe
%
#include<stdio.h>
#include<conio.h>
void main()
{
/* il faut utiliser une variable tampon pour l'echange */
int a,b,tampon;
printf("Entrer 2 entiers a et b:");
scanf("%d %d",&a,&b);
tampon=a;
a=b;
b=tampon;
printf("a vaut maintenant %d\n",a);
printf("b vaut maintenant %d\n",b);
printf("Pour continuer frapper une touche...");
getch(); /* Attente d'une saisie clavier */
}
%
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define Pi 4*atan(1)
void main()
{
float r;
printf("Entrer le rayon du cercle :");
scanf("%f",&r);
printf("La surface du cercle vaut %f \n",Pi*r*r);
printf("Le perimetre du cercle vaut %f\n",2*Pi*r);
printf("Pour continuer frapper une touche...");
getch(); /* Attente d'une saisie clavier */
}
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main()
{
int n;
float x;
printf("\nEntrer un reel :");
scanf("%f",&x);
printf("Entrer une puissance entiere:");
scanf("%d",&n);
printf("%f a la puissance %d vaut %f\n",x,n,pow(x,n));
printf("Pour continuer frapper une touche...");
getch(); /* Attente d'une saisie clavier */
}
#include <stdio.h>
#include <conio.h>
void main()
{
char c;
printf("Entrer un caractre :");
scanf("%c",&c);
printf("%d\n",c);
# $% ! " #
! &''()&'*'
+ ,
!
!"# I
"
%
!*
!* ! .
&
! #!+
-
. ?
( )
*+ ,
%
Considrez la squence d'instructions suivante:
! "
> Copiez la squence d'instructions en utilisant des tabulateurs pour marquer les blocs
appartenant ensemble.
!> Dterminez les rponses du programme pour chacun des couples de nombres suivants et
vrifiez l'aide de l'ordinateur.
A=10 et B=5
A=5 et B=5
A=5 et B=10
A=10 et B=10
A=20 et B=10
A=20 et B=20
%
Considrez la squence d'instructions suivante:
##
! "
> Copiez la squence d'instructions en utilisant des tabulateurs pour marquer les blocs
appartenant ensemble.
%
Ecrivez un programme qui saisit un caractre, et qui teste s'il s'agit d'une lettre majuscule, si oui il
renvoie cette lettre en minuscule, sinon il renvoie un message d'erreur.
Ecrivez un programme qui lit trois valeurs entires (A, B et C) au clavier et qui affiche la plus grande
des trois valeurs, en utilisant:
>
!>
Ecrivez un programme qui lit trois valeurs entires (A, B et C) au clavier. Triez les valeurs A, B et C
par changes successifs de manire obtenir :
val(A) val(B) val(C)
Affichez les trois valeurs.
Ecrivez un programme qui lit deux valeurs entires (A et B) au clavier et qui affiche le signe du
produit de A et B sans faire la multiplication.
%
Ecrivez un programme qui lit deux valeurs entires (A et B) au clavier et qui affiche le signe de la
somme de A et B sans faire l'addition. Utilisez la fonction "& de la bibliothque
qui
renvoie la valeur absolue d'un flottant.
<
Ecrivez un programme qui calcule les solutions relles d'une quation du second degr
en discutant la formule:
Utilisez une variable d'aide ) pour la valeur du discriminant b2 4ac et dcidez l'aide de ), si
l'quation a une, deux ou aucune solution relle.
Utilisez des variables du type
pour A, B et C.
Considrez aussi les cas o l'utilisateur entre des valeurs nulles pour A; pour A et B; pour A, B et C.
Affichez les rsultats et les messages ncessaires sur l'cran.
Ecrivez un programme qui permet de saisir un entier entre 1 et 7 et affiche en toutes lettres le nom du
jour de la semaine qui lui correspond.
"
. ?
%
if (A>B) printf ("premier choix \n"); else
if (A>10) printf ("deuxime choix \n");
if (B<10) printf ("troisime choix \n");
else printf ("quatrime choix \n");
> Copiez la squence d'instructions en utilisant des tabulateurs pour marquer les blocs
appartenant ensemble.
if (A>B)
printf ("premier choix \n");
else
if (A>10)
printf ("deuxime choix \n");
if (B<10)
printf ("troisime choix \n");
else
printf ("quatrime choix \n");
!> Dterminez les rponses du programme pour chacun des couples de nombres suivants et
vrifiez l'aide de l'ordinateur.
A=10 et B=5 :
A=5 et B=5 :
A=5 et B=10 :
! "
A=10 et B=10 :
! "
A=20 et B=10 :
! "
A=20 et B=20 :
! "
%
Considrez la squence d'instructions suivante:
if (A>B)
if (A>10)
printf ("premier choix \n"); else if (B<10)
printf ("deuxime choix \n"); else
if (A==B) printf ("troisime choix \n");
else printf ("quatrime choix \n");
> Copiez la squence d'instructions en utilisant des tabulateurs pour marquer les blocs
appartenant ensemble.
if (A>B)
if (A>10)
printf ("premier choix \n");
else if (B<10)
printf ("deuxime choix \n");
else if (A==B)
printf ("troisime choix \n");
else
printf ("quatrime choix \n");
!> Le rsultat:
apparat pour (A>B) et (A>10)
! "
%
#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();
}
5
>
#include <stdio.h>
#include <conio.h>
void main()
{
'
( )
*
+
"
- - .
&
.
.'
( )#
( )#
' ( )
( )#'
/" 0"
"
"
( )
printf("Tapez une touche pour continuer");
getch();
}
<
K *** K
#include <stdio.h>
#include <conio.h>
void main()
{
/* Tri par ordre dcroissant de trois entiers
en changeant les valeurs
*/
int A, B, C, AIDE;
printf("Introduisez trois nombres entiers :");
scanf("%d %d %d", &A, &B, &C);
printf("Avant le tri : \tA = %d\tB = %d\tC = %d\n", A, B, C);
12 3"
"
"
$
21
4
*56 #
#
# *56
7
'
4
*56 #
# '
' # *56
7
12
' 21
'
4
*56 #
# '
' # *56
7
,
# # ' # printf("Tapez une touche pour continuer");
getch();
}
'
#include <stdio.h>
#include <conio.h>
void main()
{
/* Afficher le signe du produit de deux entiers sans
faire la multiplication
*/
int A, B;
printf("Introduisez deux nombres entiers :");
scanf("%d %d", &A, &B);
..
88
..
/
9
- 2 ..
88
..
/
9
- 2 :9"
/
2 -
+:
%
#include <stdio.h>
#include <conio.h>
;
" %
void main()
{
/* Afficher le signe de la somme de deux
faire l'addition
*/
int A, B;
printf("Introduisez deux nombres entiers
scanf("%d %d", &A, &B);
..
88
..
.. "&
88
..
.. "&
/
9
"
- < ..
88
..
..
88
..
..
/
9
"
- < -
entiers sans
:");
"&
"&
"&
"&
"&
"&
:9"
/"
- < +:
printf("\n Tapez une touche pour continuer");
getch();
}
<
#include <stdio.h>
#include <conio.h>
;
" %
void main()
{
/* Calcul des solutions relles d'une quation du second degr */
int A, B, C;
float D; /* Discriminant */
printf("Calcul des solutions relles d'une quation du second \n");
printf("degr de la forme
ax^2 + bx + c = 0 \n\n");
printf("Introduisez les valeurs pour a, b, et c : ");
scanf("%d %d %d", &A, &B, &C);
/* Calcul du discriminant b^2'4ac */
5 #
=
> $ ?% 2 2'
59
5##
4
'
:! "
-
"
$ 1 >2
7
/* b^2'4ac > 0 */
4
/
:
$ < !
$ $ !
# > # -
:! "
5
5
1 >2
1 >2
7
printf("\n tapez une touche pour continuer");
getch();
}
#include <stdio.h>
#include <conio.h>
void main()
{
int N;
string jour[];
printf("Introduisez le numro du jour entre 1 et 7 :");
scanf("%d", &N);
=
4
"
"
"
"
"
"
"
,
>,
E,
?,
G,
H,
J,
"
C
C
C
C
C
C
C
,
#
#
#
#
#
#
#
/
("
(
F
3
I"
5 "
&
&
"D
"D
& "D
& "D
& "D
& "D
& "D
F
*
12
7
/ C
"
"
- ,
printf("Tapez une touche pour continuer");
getch();
}
"
&
"D
21
# $% ! " #
! &''()&'*'
+ ,
!
!"# I
"
%
!*
!* ! .
&
! #!+
-
. ?
)
*+ ,
.
%
/ $
%
Saisir une suite de caractres, compter et afficher le nombre de lettres e et d'espaces. Utiliser les
proprits du tampon.
%
Ecrivez un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur produit et
leur moyenne. Choisissez un type appropri pour les valeurs afficher. Le nombre N est entrer au
clavier. Rsolvez ce problme,
> en utilisant [#
!> en utilisant
> en utilisant
,
K [#
%
Calculez par des soustractions successives le quotient entier et le reste de la division entire de deux
entiers entrs au clavier.
Calculez la somme, le produit et la moyenne d'une suite de chiffres non nuls entrs au clavier, sachant
que la suite est termine par zro. Retenez seulement les chiffres (0, 1 ... 9) lors de l'entre des
donnes et effectuez un signal sonore si les donnes sortent de ce domaine.
%
Calculez le nombre lu rebours d'un nombre positif entr au clavier en supposant que le fichier
d'entre standard contient une suite de chiffres non nuls, termine par zro (Contrlez s'il s'agit
vraiment de chiffres).
%
$ Entre: 1 2 3 4 0
Affichage: 4321
<
Calculez le nombre lu rebours d'un nombre positif entr au clavier en supposant que le fichier
d'entre standard contient le nombre inverser.
%
$ Entre: 1234
Affichage: 4321
Calculez le N ime terme UN de la suite de FIBONACCI qui est donne par la relation de rcurrence:
U1=1 U2=1 UN=UN 1 + UN 2 (pour N>2)
Dterminez le rang N et la valeur UN du terme maximal que l'on peut calculer si on utilise pour UN le
type .
"
. ?
%
#include <stdio.h>
#include <conio.h>
void main()
{
char c;
int compt_espace= 0,compt_e= 0;
printf("ENTRER UNE PHRASE:\n");
while((c=getchar())!='\n')
/*
/*
/*
/*
/*
{
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();
}
%
a) en utilisant [#
#include <stdio.h>
#include <conio.h>
void main()
{
int N;
/* nombre de donnes */
int NOMB;
/* nombre courant
*/
int I;
/* compteur */
long SOM;
/* la somme
des nombres entrs */
double PROD; /* le produit des nombres entrs */
printf("Nombre de donnes : ");
scanf("%d", &N);
IK(#
LMK5#
*#
=
* #B
4
- %
&
"
.BK(
IK( <# BK(
LMK5 2# BK(
*<<
7
printf("La somme
des
printf("Le produit des
printf("La moyenne des
printf("POUR CONTINUER
getch();
b) en utilisant
K [#
SOM=0;
PROD=1;
I=1;
do
55
{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
I++;
}
while(I<=N);
c) en utilisant
%
#include <stdio.h>
#include <conio.h>
void
{
int
int
int
int
main()
NUM;
DEN;
DIV;
RES;
/*
/*
/*
/*
numrateur
de la division entire */
dnominateur de la division entire */
rsultat de la division entire */
reste
de la division entire */
printf("Introduisez le numrateur
: ");
scanf("%d", &NUM);
printf("Introduisez le dnominateur : ");
scanf("%d", &DEN);
M6I#BN(
5*3#
=
M6I #56B
4
M6I$#56B
5*3<<
7
/* ou mieux encore : */
M6I#BN( 5*3#
M6I #56B
5*3<<
M6I$#56B
*/
printf(" %d divis par %d est %d reste %d\n", NUM, DEN, DIV, RES);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}
#include <stdio.h>
#include <conio.h>
void main()
{
int X, N;
int I;
&
M6IN
/*
/*
/*
/*
Les donnes
Le compteur
Type double
grandeur du
*/
*/
cause de la */
rsultat.
*/
4
printf("Entrez l'entier naturel X : ");
scanf("%d", &X);
7
=
) #
57
4
printf("Entrez l'exposant
scanf("%d", &N);
N : ");
7
=
"
, -
P -
# -%
M6IN
#include <stdio.h>
#include <conio.h>
void main()
{
int N;
/* nombre de termes calculer */
int I;
/* compteur pour la boucle */
" IK( /* Type float cause de la prcision du rsultat.
4
printf ("Nombre de termes: ");
scanf ("%d", &N);
7
=
B #
IK(# %
*#
* #B
*<<
IK( <#
"
1*
printf("La somme des %d premiers termes est %f \n", N, SOM);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
%
(
6
=
>$
#include <stdio.h>
#include <conio.h>
void main()
{
int X;
int N=0;
int SOM=0;
long PROD=1;
/*
/*
/*
/*
/*
Le chiffre courant
*/
Le compteur des donnes */
La somme actuelle
*/
Le produit actuel ' Type long */
cause de la grandeur du rsultat. */
56
*/
4
/* Saisie des donnes (pour perfectionnistes) */
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);
)
88) Q
"
)
4
B<<
IK(<#)
LMK52#)
7
O) .. B
4/* Seulement si au moins un chiffre a
printf("La somme
des chiffres est %d
printf("Le produit des chiffres est printf("La moyenne des chiffres est -
t accept */
\n", SOM);
\n", PROD);
\n",
" IK(1B);
7
7
=
)
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}
%
#include <stdio.h>
#include <conio.h>
void main()
{
int X;
int N=0;
long VALD=1;
long NOMB=0;
/*
/*
/*
/*
Le chiffre courant
*/
Le compteur des dcimales */
Valeur de la position dcimale courante */
Le nombre rsultat
*/
4
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);
) #
.. ) #Q
"
)
4
BK( <# 3 /52)
B<<
3 /5 2#
7
/" 0"
&
7
=
En remplaant la ligne
NOMB += VALD*X;
par
5
BK(
on n'a plus besoin de la variable VALD. Il faut cependant inclure les fonctions de la bibliothque
/
0. D'autre part, le calcul de 10N serait alors rpt chaque excution de la boucle.
Finalement, cette variante est plus lente et plus volumineuse que la premire.
<
#include <stdio.h>
#include <conio.h>
void main()
{
int NOMB;
/* Le nombre inverser */
int NINV;
/* Le nombre invers
*/
/* Attention: en utilisant le type int, il est impossible */
/* d'inverser correctement des nombres comme 10033 ...
*/
4
printf("Entrez un nombre positif (<10000) : ", NOMB);
scanf("%d", &NOMB);
7
=
BK(
88 BK(
QQQQ
B*B3#
=
BK(
4
B*B3 2#
B*B3 <# BK( BK( 1#
7
/* Autre possibilit : */
/*
B*B3#
BK(
BK( 1#
B*B3 # B*B32
< BK( */
printf("Le nombre 'invers' est : %d\n", NINV);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}
#include <stdio.h>
#include <conio.h>
void
{
int
int
int
main()
U1, U2, UN;
N;
I;
4
printf("Rang du terme demand : ");
scanf("%d", &N);
7
=
N #N>#
/* Initialisation des deux premiers termes */
B##
NB#N
B##>
NB#N>
4
*#E
* #B
*<<
4
NB # N <N>
N # N>
5<
N> # NB
7
7
printf("Valeur du terme de rang %d : %d\n", N, UN);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}
58
# $% ! " #
! &''()&'*'
+ ,
!
!"# I
"
%
!*
!* ! .
&
! #!+
-
. ?5
)
*+ ,
0 1
"
Bibliothque (string.h):
void *
(char *chaine1, char *chaine2)
int
void *
int
void *
Ces fonctions renvoient l'adresse de l'information recherche en cas de succs, sinon le pointeur NULL (c'est dire le
pointeur de valeur 0 ou encore le pointeur faux).
void *
void *
void *
# (chaine,caractre)
# (chaine,caractre)
(chane,sous chane)
Bibliothque (stdlib.h):
int
float
exemple:
(char *chane)
(char *chaine)
itoa(12,texte,10);
?
crire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entres au clavier et affiche le tableau. Calculer et
afficher ensuite la somme des lments du tableau.
crire un programme qui calcule le produit scalaire de deux vecteurs d'entiers - et 3 (de mme
dimension).
%
$
1
8 E
>
1
$? 8 2 8 >
1
$E
?
crire un programme qui dtermine la plus grande et la plus petite valeur dans un tableau d'entiers
. Afficher ensuite la valeur et la position du maximum et du minimum. Si le tableau contient
plusieurs
ou
, le programme retiendra la position du premier maximum ou
minimum rencontr.
?5
. !
$ Rechercher dans un tableau d'entiers une valeur 3
entre au clavier. Afficher la
position de 3
si elle se trouve dans le tableau, sinon afficher un message correspondant. La
valeur .,( qui est utilise pour mmoriser la position de la valeur dans le tableau, aura la valeur
1 aussi longtemps que 3
n'a pas t trouve.
A
$
0 0
Comparer successivement les valeurs du tableau avec la valeur donne.
0 0
0
"
$)
.
1
Comparer le nombre recherch la valeur au milieu du tableau,
s'il y a galit ou si le tableau est puis, arrter le traitement avec un message
correspondant.
si la valeur recherche prcde la valeur actuelle du tableau, continuer la recherche
dans le demi tableau gauche de la position actuelle.
si la valeur recherche suit la valeur actuelle du tableau, continuer la recherche dans le
demi tableau droite de la position actuelle.
crire le programme pour le cas o le tableau A est tri par ordre croissant.
;
$ Quel est l'avantage de la recherche dichotomique ?
?7
Ecrire un programme qui demande l'introduction du nom et du prnom de l'utilisateur et qui
affiche alors la longueur totale du nom sans compter les espaces. Employer la fonction
.
%
$
7
+ 0
C
?6
crire un programme qui lit 5 mots, spars par des espaces et qui les affiche ensuite dans une
ligne, mais dans l'ordre inverse.
Les mots sont mmoriss dans 5 variables M1, ... ,M5.
%
0
O
"
0
"
?
crire un programme qui lit une ligne de texte (ne dpassant pas 200 caractres) la mmorise dans
une variable TXT et affiche ensuite:
> la longueur L de la chane.
!> le nombre de 'e' contenus dans le texte.
> toute la phrase rebours, sans changer le contenu de la variable TXT.
> toute la phrase rebours, aprs avoir invers l'ordre des caractres dans TXT:
%
$
0
O
"
"
O
0
?<
Ecrire un programme qui lit un texte TXT (de moins de 200 caractres) et qui enlve toutes les
apparitions du caractre 'e' en tassant les lments restants. Les modifications se feront dans la
mme variable TXT.
%
$
'
'
?8
Ecrire un programme qui lit un verbe rgulier en "er" au clavier et qui en affiche la conjugaison au
prsent de l'indicatif de ce verbe. Contrlez s'il s'agit bien d'un verbe en "er" avant de conjuguer.
Utiliser les fonctions D ,
,
et
.
%
$
3
C
&
? 9
Ecrire un programme qui lit deux chanes de caractres CH1 et CH2, les compare
lexicographiquement et affiche le rsultat:
%
$
*
*
+
+
'
"
"
"S
"S
,
'
, "&
"&
?
crire un programme qui permet de vrifier si un mot saisit est un palindrome. Un mot est dit
palindrome si la lecture du mot se fait gauche et droite. La taille maximale du mot est 30
caractres. %
$ aziza
",++%"
%
,' )- . '?5
#include<stdio.h>
#include<conio.h>
void main()
{
/* Dclarations */
@TG U /* tableau donn */
int N;
/* dimension
*/
int I;
/* indice courant */
long SOM; /* somme des lments ' type long cause */
/* de la grandeur prvisible du rsultat. */
/* Saisie des donnes */
4
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
7=
B # .. B #G
*#
* B
*<<
4
6 :
"
.@T*U
7
/* Affichage du tableau */
printf("Tableau donn :\n");
*#
* B *<<
@T*U
/* Calcul de la somme */
IK(#
*#
* B *<<
IK( <# @T*U
/* Edition du rsultat */
printf("Somme de lments : - \n", SOM);
printf("\n Tapez une touche pour continuer");
getch();
}
#include<stdio.h>
#include<conio.h>
void main()
{
/* Dclarations */
int U[50], V[50]; /* tableaux donns */
int N;
/* dimension
*/
int I;
/* indice courant
*/
long PS;
/* produit scalaire */
/* Saisie des donnes */
4
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
7=
B # .. B #G
printf("** Premier tableau **\n");
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
scanf("%d", &U[I]);
}
printf("** Deuxime tableau **\n");
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
75
scanf("%d", &V[I]);
}
12 '"
" "
21
LI#
*#
* B *<<
LI <#
9 NT*U23T*U
/* Edition du rsultat */
printf("Produit scalaire : - \n", PS);
printf("\n Tapez une touche pour continuer");
getch();
}
#include<stdio.h>
#include<conio.h>
void main()
{
/* Dclarations */
int A[50]; /* tableau donn */
int N;
/* dimension
*/
int I;
/* indice courant */
int MIN;
/* position du minimum */
int MAX;
/* position du maximum */
/* Saisie des donnes */
4
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
7=
B # .. B #G
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
scanf("%d", &A[I]);
}
/* Affichage du tableau */
printf("Tableau donn :\n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
12 M
"
21
(*B#
( )#
*#
* B *<<
4
T*U T( )U ( )#*
T*U T(*BU (*B#*
7
/* Edition du rsultat */
printf("Position du minimum : %d\n", MIN);
printf("Position du maximum : %d\n", MAX);
printf("Valeur
du minimum : %d\n", A[MIN]);
printf("Valeur
du maximum : %d\n", A[MAX]);
printf("\n Tapez une touche pour continuer");
getch();
}
?5
0 0
:
Comparer successivement les valeurs du tableau avec la valeur donne.
#include<stdio.h>
#include<conio.h>
void main()
{
/* Dclarations */
int A[50]; /* tableau donn */
int VAL;
/* valeur rechercher
*/
int POS;
/* position de la valeur */
77
int N;
int I;
/* dimension
*/
/* indice courant */
#include<stdio.h>
#include<conio.h>
void main()
{
/* Dclarations */
int A[50]; /* tableau donn */
int VAL;
/* valeur rechercher
*/
int POS;
/* position de la valeur */
int N;
/* dimension
*/
int I;
/* indice courant */
*BV (*/ INL 12
"
/* Saisie des donnes */
4
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
7=
B # .. B #G
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
scanf("%d", &A[I]);
}
printf("Elment rechercher : ");
scanf("%d", &VAL );
/* Affichage du tableau */
printf("Tableau donn : \n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
12 *
"
"
"
*BV#
INL#B$
12 M
"
" 0"
21
76
21
21
LKI#$
=
*BV #INL
..
LKI##$
4
(*/# INL<*BV 1>
3 /
T(*/U
INL#(*/$
3 /
T(*/U
*BV#(*/<
LKI#(*/
7
/* Edition du rsultat */
if (POS=='1)
printf("La valeur recherche ne se trouve pas "
"dans le tableau.\n");
else
printf("La valeur %d se trouve la position %d. \n", VAL, POS);
printf("\n Tapez une touche pour continuer");
getch();
}
$2
Dans le pire des cas d'une recherche squentielle, il faut traverser tout le tableau avant de trouver la
valeur ou avant d'tre sr qu'une valeur ne se trouve pas dans le tableau.
Lors de la recherche dichotomique, on limine la moiti des lments du tableau chaque excution
de la boucle. Ainsi, la recherche se termine beaucoup plus rapidement.
La recherche dichotomique devient extrmement avantageuse pour la recherche dans de grands
tableaux (tris) : L'avantage de la recherche dichotomique par rapport la recherche squentielle
monte alors !
avec la grandeur du tableau trier.
%
$
Lors de la recherche dans un tableau de 1024 lments:
le pire des cas pour la recherche squentielle peut entraner 1024 excutions de la boucle.
le pire des cas pour la recherche dichotomique peut entraner 10 excutions de la boucle.
Lors de la recherche dans un tableau de 1 048 576 lments:
le pire des cas pour la recherche squentielle peut entraner 1 048 576 excutions de la boucle.
le pire des cas pour la recherche dichotomique peut entraner 20 excutions de la boucle.
?7
#include<stdio.h>
;
9%
#include<conio.h>
void main(){
{
char NOM[40], PRENOM[40];
printf("Introduisez votre nom et votre prnom: \n");
scanf("%s %s", NOM, PRENOM);
printf("\nBonjour %s %s !\n", NOM, PRENOM);
printf("Votre nom est compos de %d lettres.\n",
BK( <
LM6BK(
/* ou bien
printf("Votre nom est compos de %d lettres.\n",
" BK( LM6BK(
*/
printf("Tapez une touche pour continuer...");
getch();
7
?6
#include <stdio.h>
#include <conio.h>
void main()
{
char M1[30], M2[30], M3[30], M4[30], M5[30];
printf("Entrez 5 mots, spars par des espaces :\n");
"
- - - - (
(> (E (? (G
- - - - (G (? (E (> (
printf("Tapez une touche pour continuer...");
getch();
}
#include<stdio.h>
#include<conio.h>
void main()
{
/* Dclarations */
char TXT[201]; /* chane donne
*/
int I,J; /* indices courants
*/
int L;
/* longueur de la chane
*/
int C;
/* compteur des lettres 'e' */
int AIDE; /* pour l'change des caractres */
/* Saisie des donnes */
printf("Entrez une ligne de texte (max.200 caractres) :\n");
gets(TXT); /* L'utilisation de scanf est impossible pour */
/* lire une phrase contenant un nombre variable de mots. */
12 " '
12 /" " !
12
:
/#
@)@T/U
" "
'
*#
12
A
21
R % 21
/<<
/
12 &
'#
21
A
A"
"S
A A
@)@T*U *<<
@)@T*U##A A '<<
/
"
"
W
* #
*$$
" @)@T*U
12
A A
12
" "
"
21
A A%
A
'
21
*#/$
"
12
* 0
*# F#/$
A
* F
" "
*<< F$$
@)@T*U
21
21
4
*56#@)@T*U
@)@T*U#@)@TFU
@)@TFU# *56
7
@)@
/* ou printf("%s\n",TXT); */
printf("Tapez une touche pour continuer...");
getch();
}
7<
21
?<
#include <stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
/* Dclarations */
char TXT[201]; /* chane donne
*/
int I,J,N;
/* indices courants */
/* Saisie des donnes */
printf("Entrez une ligne de texte (max.200 caractres) :\n");
9
@)@
12 6
12 '
12
A A
" "
,
* 0
" "
B#
*#
=
4
21
:
F
:
A A%
F 21
21
@)@
F#
* B
@)@T*U O# A A 4
@)@TFU # @)@T*U
F<<
7
*<<
7
12 @
"
"S
OO 21
@)@TFU#A A
/* Edition du rsultat */
@)@
printf("Tapez une touche pour continuer...");
getch();
?8
#include<stdio.h>
;
9%
#include<conio.h>
void main()
{
/* Dclarations */
char VERB[20]; /* chane contenant le verbe */
char AFFI[30]; /* chane pour l'affichage
*/
int L;
/* longueur de la chane
*/
/* Saisie des donnes */
printf("Verbe : ");
gets(VERB);
12 '
/#
A
A"9
A
0 &
A
36M
36M T/$>UO#A A 88 36M T/$ UO#A A
"'
A
"
0 &
4
12 '
"
36M T/$>U#A A
"
A% 21
12 ' C 9
%%% 21
VV*T U#A A
"
VV*
C
"
VV* 36M
"
VV*
VV*
% % %
78
A 21
9
%O
VV*T U#A A
"
VV*
"
VV* 36M
"
VV*
VV*
7
printf("Tapez une touche pour continuer...");
getch();
}
? 9
#include<stdio.h>
;
9%
#include<conio.h>
void main()
{
/* Dclarations */
char CH1[200], CH2[200]; /* chanes entres */
int RES; /* rsultat de la fonction strcmp */
printf("Introduisez la premire chane de caractres : "); gets(CH1);
printf("Introduisez la deuxime chane de caractres : "); gets(CH2);
12 '
" "
M6I #
M6I
"
' >
'
"9
"
21
'
' >
' >
'
M6I
-
:9"
'
' >
return 0;
}
#include<stdio.h>
;
9%
#include<conio.h>
void main(){
/* Dclarations */
char mot[30];
int n,i;
printf("Entrer un mot:");
scanf("%s",mot);
n=strlen(mot)'1;
//
#
=
T U##
T $ U
..
1>
<<
7
/*
11>
#$
4
12
<<
7=
"
12
T UO#
"
21
"
21
T $ U 88
##
1>
*/
if(mot[i]==mot[n'i])
printf("Le mot %s est palindrome \n",mot);
else
printf("Le mot %s n'est pas palindrome \n",mot);
printf("Tapez une touche pour continuer...");
getch();
}
69
# $% ! " #
+ ,
! &''()&'*'
!
!"# I
"
%
!*
! *- ! .
&
! #!+
. ?7
)
*+ ,
,
?
crire un programme se servant d'une fonction &,2%''% du type float pour afficher la
moyenne arithmtique de deux nombres rels entrs au clavier.
?
crire une fonction & ' et une fonction & 1 qui dterminent le minimum et le maximum de
deux nombres rels.
crire un programme se servant des fonctions & ' et & 1 pour dterminer le minimum et le
maximum de quatre nombres rels entrs au clavier.
?
crire la fonction @,- %`": deux paramtres ": et ": qui copie la chane de
caractres ": la fin de la chane ": sans utiliser de variable d'aide.
crire le programme principale permettant de saisir deux chanes et de faire appel la fonction
@,- `":.
?5
crire la fonction .
qui permet de vrifier si le nom en paramtre est palindrome ou
non. La fonction retourne A si c'est le cas et
sinon.
crire le programme principale permettant de saisir un nom et de faire appel la fonction
.
.
?7
crire un programme qui permet de remplir un tableau dentiers de dimension N (tel que N50) et
dafficher les nombres impairs.
'4 : Le programme doit comporter au minimum une fonction et deux procdures.
"
%
. ?7
#include<stdio.h>
#include<conio.h>
"
(KY6BB6
"
"
4
)<Y 1>
7
void main()
{
/* Variables locales */
float A,B;
/* Traitements */
printf("Introduire deux nombres : ");
scanf("%f %f", &A, &B);
printf("La moyenne arithmtique de %f et %f est - \n",
A, B, (KY6BB6
printf("Tapez une touche pour continuer");
getch();
}
);
#include <stdio.h>
#include<conio.h>
&
(*B
&
&
&
&
4
) Y
)
Y
7
&
( )
4
) Y
)
Y
7
0
"
4
/* Variables locales */
double A,B,C,D;
/* Traitements */
printf("Introduire 4 rels : ");
scanf("%lf %lf %lf %lf", &A, &B, &C, &D);
printf("Le minimum des 4 rels est - \n",
(*B (*B
printf("Le maximum des 4 rels est - \n",
( ) ( )
printf("Tapez une touche pour continuer");
getch();
7
(*B ' 5
);
( ) ' 5
);
#include<stdio.h>
#include<conio.h>
#include<string.h>
0
4
=
=
'
FKN@6Z'
"
2'
2'
12
' <<
2' > 12
"
2' >
"
0
4
'
' > W
FKN@6Z'
"
21
"
#
4
4
2'
# 2' >
' <<
' ><<
'
T <
U#' >T U
7
2'
#A
12
"
"S
'
21
'
< >U#A
0
4
"
>
'
' >
> <<
#
>#
21
2'
"
char Chaine1[30];
char Chaine2[30];
printf("Entrer chaine n1:");
gets(Chaine1);
printf("Entrer chaine n2:");
gets(Chaine2);
AJOUTE_CH(Chaine1,Chaine2);
printf("La nouvelle est chaine 1 est :%s",Chaine1);
?5
#include <stdio.h>
#include<conio.h>
#include<string.h>
L"
"
/ B
TU
4
int i,n;
n = strlen(LeNom)'1;
i=0;
while((LeNom[i]!= LeNom[n'i+1]) && (i<=n/2))
{
i++;
}
if(LeNom[i]!= LeNom[n'i+1])
return 0;
else
return 1;
7
0
"
4
/* Variable locale */
char nom[50];
/* Traitements */
printf("Introduire votre nom : ");
scanf("%s", nom);
if( L"
==0)
printf("Le nom n'est pas palindrome");
else
printf("Le nom est palindrome");
printf("Tapez une touche pour continuer");
getch();
7
65
2' >
?7
#include<stdio.h>
#include<conio.h>
@"
@"&
"
12
"
"
"&
"
21
4
int Taille;
do
{
printf("Taille du tableau (N<=50) =");
scanf("%d",&Taille);
}while(Taille<0 || Taille>50);
return Taille;
7
0
4
"9
@"
2@
12
int i;
for(i=0;i<Taille;i++)
{
printf("Elment n %d :",i+1);
scanf("%d",&TAB[i]);
}
7
0
4
"9
@"
TU
int i;
for(i=0;i<Taille;i++)
{
if(TAB[i] % 2 !=0)
printf("% d ",TAB[i]);
}
7
0
4
"
int N;
int T[50];
N=TailleTableau();
Remplissage(N,&T);
Affichage(N,T);
printf("Tapez une touche pour continuer...");
getch();
67
"9
"&
"
21
! "#$
%
,
)!
&'
)* *+
%1 &%'
5" =5
>
acrire un programme qui permet de saisir deux chaines CH1 et CH2, de les concatner ensembles et dafficher la
nouvelle chaine CH3 obtenue.
%
$
'()TRAVAILLER PLUS
'*)GAGNER PLUS
'+)TRAVAILLER PLUSGAGNER PLUS
5# =
>
et
de la forme
$
()19/12/2008
*)05/06/2009
Le nombre de jours de diffrence est : 168 jours
'4 $ Les deux dates sont de types char de 10 caractres; pour extraire le jour, le mois et lanne vous devez employer la
fonction prdfinie
de la bibliothque (stdlib.h) qui permet de convertir une chaine en entier.
int
56 =8
>
acrire un programme qui lit deux chaines CH1 et CH2, de compter et dafficher le nombre
doccurrences de CH2 dans CH1.
%
$
": Ptre bon en algorithmique est quivalent tre bon en atelier de programmation.
": Ptre bon
Le nombre doccurrences est : 2
66
"
B
&
$
&
%
? =5 >
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main(){
char ch1[30];
char ch2[30];
char ch3[60];
int i,j,LongeurCh1,LongeurCh2;
printf("Chaine 1=");gets(ch1);
printf("Chaine 2=");gets(ch2);
LongeurCh1=strlen(ch1);
LongeurCh2=strlen(ch2);
11
"
"
for(i=0;i<LongeurCh1;i++)
ch3[i]=ch1[i];
11
"
"
for(j=0;j<LongeurCh2;j++)
ch3[j+i]=ch2[j];
11
"
"
ch3[j+i]='\0';
printf("\n La nouvelle chaine : %s \n",ch3);
printf("Tapez une touche pour continuer...");
getch();
}
%
? =5 >
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
[ B & F
5 (
&F
=
(
4
"
,
"
E ,
"
G ,
"
J ,
"
\ ,
"
,
"
> ,
"
> ,
(
&F
&F
&F
&F
&F
&F
&F
#E
#E
#E
#E
#E
#E
#E
&F
&F
"
"
"
"
?
H
Q
,
,
,
,
&F
&F
&F
&F
4
&
&
&
&
&
&
&
- ?
#>Q
#>\
&
#E &
#E &
#E &
#E &
"D
"D
"D
"D
"D
"D
"D
##
"D
"D
"D
"D
"D
7
&F
7
void main()4
char Date1[10];
char Date2[10];
char C1_JJ[3],C1_MM[3],C1_AAAA[5];
char C2_JJ[3],C2_MM[3],C2_AAAA[5];
int JJ1,MM1,AAAA1;
int JJ2,MM2,AAAA2;
int i,j,nbAnnee,NombreDeJours;
printf("Date1=");gets(Date1);
printf("Date2=");gets(Date2);
116
"
F
A" :
5"
C1_JJ[0]=Date1[0];C1_JJ[1]=Date1[1];C1_JJ[2]='\0';
C1_MM[0]=Date1[3];C1_MM[1]=Date1[4];C1_MM[2]='\0';
C1_AAAA[0]=Date1[6];C1_AAAA[1]=Date1[7];
C1_AAAA[2]=Date1[8];C1_AAAA[3]=Date1[9];C1_AAAA[4]='\0';
116
"
F
A" :
5" >
C2_JJ[0]=Date2[0];C2_JJ[1]=Date2[1];C2_JJ[2]='\0';
C2_MM[0]=Date2[3];C2_MM[1]=Date2[4];C2_MM[2]='\0';
C2_AAAA[0]=Date2[6];C2_AAAA[1]=Date2[7];
C2_AAAA[2]=Date2[8];C2_AAAA[3]=Date2[9];C2_AAAA[4]='\0';
11' 0
JJ1=atoi(C1_JJ);MM1=atoi(C1_MM);AAAA1=atoi(C1_AAAA);
JJ2=atoi(C2_JJ);MM2=atoi(C2_MM);AAAA2=atoi(C2_AAAA);
nbAnnee=AAAA2'AAAA1;
NombreDeJours=0;
if (AAAA2==AAAA1)
{
if (MM1==MM2)
NombreDeJours=JJ2'JJ1;
else
{
for(i=MM1+1;i<=MM2'1;i++)
NombreDeJours=NombreDeJours+GetNombreJoursDuMois(i,AAAA1);
NombreDeJours=NombreDeJours+JJ2+GetNombreJoursDuMois(MM1,AAAA1)'JJ1;
}
}
else
{
11 & C
0"
C ! AW "
A" :
5"
for(i=MM1+1;i<=12;i++)
NombreDeJours=NombreDeJours+GetNombreJoursDuMois(i,AAAA1);
11 & C
:
<
>$
if (nbAnnee!=1)
{
for(j=AAAA1+1;j<=AAAA2'1;j++)
{
for(i=1;i<=12;i++)
NombreDeJours=NombreDeJours+GetNombreJoursDuMois(i,j);
}
}
11 & C
C" 0
C ! AW
: :
5" >
for(i=MM2'1;i>=1;i'')
NombreDeJours=NombreDeJours+GetNombreJoursDuMois(i,AAAA2);
NombreDeJours=NombreDeJours+JJ2+GetNombreJoursDuMois(MM1,AAAA1)'JJ1;
}
6<
%
? =8 >
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main(){
char ch1[100];
char ch2[100];
int i,j;
int LongeurCh1,LongeurCh2,nbOcc;
printf("Entrer ch1:");gets(ch1);
printf("Entrer ch2:");gets(ch2);
LongeurCh1=strlen(ch1);
LongeurCh2=strlen(ch2);
nbOcc=0;
i=0;
=
/ 9
'
4
C#
=
T UO# >TCU ..
<<
=
T U##
>TCU
..
'
'
..
C /
<<
C<<
7
C##/
9
' >
&K <<
7
printf("\n Le nombre d'occurrences de %s dans %s est :
%d\n",ch2,ch1,nbOcc);
printf("Tapez une touche pour continuer");
getch();
68
' >
! "#$
.
,
)!
&'
)* *+
%1 &%'
5" =5
>
Ecrire le programme principal qui permet de saisir une chaine CH, et dafficher le rsultat lcran.
%
$
') , aculte des (ciences @uridiques %conomiques et de
estion de @endouba,
)5
5# =6
>
acrire un programme qui permet de remplir un tableau contenant des notes (avec 0 note20),
dont la dimension du tableau est 5n30. On suppose que les notes ont le mme coefficient.
De calculer la moyenne et dafficher le rsultat lcran.
%
$
5
0
*7
6* 7
* 7
3
*7
4
( "" 3
56 = 9
>
acrire un programme qui permet de saisir deux chaines CH1 et CH2, dextraire de ces dernires que
les chiffres, deffectuer la somme des deux nombres et enfin afficher le rsultat lcran.
%
$
'() ,'7E
'*) ,
2 ,
6c,
-( ) .*+/
-* ) +*
ch="12" ;
nb = atoi(ch) ; /* nb=12 */
"
B
&
$
&
C
D
%
? =5 >
#include <stdio.h>
#include <conio.h>
;
9%
int NbCarMajus(char ch[])
{
int i,n,occ;
n=strlen(ch);
occ=0; /* initialisation du compteur des majuscules */
for(i=0;i<n;i++)
{
if((ch[i]>='A') && (ch[i]<='Z'))
occ++; /* incrmentation du compteur */
}
return occ;
}
void main()
{
char ch[50];
printf("Taper une chaine:");gets(ch);
printf("Le nombre des lettres majuscules : %d\n",NbCarMajus(ch));
printf("Pour sortir frapper une touche ");
getch();
}
%
? =6 >
#include <stdio.h>
#include <conio.h>
int TailleTab()
{
int taille;
do{
printf("Entrer la taille du tableau:");
scanf("%d",&taille);
}while((taille<5) || (taille>30));
return taille;
}
void Remplissage(int *TAB,int n)
{
int i;
float note;
for(i=0;i<n;i++)
{
do{
printf("Entre la note n
%d:",i+1);
scanf("%d",¬e);
}while((note<0) || (note>20));
TAB[i]=note;
}
}
float calculer(int TAB[],int n)
{
int i;
float som;
for(i=0;i<n;i++)
som+=TAB[i];
return som/n;
}
void main()
{
int n;
float moy;
int T[100];
n=TailleTab(); /* Affectation de la taille du tableau */
Remplissage(&T,n); /* remplissage du tableau */
moy=calculer(T,n); /* calcul et affectation de la moyenne */
printf("La moyenne est : %f\n",moy); /* Affichage de la moyenne */
printf("Pour sortir frapper une touche ");
getch();
}
%
? = 9
#include
#include
#include
#include
>
<stdio.h>
<conio.h>
<string.h>
<stdlib.h>
ibliographie
"
)
W
5
# notions de programmation acquises par la pratique
2me dition, Avril 2002 Editions Dunod
.
2A
&
#K. e
#
!
!
4 me dition, Mars 2005 Editions Dunod
#
!
1 re dition, juin 2005 Editions O'Reilly