Langage C - polytechgii.free.frpolytechgii.free.fr/Cours/Premiere%20Ann%E9e/Langage%20C/cours… ·...

32
Langage C Rémy Bulot http://remy.bulot.perso.esil.univmed.fr

Transcript of Langage C - polytechgii.free.frpolytechgii.free.fr/Cours/Premiere%20Ann%E9e/Langage%20C/cours… ·...

Langage C

Rémy Bulot

http://remy.bulot.perso.esil.univmed.fr

1. Notion d'algorithme et de programme2. Premiers pas en C3. Type entier, réel, constantes et variables4. Les entrées-sorties simplifiées5. Expressions arithmétiques et logiques6. Syntaxe des instructions7. Les entrées-sorties8. Quelques compléments commodes9. Variables indexées (tableaux)10. Adresse et pointeur11. Les Fonctions12. Les objets structurés13. Les fichiers

I.Notion d’algorithme

Une recette de cuisine

Ingrédients

Recette

Plat

Résoudre un problème :• Données ?• Résultat souhaité ?

algorithme

Algorithme

Données (entrées)

Algorithme

Résultat (sorties)

Un premier algorithme très général

Liste des tâches : suite d’instructions de haut niveau à réaliser de manière séquentielle

Recette de la quiche lorraine

I. Faire revenir les lardons dans une poele

II. Étaler la pâte dans le moule

III. Mettre les lardons sur la pâte

IV. Mélanger les œufs et la crème

V. Verser le mélange sur les lardons

VI. Mettre au four 30mn thermostat 7

Raffinement

Recette de la quiche lorraine

I. Faire revenir les lardons dans une poele

II. Étaler la pâte dans le moule

III. étaler les lardons sur la pâte

IV. Mélanger les œufs et la crème

1. Casser les œufs dans un bol

2. Ajouter la crème

3. mélanger

V. Verser le mélange sur les lardons

VI. Mettre au four 30mn thermostat 7

Conception structurée

Instructions• affectation• instruction alternative• répétition

Recette de la quiche lorraine

I. Faire revenir les lardons dans une poele

II. Étaler la pâte dans le moule

III. étaler les lardons sur la pâte

IV. Mélanger les œufs et la crème

1. Casser les œufs dans un bol

2. Bol <- crème3. si les lardons ne sont pas salés alors bol <- sel4. tant que non-homogène, faire battre le mélange

V. Verser le mélange sur les lardons

VI. Mettre au four 30mn thermostat 7

Une recette de cuisine Algorithme• ingrédients (farine, lait, …) données• récipients (plat, bol, …) variables• récipients intermédiaires variables intermédiaires• outils (couteaux, rape, …) opérateurs• instructions simples (verser, …) affectation, …• instructions conditionnelles si-alors-sinon• instructions répétitives tant-que-faire

• résolution d’une équation du seconde degré• l’algorithme mystérieux

soient a, b, r réels ;lire a et b ;r <- 0 ;

tant-que (b ≠ 0)si (b est pair) b <- b/2 ;

a <- 2*a;

sinon b <- b-1;

r <- r+a;

fin sifin tant-queecrire r

II.Premiers pas en C

Le C a été mis au point par D.Ritchie et B.W.Kernighan

• Au début 70

• Pour écrire un système d'exploitation portable : UNIX

• Le succès d'UNIX a entraîné celui de C :

• un des langages le plus utilisé (gestion des réseaux, …).

La première définition de ce langage a été donnée dans leur livre« The C programming language ».

Ce langage a été normalisé en 1989: C-ANSI(American National Standards Institute)

Quelques caractéristiques du langages :• programme de taille moyenne• programmation de bas niveau (proche assembleur)• comme de haut niveau (programmation structurée)• indépendant de la machine (portabilité)• C original et C-ANSI (1989) plus fiable au niveau syntaxique

Ce cours : un sous-ensemble du C-ANSI

Quelques remarques sur la syntaxe du C :commentaires /* coucou */identificateurs : lettre [lettre, chiffre] , 31 caractères max,

maj. ≠ min., caractère '_'

Mots réservés du langage :• une trentaine• tous en minuscule• consultez la fiche résumé de C

Etapes entre la conception d’un algo. et l’exécution d’un programme ?

1. L’algorithme : « recette » décrite en pseudo-français2. Source : transcription de l’algorithme dans le langage

- fichier construit sous un éditeur de texte3. Compilation : traduction du source (lisible) en code (suite de 0 et 1)4. Edition de lien (link) : compléter le code avec des fonctions

prédéfinies (comme printf , sin , …)

Exécutable : résultat de cette séquence d’opérations

un fichier source est une succession d'un nbre quelconqued'éléments indépendants :• directives pour le préprocesseur (#----)• construction de types• déclaration de variables et de fcts externes• définition de variables (réservation d'espace mémoire)• définition de fcts dont main()

Mon premier programme C : le fichier salut.c

#include <stdio.h>

int main(void){ printf("coucou !\n");

return 0 ;}

Sous UNIX :Compiler avec la commande

gcc –o salut salut.c

lancer l’exécution du code en tapant./salut

III.Types, constantes et variables

Une variable :• nom d’un emplacement mémoire (1, 2, 4 octets ou plus)• le contenu peut changer dans le temps.• contient toujours quelque chose !!!

Un type :• définit un codage particulier de l'information• dans un emplacement de taille préfixéeex : compter en binaire sur 3 bits :

Une variable est toujours définie au moins une fois par un type

7 types de base en C :• char : petit entier codé sur 1 octet (entre –128 et 127)• short : entier de taille moyenne sur 2 octets (de –32768 à 32767)• int : entier dont la taille est liée au processeur (mot machine)• long : grand entier sur 4 octets (jusqu’à 10 chiffres)• float : réel avec 7 chiffres significatifs• double : réel de grande précision• long double : réel de très grande précision

Le qualificatif unsigned : redéfinit l’intervalle de validité à partir de 0Un unsigned short est borné par 0 et 65536Un unsigned char est borné par 0 et 256

Le C ne fait pas de différence entre les petits entiers et les caractèresqui sont aussi déclarés comme des char (code ASCII)

Les constantes :

les caractères alphanumérique-étendus‘a‘ ‘A‘ ‘1‘ ‘ ‘ ‘@‘ ‘\n‘

les entiers0 1 32767

les flottants0. 3.14 0.314e1 0.314E1

ATTENTION : 1 est différent de ‘1‘

Définition d'une variable :

Objectif :• réserver un emplacement mémoire• adapté au codage de l’information• associer un nom (identificateur) à cette emplacement mémoire

Syntaxe :• type var-init [, var-init] ;• var-init

-> variable-> variable = expression constante

• variable-> identificateur

Exemple :

float x;int i, j=1, k ;char c1='1', c2 = 2 , c3='a'+1;

IV.Entrées/sorties simplifiées

Écriture : variable (binaire) -> écran (représentation graphique)Lecture : clavier (suite de touches) -> variable (binaire)

Message : suite de caractèresprintf(“A que ”) ;

printf(“coucou !\n”) ;

Caractère : char c ;

printf(“%c”, c) ;

scanf(“%c”, &c) ;c=getchar() ;

Petit entier : char c ;

printf(“%d”, c) ;

scanf(“%d”, &c) ;

Moralité : les petits entiers et les caractères ne se distinguent quepar leur convention de lecture/écriture

Entier :int i ;scanf(“%d”, &i) ;printf(“%d”, i) ;

Réel :float r ;scanf(“%f”, &r) ;printf(“%f”, r) ;

scanf(“%e”, &r) ;printf(“%e”, r) ;

V.Expressions

Syntaxe :expression-> expression opérateurBinaire expression-> opérateurUnaire expression-> (expression)-> variable

Opérateurs et expressions arithmétiques

+ - *

/ division réelle ou entière…() factorisation% modulo- moins unaire (ex : -2)

Ex : 1+2*3-5*(1+4)priorité classique entre les opérateurs

Opérateurs et expressions logiques• deux valeurs possibles : vrai ou faux.• 0 représente faux• tout ce qui n'est pas nul représente vrai

• opérateurs de comparaison== égal ? (danger de confusion avec l’affectation)!= différent ?< et <= inférieur et inférieur ou égal ?> et >= supérieur et supérieur ou égal ?

• opérateurs logiques! négation&& ET logique|| OU logique

Priorités entre opérateurs

• Une voiture rouge et bleue ou verte ?• i==1 || j%2 ?

15 ( ) ->

14 ! <-

13 * / % ->

12 + - ->

10 < <= > >= ->

9 == != ->

5 && ->

4 || ->

3 ?: ->

2 = <-

Opérateur d’affectation

Syntaxe simplifiée : variable = expressionex : i = k+11. l’expression est évaluée2. le résultat est copié dans la variable

= est un opérateur !!!

Syntaxe : variable = [variable = ] expressionex : i = j = k+1 ;

1. l’expression k+1 est évaluée2. (j = k+1) est une expression qui vaut son membre droit3. parenthèses implicites :

a = b = c = expr. <=> a = (b = (c = expr.))