courcLangageC LicenceQL PDF
courcLangageC LicenceQL PDF
courcLangageC LicenceQL PDF
Licence Professionnelle
Qualit Logiciel
1. Introduction
5. Les tableaux
2011/2012 Pr. Ben Mamoun 2
Plan du cours (2)
6. Les pointeurs
7. Les fonctions
9. Les structures
Le code ASCII (American Standard Code for Information Interchange) donne les
correspondances entre les caractres alphanumriques et leurs
reprsentation binaire, Ex. A= 01000001, ?=00111111
Exemples de langages:
Fortran, Cobol, Pascal, C,
C++, Java,
Ce fichier objet nest pas excutable tel quel car il lui manque les
instructions excutables des fonctions standards appeles dans le fichier
source (printf, scanf, ) et ventuellement dautres fichiers objets
un nom (Identificateur
Identificateur)
un type (entier, rel, )
(Les types de variables en C seront discuts par la suite)
doit tre diffrent des mots rservs du langage : 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
En langage C, il ny a que deux types de base les entiers et les rels avec
diffrentes variantes pour chaque type
Remarques:
Un type de base est un type pour lequel une variable peut prendre une seule
valeur un instant donn contrairement aux types agrgs
Le type boolen nexiste pas. Un boolen est reprsent par un entier (un
entier non nul quivaut vrai et la valeur zero quivaut faux)
Remarque : Une variable du type char peut subir les mmes oprations que les
variables du type short, int ou long
Syntaxe de dclaration en C
<Type> <NomVar1>,<NomVar2>,...,<NomVarN>;
Exemple:
int i, j,k;
float x, y ;
double z=1.5; // dclaration et initialisation
short compteur;
char c=`A`;
le mot cl const :
const type nom = expression ;
Dans cette instruction la constante est type
exemple : const float Pi =3.141592
(Rq: Lintrt des constantes est de donner un nom parlant une valeur, par exemple
NB_LIGNES, aussi a facilite la modification du code)
Remarques :
Les constantes relles sont par dfaut de type double
Les oprandes peuvent tre des entiers ou des rels sauf pour % qui
agit uniquement sur des entiers
n * p + x
* multiplication par p
+ addition
&& retourne vrai si les deux oprandes sont vrais (valent 1) et 0 sinon
Exemple : 5 && 11 1
!13.7 0
Exemples
if ((d != 0) && (n / d == 2)) : pas de division si d vaut 0
if ((n >=0) && (sqrt(n) < p)) : racine non calcule si n < 0
Lintrt est dacclrer lvaluation et dviter les traitements
inappropris
k = ++i (pr
pr--incrmentation
incrmentation) incrmente d'abord et aprs affecte la valeur incrmente
k (k = ++i ; i = i+1 ; k = i ; )
Exemple : i = 5 ; n = ++i - 5 ;
i vaut 6 et n vaut 1
i = 5 ; n = i++ - 5 ;
i vaut 6 et n vaut 0
Les oprandes sont de type entier. Les oprations s'effectuent bit bit
suivant la logique binaire
Dans le cas d'un dcalage gauche les bits les plus gauche sont
perdus. Les positions binaires rendues vacantes sont remplies par
des 0
Ex : char x=14; (14=00001110) 14<<2 = 00111000 = 56
char y=-7; (-7=11111001) -7<<2= 11100100= -28
Oprateurs utilisables :
+= -= *= /= %=
<<= >>= &= ^= |=
Exemples :
a=a+b scrit : a+=b
n=n%2 scrit : n%=2
x=x*i scrit : x*=i
p=p>>3 scrit : p>>=3
2011/2012 Pr. Ben Mamoun 42
Oprateur de forage de type (cast)
Il est possible deffectuer des conversions explicites ou de
forcer le type dune expression
Syntaxe : (<type>) <expression>
Exemple : int n, p ;
(double) (n / p); convertit lentier n / p en double
Exemples
i++ , i + j; // on value i++ ensuite i+j (on utilise la valeur de i incrmente)
i++ , j = i + k , a + b; // la valeur de lexpression est celle de a+b
for (i=1 , k=0 ; ; ) { }
Exemples
int n;
printf ("%d \n",sizeof(int)); // affiche 4
printf ("%d \n",sizeof(n)); // affiche 4
Les oprateurs dans une mme ligne ont le mme niveau de priorit.
Dans ce cas on applique les rgles dassociativit selon le sens de la
flche. Par exemple: 13%3*4 vaut 4 et non 1
Entres-sorties
Les instructions de lecture et dcriture
Il sagit des instructions permettant la machine de dialoguer avec lutilisateur
%c char caractre
\n : nouvelle ligne
\t : tabulation horizontale
\a : signal sonore
\b : retour arrire
\r : retour chariot
\v : tabulation verticale
\f : saut de page
\\ : back slash ( \ )
\ : apostrophe
\" : guillemet
Exemples : printf("%4d" , n );
n = 20 ~~20 (~ : espace)
n=56123 56123
printf("%4X", 123); ~~7B
Remarque : pour lire une donne du type long, il faut utiliser les spcificateurs
%ld, %li, %lu, %lo, %lx.
Remarque : pour lire une donne du type double, il faut utiliser %le ou %lf et pour
lire une donne du type long double, il faut utiliser %Le ou %Lf
2011/2012 Pr. Ben Mamoun 60
Chapitre 4
Structures de contrle
Structures de contrle
Les structures de contrle dfinissent la faon avec laquelle les
instructions sont effectues. Elles conditionnent l'excution
d'instructions la valeur d'une expression
On distingue :
Les structures alternatives (tests) : permettent deffectuer des choix
cd de se comporter diffremment suivant les circonstances (valeur
d'une expression). En C, on dispose des instructions : ifelse et
switch.
expression est value, si elle est vraie (valeur diffrente de 0), alors
bloc-instruction1 est excut. Si elle est fausse (valeur 0) alors bloc-
instruction2 est excut
int a;
if ((a%2)==0)
printf(" %d est paire" ,a);
else
printf(" a est impaire ",a);
if (N>0)
if (A>B)
MAX=A;
else MAX=B; (interprtation 2 : si N=0 MAX ne change pas)
if(a<=0)
{if(a==0)
printf("a est nul ");
else
printf(" a est strictement ngatif ");}
else
printf(" a est strictement positif " );
la syntaxe est :
switch (expression) {
case expression_constante1 : instructions_1; break;
case expression_constante2 : instructions_2; break;
case expression_constante n : instructions_n; break;
default : instructions;
}
expression_constantei doit tre une expression constante entire
Instructions i peut tre une instruction simple ou compose
break et default sont optionnels et peuvent ne pas figurer
On excute aussi les instructions des cas suivants jusqu la fin du bloc
ou jusqu une instruction break (qui fait sortir de la structure switch)
} } while (condition);
par contre, dans la boucle do-while ce test est effectu aprs le corps de
boucle, lequel sera alors excut au moins une fois
main( )
{ int i, som;
i =0; som= 0;
while (som <=100)
{ i++;
som+=i;
}
printf (" La valeur cherche est N= %d\n ", i);
}
main()
{ int N;
do {
printf (" Entrez une note comprise entre 0 et 20 \n");
scanf("%d",&N);
} while (N < 0 || N > 20);
}
{int i;
for(i=1;i<5;i++)
{printf("dbut itration %d\n " ,i);
if(i<3) continue;
printf(" fin itration %d\n " ,i);
}
} rsultat: dbut itration 1
dbut itration 2
dbut itration 3
fin itration 3
dbut itration 4
fin itration 4
Les tableaux
Tableaux
Un tableau est une variable structure compose dun nombre de
variables simples de mme type dsignes par un seul identificateur
ainsi pour :
short A[100]; // on rserve 200 octets (100* 2octets)
char mot[10]; // on rserve 10 octets (10* 1octet)
for(i=0;i<n
for(i=0;i<n;i++)
{ printf ("Entrez l'lment %d \n ",i + 1);
scanf(" %d" , &T[i]);
}
for(i=0;i<n
for(i=0;i<n;i++)
printf (" %d \t",T[i]);
main ( )
{ float notes[30];
int nbre,i;
for(i=0;i<30;i++)
for(i=0;i<30
{ printf ("Entrez notes[%d] \n ",i);
scanf(" %f" , ¬es[i]);
}
nbre=0;
for (i=0; i<30; i++)
if (notes[i]>10) nbre+=1;
printf (" le nombre de notes > 10 est gal : %d", nbre);
}
2011/2012 Pr. Ben Mamoun 84
Tableaux plusieurs dimensions
On peut dfinir un tableau n dimensions de la faon suivante:
Type Nom_du_Tableau[D1][D2][Dn];
[D1][D2][Dn]; o Di est le nombre
dlments dans la dimension i
float notes[20][5][2];
Exemple :
float A[3][4] = {{-1.5, 2.1, 3.4, 0}, {8e-3, 7e-5,1, 2.7 }, {3.1, 0, 2.5E4, -1.3E2}};
for(i=0;i<n
for(i=0;i<n;i++)
for(j=0;j<m;j++)
for(j=0;j<m
{ printf ("Entrez la valeur de A[%d][%d] \n ",i,j);
scanf(" %d" , &A[i][j]);
}
for(i=0;i<n
for(i=0;i<n;i++)
{ for(j=0;j<m
for(j=0;j<m;j++)
printf (" %d \t",A[i][j]);
printf("\n");
}
Les pointeurs
Pointeurs : dfinition
Un pointeur est une variable spciale qui peut
contenir ladresse dune autre variable. .
.
.
Remarques :
A 10 3F02
Le nom dune variable permet d'accder directement
sa valeur (adressage direct). mmoire
Un pointeur qui contient l'adresse de la variable, permet
d'accder indirectement sa valeur (adressage
indirect).
Exemple1 :
Conseil : Toute utilisation dun pointeur doit tre prcde par une
initialisation.
On peut initialiser un pointeur en lui affectant :
p1-p2 : Le rsultat est un entier dont la valeur est gale (diffrence des
adresses)/sizeof(T).
Remarque:
on peut galement utiliser les oprateurs ++ et -- avec les pointeurs
la somme de deux pointeurs nest pas autorise
pt=T;
for(i=0;i<n;i++)
for(i=0;i<n for(pt=T;pt<T+n
for(pt=T;pt<T+n;pt++)
{ printf ("Entrez T[%d] \n ",i ); { printf ("Entrez T[%d] \n ",pt-T );
scanf(" %f" , pt+i); scanf(" %f" , pt);
} }
for(i=0;i<n
for(i=0;i<n;i++) for(pt=T;pt<T+n
for(pt=T;pt<T+n;pt++)
printf (" %f \t",*(pt+i)); printf (" %f \t",*pt);
} }
2011/2012 Pr. Ben Mamoun 104
Pointeurs et tableaux deux dimensions
Le nom d'un tableau A deux dimensions est un pointeur constant sur le
premier lment du tableau cd A[0][0].
for(i=0;i<N
for(i=0;i<N;i++)
{ for(j=0;j<M
for(j=0;j<M;j++)
printf (" %d \t",*(pt+i*M+j));
printf ("\n");
}
}
2011/2012 Pr. Ben Mamoun 106
Pointeurs et tableaux : remarques
En C, on peut dfinir :
Un tableau de pointeurs :
Ex : int *T[10]; //dclaration dun tableau de 10 pointeurs dentiers
Un pointeur de tableaux :
Ex : int (*pt)[20]; //dclaration dun pointeur sur des tableaux de 20
lments
Un pointeur de pointeurs :
Ex : int **pt; //dclaration dun pointeur pt qui pointe sur des pointeurs
dentiers
Si on n'a plus besoin d'un bloc de mmoire rserv par malloc, alors
on peut le librer l'aide de la fonction free , dont la synatxe est :
free(pointeur);
Les fonctions
La programmation modulaire
Certains problmes conduisent des programmes longs, difficiles crire et
comprendre. On les dcoupe en des parties appeles sous
sous--programmes ou
modules
Les modules sont des groupes d'instructions qui fournissent une solution des
parties bien dfinies d'un problme plus complexe. Ils ont plusieurs intrts :
Exemple dappels:
main( )
{ double z;
int A[5] = {1, 2, 3, 4, 5};
z=Som(2.5, 7.3);
AfficheTab(A,5);
}
Il faut utiliser autant que possible des variables locales. Ceci permet
d'conomiser la mmoire et d'assurer l'indpendance de la fonction
Toute fonction rcursive doit possder un cas limite (cas trivial) qui
arrte la rcursivit
La bibliothque <stdio.h>
La bibliothque <string.h>
La bibliothque <stdlib.h>