Upload
doanminh
View
222
Download
4
Embed Size (px)
Citation preview
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Introduction au langage C
Système et environnement de programmation
Université Grenoble Alpes
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes1 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes2 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Origine
Créé en 1972 par K. Thompson, D. Ritchie, B. KernighanAux débuts d’UNIX (1969) : développement du systèmeEncore largement utilisé aujourd’hui
Noyau des systèmes d’exploitationProgrammes nécessitant une grande efficacité de calculSystèmes embarqués (peu de mémoire, runtime basique)
Etendu en C++ par B. Stroustrup en 1983, notammentOrienté objetExceptionPolymorphisme paramétréRéférences
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes3 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Différences majeures avec Python
Mémoire gérée explicitementVariables typées
Il faut les déclarer avant toute utilisationTaille fixe occupée en mémoireEnsemble fini de valeurs représentables
Allocation mémoire expliciteIl faut demander au système toute mémoire utilisée (allocation)Aucune structure de données ne grossit toute seule en mémoire(tableaux, listes, . . . )Il faut libérer la mémoire qui ne sert plus
Forme et mécanismes un peu différentsIndentation libre, blocs délimités par {}Il faut indenter (devoir pour les relecteurs)Non orienté objet
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes4 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Pourquoi apprendre le C ?
Tout informaticien doit connaître le CPour comprendre comment on écrit les choses à plus basniveauPour savoir comment être efficace lorsque cela est necéssaireParce que, parfois, on a besoin d’être à bas niveau
Noyau du système (gestion processus et mémoire, pilotes)Interpréteur python, java, . . . (gestion mémoire)
Souvent comparé à un langage d’assemblage portableNiveau immédiatement au dessusCompilable sur tout système/processeur
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes5 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Mon premier programme en CTout programme doit contenir une fonction main// Un commentaire débute par //// # include va chercher le contenu d’un fichier// stdio.h : affichage et lecture standards# include <stdio.h>int main () {
// printf permet d’afficher à l’écran// \n est le caract ère de fin de ligneprintf ("Hello world\n");// Toutes les instructions se terminent par un ;return 0;
}
Dans un environnement UNIX, un programme renvoie :0, tout s’est bien passéUn code d’erreur non nul, en cas de problème
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes6 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Execution de mon premier programme
Le texte d’un programme en C n’est pas exécutableCompilation : texte en C -> exécutable en langage machineLangage machine
Illisible par un être humainCompris directement par le processeur (efficace)
Dans le cas de mon programme hello_world.cclang hello_world .c
Produit un fichier exécutable a.out en langage machinePour l’exécuter :./a.out
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes7 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes8 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Les bases utiles
Une valeur entière est représentée dans une baseLes humains ont dix doigts et comptent donc en base dixCette norme est tellement répandue que les humains n’ayantpas dix doigts comptent aussi en base 10Mais comme le disait une personne célèbre :
Il y a 10 catégories de personnes, les informaticiens et lesautres – Benjamin Franklin
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes9 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Le binaire : la base 2
Le matériel utilisé en informatique stocke généralementl’information sous la forme de deux états (signal ou pas)On assemble une séquence de plusieurs de ces états pourreprésenter l’informationLa première base utile est donc la base 2
chiffres utilisés :
0 1
Exemples
Décimal 0 1 2 3 5 7 11Binaire 0 1 10 11 101 111 1011
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes10 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
L’octal : la base 8
Un chiffre octal correspond à 3 chiffres binairesla conversion est facileUtilise une partie des chiffres de la base 10On l’utilise pour les droits Unix (chmod 764)
chiffres utilisés :
0 1 2 3 4 5 6 7
Exemples
Décimal 0 1 2 3 5 7 11 13 17 19Octal 0 1 2 3 5 7 13 15 21 23
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes11 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
L’hexadécimal : la base 16
Un chiffre hexadécimal correspond à 4 chiffres binairesla conversion est facilePermet une représentation compacte de données binaires :11011110101011011011111011101111 se représente mieuxen DEADBEEF
chiffres utilisés :
0 1 2 3 4 5 6 7 8 9 A B C D E F
Exemples
Déc. 0 1 2 3 5 7 11 13 17 19 23 29 31Hexa. 0 1 2 3 5 7 B D 11 13 17 1D 1F
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes12 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Exercice
Parmi les nombres suivants :
10 14 ADA 70 0
Combien sont valides en binaire ?Combien sont valides en octal ?Combien sont valides en décimal ?Combien sont valides en hexadecimal ?
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes13 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Pour s’exercer
Les conversions de base c’est super rigoloMais pour ceux qui trouveraient ça ennuyeux, il y a Flippy bit
Application AndroidIl faut repousser une invasion d’aliens hexadécimauxOn tire en traduisant en binaire
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes14 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Notations en C
n1 = 0b10; // binaire (vaut 2)n2 = 010; // octal (vaut 8)n3 = 10; // decimal (vaut 10)n4 = 0x10; // hexadécimal (vaut 16)
Attention ! La notation C pour l’octal est très dangereuse, ilest facile de la confondre avec du décimalCes notations se retrouvent dans de nombreux autres langages
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes15 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes16 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Le typage
En C, toutes les variables ont un typeOn doit déclarer une variable (et son type) avant de l’utiliserLe type explicite la nature et la taille du contenu de la variableLe compilateur vérifie le type des variables manipulées
Paramètres effectifs des appels de fonctionsOpérandes des opérateurs utilisés
Lorsque les types de correspondent pasConversion automatique lorsque cela est possibleErreur sinon
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes17 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Intérêts du typage
Aide le programmeur en soulignant certaines erreursEx : on ne peut pas ajouter une chaine de caractères à unentierIl faut convertir la chaine avant, si elle représente bien un entierDiagnostiqué à la compilation (tôt)
Résulte en une représentation compacte et efficace enmémoire
Un int en C occupe en général 4 octetsUn entier en python occupe une place qui dépend de sa valeur
Occupe plus de place (taille à stocker)Varie dynamiquement : surcoût
Evite certaines conversions à la volée durant l’exécution
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes18 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Les types entiers
Les divers types entiers varient en tailleNon standard en C :la taille de ces types peut varier selon l’architecture/OSIl existe des types standard pour préciser la taille de la variableen octet (hors de notre programme)Signés par défaut (entiers relatifs) il faut ajouter unsigned àla déclaration pour une variante non signée (entier naturel)
Exemple sur Debian 8.10 / x86_64 (turing)char : 1 octetshort : 2 octetsint : 4 octetslong : 8 octetslong long : 8 octets
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes19 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Intervalles de valeurs
On choisit le type en fonction de la taille de l’entier à représenterSur turing
Octets Bits Valeurs En signé En non signé1 8 256 [-128 ; 127] [0 ;255]2 16 65536 [-32768 ;32767] [0 ;65535]4 32 232 [-231 ;231-1] [0 ;232-1]
(4 milliards)8 64 264 [-263 ;263-1] [0 ;264-1]
(16 milliardsde milliards)
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes20 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Exercice
Combien de valeurs peut-on représenter avec les 5 doigtsd’une main ?
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes21 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Que choisir ?
A moins de progrès fulgurants en médecine, l’âge d’un humainpourra être représenté par un unsigned charPar contre pour compter le nombre d’étudiants dans uneuniversité on prendra plutôt un unsigned shortPour suivre le solde du compte en banque d’une personne, unint suffit généralementPour compter le nombre d’être humains sur terre on devrautiliser un unsigned long long
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes22 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Les types à virgule flottante
Nombre rationnels caractérisés par une partie entière et unepartie fractionnelleReprésentés en machine sous la formemantisse ∗ 2exposant où 1 ≤ mantisse < 2Valeurs particulières incluses
NaN : Not a Number+Inf/-Inf : Plus ou moins l’infini
Sur turing
Type Octets Mantisse Exposantfloat 4 23 bits 8 bitsdouble 8 52 bits 11 bitslong double 16 112 bits 15 bits
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes23 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Particularités des types à virgule flottante
Non standard en CBeaucoup de formats coexistentStandard (IEEE 754) parfois absent ou partiellement respecté
Répartition mantisse / exposant= compromis intervalle de valeur / précisionBeaucoup de rationnels non représentables exactement
1/3 qui a un infinité de chiffres après la virgulePlus surprenant : 1/10 également car nous sommes en base 2On ne représente que les rationnels de la forme
mantisse × 2taillemantisse+exposant
2taillemantisse
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes24 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Calculer avec des nombres flottants
La précision finie oblige à être conservatifOn ne compare pas à 0On teste si la valeur absolue est inférieure à un ε fixé
Les erreurs se propagent, les alternatives sont coûteusesArithmétique d’intervallesCalcul en précision arbitraire
En pratiqueDouble précision souvent acceptable pour le calcul scientifiqueSimple précision pour la cao, les jeux vidéoDemi précision pour certains domaines (deep learning)
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes25 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes26 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
La table ASCII
En Cles caractères n’existent pason ne manipule que des codes entiers qui les représententtraduction à la lecture, l’ecriture ou dans les constantes
Le standard ASCII associe un caractère à chaque valeurnumérique de [0 ;127]128 caractères définis ⇒ 7 bits de stockageOn peut donc stocker cette valeur numérique sur un octet8ème bit utilisé dans des certaines variantes pour représenterdes caractères spécifiques à une langue
Windows latin-1Mac OS roman
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes27 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Partie imprimable du code ACSII
30 40 50 60 70 80 90 100 110 120---------------------------------0: ( 2 < F P Z d n x1: ) 3 = G Q [ e o y2: * 4 > H R \ f p z3: ! + 5 ? I S ] g q {4: " , 6 @ J T ^ h r |5: # - 7 A K U _ i s }6: $ . 8 B L V ‘ j t ~7: % / 9 C M W a k u SUP8: & 0 : D N X b l v9: ´ 1 ; E O Y c m w
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes28 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Ambiguïté du nom char
Caractère ascii stocké comme une valeur entière sur 1 octetLe type char fait un octetSon nom laisse entendre qu’il permet de stocker un caractèreOui ! Mais c’est avant tout une valeur entière sur un octet
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes29 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Entier ou caractèreLe f de printf signifie "format"
%c est un format caractère%d est un format entier
Qu’affiche ce code ?char c = 65;int i = 65;
printf ("c1 =%c, c2=%d\n", c, c);printf ("i1=%c, i2=%d\n", i, i);
c1=A, c2=65i1=A, i2=65
Deux fois la même chose !Un int stocke aussi bien la valeur numérique d’un caractèrequ’un char, on perd juste de la place inutile.
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes30 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Entier ou caractèreLe f de printf signifie "format"
%c est un format caractère%d est un format entier
Qu’affiche ce code ?char c = 65;int i = 65;
printf ("c1 =%c, c2=%d\n", c, c);printf ("i1=%c, i2=%d\n", i, i);
c1=A, c2=65i1=A, i2=65
Deux fois la même chose !Un int stocke aussi bien la valeur numérique d’un caractèrequ’un char, on perd juste de la place inutile.
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes30 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Exercice
Ecrire le corps de la fonction C suivante :char capitalize (char c);
Si c est une lettre minuscule la fonction renvoie la lettremajuscule associéeSi c n’est pas une lettre minuscule, renvoie c
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes31 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes32 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Déclaration d’un tableau
Un tableau est un ensemble d’éléments consécutifs de même typeLa taille d’un tableau :
est le nombre d’éléments qu’il contientest donnée à la déclarationne varie pas au cours de l’exécutionn’est pas stockée par le C (à nous de le faire)
Déclarationint tableau [10];
On accède à un élément à l’aide de son indice dans le tableautableau [3] = 42;
Les indices sont dans [0; taille − 1]
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes33 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
DébordementsAttention, le code suivant marche !int tableau [10];tableau [99] = 42;
Le C ne vérifie pas que l’indice donné est dans le tableauLa commande ci-dessus marche
Le programme va écrire dans la mémoire à la case demandéeC’est au delà de la fin du tableau
Deux cas de figure pour l’erreurLa case est en dehors de la mémoire octroyée à l’utilisateur⇒ Segmentation faultSinon, elle contient potentiellement autre chose, son contenusera écrasé, bug très insidieux
Pour éviter cela, il faut être attentif, toujours vérifier qu’onaccède bien aux cases de 0 à taille − 1
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes34 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes35 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Structure conditionnelle
Syntaxeif (< expression >) {
<bloc instructions 1>} else {
<bloc instructions 2>}
SémantiqueSi l’expression a une valeur non nulle
Alors executer le bloc d’instructions 1Sinon exécuter le bloc d’instructions 2
FacultatifToute la partie else s’il n’y a rien a faire dans le sinonLes accolades si un bloc se réduit à une instruction
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes36 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Boucle while
Syntaxewhile (<expression >) {
<bloc instructions >}
SémantiqueTant que l’expression a une valeur non nulle, exécuter le blocd’instructions (peut ne jamais être exécuté)
FacultatifLes accolades si le bloc se réduit à une instruction
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes37 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Boucle for
Syntaxefor (<expr 1>; <expr 2>; <expr 3>) {
<bloc instructions >}
Sémantique<expr 1>while (<expr 2>) {
<bloc instructions ><expr 3>
}
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes38 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Plan
1 Le langage C
2 Bases entières
3 Types
4 Les caractères
5 Les tableaux
6 Les structures de contrôle
7 Les fonctions
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes39 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Les fonctions sont typées
Une fonction est caractérisée parson nomle type de sa valeur de retour (void si aucune)le type et le nom de chacun de ses paramètres formels
int max(int a, int b) {if (a < b)
return b;else
return a;}
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes40 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Passage de paramètresLes paramètres d’une fonction sont passés par valeur
Un emplacement mémoire est créé pour les paramètres formelsLa valeur des paramètres effectifs y est copiée
=> les variables passées à une fonctions restent inchangées# include <stdio.h>void echange (int a, int b) {
int tmp = a;a = b;b = tmp;
}int main () {
int qd = 42; int ue = 203;echange (qd , ue );printf ("En %d on parle de %d\n", ue , qd );return 0;
}Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes41 / 42
Le langage C Bases entières Types Les caractères Les tableaux Les structures de contrôle Les fonctions
Le cas des tableaux
Les tableaux font exception à la règle et sont passés par adresse# include <stdio.h>void echange (int Tab [], int i, int j) {
int tmp;tmp = Tab[i];Tab[i] = Tab[j];Tab[j] = tmp;
}int main () {
// Initialisation de taille et valeursint Tab [] = {42, 203};echange (Tab , 0, 1);printf ("En %d on parle de %d\n", Tab [0], Tab [1]);return 0;
}
Système et environnement de programmation () Introduction au langage C Université Grenoble Alpes42 / 42