Vous êtes sur la page 1sur 15

Langage C

INTRODUCTION
• Langage machine • Langage assembleur
 101110011101111011  1 instruction lang. machine =
001001110010100110 1 instruction assembleur
 Propres au microprocesseur  |ZAP|I, ZERO
i=c
 On peut TOUT faire (TOUT |APZ|I, C
programmer)  On peut TOUT programmer
• Langages évolués • Langages de 4ème génération
 C – Pascal – Basic  JAVA
.NET
Système – Math – Débutant WINDEV
Cobol – RPG… PowerBuilder
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,…)

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<cr>
Surface = 19.63…
Code source :

1
1.2. 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)
1.3. 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) réelles : 0., 43.7, 2E-8, -78.7, -2E-8
(1byte) 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<cr>
Cotisation : 420.07
Salaire net : 2580.43
Code source :

2
CHAPITRE 2 : LES TYPES DE VARIABLES
2.1 Rappel
Binaire Octal Hexa Décimal
0000 00 0 0
0001 01 1 1
0010 02 2 2
0011 03 3 3
0100 04 4 4
0101 05 5 5
0110 06 6 6
0111 07 7 7
1000 10 8 8
1001 11 9 9
1010 12 A 10
1011 13 B 11
1100 14 C 12
1101 15 D 13
1110 16 E 14
1111 17 F 15

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
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

0038
+FFC7
10000
Ejecté car

Exercice :

Représentez le contenu de a et b : -en binaire


-en hexa
a = 78  4 E

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 :
<type> <var1>[,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 :

• 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

6
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 0110 0001  car2


5 A 7 A
car1=90 car2=122
C2-2
0100 0001  car1 0110 0001  car2
Affichage n°1: car1 : A car2 : a
Affichage n°2: 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 a : 5<cr>
000A  10 b : 10<cr>
000F  15 15

b) FFFB  -5 a : -5<cr>
0005  5 b : 5<cr>
1 0000  0 0

c) 7FFF  32.167 a : 32.767<cr>


0002  2 b : 2<cr>
8001 -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 -32.768 32.768
0

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 ; z2=z0/2.4 ;
100/2 100/2.4 ;
50 41.666…

z3=z0/3 ; z4=z1/z2*z3 ;
100/3 50/41*33
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 1 ‘Z’ %c ou %d -128->0->127
unsigned char 1 ‘Z’ %u ou %d 0->255
short int 2 %hd -32.768->0->32.767
unsigned shor int 2 %hu 0->65.535
2 pour 16 bits -2.147.483.648->0->
int 7, 0x45 %d ou %i
4 pour 32 bits 2.147.483.647
unsigned int " 56u, 0x45u %u 0->4.294.967.296
long int 4 56, 0x45 %ld Même qu’int
unsigned long int 4 56u, 0x45u %lu Même qu’unsigned
-3.4x1038->1.17x10-38->
float 4 6.7, 3.0 %f
1.17x10-38->3.4x1038
-1.79x10-308->-2.22x10-308->
double 8 %lf
2.22x10-308->1.797x10308
-1.02x10-4923->-3.37x10-4932
long double 12 %Lf
->3.37x10-4932->1.02x104932

9
2.3.5 Les séquences d’échappement
C2-6
Cours de langage

De programmation

Fonction Echappement Code ASCII


Sonnerie \a 7
Backspace \b 8
Tabulation \t 9
Retour à la ligne \n 10
Retour chariot (début de ligne) \r 13
Null byte \0 0

2.3.6 Mélange de variables de types différents dans une même expression


2.3.6.1 Conversions automatiques
La valeur des opérandes est convertie automatiquement dans un
type commun.

C2-7
V1) float a b res
15.9 3.0 5.3
res= a / b;
réel réel
15.9 3.0

5.3
Affichage :
5.300000

V2) float a b
15.9 3.0
short int res
5
res= a / b;
réel réel
15.9 3.0

réel

5.3 Conversion automatique

Affichage :
5

10
C2-8
V1) float a
15.3

short int b res


3 5
res= a / b;
réel entier
15.3 3.0

5.1
Affichage :
5
V2) float a res
15.3 5.1
short int b
3
res= a / b;
réel entier
15.3 3.0

5.1
Affichage :
5.100000
C2-9
short a b c d
3 4 1 1
double t x y
2.0 1.0 1.3333
c= b / a; x= b / a;
entier entier entier entier
4 3 4 3

1 1

11
y= b / t; x= 1.0* b / a
entier réel réel entier entier
4 2.0
4.0

1.3333
1.33333

y= b / a * 1.0 ; d= 1.0* b / d;

entier entier réel entier

1 4.0

1.0 1.33333 réel


Affichage :
c=1 x=1.000000 y=1.333333
x=1.33333 y=1.000000
d=1

C2-10
V1) short x
3
float a
12.48
char b
4
x= a / b;
réel char

entier consersion du char lors de


calcule

3.12

12
V2) short x
0
float a
12.48
char b
52
x= a / b;
réel char

entier conversion du char lors de


calcule
0.24
2.3.6.2 Conversions forcées
Dans ce cas, on utilise l’opérateur de CASTING
(type)
C2-11
V1) short a
5
float res
2.5
res= (float) a / 2;
entier

réel 5.0 entier

2.500000
Affichage :
2.500000
V2) short a
5
float res
2.5
res=a / 2;
entier entier

2
Affichage :
2.000000

13
CHAPITRE 3 : LES OPÉRATEURS
3.1 L’affectation =

constante

Identificateur = variable

expression

Exemple :
x=4 ; 4=x ;  NON
y=z ; x+2=y-5 ;  NON
y=a+b/4 ; int a=b=3  NON
x= y= 3 ;

3.2 Les opérateurs arithmétiques


3.2.1 Les opérateurs unaires + - ++ --
Ils ne portent que sur un seul opérande.
a) y=+x-3 ;  y=x-3 ;
y=-x+5 ;  y=5-x ;
Va inverser la valeur opérateur unaire
y=-743 ;
y=-(x/3) ;
b) i++ ;  i=i+1 ;  i+=1;
++I;  i=i+1;  i+=1;
j--;  j=j-1;  j-=1;
--j;  j=j-1;  j-=1;

Remarque: ici les opérandes doivent être des variables numériques.

c) Les post et pré-incrémentations


C3-1
i++ ; post incrémentation
++i ; pré incrémentation
Affichage :
i=1
i=2

i=2
i=2

14
d) Remarque: Cette expression est syntaxiquement correcte

a= x++ - -- y ;

Soit x y a

20 7 14  x deviendra 21 à la fin car post-incr.

a= x++ - -- y ;
1 2
3
20 6
4
14

3.2.2 Les opérateurs binaires + - * / %


Les opérateurs binaires ne portent que sur deux opérateurs arithmétique
(variable, constante ou expression)

Exemple :
x=x*3 ;  x*=3 ;
x=x-3 ;  x-=3 ;
x=x+3 ;  x+=3 ;
x=x/3 ;  x/=3 ;
x=x%3 ;  x%=3 ;
z=x*3%a ;  z*=3%a ;

C3-2

int a b
10 3
float x y
12.5 2.0
char c1 c2
‘P’ ‘T’
Affichage :
13 7 30 3 1
14.5 10.5 25.0 6.25
80 164 169 217

15

Vous aimerez peut-être aussi