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 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