Académique Documents
Professionnel Documents
Culture Documents
III. Introduction :
Un programme en langage C est composé d'une ou de plusieurs fonctions dont une et seulement
une porte le nom main. Celle-ci fera appelle aux autres fonctions. La structure de la fonction
main est la suivante :
main( )
{
Partie déclarative ;
Partie des instructions ;
}
Avant la fonction main on doit écrire les directives de compilation on peut aussi déclarer des
variables des constantes et des fonctions
V. Les Variables :
Les variables contiennent les valeurs qui sont utilisées pendant l'exécution du programme.
Les noms des variables sont des identificateurs quelconques.
Les noms des fonctions et des variables en C sont composés d'une suite de lettres et de chiffres.
Le premier caractère doit être une lettre. Le symbole '_' est aussi considéré comme une lettre.
{0,1,2,...,9,A,B,...,Z,_,a,b,...,z}
* Le premier caractère doit être une lettre (ou le symbole '_').
* C distingue les majuscules et les minuscules, ainsi :
'Nom_de_variable' est différent de 'nom_de_variable'
* La longueur des identificateurs n'est pas limitée, mais C distingue 'seulement' les 31 premiers
caractères
Initialisation :
const :
En utilisant l'attribut const, nous pouvons indiquer que la valeur d'une variable ne change pas
au cours d'un programme :
1. L'opérateur d'affectation :
Exemple :
int a;
char c;
a = 10;
c = 'k';
En pratique, nous retrouvons souvent des affectations comme : i = i + 2
En C, nous utiliserons plutôt la formulation plus compacte : i += 2
L'opérateur += est un opérateur d'affectation. Pour la plupart des expressions de la
forme: expr1 = (expr1) op (expr2)
il existe une formulation équivalente qui utilise un opérateur d'affectation:
expr1 op= expr2
Exemple :
x *= 4; cette instruction est équivalente à : x = x *4;
y -= 5; cette instruction est équivalente à : y = y – 5;
+ Addition
- Soustraction
* Multiplication
/ Division (entière et rationnelle)
% Modulo (reste de la division entière)
++ Incrémentation (opérateur unaire)
-- Décrémentation (opérateur unaire)
Pour les opérateurs d'incrémentation et de décrémentation. Les affectations les plus fréquentes
sont du type : I = I + 1 et I = I - 1
En C, nous disposons de deux opérateurs inhabituels pour ces affectations :
I++ ou ++I pour l'incrémentation (augmentation d'une unité)
I-- ou --I pour la décrémentation (diminution d'une unité)
Les opérateurs ++ et -- sont employés dans les cas suivants :
- incrémenter/décrémenter une variable (p.ex: dans une boucle). Dans ce cas il n'y a pas
de différence entre la notation préfixe (++I --I) et la notation postfixe (I++ I--).
- incrémenter/décrémenter une variable et en même temps affecter sa valeur à une autre
variable. Dans ce cas, nous devons choisir entre la notation préfixe et postfixe :
Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:
- la valeur 1 correspond à la valeur booléenne vrai
- la valeur 0 correspond à la valeur booléenne faux
Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro comme faux :
32 && 2.3 1
!65.34 0
0||!(32 > 12) 0
5. Les commentaires :
Les commentaires sont des lignes explicatives qui peuvent être ajoutés dans le code source
pour le rendre plus lisible en lecture. Un commentaire commence toujours par les deux
symboles '/*' et se termine par les symboles '*/'.
/* Ceci est un commentaire correct */
Dans chaque classe de priorité, les opérateurs ont la même priorité. Si nous avons une
suite d'opérateurs binaires de la même classe, l'évaluation se fait en passant de la gauche vers
la droite dans l'expression.
Pour les opérateurs unaires (! , ++, --) et pour les opérateurs d'affectation (=,+=,-=, *=, /=, %=),
l'évaluation se fait de droite à gauche dans l'expression.
Exemples :
10+20 ==> 30
30+30 ==> 60
60-
==> 20
40
20+50 ==> 70
70-
==> 10
60
Remarque :
Les parenthèses sont seulement nécessaires si nous devons forcer la priorité, mais elles
sont aussi permises si elles ne changent rien à la priorité. En cas de parenthèses imbriquées,
l'évaluation se fait de l'intérieur vers l'extérieur.
Exercice :
Evaluer les expressions suivantes en supposant
Notez chaque fois la valeur rendue comme résultat de l'expression et les valeurs des variables
dont le contenu a changé.
(1) (5*X)+2*((3*B)+4)
(2) (5*(X+2)*3)*(B+4)
(3) A == (B=5)
(4) A += (X+5)
(5) A != (C *= (-D))
(6) A *= C+(X-D)
(7) A %= D++
(8) A %= ++D
(9) (X++)*(A+C)
(10) A = X*(B<C)+Y*!(B<C)
(11) !(X-D+C)||D
(12) A&&B||!0&&C&&!D
(13) ((A&&B)||(!0&&C))&&!D
(14) ((A&&B)||!0)&&(C&&(!D))
Ecriture formatée en C
printf("<format>",<Expr1>,<Expr2>, ... )
"<format>" : format de représentation
<Expr1>,... : Variables et expressions dont les valeurs sont à représenter
La partie "<format>" est en fait une chaîne de caractères qui peut contenir :
* du texte
* des séquences d'échappement
* des spécificateurs de format
* Les spécificateurs de format indiquent la manière dont les valeurs des expressions
<Expr1..N> sont imprimées.
* La partie "<format>" contient exactement un spécificateur de format pour chaque expression
<Expr1..N>.
* Les spécificateurs de format commencent toujours par le symbole % et se terminent par un
ou deux caractères qui indiquent le format d'impression.
* Les spécificateurs de format impliquent une conversion d'un nombre en chaîne de caractères.
Ils sont encore appelés symboles de conversion.
Exemple 1 :
La suite d'instructions:
int A = 1234;
int B = 567;
printf("%d fois %d est %ld\n", A, B, (long)A*B);
va afficher sur l'écran:
1234 fois 567 est 699678
Exemple 2 :
La suite d'instructions :
char B = 'A';
printf("Le caractère %c a le code %d !\n", B, B);
va afficher sur l'écran :
Le caractère A a le code 65 !
La valeur de B est donc affichée sous deux formats différents :
%c comme caractère: A
%d comme entier relatif: 65
Remarque :
Les spécificateurs %d, %i, %u, %o, %x peuvent seulement représenter des valeurs du
type int ou unsigned int. Une valeur trop grande pour être codée dans deux octets est coupée
sans avertissement si nous utilisons %d. Pour pouvoir traiter correctement les arguments du
type long, il faut utiliser les spécificateurs %ld, %li, %lu, %lo, %lx.
b. Les entrées :
La fonction scanf est la fonction symétrique à printf ; elle nous offre pratiquement les mêmes
conversions que printf, mais en sens inverse.
Lecture formatée en C
scanf("<format>",<AdrVar1>,<AdrVar2>, ...)
"<format>" : format de lecture des données
<AdrVar1>,... : adresses des variables auxquelles les données seront attribuées
* La fonction scanf reçoit ses données à partir du fichier d'entrée standard stdin (par défaut le
clavier).
* La chaîne de format détermine comment les données reçues doivent être interprétées.
* Les données reçues correctement sont mémorisées successivement aux adresses indiquées
par <AdrVar1>,... .
* L'adresse d'une variable est indiquée par le nom de la variable précédé du signe &.
Exemple :
La suite d'instructions :