Introduction au langage C et ses bases
Introduction au langage C et ses bases
1
Plan
1-Introduction
2-Notions de base
2
1-Introduction
3
1-Introduction
Langage informatique
4
1-Introduction
C est un langage :
Universel : permet aussi bien la programmation systme que
la programmation de divers applications (scientifique, de
gestion,)
De haut niveau : C est un langage structur (offre plusieurs
structures de contrle) et typ (dclarations obligatoires)
7
2-Notions de base
#include <stdio.h>
void main( )
{
printf("Bonjour tout le monde
\n");
}
8
2-Notions de base
Traitement des
donnes
Affichage
des
rsultats
Remarque:
On parle parfois pour un programme donn
d'application ou de logiciel.
9
2-Notions de base
Importation des
bibliothques
Selon ce que l'on souhaite faire dans notre
programme, on peut avoir besoin de diffrentes
fonctions.
Celles-ci sont disponibles dans des bibliothques.
Par exemple :
#include<stdio . h> propose des fonctions de saisie
et d'affichage
#include<conio . h> propose d'autre fonctions
d'entres-sorties
11
2-Notions de base
12
2-Notions de base
14
2-Notions de base
2.3. Structure d'un programme C
Commentaire
/***********************************/
/* ce programme vous affiche Bonjour */
/***********************************/
/*fichier dentte pour utiliser la fonction printf*/
#include <stdio.h>
int main() /* la fonction principale main */
{
printf(Bonjour); // afficher Bonjour
Return 0;
}
15
3. Types de base, Oprateurs et expression
16
3. Types de base, oprateurs et expression
3.1. Constantes
Dfinition d'une
constante
Elle ne change jamais de valeur pendant l'excution
d'un programme. Elle est gnralement stocke dans la
mmoire morte d'une machine.
17
3. Types de base, oprateurs et expression
3.1. Constantes
Dfinition d'une
constante
Syntaxe:
#define <identificateur>
<valeur>
Exemp
le
18
3. Types de base, oprateurs et expression
3.2. Variables
19
3. Types de base, oprateurs et expression
3.2. Variables
Syntaxe:
<type> <identificateur 1>,..,<identificateur n> ;
Exemp
le
20
3. Types de base, oprateurs et expression
3.2. Variables
Le type
Dtermine la taille de la variable et les oprations pouvant tre
effectues
L'identificate
ur
C'est le nom affect la variable, le nombre de caractres
peut tre limit, cela dpend du compilateur utilis.
Lidentificateur dune variable doit toujours tre crit de la
mme faon : Mon_Identificateur mon_identificateur
MON_IDENTIFICATEUR.
Les seuls caractres autoriss pour les noms
(identificateur) de variables sont :
lettres NON
accentues ; au dbut du
chiffres (sauf
nom) ;
caractres soulign _ .
21
3. Types de base, oprateurs et expression
3.2. Variables
En TURBO
C
22
3. Types de base, oprateurs et expression
3.2. Variables
23
3. Types de base, oprateurs et expression
3.2. Variables
Exemple
float rayon; /*Dclaration de rel*/
int i,j; /*Dclaration dentier*/
char t; /*Dclaration de caractre*/
Double pi; /*Dclaration de rel
double*/
Void main()
{
i=2;
j=3;
t=A;
pi=3.14159;
}
24
3. Types de base, oprateurs et expression
3.2. Variables
Initialisation des
variables
Deux solutions sont possibles:
25
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs rgissent toutes les oprations ou transformations
sur les valeurs de variables.
L'oprateur
d'affectation
C'est l'oprateur le plus utilis. Il permet de modifier la valeur d'une
variable.
Laffectation est toujours effectue de la droite vers la gauche
Le programme commence par valuer la valeur de l'expression puis
l'affecte avec le signe = la variable par son identificateur.
Syntaxe:
<identificateur> = <expression> ;
Exemple
int main ( )
{
int V ;
V = 5;
return 0 ;
} 26
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs
arithmtiques.
27
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs
relationnels
Sont utiliss pour les structures conditionnelles, de choix et
itratives,.
Ils permettent de comparer une variable par rapport une autre
variable ou une valeur ou une expression.
Le rsultat ne peut tre que VRAI ou FAUX, on parle de valeur
boolenne.
FAUX correspond 0.
VRAI correspond toute valeur diffrente
de 0.
28
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
Les oprateurs logiques.
29
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
L'oprateur de conversion
de type.
Il existe deux conversions
possibles:
La conversion implicite:
Elle est effectue pour valuer le mme type de donnes lors
d'valuation d'expressions. Les conversions systmatiques
de char en int, en float, en double, la conversion se fait
toujours du type le plus petit vers le plus long (exemple: de
char vers double).
La conversion explicite:
On peut changer le type d'une variable vers un autre type en
utilisant l'oprateur cast (type) en le mettant devant
l'identificateur de variable convertir.
30
3. Types de base, oprateurs et expression
3.3. Oprateurs standards
La priorit des
oprateurs.
31
4. Lire & Ecrire des donnes
32
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()
Syntaxe:
printf (<"Format">,identificateur1,
....,identificateur n);
Le format
indique comment vont tre affich les valeurs des variables. Il est
compos de texte et de codes d'affichage suivant le type de variable.
Exemple
Code identificateu
daffichage r
Important
Au dbut d'un programme utilisant les fonctions d'affichage et de saisie il est
ncessaire d'crire #include <stdio.h>, car toutes les fonctions sont dclares
dans ce fichier d'en-tte.
34
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()
Exemple:
#include <stdio.h>
void main( )
{
int a,b,c;
a=1;
b=2;
c=3;
printf(" La valeur de a est %d , celle de b est %d , et celle de c
est %d" , a , b , c );
}
Le programme affiche:
Exemple
#include <stdio.h>
void main()
{
printf("Salut je suis:\n\t tudiant la facult des sciences de
Ttouan \n\t\t A bientt");
}
36
4. Lire & Ecrire des donnes
4.1. Ecriture formate de donnes : printf()
Le programme affiche :
Salut je suis
tudiant la facult des sciences de Ttouan
A bientt
37
4. Lire & Ecrire des donnes
4.2. Lecture formate de donnes : scanf()
Syntaxe:
scanf(<"Format">,&identificateur1, ....,
&identificateurn);
38
4. Lire & Ecrire des donnes
4.2. Lecture formate de donnes : scanf()
Remarq
ue
Le symbole & est obligatoire devant les identificateurs car scanf
attend des adresses et non des valeurs, sauf devant un
identificateur de chane de caractres.
39
4. Lire & Ecrire des donnes
4.2. Lecture formate de donnes : scanf()
Exemple:
Saisie de plusieurs
variables.
#include <stdio.h>
Float a, b,c, det; /*dclaration des variables relles*/
void main( )
{
printf ("Donne les valeurs de a,b et c ?"); /* Affichage de "Donne
les valeurs de a,b et c ?" */
scanf("%f %f %f",&a,&b,&c); /* Saisie de a,b,c */
det=(b*b)-(4*a*c); /* Calcul du dterminant */
printf("\n\n"); /* Deux sauts de ligne */
printf("Le dterminant = %f",det); /* Affichage du dterminant */
}
40
4. Lire & Ecrire des donnes
4.3. Ecriture dun caractre : putchar()
Syntaxe:
putchar(identificateur1);
41
4. Lire & Ecrire des donnes
4.3. Ecriture dun caractre : putchar()
#include <stdio.h>
char car1,car2,car3;
void main( )
{
car1=S';
car2= M';
car3= A';
putchar(car1); /* Affichage du caractre 1 -> donne un S */
putchar(car2); /* Affichage du caractre 2 -> donne un M */
putchar(I'); /* Affichage du caractre P */
putchar('\n'); /* Retour de ligne */
putchar(car1); /* Affichage du caractre 1 -> donne un S */
putchar(car2); /* Affichage du caractre 2 -> donne un M */
putchar(car3'); /* Affichage du caractre P */
}
Le programme SMI
affiche: SMA 42
4. Lire & Ecrire des donnes
4.4. Lecture dun caractre : getchar()
La fonction getchar permet de saisir un caractre au clavier.
Syntaxe:
identificateur1 = getchar( void );
#include <stdio.h>
char car1;
void main( )
{
44
5. Traitements conditionnels
Exemple
ou
45
5. Traitements conditionnels
46
5. Traitements conditionnels
Exemple
ou
47
5. Traitements conditionnels
48
5. Traitements conditionnels
5.3 La structure de choix
Exemple
49
5. Traitements conditionnels
5.3 La structure de choix
ou
50
5. Traitements conditionnels
N'oubliez surtout pas les break ! Si par exemple, nous voulons afficher
le nom d'un mois en fonction de son numro, on ecrit:
#include<stdio.h>
int numeroMois ;
void main()
{ prinf ("entrez le numero de mois");
scanf("%d",&numeroMois) ;
switch ( numeroMois )
{
case 1 : printf ( "janvier ") ; break ;
case 2 : printf ("fevrier") ; break ;
case 3 : printf ("mars") ; break ;
case 4 : printf ("avril") ; break ;
case 5 : printf ("mai") ; break ;
case 6 : printf (" juin ") ; break ;
case 7 : printf ("juillet") ; break ;
case 8 : printf ("aout") ; break ;
case 9 : printf ("septembre") ; break ;
case 10 : printf ("octobre") ; break ;
case 11 : printf ("novembre") ; break ;
case 12 : printf ("decembre") ; break ;
default : printf ("Je connais pas ce mois . . . ") ;
}
}
51
6. Les structures itratives ou boucles
6.1. Dfinitions et terminologie
Une structure itrative ou boucle permet d'excuter plusieurs fois de
suite une mme squence d'instructions. Cette ensemble d'instructions
s'appelle le corps de la boucle. Chaque excution du corps d'une boucle
s'appelle une itration.
While
do ... while
for
52
6. Les structures itratives ou boucles
6.2. La structure <tant que>
while
Dans cette structure la condition est teste au
dbut .
53
6. Les structures itratives ou boucles
Exemple
#include<stdio.h>
int i ;
void main()
{
/* boucle while<tant que faire> */
i=0;
while ( i<10 )
{
printf ("i = %d\n ",i) ;
i++ ;
}
}
54
6. Les structures itratives ou boucles
6.3. La structure <FAIRE ... TANT QUE > do ...
while.
Dans cette structure la condition est teste la
fin.
55
6. Les structures itratives ou boucles
Exemple
#include <stdio.h>
int i;
void main()
{
i=0;
/* Boucle while <faire tant que> */
do
{
printf("i= %d\n",i);
i++;
}
while(i<10);
}
56
6. Les structures itratives ou boucles
6.4. La structure <POUR ... FAIRE ... JUSQUA ...> for
Dans cette structure la condition est teste au dbut. Elle est trs
intressante car elle est compose de trois parties:
57
6. Les structures itratives ou boucles
6.4. La structure <POUR ... FAIRE ... JUSQUA ...> for
58
6. Les structures itratives ou boucles
6.4. La structure <POUR ... FAIRE ... JUSQUA ...> for
Exemple
#include <stdio.h>
int i;
void main()
{
for(i=0;i<10;i++)
printf("i= %d\n",i);
}
59
Chapitre 7: Les tableaux
60
7. Les tableaux
7.1. Introduction
Les variables, telles que nous les avons vues, ne permettent de stocker
quune seule donnes la fois.
Tableau
61
7. Les tableaux
7.2. Dfinition
On appelle tableau une variable compose de donnes de mme type,
stocke de manire contigue en mmoire (les uns la suite des autres).
Un tableau est une suite des lemente de mme taille. Par consquent,
la taille (en octet) du tableau est:
taille (en octet) du type de donne*le nombre dlment
tableau
Exemples:
Char caractere[12]; //Taille en octet: 1 octet*12=12
octets
int entier[10]; //Taille en octet: 2 octets*10=20
octets
Float reel_SP[8]; //Taille en octet: 4 octets*8=32
octets 63
7. Les tableaux
Tableaux une dimension
Initialisation la dclaration
Il est possible dinitialiser le tableau la dfinition:
<Type> Tableau[Nombre_Elements]={C1,C2,,Cn};
ou C1,C2,,Cn sont des constantes dont le nombre ne doit pas dpasser
le Nombre_Elements.
Ou encore
65
7. Les tableaux
Tableaux une dimension (Vecteurs)
Accs aux composantes dun tableau
67
7. Les tableaux
Tableaux une dimension (Vecteurs)
Remarques
68
7. Les tableaux
Tableaux une dimension (Vecteurs)
69
7. Les tableaux
Tableaux une dimension (Vecteurs)
t Exemples
70
7. Les tableaux
Tableaux une dimension (Vecteurs)
t Dclaration et reprsentation mmoire dun tableau
En C, la dclaration dun tableau T induit une rservation automatique
dune zone mmoire contigue( les cases mmoires sont successives)
Reprsentation mmoire:
71
7. Les tableaux
Tableaux plusieurs dimensions
Dclaration
De manire similaire, on peut dclarer un tableau plusieurs
dimensions;
<Type Simple> Nom_du_Tableau [Nbre_El_1]
[Nbre_E_N];
Chaque lment entre crochets dsigne le nombre dlments dans chaque
dimension;
Le nombre de dimension nest pas limit.
72
7. Les tableaux
int T[3][4];
73
7. Les tableaux
Tableaux deux dimensions (matrices)
Initialisation la dclaration et accs aux lments:
Les valeurs sont affectes ligne par ligne lors de linitialisation la dclaration
Accs aux composantes se fait par: Nom_tableau[ligne][colonne].
Exemples
float A[3][2] = { {-1.05 , 61.10} , {86e-5 , 87} , {-12.5} };
-1.05 61.10 -1 10 13 16
A 86e-5 87 +8 -77 0 0
B
-12.5 0 0 0 0 0
11 -14 30 0
74
7. Les tableaux
Tableaux deux dimensions (matrices)
75
7. Les tableaux
Exemple: Soit T un tableau dfini par: char T[3]
[4]
Rpartition des lments
de T en mmoire
T[0][0]
T[0][1]
T[0][2]
T[0][3]
T[1][0]
T[1][1]
T[1][2]
T[1][3]
T[2][0]
T[2][1]
T[2][2]
T[2][3] 76
7. Les tableaux
Tableaux deux dimensions (Vecteurs)
Exemples
77
Chapitre 8 : CHAINES DE CARACTERES
78
8. CHAINES DE CARACTERES
79
8. CHAINES DE CARACTERES
Mmorisatio
n
Le nom d'une chane est le reprsentant de l'adresse du
premier caractre de la chane. Pour mmoriser une
variable qui doit tre capable de contenir un texte de N
caractres, nous avons besoin de N+1 octets en mmoire
B O N J O U R ! \0
TXT
80
8. CHAINES DE CARACTERES
Exemple
char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);
81
8. CHAINES DE CARACTERES
Exemple
char LIEU[25];
printf("Entrez lieu de naissance : \n");
gets(LIEU);
82
8. CHAINES DE CARACTERES
Exemple
char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);
printf ("%s %d %d %d", LIEU, JOUR, MOIS, ANNEE);
83
8. CHAINES DE CARACTERES
Exemple
char TEXTE[] = "Voici une premire ligne.";
puts(TEXTE);
puts("Voici une deuxime ligne.");
84
8. CHAINES DE CARACTERES
Exemple
"ABC" < "BCA" car 'A'<'B'
"ABC" < "B" car 'A'<'B'
"Abc" < "abc" car 'A'<'a'
"ab" < "abcdZ" car " " < "cd
85
8. CHAINES DE CARACTERES
strcmp retourne:
1. un nombre positif si chaine 2 prcde chaine 1 dans
lordre alphabtique
2. Un nombre ngatif si chaine 1 prcde chaine 2 dans
lordre alphabtique
3. Zro si chaine 1 est identique chaine 2
86
8. CHAINES DE CARACTERES
87
8. CHAINES DE CARACTERES
Exercice 1
Exercice 2
88
8. CHAINES DE CARACTERES
Exercice 3
89
Chapitre 9 : POINTEURS
90
9. Les pointeurs
Exemple:
int i =35;
int * p = &i;
92
9. Les pointeurs
93
9. Les pointeurs
int a;
int *pa,*pi;
pa = &a; //pa prend comme valeur ladresse de a, donc pa pointe sur a
pi = pa; //pi et pa pointe sur la mme adresse ( &a)
94
9. Les pointeurs
Exemple1
int i =8;
int *pi;
pi = &i;
printf(" le contenu du pointeur est %d: \n",*p);
*pi = 19;
printf(" le nouveau contenu du pointeur est %d: \n",*p);
95
9. Les pointeurs
Exemple1
int i = 35, j;
int *p, *q;
p = &i; //*p = 35
j = *p; //j = 35
*p = 10; // *p=i=10
i= 20; // i=*p=20
(*p)++; /* est quivalent i++, donc i=*p= 21 */
q = p; // p et q pointent maintenant ensemble vers la mme adresse
i=50 ; // i=*p=*q= 50
96
9. Les pointeurs
Tableaux et pointeurs
97
9. Les pointeurs
Tableaux et pointeurs
Exemple:
int Tab[5] = {20, 2,-10, 3, 6};
*Tab Tab[0] = 20
*(Tab + 4) Tab[4]= 6
Tab +1 &Tab[1]
98
9. Les pointeurs
Tableaux et pointeurs
Exemple:
99
9. Les pointeurs
Tableaux et pointeurs
Remarque:
Le nom dun tableau est une pointeur constant sur son premier lment donc
lexpression Tab ++ (ou bien Tab = Tab +1) nest pas autoris
int tab[10];
int *P;
l'instruction: P = tab; est quivalente P = &tab[0];
P+i : pointe sur la ime composante du tableau elle est quivalente &tab[i],
avec i varie de 0 9 dans lexemple.
*(P + i) : est le contenu du ime lment du tableau tab c'est--dire tab[i].
100
9. Les pointeurs
Tableaux et pointeurs
Exemple2:
101
9. Les pointeurs
Tableaux et pointeurs
Exemple2:
102
9. Les pointeurs
Pointeurs et chanes de caractres
p prend comme valeur ladresse du dbut de la chane "Hello world" non pas la
chane.
103
9. Les pointeurs
Pointeurs et chanes de caractres
104
9. Les pointeurs
Pointeurs et chanes de caractres
105
9. Les pointeurs
Tableau de pointeurs
Exemple:
double *A[4]; /* un tableau de 4 pointeurs sur des rels du type double dont les
adresses et les valeurs ne sont pas encore dfinies*/
106
9. Les pointeurs
Tableau de pointeurs
107
9. Les pointeurs
Tableau de pointeurs
Exemple
109
9. Les pointeurs
Allocation dynamique de la mmoire
Tableaux deux dimensions (matrices)
111
9. Les pointeurs
Rallocation dynamique de la mmoire
112
9. Les pointeurs
Rallocation dynamique de la mmoire
Exemple:
int N, *Tab;
printf("donner N: \n");
scanf("%d",&N);
Tab = (int *) malloc(N*sizeof(int));
if(Tab !=Null) // faire des traitements
Tab = (int *) realloc(Tab, 20*sizeof(int));
if(tab != NULL) // Utilisation de l'espace mmoire r-allou
else // Echec de la r-allocation mmoire
113
9. Les pointeurs
Libration de la mmoire alloue
114
9. Les pointeurs
Libration de la mmoire alloue
Exemple:
main( )
{
int nombre_elements;
scanf(%d,&nombre_elements);
int *tab = (int *)malloc(nombre_elements*sizeof(int));
if(tab != NULL) {
int i;
for(i=0 ; i<nombre_elements ; i ++)
scanf(%d, (tab+i));
for(i=0; i<nombre_elements ; i++)
printf("%d\n", *(tab+i));
free(tab);
}
else printf("Echec de l'allocation mmoire\n");
}
115
9. Les pointeurs
Intrts des pointeurs
116
9. Les pointeurs
Intrts des pointeurs
117
8. Les fonctions et procdures
La programmation modulaire
118
10. Les fonctions et procdures
Dfinition
Une fonction peut appeler une autre fonction. Le nom donn une
fonction doit tre reprsentatif de la fonction ralise (exemple :
perimetre_cercle pour une procdure calculant le primtre d'un cercle).
119
8. Les fonctions et procdures
Dfinition
120
8. Les fonctions et procdures
Les procdures
Void nomprocedure ()
{
/*
Instructions
*/
}
# include <stdio.h>
int main()
{
printf("Bonjour\n");
return 0;
}
122
8. Les fonctions et procdures
Les procdures
Exemples
Et dans le deuxime, le printf est plac dans la procdure afficheBonjour
et cette procdure est appele depuis le main.
# include <stdio.h>
Void afficheBonjour ()
{
printf("Bonjour\n");
}
int main()
{
afficheBonjour ();
return 0;
}
123
8. Les fonctions et procdures
Les procdures
Variables locales
Une procdure est un bloc d'instructions et est sujette aux mmes rgles
que main. Il estdonc possible de dclarer des variables :
void nomprocedure ( )
{
/*
dclaration de variables
*/
/*
instructions
*/
}
124
8. Les fonctions et procdures
Les procdures
Variables locales
125
8. Les fonctions et procdures
Les procdures
Variables locales
Exemple, ce code est illgal :
# include <stdio.h>
void maprocedure ( )
{
Char a=b;
}
int main()
{
Char b = k;
printf("%c,
%c\n",a,b);
return 0;
}
126
8. Les fonctions et procdures
Les procdures
Variables locales
La variable b est dclare dans la procdure main, et n'est donc visible que dans
cette mme procdure. Son utilisation dans maProcedure est donc impossible.
De mme, la variable a est dclare dans maProcedure, elle n'est pas visible
dans le main.
# include <stdio.h>
void unAdix ( )
{
int i;
for (i=0;i<=10;i++)
printf(" %d \n ",i);
}
int main()
{
unAdix();
return 0;
} 127