Langage C (Elements de base)

publicité
1
1. Eléments de base du langage C
•  Généralités
•  Programme et sous-programme
•  Fonction C
•  Structure d’un programme C
•  Vocabulaire de base et syntaxe
•  Exemples
2
Généralités
•  Crée en 1972 par D. Ritchie pour écrire des systèmes
d’exploitation.
•  Histoire liée à celle d’UNIX (1973 D. Ritchie - K. Thompson)
•  Langage à la fois de :
•  ‘‘ haut niveau ’’ : définition de types et des structures de données
complexes
•  ‘‘ bas niveau’’ : opérations binaires et manipulations de bas niveau
•  Portabilité en fait son succès (PC et station de travail)
•  Normalisation ANSI en 1989
3
Caractéristiques du langage
•  Langage d’usage général : haut niveau et assembleur
•  Efficacité (plus de 80% de l’efficacité de l’assembleur)
•  Pas d’instructions d’E/S mais existence de fonctions regroupées
dans la bibliothèque standard ( ex: printf() pour afficher à l’écran )
•  Littérature :
•  ‘‘The C reference manual’’ D. Ritchie et B. Kernigham
•  ‘‘C - A software engineering approach’’ P. Darnell et P. Margolis
4
Critiques usuelles
•  Permissif , contrairement au PASCAL
•  Prévu pour des programmeurs confirmés
•  Tout est lié, il faut tout savoir
•  MAIS : Qualité de ses défauts
5
Programme
•  Suite d’instructions rangées séquentiellement en mémoire
•  Elles s’exécutent (normalement) les unes après les autres
- meilleure lisibilité
- mise à jour plus facile
Programmation structurée
(découpage en modules)
6
Sous-programmes
 
Intérêt d’un sous-programme :
–  quand un programme nécessite plusieurs fois l’exécution
d’une même séquence
–  quand plusieurs programmes utilisent une même
séquence
utilisation d’un sous-programme (bibliothèque)
...
appel
...
...
appel
...
...
...
...
7
Sous-programmes
•  Définitions
•  un sous-programme est un élément de programme qui possède
un nom qui permet à un programme de l’appeler
•  une instruction d’appel
•  un sous-programme doit être capable de :
•  traiter les données fournies par le programme appelant
•  renvoyer des données au programme appelant
•  transformer des données du programme appelant
•  manipuler ses propres données (variables locales)
8
Sous-programmes
Fonction mathématique : f(x,y) = x + xy + y
Définition
Utilisation
- d’un nom
- de ce qu’elle fait
- de variables muettes
- on y fait appel par son nom
- on fournit des valeurs effectives
f(2,3) = 2 + 2x3 + 3
ou
f(3, f(5,3)) = 3 + 3x(5 + 5x3 +3) + (5 + 5x3 +3)
9
Fonctions dans un programme C
•  Sous-programmes en C = fonctions
•  procédures en PASCAL, subroutines en FORTRAN
•  Une fonction C est définie par :
•  un nom
•  liste d’arguments formels (nombre, types et noms)
•  opérations à réaliser (écrites en C)
•  résultat rendu
•  Fonctions peuvent avoir leurs objets propres (variables locales)
•  Une fonction est utilisée avec :
•  une instruction d’appel (le nom de la fonction)
•  liste d'arguments effectifs
10
Exemple de fonction C
Type de la fonction:
type de la valeur de retour
Nom de la fonction
int
{
somme (int a , int b)
Nom et type des
arguments
int resultat ;
Variables locales
resultat = a+b ;
Instructions
return(resultat);
}
Argument de return():
valeur à retourner
Note: return() est lui-même une fonction
11
Autres Fonctions : fonction d’Entrée/Sortie
•  E/S : entrée/sortie vers les périphériques (I/O: input/output)
•  le clavier, l’écran (console), autres…
•  Accessible par tout programme via des fonctions
•  définies et codées dans la bibliothèque standard du langage C
•  Nécessite la directive en début de programme (sinon erreur !):
•  #include <stdio.h> (stdio: standard input output library)
12
Fonction E/S : printf (’’ ’’,…)
•  Affiche à l’écran la chaine de caractères entre ’’ ’’ (guillemets) :
•  tel quel, pour les caractère ordinaires (dont ceux de mise en forme : \n (retour ligne) )
•  après remplacement par l’argument suivant de printf, si le caractère % est présent.
printf(’’%d puissance %d = %d\n’’, i , j , res);
donne ainsi à l’écran :
2 puissance 3 = 8
(+ retour à la ligne)
si i=2, j=3 et res=8.
•  Spécificateurs de format d’affichage :
•  %d ou %i : un entier
•  %f
•  %c
•  %x
•  %s
%u: unsigned int, entier non signé
: un nombre réel (float, double)
: un caractère
: un nombre sous forme hexadécimal
: une chaîne de caractère
13
Fonction E/S : printf (’’ ’’,…)
#include <stdio.h>
Sortie à l’écran :
void main()
{
int a=67;
//a integer(entier)
//0100 0011 in memory
a= 67
a= 43
a= C a= 0.000000
printf("a= %i \n",a);
printf("a= %x \n",a);
printf("a= %c %f ",a);
Affiche a considérant qu’il contient
un nombre à virgule (float) !
Résultat aberrant.
(un avertissement est donné par le
compilateur)
}
67 : code ASCII de ‘C’
14
Fonction E/S : scanf (’’ ’’, &…)
•  Lit le flot de caractère du clavier
•  tant qu’il n’a pas trouvé le nombre d’arguments nécessaire (plus un appui sur ↵ pour indiquer la fin de saisie)
•  Stocke la valeur lue dans les variables en arguments
•  un & (notion de pointeurs) devant le nom de la variable est nécessaire !!
•  scanf(’’ %d %f
’’, &i , &t);
•  scanf (), ne vérifie pas que l’utilisateur entre des valeurs cohérentes !
•  Exemple: il accepte un caractère pour un entier ou un float. Au programmeur d’implémenter des
vérifications.
15
Fonction E/S : scanf (’’ ’’, &…)
Ecran à l’exécution:
#include <stdio.h>
2 3.4 ↵
(↵ : touche return)
a= 2 b=3.400000
void main(void)
{
int a;
float b;
//b réel, virgule flottante
2 3.4 5 ↵
a= 2 b=3.400000
scanf ("%d %f",&a, &b);
printf("a= %d b=%f \n",a,b);
}
2 ↵
(attend 2ème argument)
3.4 ↵
a= 2 b=3.400000
2 t ↵
a= 2 b=27679303629726023680.0
16
Structure d’un programme C
•  Un programme C : un ensemble de fonctions réunies en 1 ou
plusieurs fichiers.
•  Les fonctions sont déclarées dans n’importe quel ordre dans le
fichier source.
•  Une fonction joue un rôle particulier :
programme).
main (point d’entrée du
17
Structure de bloc
{var a,b
{var c,d
•  Délimité par { et }
}
•  Une fonction est un bloc d’instruction.
{var d,e
•  Un bloc peut contenir des sous-blocs
•  Un bloc d’instruction est assimilable à
une seule instruction
Ø  1 instruction =
ou
}
}
...
...
…
1 bloc
1 instruction élémentaire (expl: a=b+1;)
•  Les variables définies dans un bloc sont locales à ce bloc.
•  Exemple: les variables locales à une fonction pour des calculs intermédiaires
18
Vocabulaire et syntaxe
•  Format libre du source:
•  espace, retour à la ligne à la discrétion du programmeur
•  pour la lisibilité, mieux d’indenter le code avec des tabulations
(ou utiliser l’auto-indentation d’un éditeur de texte)
•  Mais Délimiteur d’instruction : ;
•  chaque instruction doit se terminer par un ‘ ; ’
•  Commentaires dans le code :
•  Sur une ligne :
/*..ceci est un commentaire……*/
// cette ligne est un commentaire (Mr Colin n’aime pas)
•  Sur plusieurs lignes :
/* Ceci est un commentaire
sur plus d’une ligne */
19
Vocabulaire et syntaxe
#include <stdio.h>
void main()
{
int a=67;
/*a integer(entier)
0100 0011 in memory*/
printf("a= %i \n",a);
}
1 tabulation
#include <stdio.h>
void main(){
int
a=
67; printf("a= %i\n",
//a integer(entier)
a);
//100 0011 in memory
}
•  ou
#include <stdio.h>
void main(){int a=67;/*a
integer(entier)0100 0011 in
memory*/printf("a= %i\n",a);}
Corrects mais peu lisibles
= Mauvais !
20
Vocabulaire et syntaxe
•  Identificateurs des variables et fonctions:
•  noms composés de caractères alphanumériques et _
•  doit commencer par une lettre ou _ (underscore)
•  minuscules - majuscules : TOTO différent de toto !
•  ne pas faire partie de la liste des mots réservés
(vocabulaire du c : les types, structure de contrôle …)
Bond_007
007_Bond
$toto
int
_007
abc=bca
•  Choisir des noms explicites pour la lisibilité :
•  prix, pixel, somme
plutôt que a, b, c, toto, titi
21
Vocabulaire et syntaxe
•  Identificateurs des variables et fonctions:
•  noms composés de caractères alphanumériques et _
•  doit commencer par une lettre ou _ (underscore)
•  minuscules - majuscules : TOTO différent de toto !
•  ne pas faire partie de la liste des mots réservés
(vocabulaire du c : les types, structure de contrôle …)
Bond_007
007_Bond
$toto
int
_007
abc=bca
•  Choisir des noms explicites pour la lisibilité :
•  prix, pixel, somme
plutôt que a, b, c, toto, titi
22
Vocabulaire et syntaxe
•  Constantes
•  Entières
•  Réelles
:
- suite de chiffres ( + ou - ) ne commençant pas par 0
- commence par 0 : octal
- commence par 0x : hexadécimal
:
•  Caractères :
•  Chaînes
(strings)
:
’ A’ 65
- virgule fixe : 3.33
- virgule flottante : -53e2
- valeur du code dans la table ASCII
- entre apostrophes : ’A’
- tableaux de caractères terminés par \0
- entre guillemets
: ’’ ZUT’’
est différent de
’’A’’
65 \0
(délimiteur spécial)
23
Exemple récapitulatif
#include <stdio.h>
int
{
somme (int a , int b)
int resultat ;
resultat = a+b ;
return(resultat);
}
void main(void)
{
int x=3245;
int b=2879456, res=0;
res=somme(x,b) ;
printf("resultat: %d \n",res);
}
Ecran à l’exécution:
resultat: 2882701
Téléchargement