Documente Academic
Documente Profesional
Documente Cultură
Initiation au C cours n 1
Antoine Min e
Ecole normale suprieure e
15 fvrier 2007 e
Initiation au C cours n 1
Organisation du cours
Organisation des sances e 2 heures : 45mn de cours en salle R, suivi de 1h15mn de TPs en salle S ou T, (` adapter) a Supports de cours Disponibles progressivement sur le site WEB : http://www.di.ens.fr/~mine/enseignement/prog2006 transparents, feuilles de TPs, corrections, ches thmatiques (syntaxe, compilation, dbogage, etc.) e e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Organisation du cours
Cours libre : pas dexamen, pas dECTS Le cours peut sadapter aux besoins
Initiation au C cours n 1
Programme daujourdhui
Aujourdhui gnralits culturelles e e e premier programme, compilation variables, valeurs, types, expressions achage sur lcran e conditionnelles simples boucles simples
Initiation au C cours n 1
Rep`res historiques e
Initiation au C cours n 1
Rep`res historiques e
Origine Denis Ritchie et Ken Thomson (Bell Labs) cherchent un langage pour reprogrammer UNIX de faon portable. c Le C est driv du B (1969), BCPL (1966), CPL (1960), etc. e e Historique 1969 UNIX par Ken Thomson (assembleur pour DEC PDP-7) 1972 invention du C par Denis Ritchie 1973 UNIX en C par Denis Ritchie et Ken Thomson (PDP-11) 1978 The C Programming Language : C K&R 1989 1`re normalisation : ANSI C (C89), ISO C90 e 1999 2`me normalisation : ISO C99 e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Le C aujourdhui
Le C est toujours tr`s utilis : e e syst`mes dexploitations : Linux e biblioth`ques : GNU libc e 6,8 millions de lignes 1.4 million de lignes 700 000 lignes 1 million de lignes 250 000 lignes
compilateur : gcc (C, C++, ada, etc.) Internet : Apache (serveur WEB) applications : GIMP (retouche dimages) Langages inspirs du C e compatibles : C++, Objective-C de syntaxe similaire : Java, C#, etc.
Antoine Min Ecole normale suprieure e e
Initiation au C cours n 1
Gnralits sur le C e e e
Initiation au C cours n 1
Un langage impratif e
Programme = squence de : e dclarations e instructions (soit X . . .), (actions ` eectuer), a
Paradigme impratif e Les instructions sont excutes en squence. e e e Autres paradigmes : langages logiques, orients-objets, e fonctionnels, multi-paradigmes, etc.
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Un langage structur e
Bloc = suite dinstructions dlimite par { et } e e
Structures de contrle o Contrlent lexcution dun bloc : o e conditionnelles if, else, boucles while, for, Il ne faut pas sauter dune instruction ` une autre (goto). a Les blocs et structures de contrle peuvent simbriquer. o
Initiation au C cours n 1
Un langage procdural e
Fonction = bloc dinstructions, dclare une fois, rutilisable de nombreuses fois, e e e peut prendre des arguments et retourner une valeur, a un eet (modication de la mmoire, achage ` lcran), e a e peut tre dnie dans un autre module (biblioth`ques). e e e Fonctions prdnies e e biblioth`que standard (achage, chiers, mmoire), e e biblioth`que mathmatique, etc. e e Il faut les importer par une directive spciale #include. e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Un langage dclaratif e
Variable = morceau de mmoire o` stocker une valeur e u
Attention Toute variable doit tre dclare avant dtre utilise ! e e e e e Dure de vie dune variable e variable globale, variable locale ` un bloc ou une fonction, a mmoire dynamique. e
Initiation au C cours n 1
Un langage typ e
Typage Les variables sont types. e Le type est x lors de la dclaration. e e Le type dune variable dtermine : e lensemble de valeurs possibles (entiers, ottants, etc.), la quantit de mmoire ` rserver (sizeof), e e a e le codage utilis en mmoire, e e la smantique des oprations (division /), e e permet de vrier la cohrence du programme. e e
Initiation au C cours n 1
Un langage typ e
Les types du C types entiers (int, unsigned, char, etc.), types ottant : (double, float), types composs : tableaux, enregistrements, e types pointeurs : adresse des variables en mmoire, e types de fonctions (prototypes), types dnis par lutilisateur. e
Initiation au C cours n 1
Un langage compil e
Source = chier .c contenant le texte du programme en C. Langage binaire : seul comprhensible par lordinateur. e La compilation transforme le source en binaire.
La compilation Opration complexe : e analyse syntaxique et typage, gestion des ressources tr`s bas e niveau (registres, adresses), dcoupage en instructions tr`s e e lmentaires. ee
Initiation au C cours n 1
Compilation
fichier executable (binaire a.out)
Antoine Min Ecole normale suprieure e e
Un langage compil e
Compilation et excution : e compiler une fois, excuter une ou plusieurs fois, e recompiler si le source change, recompiler pour un autre syst`me / microprocesseur. e Avantages de la compilation rapidit (excution en langage machine), e e vrication compl`te du programme (syntaxe, typage), e e optimisation globale, liens avec dautres langages, binaire autonome. Dirent des langages interprts (shell, Perl, BASIC, etc.) ! e ee
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Un langage normalis e
Normalisation impose par le succ`s du langage C : e e disponible sur des syst`mes tr`s dirents, e e e chaque constructeur fournit son compilateur. Attention : tout nest pas normalis ! e extensions non standard (dpendent du compilateur), e biblioth`ques non standard (dpendent du syst`me), e e e comportements indnis dans la norme. e Avantage de la normalisation Il est possible dcrire des programmes portables e avec un peu de soins !
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Premier programme en C
Initiation au C cours n 1
Premier programme
bonjour.c
#include <stdio.h> int main() { printf("Bonjour tout le monde!\n"); return(0); }
Eet : ache Bonjour tout le monde !, retourne le code 0 (tout sest bien pass). e
Initiation au C cours n 1
Compilation et excution e
Compilation et excution e
Compilation et excution e
Compilation et excution e
Compilation et excution e
Compilation et excution e
Si le compilateur ne dit rien, tout sest bien pass. e Un chier a.out a t cr. e e ee
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Compilation et excution e
Lancement de lexcutable. e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Compilation et excution e
Anatomie de bonjour.c
bonjour.c
#include <stdio.h> int main() { printf("Bonjour tout le monde!\n"); return(0); }
Tout programme C doit contenir une fonction appele main. e Lexcution commence au dbut de main. e e
Initiation au C cours n 1
Anatomie de bonjour.c
bonjour.c
#include <stdio.h> int main() { printf("Bonjour tout le monde!\n"); return(0); }
Par convention, la fonction main renvoie un code de retour : il est de type int (entier), la convention est de retourner 0 si tout se passe bien, les parenth`se de return sont facultatives, e le code de retour est exploitable depuis le shell.
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Anatomie de bonjour.c
bonjour.c
#include <stdio.h> int main() { printf("Bonjour tout le monde!\n"); return(0); }
La fonction printf permet dcrire sur lcran. e e elle fait partie de la biblioth`que C standard, e elle doit tre importe depuis len-tte stdio.h. e e e
Initiation au C cours n 1
Anatomie de bonjour.c
bonjour.c
#include <stdio.h> int main() { printf("Bonjour tout le monde!\n"); return(0); }
printf prend en argument une cha de caract`res : ne e tape entre guillemets ", e \ sert ` entrer des caract`res spciaux : a e e \n signie retour ` la ligne. a
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Exemple derreur
bonjour.c faux
1 2 3 4 5 6 7
Initiation au C cours n 1
Exemple derreur
bonjour.c faux
1 2 3 4 5 6 7
Rsultat e
$ gcc bonjour.c -Wall bonjour.c: In function main: bonjour.c:6: error: expected ; before return bonjour.c:7: warning : control reaches end of ...
Exemple davertissement
bonjour.c faux
1 2 3 4 5
Rsultat e
$ gcc bonjour.c -Wall bonjour.c: In function main: bonjour.c:3: warning: implicit declaration of function printf
Il manque un #include <stdio.h>. Cest un avertissement non fatal gnr par -Wall. e ee
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Initiation au C cours n 1
Espacement
Lespacement et les sauts de lignes sont libres. Exemple correct mais illisible
# include <stdio.h> int main ){ printf ("toto\n" );return(0) ;} (
Exceptions #include <stdio.h> doit tre sur une seule ligne, e les sauts de ligne comptent dans les cha nes de caract`res. e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Commentaires
Commentaires : tout ce qui est entre /* et */ est ignor. e Exemple comment e
#include <stdio.h> /* pour avoir printf */ /* la fonction principale */ int main(/* rien ici */) { printf("toto\n"); return(0); /* OK */ }
Conseils : - indentez votre code (tabluation sous Emacs), - commentez votre code.
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Variables et expressions
Initiation au C cours n 1
Dclaration de variables e
Les variables doivent tre dclares avant dtre utilises. e e e e e Syntaxe type nom; Exemple
int main() { int x; double y; x = 12; y = x/3.0; return 0; }
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Identicateurs
Identicateur = nom de variable suite de lettres, chires ou souligns : a-z A-Z 0-9 _ e commence par une lettre ou soulign, e pas daccent, despace, de ponctuation, sensible ` la casse. a Exemples int i ; int I ; /* diffrent de i */ e int Mon42emeEntier ; double nombre_flottant2 ;
Initiation au C cours n 1
Noms rservs e e
Certains noms sont rservs par le langage. e e Une variable ne doit pas porter un nom rserv. e e Noms rservs e e auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while Tout nom commenant par _ suivi dune majuscule ou de _ c Par contre, on peut utiliser : Auto, break2, _case.
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Types de base
Types courants int char double entiers machine caract`res, galement entiers e e nombres ottants double prcision e
Autres types entiers et ottants : unsigned short unsigned short long unsigned long long long unsigned long long signed char unsigned char float
Antoine Min Ecole normale suprieure e e
entiers positifs petits entiers gros entiers tr`s gros entiers e tr`s petits entiers e ottants simple prcision e
Initiation au C cours n 1
Types de base
Pourquoi tous ces types ? compromis entre capacit et occupation mmoire, e e interprtation dpendante de la machine ! e e Exemples courants int unsigned char double 32-bits : [-2147483648 ;2147483647] 32-bits : [0 ;4294967295] 8-bits : [-128 ;127] ou [0 ;255] 64-bits : magnitude 10308 ` 10308 , a 16 chires signicatifs
Initiation au C cours n 1
Aectations et expressions
Aectation = modication de la valeur dune variable Syntaxe variable = expression ;
Expression = constantes enti`res : 2, -45, a (=141), e constantes ottantes : 3.45, -4.5e-12 (=4.5 1012 ), variables, oprateurs, e parenth`ses : (, ). e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Oprateurs arithmtiques e e
Oprateurs courants e + * / % addition soustraction (binaire) ou ngation (unaire) e multiplication division (enti`re ou ottante) e reste de la division (enti`re) e
Priorits e Comme en mathmatiques : e *, /, % prioritaires sur + et -, si mme priorit, on value de gauche ` droite, e e e a en cas de doute, mettre des parenth`ses. e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Smantique de laectation e
Deux tapes : e valuation de lexpression en un entier ou ottant, e utilise la valeur courante des variables, stockage du rsultat dans la variable destination. e Exemple
x = 2+3*4; /* ici, x vaut 14 */ y = 2*(x+1); /* ici, y vaut 30 */ x = x - 1; /* ici, x vaut 13 */
Initiation au C cours n 1
Initiation au C cours n 1
La fonction printf
printf permet dacher : du texte, la valeur dexpressions enti`res ou ottantes. e Arguments de printf printf prend un nombre arbitraire darguments : 1er argument : texte ` acher, a arguments suivants : expressions ` valuer. ae Les arguments sont spars par une virgule , e e Eet Dans le texte, chaque %x est remplac par la valeur dun argument. e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Utilisation de printf
Exemple
#include <stdio.h> int main() { int x = 12; printf("x = %i\n",x); return 0; }
Rsultat : e
x = 12
Initiation au C cours n 1
Utilisation de printf
Exemple
#include <stdio.h> int main() { int x = 12; printf("1/3 vaut %f mais 3x vaut %i\n\n", 1.0/3.0, 3*x); return 0; }
Rsultat : e
1/3 vaut 0.333333 mais 3x vaut 36
Initiation au C cours n 1
ligne suivante
Conditionnelles
Initiation au C cours n 1
La construction if
Syntaxe if (expression) { instructions }
Eet : lexpression est value, e e le bloc suivant nest excut que si lexpression est vraie. e e Raccourcis : si il ny a quune instruction : if (expression) instruction ; Les parenth`ses sont par contre obligatoires ! e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Expressions boolennes e
On peut comparer la valeur de deux expressions arithmtiques : e Oprateurs de comparaison e == != > < >= <= gal e dirent e strictement suprieur e strictement infrieur e suprieur ou gal e e infrieur ou gal e e
Exemple if (x>2*y) { x=2*y ; y=0 ; } La priorit des oprateurs de comparaison est plus faible que celle e e des oprateurs arithmtiques. e e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Oprateurs boolens e e
On peut combiner la valeur de vrit dexpressions boolennes : e e e Oprateurs boolens e e || && ! ou logique et logique ngation logique e (binaire) (binaire) (unaire)
Conseil : utilisez des parenth`ses pour ne pas vous tromper dans e les priorits. e
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
La construction if else
Syntaxe if (expression) { instructions1 } else { instructions2 } Eet : lexpression est value, e e le premier bloc est excut si lexpression est vraie, e e le deuxi`me bloc est excut si lexpression est fausse. e e e
Initiation au C cours n 1
Exemple de test
Exemple
if (age>99) printf("vous ^tes trop vieux!\n"); e else { if (age<18) printf("interdit aux mineurs!\n"); else printf("vous avez %i ans\n",age); }
Initiation au C cours n 1
y.c: In function main: y.c:4: warning: statement with no effect y.c:5: warning: suggest parentheses around assignment used as tru
Antoine Min Ecole normale suprieure e e Initiation au C cours n 1
Boucles while
Initiation au C cours n 1
La construction while
Syntaxe while (expression) { instructions }
Eet : tant que expression est vraie, le bloc est excut. e e Notes : si la condition est initialement fausse, le bloc nest jamais excut, e e la condition est re-teste apr`s chaque tour de boucle, e e les { } sont facultatives. mais les ( ) obligatoires.
Initiation au C cours n 1
non
sortie
Initiation au C cours n 1
Exemple de boucle
Exemple
#include <stdio.h> int main() { int pommes = 10; while (pommes > 0) { printf("jai %i pommes dans ma pochette\n", pommes); pommes = pommes-1; } printf("je nai plus de pommes!\n"); return 0; }
Initiation au C cours n 1