Introduction au langage C - niveau.users.greyc.fr · Introduction au langage C Cours 1: Opérations...

28

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