Cours de programmation en langage C (Norme ANSI) Soutien C et Java Anthony REY – 4A AL Cours N°1
Plan du cours I) Introduction II) Les bases du langage III) Exercices Historique Mais c’est quoi un langage de programmation ? Processus classique de compilation II) Les bases du langage Le programme minimal utile Compiler et exécuter un programme Les variables et les types Les conditions et introduction à la logique booléenne La portée des variables III) Exercices
I) Introduction Historique : Crée en 1972 : Procédural et Impératif Dennis Ritchie Bell Labs Procédural et Impératif 2ème langage le plus utilisé au monde (Index TIOBE 2015) Java est 1er, le C l’était en 2014 Les deux langages se trouvent souvent au coude à coude TIOBE est un Indicateur un peu mauvais toutefois (Analyse des recherches web)
I) Introduction Bas niveau Plusieurs normes : Utilisé en embarqué Programmation système UNIX Programmation réseaux Plusieurs normes : C84 C ANSI (C90) C99 C11
I) Introduction Mais c’est quoi un langage de programmation ? Communication Homme > Machine Transformation code source > code machine Interprété (Python, PHP…) Compilé (C / C++ / Haskell…) Hybride (Java / C#…) Attention : Le HTML n’est pas un langage de programmation !! C’est un langage d’organisation de l’information basé sur SGML
I) Introduction Processus classique de compilation : Compilation Conversion of C source to assembler and assembly into object code Link edition It joins the different object code needed by the final executable
I) Introduction Aller plus loin : Processus classique de compilation : Compilation conditionnelle (make) Assembleur et assemblage Dynamic et static linking
II) Les bases du C Le programme minimal utile : #include <stdio.h> int main(int argc , char** argv) { printf(« Hello, world ! »): return 0; }
II) Les bases du C Directives de préprocesseur 2) Fonction main Inclusion des définitions de fonctions voulues pour le programme Commencent par # Ici, on veut les entrées-sorties standards (stdio.h) 2) Fonction main Point d’entrée d’un programme C A recopier telle qu’elle ( à quelques exceptions près pour ses paramètres) La totalité du programme tiens entre les accolades qui sont le corps de la fonction En C tout les blocs de codes sont délimités par des accolades On expliquera en détail le reste lorsque l’on verra les fonctions.
II) Les bases du C Une ligne contenant une instruction fini par un ; Les blocs sont délimités par des accolades Les messages d’erreurs à l’exécution sont cryptiques Les erreurs de linker sont cryptiques
Compiler et exécuter un programme Compilation de base : GCC : GNU C Compiler gcc [-ansi] main.c [-o nom_du_binaire] [-l librairies] Exécuter un programme : ./nom_du_binaire Attention : sudo chmod +x Un programme doit être marqué comme exécutable sur linux (C’est le cas par défaut avec les sorties de GCC)
Les variables et les types Zone mémoire qui contient une et une seule valeur Mémoire : Meuble de rangement Variable Tiroir On déclare une variable puis on initialise celle-ci avec une valeur Attention : Une variable est forcement déclarée (sinon il n’y a pas de variable…), mais pas forcement initialisée Lire une variable non initialisée résulte en une valeur complètement imprévisible !
Les variables et les types Exemple simplifié : Déclaration suivie d’une affectation : ma_variable = 10; Déclaration simple : ma_variable; « = » est appelé opérateur d’affectation
Les variables et les types Leur taille en mémoire dépends de l’implémentation sous-jacente… Les types principaux : Entiers Int Short (short int) Long (long int) Flottants (chiffres à virgule) Float (simple précision) Double (double précision) Caractères Char
Les variables et les types Signe : Signed Unsigned Aller plus loin ? https://fr.wikibooks.org/wiki/Programmation_C/Types_de_bas e
Les variables et les types Exemple complet : Déclaration typée suivie d’une affectation : int ma_variable = 10; Déclaration simple : unsigned short ma_variable; Déclaration suivie d’une affectation : float ma_variable; float ma_variable = 10.0;
Les conditions et introduction à la logique booléenne Branchement logique On embranche si l’évaluation de la condition est VRAI Vrai / Faux (Logique booléenne) Pas de variables booléennes en C ANSI : Les entiers 1 et 0 sont utilisés 1 = TRUE 0 = FALSE On a les principales conditions suivantes en C : If / else / else if
Les conditions et introduction à la logique booléenne Opérateurs : == test d’égalité Renvoie 1 si égal, 0 sinon ! (non) Négation Inverse la valeur booléenne évaluée != test d’inégalité Renvoie 1 si NON égal, 0 sinon
Les conditions et introduction à la logique booléenne Petit aparté : Les // dénotent un commentaire (uni-ligne) Un commentaire n’est pas pris en compte par le compilateur, son but est de documenter le code pour le / les développeur(s) On peut créer des commentaires sur plusieurs lignes avec /* blah blah */
Les conditions et introduction à la logique booléenne Exemple : If ( 1 == 1 ) // évalué à 1 lors de l’éxecution du programme { //1 == 1 est toujours VRAI //Donc on rentre dans la condition } If ( 1 != 1 ) // évalué à 0 lors de l’éxecution du programme //1 != 1 est toujours FAUX //Donc on ne rentre pas
Les conditions et introduction à la logique booléenne On peut aussi encapsuler la condition pour lui appliquer l’opérateur de négation : If ( !(1 == 1) ) // 1 == 1 vaut 1 qui est transformé en 0 par ! { //C’est donc équivalent à 1 != 1 //On ne rentre pas dans la condition }
Les conditions et introduction à la logique booléenne Utilisation de else et de else if : /* On peut omettre les accolades si il n’y a qu’un seul bloc dans le bloc de code de la condition. Mais c’est toutefois une mauvaise pratique. */ if( 1 == 0 ) // n’y rentrera jamais (on compare des constantes) else if( 1 == 2 ) else if( 1 == 3 ) else // Cas par défaut si rien n’a matché plus haut
Les conditions et introduction à la logique booléenne Combiner des expressions booléennes vous avez dit ? Les opérateur ET et OU : && (et) || (ou) Ex Je veux > (un chat à poils longs) && (qui n’est pas roux) Quels sont les cas qui sont répondent à ce problème ?
Les conditions et introduction à la logique booléenne 1
Les conditions et introduction à la logique booléenne OU : OU 1
Les conditions et introduction à la logique booléenne Exemple : If ( 1 == 1 && 2 == 2 ) //On rentre car : // 2 == 2 est evalué à 1 // 1 == 1 est évalué à 1 // (1 && 1) > 1 //Idéalement on isolera les composantes de la condition pour plus de lisibilité // (1 == 1) && (2 == 2)
Les conditions et introduction à la logique booléenne Soit un chaton nommé « Fluffy » : Je veux > (un chat à poils longs) && (qui n’est pas roux) (cat_p == poils_longs) && (cat_c != roux) (1) && (1) 1 TRUE Cet adorable chaton correspond aux critères de notre condition booléenne
La portée des variables Une variable n’est accessible que dans le bloc de déclaration et ses sous blocs : int main (…) { int i = 0; If( i == 0) int j = 2; printf(« %d », i); //OK printf(« %d », j); //OK } printf(« %d », i); // OK printf(« %d », j); //plante à la compil, détruite lors de la sortie du if return 0;
III) Exercices Afficher le message suivant : Salut ! [saut de ligne] Ca va ? Créer une variable entière, lui affecter 10 et l’afficher Créer un flottant, lui affecter 10.0 et l’afficher Créer une variable entière lui affecter 10, si cette variable vaut 10, afficher : « Ma variable vaut 10 » Reprendre ce programme et affecter 11 à votre variable, gérez l’autre cas (« ma variable ne vaut pas 10 »)