Académique Documents
Professionnel Documents
Culture Documents
1
Plan
Introduction
Déclaration & opération mathématique
Les structures de contrôle en C
Tableaux : Introduction
Fonctions en C
Structures en C
2
Qu'est-ce qu'un bon programme?
Un Bon Programme ? ? :
Efficacité Rapidité?
- Lisible
- Structuré
3
Types de base
4 types de base, les autres types seront dérivés de ceux-ci.
4
TYPE de la valeur de retour
"main" : Cela signifie "principale",
ses instructions sont exécutées.
int main(void)
{
/* corps du programme*/ void main(void): La fonction main ne prend
begin aucun paramètre et ne retourne pas de valeur.
declaration des Cstes et Var ;
instruction1 ; int main(void): La fonction main retourne une
valeur entière à l'aide de l'instruction return (0
instruction2 ;
si pas d’erreur).
….
int main(int argc, char *argv[]): On obtient
}
alors des programmes auxquels on peut
end adresser des arguments au moment où on lance
le programme.
Entre accolades "{" et "}" on
mettra la succession d'actions à
réaliser.(Bloc)
5
Structure d'un programme C
#include <stdio.h>
#define DEBUT -10 Directives du préprocesseur :
#define FIN 10 accès avant la compilation
#define MSG "Programme de démonstration\n"
int fonc1(int x);
int fonc2(int x); Déclaration des fonctions
void main()
{ /* début du bloc de la fonction main*/
int i; /* définition des variables locales */
Programme
i = 0 ; principal
fonc1(i) ;
fonc2(i) ;
} /* fin du bloc de la fonction main */
int fonc1(int x) {
return x; Définitions des
}
fonctions
int fonc2(int x) {
return (x * x);
}
6
La fonction printf() :
Librairie : stdio.h. #include <stdio.h>
Librairie : stdio.h
Fonction Syntaxe Description
9
Variables : déclarations
Syntaxe : Type identificateur1, identificateur2, …,…. ;
Variables : initialisations
Les variables doivent être déclarées avant leur utilisation dans un début de bloc (juste après{),
zone des déclarations:
void main(void) void main(void)
{ {
est équivalent à
char c; char c = 'A';
int i,j, k;
int i=50,j, k;
c = 'A';
i = 50; j=k=10;
j =10; = opérateur d’affectation
K=10;
2eme méthode: déclaration d'une variable, dont la valeur sera constante pour tout le programme.
Exemple:
void main() Le compilateur réserve de la
{ place en mémoire (ici 4 octets).
const float PI = 3.14159;
const int JOURS = 5;
float perimetre,rayon = 8.7;
perimetre = 2*rayon*PI;
.... /*ERREUR !*/ On ne peut
JOURS = 3; changer la valeur d’une const.
.... !
}
12
Les opérateurs arithmétiques
Le C propose les opérateurs suivants :
+ addition
- soustraction
* multiplication
/ division
% modulo (reste de la division entière )
% ne peut être utilisé qu'avec des entiers
7/2 3
7.0/2
7/2.0
7.0/2.0
3.5
13
Les opérateurs de comparaison
< plus petit
Le type booléen
<= plus petit ou égal n'existe pas. Le
> plus grand résultat d'une
expression logique
>= plus grand ou égal
vaut 1 si elle est
== égal vraie et 0 sinon.
!
!= différent
Réciproquement,
Les opérateurs logiques toute valeur non
nulle est considérée !
&& et comme vraie et la
|| ou (non exclusif) valeur nulle
comme fausse.
! non
14
Incrément et décrement
int
int ii==5,
5,jj==4;
4;
“i” vaudra 6
i++;
i++;
“j” vaudra 3 --j;
--j;
++i;
++i;
“i” vaudra 7
15
TP1
16
Les structures de contrôle en C
Alternative: if-else
Itérations: for,
17
Les structures de contrôle en C
Les décisions - if then else
if (expression booléenne vraie) if (a<b)
{ {
Pas de then en C BLOC 1 D'INSTRUCTIONS min=a;
} }
else else
Le bloc " else " { {
est optionnel. BLOC 2 D'INSTRUCTIONS min=b;
} }
* Tout ce qui est 0 ( ‘\0’ 0 0.0000 NULL ) est faux
* Tout ce qui est != de 0 ( 1 ‘0’ 0.0001 1.34 ) est vrai
if(32)
printf("ceci sera toujours affiche\n");
if(0)
printf("ceci ne sera jamais affiche\n");
18
if emboîtés
else est associé avec le if le plus proche
int i = 100;
if(i > 0)
if(i > 1000)
printf("i > 1000\n");
else
printf("i is reasonable\n"); i is reasonable
i is reasonable
int i = 100;
if(i > 0) {
if(i > 1000)
printf(" i > 1000 \n");
} else
printf("i is negative\n");
19
l es )
o uc Les itérations – for
(B
int i,j;
for( init ; test; increment) i i==00
{ for (i = 0; i <3; i++) { i i==11
/* corps de for */ printf ( "i = %d\n", i); i i==22
} j j==55
} j j==44
for(j = 5; j > 0; j- -)
printf("j = %d\n", j); j j==33
double angle; j j==22
j j==11
for(angle = 0.0; angle < 3.14159; angle += 0.2)
printf("sine of %.1lf is %.2lf\n",angle, sin(angle));
int i, j, k;
for( ; ; )
{ for(i = 0, j = 2, k = -1; (i < 20) &&(j==2); i++, k--)
............; /* bloc d'instructions */
............;
............;
}
est une boucle infinie (répétition infinie du bloc d'instructions).
20
TP1
21
Tableaux : Introduction
Déclaration de tableaux
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]
!
#define
#define SIZE
SIZE 10
10
int
int a[SIZE];
a[SIZE]; /*/*aaest
estun
unvecteur
vecteurde
de10
10entiers
entiers*/*/
le compilateur réserve SIZE places en mémoire pour ranger les éléments du tableau.
float
float A[5]
A[5] =={{10.1,
10.1,20.3,
20.3,30.5,
30.5,40.0,
40.0,50.4
50.4};};
22
Accès aux éléments d’un tableau
Les éléments sont numérotés de 0 à dim-1 !
Il n’y a pas de vérification de bornes
a
void
voidmain(void)
main(void) void
void main(void)
main(void)
{{ 59 0 {{
int
int a[6];
a[6]; ? 1 int
int
int i i==7;7; inti;i;
? 2 int
intA[6]
A[6]=={{1,1,2,3,
2,3,5,5,7,7,11
11};};
a[0]
a[0]==59;
59; 2 3
a[5] for
for(i=0;i<6;i++)
(i=0;i<6;i++)
a[5]==-10;
-10; ?
a[i/2] 4
a[i/2]==2;
2; printf("%d
printf("%d",",A[i]);
A[i]);
-10 5 }}
a[6]
a[6]==0;
0;
a[-1]
a[-1]==5;5;
}}
24
TP1
25
Fonctions en C
Les principes
En C, tout est fonction (Définition, Déclaration et Appel).
Une fonction peut avoir autant de paramètres que l’on veut, même
aucun
(comme void main(void))
Une fonction renvoie une valeur ou aucune.
Les variables déclarées dans une fonction sont locales à cette fonction
Une fonction possède un et un seul point d'entrée, mais
éventuellement plusieurs points de sortie (à l'aide du mot return).
L'imbrication de fonctions n'est pas autorisée:
une fonction ne peut pas être déclarée à l'intérieur d'une autre fonction. Par contre, une fonction
peut appeler une autre fonction. Cette dernière doit être déclarée avant celle qui l'appelle.
26
Fonctions en C
/* Programme principal */
#include <stdio.h>
int imax(int,int);
main() Prototype de la fonction
{ … }
28
Déclarer une fonction
printf("Celsius\tFarenheit\n");
for(d = start; d <= end; d += step, lines++)
printf("%.1lf\t%.1lf\n", d, d * 1.8 + 32);
return lines;
}
Valeur renvoyée
29
Appeler une fonction
IMPORTANT: cette instruction spécifie comment la fonction est définie
#include <stdio.h>
void main(void)
{
int combien; Le compilateur attend des
double end = 100.0; doubles; les conversions sont
automatiques
combien = print_table(1.0,end,3);
print_table(end, 200, 15);
}
Ici, on ne tient pas compte de la valeur de retour
30
float calculeFloat(float, float);
int addition();
void main(void)
{
int Val ;
Val = addition();
printf(“val = %d”, Val);
}
int addition()
{
float tmp;
tmp = calcule(2.5,3) + calcule(5,7.2);
return (int)tmp;
}
void main(void){
int var = 5;
int valeur;
valeur = change(var);
change:
change:vv==
printf("main: var = %d\n", var); main:
printf("main: valeur = %d\n", valeur);
main:var
var==
main:
main:valeur
valeur==
}
int change(int v)
{
v *= 100;
printf("change: v = %d\n", v);
return (v+1);
}
32
Fonctions en C
La récursivité
/* Programme principal */
#include <stdio.h>
void up_and_down(int);
main()
Niveau 1 {
Niveau 2 up_and_down(1)
Niveau 3 }
Niveau 4 void up_and_down(int n)
NIVEAU 4 {
NIVEAU 3 printf(“Niveau %d\n” n);
if (n<4)
NIVEAU 2
up_and_down(n+1);
NIVEAU 1 printf(“NIVEAU %d\n” n);
} 33
Passer des tableaux aux fonctions
Les tableaux peuvent être passés comme paramètres d'une fonction.
Ils ne peuvent pas être retournés comme résultat d'une fonction. !
La longueur du tableau ne doit pas être définie à la déclaration de la fonction.
Un tableau peut être modifié dans une fonction. Il est passé par référence
(adresse) et non par valeur.
#include
#include<stdio.h>
<stdio.h>
void
void somme(int
somme(intx[], x[],int
intn);
n); p avant somme p après somme
void
void main(void){
main(void){
int
inti;i;
int
intp[6]
p[6]=={{1,1,2,3,
2,3,5,5,7,7,11
11};};
somme(p,
somme(p,6); 6);
for
for(i=0;i<6;i++)
(i=0;i<6;i++)
printf("%d
printf("%d",",p[i]);p[i]);
}}
void
void somme(int
somme(inta[],a[],int
intn){
n){
int
int i;i;
for(i
for(i==n-1;
n-1;i i>0
>0;;i--)
i--)
a[i]
a[i]+=
+=a[i-1];
a[i-1];
}}
34
Exemple: transposition d'une matrice
void transpose ( float a[][20], int m, int n);
void main(void)
{float matrice [100][20]; /* matrice (100,20) */
/*…*/
transpose (matrice, 3, 2);
}
35
TP1
36
Strings
Le C n’a pas de type string, on utilise donc des tableaux de char.
char
char first_name[5]
first_name[5]={
={'J','o','h','n','\0'};
'J','o','h','n','\0'}; 'J' 'o' 'h' 'n' 0
char
char last_name[6]
last_name[6] ="Minor";
="Minor"; 'M' 'i' 'n' 'o' 'r' 0
char
char other[]
other[] =="Tony
"TonyBloot";
Bloot";
'T' 'o' 'n' 'y' 32 'B' 'l' ‘o' ‘o' 't' 0
char
char characters[7]
characters[7]=="No
"Nonull";
null"; 'N' 'o' 32 'n' 'u' 'l' 'l'
Pas de ‘\0’
37
Affichage à l'écran des strings
Soit caractère par caractère, avec le format “%c” ou putchar,
ou, plus simplement, avec le format “%s” ou puts .
int i = 0;
last_name[3] = ‘\0’; Min
}
while(last_name[i] != '\0')
printf("%s\n", last_name);
printf("%c", last_name[i++]);
puts(last_name);
printf("\n");
38
Saisie des strings
char texte[30];
printf("ENTRER UN TEXTE: ");
scanf("%s", texte); //est équivalent à gets(texte);
39
RQ:
scanf ne permet pas la saisie d'une chaîne comportant des espaces:
les caractères saisis à partir de l'espace ne sont pas pris en compte.
Pour saisir une chaîne de type "il fait beau", il faut utiliser gets.
#include <stdio.h>
#include <string.h>
Affectation de strings : void main(void) {
Les strings peuvent être
initialisés avec “=”, char who[] = "Tony Bloot";
mais pas affectés avec “=”
(ce sont des tableaux!) who = "John Minor";
strcpy(who, "John Minor");
}
40
TP1
41
Structures en C
Concepts
Créer un type de structure
Créer une instance de structure
Initialiser une instance
Accéder aux membres d’une instance
Passer les structures comme paramètres
Listes chaînées
42
Concepts
Une structure est une collection de plusieurs variables (champs) groupées
ensemble pour un traitement commode
Les variables d’une structure sont appelées membres et peuvent être de
n’importe quel type, par exemple des tableaux, des pointeurs ou d’autres
structures
struct
structMembre
Membre
{{
char
char nom[80];
nom[80];
char
char adresse[200];
adresse[200];
int
int *numero;
*numero;
float
float amende[10];
Les étapes sont: amende[10];
};};
déclarer le type de la structure
utiliser ce type pour créer autant d’instances que
désirées
Accéder les membres des instances
43
Déclarer les structures
Les structures sont définies en utilisant
le mot-clé struct struct Membre
struct Membre
struct
structDate
Date {{
char nom[80];
{{ char
char
nom[80];
adresse[200];
char adresse[200];
int
int jour;
jour; int
int numero;
numero;
int
int mois;
mois; float
float amende[10];
amende[10];
! int
int an;
an;
struct
struct Date
Date emprunt;
emprunt;
struct
struct Date
Date creation;
creation;
};}; };};
struct
structLivre
Livre
{{ struct
structPret
Pret
char
char titre[80];
titre[80];
{{
struct Livre
struct Livre b;b;
char
char auteur[80];
auteur[80]; struct
struct Date
Date due;
due;
struct
struct Membre
Membre *who;
*who;
float
float prix;
prix; };};
};};
44
Des structures dans des structures
struct
structDate
Date
{{
int
int jour;
jour;
int
int mois;
mois; struct
structMembre
Membre
int
int an;an; {{
};};
char
char nom[80];
nom[80];
char
char adresse[200];
adresse[200];
int
int numero;
numero;
float
float amende[10];
amende[10];
struct
struct Date
Date emprunt;
emprunt;
struct
struct Date
Date creation;
creation;
};};
struct
structMembre
Membre mm=={{
"Arthur
"ArthurDupont",
Dupont",
”rue
”rue de Houdain,9,9,7000
de Houdain, 7000Mons",
Mons",
42,
42,
{{0.0
0.0},},
{{0,0,0,0,00},},
{{5,5, 2,2,2001
2001}}
};};
45
Accéder aux membres d’une
structure
Les membres sont accédés par le nom de l’instance,
suivi de . , suivi du nom du membre
struct
structMembre
Membre m;
m;
printf("nom = %s\n", m.nom);
printf(”numéro de membre = %d\n", m.numero);
printf(”amendes: ");
for(i = 0; (i < 10) && (m.amende[i] > 0.0); i++)
printf("%.2f Euros", m.amende[i]);
46