Langage C INTRODUCTION •
•
•
Langage machine 101110011101111011 001001110010100110 Propres au microprocesseur On peut TOUT faire (TOUT programmer) Langages évolués C – Pascal – Basic Système – Math – Débutant Cobol – RPG… Gestion C : D. Ritchie • B. Kerningham (1968) Le 1er UNIX a été programmé en C Portabilité des programmes Les types de programmation Les langages procéduraux (C, Cobol) La prog. orientée objet (JAVA) La programmation web (XML , PHP, HTML,…)
•
•
Langage assembleur 1 instruction lang. machine = 1 instruction assembleur |ZAP|I, ZERO i=c |APZ|I, C On peut TOUT programmer Langages de 4ème génération JAVA .NET WINDEV PowerBuilder …
pas de la prog. c’est un META langage
CHAPITRE 1 : PREMIERS PAS 1.1. Exemple de programmes C Soit écrire un programme qui calcule la surface d’un cercle en fonction de son rayon. Illustration : Rayon : 2.5 Surface = 19.63… Code source :
1
1.2. • • • 1.3. •
Identificateurs Le C fait la différence entre MAJ et min. Le premier caractère doit être une lettre Un ID peut-être composé de lettres et/ou de chiffres et/ou de _ (underscore) Les données Les variables
int float char (4bytes) (4bytes) (1byte) • Les constantes (4bytes) entières décimales : 0, 1, 753, 999, -78 (4bytes) entières octales(8) : 01361, 01747, -0116 (4bytes) entières hexa(16) : 0x0, 0x1, 0x2F1, 0x3E7, -0x4E (4bytes) (1byte)
réelles : 0., 43.7, 2E-8, -78.7, -2E-8 caractères : ‘a’, ‘A’, ‘3’, ‘ !’, …
Ecrire un programme C qui calcule la cotisation et le salaire net à partir du salaire brut. Illustration : Salaire brut : 3000.5 Cotisation : 420.07 Salaire net : 2580.43 Code source :
2
CHAPITRE 2 : LES TYPES DE VARIABLES 2.1 Rappel Binaire 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Octal 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17
Hexa 0 1 2 3 4 5 6 7 8 9 A B C D E F
Exercice : Représentez le contenu de a : -en binaire -en hexa Représentez le contenu de car1 et car2 : -en binaire -en hexa Code source :
Représentations : a=78 ; 4E a = 0000 0000 0100 1110 0 0 4 E C=43(16) car1 = 0100 0011 111=6F(16) car2 = 0110 1111
3
Décimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2.2 Rappel sur entiers en mémoire Notion de complément à 2 : Soit 56(10) devant être codifié dans une variable de type short int. 0000 0000 0011 1000 0 nombre positif ou nul +56 56(10)=38(16) Soit -56(10) devant être codifié dans une variable de type short int. -56(10)=-38(16) +56(10) : 0000 0000 0011 1000 Cpl à 1 : 1111 1111 1100 0111 +1: + 1 Cpl à 2 : 1111 1111 1100 1000 1 nombre négatif +56(10) : 0038 Cpl à 15 : FFC7 +1 : + 1 FFC8
Ejecté car
0038 +FFC7 10000
Exercice :
Représentez le contenu de a et b : -en binaire -en hexa E a = 78 4 a = 0000 0000 0100 1110 0 0 4 E +78 b = -120 120 0078 120 = 0000 0000 0111 1000 0078 0 0 4 8 Cpl à 1 : 1111 1111 1000 0111 FF87 + 1 + 1 1111 1111 1000 1000 FF88
4
Représentez le contenu de car1 et car2 : -en binaire -en hexa car1 = 0101 1111 5 F car2 = 1000 0010 8 2 car1 = 95 5F car2 = 130 82 Binaire 1000 0010 0111 1101 c à 1 + 1 0111 1110 c à 2 7 E 126 2.3 Les types de variables 2.3.1 Introduction DONNEE VARIABLE
CONSTANTE
Doit être déclarée Ne doit pas être déclarée • La déclaration permet de fixer : - Le type de donnée - Et parfois une valeur initiale • Le type de donnée permet de fixer : - L’ensemble des valeurs admissibles - Le nombre de bytes en RAM - Les opérateurs qu’on peut appliquer • Format de déclaration : [,var2,…] ; int a ; 4 bytes int c, b ; On peut ajouter un qualificateur de type : ou short int a ; 2bytes short a ;
5
2.3.2 Les variables caractères 2.3.2.1 Le type char Pourquoi de -128 à 127 ? char car ; car=0 ; //0000 0000 car=1 ; //0000 0001 car=2 ; //0000 0010 … … car=127; //0111 1111 car=-128; //1000 0000 … … Expérience Qu’afficheront les programmes suivants ? a)
b)
2.3.2.2 Le type unsigned char • Dans un contexte ASCII, rien ne change Ex :
•
6
Dans un contexte arithmétique, son domaine s’étend de 0 à 255 car on ne tient plus compte du bit de signe. a)
car1 = 0000 0000 0000 0000 0000 0000 0000 0000 3 bytes 1 byte car2 = 0000 0000 0000 0000 0000 0000 1111 1111 3 bytes 1 byte 01 FE +1 FF -1 b) Idem mais car1 et car2 sont en char car1 = 0000 0000 0000 0000 0000 0000 0000 0000 3 bytes 1 byte car2 = 1111 1111 1111 1111 1111 1111 1111 1111 F F F F F F F F 00 00 00 00 00 00 00 00 +1 00 00 00 00 00 00 00 01 Affichage : 0 0 4294967295 -1 -1 Exemples supplémentaires : C2-1 0100 0001 car1 0110 0001 car2 4 1 6 1 car1=A car2=a Affichage n°1: car1 : A car2 : a Affichage n°2: car1 : Z car2 : z 0101 1010 car1 5 A car1=90 C2-2 0100 0001 car1 Affichage n°1: Affichage n°2:
0110 0001 car2 7 A car2=122 0110 0001 car2 car1 : A car2 : a car1 : Z car2 : z
0000 0000 0000 0000 0000 0000 0101 1010 car1 (90)10 0000 0000 0000 0000 0000 0000 0111 1010 car2 (122)10 7
2.3.3 Les variables entières 2.3.3.1 Le type short ou short int C2-3 Que se passe-t-il si on entre : a) 5 b) -5 c) 32.767 10 5 2 a) 0005 5 000A 10 000F 15
a : 5 b : 10 15
b) FFFB -5 0005 5 1 0000 0
a : -5 b : 5 0
c) 7FFF 32.167 0002 2 8001
a : 32.767 b : 2 -32.767
1000 0000 0000 0001 8001 7FFE + 1 7FFF 32.767 2.3.3.2 Le type unsigned short ou unsigned short int C2-4 short 8000 %hd = -32.768 %hu = 32.768 unsigned short 8000 %hu = 32.768 %hd = -32.768 Affichage : -32.768 32.768 0
-32.768
32.768
2.3.3.3 Le type int 2.3.3.4 Le type unsigned int 2.3.3.5 Le type long ou long int 2.3.3.6 Le type unsigned long ou unsigned long int 2.3.3.7 Quelques erreurs à éviter avec les entiers A savoir : Entier par entier entier Entier par réel réel Réel par entier réel Réel par réel réel 8
C2-5 100 50 41 33 ? z0 z1 z2 z3 z4 z1=z0/2 ; 100/2 50
z2=z0/2.4 ; 100/2.4 ; 41.666…
z3=z0/3 ; 100/3 33
z4=z1/z2*z3 ; 50/41*33 1 33
Affichage : Le résultat : 100 50 41 33 Z4 = 33 2.3.4 Les variables réelles • Il s’agit de la représentation en VFN (Virgule Flottante Normalisée) • L’ordinateur calcule toujours faux en réel • Le 0 absolu n’existe pas 2.3.4.1 Le type float 2.3.4.2 Le type double 2.3.4.3 Le type long double TYPE NB BYTES EN CONSTANTE MASQUE DOMAINE ALGÉBRIQUE RAM char unsigned char short int unsigned shor int
unsigned int long int unsigned long int
1 1 2 2 2 pour 16 bits 4 pour 32 bits " 4 4
float
4
double
8
%lf
long double
12
%Lf
int
9
‘Z’ ‘Z’
%c ou %d %u ou %d %hd %hu
7, 0x45
%d ou %i
56u, 0x45u 56, 0x45 56u, 0x45u
%u %ld %lu
6.7, 3.0
%f
-128->0->127 0->255 -32.768->0->32.767 0->65.535 -2.147.483.648->0-> 2.147.483.647 0->4.294.967.296 Même qu’int Même qu’unsigned -3.4x1038->1.17x10-38-> 1.17x10-38->3.4x1038 -1.79x10-308->-2.22x10-308-> 2.22x10-308->1.797x10308 -1.02x10-4923->-3.37x10-4932 ->3.37x10-4932->1.02x104932
2.1.1
Les séquences d’échappement C2-6 Cours de langage De
programmation
Fonction
Echappement
Code ASCII
Sonnerie Backspace Tabulation Retour à la ligne Retour chariot (début de ligne) Null byte
\a \b \t \n \r \0
7 8 9 10 13 0
10