Vous êtes sur la page 1sur 81

Faculté des sciences juridiques, économiques et sociales d’Aïn Sebaâ

Cours d’informatique
Programmation C

Filière: MASS S2

Pr. Wafae SABBAR

1
I. Introduction Langage de programmation

Langage de programmation
Problème
Un langage de programmation est un

langage informatique, permettant à un Algorithmique

humain d’écrire un code source qui sera

analysé par un ordinateur. Algorithme

La programmation
Programmation
La programmation est l’activité de

rédaction du code source d’un


Code source
programme.

2
I. Introduction Langage C

• Le langage C a été inventé en 1972 par Dennis Richie et Ken Thompson,

chercheurs aux Bell Labs, afin de développer un système d'exploitation UNIX

• Le C est un langage compilé. Cela signifie qu'un programme C est décrit par

un fichier texte, appelé fichier source. Ce fichier n'étant évidemment pas

exécutable par le microprocesseur, il faut le traduire en langage machine.

Cette opération est effectuée par un programme appelé compilateur.

• Compilateur est un logiciel qui lit le code source et le convertit en un code

exécutable, c'est-a-dire un ensemble d'instructions compréhensible par le

processeur.
3
Etapes permettant l‘édition, la mise au point,
I. Introduction
l‘exécution d'un programme

Edition du code source


#include<stdio.h>
#include<math.h>
………………… Code source .C
void main()
{
}
Compilation

Bibliothèques précompilées
Code compilé .OBJ

Stdio.lib
Édition de liens
Stdio.lib
…….
Programme exécutable .EXE

4
Etapes permettant l‘édition, la mise au point,
I. Introduction
l‘exécution d'un programme

1. Edition du programme source, à l'aide d'un éditeur (traitement de textes).


Le nom du fichier contient l'extension « .C » ou « .CPP ».

2. Compilation du programme source, c'est à dire création des codes


machine destinés au microprocesseur. Le compilateur indique les erreurs de
syntaxe et génère un fichier binaire appelé fichier objet: contient l'extension
« .OBJ » (commande « compile »).

3. Editions de liens: Le code machine des fonctions-bibliothèque est chargé,


création d'un fichier binaire, appelé fichier exécutable: « .EXE » (commande
« build all »).

4. Exécution du programme (commande « execute»). Les compilateurs


permettent en général de construire des programmes composés de plusieurs
fichiers sources, d'ajouter à un programme des unités déjà compilées
5
Etapes permettant l‘édition, la mise au point,
I. Introduction
l‘exécution d'un programme

Exemple: Compiler et exécuter le programme suivant

#include <stdio.h> /* bibliothèque d'entrées-sorties standard */


void main()
{

int a, b, som ; /* déclaration de 3 variables */

a = 10 ; /* affectation* /

b = 50 ; /* affectation */

som = a + b ; /* affectation et opérateurs */

printf(" Voici le résultat : %d’’, som) ; /*affichage le résultat sur l’écrans*/

} 6
I. Introduction Structure d’un programme

Un programme simple se compose de plusieurs parties :


• Des directives de précompilation
• Une ou plusieurs fonctions dont l’une s’appelle obligatoirement main(),
celle-ci constitue le programme principal et comporte 2 parties : la
déclaration de toutes les variables et les instructions
• Les commentaires: débutent par ‘’ /*’’ et finissent par ‘’*/’’

[directives au préprocesseur]
[déclarations de variables externes]
[fonctions secondaires]
void main()
{
déclarations de variables internes
instructions
} 7
2. Les variables Les variables

• Les variables sont les données que manipulera le programme lors de son

exécution. Ces variables sont rangées dans la mémoire vive de l’ordinateur.

• Les variables doivent être déclarées au début du programme.


Void main()
{
<déclarations de variables>
<Instructions à exécuter>
}
• Pour déclarer une variable, on fait précéder son nom par son type.

Syntaxe:

<Type> <NomVar1>,<NomVar2>,...,<NomVarN>;

8
2. Les variables Les types des variables

Type Signification val. min val. max


Char caractère signé codé sur 1 octet -27 27-1
unsigned char caractère non signé codé sur 1 octet 0 28
short entier signé codé sur 1 octet (2 octets) -27 27-1
unsigned short entier positif codé sur 1 octet (2 octets) 0 28
int Entier signé codé sur 2 octets (4 octets) -215 215-1
unsigned int Entier positif codé sur 2 octets ( 4 octets) 0 232
long entier codé sur 8 octets (4 octets) -231 231-1
unsigned long entier codé sur 8 octets (4 octets) 0 264-1
float réel codé sur 4 octets -1038 1038
double réel codé sur 8 octets -10308 10308

9
2. Les variables Déclaration des variables

Exemple:
Les trois instructions suivantes sont des « déclarations des variables » :
int i, j, k, l ;
int a1, a2;
float x ;
double x1, x2;
Remarque:
1. Le langage C permet l'initialisation des variables dans la zone des déclarations:
char c = 'A'; int i = 50; float a=3.5;
2. Les noms des variables doivent commencer par une lettre et ne contenir aucun
blanc. Le seul caractère spécial admis est le soulignement ( _ ).
3. Il existe un certain nombre de noms réservés par le langage C à un usage bien
défini et ne peuvent pas être utilisés pour nommer les variables.
10
2. Les variables Déclaration des variables

Exercice:
Lesquels des identificateurs suivants sont acceptés par le langage C ?
1. prix1
2. prix.2
3. 1prix
4. -prix-3
5. prix_2 _prix_3
6. prix_hors_taxe
7. Prix hors taxe
8. deuxième_prix
9. français

11
2. Les variables Définir un nouveau type

typedef : Transforme la déclaration d'une variable en déclaration d'un nouveau


type

Syntaxe:

typedef déclaration;

Exemple:

typedef int Entier ;

typedef float moyenne;

12
3. Les constantes Déclaration des constantes

En utilisant l'attribut const, nous pouvons indiquer que la valeur d'une variable ne

change pas au cours d'un programme:

Syntaxe:

Const type nom_variable;

Exemple:
const int X = 200;
const double e = 4.715
Const char a=‘t’

13
3. Les constantes Déclaration des constantes

Constantes entières

Pour traduire les constantes entières, le C propose trois notations :

1. La notation décimale: par exemple 379

2. La notation octale: qui doit commencer par un zéro par exemple 0573

3. Le notation hexadécimale, qui doit commencer par un zéro suivi d'un x (ou

X), par exemple 0X17B (ou 0x17B, 0X17b, 0x17b)


Remarque:
const int a=20;
on déclare a de type int et de valeur initiale 20 mais, les éventuelles
instructions modifiant la valeur de n seront rejetées par le compilateur.

14
3. Les constantes Déclaration des constantes

Constantes réelles
Pour les constantes réelles, on utilise le « . » pour marquer la virgule et le
caractère "e" suivi d'un nombre entier.

Exemple:

-0.38 -.38 4.

4.25E4 4.25e+4 42.5E3

54.27E-32 542.7E-33 5427e-34

48e13 48.e13 48.0E13


Constantes caractères et chaîne de caractères
Les constantes caractères sont entourées de quote, par exemple 'a‘
Les constantes chaîne de caractères doivent être entourées de guillemets, par
exemple "bonjour"
15
4. Les instructions Instructions simples

• Instruction simple:
Les instructions simples finissent toujours par un ' ;‘

Syntaxe:

Instructions ;

Exemple
a=a+1;

16
4. Les instructions Instructions composées

• Instructions composées
Les instructions composées qui permettent de considérer une succession
d'instructions comme étant une seule instruction. Elles commencent par ‘’ {‘’ et
finissent par ‘’}’’

Syntaxe:
{
Instructions 1 ;
Instruction 2;
……………..
}

Exemple
{
a=a+1;
b=b+2;
}
17
5. Les opérateurs Les opérateurs

1. Les opérateurs arithmétiques

2. Les opérateurs relationnelles

3. Les opérateurs logiques

4. L’opérateur d’affectation

5. Les opérateurs d’incrémentation

6. Les opérateurs d’affectation élargie

7. Les opérateurs de conversion de type

18
8. L’opérateur sizeof
5. Les opérateurs Les opérateurs arithmétiques

Les opérateurs arithmétiques


+ Addition
- Soustraction
* Multiplication
/ Division
% reste de la division

19
5. Les opérateurs Les opérateurs arithmétiques

Remarque:
1. Le résultat d’une opération entre types différents se fait dans le type le plus
haut. Les types sont classés ainsi : char < int < long < float < double
Exemple:
int p1, p2,p3;
float x;

20
5. Les opérateurs Les opérateurs arithmétiques

En C comme dans les autres langages, lorsque plusieurs opérateurs apparaissent

dans une même expression, les règles sont naturelles et rejoignent celles de

l’algèbre traditionnelle

21
5. Les opérateurs Les opérateurs relationnelles

Les opérateurs relationnelles


< inférieur à
<= inférieur ou égal à
> supérieur à
>= supérieur ou égal à
== égal à
!= différent de

 Remarque:
Le résultat de la comparaison est, non pas une valeur "booléenne" prenant l'une
des deux valeurs vrai ou faux, mais un entier valant :
• 0 si le résultat de la comparaison est faux.
• 1 si le résultat de la comparaison est vrai.
22
5. Les opérateurs Les opérateurs logiques

Les trois opérateurs logiques classiques :


 
Les opérateurs logiques
&& Et
|| Ou
! Non

Exemple:

(a<b) && (c<d)

(a<b) || (c<d)

! (a<b)

23
5. Les opérateurs L’opérateur d’affectation " ="

Exemple:

a =12;

b = 2;

c = a+b;

a = b+c;

a = a+1;

Quelles seront les valeurs des variables a, b et c après exécution des instructions
suivantes ?

24
 
5. Les opérateurs Les opérateurs d’incrémentation

++  incrémente la variable d’une unité.

--  décrémente la variable d’une unité.

Exemple:

i++ ;  i=i+1

i-- ;  i=i-1

Remarque: Ces 2 opérateurs ne s’utilisent pas avec des réels.

25
5. Les opérateurs Les opérateurs d’affectation élargie

X = I++ passe d'abord la valeur de I à X et incrémente après

X = I-- passe d'abord la valeur de I à X et décrémente après

X = ++I incrémente d'abord et passe la valeur incrémentée à X

X = --I décrémente d'abord et passe la valeur décrémentée à X

 Exemple :
j=i++;  effectue d’abord j=i et ensuite i=i+1
j=++i ;  effectue d’abord i=i+1 et ensuite j=i
i+=5;  i=i+5;
i-=3;  i=i-3 ;
i*=4;  i=i*4;
i/=2;  i=i/2 ;
I*=a  i=i*a;
26
5. Les opérateurs Les opérateurs de conversion de type

Il est possible de convertir explicitement une valeur en un type quelconque en

forçant la transformation à l'aide de la syntaxe:

Syntaxe:

(<Type>) <Expression>;

Exemple:
int A=3;
int B=4;
float C, D;
C = (float)A/B;
D= (float)(A/B+A);
27
5. Les opérateurs L’opérateur sizeof

L'opérateur sizeof renvoie le nombre d'octets réservés en mémoire pour chaque


type d'objet.
 
Syntaxe:

Taille_objet= sizeof(<Type>) ;

Exemple:
Exemple: n = sizeof(char);

Résultat n=1

28
6. Les entrées-sorties La fonction printf ( )

L'instruction printf() (de la bibliothèque stdio.h) permet d'afficher des


informations à l‘écran

Syntaxe:

printf("chaîne de caractères" ,variables);

La chaîne de caractères peut contenir des caractères spéciaux :


\n pour le retour à la ligne
\t pour les tabulations

Exemple:
printf(" liste des variables: \n");
printf(" variable 1: );
29
Les entrées-sorties La fonction printf ( )

Si des variables suivent la chaîne de caractères, cette dernière doit spécifier


comment présenter ces variables :
Formats Types Signification
%c char caractère
%s char chaîne de caractères
%d int Entier signé
%u unsigned int entier non signé (positif)
%hd short entier court
%hu unsigned short entier court non signé
%ld long int entier long signé
%lu unsigned long int entier long non signé
%f float réel, notation avec le point décimal (ex. 123.15)
%e float réel, notation exponentielle (ex. 0.12315E+03)
%lf double réel en double précision ‘ avec le point décimal)
%le double réel en double précision, notation exponentielle

N.B %x affichage en hexadécimal (entiers de type int), 30


6. Les entrées-sorties La fonction printf( )

Exemple :
int i=1;
int j=2;
printf ("la somme de i et j est:\n");
printf ("i = %d \t j= %d \n",i,j);
printf ("i +j= %d ”,i+j);
Affichage sur l’écran
la somme de i et j est:
i=1 j=2
i+j=3

NB. Le caractère % indique le format d’écriture à l’écran. Dès qu’un format


est rencontré dans la chaîne de caractère entre " ", le programme affiche la
31
valeur de l’argument correspondant.
6. Les entrées-sorties La fonction scanf( )

La fonction scanf() (de la bibliothèque stdio.h) permet de lire la valeur que


l’utilisateur rentre au clavier et de la stocker dans la variable donnée en
argument.

Syntaxe:

scanf("chaîne de formatage" ,&variable1, &variable2,……);

 La chaîne de formatage spécifie le type des données attendues


 Pour éviter tout risque d’erreur, on lit et on écrit une même variable avec le
même format.
 Le & est indispensable pour le bon fonctionnement de la fonction. Il indique
l’adresse de la variable.

32
6. Les entrées-sorties La fonction scanf( )

Exemple:

char a;

int i;

float r;

scanf("%c",&a); /* saisie d'un caractère */

scanf("%d",&i); /* saisie d'un nombre entier en décimal */

scanf("%f",&r); /* saisie d'un nombre réel */

33
6. Les entrées-sorties Impression et lecture de caractères

Les fonctions getchar() et putchar() permettent respectivement de lire et


d'imprimer des caractères. Il s'agit de fonctions d'entrées-sorties non
formatées.
Syntaxe:

caractere = getchar();
putchar(caractere);

Exemple:
int C;
C = getchar();

Remarque

a = getchar(); <==> scanf ("%c", &a);

putchar(a); <==> printf("%c ",a); 34


7. Les instructions de
Les instructions de contrôle
contrôle

 Ce sont des instructions qui permettent de faire des tests et des boucles dans un
programme.

1. L’instruction if

2. L’instruction switch

3. L’instruction do …… while

4. L’instruction while

5. L’instruction for

35
7. Les instructions de
L‘instruction if
contrôle

if est une instruction qui permet d'effectuer un traitement selon la condition ou


l’expression logique.

Syntaxe:
if (expression logique)
{ if (expression logique)
bloc d’instructions_1; Instruction_1;
}
else Instruction_2;
{
bloc d’instructions_2;
}

Si l'<expression logique> fournit une valeur différente de zéro, alors le <bloc


d'instructions 1> est exécuté
Si l'<expression logique > fournit la valeur zéro, alors le <bloc d'instructions
2> est exécuté
36
7. Les instructions de
L‘instruction if
contrôle

oui non oui non


condition c o n d it i o n
vraie v ra ie

b lo c d '
bloc 1 d' bloc 2 d'
i n s t r u c ti o n s
instructions instructions

s u i te d u p r o g r a m m e
suite du programme

if (expression)
{ if (expression)
bloc 1 d'instructions {
} bloc d’instructions
else }
{ Suite du programme
bloc 2 d'instructions
}
37
Suite du programme
7. Les instructions de
L‘instruction if
contrôle

Exemple:

if (note_module <10)
printf("Attention vous avez un rattrapage");
else
printf("vous avez validé le module");

if (note_module <10)
printf("Attention vous avez un rattrapage");
printf("vous avez validé le module");

38
7. Les instructions de
L‘instruction if imbriquée
contrôle

Syntaxe:

If (expression logique 1 )
instruction 1;
Else if (expression logique 2)
instruction 2;
else
instruction 3;

Exercice:
Écrire un algorithme qui permet de résoudre l’équation du second
degré ax2+bx+c, les trois coefficients a, b et c seront saisis au clavier
avant le traitement.
39
7. Les instructions de
L‘instruction switch
contrôle

Syntaxe:

switch (n) // n entier


{
case constante_1 : [ suite_d’instructions_1 ]
break;
case constante_2 : [ suite_d’instructions_2 ]
break;
..............
case constante_n : [ suite_d’instructions_n ]
break;
Default : [suite_d’instructions ]
}
40
7. Les instructions de
L‘instruction switch
contrôle

Exemple:

void main()
Résultat 1
{
donnez un entier : 2
int n ;
deux
printf ("donnez un entier : ") ;
fin
scanf ("%d", &n) ;
_______
switch (n)
{
Résultat 2
case 0 : printf ("nul\n") ;
donnez un entier : 25
break ;
grand
case 1 : printf ("un\n") ;
Fin
break ;
case 2 : printf ("deux\n") ;
break ;
default : printf ("grand\n") ;
}
printf (" fin") ;
}

41
7. Les instructions de
L‘instruction while
contrôle

La structure while correspond tout à fait à la structure tant que du langage


algorithmique.
Syntaxe:
while ( expression )
{
bloc d'instructions
}

Tant que l'expression fournit une valeur différente de zéro, le <bloc


d'instructions> est exécuté. Si l'expression fournit la valeur zéro,
l'exécution continue avec l'instruction qui suit le bloc d'instructions.

42
7. Les instructions de
L‘instruction do - while
contrôle

while (expression)
{
oui non
condition bloc d’instructions
}
vraie

bloc d'
instructions Exemple:
int i = 1;
while (i < 10)
{
printf("\n i = %d",i);
i++;
}
43
7. Les instructions de
L‘instruction do - while
contrôle

La structure do - while est semblable à la structure while, avec la différence


suivante :
while évalue la condition avant d'exécuter le bloc d'instructions,
do - while évalue la condition après avoir exécuté le bloc d'instructions. Ainsi le
bloc d'instructions est exécuté au moins une fois.

Syntaxe:

Do
{
<bloc d'instructions>
}
while ( expression );

44
7. Les instructions de
L‘instruction do - while
contrôle

do
bloc d' {
bloc d’instructions
instructions }
while (expression);

non
condition
oui vraie

suite du programme

45
7. Les instructions de
L‘instruction do - while
contrôle

Exemple:

int N;
do
{
printf("Introduisez un nombre entre 1 et 10 :");
scanf(" %d", &N);
}
while (N<1 || N>10);

46
7. Les instructions de
L‘instruction for
contrôle

L’instruction for permet de répéter des instructions ou des traitements un certain


nombre de fois.
Syntaxe:

for (initialisation ; condition de continuité ; modification)


{
Bloc d’instructions
}

Exemple

for(i=1; i<10; i++)


printf("\n i = %d",i);

for(a=10; a>1; a--)


printf("\n a = %d",a);

47
7. Les instructions de
L‘instruction for
contrôle

i=0

i<20
non for(i=0 ; i<20; i++)
oui {
bloc d’instructions
}
bloc d'instructions Suite du programme

i++ suite du programme

48
7. Les instructions de
L‘instruction for
contrôle

Remarque
for ( expression_1 ; expression_2 ; expression_3) expression_1 ;
while (expression_2)
Instruction; {
instruction
expression_3 ;
}

Exemple

for(i=1; i<10; i++) int i = 1;


printf("\n i = %d",i); while (i < 10)
{
printf("\n i = %d",i);
i++;
}

Exercice
Ecrire un programme qui calcul an
49
7. Les instructions de
Comparaison
contrôle

Nombre
d’itérations
connu?
n Ou
N o i

Boucle for
Traitement exécuté
au moins une fois ?

No
n
ui
O

Boucle while
Boucle do……..while
7. Les instructions de Les instructions de branchement
contrôle inconditionnel

Les trois instructions de branchement inconditionnel :

1. break

2. continue

3. goto

Les deux premières s’emploient principalement au sein de boucles tandis que la

dernière est d’un usage libre

51
7. Les instructions de Les instructions de branchement
contrôle inconditionnel

L’instruction break sert à interrompre le déroulement de la boucle, en passant à


l’instruction qui suit cette boucle, cette instruction n’a d’intérêt que si son
exécution est conditionnée par un choix. En cas de boucles imbriquées, break
fait sortir de la boucle la plus interne.

main() Résultat
{
int i; i=0
for (i = 0; i < 5; i++) i=1
{
printf("i = %d\n",i); i=2
if (i == 3) i=3
break;
} valeur de i a la sortie de la
printf("valeur de i a la sortie de la boucle boucle = 3
= %d\n",i);
}
52
7. Les instructions de Les instructions de branchement
contrôle inconditionnel

L’instruction continue permet de passer brusquement à l’itération de la


boucle suivant sans exécuter les autres instructions de la boucle.

void main() Résultat


{ i=0
int i; i=1
for (i = 0; i < 5; i++) i=2
{ i=4
if (i == 3) valeur de i a la sortie de
continue; la boucle = 5
printf("i = %d\n",i);
}
printf("valeur de i a la sortie de la boucle
= %d\n",i); 53
}
7. Les instructions de Les instructions de branchement
contrôle inconditionnel

L’instruction goto permet le branchement en un emplacement quelconque du


programme.

void main() Résultat


{
début iteration 1
int i ;
bonjour
for ( i=1 ; i<=10 ; i++ )
fin iteration 1
{
début iteration 2
printf ("début iteration %d\n", i) ;
bonjour
printf ("bonjour\n") ;
fin iteration 2
if ( i==3 ) goto sortie ;
début iteration 3
printf ("fin iteration %d\n", i) ;
} bonjour
sortie : printf ("après la boucle") ; après la boucle
}
54
8. Les tableaux Les tableaux uni-dimensionnel

Les tableaux correspondent aux matrices en mathématiques.

Un tableau uni-dimensionnel (à une dimension) est une variable structurée


formée d'un nombre N de variables simples du même type, qui sont appelées
les éléments du tableau. Le nombre des éléments N est alors la taille du
tableau. Pour déclarer un tableau :

Syntaxe:

type nom_du_tableau[N]

Cette déclaration signifie que le compilateur réserve N places en mémoire


pour ranger les éléments du tableau.
Exemple:
int notes[10]; le compilateur réserve des places pour 10 entiers.
float moy[20]; le compilateur réserve des places pour 20 réels. 55
8. Les tableaux Les tableaux uni-dimensionnel

Remarques:
• un élément du tableau est repéré par son indice.
• l'accès au premier élément du tableau se fait par T[0]
• l'accès au dernier élément du tableau se fait par T[N-1]

Exemples:
int notes[10];
float moy[20];
notes[2] = 5;
moy[i] = 6.789;
printf("%d",notes[4]);
scanf("%f",&moy[i]);

Exercice:
Écrire un programme qui permet de saisir et écrire un tableau T à une
dimension.
56
8. Les tableaux Les tableaux uni-dimensionnel

Lire et écrire un tableau


void main()
{
int A[5];
int i;
for (i=0; i<5; i++)
scanf("%d ", &A[i]);
for (i=0; i<5; i++)
printf("%d ", A[i]);
}

57
8. Les tableaux Initialisation et réservation automatique

On peut initialiser les tableaux au moment de leur déclaration, en indiquant la liste


des valeurs respectives entre accolades.

Exemple
int liste[10] = {1,2,4,8,16,32,64,128,256,528};
 int A[5] = {10, 20, 30, 40, 50};
float B[4] = {-1.05, 3.33, 87e-5, -12.3E4};
Remarque:
Si la liste ne contient pas assez de valeurs pour toutes les composantes, les
composantes restantes sont initialisées par zéro.
int A[5] = {10, 20} ↔  int A[5] = {10, 20, 0, 0, 0};

A 10 20 0 0 0
A[0] A[1] A[2] A[3] A[4]
58
8. Les tableaux Les tableaux à deux dimensions

Pour déclarer un tableau de deux dimensions:


Syntaxe:

type nom_du_tableau [dim_ligne] [ dim_colonne]

Exemples:

int A[4][5]; déclaration d’un tableau de 4 lignes et 5 colonnes.

Float R[2][10]; déclaration d’un tableau de 2 lignes et 10 colonnes.

A[2][4] = 5;

R[i][j] = 6.789;

printf("%d" ,&A[i][j]);

scanf("%f", &R[i][j]);
59
8. Les tableaux Les tableaux à deux dimensions

Remarques:
• un élément du tableau de deux dimensions est repéré par ses indices T[i][j].
• l'accès au premier élément du tableau se fait par T[0][0].
• l'accès au dernier élément du tableau se fait par T[L-1][C-1] .
Exemple
Le tableau A[C][L]
A[0][0] A[0][1] A[0][2] ... A[0][C-1]
A[1][0] A[1][1] A[1][2] ... A[1][C-1]
A[2][0] A[2][1] A[2][2] ... A[2][C-1]
... ... ... ... ...
A[L-1][0] A[L-1][1] A[L-1][2] ... A[L-1][C-1]

60
8. Les tableaux Initialisation et réservation automatique

Lors de la déclaration d'un tableau, on peut initialiser les composantes du

tableau, en indiquant la liste des valeurs respectives entre accolades. A

l'intérieur de la liste, les composantes de chaque ligne du tableau sont encore

une fois comprises entre accolades.

Exemples
int A[3][10] = {{ 0,10,20,30,40,50,60,70,80,90},
{10,11,12,13,14,15,16,17,18,19},

{ 1,12,23,34,45,56,67,78,89,90}};

Exercice:
Ecrire un programme qui permet de remplir un tableau de deux dimension T[6]
[10] puis affiche ces éléments. 61
8. Les tableaux Initialisation et réservation automatique

Lors de l'initialisation, les valeurs sont affectées ligne par ligne en passant de
gauche à droite. Nous ne devons pas nécessairement indiquer toutes les
valeurs: Les valeurs manquantes seront initialisées par zéro.

62
8. Les tableaux Les tableaux à plusieurs dimensions

Pour déclarer un tableau de plusieurs dimensions :


Syntaxe:

type nom_du_tableau[dim_1][dim_2][dim_3]……[dim_N]

Exemples:
int A[4][5][10]; déclaration d’un tableau de 3 dimensions.
Float R[2][10][4][20]; déclaration d’un tableau de 4 dimensions.
A[0][0][0] = 5;
R[i][j][k][l] = 6.789;
printf("%d" ,&A[i][j][k]);
scanf("%f", &R[i][j][k][l]);

Exercice:
Ecrire un programme qui permet de remplir un tableau de trois dimensions T[6]
[200][100] puis affiche ces éléments. 63
9. Les chaînes de
Déclaration d’une chaîne de caractères
caractères

En langage C, les chaînes de caractères sont des tableaux de caractères.


Leur manipulation est donc analogue à celle d'un tableau à une dimension:
Syntaxe:

char NomVariable [Longueur];

Ou bien

char *nomVariable;
nom = (char*)malloc(Longueur);

char *nom;
Exemples nom = (char*)malloc(20);
char nom [20];
char *prenom;
char prenom [25]; nom = (char*)malloc(25);
char phrase [30]
char *phrase;
nom = (char*)malloc(30); 64
9. Les chaînes de
Déclaration d’une chaîne de caractères
caractères

Le compilateur réserve (longueur-1) places en mémoire pour la chaîne de


caractères: En effet, il ajoute toujours le caractère NUL ('\0') à la fin de la
chaîne en mémoire.
 

Exemple:
char TXT[10] = "BONJOUR !";

65
9. Les chaînes de
Initialisation d’une chaîne de caractère
caractères

char texte[10] = "bonjour"; Ou bien char texte[10] = { 'b','o','n','j','o','u','r','\0' }

Exercice:
Lesquelles des chaînes suivantes sont initialisées correctement ? Corrigez les
déclarations fausses
1. char a[ ] = "un\ndeux\ntrois\n";
2. char b[12] = "un deux trois";
3. char c[] = 'abcdefg';
4. char d[10] = 'x';
5. char e[5] = "cinq";
6. char f[] = "Cette " "phrase" "est coupée";
7. char g[2] = {'a', '\0'};
8. char h[4] = {'a', 'b', 'c'};
66
9. char i[4] = "'o'";
9. Les chaînes de
Lecture et écriture d’une chaîne de caractères
caractères

Écriture d’une chaîne de caractère

 On peut utiliser la fonction printf et le format %s:

char texte[10] = "bonjour";

printf(" voici le texte: %s", texte);

 On peut utiliser la fonction puts non formatée:

puts( texte); ↔ printf("%s", texte);

67
9. Les chaînes de
Lecture et écriture d’une chaîne de caractères
caractères

 Lecture d’une chaîne de caractère

On peut utiliser la fonction scanf et le format %s.

 char texte[10];

printf("entrer le texte: ");

scanf("%s",texte);

On peut utiliser la fonction gets non formatée:

gets(texte) ↔ scanf("%s", texte);

Une chaîne étant un pointeur, on n'écrit pas le symbole & dans la fonction

scanf.

68
9. Les chaînes de
Lecture et écriture d’une chaîne de caractères
caractères

#include <stdio.h>
main()
{
char nom[20], prenom[20], ville[25] ;
printf ("quelle est votre ville : ") ;
gets (ville) ; // scanf("%s",ville);
printf ("donnez votre nom et votre prénom : ") ;
gets(nom); // scanf ( %s", nom) ;
gets(prenom); // scanf (“%s“, prenom) ;
printf ("bonjour cher %s %s qui habite à %s", prenom, nom, ville) ;
}
Résultat:
quelle est votre ville : casablanca
donnez votre nom et votre prénom : wafae sabbar
69
bonjour cher wafae sabbar qui habites à casablanca
9. Les chaînes de
Lecture et écriture d’une chaîne de caractères
caractères

L'accès à un élément d'une chaîne de caractères peut se faire de la même façon


que l'accès à un élément d'un tableau.
Exemple:
char A[6];
nous avons défini un tableau A avec six éléments, auxquels on peut accéder
par: A[0], A[1], ... , A[5]

70
9. Les chaînes de
Application
caractères

Saisir une chaîne de caractères. Afficher le nombre de e et d'espaces de cette chaîne.

#include <stdio.h>
#include <malloc.h>
void main()
{
char *phrase;
int compt_espace = 0, compt_e = 0,i;
phrase=(char*)malloc(20); /* reserve 20 places */

printf( " entrer une phrase:");


gets(phrase);
 
for(i=0;phrase[i]!='\0';i++)
{
if(phrase[i]=='e') compt_e++;
if(phrase[i]==' ') compt_espace++;
}
printf("nombre de e: %d\n", compt_e);
printf(" nombre d’espace: %d\n", compt_espace);
71
}
9. Les chaînes de
Les fonctions de <string.h>
caractères

strlen(chaine) : fournit la longueur de la chaîne sans compter le '\0' final


strcpy(chaine1, chaine2) : copie <chaine2> vers <chaine1>
strcat(chaine1, chaine2) : ajoute <chaine1> à la fin de <chaine2>
strcmp(chaine1,chaine2) : compare <chaine1> et <chaine2> lexico graphiquement
et fournit un résultat:
négatif si <chaine1> précède <chaine2>
zéro si <chaine1> est égal à <chaine2>
positif si <chaine1> suit <chaine2>
strncpy(chaine1, chaine2, n) : copie au plus <n> caractères de <chaine2> vers
<chaine1>
strncat(chaine1, chaine2, n) : ajoute au plus <n> caractères de <chaine2> à la fin
de <chaine1>

72
9. Les chaînes de
fonctions de manipulation de chaînes.
caractères

Les bibliothèques string.h et stdlib.h , fournies avec les compilateurs, contiennent


de nombreuses fonctions de traitement des chaînes de caractères.
La fonction strlen retourne la longueur d’une chaîne ('\0' non comptabilisé).
Exemple
#include <stdio.h>
#include <string.h>
void main()
{
char ch1[20]="Bonjour";
char ch2[20]="bonjour monsieur";
printf("la longueur de la chaine ch1=%d \n",strlen(ch1));
printf("la longueur de la chaine ch2=%d \n",strlen(ch2));
}
73
9. Les chaînes de
fonctions de manipulation de chaînes.
caractères

strcat: permet de concaténer deux chaîne.


strcat(chaine1, chaine2); recopie la seconde chaîne (chaine2) à la suite de la
première (chaine1)
Exemple
#include <stdio.h>
#include <string.h>
Résultat
main()
avant : bonjour
{
après : bonjour monsieur
char ch1[50] = "bonjour" ;
char ch2[20] = " monsieur" ;
printf ("avant : %s\n", ch1) ;
strcat (ch1, ch2) ;
printf ("après : %s", ch1) ;
} 74
9. Les chaînes de
fonctions de manipulation de chaînes.
caractères

strncat travaille de façon semblable à strcat en offrant en outre un contrôle sur le


nombre de caractères qui seront concaténés à la chaîne d’arrivée .
strncat (chaine1, chaine2, lgmax);

Exemple
#include <stdio.h>
#include <string.h> Résultat
main() avant : bonjour
{ après : bonjour monsi
char ch1[50] = "bonjour" ;
char ch2 [20]= " monsieur" ;
printf ("avant : %s\n", ch1) ;
strncat (ch1, ch2, 6) ;
printf ("après : %s", ch1) ;
75
}
9. Les chaînes de
fonctions de manipulation de chaînes.
caractères

La fonction strrev(chaine) : inverse la chaîne et, renvoie l'adresse de la chaine


inversée.
Exemple
#include <stdio.h>
#include <string.h>
main() Résultat
{ avant : bonjour
char ch1[50] = "bonjour" ; après : roujnob
printf ("avant : %s\n", ch1) ;
strrev(ch1) ;
printf ("après : %s", ch1) ;
}

76
10. Les fonctions Introduction

On peut en C découper un programme en plusieurs fonctions. Une seule de ces


fonctions existe obligatoirement ; c'est la fonction principale appelée main. Cette
fonction principale peut, éventuellement, appeler une ou plusieurs fonctions
secondaires. De même, chaque fonction secondaire peut appeler d'autres
fonctions secondaires ou s'appeler elle-même (dans ce dernier cas, on dit que
la fonction est récursive).

Programme principale main() Fonction 1

Appel fonction 2
Appel fonction 1

Fonction 2

77
10. Les fonctions Déclaration d’une fonction

Syntaxe:

type nom-fonction (type_1 arg_1,……...,type_n arg_n)


{
déclarations de variables locales
liste d'instructions
}

La première ligne de cette définition est l'en-tête de la fonction. Dans cet en-
tête, type désigne le type de la fonction, c'est-à-dire le type de la valeur qu'elle
retourne.
Une fonction qui ne renvoie pas de valeur est une fonction dont le type est
spécifié par le mot-clef void.

78
10. Les fonctions Application

#include<stdio.h> void main ()


{
#include <math.h>
int x, y, max;
int maximum(int a, int b) double z, c, t;
{
printf("entrez les valeurs de x,yet z");
if (a>b)
scanf("%d %d %lf", &x,&y,&z);
return b;
else
max=maximum(x,y);
return a;
c=carre(z);
}
printf("max(x,y)=%d \t carre(z)=%lf \t "max,
double carre(double X)
c );
{ }
return X*X;
}

79
10. Les fonctions Fonction de type void

Une fonction ne renvoyant rien au programme est une fonction de type void.

Exemple:

void bonjour() /* declaration de la fonction */


{
printf("bonjour\n");
}

void main() /* programme principal */


{
bonjour(); /* appel de la fonction */
}

80
9. Les fonctions Appel d'une fonction dans une fonction

void bonjour() /* declaration de la fonction */


{
printf("bonjour\n");
}
void coucou() /* declaration de la fonction */
{
bonjour(); /* appel d'une fonction dans une fonction */
printf("coucou\n");
}
void main() /* programme principal */
{
coucou(); /* appel de la fonction */
}

81

Vous aimerez peut-être aussi