Cours programmation en langage C

Page 1 sur 9Lecteur de document UniversityLib

Cours programmation en langage C

Computer Science · course

Voir tous les documents en programmation

École Supérieure de Technologie

et d’Informatique

A.U. 2011/2012

Cours programmation en langage C

Chapitre 1 : Généralités (9 pages)

1ère année Licence Informatique

(cid:131) Fondateurs du langage C: Brian W.kernighan et Denis M. Ritchie

(cid:131) La définition de la première version du langgae C en 1988, au sein de l’institut

national américain de normalisation (ANSI: American National Standards Institute)

Exemple 1 :

#include <stdio.h>

void main()

{

printf(« premiere annee informatique ») ;

}

Exécution : premiere annee informatique

Chaque instruction en langage C se termine par un point virgule « ; ».

Exemple 2 :

#include <stdio.h>

void main()

{

printf(« premiere annee \n informatique ») ;

}

Exécution : premiere annee

informatique

\n : permet un retour à la ligne

Exemple 3 :

#include <stdio.h>

void main()

{

int x=5 ;

printf(« la valeur de x est %d », x) ;

}

Exécution : la valeur de x est 5

Dans cet exemple, il y a une réservation d’un espace mémoire pour la variable x, à une

adresse mémoire quelconque (2 octets)

%d est remplacé par la valeur de x.

X

5

F800

Dans cet exemple, le contenu de x (la valeur de x ou x) est 5

L’adresse mémoire de x (notée &x) est F800

x :5 ;   &x :F800

Exemple 4 :

Mme Wiem Yaiche Elleuch

chapitre 1

Page 1

#include <stdio.h>

void main()

{

int x=5 ;

float y=3.7 ;

printf(« la valeur de y est %f, celle de x est %d »,y, x) ;

}

Exécution : la valeur de y est 3.7, celle de x est 5

Type entier : int ; %d

Type réel : float ; %f

Exemple 5 :

#include <stdio.h>

void main()

{

int x=5 ; réservation de l’espace mémoire pour une variable x, avec initialisation de x à 5

printf(« la valeur de x est %d, son adresse est %p », x, &x) ;

}

Exécution : la valeur de x est 5, son adresse est F800

%p permet d’afficher une adresse mémoire

Exemple 6 :

#include <stdio.h>

void main()

{

// réservation de l’espace mémoire pour une variable x, sans initialisation

int x ;

printf(« saisir un entier ») ;

scanf(« %d », &x) ;

printf(« la valeur de x est %d», x) ;

}

Exécution : saisir un entier 5

La valeur de x est 5

Exemple 7 :

#include <stdio.h>

void main()

{

int x ;

// réservation de l’espace mémoire pour une variable x de type entier, sans initialisation

float y ; //réservation de l’espace mémoire pour une variable y de type réel, sans initialisation

printf(« saisir un réel et un entier ») ;

scanf(« %f%d », &y, &x) ;

printf(« la valeur de y est %f, celle de x est %d \n»,y, x) ;

printf(« la valeur de x est %d, celle de y est %f \n»,x, y) ;

}

Exécution : saisir un réel et un entier 8.9

Publicité

6

la valeur de y est 8.9, celle de x est 6

la valeur de x est 6, celle de y est 8.9

Exemple

Ecrire un programme qui lit 3 entiers au clavier, affiche leur somme et leur moyenne.

#include <stdio.h>

void main()

{

Mme Wiem Yaiche Elleuch

chapitre 1

Page 2

int x ; int y ; int z ; int som ;

float moy ; // ou bien int x, y, z ;

printf(« saisir 3 entiers ») ;

scanf(« %d%d%d » , &x, &y, &z) ;

som=x+y+z ;

moy=som/3 ;

printf(« la somme est %d, et la moyenne est %f », som, moy) ;

}

Exécution :

saisir 3 entiers 5

6

7

la somme est 18, et la moyenne est 6.0

Structure d’un programme (pgm) en C

(cid:131) main() : en-tête : Elle précise que ce qui sera décrit à sa suite est le programme

principal (main)

(cid:131) Le pgm principal est délimité par des accolades

(cid:131) Les instructions situées entre accolades forment un « bloc ».

(cid:131) La fonction main est constituée d’un en tête et d’un bloc.

(cid:131)

(cid:131) Un bloc peut lui-même contenir d’autres blocs

Il ira de même pour toute fonction C

Déclarations

int x,y,z ; float moy ; Ce sont des « déclarations ».

(cid:131)

(cid:131) La variable nommée x est de type int (destinée à contenir des nombres entiers relatifs).

(cid:131) En C, il existe plusieurs types d’entiers

(cid:131) En C, les déclarations des types de variables sont obligatoires et doivent être

regroupées au début du programme (fonction main).

Pour écrire des informations: la fonction printf

printf(« premiere annee \n informatique »);

(cid:131) Appelle une fonction prédéfinie (fournie avec le langage et qu’on n’a pas besoin d’écrire)

nommée printf.

(cid:131) Cette fonction reçoit un argument « premiere annee \n informatique »

(cid:131) Les guillemets servent à délimiter une « chaîne de caractères » (suite de caractères).

(cid:131)

\n représente un caractère de fin de ligne (passage à la ligne suivante).

printf(“la moyenne est %f “, moy) ;

(cid:131)

(cid:131) Le premier argument de printf est le « format » : il précise comment afficher les

Ici, printf reçoit deux arguments : “la moyenne est %f “ et moy.

informations qui sont fournies par les arguments suivants

(cid:131) Le % indique que le caractère suivant est, non plus du texte à afficher tel quel, mais un

« code de format ».

(cid:131) Il faut toujours veiller à accorder le code de format au type de la valeur

correspondante

Mme Wiem Yaiche Elleuch

chapitre 1

Page 3

Pour lire des informations: la fonction scanf

scanf (« %f », &x);

(cid:131) C’est un appel de la fonction prédéfinie scanf dont le rôle est de lire une information au

clavier.

(cid:131) Comme printf, la fonction scanf possède en premier argument un format exprimé sous

forme d’une chaine de caractère: « %f » (float)

(cid:131) L’argument précise dans quelle variable on souhaite placer la valeur lue

(cid:131) &x: la fonction scanf range la valeur lue à l’adresse de la variable. (& est un opérateur

signifiant « adresse de »)

Quelques règles d’écriture : Les identificateurs

(cid:131) Les identificateurs servent à désigner les différents « objets » manipulés par le programme

(cid:131)

(variables, fonction, etc).

Ils sont formés d’une suite de caractères choisis parmi les lettres ou les chiffres. Le

premier d’entre eux étant nécessairement une lettre.

(cid:131) Le caractère « _ » est considéré comme une lettre. Il peut apparaître au début d’un

identificateur (lg_ligne; _total; _89)

(cid:131) Les majuscules et les minuscules sont autorisées mais ne sont pas équivalentes (ligne ‡

Ligne).

(cid:131) Longueur des identificateurs: les 31 premiers caractères sont significatifs

Quelques règles d’écriture : Les mots clés

(cid:131) Certains mots-clés sont réservés par le langage à un usage bien défini et ne peuvent

pas être utilisés comme identificateurs.

(cid:131) Auto, break, case, char, const, continue, default, do, double, else, enum, extern, float,

for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch,

typedef, union, unsigned, void, volatile, while

Quelques règles d’écriture : Les séparateurs

(cid:131)

(cid:131)

int x,y; et non intx, y

int n,compte,total,p; ou bien plus lisiblement int n, compte, total, p;

Publicité

Quelques règles d’écriture : le format libre

(cid:131) Le langage C autorise une mise en page parfaitement libre

(cid:131) Une instruction peut s’étendre sur un nombre quelconque de lignes, et une même ligne

peut comporter plusieurs instructions

Quelques règles d’écriture : les commentaires

(cid:131) Le langage C autorise la présence de commentaires dans les programmes

(cid:131)

Il s’agit de textes explicatifs destinés aux lecteurs du programme et qui n’ont aucune

incidence sur sa compilation.

Ils sont placés entre / et / ou bien //

Ils peuvent apparaître à tout endroit du programme

(cid:131)

(cid:131)

Mme Wiem Yaiche Elleuch

chapitre 1

Page 4

Les directives à destination du préprocesseur

#include<stdio.h>

#define NB 5

(cid:131) Ces premières lignes sont des directives qui seront prises en compte avant la

traduction (compilation du programme).

(cid:131) Ces directives doivent être écrites à raison d’une par ligne et elles doivent

obligatoirement commencer en début de ligne.

(cid:131) D’une manière générale, il est préférable de placer les directives au début.

(cid:131) Ces directives demandent d’introduire (avant compilation) des instructions situées

dans le fichier stdio.h et de remplacer le symbole NB par 5

(cid:131) Lors de l’appel d’une fonction prédéfinie, il est nécessaire d’incorporer un tel fichier,

nommé « fichier en-tête », qui contient des déclarations appropriées concernant cette

fonction stdio.h pour printf et scanf.

(cid:131) Ces déclarations permettront au compilateur d’effectuer des contrôles sur le nombre et

le type des arguments mentionnés lors de l’appel de la fonction

(cid:131) Un même fichier en-tête contient des déclarations relatives à plusieurs fonctions

(cid:131) En général, il est indispensable d’incorporer stdio.h

(cid:131) #define NB 5 demande de remplacer systématiquement, dans toute la suite du

programme, le symbole NB par 5.

(cid:131) #define sert à définir la valeur d’un symbole

Création d’un programme (pgm) en langage C

Suit les étapes suivantes :

(cid:131) Édition du programme

(cid:131) Compilation

(cid:131) Édition de liens

Création d’un programme en langage C : Édition du programme

(cid:131) Ou « saisie » consiste à créer à partir d’un clavier du texte d’un programme (pgm)=>

programme source

(cid:131) Ce texte sera conservé dans un fichier=> fichier source

(cid:131) Chaque système possède ses propres conventions de dénomination des fichiers

(cid:131) Un fichier: nom+extension

Création d’un programme en langage C : La compilation

(cid:131) Elle consiste à traduire le pgm source (ou le contenu du fichier source) en langage

machine en faisant appel à un programme nommé compilateur

(cid:131) L’opération de compilation se fait en deux étapes:

o Traitement par le préprocesseur: qui exécute les directives qui le concerne

(commençant par #include, #define)

o La compilation: traduction en langage machine du texte en langage C fourni

par le préprocesseur

(cid:131) Le résultat de la compilation porte le nom de module objet

Mme Wiem Yaiche Elleuch

chapitre 1

Page 5

Création d’un programme en langage C : Édition de lien

(cid:131) Le module objet créé par le compilateur n’est pas directement exécutable

(cid:131)

Il lui manque les différents modules objet correspondant aux fonctions prédéfinies

utilisées par le pgm (printf, scanf, etc).

(cid:131) C’est le rôle de l’éditeur de lien d’aller rechercher dans la bibliothèque standard les

modules objets nécessaires

(cid:131) Le résultat de l’édition de liens est un programme exécutable, càd un ensemble

autonome d’instructions en langage machine

(cid:131) Si ce programme exécutable est rangé dans un fichier, il pourra ultérieurement être

exécuté sans qu’il soit nécessaire de faire appel à un quelconque composant de

l’environnement de pgmt en C

Le préprocesseur

(cid:131) C’est un pgm qui est exécuté automatiquement avant la compilation et qui transforme

un fichier source à partir d’un certain nombre de directives

(cid:131) Les directives sont écrites sur des lignes distinctes du reste du programme, elles sont

introduites par #: #include, #define

(cid:131) Les diverses possibilités offertes par le préprocesseur:

o Incorporation de fichiers source (#include)

o Définition de symboles et de macros (#define)

o Compilation conditionnelle

La notion de type

(cid:131) La mémoire centrale est un ensemble de positions binaires nommées bits.

(cid:131) Les bits sont regroupés en octets (8 bits), et chaque octet est repéré par ce qu’on

nomme son adresse

(cid:131) L’ordinateur représente et traite les informations exprimées (codées) sous forme

binaire.

(cid:131) Une séquence binaire peut représenter un nombre entier, nombre réel, caractère,

(cid:131)

instruction, etc)

Il n’est pas possible d’attribuer une signification à une information binaire tant que

l’on ne connaît pas la manière dont elle a été codée.

Publicité

(cid:214) la notion de type permet de régler ce problème

Types de base

Les types de base du langage C se répartissent en trois grandes catégories:

(cid:131) Nombres entiers (int, short , long)

(cid:131) Nombres flottants (float, double, long double)

(cid:131) Caractères (char)

Mme Wiem Yaiche Elleuch

chapitre 1

Page 6

Catégorie des entiers :

(cid:131) char : caractère : Une variable du type char peut contenir une valeur entre -128 et 127 et

(cid:131)

elle peut subir les mêmes opérations que les variables du type short, int ou long.

int : entier standard : Sur chaque machine, le type int est le type de base pour les calculs

avec les entiers. Le codage des variables du type int est donc dépendant de la machine.

Sur les IBM-PC sous MS-DOS, une variable du type int est codée dans deux octets.

(cid:131) short : entier court : Le type short est en général codé dans 2 octets. Comme une variable

int occupe aussi 2 octets sur notre système, le type short devient seulement nécessaire, si

on veut utiliser le même programme sur d'autres machines, sur lesquelles le type standard

des entiers n'est pas forcément 2 octets.

définition

description

domaine min

domaine max nombre d'octets

char

caractère

-128

short

entier court

-32768

int

entier standard

-32768

127

32767

32767

long

entier long

-2147483648

2147483647

1

2

2

4

Chacun de ces trois types peut être qualifié de unsigned (non signé) (pas de bit réservé au

signe, des nombres positifs seulement)

définition

description

domaine min domaine max nombre d'octets

unsigned char

caractère

unsigned short

entier court

unsigned int entier standard

unsigned long

entier long

0

0

0

0

255

65535

65535

4294967295

1

2

2

4

Catégorie des flottants

(cid:131) Les types flottants permettent de représenter, de manière approchée, une partie des

nombres réels.

(cid:131) Notation: M.BE Avec M: mantisse ; E: exposant; B:base

(cid:131) Exemple: 1.5 1022 0.472 10-8

(cid:131) 1.5 et 0.472: mantisses ; 22 et -8: exposants

(cid:131) Un nombre réel sera représenté en flottant.

(cid:131) Le C prévoit trois types de flottants: float, double et long double

(cid:131) Les constantes flottantes peuvent s’écrire indifféremment suivant l’une des deux

notations:

o Décimale

o Exponentielle

Mme Wiem Yaiche Elleuch

chapitre 1

Page 7

(cid:131) La notation décimale doit comporter obligatoirement un point (~ virgule). La partie

entière ou décimale peut être omise 12.43 -0.38 -.38 4. .27

(cid:131) La notation exponentielle utilise la lettre e (ou E) pour introduire un exposant entier

(puissance de 10), avec ou sans signe

(cid:131) 4.25E4 4.25e+4 42.5E3 54.27E-32 542.7E-33 5427e-34

définition précision mantisse domaine min domaine max nombre d'octets

float

simple

Publicité

double

double

long double

suppl.

6

15

19

3.4 * 10-38

3.4 * 1038

1.7 * 10-308

1.7 * 10308

3.4 10-4932 1.1 104932

4

8

10

Catégorie des caractères

(cid:131) Un caractère est codé sur un octet en mémoire

(cid:131)

il existe des caractères non imprimables: caractères de changement de ligne (\n),

tabulation (\t), etc

(cid:131) Constantes de type caractère (imprimable): ‘A’ ‘+’ ‘9’

(cid:131) Certains caractères non imprimables utilisent le caractère « \ » (antislash, backslash)

(cid:131)

\a: bip; \b:retour arrière; \f: saut de page; \n: saut d ligne; \r: retour chariot; \t:

tabulation horizontale; \v: tabulation verticale, etc;

\a

\b

\t

\n

\r

\0

sonnerie

curseur arrière

tabulation

nouvelle ligne

retour au début de ligne

NUL

\\

\?

\'

\"

\f

\v

trait oblique

point d'interrogation

apostrophe

guillemets

saut de page (imprimante)

tabulateur vertical

(cid:131)

Il est possible d’utiliser directement le code du caractère en l’exprimant à la suite du

caractère antislash:

o Soit sous forme octale

o Soit sous forme hexadécimale précédée de x

o ‘A’ ‘\x41’ ‘\101’

Initialisation et constantes

(cid:135) #define: permet de donner une valeur à un symbole. Dans ce cas, le préprocesseur

effectue le remplacement correspondant avant la compilation

#include<stdio.h>

#define NB 5

void main()

{

int i=7;

if (i<NB) printf(“ inférieur”);

else printf(“ supérieur ”);

Mme Wiem Yaiche Elleuch

chapitre 1

Page 8

}

=> Ce programme affiche supérieur

Il est possible d’initialiser une variable lors de sa déclaration: int n=15;

(cid:131)

(cid:131) Cette valeur initiale évolue lors de l’exécution du programme (pgm)

(cid:131)

Il est possible de déclarer que la valeur d’une variable ne doit pas changer lors de

l’exécution du pgm

(cid:131) const int n=20;

(cid:131) Les éventuelles instructions modifiant la valeur de n seront rejetées par le compilateur

#include<stdio.h>

void main()

{

const int i=5;

printf (“%d “,i);

i=i+1; // erreur, i est déclaré const, il ne faut pas essayer de modifier sa valeur

printf (“%d “,i);

}

Mme Wiem Yaiche Elleuch

chapitre 1

Page 9