01 Prog C Rappels
01 Prog C Rappels
PROGRAMMATION
EN LANGAGE C
Inclusion de fichiers
#include <nom-de-fichier> /* répertoire standard */
#include "nom-de-fichier" /* répertoire courant */
}
1 1er programme
Rappels
Format des paramètres passés en lecture et écriture.
Initialisations
Les variables doivent être déclarées avant leur utilisation dans un début de bloc (juste après{),
Codage en
Type Signification Exemples de valeur Peut être
mémoire
'a' 'A' 'z' 'Z' '\n' 'a' 'A'
Caractère 1 octet signed,
char 'z' 'Z' '\n'
unique unsigned
Varie de –128 à 127
Short, long,
0 1 -1 4589 32000
int Nombre entier 2 ou 4 octets signed,
-231 à 231 +1
unsigned
Nombre réel 0.0 1.0 3.14 5.32
float 4 octets
simple -1.23
Nombre réel 0.0 1.0E–10 1.0 -
double 8 octets long
double précision 1.34567896
1 Les opérateurs en langage C
Rappels Les opérateurs arithmétiques
+ addition
- soustraction
* multiplication
/ division
% modulo (reste de la division entière )
Les opérateurs de comparaison
Les opérateurs logiques
< plus petit
<= plus petit ou égal && et
> plus grand || ou (non exclusif)
>= plus grand ou égal ! non
== égal
!= différent
1 Incrément et décrément
Rappels
int main(void)
{ équivalent à:
int i, j = 5; 1. j++;
2. i = j;
i=6, j=6
i = ++j;
printf("i=%d, j=%d\n", i, j);
j = 5; équivalent à:
i = j++; 1. i = j; i=5, j=6
printf("i=%d, j=%d\n", i, j); 2. j++;
return 0;
}
1 Les structures de contrôle en C
Rappels
Alternative: if-else
Choix Multiple: switch-case
Itérations: for, while, do-while
Rupture de Contrôle: break, continue, return … goto
1 Les structures de contrôle en C
Rappels
Les decisions : if - else
int i = 100;
if(i > 0)
if(i > 1000)
printf("i > 1000\n");
else
printf("i inférieur à 1000\n");
i inférieur à 1000
1 Les structures de contrôle en C
Rappels Les boucles :
Les itérations – for
int i,j;
Syntaxe en C:
while (expression)
{
............; /* bloc d'instructions */
............;
............;
}
do
{
............; /* bloc
d'instructions */
............;
}
while (expression);
• Un tableau (array) est une collection de variables de même type, appelées éléments
• On les déclare par un type, un nom et une dimension (CONSTANTE) placée entre [ ]
• Le C alloue toujours un tableau dans une zone contigüe de la mémoire
• Une fois déclaré, on ne peut redimensionner un tableau
Exemples
int tab[4]; déclare un tableau de 4 valeurs entières tab[0] tab[1] tab[2] tab[3]
void main()
void main(void) a
{
{ 59 0
int a[6];
?
const int N=10;
1
int i = 7;
? 2 int t[N],i;
a[0] = 59; 2 3 for (i=0;i<N;i++)
a[5] = -10;
a[i/2] = 2; ? 4 {
-10 5
a[6] = 0; printf("Entrez t[%d]=",i);
a[-1] = 5; scanf("%d",&t[i]);
}
}
Les tableaux consomment beaucoup
}
de place mémoire. On a donc intérêt
à les dimensionner au plus juste.
1 Les tableaux
Rappels Accès aux éléments d’un tableau
main ( )
{ float notes[30];
int nbre,i;
for(i=0;i<30;i++)
{ 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);
}
1 Les tableaux
Rappels Tableaux à plusieurs dimensions
On peut définir un tableau à n dimensions de la façon suivante:
Type Nom_du_Tableau[D1][D2]…[Dn];
float notes[20][5][2];
Exemple :
float A[3][4] = {{-1.5, 2.1, 3.4, 0}, {8, 7e-5,1, 2.7 }, {3.1, 0, 2.5E4, -1.3E2}};
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf ("Entrez la valeur de A[%d][%d] \n ",i,j);
scanf(" %d" , &A[i][j]);
}
Uij = 1 si i=j
sinon Uij = 0
1 Les tableaux à deux dimensions
Rappels Exercice : correction
#include <stdio.h>
int main()
{
/* Déclarations */
int U[50][50]; /* matrice unitaire */
int N; /* dimension de la matrice unitaire */
int I, J; /* indices courants */
/* Edition du résultat */
printf("Matrice unitaire de dimension %d :\n", N);
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%d", U[I][J]);
printf("\n");
}
return 0;
}
1 Exercice 1
Rappels
Tableau
D E C A L A G E
initial
Tableau
E C A L A G E D
modifié
1 Exercice 2 - correction
Rappels
Programmation en langage C
Plan
1
Rappels (Types de bases, variables, opérateurs, structures de contrôles,..)
2
Les fonctions
3
Les pointeurs et l’allocation dynamique
4
Les chaines de caractères
5
Les types composés (structures, unions, synonymes)
6
Les fichiers
2 La programmation modulaire
Les
Fonctions
Les modules sont des groupes d'instructions qui fournissent une solution à des
parties bien définies d'un problème plus complexe. Ils ont plusieurs intérêts:
Résolution des
problèmes assez Nombre(erreurs)
Algorithme long augmente
compliqués
Une fonction peut avoir autant de paramètres que l’on veut, même
aucun (comme void main(void))
Les variables déclarées dans une fonction sont locales à cette fonction
} Valeur renvoyée
2 Déclarer une fonction
Les
Fonctions
Exemples :
Une fonction qui calcule la somme de Une fonction qui affiche la somme de
deux réels x et y : deux réels x et y :
double Som(double x, double y ) void AfficheSom(double x, double y)
{ {
return (x+y); printf (" %lf", x+y );
} }
Exemple d’appels:
main( )
Le compilateur attend des
doubles; les conversions sont {
automatiques double z;
z=Som(2, 3);
Ici, on ne tient pas compte de la valeur AfficheSom(6.5,7.2);
de retour
}
2 Le prototype
Les
Fonctions
• La déclaration d'une fonction se fait par son prototype qui indique les types de
ses paramètres et celui de la fonction :
Val = addition();
printf(“val = %d”, Val);
}
float calcule(float A, float B)
{
return ( (A+ B) / 2) ;
}
int addition()
{
float tmp;
tmp = calcule(2.5,3) + calcule(5,7.2);
return (int)tmp;
}
2 Variables locales et globales
Les
Fonctions
• Le C est un langage structuré en blocs { } , les variables ne peuvent être utilisées que là où
elles sont déclarées
• On peut manipuler 2 types de variables dans un programme C : des variables locales et des
variables globales. Elles se distinguent par ce qu'on appelle leur portée (leur "espace de
visibilité", leur "durée de vie").
• Une variable définie à l'intérieur d’une fonction est une variable locale, elle n’est connue
qu'à l'intérieur de cette fonction. Elle est créée à l'appel de la fonction et détruite à la fin
de son exécution.
• Une variable définie à l’extérieur des fonctions est une variable globale. Elle est définie
durant toute l’application et peut être utilisée et modifiée par les différentes fonctions du
programme.
2 Variables locales et globales
Les
Fonctions
• Les variables déclarées au début de la fonction principale main ne sont pas des
variables globales, mais elles sont locales à main.
• Il faut utiliser autant que possible des variables locales. Ceci permet
d'économiser la mémoire et d'assurer l'indépendance de la fonction.
2 Variables locales et globales
Les
Fonctions
La transmission par adresse (ou par référence) : les adresses des paramètres
effectifs sont transmises à la fonction appelante. Dans ce mode, le paramètre
effectif subit les mêmes modifications que le paramètre formel.
2 Le passage des paramètres par valeur
Les
Fonctions
void main(void)
{
int var = 5;
void change(int v)
{
v *= 100;
printf("change: v = %d\n", v);
}
2 Le passage des paramètres par valeur
Les
Ecrire un programme utilisant une fonction qui calcule y tel que y=x +5x+6t , x
Fonctions
et t étant deux réels qcq.
float poly (float a,float b) /*passage des para par valeur*/
{float c ;
c=a*a+5*a+6*b*b*b*b ;
return(c) ;
}
Programme appelant :
# include <stdio.h>
int main()
{float x,t,y ;
printf("donner x et t ") ;
scanf("%f %f",&x,&t) ;
y=poly(x,t);
printf("le polynôme calculé pour %f et %f est % f \n",x,t,y) ;
return 0;}
2 Passage des paramètres par adresse
Les
Fonctions Calcul de la moyenne d’un tableau
Fonction :
void moyenne (float tab[],int N,float * M) /*passage par adresse*/
{int i ;
*M=0 ;
for(i=0 ;i<=N-1 ;i++)
*M+=tab[i] ;
*M=*M/N;
}
En C, le passage par adresse dans le sens propre n’est pas possible. Mais on peut y
remédier grâce aux pointeurs, ie la fonction reçoit un pointeur pointant sur le
paramètre correspondant.
2 Passage des paramètres par adresse
Les
# include <stdio.h> Programme appelant :
Fonctions
#define A 50
int main()
{float t[A],moy ;
int dim,i ;
void moyenne (float [],int,float *);
printf("donner la dimension du tableau\n") ;
scanf("%d",&dim) ;
for(i=0 ;i<=dim-1 ;i++)
{ printf("donner t[%d]\n",i) ;
scanf("%f",t+i) ;
}
moyenne (t,dim,&moy) ; /*appel à la fonction*/
printf("la moyenne du tableau est %f \n",moy) ;
return 0;}
2 La récursivité
Les
Fonctions
• Une fonction qui fait appel à elle-même est une fonction récursive
• Dans une fonction récursive, il y a deux notions à retenir :
o Quand la fonction s’appelle, on recommence avec de nouvelles
données.
o Il y a un test de fin, généralement en début de la fonction (il
s’agit d’un cas limite (cas trivial) qui arrête la récursivité)
void F(…)
{
if (fin) {
…} else {
…
F(…) ;
…}
}
2 La récursivité
Les
Fonctions Exemple 1 : Calcul du factorielle
La fonction factorielle d’un nombre entier positif :
fact(n)= n*(n-1)*(n-2)*…*2*1=n*fact(n-1)
La fonction fact est définie comme suit :
si n=0 alors fact(n)=1
si n>0 alors fact(n)=n*fact(n-1)
int Fib(int n)
{
if (n==0 || n==1)
return (1);
else
return ( Fib(n-1)+Fib(n-2));
}
2 La récursivité
Les
Fonctions
#include <stdio.h>
void somme(int x[], int n);
void main(void){
int i;
int p[6] = { 1, 2,3, 5, 7, 11 };
somme(p, 6);
for (i=0;i<6;i++)
printf("%d ", p[i]);
}
void somme(int a[], int n){
int i;
for(i = n-1; i >0 ; i--)
a[i] += a[i-1];
}
2 Exercice 1
Les
Fonctions
Exemple:
Introduire un nombre entier : 6457392
Le nombre 6457392 a 7 chiffres.
2 Exercice 2 - correction
Les
Fonctions
int NCHIFFRES(long N)
{
int I=0;
do
{
N=N/10;
I++;
}
while (N>1 || N<-1);
return I;
}
2 Exercice 2 - correction
Les
Fonctions