Vous êtes sur la page 1sur 4

Constantes

Les constantes sont des valeurs qui nvoluent pas au cours


Langage C de lexcution dune instruction. Elles sont dclares au dbut du
programme ou dans des fichiers den-tte ainsi :
ITI 1A 2016-2017 # d e f i n e MAX 100

Adapt de :
E. BOUCHARE - Le langage C - http ://perso.orange.fr/eric.bouchare/ Operateurs
J. SILVA - Introduction au langage C - http ://iflinux.cicrp.jussieu.fr/silva/ Les oprateurs permettent de faire des oprations sur des va-
riables du mme type.
Le principal oprateur est laffectation (=). Il permet daffecter
une valeur (place droite du signe gal) une variable (place
gauche du signe gal).
i = 35;
k = k + 25.1;

Les autres oprateurs :


Oprateurs Signification Exemple
+ somme x = a + b;
Un programme en C permet de manipuler des donnes plus
ou moins complexes. Ces donnes sont associes des variables - soustraction x = a - b;
pouvant tre de plusieurs types, manipules laide doprateurs * multiplication x = a * b;
et de fonctions. / division x = a / b;
Une multitude de fonctions existent dj en C. Elles sont sto- % modulo x = a % b;
ckes dans des bibliothques (ou librairies) qui sont des fichiers ++ incrmentation x = b++ ; x = ++b ;
portant lextension .h. Il existe aussi des oprateurs effectuant des oprations bit
stdio.h : printf, getchar, putchar, scanf... bit et non sur des nombres comme les prcdentes. Ce sont les
stdlib.h : exit, rand, srand... oprateurs : & (ET logique), | (OU logique), (NON logique),
math.h : cos, sin, pow... (OU EXCLUSIF), < < n (dcalage gauche de n bits) et > > n
(dcalage droite de n bits).
Variables
Une variable est caractris par : Tableaux de variables
son adresse : endroit de stockage en mmoire du systme Ce sont des regroupements indexs de variables dun mme
(RAM gnralement) ; type, lindice allant de 0 N-1.
son type : nature de linformation dterminant aussi la
Dclaration et remplissage dun tableau de 5 entiers :
taille en mmoire dune variable ;
son identificateur : nom donne la variable ; i n t t a b 1 [ 5 ] = { 1 0 , 2 0 , 4 5 , 15 , 5 } ;
sa valeur : contenu de la variable. int tab2 [ 5 ] ;
f o r ( i =0; i <5; i ++)
Il existe 3 types de variables : t a b 2 [ i ] = 2 i ;
entiers ou int : pouvant tre de plusieurs natures (long,
short, unsigned...). Ils occupent 2 ou 4 octets en mmoire ;
caractres ou char : souvent considrs comme des en- Affichage et r ecuperation de donnees
tiers particuliers (norme ASCII) cods sur 1 octet ; Des fonctions particulires permettent dafficher et de rcup-
rels ou float ou double : cods sur 4 octets pour les rer des donnes crites par lutilisateur.
flottants et 8 octets pour les double. La fonction printf permet dafficher des chanes de caractres
lcran.
Les variables peuvent tre :
locales : utilises uniquement dans la fonction o elles sont p r i n t f ( " Bonjour  ! " ) ;
dclares ; p r i n t f ( " x  v a u t %d \ n " , x ) ;
globales : rutilises par diffrentes fonctions et dclares
hors de toute fonction.
La fonction scanf, au contraire, permet dattendre une en-
La dclaration dune variable se fait de la faon suivante : tre au clavier. ATTENTION : Le second argument correspond
ladresse de la variable dans laquelle doit tre stocke la donne.
int i ;
double j , k = 5 . 0 ; s c a n f ( "%l f " , &k ) ;
IOGS - Palaiseau - ITI 1A Langage C

Dans ces deux fonctions, les types de variables sont cods par : else
%c caractre (char), %d entier (int) et %lf rels (long float ou k = i;
double). p r i n t f ( " k =%d \ n " , k ) ;
Dautres fonctions comme putchar et getchar existent pour }
afficher ou rcuprer des donnes. En particulier, la fonction gets
permet de rcuprer une chaine de caractres saisie au clavier
(intgrant aussi les espaces, ce qui nest pas le cas de la fonction Structure dun programme
scanf). Un fichier .c est compos dun en-tte, permettant de spcifier
les librairies ncessaires la compilation, une zone de dcla-
Les tests ration des varaibles globales (si besoin), dune fonction main et
Les tests sont utiliss pour tester une valeur de variable ou tes- dautres fonctions si ncessaire.
ter des oprations logiques. Les rsultats sont boolens (vrai ou La fonction main est la fonction principale du code. Elle sera
faux). excute en premier par le programme (point dentre du pro-
Les oprateurs sont les suivants : suprieur (>), infrieur (<), gramme).
suprieur ou gal (>=), infrieur ou gal (<=), gal (== - atten- # i n c l u d e < s t d i o . h> / / l i b r a i r i e
tion au doublement du signe), diffrent (! =), ET logique (&&) et # d e f i n e PI 3.14 / / constante
OU logique (||). int k ; / / variable globale

Les structures de controle void i n i t S y s t e m e ( void ) ;


Les structures de contrle permettent de changer lordre
i n t main ( v o i d )
dexcution des instructions. Ces structures font appel des
{
conditions logiques (CL).
int i ; // variable locale
IF (cl) ... ELSE ... initSysteme ( ) ; / / a p p e l a une f o n c t i o n

i f ( ( x == 1 ) | | ( x == 3 ) ) / / c o n d i t i o n f o r ( i = 0 ; i < 2 ; i ++ )
k = 1; p r i n t f ( " i P I =%l f  \ n " , ( f l o a t ) i P I ) ;
else
k = 0; r e t u r n EXIT_SUCCESS ;
}
SWITCH (expression) CASE ...
void i n i t S y s t e m e ( void )
switch ( x ) {
{ k = 3;
c a s e 1 : k = 1 ; break ; / / cas x = 1 p r i n t f ( " I n i t i a l i s a t i o n  \ n" ) ;
c a s e 2 : k = 3 ; break ; / / c a s x = 2 }
default : k = 0; / / a u t r e s cas
}
Les pointeurs
WHILE (cl) ... Un pointeur est une variable stockant ladresse dune autre va-
Tant que la condition est vraie, les instructions contenues dans riable. On le dclare en ajoutant son nom le symbole *.
la boucle sont excutes.
int i = 12;
while ( x < 2 ) / / t a n t que x < 2 int a ;
x = x + 1; / / ou x ++; i n t p = &i ; / / p c o n t i e n t l a d r e s s e de i

Une seconde possibilit est offerte, garantissant lexcution des a = ( p ) ; / / a va p r e n d r e l a v a l e u r


intructions contenues dans la boucle au moins une fois. / / de l a v a r i a b l e s t o c k e e a l a d r e s s e p
do
Ainsi p dsigne ladresse et *p son contenu. Sur une variable
x = x + 1;
while ( x < 2 ) ; classique, i est la valeur et &i son adresse.
Les tableaux de variables (en particulier les chanes de carac-
FOR (indice) DE min A max ... tres - voir ci-aprs) peuvent aussi tre considrs comme des
Lensemble des instructions contenues dans une telle boucle pointeurs. En effet, le nom dun tableau pointe sur le premier l-
est excut un nombre connu de fois. ment du tableau.
f o r ( i = 0 ; i < 1 0 ; i ++) int table [5] = {1 ,2 ,3 ,4 ,5};
{ int a ;
i f ( ( i % 2 ) == 0 ) / / nombre p a i r i n t p = NULL ; / / pointeur vide
k = i 2;

2
IOGS - Palaiseau - ITI 1A Langage C

p = table ; / / p p o i n t e s u r l e p r e m i e r e l e m e n t dans un tableau de caractres (char) dont la fin est marque par
/ / du t a b l e a u t a b l e le caractre \0. En mmoire la chane "Bonjour" est reprsente
a = ( p + 2 ) ; / / a prend l a v a l e u r stockee ainsi :
/ / a l a d r e s s e p +2 , s o i t t a b l e [ 2 ]
B o n j o u r \0

Les structures Tout ce qui suit le caractre \0 sera ignor :


La structure de donnes est un type de donnes construit par-
tir dune association de variables de types diffrents. char s [ 1 4 ] = " H e l l o \ 0 World ! " ;
p r i n t f ( "%s \ n " , s ) ; / / a f f i c h e r a H e l l o
s t r u c t D a t e { i n t j o u r , mois , a n n e e ; } ;
struct Fiche { Il ne faut donc pas oublier de rserver une place supplmen-
char nom [ 3 2 ] ;
taire pour le caractre de fin de chane sinon on obtient un simple
s t r u c t Date n a i s s a n c e ;
tableau de caractres et, dans ce cas, son utilisation en tant que
float t ai ll e ;
}; chane de caractres mne un comportement indfini.
Il existe plusieurs manires de dclarer et dinitialiser une
s t r u c t F i c h e Mr_X = { " T o t o " , { 1 , 2 , 1 9 8 0 } , chane de caractres :
1.70};
char s 1 [ 1 1 ] = " C o u r s  de C" ;
p r i n t f ( "%s %f  \ n " , Mr_X . nom , Mr_X . t a i l l e ) ; char s 2 [ ] = " C o u r s  de C" ;
char s 3 = " C o u r s  de C" ;
f l o a t a = Mr_X . t a i l l e ;
Mr_X . n a i s s a n c e . a n n e e = 1 9 8 2 ; La premire mthode rserve une zone de 11 octets et la chane
"Cours de C" y est stocke.
Une autre possibilit est de dclare un nouveau type de don- La seconde mthode laisse le compilateur calculer la taille ap-
nes : proprie (11 octets dans notre cas).
typedef struct { La dernire mthode ne rserve pas de mmoire, elle se
char nom [ 3 2 ] ; contente de stocker ladresse dune chane de caractres. Si vous
float t ai ll e ; souhaitez utiliser une chane de taille variable, il faut utiliser les
} Fiche ; mcanismes dallocation dynamique de la mmoire :
char s = malloc ( s i z e o f ( s ) 256);
F i c h e Mr_X = { " T o t o " , 1 . 7 0 } ;
// p e r m e t d a l l o u e r 256 o c t e t s p o u r s
// s o i t 255 c a r a c t e r e s
Fiche est alors considr comme un nouveau type pour le pro-
free (s ); // libere s
gramme.

Les fonctions Des fonctions ddies aux "calculs" sur des chanes de carac-
Une fonction permet de regrouper un ensemble dinstructions tres sont regroupes dans la bibliothque string.h.
en donnant un identificateur (ou nom) et des paramtres (ou Voici les principales :
arguments) ce groupe. size_t strlen(const char* chaine)
Elle possde un type selon le type de variable quelle retourne Cette fonction renvoie la longueur de la chane de caractres.
grce linstruction return. Elle peut avoir ses propres variables
char c h a i n e [ ] = " S a l u t " ;
locales.
int longueurChaine = 0;
Elles sont crites en dehors de la fonction principale (main).
i n t somme ( i n t a , i n t b ) / / prototype / / On r e c u p e r e l a l o n g u e u r de l a c h a i n e
{ / / dans longueurChaine
int c = a + b ; longueurChaine = s t r l e n ( chaine ) ;
return c ;
} char* strcpy(char* c, const char* ct)
La dclaration dune fonction doit se faire avant sa premire Cette fonction permet de copier ct dans c.
utilisation. Pour cela, on dclare le prototype de la fonction en char c h a i n e [ ] = " T e x t e " ;
dehors et avant la fonction main. Sa dfinition peut se faire spa- char c o p i e [ 1 0 0 ] ;
rment.
s t r c p y ( copie , chaine ) ;
Les chaines de caract`eres
En C, il nexiste pas de type de variable pour les chanes de char* strcat(char* c1, const char* c2)
caractres comme il en existe pour les entiers (int) ou pour les Cette fonction ajoute la suite de la chane c1 la chane c2, en
caractres (char). Les chanes de caractres sont en fait stockes remplaant c1.

3
IOGS - Palaiseau - ITI 1A Langage C

char c h a i n e 1 [ 1 0 0 ] = " S a l u t  " ; FILE f i c ;


char c h a i n e 2 [ ] = " a  v o u s " ; i n t nb _li gn es , t1 , t2 , t3 , t4 , t 5 ;
char nom [ 2 5 5 ] , prenom [ 2 5 5 ] ;
s t r c a t ( chaine1 , chaine2 ) ;
p r i n t f ( chaine1 ) ; / / o u v e r t u r e du f i c h i e r en l e c t u r e
/ / a f f i c h e r a S a l u t a vous f i c = fopen ( " annuaire . t x t " , " r " ) ;
i f ( f i c == NULL) {
p r i n t f ( " Ouverture  impossible \ n" ) ;
int strcmp(const char* c1, const char* c2)
exit (1);
Cette fonction permet de comparer les chanes c1 et c2. Elle }
renvoie 0 si les deux chanes sont identiques, sinon une autre va-
leur. / / r e c u p e r e r l e s d o n n e e s de l a n n u a i r e
char c h a i n e 1 [ ] = " T e x t e  de  t e s t " ; nb_lignes = 0;
char c h a i n e 2 [ ] = " T e x t e  de  t e s t " ; w h i l e ( f s c a n f ( f i c , "%s %s %d %d%d%d %d " , \
nom , prenom , &t 1 , &t 2 , &t 3 , &t 4 , &t 5 ) \
i f ( s t r c m p ( c h a i n e 1 , c h a i n e 2 ) == 0 ) != EOF ) { / / end o f f i l e
p r i n t f ( " Identiques \ n" ) ; p r i n t f ( " \ tnom =%s \ n " , nom ) ;
else p r i n t f ( " \ t p r e n o m =%s \ n " , prenom ) ;
p r i n t f ( " Differentes \ n" ) ; p r i n t f ( " \ t t e l =%d %d%d %d %d \ n " , \
t1 , t2 , t3 , t4 , t 5 ) ;
n b _ l i g n e s ++;
char* strstr(const char* c, const char* ct) }
Cette fonction recherche la premire occurrence de la chane p r i n t f ( " l e  f i c h i e r  c o m p o r t e %d l i g n e s \ n " , \
ct dans la chane c. Elle renvoie alors une chane de caractres nb_lignes ) ;
correspondante cette premire occurrence, sinon la chane de
caractres reste NULL. / / f e r m e t u r e du f i c h i e r
i f ( f c l o s e ( f i c ) == EOF ) {
char s u i t e C h a i n e ; p r i n t f ( " Fermeture  impossible " ) ;
exit (1);
s u i t e C h a i n e = s t r s t r ( " T e x t e  de  t e s t " , " t e s t " ) ; }

i f ( s u i t e C h a i n e != NULL) r e t u r n EXIT_SUCCESS ;
p r i n t f ( " La c h a i n e %s  e s t  p r e s e n t e \ n " , }
suiteChaine );

La fonction int fputs(char *chaine, FILE *fic) crit


Gestion des fichiers la chane de caractres chaine sur le flux fic. Elle retourne le
Il existe plusieurs fonctions permettant de grer des fichiers. dernier caractre de la chane en cas de succs (EOF en cas der-
Les fichiers sont de type FILE *. reur).
La fonction FILE *fopen(char *nomfic, char *mode) La fonction int fprintf(FILE *fic, char *format,
ouvre le fichier dont le nom est donn comme premier argument, var_1, var_2, ...) crit les donnes var_ dans le flux fic
selon le mode douverture prcis (w = criture, r = lecture, a = en respectant le format spcifi par la chane format. Elle re-
ajout en fin de fichier) et lassigne un flux, i.e. une variable de tourne le nombre de caractres crits sur le flux.
type FILE *.
La fonction FILE *fclose(char *nomfic) permet de refer-
mer le fichier.
Les fonctions char *fgets(char *chaine, int max,
FILE *fichier) et void fscanf(FILE *fichier, char
*format, adr_var_1, adr_var_2, ...) permettent de lire
les donnes.
Lexemple ci-dessous permet douvrir un fichier nomm
annuaire.txt en lecture seule et de lire son contenu, annuaire
sous forme :
nom prenom tel1 tel2 tel3 tel4 tel5
# i n c l u d e < s t d i o . h>
# i n c l u d e < s t r i n g . h>
# i n c l u d e < s t d l i b . h>

i n t main ( v o i d )
{

Vous aimerez peut-être aussi