Académique Documents
Professionnel Documents
Culture Documents
NOTIONS FONDAMENTALES
Michel NICOLLET
SERVICE D'AERONOMIE tour 15-14 5 case 102 mail:michel.nicollet@aero.jussieu.fr
LANGAGE C ................................................................................................................................................... 1
NOTIONS FONDAMENTALES ...................................................................................................................................... 1
1 STRUCTURE D'UN PROGRAMME C............................................................................................................................ 2
1.1 PROGRAMME C........................................................................................................................................................... 4
1.2 FONCTION ..................................................................................................................................................................... 4
1.3 EXEMPLE....................................................................................................................................................................... 4
2 COMPILATEUR ET EDITION DE LIENS ..................................................................................................................... 5
3 LES DECLARATIONS DE VARIABLES OU CONSTANTES ................................................................................. 6
3.1 Les types de base............................................................................................................................................................ 6
3.2
conversion de types ................................................................................................................................................. 7
3.3
dclaration de constantes symboliques ................................................................................................................ 7
3.4
dfinir un nouveau type.......................................................................................................................................... 7
4 ECRITURE DES CONSTANTES NUMERIQUES ....................................................................................................... 8
4.1 entires.............................................................................................................................................................................. 8
4.2 relles................................................................................................................................................................................ 8
4.3 caractres.......................................................................................................................................................................... 8
5 OPERATEURS ET EXPRESSIONS ................................................................................................................................. 9
5.1 oprateurs arithmtiques ............................................................................................................................................... 9
5.2 oprateurs relationnels ................................................................................................................................................... 9
5.3 oprateurs logiques......................................................................................................................................................... 9
5.4 oprateurs d'incrmentation et de dcrmentation.................................................................................................... 9
5.5 oprateurs d'affectation logique ................................................................................................................................... 9
5.6 oprateur conditionnel................................................................................................................................................... 9
5.7 oprateur squentiel ..................................................................................................................................................... 10
5.8 oprateur d'adressage................................................................................................................................................... 10
5.9 oprateur de taille ......................................................................................................................................................... 10
5.10 oprateurs de manipulation de bits.......................................................................................................................... 10
6 SORTIES -ENTREES .......................................................................................................................................................... 11
6.1 LIEN ............................................................................................................................................................................... 11
6.2 SORTIES ....................................................................................................................................................................... 11
6.3 ENTREES...................................................................................................................................................................... 12
7 INSTRUCTIONS DE CONTROLE................................................................................................................................. 13
7.1 INSTRUCTIONS DE CHOIX................................................................................................................................... 13
7.2 INSTRUCTIONS DE BOUCLE ............................................................................................................................... 13
7.3 INSTRUCTIONS DE BRANCHEMENT ............................................................................................................... 14
8 VECTEURS (tableaux) ....................................................................................................................................................... 15
8.1 VECTEURS UNE DIMENSION.............................................................................................................................. 15
8.2 VECTEURS DEUX DIMENSIONS ........................................................................................................................ 15
8.3 INITIALISATIONS..................................................................................................................................................... 15
9 FONCTIONS........................................................................................................................................................................ 16
9.1 PROPRIETES GENERALES .................................................................................................................................... 16
9.2 PASSAGE ARGUMENTS......................................................................................................................................... 16
9.3 RECURSIVITE............................................................................................................................................................ 17
10 CLASSES D'ALLOCATION OU CLASSES DE MEMORISATION.................................................................... 18
10.1 CLASSES AUTOMATIQUES: classes auto ........................................................................................................ 18
10.2 CLASSES STATIQUES........................................................................................................................................... 18
10.3 CLASSES GLOBALES............................................................................................................................................ 18
10.4 FONCTIONS.............................................................................................................................................................. 19
11 POINTEURS ...................................................................................................................................................................... 20
11.1 DEFINITION .................................................................................................................................................................. 20
11.2 DECLARATION ....................................................................................................................................................... 20
11.3 OPERATIONS SUR LES POINTEURS............................................................................................................... 20
11.4 POINTEURS ET VECTEURS ................................................................................................................................ 20
11.5 POINTEURS ET FONCTIONS.............................................................................................................................. 21
11.6 OBJETS PLUS COMPLEXES................................................................................................................................ 21
12 STRUCTURES .................................................................................................................................................................. 22
12.1 DEFINITION .............................................................................................................................................................. 22
12.2 DECLARATION ....................................................................................................................................................... 22
12.3 ACCES AUX MEMBRES ....................................................................................................................................... 23
1.2 FONCTION
Entte dfini par un type et un nom de fonction suivis d'une liste de types d'arguments entre
parenthses.
Le corps de la fonction dlimit par les caractres { } est compos d'instructions simples ou
composes.
Toutes les instructions simples se terminent par ;
Une instruction compose ou bloc est un ensemble d'instructions simples dlimites par des
accolades {}.
Les commentaires sont encadrs par les dlimiteurs /* et */ .
1.3 EXEMPLE
#include<stdio.h> /* accs aux entres sorties*/
#include<stdlib.h> /* accs la librairie mathmatique*/
/*calcul de pi*/
void main(void)
{float caleat(void);
float x,y,d2,pi;
int np,nc,i;
printf("combien de points?");
scanf("%d",&np);
for(nc=0,i=1;i<=np;i++)
{x=caleat();
/*appel une fonction*/
y=caleat();
d2=(x-0.5)*(x-0.5)+(y-0.5)*(y-0.5);
if(d2<=0.25)nc++;
}
pi=(4.0*nc)/np;
printf("estimation de pi avec %d points:%e",np,pi);/*affichage rsultat*/
}
float caleat(void)
/*fonction de tirage de variables alatoires*/
{
return ((float)rand()/(RAND_MAX+1.0));
}
Taille(octets)
4
4
4
4
2
2
valeurs
-2e(31) 2e(31)-1
0 2e(32)-1
-32768-32767
0-65535
La taille d'un entier est par dfaut soit 2 soit 4 (dpend de la machine). 4 octets est la taille la
plus courante.
Les types short int et long int peuvent tre abrgs en short et long.
Le mot cl unsigned indique si le bit de poids fort doit tre ou non considr comme un bit de
signe.
Taille(octets)
4
8
10
valeurs
3.4 e-38 3.4 e+38
1.7 e-308 1.7 e+308
3.4 e-4932 3.4 e+4932
dcomposition
exp(8bits) mantisse(23)
exp(11) mantisse(52)
exp(15) mantisse(64)
4.2 relles
-flottantes: doivent comporter un point.
-exp: lettre e sans espace dans l'exposant.
Possibilit de grer des constantes de type float en fa isant suivre son criture de la lettre F ou
f.
4.3 caractres
-directement
remarque gnrale:
Les constantes sont converties par le prprocesseur dans les calculs en type double.
5 OPERATEURS ET EXPRESSIONS
Une expression est constitue de variables et constantes (littrales ou symboliques) relies
par des oprateurs.
Lorsque les types des oprandes sont diffrents, il y a conversion implicite dans le type le plus
fort.
++i pr incrmentation de i de 1
i++ post incrmentation de i de 1
droite
<< dcalage gauche
Exemple: n<<2
Le motif binaire est dcal du nombre de bits indiqu. Dans le cas d'un dcalage gauche les
bits les plus gauche sont perdus. Les positions binaires vacantes sont remplies par des 0.
Pour un dcalage droite, les bits le plus droite sont perdus. Si l'entier dcal est non sign
les positions binaires vacantes sont remplies par des 0, s'il est sign le remplissage se fait
l'aide du bit de signe (0 ou 1).
10
6 SORTIES-ENTREES
6.1 LIEN
Faire appel au prprocesseur par la commande:
#include<stdio.h>
6.2 SORTIES
6.2.1 syntaxe
printf("codes format",liste d'arguments);
-code format: constante chane afficher contenant ou non un code format prcd par % . Le
tout entre quotas.
-liste d'arguments: suite de variables spares par des virgules;
flottant
6 chiffres aprs le point dcimal avec cadrage droite
flottant double
flottant long double
n: nombre total de caractres afficher avec toujours 6 chiffres dcimaux
p: indicateur de prcision correspondant au nombre de chiffres dcimaux garder
c -rel exponentiel
%e
13 caractres en tout affichs dont 3 pour la puissance et 6 chiffres dcimaux
14 caractres si la valeur est ngative
%le exp double
%Le exp long double
%n:pe n: nombre total de caractres et p nombre de chiffres dcimaux
d -prcision variable
%n.* affichage en flottant ou * signifie que la prcision est fournie dans la liste d'arguments
e -octal et hxadcimal
%o valeur en octal
%x valeur en hxadcimal
f -caractre
%c
(voir aussi d'autres fonctions telles que putchar()
11
tabulation
passage la ligne
6.3 ENTREES
6.3.1 syntaxe
scanf("format",liste d'arguments);
-format: codes format entre quotas
-liste d'arguments: adresse de variables (variables prcdes de &) et spares par des virgules
-b rel flottant
-c rel exponentiel
%e idem "
-d caractre
-e octal
%o
-f hexadcimal
%x
"
12
7 INSTRUCTIONS DE CONTROLE
Ces instructions sont les choix, les boucles et les branchements.
13
bloc;
}
rptition du bloc tant que l'expression est vraie; la boucle peut n'tre parcourue aucune fois.
7.3.3 instruction go to
Permet le branchement en un point quelconque du programme
Syntaxe:
go to etiquette;
etiquette fait rfrence une instruction tiquete.
Exemple:
for( )
{
if( ) goto sortie;
}
sortie: instruction;
14
8 VECTEURS (tableaux)
8.1 VECTEURS UNE DIMENSION
Syntaxe: t[i] t: nom du vecteur; i indice; t[i] est la valeur du vecteur dont la position est
fournie par l'indice i.
Dclaration: int t[n]; /*vecteur de n lments*/
float tab[n];
double vect[10];
n est le nombre total d'lments du tableau (taille) qui doit tre dclar avant, en particuliers
par une constante symbolique.
La taille peut tre vide, c'est alors l'initialisation qui dfinit le nombre d'lments.
Le premier lment d'un vecteur porte l'indice 0. l'indice varie donc de 0 n-1.
t[0][0]
t[0][1]
t[1][0]
t[1][1]
t[2][0]
t[2][1]
8.3 INITIALISATIONS
a) int t[4]={10,20,30,40};
ou int t[]={10,20,30,40}; vecteur de 4 lments
b) int t[3][2]={1,2,3,4,5,6};
ou int t[3][2]={{1,2},
{3,4},
{5,6}};
15
9 FONCTIONS
9.1 PROPRIETES GENERALES
- Toutes les fonctions sont indpendantes les unes des autres et sont compiles sparment.
-Toutes les fonctions doivent en principe tre dclares avant leur dfinition au moyen dun
prototype.
(Le compilateur doit connatre le type de la valeur retourne ainsi que le nombre et les types
des arguments transmis).
-Le nom de la fonction est prcd d'un type indiquant le type de la valeur qu'elle retourne et
est suivi d'arguments ou paramtres formels. Ces arguments sont passs soit par valeur soit
par adresse.
-Le retour d'une valeur se fait par l'instruction return.
-Si la arguments sont transmis par valeur, ils peuvent tre modifis par la fonction sans tre
modifis dans la fonction appelante. Les variables de la fonction sont alors locales et un
nouvel espace mmoire est allou chaque appel de la fonction. Elles ne gardent donc pas
leur valeur d'un appel l'autre.
-Si les variables doivent garder leur valeur d'un appel l'autre elles devront tre dclares
comme statiques.
-Si plusieurs fonctions doivent partager les mmes variables celles ci devront tre dclares
comme variables globales ou transmises par adresse.
/*declaration ou prototypage*/
16
Exemple:
#define N 4
void main(void)
{ int tab[N]={1,5,8,10};
int som(int []),som;
som=som(tab);
}
9.3 RECURSIVITE
-rcursivit directe: une fonction comporte un appel elle mme.
-rcursivit croise: une fonction appelle une autre fonction qui appelle la fonction initiale.
17
18
Exemple
extern float x;
void main(void)
{
------------}
double f(int n)
{
------------}
Au contraire si l'on doit cacher la variable aux autres fichiers sources il faut faire prcder sa
dclaration par static . static float x;
10.4 FONCTIONS
Les fonctions suivent les mmes rgles de classes d'allocation que les variables.
19
11 POINTEURS
11.1 DEFINITION
Manipulation d'adresses par l'intermdiaire de variables nommes pointeurs. Un pointeur est
une variable dont la valeur est une adresse.
L'adresse est indissociable du type de la variable, on dfinira donc des pointeurs sur des
entiers, des caractres, des rels ou sur des objets plus complexes.
11.2 DECLARATION
Syntaxe: type *nom;
nom de la variable pointeur
type de la donne que dsigne le pointeur
Exemple:
int *pt;
/*pt est un pointeur sur des entiers*/
int n,u;
n=10;
pt=&n;
/*affecte pt l'adresse de n*/
u=*pt;
/*contenu de la variable pointe soit u=10*/
Ne pas confondre le caractre * dans la dfinition du pointeur avec le mme caractre * de la
dernire ligne qui est un oprateur d'indirection qui value le contenu de l'adresse pointe.
20
Dans la fonction scanf l'oprateur d'adressage & est superflu pour un tableau dont le nom
constitue en soi une adresse.
/dfinition de la fonction*/
Une fonction peut travailler avec un tableau de taille quelconque condition de lui
transmettre la taille en argument. On peut galement passer qu'une partie d'un tableau une
fonction, il suffit de lui indiquer l'adresse du i lment de dbut.
Exemple:
fct(&t[5]);
21
12 STRUCTURES
12.1 DEFINITION
Une structure est un ensemble htrogne permettant de dfinir des objets de nature et de type
diffrents.
12.2 DECLARATION
12.2.1 syntaxe
La dclaration est faite en dehors de toute fonction suivant la syntaxe:
struct nom
{
liste de dclarations;
};
Les objets de la liste de dclaration sont appels champs. Les champs peuvent tre des
vecteurs, des variables, des pointeurs, d'autres structures, etc qui doivent tre dclars.
Lors de la dfinition d'une structure, des variables dites structures peuvent tre dclars, qui
seront du type associ la structure.
Exemple: dans une fonction:
struct nom s1,s2;
s1 et s2 sont des variables de type structure (variable dite structure) dont le modle est le
nom de la structure les dfinissant.
Autre exemple:
struct nom
{
int n;
double x,y;
float tab[10];
int *pt;
}s1,s2;
12.2.2 typedef
typedef permet de donner un nouveau nom un type existant.
Ainsi: typedef struct nom s_enreg;
s_enreg dfini une structure s'appelant nom.
La dclaration des variables structures s'crira:
s_enreg s1,s2;
22
struct point
{
int x[10];
int y[10];
}l;
l.x[3] dsigne le quatrime lment du tableau x[]
b)
struct point
{
char nom;
int x;
int y;
};
struct point l[10];
23
Pour accder aux champs dans la fonction partir le l'adresse de la structure il faut faire appel
un nouvel oprateur: -> ou utiliser l'criture pointeur (*s).champ
void fct(struct nom *s)
{
s->nb=8;
ou (*s).nb=8;
}
Les champs ayant mme position mmoire, toute modification de leur valeur dans l'une ou
l'autre des fonctions se rpercute dans l'autre.
13 CHAINES DE CARACTERES
Il n'existe pas de variable de type chane
Une chane de caractres est un tableau de caractres (suite d'octets) cod en ASCII et termin
par un octet de code nul. Ainsi une chane de n caractres occupe n+1 octets.
13.1 INITIALISATION
Syntaxe: char ch[10];
ch="analyse";
ch est considr comme une constante pointeur. Elle contient l'adresse de dbut de la
constante chane: "analyse". |a|n|a|l|y|s|e|\o|
ch
Autres syntaxes:
char ch[10]="analyse";
char *ch;
ch="analyse";
On peut gnraliser un tableau de pointeurs:
char *jour[7]={"lundi","mardi",
Ainsi jour[0]="lundi"
24
};
25
14 FICHIERS
- Deux types de fichiers: binaire ou format.
- Deux types d'accs: squentiel(flux) ou direct.
Cration d'une mmoire tampon dans laquelle sont enregistres les donnes avant d'tre
transfres de la mmoire centrale au fichier.
14.1.2 ouverture
Associ un nom la mmoire tampon et prcis son mode d'utilisation (lecture, criture,
lecture-criture).
Syntaxe: fichier_pt=fopen(nomfichier,mode);
nomfichier est une chane de caractres prcdemment dclare.
mode est "wb" (criture binaire) ou "rb" (lecture binaire)
fopen renvoie un pointeur de code NULL si le fichier ne peut tre ouvert
if (fichier_pt==NULL) printf("impossible d'ouvrir");
14.1.3 fermeture
Aprs utilisation le fichier doit tre ferm:
fclose(fichier_pt);
26
27
15 PREPROCESSEUR
Le prprocesseur excute des fonctions particulires appeles "directives" et effectue un
prtraitement du programme source avant sa compilation.
Les fonctions directives sont identifies par le caractre # plac en tte. Ces fonctions peuvent
contenir plusieurs lignes, chaque ligne continuer tant termin par le caractre \.
15.1.2 #include
Permet d'insrer le contenu d'un fichier appel en tte dans un autre. Ces fichiers sont en
principe suffixs par .h .
Syntaxe:
#include <nom du fichier>
#include "nom du fichier"
Le fichier entre guillemets est recherch dans le rpertoire courant. Celui spcifi par <> est
recherch dans le rpertoire: /usr/include.
Quelques fichiers en tte:
stdio.h
(entres sorties)
string.h
(chanes de caractres)
time.h
(manipulation date et heure)
stdarg.h
(fonction avec un nombre variable d'arguments)
math.h
(fonctions mathmatiques)
28
29