Vous êtes sur la page 1sur 17

Instructions En C, toute instruction simple est termine par un point-virgule ; (mme si elle se trouve en dernire position dans un bloc

d'instructions). Par exemple:

printf("hello, world\n");

Initialisation des variables


Initialisation En C, il est possible d'initialiser les variables lors de leur dclaration:

int MAX = 1023; char TAB = '\t'; float X = 1.05e-4;


const En utilisant l'attribut const, nous pouvons indiquer que la valeur d'une variable ne change pas au cours d'un programme:

const int MAX = 767; const double e = 2.71828182845905; const char NEWLINE = '\n';

Les types entiers


Avant de pouvoir utiliser une variable, nous devons nous intresser deux caractristiques de son type numrique: (1) le domaine des valeurs admissibles (2) le nombre d'octets qui est rserv pour une variable Le tableau suivant rsume les caractristiques des types numriques entiers de C : dfinition description domaine min domaine max nombre d'octets

char short int long

caractre entier court entier standard entier long

-128 -32768 -32768 -2147483648

127 32767 32767 2147483647

1 2 2 4

- char : caractre Une variable du type char peut contenir une valeur entre -128 et 127 et elle peut subir les mmes oprations que les variables du type short, int ou long. - int : entier standard Sur chaque machine, le type int est le type de base pour les calculs avec les entiers. Le codage des variables du type int est donc dpendant de la machine. Sur les IBM-PC sous MS-DOS, une variable du type intest code dans deux octets.

- short : entier court Le type short est en gnral cod dans 2 octets. Comme une variable int occupe aussi 2 octets sur notre systme, le type short devient seulement ncessaire, si on veut utiliser le mme programme sur d'autres machines, sur lesquelles le type standard des entiers n'est pas forcment 2 octets. - Les modificateurs signed/unsigned: Si on ajoute le prfixe unsigned la dfinition d'un type de variables entires, les domaines des variables sont dplacs comme suit: dfinition description domaine min domaine max nombre d'octets

unsigned unsigned unsigned unsigned


Remarques

char short int long

caractre entier court entier standard entier long

0 0 0 0

255 65535 65535 4294967295

1 2 2 4

1. Le calcul avec des entiers dfinis comme unsigned correspond l'arithmtique modulo 2n. Ainsi, en utilisant une variable X du type unsigned short, nous obtenons le rsultat suivant:

Affectation : X = 65500 + 100 Rsultat : X = 64 /* [+216] */

2. Par dfaut, les types entiers short, int, long sont munis d'un signe. Le type par dfaut de char est dpendant du compilateur et peut tre signed ou unsigned. Ainsi, l'attribut signed a seulement un sens en liaison avec char et peut forcer la machine utiliser la reprsentation des caractres avec signe (qui n'est cependant pas trs usuelle). 3. Les valeurs limites des differents types sont indiques dans le fichier header <limits.h>. 4. (Ajoute de Francois Donato frdonato@hotmail.com) En principe, on peut dire que

sizeof(short) <= sizeof(int) <= sizeof(long)


Ainsi sur certaine architecture on peut avoir

short = 2 octets, int = 2 octets, long = 4 octets


et sur d'autre

short = 2 octets, int = 4 octets, long = 4 octets

( Il sera intressant de voir l'implementation dans un environnement 64 bits! )

Les types rationnels

En informatique, les rationnels sont souvent appels des 'flottants'. Ce terme vient de 'en virgule flottante' et trouve sa racine dans la notation traditionnelle des rationnels:

<+|-> <mantisse> * 10<exposant> <+|-> est le signe positif ou ngatif du nombre <mantisse> est un dcimal positif avec un seul chiffre devant la virgule. <exposant> est un entier relatif Exemples

3.14159*100 4.3001*10321

1.25003*10-12 -1.5*103

En C, nous avons le choix entre trois types de rationnels: float, double et long double. Dans le tableau ci-dessous, vous trouverez leurs caractristiques: min et max reprsentent les valeurs minimales et maximales positives. Les valeurs ngatives peuvent varier dans les mmes domaines. mantisse indique le nombre de chiffres significatifs de la mantisse. dfinition prcision mantisse domaine min domaine max

nombre d'octets

float simple 6 double double 15 long double suppl. 19


Remarque avance

3.4 * 10-38 3.4 * 1038 4 1.7 * 10-308 1.7 * 10308 8 3.4 * 10-4932 1.1 * 104932 10

Les dtails de l'implmentation sont indiqus dans le fichier header <float.h>.

Exercice 3.1
Quel(s) type(s) numrique(s) pouvez-vous utiliser pour les groupes de nombres suivants? Dressez un tableau et marquez le choix le plus conomique:

(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13)

1 12 4 0 -125 1 12 -4 0 250 1 12 4 0 250 1 12 -4 0.5 125 -220 32000 0 -3000005.000000001 410 50000 2 410 50000 -2 3.14159265 1015 2*107 10000001 2*10-7 10000001 -1.05*1050 0.0001 305.122212 0 -12

La dclaration des variables simples


Maintenant que nous connaissons les principaux types de variables, il nous faut encore la syntaxe pour leur dclaration: Dclaration de variables en langage algorithmique

<Type> <NomVar1>,<NomVar2>,...,<NomVarN>
Dclaration de variables en C

<Type> <NomVar1>,<NomVar2>,...,<NomVarN>;
Prenons quelques dclarations du langage descriptif,

entier COMPTEUR,X,Y rel HAUTEUR,LARGEUR,MASSE_ATOMIQUE caractre TOUCHE boolen T_PRESSEE


et traduisons-les en des dclarations du langage C :

int compteur,X,Y; float hauteur,largeur; double masse_atomique; char touche; int t_pressee;
Langage algorithmique --> C En gnral. nous avons le choix entre plusieurs types et nous devons trouver celui qui correspond le mieux au domaine et aux valeurs traiter. Voici quelques rgles gnrales qui concernent la traduction des dclarations de variables numriques du langage algorithmique en C : - La syntaxe des dclarations en C ressemble celle du langage algorithmique. Remarquez quand mme les points-virgules la fin des dclarations en C. entier : Nous avons le choix entre tous les types entiers (inclusivement char) dans leurs formes signed ou unsigned. Si les nombres deviennent trop grands pour unsigned long, il faut utiliser un type rationnel (p.ex: double) rel : Nous pouvons choisir entre les trois types rationnels en observant non seulement la grandeur maximale de l'exposant, mais plus encore le nombre de chiffres significatifs de la mantisse. caractre : Toute variable du type char peut contenir un (seul) caractre. En C, il faut toujours tre conscient que ce 'caractre' n'est autre chose qu'un nombre correspondant un code (ici: code ASCII). Ce nombre peut tre intgr dans toute sorte d'oprations algbriques ou logiques ... chane : En C il n'existe pas de type spcial pour chanes de caractres. Les moyens de traiter les chanes de caractres seront dcrits au chapitre 8. boolen : En C il n'existe pas de type spcial pour variables boolennes. Tous les types de variables numriques peuvent tre utiliss pour exprimer des oprations logiques:

valeur logique faux <=> valeur numrique zro valeur logique vrai <=> toute valeur diffrente de zro Si l'utilisation d'une variable boolenne est indispensable, le plus naturel sera d'utiliser une variable du type int. Les oprations logiques en C retournent toujours des rsultats du type int: 0 pour faux 1 pour vrai

Exercice 3.2
Traduisez les dclarations suivantes en C, sachant que vous travaillerez dans les ensembles de nombres indiqus. Choisissez les types les plus conomiques, sans perdre en prcision.

(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)

entier entier entier rel rel entier entier entier entier boolen

COMPTEUR X,Y MESURE SURFACE1 SURFACE2 N1 N2 N3 N4 TROUVE

{0 ,..., 300} {-120 ,..., 100} {-10 ,..., 104} {0.5 ,..., 150075} {-12 ,..., 1500750.5} {0 ,..., 210} {-47 ,..., 47} {0 ,..., 326} {-1280 ,..., 1285} {vrai, faux}

Les oprateurs connus


Avant de nous lancer dans les 'spcialits' du langage C, retrouvons d'abord les oprateurs correspondant ceux que nous connaissons dj en langage descriptif et en Pascal. Oprateurs arithmtiques

+ * / %

addition soustraction multiplication division (entire et rationnelle!) modulo (reste d'une div. entire)

Oprateurs logiques

&& et logique (and) || ou logique (or) ! ngation logique (not)


Oprateurs de comparaison

== !=

gal diffrent de

<, <=, >, >= plus petit que, ...


Oprations logiques Les rsultats des oprations de comparaison et des oprateurs logiques sont du type int: - la valeur 1 correspond la valeur boolenne vrai - la valeur 0 correspond la valeur boolenne faux Les oprateurs logiques considrent toute valeur diffrente de zro comme vrai et zro comme faux:

32 && 2.3 !65.34 0||!(32 > 12)

1 0 0

- Les oprateurs d'affectation


Oprateurs d'affectation En pratique, nous retrouvons souvent des affectations comme:

i = i + 2
En C, nous utiliserons plutt la formulation plus compacte:

i += 2
L'oprateur += est un oprateur d'affectation. Pour la plupart des expressions de la forme: expr1 = (expr1) op (expr2) il existe une formulation quivalente qui utilise un oprateur d'affectation: expr1 op= expr2 Oprateurs d'affectation

+= -= *= /= %=

ajouter diminuer de multiplier par diviser par modulo

Avantages La formulation avec un oprateur d'affectation est souvent plus prs de la logique humaine: Un homme dirait <<Ajoute 2 I>> plutt que <<Ajoute 2 I et cris le rsultat dans I>>

Les oprateurs d'affectation peuvent aider le compilateur gnrer un code plus efficient parce que expr1 n'est valu qu'une seule fois. Les oprateurs d'affectation deviennent le plus intressant si expr1 est une expression complexe. Ceci peut tre le cas si nous calculons avec des tableaux. L'expression:

Element[n*i+j] = Element[n*i+j] * x[j]


peut tre formule de manire plus efficiente et plus claire:

Element[n*i+j] *= x[j]

- Oprateurs d'incrmentation et de dcrmentation


Les affectations les plus frquentes sont du type:

I = I + 1

et

I = I - 1

En C, nous disposons de deux oprateurs inhabituels pour ces affectations:

I++ ou ++I pour l'incrmentation (augmentation d'une unit) I-- ou --I pour la dcrmentation (diminution d'une unit)
Les oprateurs ++ et -- sont employs dans les cas suivants: incrmenter/dcrmenter une variable (p.ex: dans une boucle). Dans ce cas il n'y a pas de diffrence entre la notation prfixe (++I --I) et la notation postfixe (I++ I--). incrmenter/dcrmenter une variable et en mme temps affecter sa valeur une autre variable. Dans ce cas, nous devons choisir entre la notation prfixe et postfixe:

X X X X

= = = =

I++ I-++I --I

passe d'abord la valeur de I X et incrmente aprs passe d'abord la valeur de I X et dcrmente aprs incrmente d'abord et passe la valeur incrmente X dcrmente d'abord et passe la valeur dcrmente X

Exemple Supposons que la valeur de N est gal 5: Incrm. postfixe: X = N++; Rsultat: N=6 et X=5 Incrm. prfixe: X = ++N; Rsultat: N=6 et X=6 Evaluer les expressions suivantes en supposant

a=20 (1) (2) (3) (4) (5) (6)

b=5

c=-10

d=2

x=12

y=15

Notez chaque fois la valeur rendue comme rsultat de l'expression et les valeurs des variables dont le contenu a chang.

(5*X)+2*((3*B)+4) (5*(X+2)*3)*(B+4) A == (B=5) A += (X+5) A != (C *= (-D)) A *= C+(X-D)

(7) (8) (9) (10) (11) (12) (13) (14)

A %= D++ A %= ++D (X++)*(A+C) A = X*(B<C)+Y*!(B<C) !(X-D+C)||D A&&B||!0&&C&&!D ((A&&B)||(!0&&C))&&!D ((A&&B)||!0)&&(C&&(!D))

Exercice 3.6
Eliminer les parenthses superflues dans les expressions de l'exercice 3.5.

Les fonctions arithmtiques standard


Les fonctions suivantes sont prdfinies dans la bibliothque standard <math>. Pour pouvoir les utiliser, le programme doit contenir la ligne: #include <math.h> Type des donnes Les arguments et les rsultats des fonctions arithmtiques sont du type double. Fonctions arithmtiques COMMANDE C EXPLICATION exp(X) fonction exponentielle log(X) logarithme naturel log10(X) logarithme base 10 pow(X,Y) X exposant Y sqrt(X) racine carre de X fabs(X) valeur absolue de X floor(X) arrondir en moins ceil(X) arrondir en plus fmod(X,Y) reste rationnel de X/Y (mme signe que X) LANG. ALGORITHMIQUE

eX ln(X), X>0 log10(X), X>0 XY pour X>0 |X| int(X)


pour X diffrent de 0

sin(X) cos(X) tan(X) sinus, cosinus, tangente de X asin(X) acos(X) atan(X) arcsin(X), arccos(X), arctan(X) sinh(X) cosh(X) tanh(X) sinus, cosinus, tangente hyperboliques de X Remarque avance La liste des fonctions ne cite que les fonctions les plus courantes. Pour la liste complte et les constantes prdfinies voir <math.h>.

Exercice 3.7
Essayez le programme suivant et modifiez-le de faon ce qu'il affiche: * A B, * l'hypotnuse d'un triangle rectangle de cts A et B, * la tangente de A en n'utilisant que les fonctions sin et cos, * la valeur arrondie (en moins) de A/B, * la valeur arrondie (en moins) trois positions derrire la virgule de A/B.

#include <stdio.h> main() { double A; double B; double RES; /* Saisie de A et B */ printf("Introduire la valeur scanf("%lf", &A); printf("Introduire la valeur scanf("%lf", &B); /* Calcul */ RES = A*A; /* Affichage du rsultat */ printf("Le carr de A est %f /* Calcul */ RES = B*B; /* Affichage du rsultat */ printf("Le carr de B est %f return 0; }

pour A : "); pour B : ");

\n", RES);

\n", RES);

Exercice 4.4
Ecrire un programme qui permute et affiche les valeurs de trois variables A, B, C de type entier qui sont entres au clavier : A ==> B , B ==> C , C ==> A

Exercice 4.5
Ecrire un programme qui affiche le quotient et le reste de la division entire de deux nombres entiers entrs au clavier ainsi que le quotient rationnel de ces nombres.

Exercice 4.6
Ecrire un programme qui affiche la rsistance quivalente trois rsistances R1, R2, R3 (type double), - si les rsistances sont branches en srie: Rsr = R1+R2+R3 - si les rsistances sont branches en parallle:

Exercice 4.7
Ecrire un programme qui calcule et affiche l'aire d'un triangle dont il faut entrer les longueurs des trois cts. Utilisez la formule : S2 = P(P-A)(P-B)(P-C) o A, B, C sont les longueurs des trois cts (type int) et P le demi-primtre du triangle.

Exercice 4.8
Ecrire un programme qui calcule la somme de quatre nombres du type int entrs au clavier, a) en se servant de 5 variables (mmorisation des valeurs entres) b) en se servant de 2 variables (perte des valeurs entres)

Exercice 4.9
a) Ecrire un programme qui calcule le prix TTC (type double) d'un article partir du prix net (type int) et du pourcentage de TVA (type int) ajouter. Utilisez la formule suivante en faisant attention aux priorits et aux conversions automatiques de type:

b) Ecrire un programme qui calcule le prix net d'un article (type double) partir du prix TTC (type double) et du pourcentage de TVA (type int) qui a t ajoute. (Dduisez la formule du calcul de celle indique ci-dessus)

Exercice 4.10
Ecrire un programme qui calcule et affiche la distance DIST (type double) entre deux points A et B du plan dont les coordonnes (XA, YA) et (XB, YB) sont entres au clavier comme entiers.

Exercices d'application
Exercice 5.3 Exercice 5.4 Exercice 5.5 Exercice 5.6 Exercice 5.7

Exercice 5.3
Ecrivez un programme qui lit trois valeurs entires (A, B et C) au clavier et qui affiche la plus grande des trois valeurs, en utilisant: a) if - else et une variable d'aide MAX b) if - else if - ... - else sans variable d'aide c) les oprateurs conditionnels et une variable d'aide MAX d) les oprateurs conditionnels sans variable d'aide

Exercice 5.4
Ecrivez un programme qui lit trois valeurs entires (A, B et C) au clavier. Triez les valeurs A, B et C par changes successifs de manire obtenir : val(A) val(B) val(C) Affichez les trois valeurs.

Exercice 5.5
Ecrivez un programme qui lit deux valeurs entires (A et B) au clavier et qui affiche le signe du produit de A et B sans faire la multiplication.

Exercice 5.6
Ecrivez un programme qui lit deux valeurs entires (A et B) au clavier et qui affiche le signe de la somme de A et B sans faire l'addition. Utilisez la fonction fabs de la bibliothque <math>.

Exercice 5.7
Ecrivez un programme qui calcule les solutions relles d'une quation du second degr ax2+bx+c = 0 en discutant la formule:

Utilisez une variable d'aide D pour la valeur du discriminant b2-4ac et dcidez l'aide de D, si l'quation a une, deux ou aucune solution relle. Utilisez des variables du type int pour A, B et C. Considrez aussi les cas o l'utilisateur entre des valeurs nulles pour A; pour A et B; pour A, B et C. Affichez les rsultats et les messages ncessaires sur l'cran.

#include <math.h>

Une fois que c'est fait, vous pouvez utiliser toutes les fonctions de cette bibliothque. J'ai justement l'intention de vous les prsenter Bon, comme il y a beaucoup de fonctions je ne peux pas faire la liste complte ici. D'une part a vous ferait trop assimiler, et d'autre part mes pauvres petits doigts auraient fondu avant la fin de l'criture du chapitre Je vais donc me contenter des principales fonctions, c'est--dire celles qui me semblent les plus importantes. Vous n'avez peut-tre pas tous le niveau en maths pour comprendre ce que font ces fonctions. Si c'est votre cas, pas d'inquitude. Lisez juste, cela ne vous pnalisera pas pour la suite. Ceci tant, je vous offre un petit conseil gratuit : soyez attentifs en cours de maths, on dirait pas comme a mais en fait a finit par servir

fabs
Cette fonction retourne la valeur absolue d'un nombre, c'est--dire |x| (c'est la notation mathmatique). La valeur absolue d'un nombre est sa valeur positive : Si vous donnez -53 la fonction, elle vous renvoie 53. Si vous donnez 53 la fonction, elle vous renvoie 53.

En bref, elle renvoie toujours l'quivalent positif du nombre que vous lui donnez. Code : C -

1 2 3

Slectionner double absolu = 0, nombre=-27; absolu = fabs(nombre); // absolu vaudra 27

Cette fonction renvoie un double, donc votre variable "absolu" doit tre de type double. Il existe aussi une fonction similaire appele "abs", situe dans "stdlib.h" cette fois. La fonction "abs" marche de la mme manire, sauf qu'elle utilise des entiers (int). Elle renvoie donc un nombre entier de type int et non un double comme fabs.

ceil
Cette fonction renvoie le premier nombre entier aprs le nombre dcimal qu'on lui donne. C'est une sorte d'arrondi. On arrondit en fait toujours au nombre entier suprieur.

Par exemple, si on lui donne 26.512, la fonction renvoie 27. Cette fonction s'utilise de la mme manire, et renvoie un double : Code : C -

1 2 3

Slectionner double dessus = 0, nombre = 52.71; dessus = ceil(nombre); // dessus vaudra 53

floor
C'est l'inverse de la fonction prcdente, cette fois elle renvoie le nombre directement en dessous. Si vous lui donnez 37.91, la fonction floor vous renverra donc 37

pow
Cette fonction permet de calculer la puissance d'un nombre. Vous devez lui indiquer 2 valeurs : le nombre, et la puissance laquelle vous voulez l'lever. Voici le schma de la fonction : Code : C -

Slectionner pow(nombre, puissance);

Par exemple, "2 puissance 3" (que l'on crit habituellement 2^3 sur un ordinateur), c'est le calcul 2 * 2 * 2, ce qui fait 8 : Code : C -

1 2 3

Slectionner double resultat = 0, nombre = 2; resultat = pow(nombre, 3); // resultat vaudra 2^3 = 8

Vous pouvez donc utiliser cette fonction pour calculer des carrs. Il suffit d'indiquer une puissance de 2.

sqrt
Cette fonction calcule la racine carre d'un nombre. Elle renvoie un double. Code : C -

1 2 3

Slectionner double resultat = 0, nombre = 100; resultat = sqrt(nombre); // resultat vaudra 10

sin, cos, tan


Ce sont les 3 fameuses fonctions utilises en trigonomtrie. Le fonctionnement est le mme, ces fonctions renvoient un double. Ces fonctions attendent une valeur en radians.

asin, acos, atan


Ce sont les fonctions arc sinus, arc cosinus et arc tangente, d'autres fonctions de trigonomtrie. Elles s'utilisent de la mme manire et renvoient un double.

exp
Cette fonction calcule l'exponentielle d'un nombre. Elle renvoie un double (oui oui, elle aussi )

log
Cette fonction calcule le logarithme nprien d'un nombre (que l'on note aussi "ln")

log10
Cette fonction calcule le logarithme base 10 d'un nombre.

Conclusion
Conclusion, ben heureusement que je n'ai pas parl des autres fonctions comprends mme pas quoi elles servent ) Dj, avec ces fonctions-l vous avez de quoi faire si vous vous ennuyez Encore une fois, si vous n'avez pas compris un mot de ce que j'ai dit, ce n'est pas bien grave car on n'en a pas absolument besoin. Tout dpend en fait du programme que vous allez faire : si vous programmez une calculatrice scientifique, c'est sr que vous vous en servirez Retenez quand mme les fonctions floor, ceil, et pow, elles vous seront probablement utiles (mme si vous ne programmez pas une calculatrice oui oui ) (en fait, je ne

Q.C.M.
Quel est le signe de la multiplication sur un ordinateur ? * + / %

Simple question de maths pour voir si vous avez compris les modulos : Combien renvoie l'opration 17 % 5 ? 0 1 2 3 4 5 15

Combien vaudra la variable "resultat" aprs cette opration ? Code : C -

Slectionner resultat = (8 / 3) - 2;
-2 0 1 2

Comment appelle-t-on l'opration suivante en programmation ?

Code : C -

Slectionner nombre++;
L'incrmentation L'augmentation La supplmentation

Combien vaut la variable "nombre" la fin de ces oprations ?

Code : C -

1 2 3 4 5 6

Slectionner int nombre = 4; nombre--; nombre *= 4; nombre %= 12; nombre += 1;

1 4 12 14

Laquelle de ces fonctions dois-je utiliser si je veux que mon nombre 5.47 soit arrondi 5 ? pow ceil floor sqrt
Correction !