Tipus bàsics de dades en C

Última modificació per editor1 el 2018/09/16 21:38

0. Objectiu

  • Conèixer com es representen els tipus de dades elementals en llenguatge C.

1. Introducció

Quan programem en llenguatge C, ens trobarem amb els mateixos tipus de dades, però donat que baixem de nivell de descripció, ens trobarem que per un mateix tipus de dades tenim diferents opcions segons el rang de valors que necessitem emmagatzemar. Sempre és preferible buscar el tipus que millor s'adapta a les nostres necessitats per no malgastar espai de memòria. A més, el llenguatge C ens permet afegir modificadors als tipus, per exemple, per dir que un enter és sense signe.

2.1. Objectes elementals del llenguatge C

Tal com heu vist en el llenguatge algorísmic, un objecte té tres atributs: nom o identificador, tipus i valor. Els noms o identificadors dels objectes segueixen les mateixes normes que en el llenguatge algorísmic: han de començar per una lletra, i després poden seguir lletres, números o el caràcter "_". Tampoc no es pot utilitzar cap paraula reservada del llenguatge C (com ara while) per identificar un objecte. La taula següent conté noms correctes, incorrectes i un breu comentari.

Nom o identificadorÉs correcte?Comentari
 ventes  Si  És recomanable escriure en minúscules.
 _article  No  No comença per un caràcter alfabètic.
 aux2  Si  Poc recomanable. És millor usar noms descriptius.
 1_article  No  No comença per un caràcter alfabètic.
 nombre articles  No  Els espais en blanc no són permesos.
 nombreArticles  Si  És un nom descriptiu.
 peçaCamió  No  No es poden utilitzar caràcters especials ni accents (la “ç” es considera un caràcter especial, recordeu que els ordinadors provenen del món anglosaxó).
 const  No  És una paraula reservada del llenguatge C.

A continuació anem a veure la traducció dels tipus elementals del llenguatge algorísmic al llenguatge C, així com els valors que aquests poden prendre.

2.1.1. Tipus elementals en C

El llenguatge algorísmic defineix quatre tipus elementals: booleà, enter, caràcter i real. Tot seguit veurem com es tradueixen al llenguatge C.

Tipus booleà

El tipus booleà no existeix com a tal en el llenguatge C, però el podem definir fàcilment usant la declaració següent:


 typedef enum {FALSE, TRUE} boolean;

Aneu amb compte perque l’ordre dels elements (FALSE i TRUE) és important, com veurem més endavant.

A partir d’aquest moment podem utilitzar el nou tipus boolean per a declarar objectes de tipus booleà.
La següent taula resumeix les característiques del tipus booleà i la seva traducció a llenguatge C.

CaracterísticaLlenguatge algorísmicLlenguatge C
 Identificador  boolean  boolean
 Rang de valors  true, false  TRUE, FALSE
 Operadors interns  no, y, o, =, ≠, <, ≤, >, ≥  !, &&, ||, ==, , <, <=, >, >=

Tipus caràcter

En C els caràcters van delimitats per cometes simples com en el llenguatge algorísmic. La taula següent resumeix les característiques del tipus caràcter i la seva traducció a C.

CaracterísticaLlenguatge algorísmicLlenguatge C
 Identificador  caràcter  char
 Rang de valors  conjunt finit de valors  conjunt finit de valors definits pel codi ASCII
 Operadors externs  =, ≠, <, ≤, >, ≥ ==, , <, <=, >, >=
 Sintaxi de valors  'a', 'W', '1'  'a', 'W', '1'

Tipus enter

La següent taula resumeix les característiques del tipus enter i la seva traducció a C.

CaracterísticaLlenguatge algorísmicLlenguatge C
 Identificador  enter  int
 Rang de valors  ENTERMIN a ENTERMAX  -2147483648, 2147483647
 Operadors interns  - (canvi de signe), +, -, *, div, mod  - (canvi de signe), +, -, *, /, %
 Operadors externs  - (canvi de signe), +, -, *, div, mod  - (canvi de signe), +, -, *, /, %
 Sintaxi de valors  3, 465434, -2134567  3, 465434, -2134567

El rang dels enters pot variar segons el compilador i l’ordinador on s’executi el programa.

Tipus real

La següent taula resumeix les característiques del tipus real i la seva traducció a C.

CaracterísticaLlenguatge algorísmicLenguatge C
 Identificador  real  float
 Rang de valors  REALMIN a REALMAX (no tots)  ±3.4E±38 (7 dígits significatius)
 Operadors interns  - (canvi de signe), +, -, *, /  - (canvi de signe), +, -, *, /
 Operadors externs  =, ≠, <, ≤, >, ≥  ==, !=, <, <=, >, >=
 Sintaxi de valors  0.6, 5.0E-8, -49.2E+0.8, 1.0E5, 4.0  0.6, 5.0E-8, -49.2E+0.8, 1.0E5, 4.0 

El llenguatge C permet reals amb més dígits significatius: els tipus double i long double.

2.1.2. Declaració d’objectes en C

Abans d’utilitzar un objecte en un programa, cal haver-lo declarat prèviament. En el cas del llenguatge C, però, les declaracions no van delimitades per paraules reservades com en el llenguatge algorísmic. Simplement, es col·loquen les declaracions de constants i variables a l’inici del cos de la funció corresponent (funció main si fem referència al programa principal), abans de qualsevol instrucció.

Per a declarar una constant, s’utilitza la construcció:


 const tipus nom = valor;

Noteu que la paraula reservada const és obligatòria davant de cada declaració de constant. No serveix per definir tot un bloc de declaracions de constants com en el llenguatge algorísmic, sinó només per declarar-ne una.

Aquest tipus de constant és coneguda en temps d’execució. És a dir, l’assignació del valor a la constant nom es farà durant l’execució del programa, i no durant la compilació.

De vegades és convenient definir constants amb valor conegut ja durant la compilació. Es pot fer amb la directiva #define:


 #define NOM valor

Observem que no s’indica el tipus de la constant que s’està definint. De fet, el compilador únicament substitueix el nom pel seu valor cada cop que el troba en el codi posterior a la declaració. Així mateix, és habitual usar un nom escrit tot en majúscules al declarar una constant. D’aquesta manera el codi del programa és més llegible, ja que es poden distingir les constants de les variables amb un sol cop d’ull.

Per declarar una variable, s’usa la sintaxi següent:


  tipus nom;

Així es declara una variable de tipus tipus i nom nom. També es poden declarar diverses variables del mateix tipus en una sola declaració, separant els seus noms per comes (“,”). Per exemple, per declarar tres variables i, j, k de tipus enter:


 int i, j, k;

El llenguatge C permet indicar un valor inicial per la variable en la pròpia declaració, però evitarem aquesta construcció que no és permesa en el llenguatge algorísmic.

Finalment, remarcar que tot i que el llenguatge C no usa paraules reservades per delimitar les declaracions de variables i constants, nosaltres col·locarem els comentaris apropiats per fer el programa més llegible.

2.1.3. Expressions en C

Les expressions en llenguatge C segueixen les mateixes regles de construcció i avaluació que en el llenguatge algorísmic. En cas de dubte, però, sempre és aconsellable posar un parèntesi de més per indicar clarament l’ordre d’avaluació de l’expressió.

2.1.4. Definició de tipus. Tipus enumeratius en C

Tal com succeeix amb les declaracions de variables i constants, les declaracions de tipus en C tampoc no van delimitades per paraules reservades. S’han de col·locar entre les declaracions de les constants i les de les variables, indicant amb un comentari que es procedeix a fer declaracions de tipus.

El constructor de tipus enumeratius en C segueix la següent sintaxi:


 typedef enum {valor1, valor2..., valorn} nom;

Recordeu que hem vist un exemple d’aquesta sintaxi en la definició del tipus booleà.

Com al llenguatge algorísmic l’ordre en què s’enumeren els valors serveix per establir les relacions de més petit a més gran i per tant l’ordre en què s’enumeren els valors és important. En C es pot assignar un enter a cada valor, per establir aquestes relacions, però nosaltres no utilitzarem aquesta caracterísitca.

2.1.5. Funcions de conversió de tipus

Tal com passa amb el llenguatge algorísmic, de vegades calen funcions de conversió de tipus per passar d’un tipus de número (o codi) a un altre. Tot i que el llenguatge C sovint pot fer aquestes conversions automàticament, el millor és indicar clarament en el programa el tipus de conversió desitjada.

La següent taula mostra la traducció de les funcions de conversió de tipus del llenguatge algorísmic a C.

Llenguatge algorísmic Llenguatge CExemple
 realAEnter  (int)  (int) -3.99
 enterAReal  (float)  (float) 3
 caracterACodi  (int)  (int) 'A'
 codiACaracter  (char)  (char) 65

2.2 Especificació d’algorismes

L’especificació d’algorismes, accions i funcions en llenguatge C es farà amb la utilització de comentaris, tal com es feia en la notació algorísmica. En aquest cas, però, recordeu d’usar la sintaxi de C pels comentaris.


 /* Pre: precondició */
  algorisme
 /* Post: postcondició */

2.3. Estructures algorísmiques

En aquest apartat es mostren els equivalents en C de les estructures bàsiques del llenguatge algorísmic.

2.3.1. Estructura general d’un programa en llenguatge C

L’estructura d’un programa en llenguatge C és la següent:


 /*  Programa estructura.c   Estructura bàsica d’un programa en C
         Jordi Riera, 2018
  */


 /* Inclusió de fitxers de capçalera */
 #include <fitxer1>
 #include <fitxer2>
 ...

 /* Declaració de constants en temps de compilació */
 #define NOMBRE_DEFINE1 valor_define1         
 #define NOMBRE_DEFINE2 valor_define2
 ...

 /* Declaració de tipus */
 typedef enum {FALSE, TRUE} boolean;    /* tipus booleà */                             
 typedef definicio_de_tipus1 nom_tipus1;
 typedef definicio_de_tipus2 nom_tipus2;
  ...

 int main() {

     /* Definició de constants */
     const tipus_de_constant1 nom_constant1 = valor_constant1;
     const tipus_de_constant2 nom_constant2 = valor_constant2;
      ...

     /* Declaració de variables */
      tipus_de_variable1 nom_variable1;
      tipus_de_variable2 nom_variable2;

     /* Cos del programa */
      accio1
      accio2
      ...

  }

Observeu que les declaracions de tipus s’han fet fora de la funció main del programa. Això és perquè habitualment és desitjable que els tipus de dades estiguin disponibles en tot el programa i per totes les funcions que s’hi puguin declarar. De totes maneres, també es poden fer declaracions de tipus locals, situant-les entre les declaracions de les constants i les de les variables.

2.3.2. Accions elementals: l’assignació

L’acció d’assignació del llenguatge algorísmic, “:=” es tradueix en l’operador d’assignació en llenguatge C, “=”. La distinció entre acció i operador és molt important, ja que implica que el llenguatge C permet fer assignacions en qualsevol punt del codi on una expressió sigui vàlida. Per exemple, és un error molt comú fer una assignació, enlloc d’una comparació, en la condició d’una sentencia condicional per usar l’operador d’assignació “=” enlloc de l’operador relacional d’igualtat “==”, la qual cosa té greus repercussions de cara al bon funcionament del programa.

3. Resum

En aquesta unitat hem vist l’equivalència en llenguatge C dels tipus de dades en llenguatge algorísmic (booleà, caràcter, enter i real).

Etiquetes:
Creat per editor1 el 2018/09/16 21:37