p. 1 Langage C Licence 1 SRIT KONAN HYACINTHE p. 2 2 Programme minimal Entrons

p. 1 Langage C Licence 1 SRIT KONAN HYACINTHE p. 2 2 Programme minimal Entrons directement dans le vif du sujet avec un premier programme écrit en C, le fameux Hello World : #include <stdio.h> int main(void) { puts("Hello World\n"); getchar(); return 0; } OK Pour tester ce programme, vous devez l’entrer dans l’edi, le sauvegarder (par exemple avec le nom hello.c), le compiler, faire l’édition de liens, de manière à obtenir un fichier qui se nommera probablement hello.exe. Ce dernier fichier est un programme exécutable que vous pouvez lancer depuis l’edi ou depuis le gestionnaire de fichiers en double-cliquant dessus. Contrairement à Python, C est un langage qui nécessite une phase de compilation et d’édition de liens. Ces étapes transforment le ou les fichiers sources en programme exécutable (le .exe sous Windows). Le programme exécutable obtenu est indépendant (aux bibliothèques liées dynamiquement près) et fonctionnel. Pour s’en servir, l’utilisateur final n’a besoin que de cet exécutable (et de quelques bibliothèques éventuellement) : il n’a plus besoin du compilateur C. Notre programme d’exemple comporte une directive à l’adresse du préprocesseur (c’est la ligne qui commence par #), et une fonction. Cette fonction est spéciale, c’est la fonction main de notre programme : son point d’entrée. La fonction main ne comporte que 3 lignes : — la première affiche Hello World sur l’écran ; — la seconde marque une pause jusqu’à ce que l’utilisateur ait pressé une touche ; — la dernière quitte en envoyant un code de retour, 0, qui informe le système d’exploitation que tout s’est bien déroulé. Les fonctions puts et getchar ne sont pas des instructions du C, mais des fonctions qui appartiennent à la bibliothèque standard. Précisément ces deux fonctions font partie de la bibliothèque standard d’entrées/sorties. La première ligne indique au préprocesseur dans quel fichier trouver les prototypes des fonctions utilisées dans le programme. Le fichier stdio.h est un fichier d’en-tête (c’est le sens du .h (header)) qui contient diverses déclarations, dont celles des fonctions de la bibliothèque standard d’entrées-sorties dont font partie les fonctions puts et getchar. Les programmes que nous écrirons suivront toujours le même squelette : /* Directives préprocesseur */ #include .... #define ... /* Fonctions annexes */ /* Fonction principale */ int main(void) { ... return 0; } p. 3 Chaque fichier source comporte généralement des directives au préproceseur (commençant par #), éventuellement des déclarations globales, puis des fonctions, et (très souvent à la fin) la fonction principale main qui renvoie un entier, par convention 0 pour indiquer que tout s’est bien déroulé. 3 Variables Comme dans la plupart des langages, le C utilise des variables. Les règles de nommage sont sans surprise (consultez la norme pour les connaître), et le C est sensible à la casse. En C, le typage est (assez) fort et statique. Cela signifie que les conversions de types doivent être (souvent) explicites, et que le type des variables est fixé à leur déclaration. Un point important par rapport à la programmation Python est justement la déclaration préalable des variables. Voici un exemple : int a,b; float c; char d=’E’; a=5; b=6; c=1.01; Les trois premières lignes permettent de déclarer les deux variables entières (int) a et b, le nombre à virgule (float) c et le caractère (char) d. Au passage, nous voyons qu’on peut affecter une variable au moment de sa déclaration (c’est le cas pour d). Affichage du contenu des variables On utilise généralement la fonction printf pour afficher le contenu des variables. Cette fonction est un peu difficile à utiliser. On lui passe en paramètre le format, qui décrit ce qui va être affiché, et les variables, qui seront substituées aux chaînes de la forme %... dans le format. Les formats les plus utilisés sont %c pour les caractères, %i (ou %d) pour les entiers, %f pour les nombres à virgule (on peut restreindre le nombre de décimales à afficher) et %s pour les chaînes de caractères. #include <stdio.h> int main(void) { int a = 5; float p = 3.1415926535; char c = 'P'; printf("a vaut %i et p vaut %f\n", a, p); printf("p vaut environ %.4f\n", p); printf("C contient %c\n", c); getchar(); return 0; } OK p. 4 4 Tests, boucles et fonctions 4.1 Tests Les tests utilisent la construction ordinaire if, avec un else facultatif. Les blocs sont matérialisés par des accolades. La condition doit être entre parenthèses. Indentation En Python, les blocs étaient matérialisés par l’indentation du code. Puisqu’en C, les blocs sont matérialisés par des accolades, l’indentation n’est plus nécessaire. Il est néanmoins habituel d’indenter proprement le code pour en faciliter la lecture. En particulier, il est peu probable que le chargé de tp accepte (et il aura bien raison) de relire un programme C mal indenté... #include <stdio.h> int main(void) { int a=1001; if (a%2==0) { printf("%d est pair \n", a); } else { printf("%d est impair \n", a); } getchar(); return 0; } OK La seconde partie de l’instruction (else) est facultative. 4.2 Boucles La boucle while est très ordinaire (comme avec un if, la condition est entre parenthèses) : #include <stdio.h> int main(void) { int a=100; int c=-1; while (a!=c) { printf("Entrez un nb entre 0 et 99 "); scanf("%d",&c); if (c>a) printf("Votre nombre est trop grand\n"); if (c<a) printf("Votre nombre est trop petit\n"); } printf("Bravo;"); getchar(); return 0; } OK p. 5 La ligne scanf("%d",&c) permet à l’utilisateur d’entrer un nombre entier, qui sera stocké dans la variable c. 4.3 Fonctions Lors de l’écriture d’une fonction, il faut préciser le type des paramètres, et le type de valeur de retour : int pgdc (int a, int b) { if (a==b) return a; if (b>a) {return pgdc(b%a,a); } else {return pgdc(a%b,b); } } p. 6 Chapitre II Le C, plus en détails 1 Éléments de syntaxe 1. les instructions simples se terminent par un point virgule ; 2. les conditions sont entre parenthèses (dans les if et while) 3. les blocs qui suivent if, else, switch, while, for ou la définition d’une fonction (dès qu’il est nécessaire de limiter un bloc d’instructions) sont placés entre accolades. Le bloc fait généralement partie de l’instruction, si bien qu’on ne trouve pas de ; avant une accolade ouvrante. 2 Types Le C possède plusieurs types numériques, et différentes longueurs de codages. Nous allons les énumérer ici : Les entiers peuvent être signés ou non. Par défaut, ils sont signés. Ils existent en plusieurs longueurs de codage : short, int, long et long long. Chacun de ces types peut être préfixé par unsigned pour indiquer que les nombres ne sont pas signés. La longueur du codage dépend du type de machine utilisé. Le programme suivant utilise l’opérateur sizeof pour indiquer la taille en octet de ces types : #include<stdio.h> int main(void) { printf("%d %d %d %d\n", sizeof(short), sizeof(int), sizeof(long), sizeof(long long)); return 0; } OK Sur la machine de test, ce programme affiche : 2 4 4 8 Les constantes entières peuvent être données en décimal (43), en hexadécimal (0x2B) ou en binaire (0b101011). Les nombres à virgule sont représentés par un codage en virgule flottante (norme ieee 754) en simple (float) ou double (double) précision. Les constantes virgule flottante peuvent être représentées en notation scientifique (2.54e-5) ou non (0.00023) mais doivent toujours comporter un point décimal (42 est un entier alors que 42.0 ou même 42. Et .37 sont des nombres à virgule flottante). Les caractères (type char), sont codés sur un octet (par défaut signé, mais qui peut être précédé de unsigned. Il y a équivalence entre un caractère et son code ascii. Selon qu’on l’affiche (avec printf par exemple) comme un nombre ou comme un caractère, la même variable de type char donnera le code ascii (un nombre) ou le caractère. Les constantes caractères sont notées entre guillemets simples ’. Les caractères spéciaux peuvent être codés par des \ : ’\n’ pour un retour chariot par exemple. Quelques caractères spéciaux sont mentionnés dans la table ci-dessous. Les caractères peuvent aussi être donnés sous la forme de leur code ascii en décimal : ’\65’ ou en hexadécimal : ’\x41’ pour ’A’ par exemple. p. 7 Quelques caractères spéciaux en C \a bip \b backspace \n saut de ligne \t tabulation \\ antislash \’ guillemet simple Booléens et complexes La norme C99 a ajouté les deux types complex (avec les variantes float et double) et bool. Les seules constantes de type bool étant true et false. 2.1 Conversions implicites et cast Les opérations arithmétiques fonctionnent sur des opérandes de même type (int avec int ou float avec float par exemple). Il est pourtant possible d’additionner un int et un float. Pour cela, le compilateur réalise des conversions de types implicites, uniquement lorsque c’est nécessaire. Les données sont converties de telle manière que la valeur soit dégradée le moins possible (voir plus loin pour un exemple où la donnée est dégradée). Par exemple, convertir un float en int entraîne des modifications de valeur (généralement) plus gênante que convertir un int en float. La hiérarchie de conversion est la suivante : int uploads/Litterature/ licence-1-srit 1 .pdf

  • 25
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager