Vous êtes sur la page 1sur 8

Chapitre 2 - INTRODUCTION AU LANGAGE C

1. Introduction

Pour être exécuté par un ordinateur, un algorithme doit être traduit en un programme en langage machine. Dans la pratique, on écrit le programme dans un langage de programmation plus proche du langage humain. Ensuite, un outil spécialisé se charge de faire la traduction en langage machine. C'est le cas du langage C qui est un langage de programmation dit compilé : un programme écrit dans ce langage doit passer par une étape de compilation pour être entièrement traduit en un autre programme en langage machine par un outil appelé compilateur. Le programme obtenu est dit programme exécutable.

3. Structure d'un programme en C

Un programme en C est composé d'un programme principal appelé main et, éventuellement, d'autres parties qui peuvent être des directives de compilation, des déclarations de constantes, etc. Il peut être écrit dans un fichier appelé fichier source portant l'extension .c ou l'extension .cpp. Dans le premier cas, il s'agit d'un programme en C pur. Dans le deuxième cas, c'est un programme en C++. Le langage C++ est un langage de programmation incluant les fonctionnalités du langage C et d'autres fonctionnalités plus avancées.

4. Exemple de programme en C

#include <stdio.h> int main( )

{

printf("Bonjour") ; return 0 ;

}

Dans l'exemple, #include <stdio.h> est une directive de compilation qui permet d'inclure dans le programme les fonctions définies dans la librairie standard stdio.h. Ces fonctions

pourront alors être appelées (c'est à dire utilisées) dans le programme principal qui contient les instructions à exécuter Une fonction est un regroupement d'instructions permettant d'effectuer un traitement. Une librairie est un fichier dans lequel est défini un ensemble de fonctions.

Le langage C fournit un ensemble de librairies appelées librairies standard. Par exemple :

- sdtio.h qui contient les définitions de fonctions d'Entrée/Sortie

- math.h qui contient les définitions de fonctions mathématiques.

Dans l'exemple la fonction printf de la librairie standard stdio.h est appelée dans le programme principal pour afficher à l'écran la chaîne de caractères "Bonjour".

Le programme principal est aussi une fonction et on l'appelle souvent la fonction main. Dans l'exemple, l'instruction return 0 termine la fonction main qui retourne (c'est à dire donne) le résultat 0 qui est de type int (entier en langage C).

5. Les types de base du langage C

A une variable ou une constante est associée un type qui permet de définir la taille de l’espace occupé en mémoire (nombre d’octets).

5-1. Les entiers

On peut distinguer plusieurs types d'entiers en C :

Type

Description

Taille

Valeurs possibles

Format

int

Entier standard

2

octets

de -32768 à 32767 (sur 2 octets) de -2147483648 à 2147483647 (sur 4 octets)

%d

short int

Entier court

2

octets

de -32768 à 32767

%d

long int

Entier long

4

octets

de -2147483648 à 2147483647

%ld

Si on veut des entiers non signés (positifs), on ajoutera le mot unsigned devant le type.

Type

Taille

Valeurs possibles

Format

unsigned int

2

ou 4 octets

de 0 à 65535 (sur 2 octets) de 0 à 4294967295 ( sur 4 octets)

%u

unsigned short int

2

octets

de 0 à 65535

%u

unsigned long int

4

octets

de 0 à 4294967295

%lu

5-2. Les réels

On peut distinguer deux types de réels en C :

Type

Description

Taille

Valeurs possibles

Format

float

Réel

4

octets

de -3.402823 × 10 38

%f

 

à

3.402823 × 10 38

double

Réel double précision

8

octets

de -1.79769313486232×10 308

%lf

 

à

1.79769313486232 × 10 308

5-3. Les caractères

Type

Description

Taille

Format

char

Caractère

1 octet

%c

Remarque

Les caractères spéciaux sont représentés en utilisant le caractère \. Par exemple :

'\n'

retour chariot avec saut de ligne

'\t'

tabulation horizontale

Remarque A chaque caractère correspond un nombre entier qui est son code ASCII. Par exemple 65 est le code ASCII du caractère 'A', 66 est celui du caractère 'B', etc.

Remarque

En langage C (programme dans un fichier .c), le type booléen est représenté par le type int avec 0 signifiant FAUX et toute valeur non nulle (par exemple 1) signifiant VRAI. En langage C++ (programme dans un fichier .cpp), il existe un type booléen appelé bool avec les valeurs true et false.

6. Déclaration des variables et des constantes

La déclaration consiste à réserver un espace en mémoire pour le stockage de la valeur d'une variable ou d'une constante.

6-1. Déclaration d'une variable

La syntaxe de déclaration d’une variable est :

type identificateur ;

Exemple int a ; Une déclaration peut être accompagnée d’une initialisation. On peut aussi déclarer plusieurs variables de même type avec une même instruction. Exemple int a , b = 2 , c ; Remarque Le langage C tient compte de la casse, c'est à dire qu'il fait la différence entre les majuscules et les minuscules. Par exemple, MAX est différent de Max. Un certain nombre de mots, appelés mots-clés, sont réservés au langage et ne peuvent pas être utilisés comme identificateurs.

6-2. Déclaration d'une constante

La syntaxe de déclaration d’une constante est :

const type identificateur = valeur ;

Exemple const int N = 100 ;

Remarque La directive de compilation #define permet de définir une valeur constante selon la syntaxe suivante:

#define identificateur valeur

Mais dans ce cas, il n’y a pas de réservation d'espace mémoire car il ne s'agit pas d'une déclaration mais seulement d'un remplacement dans le programme du mot représenté par l'identificateur par le mot représenté par la valeur. Exemple #define N 100 A la compilation, tous les N dans le programme seront remplacés par 100. 6-3. Choix d'un identificateur Un identificateur est une suite de caractères pouvant contenir des lettres (minuscules ou majuscules sans accents), des chiffres et le caractère _ (souligné). Mais le premier caractère ne peut pas être un chiffre. Le langage C tient compte de la casse, c'est à dire qu'il fait la différence entre les majuscules et les minuscules. Par exemple, MAX est différent de Max. Un certain nombre de mots, appelés mots-clés, sont réservés au langage et ne peuvent pas être utilisés comme identificateurs.

7. Les opérations du langage C

En langage C, on retrouve les opérations de base vues en algorithmique:

- Opérations arithmétiques :

addition ( + ) , soustraction ( - ) , multiplication ( * ) , division ( / ) , modulo ( % )

- Opérations de comparaison :

inférieur ( < ) , inférieur ou égal ( <= ), supérieur ( > ) , supérieur ou égal ( >= ) , égal ( = = ) , différent ( != )

- Opérations logiques :

ET logique ( && ) , OU logique ( || ) , Négation ( ! )

8. Les instructions élémentaires 8-1. L’affectation

L'instruction d'affectation permet de donner à une variable la valeur d'une expression. Elle se fait avec l'opérateur = selon la syntaxe suivante :

variable = expression ;

8-2. L'écriture

La fonction printf permet d’afficher des informations à l’écran. Sa syntaxe est :

printf ( "informations à afficher" , expression1, expression2, … ) ;

Cette fonction de la librairie standard stdio.h prend comme premier paramètre une chaîne de caractères contenant les informations à afficher. Si des valeurs d'expressions doivent apparaître dans cette chaîne, alors il faudra y mettre les formats correspondant à leurs types et donner comme paramètres supplémentaires la liste de ces expressions. Exemple int x = 5 , y = 10 ; printf ( "Bonjour\nLa valeur de x est %d et celle de y est %d", x, y ) ;

A l'affichage, les formats %d seront remplacés respectivement par les valeurs de x et de y. On aura donc à l'écran :

Bonjour La valeur de x est 5 et celle de y est 10

8-3. La lecture

La fonction scanf permet de lire des informations données au clavier par l’utilisateur. Sa syntaxe est :

scanf ( "formats" , &variable1 , &variable2,

) ;

Cette fonction de la librairie standard stdio.h prend comme premier paramètre une chaîne contenant les formats des types des variables à lire au clavier. Les paramètres suivants sont, dans l’ordre, l’adresse de chaque variable dont on veut lire la valeur. L'opérateur & permet d’accéder à l’adresse en mémoire d'une variable (à omettre dans le cas de la lecture d’une chaîne de caractères). Exemple int a , b ; scanf ("%d%d", &a , &b) ;

Si l'utilisateur donne 2 puis 5, a va prendre la valeur 2 et b va prendre la valeur 5.

8-4. Lecture et affichage de caractères

Avant la lecture d'un caractère il faut vider le buffer lié au clavier avec l'instruction :

fflush(stdin) ; On peut ensuite utiliser la fonction scanf avec le format %c On peut aussi utiliser la fonction getchar de la librairie stdio.h qui permet au programme de lire un caractère tapé au clavier par l'utilisateur. Cette fonction retourne un entier (code ASCII) correspondant au caractère lu. Pour affecter le caractère lu à une variable c de type char, on écrit :

c = getchar( ) ;

La fonction putchar de la librairie stdio.h permet au programme d’afficher un caractère à l’écran. La syntaxe pour afficher la valeur d'une variable c de type char est :

putchar( c ) ;

9. Les structures de contrôle

9-1. Les structures conditionnelles

9-1-1. La structure if

C'est la traduction de la structure Si de l'algorithmique. Sa syntaxe générale est :

if ( condition1 )

{

traitement1 ;

}

else if ( condition2 )

{

traitement2 ;

}

else if ( conditionN )

{

 

traitementN ;

}

else

{

 

traitement ;

}

Les conditions doivent être entre parenthèses. Si un traitement comporte une seule instruction, on peut omettre les accolades.

9-1-2. La structure switch

Elle permet de traduire la structure Selon de l'algorithmique. Sa syntaxe est:

switch ( expression )

{

 

case valeur1 : traitement1 ; break ; case valeur2 : traitement2 ; break ;

case valeurN : traitementN ; break ; default : traitement ;

}

L’exécution commence par le traitement du cas qui correspond à la valeur de l’expression et continue jusqu’à un break ou la fin du switch. Ainsi, si on ne met pas de break, les traitements suivants seront également exécutés. La clause default contient un traitement à exécuter dans le cas où la valeur de l'expression ne correspond à aucune des valeurs listées.

Exemple int num ;

printf( "Donner un numéro de jour" ) ; scanf( "%d", &num ) ;

switch ( num )

{

case 1 : printf( "Lundi" ) ; break ; case 2 : printf( "Mardi" ) ; break ; case 3 : printf( "Mercredi" ) ; break ; default : printf( "Ce n'est ni Lundi ni Mardi ni Mercredi" ) ;

}

9-2. Les structures répétitives

9-2-1. La boucle while

C'est la traduction de la boucle Tant que de l'algorithmique. Sa syntaxe est:

while (condition)

{

traitement ;

}

La condition doit être entre parenthèses. Si un traitement comporte une seule instruction, on peut omettre les accolades.

9-2-2. La boucle do…while

Elle permet de traduire la boucle Faire do

Tant

Que de l'algorithmique. Sa syntaxe est:

{

traitement ;

}

while (condition) ;

9-2-3. La boucle for

Elle permet de traduire la boucle Pour de l'algorithmique. Sa syntaxe est:

for ( instruction1 ; condition ; instruction2 )

{

traitement ;

}

L'exécution se déroule ainsi :

- instruction1 est exécutée une seule fois. - Ensuite, tant que la condition est vraie : le traitement est exécuté, puis instruction2 est exécutée

En général, instruction1 permet d'initialiser un compteur et instruction2 permet d'incrémenter ou de décrémenter le compteur.

Exemple : Affichage des nombres entiers de 0 à 20.

int i ;

for ( i = 0 ; i <= 20 ; i = i+1 )

{

printf( "%d", i ) ;

}

10. Les instructions de rupture de séquence en langage C

L'instruction break est la traduction de l'instruction Arrêter de l'algorithmique. Elle permet d'interrompre le déroulement de la boucle qui la contient. L'instruction continue est la traduction de l'instruction Continuer de l'algorithmique. Elle permet d'interrompre le déroulement de l'étape courante de la boucle qui la contient et de passer directement à l'étape suivante.

11. Lecture et écriture en C++

En C++, on peut utiliser l'opérateur << pour envoyer des valeurs d'expressions vers le flux de sortie standard cout ( l'écran ) avec l'instruction suivante :

cout << Expression1 << Expression2 << … << ExpressionN ;

En C++, on peut utiliser l'opérateur >> pour extraire des valeurs à partir du flux d'entrée standard cin ( le clavier ) et les affecter à des variables avec l'instruction suivante :

cin >> Variable1 >> Variable2 >> … >> VariableN ;

Pour utiliser les flux cin et cout il faut inclure dans le programme la directive :

#include <iostream.h>

ou bien (de préférence) :

#include <iostream> using namespace std ;

Exemple int x , y ; cout << "Donnez les valeurs de deux entiers x et y : " ; cin >> x >> y ; cout << "La valeur de x est " << x << " et celle de y est " << y ;