Vous êtes sur la page 1sur 41

Le langage de

programmation C
PLUS D'INFO S

Pr. Hicham OMARA


hichamomara@gmail.com
 Plus sur les types de variable

Plan  Les constantes


2ème partie
 La fonction de sortie printf

 La fonction d’entrée scanf

 Les fonctions

PR HICHAM OMARA 2
Les Variables

2019/2020 HICHAM OMARA 3


Les types de variables
Rappel sur la représentation binaire
 La mémoire est une séquence de bits stockant que des 0 et 1,
et selon ces deux valeurs (deux états), ainsi que la taille (le nombre de bits) réservée pour
stocker une variable on peut récupérer la valeurs stockée.
 Sur n bits on peut représenter des valeurs ∈ 0, + 2𝑛𝑛 − 1 Chaque bits à son
propre adresse.
16 bits = 2 octets = zone réservée pour un entier
Adresse
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 26

0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 1 0 1

Valeur

La valeur stockée est 1000111110110111 (binaire ) = 36791 (décimale)

Selon ce schéma on ne peut stocker que des valeurs positifs; Comment faire pour
les nombres négatifs et les caractères ainsi que les chaine de caractères ??
PR HICHAM OMARA 4
Les types de variables
attribut de représentation signed/ unsigned
 Le 1er bit sera gardé pour le signe (ex : 0 pour + et 1 pour les -).

 En général, C présente les nombres sous forme de signe + valeur absolue , Un bit contient le signe du nombre
et Les autres bits sont utilisés pour sa valeur absolue.
 Pour imposer cette représentation on utilise le mot clé signed.
 Donc, signed et unsigned permettent d'indiquer si le type supporte des valeurs négatives (signed) ou non
(unsigned)

 Dans ce cas, sur n bits on ne peut stocker que les valeurs ∈ −(2𝑛𝑛−1 − 1) , + (2𝑛𝑛−1 − 1)
 Syntaxe : signed / unsigned type_variable nom_variable;

Bit de signe : 0 1 2 … n
Partie réservée pour
• 0 pour les positifs
codé un entier
• 1 pour les négatifs 0 0 1 0 1

PR HICHAM OMARA 5
Les types de variables
Variable de type char

 Le type de caractère char est codé sur un octet = 8 bits

 Sur 8 bits on peut donc représenter tout nombre entre (−(28−1 − 1)) et + 28−1 − 1

 La table ASCII qui s’occupe d’affecter un code à chaque caractère


o Ex : ‘a’ -> 97 , ‘z’ => 122

 C’est le compilateur qui utilisera ces codes Ascii.

Bit de signe : 0 1 2 … 7
Partie réservée pour
• 0 pour les positifs
codé un entier
• 1 pour les négatifs 0 0 0 0 0

PR HICHAM OMARA 6
Les types de variables
Variable de type char

 On peut stocker presque 256 caractère possible, y compris :


o Les caractère imprimable : {a, b, … , z} , {A, B, …, Z} ou {0, 1, …, 9}

o Les caractères spéciaux : \n , \t

o Les caractères de ponctuation: ; / ? !

o Les caractères non affichables : EOF (end of file)

 Pour Déclarer une variable de type caractère on utilise le mot clé char: Ex : char c;

 Et pour l’initialiser on entoure le caractère souhaité par les apostrophes; Ex : c = ‘a’;

toute char peut être utilisé dans une expression qui utilise des entiers.
Ex: char x , y , z ; z = x + y ; z = x *y;

PR HICHAM OMARA 7
Les types de variables
char et printf

int main () {
 Pour afficher à l’écran la valeur char var1, c = ’a’;
var1 = 1;
stockée dans une variable, on
var1 = var1 + c ;
utilise la fonction d’affichage c= var1;
printf("la valeur de c est : ");
printf selon la Syntaxe : printf("%c", c) ;
}
printf("%c", nom_variable) ; /* ces expressions sont valides */

PR HICHAM OMARA 8
Les types de variables
char et printf

 Remarques :

 Il y a des caractères imprimables qu’on ne peut pas


les représenter de cette façon: int main () {
o L’antislash printf("Je m\'appelle hicham ");
o Les guillemets return 0 ;

o L’apostrophe, }

 Pour les imprimer on utilise le caractère


d'échappement \

PR HICHAM OMARA 9
Les types de variables
Variable de type int

 En général, le type int est codé sur un 4octet = 32 bits

 Sur 32 bits on peut représenter :

o Avec signed, tout nombre entre − 232−1 − 1 , +(232−1 − 1)  l'ensemble ℤ

o Avec unsigned, tout nombre positif entre 0, +(232 − 1)  l'ensemble ℕ

 Syntaxe : signed/ unsigned int nom_variable;

Bit de signe : 0 1 2 … 32 Partie réservée pour


• 0 pour les positifs
codé un entier
• 1 pour les négatifs 1 0 1 0 1

PR HICHAM OMARA 10
Les types de variables
Variable de type int

 Le type int peut être aussi précédé d’un attribut de précision short ou long

 short et long permettent d'indiquer la taille en octet que peut prendre une
valeur.
o un short int (ou tout simplement short) est codé sur 2 octets.

o un long int (out tout simplement long) a au moins la taille d’un int (4 octets).

 Syntaxe :
unsigned/signed short/long int nom_variable;
ou unsigned/signe short/long nom_variable;
PR HICHAM OMARA 11
Les types de variables
Variable de type int

Type Valeurs Possibles

Signed char [−𝟐𝟐𝟕𝟕 ; 𝟐𝟐𝟕𝟕 [

Unsigned char [𝟎𝟎; 𝟐𝟐𝟖𝟖 [


 Les valeurs possibles dépendent des
logiciels et des processeurs. Short int [−𝟐𝟐𝟏𝟏𝟏𝟏 ; 𝟐𝟐𝟏𝟏𝟏𝟏 [

 La table de l'autre côté représente Unsigned short int [𝟎𝟎; 𝟐𝟐𝟏𝟏𝟏𝟏 [

les valeurs possibles selon le type de Int [−𝟐𝟐𝟑𝟑𝟑𝟑 ; 𝟐𝟐𝟑𝟑𝟑𝟑 [


variable choisi. unsigned int [𝟎𝟎; 𝟐𝟐𝟑𝟑𝟑𝟑 [

long int [−𝟐𝟐𝟔𝟔𝟔𝟔 ; 𝟐𝟐𝟔𝟔𝟔𝟔 [

unsigned long int [𝟎𝟎; 𝟐𝟐𝟔𝟔𝟔𝟔 [

PR HICHAM OMARA 12
Les types de variables
int / printf

int main(){
Pour afficher la valeur d'une variable int salaire = 12000;
short int nb_de_fonct = 30000;
de type int à l'écran on utilise la
unsigned long somme;
fonction d'affichage printf, selon la somme = salaire * nb_de_fonct;
syntaxe suivante :
printf("les salaires payés = " );
printf("%d", capital);
printf("%d", nom_var);
}

PR HICHAM OMARA 13
Les types de variables
Variable de type float, double et long double

 On ne peut pas représenter un nombre réel sous sa forme mathématique ℝ


 la virgule flottante est une technique nous permet de stocker en mémoire les réels sous la
forme : “signe mantisse (base) exposant”. Pour la présentation binaire la base = 2, pour la
présentation décimale la base = 10.
 Généralement, il est codé ,sur 4 octets soit 32bits, comme suit :
o Le bit de poids fort est le bit de signe, il est à 1 si le nombre est négatif, à 0 si il est positif.
o L'exposant représente la place de la virgule dans le nombre, il est codé sur 8 bits.
o La mantisse contient les chiffres significatifs du nombre elle est codée sur 23 bits.

3
0 1 … 8 9 …
2
0 0 1 1 0 0 1

Bit de signe exposant mantisse

PR HICHAM OMARA 14
Les types de variables
Variable de type float, double et long double

 Il existe plusieurs types de nombre à virgule flottante : float ; double ;long double.

 Déclaration : float/double/long double nom_variable ;

 Initialisation :

nom_variable = 23.09;

nom_variable = 2.75e-2
nom_variable = 35.8E+10
nom_variable = .25e-2

PR HICHAM OMARA 15
Les types de variables
float/ printf

int main(){
 Pour afficher la valeur d'une variable float salaire = 12000.;
flottante à l'écran on utilise la short int nb_de_fonct = 30000;
fonction d'affichage printf, selon la double somme;
syntaxe suivante: somme = salaire * nb_de_fonct;
printf("les salaires payés = : " );

printf("%f", nom_variable); printf("%f", capital);


}

PR HICHAM OMARA 16
Les types de variables
Exercice d'entrainement

Nom de
Type .?? Valeurs possibles
variable
cmpt {0 ,..., 300}
x {-120 ,..., 100}
 Traduisons les déclarations suivantes taille {-10 ,..., 104}
larg {0.5 ,..., 150075}
en C, en choisissant les types les plus
rayon {-12 ,..., 1500750.5}
économiques, sans perdre en n {0 ,..., 210}
t {-47 ,..., 47}
précision.
z {0 ,..., 326}
m {-1280 ,..., 1285}

existe {vrai, faux}

PR HICHAM OMARA 17
Les Constantes

2019/2020 HICHAM OMARA 18


Les constantes
Définition

 Une constante est une variable dont la valeur ne peut pas être changer. Elle
reste constante durant l'exécution du programme.

 Pour la déclarer on utilise le mot-clé const ;

 Déclaration :
const type_variable NOM_CONSTANTE = valeurs;

Par convention, en n'utilise que les MAJUSCULE pour identifier une


constante;

PR HICHAM OMARA 19
Les constantes
Types

 On trouve des constantes de


types :
const char STOP = 's';
o Caractères const long VITESSE_LUMIERE = 300000;

o Entiers const float PI = 3.14;


const double PI = 3.14;
o réels
const double CHARGE_ELECTRIQUE = -1.6e-19;
o Caractères

o Chaine de caractères

PR HICHAM OMARA 20
Écriture formatée
avec printf
PRINTF ("<FORMAT>" , <PARAM_1>, <PARAM_2>,...);

2019/2020 HICHAM OMARA 21


printf
Syntaxe

 La fonction printf permet d'afficher sur la fenêtre de l'écran un texte mise en forme.

 Syntaxe : printf ("<format>", <param_1>, <param_2>, ...);

 Le 1er paramètre "<format>" représente le format du texte à afficher


o il est obligatoire.

o Il peut contenir du texte, des séquences d'échappement ou des spécificateurs de format,


entouré par les guillemets

 Le reste des paramètres est optionnel, Ces paramètres peuvent être des variables ou
expressions dont les valeurs représentent les données utilisées lors de l'affichage.

2019/2020 HICHAM OMARA 22


printf
Les séquences d'échappement

 Il s'agit d'une séquence de caractères qui ne se représente pas lorsqu'elle est utilisée, mais
qui est traduite en un autre caractère ou une séquence de caractères qui peut être difficile
ou impossible à représenter directement.

 Elle a la forme : \caractères


o \ : barre oblique inverse ou caractère d'échappement.

o Caractères = peut être un ou plusieurs caractères déterminent l'interprétation de la


séquence d'échappement.

 Ex : \n est une séquence d'échappement qui désigne un caractère de nouvelle ligne.

2019/2020 HICHAM OMARA 23


printf
Les séquences d'échappement
Séquence Désignation
d'échappement #include <stdio.h>
\ n Nouvelle ligne ( saut de ligne); int main() {

\t Tabulation (onglet horizontal) int c = '\t';

\v Tabulation verticale printf("Bjr, Comment tu t\'appelles ?");


printf("Je m\’appelle Omar.");
\r Retour chariot
printf("Quelle est votre nationalité?");
\f Saut de page
printf("Je suis marocaine.");
\a Signale d'alerte (un bip)
printf("Quel âge avez-vous?") ;
\b Retour arrière
printf("J\'ai 25 ans.");
\\ Antislash
return 0 ;
\' Apostrophe ( guillemet simple )
}
\" Guillemet double

2019/2020 HICHAM OMARA 24


printf
Les spécificateurs de format

printf ("<format>", <param_1>, symbole type impression comme


<param_2>, ...);
%d ou %i int entier relatif
 Ils indiquent la manière dont les %u int entier naturel (unsigned)
valeurs des expressions <exp_n>
%o int entier exprimé en octal
sont imprimées. C.-à-d., ils
convertissent un nombre (résultat %x int entier exprimé en hexadécimal
de l'expression) en texte. %c Int (char) caractère

 Ils commencent par le symbole % et %f double rationnel en notation décimale


se terminent par un ou deux
rationnel en notation
caractères désignant le format %e double
scientifique
d'impression. %s char* chaîne de caractères

2019/2020 HICHAM OMARA 25


printf
Les spécificateurs de format

int main(){
int main(){
int a = 3;
char c = 'a';
int b = 6 ;
int s = 't' ;
printf(" a * b = %d", a*b);
printf(" %c, %c", c, s);
printf(" %d * %d = %d", a, b,
printf(" %d, %d", c, s);
a*b);
return 0 ;
return 0 ;
}
}

2019/2020 HICHAM OMARA 26


Lecture formatée
avec scanf
SCANF("<FORMAT>",<ADR_VAR1>,<ADR_VAR2>, ...)

2019/2020 HICHAM OMARA 27


scanf ()

𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 −1 ;
 Elle permet de lire les valeurs saisies à partir du clavier, et les transmettent à un
emplacement mémoire précis indiqué par son adresse.
 Syntaxe : scanf("<format>", <Adr_V1> , <Adr_V2> , ...)
o "<format>" désigne le format de lecture des données; il contient des spécificateurs
de formes;
o <Adr_Vn>: désigne l'adresses des variables auxquelles les données seront
attribuées.
 L'adresse d'une variable est indiquée par le nom de la variable précédé du signe &.
 Ex : int a; char c ; scanf ("%d", &a); scanf("%c", &c);
scanf("%d %c", &a, &c);
2019/2020 HICHAM OMARA 28
scanf ()
Les spécificateurs de format

Signe Désignation
int main(){
%d ou %i entier relatif int h, m, s;

%u entier naturel (unsigned) printf("veuillez saisir l\'h");


scanf("%d", &s);
%o entier exprimé en octal
scanf("%d", &m);
%b entier exprimé en hexa scanf("%d", &s);

%c Caractère printf("elle est:\n" );


printf("%d : %d : %d", h, m, s);
%s chaîne de caractères
return 0 ;
rationnel en notation décimale }
%f ou %e
ou exponentielle

2019/2020 HICHAM OMARA 29


Les fonctions

2019/2020 HICHAM OMARA 30


Les fonctions

Paramètres de la fonctions Corps de la fonction

Nom de la fonction 𝑓𝑓 𝑥𝑥, 𝑦𝑦 = 2𝑥𝑥 2 + 𝑦𝑦 − 1


𝑥𝑥, 𝑦𝑦 ∈ ℝ2 → ℝ L'ensemble d'images

 Une fonction est un procédé qui permet d'associer à un nombre, un unique


autre nombre appelé image.
 x et y sont des variables appartenant à l'ensemble de définition de f.
 La fonction f est définie par une expression représentant son corps.
 Si on donne des valeurs à x et y, la fonction f à sa part, calcule la valeur de
l'expression et nous retourne la valeur trouvée.
2019/2020 HICHAM OMARA 31
Les fonctions

Paramètres de la fonctions Corps de la fonction

Nom de la fonction 𝑓𝑓 𝑥𝑥, 𝑦𝑦 = 2𝑥𝑥 2 + 𝑦𝑦 − 1


𝑥𝑥, 𝑦𝑦 ∈ ℝ2 → ℝ L'ensemble d'images

 Cette représentation mathématique peut être transformer en langage C par :


L'ensemble d'images Nom de la fonction Paramètres de la fonctions

type_retour f (type x, type y)


{
return 2 x*x + y - 1; Corps de la fonction

2019/2020 HICHAM OMARA 32


Les fonctions
Généralités

 La 1ère ligne représente l'en-tête de la fonction.


 Déclaration d'une fonction est de la Elle contient :
forme :  le type de retour désignant le type de la fonction, c.-à-d.
type nom_fct (type arg-1, le type de la valeur qu'elle retourne.

...,type arg-n)  Le nom de la fonction

{ Les arguments de la fonction ou paramètres, sont


les paramètres avec lesquels la fonction sera appelée. Ils
déclarations des variables peuvent être de n'importe quel type.
liste d'instructions;  Le corps de la fonction délimité par les accolades :
return expression; débute par des déclarations de variables;
} Suivie par la liste d'instructions à effectuer;
Et se termine par l'instruction de retour return.

2019/2020 HICHAM OMARA 33


Les fonctions
Remarques

/*𝑓𝑓 𝑎𝑎, 𝑏𝑏 = 𝑎𝑎 × 𝑏𝑏*/


int produit (int a, int b) {
 Si la fonction ne possède pas de
return(a*b);
paramètres, on remplace la liste }
/* détermine le stade de vie en entrant l'age */
de paramètres par void.
void age (int a) {
 On utilise void comme type de if( a > 0 && a < 12 ) printf("Enfant.");
if( a > 12 && a < 18) printf("Adolescent. ");
retour pour les fonctions qui ne
if( a >= 18 ) printf( "Adultes.");
renvoient pas de valeur. return;
}

2019/2020 HICHAM OMARA 34


Les fonctions
Exemples

1. /*𝑓𝑓 𝑎𝑎, 𝑏𝑏 = 𝑎𝑎 × 𝑏𝑏*/


1. Fonction produit qui calcule
int produit (int a, int b) {
le produit de deux entiers a
return(a*b);
et b. } 2. /* 𝑢𝑢 × 𝑣𝑣⃗ = 𝑥𝑥 × 𝑧𝑧 + 𝑦𝑦 × 𝑡𝑡 */

2. Fonction produit_scalaire qui float produit_scalaire( float x, float y, flo


at z, flaot t){
calcule le
float resultat = x*z + y*t;
produit scalaire de deux vect
return resultat ;
eurs v(x,y) et u(z,t).
}

2019/2020 HICHAM OMARA 35


Les fonctions
Appel d'une fonction

 L'appel d'une fonction se fait par l'expression :

nom_fct ( arg1, arg2,…, argn);


o L'ordre et le type de ses arguments doivent concorder avec ceux donnés dans l'en-tête de la fonction.

o Ces arguments peuvent être des expressions.

 Exemple :

produit ( 3, 5) ;

produit_scalaire (3, 4.5, 5, 6.90);

2019/2020 HICHAM OMARA 36


Les fonctions
Appel d'une fonction

int produit (int a, int b)


{
return a * b;
}

 Les fonctions peuvent être déclarées main()


indifféremment avant ou au début de la {
fonction principale main. int a = 2, b = 5;
printf("%d \n", produit(a , b));
int r = produit ( 3, 5) ;
printf("%d \n", r);
}

2019/2020 HICHAM OMARA 37


Les fonctions
Exemple

main()
{
int taille;
 On peut connaitre la taille en octet taille = sizeof( short int ) ;
de l'espace mémoire nécessaire pour printf("taille d'un short int %d \n"
, taille);
une variable, en appelant la fonction
printf("taille d'un long %d \n",
sizeof (nom_type); sizeof(long));
printf("taille d'un char est %d \n"
, sizeof(char));
}

2019/2020 HICHAM OMARA 38


La bibliothèque
<math.h>
Une directive est un ordre donné au préprocesseur.
La directive #include <math.h> insère (recopie) le tex te contenu dans le
fichier math.h à l'emplacement de la directive.

2019/2020 HICHAM OMARA 39


La bibliothèque <math.h>

prototype Nom mathématique


 Le fichier math.h est un fichier
en‐tête présent dans le dossier des double sin (double x) ; Sinus

bibliothèques standards du Langage C. double cos (double x ) ; Cosinus

double tan (double x ) ; Tangente


 Il contient des fonctions et des définitions
double exp (double x ) ; Expenentielle
de constantes symboliques ( comme : M_PI, double log (double x ) ; Logarithme népérien

M_E, M_SQRT_2) double pow ( double x, double y) ; 𝑥𝑥 𝑦𝑦

 La liste suivante contient les fonctions les double sqrt ( double x ) ; Racine carrée

plus courantes : double fabs (double x ) ; Valeur absolue réelle

2019/2020 HICHAM OMARA 40


La bibliothèque <math.h>
Exemples

/* L'exemple de calcule de la distance entre deux points */


/*Exemple d'utilisation de cos, sin et tan*/ #include <math.h>
#include <math.h> #include <stdio.h>
#include <stdio.h> int main(){
int main(){ double x,y, z,t ;
double distance;
double a;
printf("saisir les coords de A");
printf ("saisir un angle en radian");
scanf ("%f %f", &x, &y);
scanf ("%f", &a );
printf("saisir les coords de B");
printf("cos(%f) = %f",a, cos(a)); scanf ("%f %f", &z, &t);
printf("sin(%f) = %f",a,sin(angle)); distance = sqrt( pow ( x-
printf("tan(%f) = %f",a,tan(angle); z, 2 ) + pow ( y-t, 2 ));
return 0 ; printf("||AB|| = %f", distance);
} return 0;
}

2019/2020 HICHAM OMARA 41

Vous aimerez peut-être aussi