• Like
Le langage C
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Le langage C

  • 1,850 views
Published

Programmation en langage C

Programmation en langage C

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,850
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
162
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C SommairePRÉSENTATION..........................................................................................................3 QUELLE EST L’HISTOIRE DU C ?...........................................................................................3 COMMENT RÉALISER UN PROGRAMME C ?...............................................................................3 QUELLE EST LA STRUCTURE DUN PROGRAMME C ?....................................................................3 QUELLE EST LA STRUCTURE DUNE FONCTION C ?......................................................................4 Syntaxe..................................................................................................................4 Exemples................................................................................................................4 QUELS SONT LES TYPES DE DONNÉES ?..................................................................................4 QUELS SONT LES OPÉRATEURS ?..........................................................................................5 Exemple.................................................................................................................5LES COMMANDES........................................................................................................6 QUELS SONT LES TYPES DE COMMANDE ?...............................................................................6 QUELS SONT LES BOUCLES POSSIBLES ?................................................................................6 QUELS RAPPORTS ENTRE FOR ET WHILE ?..............................................................................6 QU’EST-CE QU’UN PRÉPROCESSEUR ?....................................................................................7 QU’EST-CE QU’UNE FONCTION ?..........................................................................................7 QU’EST-CE QU’UN POINTEUR ?............................................................................................7 Quels sont les fichiers supportés par le C ?.................................................................8LES ENTRÉES / SORTIES.............................................................................................9 QUELLES SONT LES COMMANDES DENTRÉES / SORTIES ?............................................................9 QUE FAIT PRINTF ?.........................................................................................................9 OBJET....................................................................................................................9 SYNTAXE................................................................................................................9 PARAMETRES..........................................................................................................9 EXEMPLE...............................................................................................................10 QUE FAIT SCANF ?........................................................................................................10 OBJET..................................................................................................................10 EXEMPLE...............................................................................................................10 PARAMETRES........................................................................................................10 EXEMPLE...............................................................................................................11 QUEL EST LE STYLE DUN PROGRAMME C ?............................................................................11LES DONNÉES...........................................................................................................12 QU’EST-CE QU’UN IDENTIFICATEUR ?...................................................................................12 COMMENT DÉCLARER DES DONNÉES ?..................................................................................12 QUELS SONT LES TYPES ?................................................................................................12 COMMENT INITIALISER DES DONNÉES ?................................................................................13LES TYPES.................................................................................................................14 QUEL EST LE DOMAINE DES TYPES ?....................................................................................14 COMMENT CONVERTIR DE TYPE ?........................................................................................14 Comment convertir de type par évaluation ?.............................................................14 Comment convertir de type par casts ?....................................................................14 QU’EST-CE QU’UN TABLEAU ?............................................................................................15 QU’EST-CE QU’UNE CHAÎNE DE CARACTÈRES ?........................................................................15 Comment traiter les chaînes ?.................................................................................15 COMMENT DÉCLARER DE NOUVEAUX TYPES ?..........................................................................15 1
  • 2. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CDE PASCAL À C..........................................................................................................17 QUELS RAPPORTS ENTRE PASCAL ET C ?..............................................................................17 QUELLES SONT LES ERREURS CLASSIQUES ?..........................................................................19 2
  • 3. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CPrésentation Quelle est l’histoire du C ? Le langage C est passé par plusieurs étapes : • Langage BCPL • Langage B • Langage C Le langage BCPL a été développé au MIT puis à luniversité de Cambridge. Le C se prête très bien à la programmation système. En effet, il est proche des caractéristiques machines. Par exemple, le système dexploitation Unix a été écrit en C. Comment réaliser un programme C ? • Ecriture du source à laide dun éditeur • Compilation du fichier source • Linkage du ou des fichiers compilés Quelle est la structure dun programme C ? • Directives de Compilation • Variables globales • Fonction principale MAIN () • Fonctions externes 3
  • 4. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CQuelle est la structure dune fonction C ? Syntaxe Nom_de_la_fonction (arg1, arg2, ...) Déclaration des arguments; { Déclaration des variables locales; .................................. Commandes composant la fonction; ................................ } Exemples main() { printf (Le carré de deux est %d,carre(2)); } carre(x) int x; { int y; y = x * x; return y; }Quels sont les types de données ? Caractères char c; Tableaux int a[10]; char ligne[80]; char page[80][25]; Réels float x; double y; Constantes 254 (entier) 02110 (octal) 0x05 (hexadécimal) 10.15 (réel) a (caractère) "exemple" (chaîne de caractères) Entiers int nombre; 4
  • 5. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CQuels sont les opérateurs ? Type Liste arithmétiques +,-,*,/,% (modulo) relationnels <,<=,>,=>,!= (différent),== (égal) logiques && (et),¦¦ (ou),! (non) Attention : = est un opérateur dassignation et == un opérateur de relation. Exemple if ((x==0) && !(y==5)) z=3; 5
  • 6. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CLes commandes Quels sont les types de commande ? Il y a deux types de commandes : • les commandes non prédéfinies Ce sont les fonctions définies dans le programme. • les commandes prédéfinies Elles sont intrinsèques au langage. Exemple : if (), while (), ... On distingue encore : • les commandes composées. Exemple : { commande1; commande2; } • les commandes simples. Exemple : commande; Quels sont les boucles possibles ? On compare les boucles While et les boucles For. while (expression) { commandes; } expression = condition de boucle for (e1;e2;e3) { commandes; } e1 = condition initiale e2 = condition de boucle e3 = incrémentation Quels rapports entre For et While ? somme=0; somme=0; i=0; for (i=0;i<=n;i=i+1) while (i<=n) somme=somme+i; { 6
  • 7. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C somme=somme+i; i=i+1; }Qu’est-ce qu’un préprocesseur ? Le pré-processeur est le langage du compilateur. Son rôle est multiple : • compilations conditionnelles • détermination des fichiers à compiler • définition de constantes • définition de macrosQu’est-ce qu’une fonction ? Les fonctions peuvent ête utilisées de façon : • procédurale (exemple : fonction (arguments);), • fonctionnelle : (exemple : val=fonction(args);). Les fonctions peuvent être récursives et peut transmettre les arguments par valeurs.Qu’est-ce qu’un pointeur ? Un pointeur est ladresse dune variable. Ses fonctions sont : • accès direct de la mémoire • allocation dynamique de la mémoire • transmission darguments par variables 7
  • 8. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CQuels sont les fichiers supportés par le C ? Les fichiers supportés par le C sont : • fichiers à accès séquentiel • fichiers à accès direct • fichiers à enregistrements bruts • fichiers à enregistrements formatés 8
  • 9. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CLes entrées / sorties Quelles sont les commandes dentrées / sorties ? La directive de compilation #include <stdio.h> est nécessaire pour pouvoir utiliser les entrées/sorties. Commande Description c=getchar(); Saisie dun caractère. putchar(c); Affichage dun caractère. printf ("Valeur de x : %d",x); Affichage dune chaîne formatée. scanf (%d",x); Saisie dun chaîne formatée. Que fait PrintF ? OBJET La fonction printf permet laffichage à lécran. SYNTAXE printf ("chaîne de contrôle",arg1,arg2,...); PARAMETRES La chaîne de contrôle est une chaîne de caractère contenant des % donnant lemplacement et le type des arguments arg1, arg2, ... ainsi que des caractères spéciaux prédéfinies affichant retours de chariot, tabulations, etc ... Types de données Description %c caractère %s chaîne de caractères %f virgule flottante %d entier de base 10 %o entier de base 8 %x entier de base 16 %e réel avec exponentielle %u entier non signé Caractères spéciaux Description n nouvelle ligne t tabulation 0 caractère nul b retour arrière 9
  • 10. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C r retour chariot f page suivante antislash EXEMPLE main() { int i,puiss; i=1; puiss=1; while (i<=10) { printf ("Deux à la puissance %d : %dn",i,puiss); i=i+1; } }Que fait ScanF ? OBJET La fonction scanf permet une saisie à lécran. EXEMPLE scanf ("chaîne de contrôle",&arg1,&arg2, ...); PARAMETRES La chaîne de contrôle est une chaîne de caractère contenant des % donnant lemplacement et le type des arguments arg1, arg2, ... (types de données) ainsi que des caractères spéciaux prédéfinies affichant retours de chariot, tabulations, etc ... Attention : Les & sont obligatoires dans un scanf. 10
  • 11. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C EXEMPLE main () { int i,puiss,n puiss=1; printf("Combien de puissances de deux ?"); scanf("%d",&n); while (i<=n) { puiss=puiss*2; printf("Deux puissance %d : %dn",i,puiss); i=i+1; } }Quel est le style dun programme C ? Le style dun programme est créé par : • le placement des tabulations (touche TAB) • le placement des accolades ({, }) • le choix des noms de variables • les commentaires (/* et */) • le placement des espaces dans les expressions Il est aussi conseillé décrire : • les constantes en majuscules, • les variables et les fonctions en minuscules. 11
  • 12. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CLes données Qu’est-ce qu’un identificateur ? Un nom de variable est un identificateur. Or un identificateur est une séquence de lettres ou de chiffres qui commence par une lettre. Les espaces interdits et les minuscules et les majuscules sont différenciées. Exemple : int num,NUM,no_1,No_1. Comment déclarer des données ? fonction (args) Déclaration des args; { Déclarations; } Le format est : Classe_de_stockage Extension_de_type Type Nom1,Nom2,... Exemple : static unsigned int compteur,somme; Quels sont les types ? Les types sont : • Int • Char • Float • Double • Tableaux • Constantes 12
  • 13. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C Les extensions de type sont : Type Description Unsigned Variables non signée, extension de ses limites. Long Force le stockage sur 32 bits, applicable uniquement sur les entiers. Short Force le stockage sur 16 bits, applicable uniquement pour les entiers. Auto Stockage local à la fonction courante, utilisation facultative Register Stockage local, dans un registre du microprocesseur si possible Extern Variable déclarée hors de la fonction; utile si utilisation de plusieurs modules Static Rend globale une variable déclarée dans une fonctionComment initialiser des données ? Les variables peuvent être initialisées lors de la déclaration. Exemple : int i=0,j=1; int a[5]={1,2,4,5,32); char message [30]="Veuillez appuyer sur une touche"; char tab[2][3]={"unn","deux"}; Les variables globales sont automatiquement initialisées à zéro. Pour les variables locales, les tableaux ne peuvent pas être initialisés de cette façon. 13
  • 14. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CLes types Quel est le domaine des types ? Types et ext. Stockage Valeurs char 8 bits 128 à 127 int 16/32 bits (cf types suivants) short 16 bits -32768 à 32767 long 32 bits -2147483648 à 2147483647 unsigned char 8 bits 0 à 255 unsigned short 16 bits 0 à 65535 unsigned long 32 bits 0 à 4294967295 float 32 bits 3.4E-38 à 3.4E+38 double 64 bits 1.7E-308 à 1.7E+308 Comment convertir de type ? Comment convertir de type par évaluation ? Le langage C permet une conversion automatique des données dans les évaluations dexpressions. Exemple : int x; x est de type double double y; x ajouté à y x=x+y; x tronqué en entier Comment convertir de type par casts ? La syntaxe est : (type)expression Ce type de conversion est utilisé essentiellement dans les fonctions. Exemple : double x; int n; x=sqrt((double)n); 14
  • 15. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CQu’est-ce qu’un tableau ? Les tableaux sont déclarés comme suit : type nom[l][m]...; Les énumérations sont utilisées pour nommer les éléments dune liste dindices. Exemple : enum color (bleu,blanc,rouge); double teinte[3]; bleu blanc rouge teinte[bleu]=0.5; teinte : ¦ 0.5 ¦ 0.6 ¦ 0.7 ¦ teinte[blanc]=0.6; teinte[rouge]=0.7; Type quelconque de donnée, tableaux statique. []... = dimensions du tableau, indiçage à partir de zéro.Qu’est-ce qu’une chaîne de caractères ? Une chaîne de caractères est un tableau de caractères. Attention : La fin dune chaîne correspond au caractère NULL (0). Il faut donc prévoir des tableaux dau moins un caractère de plus que les chaînes. Exemple : Pour la représentation en mémoire de char mot[6]="bonjour", on aurait en mémoire : mot [0] [1] [2] [3] [4] [5] [6] [7] mot : ¦ b ¦ o ¦ n ¦ j ¦ o ¦ u ¦ r ¦ 0 ¦ Comment traiter les chaînes ? Les fonctions str ... : Attention : chaine1=chaine2; est INCORRECT ! if (chaine1==chaine2)... Pour faire une telle affectation, il faut utiliser une fonction de traitement de chaînes. Exemple : strcpy (chaine_destin,chaine_source); if (strcmp(ch1,ch2)==0) printf("Chaînes identique");Comment déclarer de nouveaux types ? Déclarer un nouveau type consiste à donner un nouveau nom à un type prédéfini. Ceci est fait par la commande typedef : typedef type_prédéfini nouveau_nom_de_type; 15
  • 16. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C Exemple : typedef int LOGIQUE; /* simulation de booléen */ LOGIQUE Réponse,Trouvé; typedef double vecteur[2]; /* Simplification des déclarations */ vecteur inc; inc[0]=12; inc[1]=128; 16
  • 17. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage CDe Pascal à C Quels rapports entre Pascal et C ? On distingue : • les caractères spéciaux • les instructions • les directives Cependant, certains ordres nont pas été traduits. C Pascal " { BEGIN } END; <tab> <2 espaces> / DIV % MOD ~ XOR ! NOT >> SHR << SHL () <rien> && AND || OR comment start { comment end } == = != <> = := printf writeln scanf readln while WHILE /*...*/ {...} static id = valeur id = valeur id type type id char boolean int integer exit() halt double real typedef struct { LISTE-MEMBRE } ID id = record LISTE-MEMBRE end typedef enum {...} ID ID = (...) 17
  • 18. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C TYPEDEF type ID [RANGE] ID = array [RANGE] of TYPE TYPE-DEFINI *ID ID = ^TYPE-DEFINI TYPEDEF char ID [N] ID = string [N] FILE *ID int ID ID = text ID = text for (VAR = FIRST; VAR <= LAST; VAR+ for VAR := FIRST to LAST do +) STATEMENT STATEMENT for (VAR = FIRST; VAR >= LAST; for VAR := FIRST downto LAST do VAR--) STATEMENT statement while (COND) ordre while COND do ordre do { ORDRES } while (!COND) repeat ORDRES until COND if (COND) ORDRE; else ORDRE if COND then ORDRE else ORDRE switch (VALUE) { case V: ORDRE; case VALUE of V: ORDRE; V,U: ORDRE; break; case V: case U: ORDRE; break; else ORDRE end default: ORDRE; } inset (VAL, setof (A, B, C, -1)) VAL in [A,B,C] arcv paramcount argv[n] paramstr(n) *VAR VAR^ VAR->MEMBRE VAR^.MEMBER return exit VAR = malloc (sizeof (*VAR)) new (VAR) null nil 0xhhhh $hhhh printf("%d%nd%n.md",VAR, VAR, VAR) write(VAR,VAR:n,VAR:n:m) fprintf(FILE,"%d%d%dn", VAR, VAR, writeln(FILE,VAR,VAR,VAR) VAR) scanf("%d%nd%d",&VAR, &VAR, read(VAR,VAR,VAR) &VAR) fscanf(FILE,"%d%d%dn", &VAR, readln(FILE,VAR,VAR,VAR) &VAR, &VAR) strcpy(VAR, "string") VAR := "string" strcpy(VAR, concat(VAR1, "string")) VAR := VAR1 + "string" (strcmp(VAR,"string") == 0 VAR == "string" (strcmp(VAR,"string") < 0) VAR < "string" (strcmp("string",VAR) >= 0) "string" >= VAR return expr FUN_NAME := expr {$B+/-} #pragma standard_io(ON/OFF) {$C+/-} #pragma control_c_check (ON/OFF) {$D+/-} #pragma device_check(ON/OFF) {$Fn} #pragma max_files(n) {$Gn} #pragma input_file_buffer(n) {$I name} #include "name" {$I+/-} #pragma io_error_check (ON/OFF) {$K+/-} #pragma stack_check(ON/OFF) {$Pn} #pragma output_file_buffer (n) {$R+/-} #pragma range_check(ON/OFF) {$U+/-} #pragma user_interrupt (ON/OFF) {$V+/-} #pragma param_type_check (ON/OFF) Les listes de paramètres formels des fonctions/procédures sont traduites en déclaration de procédure séparée et déclaratios de variable de paramètre, comme dans le cas ci-dessous : 18
  • 19. Bruno Delb http://www.brunodelb.com Date : 25/03/2001 Le langage C C Pascal TYPE3 NAME (V1,V2) TYPE1 V1; TYPE2 function NAME(V1: TYPE1; V2: TYPE2): V2; TYPE3 Les procédures sont traduites en fonctions avec les types VOID en types de retour. La syntaxe littérale dun caractère spécial, comme ^C ou #nn, est traduit en ooo, où ooo est la notation octale pour le code ASCII. Des listes de paramètres vides sont ajoutées aux appels de fonction et de procédure, où elles sont nécessaires en C et pas en Pascal. Ne sont pas traduits : • Les procédures ou fonctions imbriquées qui ne peuvent pas être codées en C. • Les paramètres VAR doivent être manuellement recodés. • Les procédures daccès au fichier doivent être codées (RESET, ASSIGN, CLOSE, ...). • Les portées dans la forme VAL..VAL ne sont pas traduites en ordres CASE. • Les déclarations de type pointeur FORWARD sont traduits, mais ne seront pas compilés en C. Elles doivent être recodées manuellement. • Les types denregistrement variant doivent être retraduits en UNIONS, mais ne le sont pas. • Les opérateurs AND et OR sont toujours traduits en opérateurs logiques && et ||. • La "precidence" de lopérateur C diffère de celui du Pascal, et les différences ne sont pas traduites. • Lordre WITH nest pas traduit. • Les tableaux MEM [] et PORT [] ne sont pas traduits. Ils doivent être retranscris en appels de fonction. • Les variables absolues ne sont pas traduites (et ne peuvent probablement pas lêtre).Quelles sont les erreurs classiques ? Oubli dun point virgule. Exemple : printf("Bonjour"); Oubli du & dans un scanf. Exemple : scanf("%d",valeur); Présence de caractère dans la chaîne de contrôle dun scanf. Exemple : scanf (Entrez un nombre : %d",valeur); Ajout superflu dun point virgule. Oubli dune accolade. Oubli de la déclaration dune variable. Oubli de linsertion de stdio.h. 19