Vous êtes sur la page 1sur 64

Algorithmique et Programmation, IMA

Cours 2 : C Premier Niveau / Algorithmique

Universit Lille 1 - Polytech Lille

Notations, identificateurs
Variables et Types de base
Expressions
Constantes
Instructions
Instruction simple, instruction compose
Structures de contrle
Itrations

Notations, identificateurs
Variables et Types de base
Expressions
Constantes
Instructions

Notations

Notations algorithmiques :
Faire
action
Tantque condition;
Exemples en C :
char c ;

Identificateurs

Mot dsignant des variables, fonctions, types.

Suite de charactres, chiffres et _ (underscore) ;

Commence par une lettre

Distinction majuscule/minuscule

Convention : les variables sont en minuscule.


t o t o , a23_plouf , a89zZ_10

Notations, identificateurs
Variables et Types de base
Expressions
Constantes
Instructions

Les variables et les types, pourquoi ?

On veut stocker des informations qui ont un nom :

un entier x pour pouvoir exprimer la fonction x x + 1


une chane de caractres s qui contient le prnom de
lutilisateur

x, s peuvent prendre des valeurs diffrentes dans un


programme donn, ce seront donc des variables.
De plus, on veut quil soit interdit de stocker autre chose quun
entier pour x, autre chose quune chane pour s, on va donc
leur donner un type.

Variables

Une variable est une place en mmoire qui a un nom


(convention : en minuscules) :

Une variable a un type qui dfinit quelles oprations sont


valides (entier, boolen, rel, caractre, . . . )

Elle doit tre dclare AVANT dtre utilise.

Une dclaration de variable est la donne dun type et dun


nom (identificateur).
Important ! Dclarer une variable dun certain type interdit de
lutiliser pour stocker des informations dun autre type !

Type entier
Caractristiques :

Cod sur 2 (ou 4 octets, ou 8) : range = [215 , 215 1]


sizeof(int) rend 2 ou 4 ou 8

Oprateurs : +, *, /, %(reste modulo), << (shift)

Comparaison : !=, ==, <=

Dclaration pseudo-code
x : Entier
Dclaration en C
int x ;
//
i n t z =10; / /

declaration
declaration

simple
avec v a l e u r

initiale

Type boolen
Caractristiques :

Nexiste pas en C : int,

Reprsentation : deux valeurs entires, 0 pour faux, 1 pour


vrai (en fait toute valeur diffrente de 0) : stdbool

Oprateurs et (&&), ou (||) : paresseux de gauche droite

Dclaration pseudo-code
b : Boolen
Dclaration en C
# include < s t d b o o l . h>
bool a ;
b o o l b= f a l s e ; / / a v e c i n i t i a l i s a t i o n

Type rel

Caractristiques :

Float 4 octets et double 8.

Notation dcimale ou exponentielle (12.3, -.38, .5e-11)

Oprateurs : mmes que int sauf %. / est la division relle.

Dclaration pseudo-code
r : Rel
Dclaration en C
float x ;
/ / declaration simple
f l o a t r =0.34; / / d e c l a r a t i o n avec v a l e u r

initiale

Type caractre - 1/2

Caractristiques :

1 octet : 256 valeurs de lASCII tendu

Notation a

Caractres spciaux \n saut de ligne, \t tabulation, . . .

Dclaration pseudo-code
c : Caractre
Dclaration en C
char c ;
char c= a ;

//

declaration

simple

//

declaration

avec

valeur

initiale

Type caractre - 2/2

En C : un caractre est un entier (les valeurs de lascii), donc :


int i = a ;
c = 80;
char d ;
d= c +1;

//

fonctionne

//

ascii

//

vaut

code

aussi

80 == P

? Q!

Le savoir, mais en gnral, viter lutilisation de la conversion


implicite !

Autres types

Les types chanes de caractres, tableaux, et les types


composs seront vus plus tard.

Notations, identificateurs
Variables et Types de base
Expressions
Constantes
Instructions

Expressions, pourquoi ?

On veut pouvoir effectuer des oprations avec les variables


dun programme, par exemple :

Sommer des variables entires

Tester si une variable entire est plus petite quune autre

Les oprations numriques seront des expressions


numriques, les oprations de tests seront des expressions
boolennes.

Expression numrique, expression boolenne


Expression numrique (C/pseudo-code) :
1+x+y+41
Expression boolenne en pseudo-code :
(x<7 et y=2) ou b
Expression boolenne en C :
( x<7 && y ==2) | | b

Une expression est constitue doprateurs, de


sous-expressions, de sous-expressions de base (variable ou
constante).

Syntaxe gnrale des expressions en C

Une expression C peut tre (entre autres) :

un identificateur : toto

une constante : 42

une chane littrale : hop

une expression numrique

une expression boolenne

une expression-affectation ( venir)

en C, laffectation est une expression !

Expression-affectation, pourquoi ?

On veut stocker des valeurs numriques dans des variables


entires, des valeurs boolennes dans des variables
boolennes, . . . .
Cette opration est appele affectation.

Expression-affectation
En C :
x = 7
t [ 2 ] = 23

En pseudo-code :
x7
t[2] 23

gauche de laffectation : une expression qui doit dlivrer une


variable (par opp. constante) : une variable simple, ou un
lment de tableau.
Smantique :

Effet de bord : la valeur de droite est calcule et affecte


la variable de gauche.

(en C) La valeur de lexpression entire est cette valeur


calcule : x = (y=8) +1 est une expression dont la valeur
vaut .....

Notations, identificateurs
Variables et Types de base
Expressions
Constantes
Instructions

Quest-ce quune constante ?

Une constante est une valeur qui ne change pas tout au long
dun programme.
Cas dutilisation : crire du code paramtrique :

Nombre ditrations dun algo ;

Tailles de tableaux...

Dfinition de constantes symboliques


En pseudo-code :
Entier X : Constante(2)
En C :
# define CST v a l e u r

CST : identificateur, par convention en majuscules,

valeur : texte arbitraire,

doit occuper une ligne complte,

pas de point-virgule ; final.

Effet : dans la suite du programme, CST est remplac par


valeur (preprocessing C)

Danger des constantes symboliques


Dfinition de constante symbolique = affectation de variable !

affectation : valuation,

constante symbolique : substitution littrale.

danger de capture syntaxique.


Exemple derreur :

# define N x+y
z = 3N; / s i g n i f i e z = 3 x + y , p a s z = 3 ( x + y ) /
/

et

peuvent

aussi

etre

Solution :
# define N ( ( x ) + ( y ) )

plus

su ^ r

symboliques !

Notations, identificateurs
Variables et Types de base
Expressions
Constantes
Instructions
Instruction simple, instruction compose
Structures de contrle
Itrations

Notion dinstruction

Une instruction est une ligne de pseudo-code/C qui effectue


un calcul, qui a un effet sur les variables du programme, . . .
Dans la suite, nous allons voir diffrentes formes
dinstructions :

les instructions simples

les instructions composes

les instructions conditionnelles

les instructions itration.

Instruction simple en pseudo-code / en C


Instruction simple en C : expression suivie dun ; (point-virgule)
x=4 ;
z=42+x ;
p r i n t f ( " Hello ! " ) ;
s c a n f(%d ,& x ) ;
toto (x ) ;
w= f ( z , x ) ;

// affectation
/ / impression
/ / demande d un e n t i e r
/ / a p p e l de p r o c e d u r e ,
//

appel

de

fonction

Attention 2+4; est donc bien une instruction simple !


En pseudo-code cest pareil :
x 7;
t[2] f(z,x) ;

( cours

( cours

3)

3)

Instruction compose ou bloc - en C


Un bloc (C uniquement) (entre accolades !) permet

}
{
}

de grouper lensemble dinstructions en lui donnant la


forme syntaxique dune seule instruction (voir le IF)

de dclarer des variables accessibles uniquement


lintrieur du bloc.

int x ; / /
x=4 ;
z=42+x ;

declaration

x =2; / / e r r e u r , x n o n d e c l a r e d a n s l e b l o c

Conditionnelle - 1
Le test/la conditionnelle en pseudo code :
Si condition alors
action_alors
Fsi
Si condition alors
action_alors
Sinon
action_sinon
Fsi
condition est une expression boolenne. Si son valuation
donne "true" alors la premire action est excute, sinon cest
la deuxime.

Conditionnelle - 2
En C cela donne :
i f ( 2 x+5<=b ) p r i n t f ( b l a b l a ) ;
i f ( a>b ) max=a ; else max=b ;
i f ( a>b ) i f c<d u=v ; else i = j ;
//

le

if (a)
{
...
}

else
//
//

est

associe

teste

si

groupement

au

if

le

plus

proche

d instructions

( bloc )

a !=0

Conditionnelle - 3

Important ! : linstruction
i f ( x ==4) t =3;

est diffrente de :
i f ( x =4) t =3;

Cette dernire est fortement dconseille !

Exercices

crire les suites dinstructions pour

Afficher le maximum de deux entiers x et y

Afficher la valeur absolue de lentier z

Afficher pair ou impair selon la parit de lentier x.

Afficher le maximum de 3 entiers

Instruction ditration : POUR - 1 (version simple)

Utilisation classique avec compteur


Pour i de inf sup Faire
corps
Fpour
(augmentation implicite de 1 chaque tour).
En C cela donne :
f o r ( i = i n f ; i <=sup ; i = i + i n c )
corps

utiliser en priorit lorsquon connat le nombre ditrations

Instruction ditration : POUR - 2


Affectation

i inf

non

i sup ?

i i + inc

oui
corps de la boucle

sortie

La boucle pour est en fait plus gnrale/complexe en C.


Nous verrons quelques utilisations en TP.

Exercices Boucle POUR

crire les suites dinstructions pour

Afficher les entiers de 1 10 spars par des espaces.

Afficher les entiers de 10 1 spars par des espaces.

Ajouter les entiers de 1 100, puis afficher le rsultat.

Ajouter les entiers pairs de 6 2048, puis afficher le


rsultat.

Afficher la liste des multiples de 3 et des multiples de 5


(dans lordre croissant) infrieurs 60 ; puis un point.

Instruction ditration : TANTQUE - 1


La boucle tant que en pseudo code :
Tq condition faire
action
Ftq
En C cela donne :
while ( x >0) x=x 1;
while ( x >0) {
x=x 1;
z=z+x ;
}

Instruction ditration : TANTQUE - 2


En C :
while ( e x p r e s s i o n )
{
instructions
}

Smantique (effet) Tant que lexpression est vraie, le bloc


est excut.

Si la condition est initialement fausse, le bloc nest jamais


excut.

La condition est reteste aprs chaque tour de boucle.

Les parenthses autour de la condition sont obligatoires.

Si une seule instruction : { et } facultatifs.

Droulement dune boucle Tant que

eval expr

non

expr ?

eval expr
oui
corps de la boucle

sortie

Instruction ditration TANTQUE - exemple C

Longueur dune ligne :


l =0; c= g e t c h a r ( ) ;
while ( c ! = \ n )
{
l = l +1;
/ / a u g m e n t a t i o n du c o m p t e u r
c= g e t c h a r ( ) / / o n a v a n c e !
}

Instruction ditration : DO WHILE

Faire
action
Tantque condition;
En C cela donne :
do

c = getchar ( ) ;
while ( c ! = \ n ) ;

Algorithmique et Programmation, IMA


Cours 2b : C/Algo : Programmes

Universit Lille 1 - Polytech Lille

Structure gnrale dun programme


Exemple
Printf et Scanf
Les erreurs de compilation
Exercices

Structure gnrale dun programme


Exemple
Printf et Scanf
Les erreurs de compilation
Exercices

Syntaxe gnrale dun programme


Un programme comprend :

Une liste de dclarations (de variables globales, de types,


de structures, . . . ) : optionnelle ;

Une liste de dfinitions de fonctions (cf cours 3) :


optionnelle aussi ;

Une fonction main, unique et obligatoire, qui est le point


dentre du programme

En pseudo-code
...
Fonction main()
Imprimer(bonjour)
...
Retourner 0
FFonction

Syntaxe gnrale dun programme - C

# include < s t d i o . h> / /


// autres

defs

de

liste

fonctions

de

defs

de

fonctions

( lib )

( internes )

...
i n t main ( )
{
p r i n t f ( " Hello world ! \ n " ) ;
return 0; / / c o n v e n t i o n o b l i g a t o i r e d a n s ce c o u r s
}

Syntaxe gnrale du main - C

Le main est un cas particulier de fonction (on verra plus tard).


i n t main ( )
{
// declarations
// instructions

return 0;

Structure gnrale dun programme


Exemple
Printf et Scanf
Les erreurs de compilation
Exercices

Exemple : Anatomie de bonjour.c


# include < s t d i o . h>
i n t main ( )
{
p r i n t f ( " Bonjour t o u t l e monde ! \ n " ) ;
return 0 ;
}

Tout programme C doit contenir une fonction appele main.


Lexcution commence au dbut de main.

Exemple : Anatomie de bonjour.c


# include < s t d i o . h>
i n t main ( )
{
p r i n t f ( " Bonjour t o u t l e 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 parenthses de return sont facultatives,

le code de retour est exploitable depuis le shell.

Exemple : Anatomie de bonjour.c


# i n c l u d e < s t d i o . h>
i n t main ( )
{
p r i n t f ( " Bonjour t o u t l e monde ! \ n " ) ;
return 0 ;
}

La fonction printf permet dcrire sur lcran.

elle fait partie de la bibliothque C standard,

elle doit tre importe depuis len-tte stdio.h.

Exemple : Anatomie de bonjour.c


# include < s t d i o . h>
i n t main ( )
{
p r i n t f ( " Bonjour t o u t l e monde ! \ n " ) ;
return ( 0 ) ;
}

printf prend en argument une chane de caractres :

tape entre guillemets ",

\ sert entrer des caractres spciaux :


\n signifie retour la ligne.

Structure gnrale dun programme


Exemple
Printf et Scanf
Les erreurs de compilation
Exercices

Lire une information au clavier : scanf


La procdure scanf est bien utile pour demander des
informations lutilisateur.
int x ;
p r i n t f ( donnez un e n t i e r svp ! \ n ) ;
s c a n f ( %d ,& x ) ; / / o n p a s s e u n e a d r e s s e ( v o i r + t a r d )

Le premier argument de scanf est une chane de formattage :


"%d" si on demande un entier, "%f" si on demande un
flottant,. . .
int x , y ;
p r i n t f ( donnez deux e n t i e r s svp ! \ n ) ;
s c a n f ( %d %d ,&x ,& y ) ;

crire quelque chose sur le terminal : printf

La procdure printf est bien utile pour imprimer des


informations au clavier.
int x ;
p r i n t f ( donnez un e n t i e r svp ! \ n ) ;
s c a n f ( %d %d ,&x ,& y ) ;
p r i n t f ( maintenant x=%d e t y=%d " , x , y ) ;

Structure gnrale dun programme


Exemple
Printf et Scanf
Les erreurs de compilation
Exercices

Quest-ce que cest ?

Lorsque le fichier source nest pas correct, le compilateur


(clang, gcc) gnre des erreurs de compilation.
Remarque : les schmas derreurs sont diffrents selon les
compilateurs. Certains compilateurs rcents (clang) ont des
messages plus explicites.

Exemple derreur
1
2
3
4
5
6
7

# include < s t d i o . h>


i n t main ( )
{
p r i n t f ( " Bonjour t o u t l e monde ! \ n " )
return ( 0 ) ;
}

Compilation : clang hello.c -Wall -o bonjour


hello.c:5:27: error: expected ; after expression
printf("Hello world!\n")
^
Il manque un ;. Aucun binaire nest gnr.

Exemple davertissement
1
2
3
4
5

i n t main ( )
{
p r i n t f ( " Bonjour t o u t l e monde ! \ n " ) ;
return ( 0 ) ;
}

Compilation : clang hello.c -o bonjour


hello.c:3:3: warning: implicitly declaring library function printf
with type int (const char *, ...)
printf("Hello world!\n");
^
hello.c:3:3: note: please include the header <stdio.h> or explicitly
provide a declaration for printf
1 warning generated.

Il manque un #include <stdio.h>. Cest un avertissement


non fatal.

Les options -Wall et -Wextra

Loption -Wall attire lattention, entres autres, sur :

les oublis dimports #include,

les ambiguts syntaxiques courantes,

les incohrences de types.

La norme est trs laxiste ne considre pas ces points comme


des erreurs !
-Wextra ajoute des avertissements supplmentaires.
Toujours compiler avec -Wall au moins.

Espacement
Lespacement et les sauts de lignes sont libres.
# i n c l u d e < s t d i o . h>
i n t main
){
printf
( " toto \n"
) ; return ( 0 )
;}

Exceptions :

#include <stdio.h> doit tre sur une seule ligne,

les sauts de ligne comptent dans les chanes de


caractres.

Commentaires
Commentaires : tout ce qui est entre /* et */ est ignor.
# include < s t d i o . h> / p o u r a v o i r
/
/

la

fonction

printf

principale

i n t main ( / r i e n i c i / )
{
p r i n t f ( " toto \n" ) ;
r e t u r n ( 0 ) ; / OK /
}

Conseils : - indentez votre code (TAB sous Emacs),


- commentez votre code.

Structure gnrale dun programme


Exemple
Printf et Scanf
Les erreurs de compilation
Exercices

Exercice : programme et boucle while

crire un programme qui :

Lit (au clavier) une suite de caractres qui finit par # et qui
affiche le nombre de caractres lus diffrents de #

Lit au clavier une suite de notes entre 0 et 20 et qui


sarrte lorsque lutilisateur tape -1, puis affiche la
moyenne des notes.

Exercice : Programme

crire un programme qui :

lit 50 entiers rentrs au clavier ;

calcule la somme de tous ces entiers en affichant la


somme partielle chaque nouveau nombre lu ;

affiche la fin la somme et la moyenne de ces entiers ;

modifier le programme pour quil affiche la moyenne des


entiers strictements positifs

modifier ... entiers pairs

On a besoin dune fonction de slection

Vous aimerez peut-être aussi