Algorithmique et Langage C
Algorithmique et Langage C
www.polytech.unice.fr/žvg/index-xidian.html
Granet Vincent - Vincent.Granet@univ-cotedazur.fr
Xi’an - Octobre 2019 - Avril 2020
Algorithmique et Langage C Types élémentaires
Types élémentaires
Algorithmique et Langage C Types élémentaires
Notion de type
Untypeest un ensemble de valeurs qui possèdent les mêmes caractéristiques
langages de programmation typésvsnon typés Typesélémentairesvsstructurés
Types élémentairesprédéfinis entiers
réels booléen caractère
Types élémentairesconstruits énumérés
intervalles
Algorithmique et Langage C Types élémentaires
Types entiers
Entiers
représente Z, mais ensemblefiniet pas d’associativité (e.g.+) arithmétique exacte
cardinalité2n, pournbits il existe unminet unmax nombres négatifs
complément à 1 :[−2n−1−1,2n−1−1]
complément à 2 :[−2n−1,2n−1−1]
127 = 28−1 = 0 1 1 1 1 1 1 1 35 = 25+ 21+ 20= 0 0 1 0 0 0 1 1
−35 = 1 1 0 1 1 1 0 1
−1 = 1 1 1 1 1 1 1 1
−128 = 1 0 0 0 0 0 0 0
Algorithmique et Langage C Types élémentaires
Types entiers
Types entiers signés en C
short [ int ] int
long [ int ] long long [ int ]
<limits.h>definit les minimums et maximums pour les types arithmetiques.
#define INT_MIN −32767
Exemples
123 (decimal) 0173 (octal)
0x7B (hexadecimal) 123LL (long long int)
Algorithmique et Langage C Types élémentaires
Types entiers
Types entiers non signés en C
unsigned short [ int ] unsigned int
unsigned long [ int ] unsigned long long [ int ] 0..2n−1
l’arithmétique est modulo2n i.e.max + 1 == 0
Exemples
123 (decimal) 0173 (octal) Ox7b (hexadecimal) 123u (unsigned int) 123ul (unsigned long)
Algorithmique et Langage C Types élémentaires
Types réels
Types réels
représente R, mais ensemblefiniet pas d’associativité (e.g.+) type entier6⊂type réel
arithmétique inexacte- résultats approchés représentationvirgule flottante- norme IEE 754 r= (s,e,m) = (−1)s×m×Be
avecs∈ {0,1},−E<e<E et−M<m<M
min - max
32 bits 64 bits min 1.4 10−45 4.9 10−324 max 3.4 1038 1.8 10308
Algorithmique et Langage C Types élémentaires
Types réels
Types réels en C
float double long double
Exemples
0. .0 2.123 3e1 1.3E-12 2e+23 12.34f 0e-34F 0.0L 98.e-4l
Algorithmique et Langage C Types élémentaires
Type booléen
Type booléen
ensemble ordonné{faux,vrai}
table de vérité
p q non p p et q p ou q p xou q
faux faux vrai faux faux faux
vrai faux faux faux vrai vrai
faux vrai vrai faux vrai vrai
vrai vrai faux vrai vrai faux
De Morgan
non (p ou q) = non p et non q non (p et q) = non p ou non q
Algorithmique et Langage C Types élémentaires
Type booléen
En C
en C pas de type booléen !
représentés par des valeurs compatibles avec le type entier 0 = faux et6=0 = vrai
Algorithmique et Langage C Types élémentaires
Types caractères
Types caractères
différents jeux de caractères normalisés Ascii,Ebcdic,ISO-8859,Unicode
Unicode10.0 (norme ISO/IEC 10646) comprend plus de 136 000 caractères différents, pour 139 écritures
Algorithmique et Langage C Types élémentaires
Types caractères
Type caractères en C
[ unsigned ] char
valeur entière, codée sur 8 bits, toujours positive (ordinal du caractère) utilisable dans une expression entière
/ '0' <= c <= '9' / i n t x = c − '0' + 10;
/ 10 <= x <= 19 /
Exemples
'a' 'z' '\141' (a-ascii) '\077' (?-ascii) '\'' '\\'
'\a' (audible bell)
'\b' (backspace) '\f' (form feed) '\n' (newline) '\r' (carriage return) '\t' (horizontal tab) '\v' (vertical tab)
Algorithmique et Langage C Types élémentaires
Types énumérés
Types énumérés
construction du type par énumération des valeurs
couleurs = ( vert, bleu, gris, rouge, jaune ) nbpremiers = ( 1, 3, 5, 7, 11, 13 )
voyelles = ( 'a', 'e', 'i', 'o', 'u', 'y' )
Type énuméré en C
uniquement des identificateurs deconstantes entières, et le compilateur les lie automatiquement vers des entiers en ordre croissant (en partant de 0 par défaut)
enum color {green, red, blue};
enum color {green=0, red=1, blue=2};
Algorithmique et Langage C Types élémentaires
Types énumérés
les valeurs des constantes de l’énumération peuvent être choisies par le programmeur
enum color {green = 20, red = −10, blue};
/ blue == −9 / enum spaces {
bspace='\b', newline='\n', creturn='\r', tab='\t', vtab='\v'
};
Algorithmique et Langage C Types élémentaires
Types énumérés
les valeurs peuvent être égales :
enum color {green=20, red=−10, blue=−10};
les identificateurs de constante de plusieurs types énumérés d’un même blocdoiventtous être differents
Algorithmique et Langage C Types élémentaires
Types intervalles
Types intervalles
permet de construire un intervalle de valeurs sur un type de base.
on spécifie une bornemin et une bornemax, avecmin6max les opérations possibles sur les intervalles sont celles admises sur le type de base.
naturel = [0 ; entmax]
lettres = ['a' ; 'z']
Pas de type intervalle en C !
Algorithmique et Langage C Types élémentaires
Représentation des types C
Représentations internes en C
les tailles des types élémentaires ne sont pas spécifiées par le langage (elles dépendent de la machine)
par définition sizeof(char) == 1 les entiers :
sizeof(char)6sizeof(short)6sizeof(int)6sizeof(long)6sizeof(long long) idem pour lesunsigned
(8,16,32,32,32 Sparc Sun (32 bits) 8,16,32,64,64 PC (64 bits)
Algorithmique et Langage C Types élémentaires
Représentation des types C
Représentations internes en C
les réels
sizeof(float)6 sizeof(double)6 sizeof(long double) (32,64,64 DEC Alpha (32 bits)
32,64,128 PC (64 bits)
Algorithmique et Langage C Types élémentaires
Représentation des types C
Représentations internes en C
les caractères
dépend de l’implémentation(signée, non signée, pseudo-non signée)
c h a r c = 255;
i f (c/−1 == 1) printf("signed\n");
e l s e i f (c/−1 == 0) / K & R / printf("unsigned\n");
e l s e i f (c/−1 == −255)
printf("unsigned (ansi) ou
pseudo−unsigned\n");
e l s e fprintf(stderr,"étrange\n");}
le problème de la constante EOF