Introduction au langage C - niveau.users.greyc.fr · Introduction au langage C Cours 1: Opérations...
Transcript of Introduction au langage C - niveau.users.greyc.fr · Introduction au langage C Cours 1: Opérations...
Introduction au langage CCours 1: Opérations de base et premier programme
Alexis Lechervy, Alexandre Niveau
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 1 / 24
Les premiers pas
Sommaire
1 Les premiers pas
2 Les opérations de bases
3 Les fonctions
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 1 / 24
Les premiers pas
Un peu d'histoire
Les origines
Inventé en 1972 dans les laboratoires de Bell par Dennis Ritchie et KenThompson.
Même époque que la création d'Unix.
En 1978 le langage est "stabilisé". Il est décrit en détail dans The CProgramming Language ( Dennis Ritchie et Brian Kernighan).
Les di�érentes normalisation du langage
1978 première description complète du langage.
1990 l'organisme de normalisation international adopte la norme C90 ou CISO.
1999 nouvelle version de la norme ISO : C99. Cette nouvelle norme introduitdes nouveautés notamment sur les tableaux de taille variable, les déclarationsmélangées avec les instructions, les fonctions inline, le support avancé desnombres �ottants, la syntaxe des commentaires ...
2011 ISO rati�e une nouvelle version la C11.Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 2 / 24
Les premiers pas
Avantages et défauts du langage C
Avantages
L'un des langages les plus utilisés.
Utilise un standard ouvert.
Existe depuis longtemps, beaucoup d'informaticien le connaisse et l'utilise.Littérature et bibliothèque abondante.
Sa syntaxe est reprise dans de nombreux autres langages (C++, Java, PHP).
Proche de la machine, permet de tirer partie au mieux des capacités de lamachine.
Permet l'optimisation précise du code (nombre de cycle, consommation,utilisation mémoire...).
N'est pas contraint par un architecture matérielle.
Permet la réalisation de logiciel embarqué.
Permet de créer des logiciels autonome, sans support d'exécution oubibliothèque spéci�que.
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 3 / 24
Les premiers pas
Avantages et défauts du langage C
Inconvénients
Pas de véri�cation durant l'exécution. Détection d'erreur n'est possible qu'àla compilation.
Pas ou peu de concept de programmation Objet ou de gestion d'exception.
Un support limité de la généricité.
Programme généralement non portable à une autre architecture.
Pas de gestion haut niveau de la mémoire. La gestion de la mémoire estsouvent source de bug et nécessite une attention particulière.
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 4 / 24
Les premiers pas
Les di�érentes phases d'un programme C
Écriture du programme
Lors de cette étape vous rédigez le code de votre application en respectant lasyntaxe du langage C. Vous enregistrez vos �chiers avec une extension de type .c(�chier de code) ou .h (�chier d'entête).
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 5 / 24
Les premiers pas
Les di�érentes phases d'un programme C
Compilation
Vous transformez votre code en langage "compréhensible" pour la machine. Lorsde cette phase, vous créez un �chier exécutable permettant de lancer votreapplication.
Syntaxe
Nom de l'exécutable par défaut : transforme nom_du_�chier_de_code.c ena.out,
gcc nom_du_�chier_de_code.c
transforme nom_du_�chier_de_code.c en mon_exe,
gcc -o mon_exe nom_du_�chier_de_code.c
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 6 / 24
Les premiers pas
Activer les warnings
Idée
Par défaut le compilateur gcc est très permissif : il accepte de compiler desprogrammes qui sont manifestement incorrects (utilisation d'une variable noninitialisée, par exemple)
Il peut néanmoins vous avertir que votre programme a des problèmes. . .maisil faut lui demander de le faire !
Options de gcc
Pour activer les warnings de gcc, il faut utiliser le �ag −Wall (= tous leswarnings les plus courants)
On peut être un peu plus strict en ajoutant −Wpedantic, qui véri�e que lecode est conforme avec le standard ISO C
La commande conseillée est donc :
gcc -Wall -Wpedantic toto.c
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 7 / 24
Les premiers pas
Les di�érentes phases d'un programme C
Exécution
Vous pouvez lancer votre programme sur la machine et l'utiliser.
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 8 / 24
Les premiers pas
Notre premier programme
Objectif
Programme a�chant Hello World à l'écran.
Le code
Utilisation/Exécution
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 9 / 24
Les opérations de bases
Sommaire
1 Les premiers pas
2 Les opérations de basesLes structures de contrôle
3 Les fonctions
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 9 / 24
Les opérations de bases
Structure d'un �chier
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 10 / 24
Les opérations de bases
Typage
Les variables
Le langage C est un langage typé. Tout les variables ont un type. La déclarationest obligatoire avant toute utilisation.
Déclaration et a�ectation de variable
type nom_de_variable ;nom_de_variable = valeur ;
Types élémentaires
Type caractère : (unsigned, signed) char
Type entier : (unsigned, signed) short, int, long
Type réel : (unsigned, signed) �oat, double, long double
Pas de type boolean, utiliser 0 pour faux et un valeur non nulle pour vrai.
Pas de type chaine de caractère.
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 11 / 24
Les opérations de bases
A�chage
A�chage
A�chage d'une chaine de caractère avec retour chariot :
puts("Hello") ;printf("Hello \n") ;
A�chage d'un entier i
printf("L'entier est %d\n",i) ;A�chage d'un entier i non signé
printf("L'entier est %u\n",i) ;A�chage d'un entier court (short) i non signé
printf("L'entier est %hu\n",i) ;A�chage d'un réel x
printf("Le réel est %f\n",x) ;A�chage d'un réel x avec quatre chi�res avant la virgule et 2 après
printf("Le réel est %4.2f\n",x) ;
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 12 / 24
Les opérations de bases
Lecture clavier
Lecture du clavier
Lecture d'un caractère
char car ;scanf("%c",&car) ;
Lecture d'un entier
int i ;scanf("%d",&i) ;
Lecture d'un réel
�oat x ;scanf("%f",&x) ;
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 13 / 24
Les opérations de bases Les structures de contrôle
Instruction conditionnelle
Le if
int a=5;
if( a>2){
printf("a>2\n");
}
else{
printf("a<=2\n");
}
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 14 / 24
Les opérations de bases Les structures de contrôle
Instruction d'aiguillage
Le switch
int a;
scanf("%d" ,&a);
switch(a){
case 0: printf("..0..\n");
case 1: printf("..1..\n");
break;
case 2: printf("..2..\n");
break;
default: printf("Autres\n");
}
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 15 / 24
Les opérations de bases Les structures de contrôle
Instruction d'aiguillage
Exemple d'exécution du switch précédent
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 16 / 24
Les opérations de bases Les structures de contrôle
Instruction de boucle
Le while
Le code s'exécute tant que la condition est vrai.
int i=0;
while(i<5){
puts("Tapez un nombre >= 5");
scanf("%d" ,&i);
}
Exemple d'exécution
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 17 / 24
Les opérations de bases Les structures de contrôle
Instruction de boucle
Le do while
Pareil que le while mais le code est exécuter une fois avant de faire le test.
int i=13;
do{
puts("Tapez un nombre >= 5");
scanf("%d" ,&i);
}while(i<5);
Exemple d'exécution
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 18 / 24
Les opérations de bases Les structures de contrôle
Instruction de boucle
Le for
E�ectue des instructions un nombre de fois donnés.
int i;
for(i=0 ; i<10 ; i++){
printf("%d ",i);
}
printf("\n");
Exemple d'exécution
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 19 / 24
Les opérations de bases Les structures de contrôle
Instruction de débranchement
break
Permet de quitter une boucle avant la réalisation du test de �nalité.
continue
Permet d'aller directement à la �n des instructions de la boucle et de passer àl'itération suivante.
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 20 / 24
Les opérations de bases Les structures de contrôle
Opération de base
Opération mathématique de base
+ - * / % ++ - -
Opération relationnelle
== != > < <= >=
Opération logique
&& || !
Opération bits à bits
� � & ∧ | ∼
A�ectation composé
+= -= *= /= %= �= �= &= ∧= |=
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 21 / 24
Les fonctions
Sommaire
1 Les premiers pas
2 Les opérations de bases
3 Les fonctions
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 21 / 24
Les fonctions
Les fonctions
Dé�nition d'une fonction
type_de_retour nom_fct(type_arg1 nom_arg1 ,...){
instruction;
instruction;
...
}
Exemple
double puissance(int a,int n){
double r=1;
int i;
for(i=0 ; i<n ; i++)
r*=a;
return r;
}
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 22 / 24
Les fonctions
Les fonctions
Remarques sur les fonctions
On peut n'avoir aucun argument d'entrée, il faut alors préciser void dans lesparenthèses
On peut n'avoir aucune valeur de retour, le type de retour est alors void.
On ne peut pas avoir plus d'une valeur de retour.
la fonction principale du programme est la fonction
int main (int argc, char *argv[])
Portée des variables
Une variable est visible uniquement à l'intérieur du bloc (paire d'accolades)dans lequel elle a été déclarée.
Une variable hors de toute fonction, déclaré avant tout bloc d'instruction, estglobale. On pourra l'utiliser depuis n'importe quel bloc d'instruction.
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 23 / 24
Les fonctions
Déclaration des fonctions
Principe
Dans un programme C, l'ordre des fonctions est important : il est déconseilléd'utiliser une fonction avant de l'avoir dé�nie
Pour éviter les problèmes, il faut déclarer les fonctions au début
Pour déclarer une fonction on écrit son prototype (ou signature) suivi d'unpoint-virgule
Exemple
void fct1(void);
int main(void) {
fct1 ();
}
void fct1(void) {
puts("coucou je suis fct1\n");
}Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 24 / 24
Les fonctions
Les �chiers d'entête
Principe
Le �chier d'entête (.h) contient la déclaration des fonctions.
Le �chier .c contient le code est inclue le �chier d'entête à l'aide del'instruction (#include "nom_du_�chier.h").
Exemple
#ifndef FICHIER_H
#define FICHIER_H
void fct1(void);
void fct2(int a,float b);
int fct3(float a);
#endif
Alexis Lechervy, Alexandre Niveau (UNICAEN) Introduction au langage C 25 / 24