• Aucun résultat trouvé

2 Premi`ere prise en main

N/A
N/A
Protected

Academic year: 2022

Partager "2 Premi`ere prise en main"

Copied!
2
0
0

Texte intégral

(1)

Universit´e de Nice-Sophia Antipolis Octobre 2020

Polytech/Xidian Dur´ee: 1h30

Types ´el´ementaires, variables, op´erateurs et expressions Travaux Dirig´es – S´eance n. 1

1 Objectifs

Cette s´eance sera divis´ee en deux parties. Tout d’abord, nous nous familiariserons avec l’en- vironnement de travail que vous utiliserez tout au long de l’ann´ee pour ´editer et compiler vos programmesC. Dans un second temps, nous ´etudierons les premi`eres bases du langageC: les types simples, des variables et des expressions.

2 Premi`ere prise en main

Le langageCest un langage d’´ecriture de syst`eme apparu au cours de l’ann´ee 1972. D´evelopp´e par Dennis Ritchie et Ken Thompson, il a ´et´e sp´ecialement con¸cu pour la r´e´ecriture du syst`eme Unix jusque l`a ´ecrit en langage machine.

Il fait suite aux langages d’´ecriture de syst`eme BCPL et surtout B, d’o`u son nomC. La syntaxe du langageCau d´epart est tr`es libre et laisse place `a beaucoup de variantes. `A la fin des ann´ees 70, le livre de Dennis Ritchie et Brian Kernighan popularisera le langage et en fixera la forme pendant pr`es d’une dizaine d’ann´ees.

En 1989 l’institut national de normalisation Am´ericain (ANSI) aboutit `a une norme pour le langage.

En 1990, l’ISO (International Organization for Standardization) a ´egalement adopt´e la norme ANSI, c’est la norme ISO C90. En 1999 et 2011, deux nouvelles normes C99 et C11 ont ´et´e produites par l’ISO, proposant des ´evolutions du langage C.

Support de cours Pour cette s´erie de TD, une partie cours sera pr´esent´ee sur les feuilles de TD. Si vous cherchez des informations sur une fonction particuli`ere, la commandemanpourra vous donner une bonne documentation.

Vous aurez ´egalement besoin du support de cours deCaccessible sur le sitehttp://elec.

polytech.unice.fr/˜vg/ dans la section enseignement. Sur ce site, vous devrez r´ecup´erer et imprimer le documentcours-Cet l’avoir avec vous en s´eance de TD.

L’environnement Pour d´evelopper vos programmes,vous utiliserez l’´editeur de texte Emacs.

Lorsque vous ´editerez un programmeC(un fichier avec comme extension.c), vous le visualiserez et le compilerez `a l’aide de cet ´editeur. Les commandes abr´eg´ees `a connaˆıtre parfaitement sont les suivantes :

—Ctrl-x Ctrl-fOuvrir un fichier ;

—Ctrl-x Ctrl-sSauvegarder un fichier ;

—Ctrl-x Ctrl-cQuitter Emacs ;

—M-x compileCompiler un fichierC.

! ! ! Attention quand vous ´editez un fichierCn’oubliez pas son extension ! ! !

1

Compilateur Pour cr´eer les fichiers ex´ecutables, `a partir des fichiers sources ´ecrits enC, vous devez utiliser un compilateur.

Dans cet enseignement, nous utiliserons le compilateur de GNU :gcc. Une ligne de commandes typique pour compiler un fichierCsera de la forme suivante :

gcc -Wall -onomexecutable nomfichier.c

L’optionWallindique `agccd’affichertousles messages d’avertissement. Ces deux premi`eres options doivent ˆetre misessyst´ematiquement. L’option-o nomexecutablesert `a d´efinir le nom du fichier qui sera produit pargccet pourra ˆetre ex´ecut´e par la suite. Le fichier `a compiler est toujours le dernier param`etre et doit comporterune extension.c.

2.1 Un programme : Bonjour `a tous

Le premier programme que nous allons ´ecrire est le classiqueBonjour `a tousqui ´ecrit un message de bienvenue sur la sortie standard (i.e.l’´ecran). Le texte source de ce programme est :

/*

* Ce programme affiche le message ’Bonjour `a tous ’.

* @author vg@unice .fr 08/09/2019

*/

#i n c l u d e <stdlib .h>

#i n c l u d e <stdio .h>

i n t main (void) {

printf ("\ tBonjour `a tous \n");

printf ("\t **************\ n");

r e t u r n EXIT_SUCCESS ; }

exercice 1)Avec Emacs, ´editez le programme pr´ec´edent dans le fichierbonjour.c. Ce programme est compos´e de 3 parties :

— les 3 premi`eres lignes sont des commentaires. Tous vos programmes devront ˆetre correcte- ment comment´es, avec descommentaires de documentationet desassertionsqui permettent de prouver lavalidit´ede votre programme ;

— la ligne 4, est une directive aupr´eprocesseur(dont nous parlerons ult´erieurement) n´ecessaire pour (entre autres) l’affichage sur l’´ecran ;

— les lignes 5 `a 9 d´efinissent la fonctionmain(tout programmeCdoit comporter une (et une seule) fonctionmainpar laquelle d´ebute l’ex´ecution du programme). Ici, le corps de cette fonction ex´ecute la fonctionprintfqui ´ecrit la valeur de son param`etre sur la sortie standard (l’´ecran). Le corps du programme peux ˆetre chang´e pour effectuer des actions diff´erentes. Chacune des instructions du corps d’un programme doit ˆetre suivie du caract`ere point-virgule (;).

Compilez ce programme `a l’aide de la commande abr´eg´eeM-x compile. Remplacez la ligne contenantmake -kpar la commande :gcc -Wall -o bonjour bonjour.c. Cette commande pro- duit un ex´ecutablebonjour. Pour l’ex´ecuter, utilisez la commande./bonjourdans un terminal.

exercice 2)Enlevez un des symboles ’\t’. Que se passe-t-il ? Pourquoi ? exercice 3)Enlevez le premier symbole ’\n’. Que se passe-t-il ? Pourquoi ? exercice 4)Enlevez le second symbole ’\n’. Que se passe-t-il ? Pourquoi ?

exercice 5)Dans la fonctionmain, ajoutez les instructions qui ´ecrivent sur la sortie standard : votre nom, votre ˆage et votre groupe, chacune sur des lignes diff´erentes.

2

(2)

2.2 Utilisation de printf et scanf

La fonction printfpermet d’´ecrire autre chose que des chaˆınes de caract`eres, comme par exemple, des nombres entiers ou des r´eels. Pour ce faire, vous devez utiliser dessp´ecificateurs de conversionqui seront remplac´es par des valeurs pass´ees en param`etre. Pour le moment, les sp´ecificateurs de conversion `a connaˆıtre sont :

—%dpour un entier d´ecimal,

—%fpour un r´eel, nombre `a virgule,

—%epour un r´eel, nombre avec exposant,

—%cpour un caract`ere

—%spour une chaˆıne de caract`eres.

exercice 6)Dans le fichiertrois.c, ´ecrivez un programme avec une fonctionmaindont le corps contient l’appel `a la fonctionprintfsuivant :

printf ("le chiffre trois : %d ,\ n`a virgule : %f\n",3, 3.0);

exercice 7)Compilez et ex´ecutez.

De la mˆeme mani`ere qu’il est possible d’´ecrire `a l’´ecran, il est aussi possible de lire une ou plusieurs donn´ees au clavier, c’est-`a-dire sur la l’entr´ee standard, `a l’aide de la fonctionscanf. Le premier param`etre de cette fonction est une chaˆıne de caract`eres qui repr´esente ce qui doit ˆetre lu depuis le clavier. Les sp´ecifications de conversion de la fonctionscanfsont semblables `a celles de printf:

— %d pour lire un entier d´ecimale,

— %o pour lire un entier non sign´e en notation octale,

— %x pour lire un entier non sign´e en notation hexad´ecimale,

— %f pour lire r un r´eel (float),

— %lf pour lire un r´eel (double),

— %c pour lire un caract`ere.

exercice 8)´Ecrivez le programme vu en cours, qui calcule et affiche le cosinus d’une r´eel lu sur l’entr´ee standard.

3 Types

Nous avons vu dans la partie pr´ec´edente des moyens d’afficher des valeurs constantes. Mais `a quoi correspondent-elles r´eellement enC?

D’une fa¸con g´en´erale, untyped´efinit un ensemble de valeurs qui poss`edent des caract´eristiques communes. Il existe des typessimpleset des typesstructur´es. Aujourd’hui, nous verrons unique- ment les types simples de C.

EnC, il existe de nombreux types simples :

— Lesentiers(positifs et n´egatifs) sont repr´esent´es par les typesshort,int,longetlong long. Ce qui les distinguent, c’est leur cardinalit´e. Les constantes enti`eres sont des suites de chiffres pouvant ˆetre n´egatifs (pr´ec´ed´es du signe -). Par exemple :1234,-324...

Les constantes pr´ec´edentes sont en notation d´ecimales. C propose deux notations,octaleet hexad´ecimale, en faisant pr´ec´eder respectivement le nombre par un0ou0X.

Il est possible de d´efinir un ensemble d’entiers strictement positifs en faisant pr´ec´eder le nom du type parunsigned. Par exempleunsigned long.

— Lesr´eelssont repr´esent´es par les typesfloatetdoubleetlong double. Le typelong double offre une plus grande pr´ecision dans la repr´esentation de r´eels. Les constantes r´eelles s’´ecrivent comme habituellement :0.23451,123134.3,345.89e-3.

3

— Les caract`eres sont d´efinis par le typechar. C’est en fait un sous-type du type entier.

Une constante de typecharest repr´esent´ee par un caract`ere entre deux apostrophes. Par exemple :’a’,’,’...

exercice 9)Indiquez les notations de constantes valides et le type des nombres suivants : 0.31 +273.3 0.005e+3 0x10

010 .389 15 0x5e-4

33.75 1.5+2 3,250 .E1

1234 3E5 08 10e-4

0X1a2 0037 1e2768 0x1A2

exercice 10)D´eterminez le type des constantes suivantes :

100 033 ’a’ 2

0x10 .238L "nom" ’2’

"a" 231l ’\n’ "2"

exercice 11)´Ecrivez un programme qui affiche les nombres :

— 230 en utilisant une notation hexad´ecimale ;

— 123 en utilisant une notation octale

— 156003 en utilisant une notation exponentielle

— 12423215 en utilisant une constantelong

exercice 12)´Ecrivez un programme dans lequel vous d´eclarez deux variables enti`eres, la premi`ere prenant comme valeur 1, la seconde n’´etant pas initialis´ee. Affichez leurs valeurs. Expliquez le r´esultat.

exercice 13) `A l’aide d’une variable enti`ere, affichez la valeur du caract`ere’a’. Expliquez le r´esultat.

exercice 14)´Ecrivez un programme qui ´ecrit sur la sortie standard le r´esulat de l’´evaluation des expressions suivantes :

033 & 2 033 | 02 0xff & 0x0 6 ˆ 3 033 && 2 02 == 0x2 2.0 == 2.0 ˜0xffffffff

4

Références

Documents relatifs

– Ilias Amrani [email protected] – Jan Brunner [email protected] – Ratiba Djelid [email protected] – M´elanie Favre [email protected] – Nicolas

Dans un anneau principal, tout id´ eal premier non-nul est maximal (et donc, pour les id´ eaux non-nuls, les notions de premier et de maximal

Commencer par le programme d’indexation, le faire fonctionner sur une seule machine en mode multi-thread, r´ ealiser ensuite le client (exploitant l’index constitu´ e par le

Chaque joueur dispose d’un nombre de navires fix´e, chaque navire a un type et peut ˆetre plac´e horizonta- lement ou verticalement.. Il n’est pas possible de superposer

Vous devrez ˆetre capable de donnez des indications de comportement de votre programme (temps, limites m´emoire etc.) dans le cas du stockage d’un grand nombre d’objets de petite

Si vous souhaitez r´ealiser d’autres extensions du langage Redcode, votre interpr´eteur devra ˆetre capable de supporter deux syntaxes : celle des programmes en RedCode

Les calculs sont simples dans la question 1 (le rayon est 1/2) ; c’est beaucoup plus embˆetant dans la question 3, surtout pour le DL ` a l’ordre 3 qu’il faut effectuer si on

– De mˆeme que la premi`ere coordonn´ee d’une tige (d’un vecteur) dans un espace euclidien d´epend de la base choisie (contrairement `a sa longueur qui est bien