IFEL cycle2-Activité 2.
Algorithmique et programmation en C
Les structures de base
Auteur du document: Marwa HADDAD-ISSTE borj cedria
Ce document est disponible sous licence creative commons (CC BY-NC-SA
3.0)
REL de références :
Url ref1 : Url ref2 :
[Link] [Link]
emodules/al00macours1/co/al00macours1_web ced-algorithms-fall-
.html 2008/view[Link]
Licence creative commons de type 3: (CC BY- rses/advanced-algorithms-fall-2008/view
Creative Commons Attribution-
NC-SA 3.0) NonCommercial-ShareAlike 3.0
Karine Zampieri, Stéphane Rivière, Béatrice
Amerein-Soltner- L'Algorithmique [al]
version 28 décembre 2016
Erik Demaine, and Srinivas Devadas. 6.006
[Link] License: Creative
Introduction to Algorithms. Fall 2011.
Commons BY-NC-SA. Massachusetts Institute of Technology: MIT
OpenCourseWare, [Link]
License: Creative Commons BY-NC-SA.
Le langage
Séquence de lettres (A...Z, a...z) avec ou sans accents, de chiffres (0...9) ou du caractère souligné (_).
Il doit commencer par une lettre ou un souligné.
Variables, types et valeurs
Variable
Elément informatique ´ qu’un algorithme peut manipuler. Décrite par :
• Un nom ou identifiant unique qui la désigne.
• Un type qui définit de quel « genre » est l’information associée.
• Une valeur qui peut évoluer au cours de l’algorithme mais qui doit respecter le type.
Types intégrés
• Entier : Pour les entiers relatifs Z
Il y a cinq types de variables entières (« integer » en anglais) : char ; short int, ou plus
simplement short ; int ; long int, ou long ; long long int, ou long long (ce type a été ajouté
depuis la norme C99).
Comme évoqué en introduction, le type caractère char est particulier, et sera étudié en détail
EN C
plus bas. Les types entiers peuvent prendre les modificateurs signed et unsigned qui
permettent respectivement d'obtenir un type signé ou non signé. Ces modificateurs ne
changent pas la taille des types. Le langage ne définit pas exactement leurs tailles, mais définit
un domaine de valeurs minimal pour chacun.
• Réel : Pour les nombres réels (approchés) R
Les nombres réels ne pouvant tous être représentés, sont approximés par des nombres à
virgule flottante. Comme dans le cas des entiers, il existe plusieurs types de nombre à virgule
EN C
flottante. En voici la liste triée par précision croissante : float ; double ; long double
• Booléen : Le domaine B des booléens (vrai / faux)
Le langage (jusqu'à la norme C99) ne fournit pas de type booléen. La valeur entière 0 prend la
valeur de vérité faux et toutes les autres valeurs entières prennent la valeur de vérité vrai. La
norme C99 a introduit le type _Bool, qui peut contenir les valeurs 0 et 1. Elle a aussi ajouté
l'en-tête , qui définit le type bool qui est un raccourci pour _Bool, et les valeurs true et
EN C
false[12] .
Nota : toute expression utilisant des opérateurs booléens (voir opérateurs), retourne 1 si
l'expression est vraie et 0 si elle est fausse, ce qui rend quasiment inutile l'usage du type
booléen.
• Caractère : Le domaine A des caractères (alphanumériques et ponctuations)
À l'origine, le type permettant de représenter un caractère est char. Même si un char n'est plus
toujours suffisant aujourd'hui pour représenter un caractère quelconque. Ce type est un peu
plus particulier que les autres, d'une part parce que sa taille définit l'unité de calcul pour les
EN C
quantités de mémoire (et donc pour les tailles des autres types du langage) et d'autre part son
domaine de valeur peut grandement varier de manière relativement inattendue. Par définition,
la taille du type char, notée sizeof(char), vaut toujours 1.
Cependant, il faut faire attention : contrairement à ce qu'on pense souvent, un char au sens du
C ne vaut pas toujours un octet. Il occupera au minimum 8 bits, mais il existe des
architectures, relativement spécialisées il est vrai, ayant des char de 9 bits, de 16 bits, voire
plus. Même si, dans une large majorité des cas, les compilateurs utilisent des char de 8 bits, à
la fois par simplicité (les machines modernes fonctionnent généralement en 8, 16, 32 ou 64
bits) et pour éviter des problèmes de portabilité de code (beaucoup de codes C existants
reposent sur l'hypothèse que les char font 8 bits, et risqueraient de ne pas marcher sur une
autre architecture)
• Chaîne : Le domaine T des textes (suite de caractères)
Une chaîne de caractère, comme son nom l'indique, est une suite de caractères avec la
particularité d'avoir un caractère nul (0) à la fin. Une chaîne de caractère est en fait
EN C
implémentée en C avec un tableau de type char. Ce chapitre vous donne les rudiments sur les
chaînes de caractère pour une première approche. Pour en savoir plus sur les rares fonctions
de chaînes de caractères
Littéraux
Entier : Suite de chiffres éventuellement préfixé par un signe (+ ou −). • Réel : S’écrit en notation
décimale ou en notation scientifique. • Booléen : Identifie le Vrai et le Faux. • Caractère : Se place
entre quotes ('). • Chaîne : Se place entre guillemets (").
Déclarations
Déclaration de variables
Cette ligne déclare les variables var1, var2, ..., varN de type T. Une variable est dite locale, si elle est
définie à l'intérieur d'une fonction et globale si définie en-dehors. Par exemple en C:
Définition de constante
Structure générale d’un algorithme
Les instructions se terminent par un point-virgule (;), on peut placer autant d'instructions
que l'on veut sur une même ligne (même si ce n'est pas conseillé pour la lisibilité du code).
Les blocs d'instructions commencent par une accolade ouvrante ({) et se terminent par une
accolade fermante (}). Les instructions doivent obligatoirement être déclarées dans une
fonction : il est impossible d'appeler une fonction pour initialiser une variable globale par
exemple (contrairement au C++).
EN C
Saisie de données
Saisir(nomVar1, nomVar2, ..., nomVarN)
Affichage de résultats
AfficherSS(expr1,expr2,...,exprN) // SANS retour de ligne
Afficher(expr1,expr2,...,exprN) // AVEC retour de ligne
Affectation interne
nomVar <- expression
Expressions algébriques
Expression, opérandes, opérateurs
Eventuellement accompagnés de parenthèses, une ´ expression est une séquence « bien formée » (au
sens de la syntaxe) d’opérandes (valeurs littérales, variables ou expressions) et d’opérateurs destinée à
l’évaluation.
Opérateurs arithmétiques
Ordre de priorité des opérateurs arithmétiques
Comme en mathématique : 1. Les opérateurs unaires (+, -) (priorité la plus élevée) Structures de base
[bs] - Résumé de cours 4 2. L’opérateur d’exponentiation (^) (s’il existe) 3. Les opérateurs
multiplicatifs (*, /, div, mod) 4. Les opérateurs additifs (+, -) (priorité la plus basse) La règle
d’associativité s’applique en cas d’ambigüité entre opérateurs du même ordre de priorité.