Académique Documents
Professionnel Documents
Culture Documents
Langage C
Langage C
doc
______________________________________________________________________________
DI GALLO Frdric
Programmation Classique
en langage C
Cours du Cycle dApprofondissement
Page 1
01/04/01
PROGRAMMATION
CLASSIQUE :
LANGAGE C
___________________________________________________________________
DI GALLO Frdric
Page 2
01/04/01
PROGRAMMATION CLASSIQUE EN C
I. LES VARIABLES DE TYPE SIMPLE ...........................................................................4
II. LES VARIABLES DE TYPE STRUCTURE ..................................................................6
III. INTERET DES TYPES SIMPLES & STRUCTURES.....................................................8
IV. LES INSTRUCTIONS DU LANGAGE ........................................................................10
4.1) L'instruction d'affectation..........................................................................................10
4.2) Les instructions dentre-sortie .................................................................................15
4.3) Les instructions de choix ...........................................................................................17
4.4) Les instructions itratives ..........................................................................................20
V. LES FONCTIONS ET LES BIBLIOTHEQUES ...............................................................23
5.1) Utilisation et cration de fonctions ...........................................................................23
5.2) La fonction main() .....................................................................................................27
VI. ANNEXES .........................................................................................................................29
6.1) Calcul des primtres et surface d'un rectangle.........................................................29
6.2) Calcul d'une note arrondie au point.......................................................................29
6.3) Vrification de la majorit..........................................................................................30
6.4) Affichage de l'anne scolaire en cours .......................................................................31
6.5) Somme de deux horaires.............................................................................................32
6.6) Oprations mathmatiques simples ............................................................................33
6.7) PGCD par la division EUCLIDIENNE ......................................................................34
6.8) Connatre le nombre de chiffre d'un entier ................................................................35
6.9) Test des fonctions PGCD et arrondi...........................................................................36
___________________________________________________________________
DI GALLO Frdric
Page 3
01/04/01
PROGRAMMATION CLASSIQUE EN C
I.
2 octets
1 octet
Pour la mmorisation des nombres, le langage C propose diffrents types dont la taille
dpend de limplmentation en machine. Le tableau ci-dessous prsente les caractristiques
des types numriques proposs par TURBO C.
Nom du type Nature de la valeur Nbre doctets
int
Entier sign
2
short
Entier sign
2
long
Entier sign
4
float
Rel
4
double
Rel
8
Domaine
-32 768 ; 32 767
-32 768 ; 32 767
-2 147 483 648 ; 2 147 483 647
3.4 10 38 ; 3.4 10 38
1.7 10 308 ; 1.7 10 308
Il est important de noter quen C la dclaration dune variable nentrane pas son
initialisation et le compilateur signalera une erreur si le programmeur la rfrence sans lavoir
initialise. Linitialisation dune variable peut se faire au moment de sa dclaration de la
manire suivante :
NomDuType NomVariable=Valeur;
___________________________________________________________________
DI GALLO Frdric
Page 4
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 5
01/04/01
Le tableau denregistrements est un driv des deux types prcdents puisquil sagit
dun tableau 1 dimension dans lequel chaque composant est un enregistrement.
Comme pour les variables de type simple, toute dclaration dune variable de type
structur entrane la rservation en mmoire centrale dun emplacement dont la structure et la
taille dpend du type. Le tableau ci-dessous prsente des exemples de variables de types
structurs.
Tableau 1 dimension T
de 5 entiers
0
1
2
3
4
int T[5];
Tableau 2 dimensions TD
dentiers (4 lignes et 3 colonnes)
0
Enregistrement H compos de
deux champs : heure, minute
heure
minute
0
1
2
3
int TD[4][3];
struct horaire
{
int heure;
int minute;
};
struct horaire H;
Laccs aux valeurs contenues dans une variable de type structur est ralis en
mentionnant le nom de la variable suivi dune information qui identifie la valeur dans la
variable. Par exemple, pour accder au ime composant du tableau T 1 dimension on utilise
la rfrence T[i+1] car le premier composant porte le numro 0. Pour accder au composant
heure de lenregistrement H, il faut utiliser la notation : H.heure.
Exemple de tableau d'enregistrement:
Famille
Nom
Prnom
Age
0
C
B
18
1
B
O
17
2
C
B
23
Struct personne Famille[30]
Famille[2].age
Famille[0]
Remarque : pour mmoriser une chane de caractres lune des possibilits en C est de
dclarer un tableau 1 dimension de caractres. Par exemple la dclaration char
Mess[25] permet de stocker un message dau plus 25 caractres dans la variable Mess.
___________________________________________________________________
DI GALLO Frdric
Page 6
01/04/01
1
0
1
1
1
Remarque : le bit de plus fort poids est plac dans le composant 0 du tableau Decomp.
Combien de composants devra-t-on dclarer pour le tableau Decomp afin quil soit en
mesure de mmoriser la dcomposition binaire de tout entier saisi au clavier ?
Un entier correspond 2 octets donc 16 bits. Decomp devra donc tre en mesure de
contenir 16 composants. On le dclare par int Decomp[16].
___________________________________________________________________
DI GALLO Frdric
Page 7
01/04/01
On introduit le tableau
denregistrements P suivant :
5x4 +3x+2
Coeff
5
3
2
Degr
4
1
0
___________________________________________________________________
DI GALLO Frdric
Page 8
01/04/01
E
I
Avec racine: 0
Fils gauche
Fils droit
1
2
3
0
4
5
0
0
0
0
0
0
...
31
.
.
___________________________________________________________________
DI GALLO Frdric
Page 9
01/04/01
Opration
addition
soustraction
multiplication
division
Modulo (reste de la division euclidienne)
incrmentation
dcrmentation
___________________________________________________________________
DI GALLO Frdric
Page 10
01/04/01
MontantAPayer = (NbProduits>3)?TotalAchats-(TotalAchats*0.20):TotalAchats;
}
___________________________________________________________________
DI GALLO Frdric
Page 11
01/04/01
Auto-valuation 1:
___________________________________________________________________
DI GALLO Frdric
Page 12
01/04/01
L'oprateur de transtypage:
Loprateur de cast encore appel oprateur de transtypage - permet de modifier le type
dune variable dans une expression arithmtique. Cet oprateur qui a une priorit suprieure
aux oprateurs arithmtiques usuels scrit en entourant par des parenthses le type vers
lequel on veut transformer une expression. Le programme ci-dessous illustre le principe de cet
oprateur.
void main()
{ int i=5,j=2
float x ;
x=i/j;
x=(float)i/j;
x=(float)(i/j);
/* le rsultat est 2 car i et j sont des entiers ; le rsultat est donc un entier */
/* le rsultat est 2.5 car loprateur (float) (prioritaire par rapport la division) */
/* a transform le type de la variable i en float ; le rsultat est donc un float */
/* le rsultat est 2 car la division est value et donne un entier qui est ensuite */
/* transform en rel */
___________________________________________________________________
DI GALLO Frdric
Page 13
01/04/01
T1 = T2
non
Conversion de type
Soit T1 vers T2
Soit T2 vers T1
T <- T1
4
1.5+3+1= 5.5
1+2.5+2= 5.5
___________________________________________________________________
DI GALLO Frdric
Page 14
01/04/01
Type
int ou short
long
float ou double
char
Format
%d
%D
%f
%c
Linstruction printf():
Elle permet dafficher lcran un message pouvant intgrer des expressions faisant
rfrence des variables de type simple ou des composants de variables de type structur.
Le format prcise le type de la valeur contenue dans la variable cite. Il peut prendre de
nombreuses valeurs mais on se limitera aux mmes valeurs que pour linstruction scanf().
Syntaxe :
Par exemple, linstruction printf ( le double de %d est %d\n, I, I*2) affiche le message
le double de 5 est 10 si le contenu de la variable I est 5. Le caractre \n provoque un
retour la ligne aprs laffichage du message.
___________________________________________________________________
DI GALLO Frdric
Page 15
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 16
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 17
01/04/01
#include <stdio.h>
void main()
{
int a,b,result,B=0,encore=0;
char operateur;
do {
clrscr();
/* efface l'cran */
printf ("\noprande n1 : "); /* Affiche l'interrogation */
scanf ("%d",&a);
/* rcupre l'oprande date saisie par l'utilisateur */
printf ("\noprateur (+,*,-) : ");
scanf ("%s",&operateur);
printf ("\noprande n2 : "); /*on demande l'oprande n2 */
scanf ("%d",&b);
switch (operateur)
{ case '+': { result=a+b; break; }
case '-': { result=a-b; break; }
case '*': { result=a*b; break; }
default : { printf ("\n\nl'oprateur saisie n'est pas correct"); B=1;}
}
if (B==0) printf ("\n\nRsultat : %d",result);
getch();
/* attente de validation */
printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?");
scanf ("%d",&encore);
/* on rcupre la rponse */
} while (encore==1);
/* si la rponse est 1, on relance la boucle */
}
/* fin */
___________________________________________________________________
DI GALLO Frdric
Page 18
01/04/01
do {
clrscr();
/* efface l'cran */
printf ("\nhoraire n1 : ");
/* Affiche l'interrogation */
scanf ("%d:%d",&H1.heure,&H1.minute); /* rcupre la date saisie par l'utilisateur */
printf ("\n\nhoraire n2 : "); /*on crit l'anne scolaire en cours */
scanf ("%d:%d",&H2.heure,&H2.minute);
H3.heure=H1.heure+H2.heure;
H3.minute=H1.minute+H2.minute;
if (H3.minute>=60) { H3.minute-=60;
H3.heure++;
}
if (H3.heure>=24) H3.heure-=24;
printf ("\n\nSomme des horaires : %d:%d",H3.heure,H3.minute);
getch();
/* attente de validation */
printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?");
scanf ("%d",&encore);
/* rcupre la rponse */
} while (encore==1);
/* si la rponse est 1, on relance la boucle */
}
/* fin */
___________________________________________________________________
DI GALLO Frdric
Page 19
01/04/01
NON
Le nombre ditrations
peut-il tre nul ?
OUI
Instruction TqueFinTQ
Instruction algorithmique
TantQue Condition Faire
Bloc d'instructions
FinTQ
Rpter
Bloc d'instructions
Jusqu Condition
Pour Compteur Valeur initiale Valeur
finale
Bloc d'instructions
FinPour
NON
Traduction en langage C
while (Condition)
{
Bloc dinstructions
}
do
{
Bloc dinstructions
}
while (!(Condition))
For (Compteur=Valeur initiale ;Compteur
<=Valeur finale ; Compteur ++)
{
Bloc dinstructions
}
Remarques :
Si le bloc dinstructions est limit une seule, on peut se dispenser des accolades.
La condition spcifie dans linstruction do while est la ngation de la
condition exprime dans le Rpter jusqu .
Lexcution de linstruction : for(expression1 ;expression2 ;expression3) {bloc
dinstructions} est quivalente la squence dinstructions suivante :
Evaluer expression1
While (Expression2)
{ bloc dinstructions
Evaluer expression3 }
___________________________________________________________________
DI GALLO Frdric
Page 20
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 21
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 22
01/04/01
V.
___________________________________________________________________
DI GALLO Frdric
Page 23
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 24
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 25
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 26
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 27
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 28
01/04/01
VI. ANNEXES
6.1) Calcul des primtres et surface d'un rectangle
#include <stdio.h>
void main()
{
float surface, perimetre, longueur, largeur;
clrscr();
printf ("Saisir la longueur: ");
scanf ("%f",&longueur);
printf ("\nSaisir la largeur: ");
scanf ("%f",&largeur);
perimetre=2*(longueur+largeur);
surface=longueur*largeur;
printf("\n\nle primtre est %f et la surface est %f",perimetre,surface);
getch();
}
___________________________________________________________________
DI GALLO Frdric
Page 29
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 30
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 31
01/04/01
do {
clrscr();
/* efface l'cran */
printf ("\nhoraire n1 : ");
/* Affiche l'interrogation */
scanf ("%d:%d",&H1.heure,&H1.minute); /* rcupre la date saisie par l'utilisateur */
printf ("\n\nhoraire n2 : "); /*on crit l'anne scolaire en cours */
scanf ("%d:%d",&H2.heure,&H2.minute);
H3.heure=H1.heure+H2.heure;
H3.minute=H1.minute+H2.minute;
if (H3.minute>=60) { H3.minute-=60;
H3.heure++;
}
if (H3.heure>=24) H3.heure-=24;
printf ("\n\nSomme des horaires : %d:%d",H3.heure,H3.minute);
getch();
/* attente de validation */
printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?");
scanf ("%d",&encore);
/* rcupre la rponse */
} while (encore==1);
/* si la rponse est 1, on relance la boucle */
}
/* fin */
___________________________________________________________________
DI GALLO Frdric
Page 32
01/04/01
void main()
{
int a,b,result,B=0,encore=0;
char operateur;
do {
clrscr();
/* efface l'cran */
printf ("\noprande n1 : "); /* Affiche l'interrogation */
scanf ("%d",&a);
/* rcupre l'oprande date saisie par l'utilisateur */
printf ("\noprateur (+,*,-) : ");
scanf ("%s",&operateur);
printf ("\noprande n2 : "); /*on demande l'oprande n2 */
scanf ("%d",&b);
switch (operateur)
{ case '+': { result=a+b; break; }
case '-': { result=a-b; break; }
case '*': { result=a*b; break; }
default : { printf ("\n\nl'oprateur saisie n'est pas correct"); B=1;}
}
if (B==0) printf ("\n\nRsultat : %d",result);
getch();
/* attente de validation */
printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?");
scanf ("%d",&encore);
/* on rcupre la rponse */
} while (encore==1);
/* si la rponse est 1, on relance la boucle */
}
/* fin */
___________________________________________________________________
DI GALLO Frdric
Page 33
01/04/01
#include <stdio.h>
void main()
{
int a,b,r=1;
clrscr();
printf ("\n\nValeur de a : ");
scanf ("%d",&a);
printf ("\nValeur de b : ");
scanf ("%d",&b);
r=a%b;
while (r!=0)
{ a=b;
b=r;
r=a%b;
}
printf ("\n\nLe PGCD est : %d",b);
getch();
}
___________________________________________________________________
DI GALLO Frdric
Page 34
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 35
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 36
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 37
01/04/01
___________________________________________________________________
DI GALLO Frdric
Page 38
01/04/01