Ejercicios tipos de datos variables y constantes lenguaje C


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Capítulo 2. Tipos de datos en C</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index_es.html" title="Arquitectura de Sistemas" /><link rel="up" href="c_programming_part_es.html" title="Parte I.  Programación en C" /><link rel="prev" href="program_structure_activities_es.html" title="1.3. Actividades" /><link rel="next" href="data_types_structured_data_types_es.html" title="2.2. Tipos de datos estructurados" /><meta name="DC.title" content="" /><meta name="DC.description" content="" /><meta name="DC.date" content="2018-7-18" /><meta name="DC.format" content="text/html" /><meta name="DC.language" content="es" /><meta name="DC.publisher" content="UC3M" /><meta name="DC.creator" content="Pablo Basanta Val, Iria Estévez Ayres, Abelardo Pardo" /><link rel="shortcut icon" href="../CSS/ae_64x64.png" type="image/vnd.microsoft.icon" /><link rel="icon" href="../CSS/ae_64x64.png" type="image/vnd.microsoft.icon" /><meta name="Author" content="Pablo Basanta Val, Iria Estévez Ayres,&#10;  Abelardo Pardo" /><meta name="languages" content="es" /><link type="text/css" rel="stylesheet" href="../CSS/adagio_style.css" media="all" /><link type="text/css" rel="stylesheet" href="../CSS/as.css" media="all" /><link type="text/css" rel="stylesheet" href="style.css" media="all" /><link type="text/css" rel="stylesheet" href="logo_es.css" media="all" /></head><body id="adagioroot_Computer_architecture_uc3m"><div class="adagio_hidden_elements" id="skip_links"><ul><li><a href="../" accesskey="1">Inicio</a></li><li><a href="#adagio_page_content" accesskey="2">Ir a contenido</a></li><li><a href="#adagio_navigation" accesskey="3">Ir a navegación</a></li></ul></div><div id="adagio_page_navigation"><a name="adagio_navigation" id="adagio_navigation"></a><ul xmlns=""><li><a href="../info/material_es.html">Plan semanal</a></li><li><a href="../info/syllabus_es.html">Reglas</a></li><li><a href="../course_notes/index_es.html">Apuntes del curso</a></li><li><a href="../info/readings_es.html">Bibliografía</a></li><li><a href="https://aulaglobal.uc3m.es">Aula Global</a></li></ul></div><div id="adagio_page_header_level1"><h1 id="adagio_institution_name">UC3M</h1></div><div id="adagio_page_header_level2"><h2 id="adagio_degree_name">Grado en
      Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones</h2></div><div id="adagio_page_header_level3"><h3 id="adagio_course_name"><a href="http://www.it.uc3m.es/pbasanta/asng/" title="Arquitectura de Sistemas">Arquitectura de Sistemas</a></h3></div><div id="adagio_page_header_level4"><h4 id="adagio_course_edition">Septiembre 2017 - Enero 2018</h4></div><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Capítulo 2. 
    <span xml:lang="es" lang="es">Tipos de datos en C</span>
    
  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="program_structure_activities_es.html"><img src="nav_graphics/prev.png" alt="Anterior" /></a> </td><th width="60%" align="center">Parte I. 
    <span xml:lang="es" lang="es">Programación en C</span>
    
  </th><td width="20%" align="right"> <a accesskey="n" href="data_types_structured_data_types_es.html"><img src="nav_graphics/next.png" alt="Siguiente" /></a></td></tr></table><hr /></div><div id="adagio_page_content"><a name="adagio_page_content_anchor" id="adagio_page_content_anchor"></a><div class="chapter" title="Capítulo 2. Tipos de datos en C" id="data_types"><div class="titlepage"><div><div><h2 class="title">Capítulo 2. 
    <span xml:lang="es" lang="es">Tipos de datos en C</span>
    
  </h2></div><div></div></div></div><div class="toc"><p><strong>Tabla de contenidos</strong></p><dl><dt><span class="section"><a href="data_types_es.html#data_types_basic">2.1. 
      <span xml:lang="es" lang="es">Tipos de datos básicos</span>
      
    </a></span></dt><dd><dl><dt><span class="section"><a href="data_types_es.html#data_types_integers">2.1.1. 
	<span xml:lang="es" lang="es">Enteros</span>
	
      </a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_characters_and_strings">2.1.2. 
	<span xml:lang="es" lang="es">Letras y cadenas</span>
	
      </a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_real_numbers">2.1.3. 
	<span xml:lang="es" lang="es">Números reales</span>
	
      </a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_arrays">2.1.4. 
	    <span xml:lang="es" lang="es">Tablas</span>
	    
      </a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_size_of_basic_data_types">2.1.5. 
	<span xml:lang="es" lang="es">Tamaño de los tipos de datos básicos</span>
	
      </a></span></dt></dl></dd><dt><span class="section"><a href="data_types_structured_data_types_es.html">2.2. 
      <span xml:lang="es" lang="es">Tipos de datos estructurados</span>
      
    </a></span></dt><dt><span class="section"><a href="data_types_unions_es.html">2.3. 
      <span xml:lang="es" lang="es">Uniones</span>
      
    </a></span></dt><dt><span class="section"><a href="data_types_enumerations_es.html">2.4. 
      <span xml:lang="es" lang="es">Enumeraciones</span>
      
    </a></span></dt><dt><span class="section"><a href="data_types_reading_es.html">2.5. 
      <span xml:lang="es" lang="es">Bibliografía de apoyo</span>
      
    </a></span></dt><dt><span class="section"><a href="data_types_exercises_es.html">2.6. 
      <span xml:lang="es" lang="es">Ejercicios</span>
      
    </a></span></dt><dt><span class="section"><a href="data_types_activities_es.html">2.7. 
    <span xml:lang="es" lang="es">Actividades</span>
  </a></span></dt><dd><dl><dt><span class="section"><a href="data_types_activities_es.html#c_data_types_activities_solve_exercises">2.7.1. 
    <span xml:lang="es" lang="es">Resolución de ejercicios sobre definición de datos en
    C</span>
    
  </a></span></dt><dt><span class="section"><a href="data_types_activities_string_to_uppercase_es.html">2.7.2. 
    <span xml:lang="es" lang="es">Manejo de caracteres</span>
    
  </a></span></dt><dt><span class="section"><a href="data_types_activities_copy_a_string_es.html">2.7.3. 
    <span xml:lang="es" lang="es">Manejo de cadenas
    (<span class="foreignphrase"><em class="foreignphrase">Strings</em></span>)</span>
    
  </a></span></dt><dt><span class="section"><a href="data_types_activities_average_of_arrays_es.html">2.7.4. 
    <span xml:lang="es" lang="es">Manejo de tablas
    (<span class="foreignphrase"><em class="foreignphrase">Arrays</em></span>)</span>
    
  </a></span></dt><dt><span class="section"><a href="data_types_activities_design_and_print_struct_es.html">2.7.5. 
    <span xml:lang="es" lang="es">Manejo de structuras y uniones</span>
    
  </a></span></dt><dt><span class="section"><a href="insertion_sort_and_dichotomic_search_int_arrays_es.html">2.7.6. 
    <span xml:lang="es" lang="es">Ordenación por inserción y búsqueda dicotómica</span>
    
  </a></span></dt></dl></dd></dl></div><p xml:lang="es" lang="es">Las estructuras de datos del lenguaje C son más simples que
  las que ofrece Java porque no existe el concepto de <span class="quote">“<span class="quote">clase</span>”</span> ni de
  <span class="quote">“<span class="quote">objeto</span>”</span>. C ofrece tipos de datos básicos y dos construcciones
  para crear datos más complejos. El control de acceso a datos que ofrece Java
  (métodos y campos privados, públicos y protegidos) no existe en C. Las variable
  son globales, locales a un fichero, o locales a un bloque de código.</p><div class="section" title="2.1. Tipos de datos básicos"><div class="titlepage"><div><div><h2 class="title" id="data_types_basic">2.1. 
      <span xml:lang="es" lang="es">Tipos de datos básicos</span>
      
    </h2></div></div></div><p xml:lang="es" lang="es">C ofrece tres tipos de datos básicos:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p xml:lang="es" lang="es">Números enteros definidos con la palabra clave
	<code class="code">int</code></p></li><li class="listitem"><p xml:lang="es" lang="es">Letras o caracteres definidos con la palabra clave
	<code class="code">char</code></p></li><li class="listitem"><p xml:lang="es" lang="es">Números reales o en coma flotante definidos con las
	palabras claves <code class="code">float</code> o <code class="code">double</code></p></li></ul></div><div class="section" title="2.1.1. Enteros"><div class="titlepage"><div><div><h3 class="title" id="data_types_integers">2.1.1. 
	<span xml:lang="es" lang="es">Enteros</span>
	
      </h3></div></div></div><p xml:lang="es" lang="es">Se definen con <span class="quote">“<span class="quote"><code class="code">int</code></span>”</span> y admiten
      de forma opcional dos prefijos modificadores:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p xml:lang="es" lang="es"><span class="quote">“<span class="quote"><code class="code">short</code></span>”</span> y
	  <span class="quote">“<span class="quote"><code class="code">long</code></span>”</span>: Modifica el tamaño en bits del
	  entero. Existen por tanto tres tipos de enteros:
	  <span class="quote">“<span class="quote"><code class="code">int</code></span>”</span>, <span class="quote">“<span class="quote"><code class="code">short int</code></span>”</span>
	  (que se puede abreviar como <span class="quote">“<span class="quote"><code class="code">short</code></span>”</span>), y
	  <span class="quote">“<span class="quote"><code class="code">long int</code></span>”</span> (que se puede abreviar
	  como <span class="quote">“<span class="quote"><code class="code">long</code></span>”</span>).</p><p xml:lang="es" lang="es">El lenguaje C no define tamaños fijos para sus tipos
	  de datos básicos. Lo único que garantiza es que un <code class="code">short
	  int</code> tiene un tamaño <span class="emphasis"><em>menor o igual</em></span> que un
	  <code class="code">int</code> y este a su vez un tamaño menor o igual a un
	  <code class="code">long int</code>. Esta característica del lenguaje ha complicado
	  la creación de programas que sean compatibles entre varias
	  plataformas.</p></li><li class="listitem"><p xml:lang="es" lang="es"><span class="quote">“<span class="quote"><code class="code">unsigned</code></span>”</span>: define un número
	  natural (mayor o igual a cero).</p></li></ul></div><div class="note" title="Sugerencia"><h3 class="title">
	  <span xml:lang="es" lang="es">Sugerencia</span>
	  
	</h3><p xml:lang="es" lang="es">En tu entorno de desarrollo crea un fichero de texto con
	la siguiente estructura (puedes simplemente copiar y pegar el texto del
	siguiente cuadro):</p><pre class="programlisting">int main() 
{

}</pre><p xml:lang="es" lang="es">Inserta en la función <code class="code">main</code> varias
        definiciones de enteros para probar todas las combinaciones posibles
        (hasta diez). Para comprobar que la sintaxis utilizada es correcta abre
        una ventana con el intérprete de comandos y, en la carpeta donde se
        encuentra el fichero creado, ejecuta el comando <span class="command"><strong>gcc -Wall -o
        programa fichero.c</strong></span> reemplazando <span class="command"><strong>fichero.c</strong></span>
        por el nombre del fichero que has creado. Si el comando no imprime
        mensaje alguno por pantalla, tu programa es correcto. Verás que el
        compilador genera un fichero con extensión
        <span class="quote">“<span class="quote"><code class="filename">.o</code></span>”</span>, puedes borrarlo.</p></div><div class="section" title="Preguntas de autoevaluación"><div class="titlepage"><div><div><h4 class="title" id="data_types_integer_self_assessment">
	  <span xml:lang="es" lang="es">Preguntas de autoevaluación</span>
	  
	</h4></div></div></div><p xml:lang="es" lang="es">Responde a las siguientes preguntas (comprueba tus
	respuestas también compilando el programa):</p><div class="orderedlist"><ol><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_int_1" id="data_types_int_1"><p xml:lang="es" lang="es">El siguiente programa compila sin errores:</p><pre class="programlisting">void main()
{
  int i;
  long int j;
  long k;
  short int l;
  short m;
}</pre><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_int_1','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_int_1')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_int_1','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_int_1_response" id="data_types_int_1_response"></iframe></form></li><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_int_2" id="data_types_int_2"><p xml:lang="es" lang="es">El siguiente programa produce un error al compilar
	      porque se está asignando una variable entera a una sin signo
	      (natural).</p><pre class="programlisting">void main()
{
  unsigned i;
  int j = 0;

  i = j;
}</pre><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Verdadero</p></li><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_int_2','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_int_2')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_int_2','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_int_2_response" id="data_types_int_2_response"></iframe></form></li><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_int_3" id="data_types_int_3"><p xml:lang="es" lang="es">La declaración <code class="code">unsigned short x</code> es
	      idéntica a <code class="code">short unsigned x</code>.</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><p xml:lang="es" lang="es">Escribe un breve programa y comprueba la respuesta
	      con el compilador.</p><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_int_3','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_int_3')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_int_3','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_int_3_response" id="data_types_int_3_response"></iframe></form></li></ol></div></div></div><div class="section" title="2.1.2. Letras y cadenas"><div class="titlepage"><div><div><h3 class="title" id="data_types_characters_and_strings">2.1.2. 
	<span xml:lang="es" lang="es">Letras y cadenas</span>
	
      </h3></div></div></div><p xml:lang="es" lang="es">Las variables de tipo letra se declaran como
      <span class="quote">“<span class="quote"><code class="code">char</code></span>”</span>. Para referirse a una letra se rodea de
      comillas simples: <code class="code">'M'</code>. Como las letras se representan
      internamente como números, el lenguaje C permite realizar operaciones
      aritméticas como <code class="code">'M' + 25</code>.</p><p xml:lang="es" lang="es">Las cadenas de texto o
      <span class="foreignphrase"><em class="foreignphrase">strings</em></span> son simplemente tablas de
      <span class="quote">“<span class="quote"><code class="code">char</code></span>”</span>. Las funciones de biblioteca para
      manipular estas cadenas asumen que el último byte tiene valor cero. Las
      cadenas de texto se escriben en el programa rodeadas de dobles comillas y
      contienen el valor cero al final. A continuación se muestran dos
      definiciones:</p><pre class="programlisting">#define SIZE 6
char a = 'A';
char b[SIZE] = "hello";</pre><p xml:lang="es" lang="es">¿Por qué la segunda definición es una tabla de seis
      elementos si la palabra tiene sólo cinco letras?</p><div class="note" title="Sugerencia"><h3 class="title">
	  <span xml:lang="es" lang="es">Sugerencia</span>
	  
	</h3><p xml:lang="es" lang="es">Reutiliza el programa de la sección anterior y añade
        definiciones de letras y cadenas. Para estas últimas prueba a poner
        diferentes tamaños de tabla (demasiado pequeños y demasiado
        grandes para la cadena). Escribe también expresiones aritméticas sobre
	las letras. Recuerda que si el compilador no emite mensaje alguno, el
	programa es correcto.</p></div><div class="section" title="Preguntas de autoevaluación"><div class="titlepage"><div><div><h4 class="title" id="data_types_characters_and_strings_selfassessment">
	  <span xml:lang="es" lang="es">Preguntas de autoevaluación</span>
	  
	</h4></div></div></div><div class="orderedlist"><ol><li class="listitem"><p xml:lang="es" lang="es">Considera la siguiente declaración:</p><pre class="programlisting">#define SIZE 6      
char m[SIZE] = 'strag';</pre><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_char_1" id="data_types_char_1"><p xml:lang="es" lang="es">Es incorrecta porque la cadena debe ir rodeada de
	      dobles comillas.</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_char_1','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_char_1')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_char_1','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_char_1_response" id="data_types_char_1_response"></iframe></form><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_char_2" id="data_types_char_2"><p xml:lang="es" lang="es">Es incorrecta porque el tamaño debe ser 5 (tiene
	      cinco letras).</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Verdadero</p></li><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_char_2','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_char_2')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_char_2','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_char_2_response" id="data_types_char_2_response"></iframe></form><p xml:lang="es" lang="es">Si te parece que las respuestas correctas están equivocadas,
	    escribe esa declaración en un programa y compílalo.</p></li><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_char_3" id="data_types_char_3"><p xml:lang="es" lang="es">Un programa C que imprime el resultado de la
	      expresión <code class="code">'M' + 25</code> es correcto e imprime una
	      <span class="quote">“<span class="quote">f</span>”</span>.</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none;         background-repeat: no-repeat; background-position: 0 0;        padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><p xml:lang="es" lang="es">Te recomendamos que escribas ese programa. Para
	      imprimir pon <code class="code">printf("%c\n", 'M' + 25);</code>.</p><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_char_3','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_char_3')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_char_3','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_char_3_response" id="data_types_char_3_response"></iframe></form></li></ol></div></div></div><div class="section" title="2.1.3. Números reales"><div class="titlepage"><div><div><h3 class="title" id="data_types_real_numbers">2.1.3. 
	<span xml:lang="es" lang="es">Números reales</span>
	
      </h3></div></div></div><p xml:lang="es" lang="es">Los números reales se definen con
      <span class="quote">“<span class="quote"><code class="code">float</code></span>”</span> o <span class="quote">“<span class="quote"><code class="code">double</code></span>”</span>. La
      diferencia entre ambas es la precisión que ofrece su representación
      interna. Hay un número infinito de reales, pero se representan con un
      número finito de bits. A mayor número de bits, mayor número de reales se
      representan, y por tanto, mayor precisión. Los reales definidos con
      <span class="quote">“<span class="quote"><code class="code">double</code></span>”</span> tienen un tamaño doble a los definidos
      con <span class="quote">“<span class="quote"><code class="code">float</code></span>”</span>. Al igual que en el caso de los
      enteros, el tamaño de estas representaciones varía de una plataforma a
      otra.</p><p xml:lang="es" lang="es">Algunas plataformas ofrecen números reales con tamaño
      mayor al <span class="quote">“<span class="quote"><code class="code">double</code></span>”</span> que se definen como
      <span class="quote">“<span class="quote"><code class="code">long double</code></span>”</span>. Los tamaños típicos para los
      tipos <span class="quote">“<span class="quote"><code class="code">float</code></span>”</span>,
      <span class="quote">“<span class="quote"><code class="code">double</code></span>”</span> y <span class="quote">“<span class="quote"><code class="code">long
      double</code></span>”</span> son 4, 8 y 12 bytes respectivamente. A continuación
      se muestran varias definiciones de números reales.</p><pre class="programlisting">float a = 3.5;
double b = -5.4e-12;
long double c = 3.54e320;</pre><div class="note" title="Sugerencia"><h3 class="title">
	  <span xml:lang="es" lang="es">Sugerencia</span>
	  
	</h3><p xml:lang="es" lang="es">Añade al programa de los apartados anteriores
        definiciones de números reales. Prueba a definir números muy grandes o
        pequeños para ver la capacidad de representación de los tres
        tipos. Compila para ver si las definiciones son correctas.</p></div></div><div class="section" title="2.1.4. Tablas"><div class="titlepage"><div><div><h3 class="title" id="data_types_arrays">2.1.4. 
	    <span xml:lang="es" lang="es">Tablas</span>
	    
      </h3></div></div></div><p xml:lang="es" lang="es">Las tablas en C son prácticamente idénticas a las de Java,
      con el tamaño entre corchetes a continuación del nombre. Al igual que en
      Java, los índices de la tabla comienzan por cero. A continuación se
      muestran algunos ejemplos:</p><pre class="programlisting">#define SIZE_TABLE 100
#define  SIZE_SHORT 5
#define SIZE_LONG 3
#define SIZE_NAME 10

int table[SIZE_TABLE];
short st[SIZE_SHORT] = { 1, 2, 3, 4, 5 };
long lt[SIZE_LONG] = { 20, 30, 40};
char name[SIZE_NAME];</pre><p xml:lang="es" lang="es">Los elementos de la tabla se acceden con el nombre de la
      tabla seguido del índice entre corchetes.</p><p xml:lang="es" lang="es">Una de las diferencias entre C y Java es que el acceso a
      una tabla en C no se verifica. Cuando se ejecuta un programa en Java si se
      accede a una tabla con un índice incorrecto, se genera una excepción de
      tipo <span class="quote">“<span class="quote"><code class="code">ArrayIndexOutOfBounds</code></span>”</span>. Estas
      comprobaciones no se hacen <span class="emphasis"><em>nunca</em></span> en C (a no ser que
      se escriban explícitamente en el programa). Si se accede a una tabla con
      un índice incorrecto se manipulan datos en una zona de memoria incorrecta
      y el programa continua su ejecución.</p><p xml:lang="es" lang="es">Tras este acceso incorrecto pueden suceder dos cosas. La
      primera es que la memoria a la que ha accedido por error esté fuera de los
      límites del programa. En este caso la ejecución termina de manera abrupta
      y en el intérprete de comandos se muestra el mensaje
      <span class="quote">“<span class="quote"><span class="command"><strong>segmentation fault</strong></span></span>”</span>. La otra posibilidad
      es que se acceda a otro lugar dentro de los datos del programa. Esta
      situación seguramente producirá un error cuyos síntomas sean difíciles de
      relacionar con el acceso incorrecto.</p><div class="section" title="Tablas de múltiples dimensiones"><div class="titlepage"><div><div><h4 class="title" id="data_types_multiple_dimension_arrays">
	  <span xml:lang="es" lang="es">Tablas de múltiples dimensiones</span>
	  
	</h4></div></div></div><p xml:lang="es" lang="es">C permite la definición de tablas de múltiples
	dimensiones escribiendo los diferentes tamaños rodeados de corchetes y
	concatenados. El acceso se realiza concatenando tantos índices como sea
	preciso rodeados de corchetes. Al igual que en el caso de las tablas
	unidimensionales, no se realiza ningún tipo de comprobación de los
	índices cuando se accede a un elemento. A continuación se muestra la
	definición de tablas de más de una dimensión.</p><pre class="programlisting">#define MATRIX_A 100
#define MATRIX_B 30
#define COMMON_SIZE 10

int matrix[MATRIX_A][MATRIX_B];
long squarematrix[COMMON_SIZE][COMMON_SIZE];
char soup[COMMON_SIZE][COMMON_SIZE];</pre></div><div class="note" title="Sugerencia"><h3 class="title">
	  <span xml:lang="es" lang="es">Sugerencia</span>
	  
	</h3><p xml:lang="es" lang="es">Añade al programa de los apartados anteriores
        definiciones y manipulación de tablas de los diferentes tipos de datos
	básicos. Comprueba que son correctos sintácticamente mediante el
	compilador.</p></div></div><div class="section" title="2.1.5. Tamaño de los tipos de datos básicos"><div class="titlepage"><div><div><h3 class="title" id="data_types_size_of_basic_data_types">2.1.5. 
	<span xml:lang="es" lang="es">Tamaño de los tipos de datos básicos</span>
	
      </h3></div></div></div><p xml:lang="es" lang="es">En C, el tamaño de los tipos de datos básicos puede variar
      de una plataforma a otra. Esta característica está detrás de buena parte
      de las críticas que recibe este lenguaje, pues de ella se derivan
      problemas de compatibilidad (una aplicación se comporta de forma diferente
      cuando se ejecuta en plataformas diferentes).</p><p xml:lang="es" lang="es">A modo de ejemplo, en la siguiente tabla se incluyen los
      tamaños de los tipos de datos para las plataformas Linux/Intel i686.</p><div class="table"><a id="data_type_basic_sizes"></a><p class="title"><strong>Tabla 2.1. 
          <span xml:lang="es" lang="es">Tamaños de los tipos de datos en C en la plataforma
          Linux/Intel i686</span>
          
	</strong></p><div class="table-contents"><table summary="&#10;          Tamaños de los tipos de datos en C en la plataforma&#10;          Linux/Intel i686&#10;          &#10;&#9;" border="1"><colgroup><col align="left" class="col1" /><col align="center" class="col2" /></colgroup><thead><tr><th class="table_colored_cell_1" align="center">
		<span xml:lang="es" lang="es">Tipo</span>
		
	      </th><th class="table_colored_cell_1" align="center">
		<span xml:lang="es" lang="es">Tamaño</span>
		 (bytes)
	      </th></tr></thead><tbody><tr><td align="left"><code class="code">char</code>, <code class="code">unsigned char</code></td><td align="center">1</td></tr><tr><td align="left">
		<code class="code">short int</code>, <code class="code">unsigned short int</code>
	      </td><td align="center">2</td></tr><tr><td align="left">
		<code class="code">int</code>, <code class="code">unsigned int</code>, <code class="code">long
		int</code>, <code class="code">unsigned long int</code>
	      </td><td align="center">4</td></tr><tr><td align="left"><code class="code">float</code></td><td align="center">4</td></tr><tr><td align="left"><code class="code">double</code></td><td align="center">8</td></tr><tr><td align="left"><code class="code">long double</code></td><td align="center">12</td></tr></tbody></table></div></div><br class="table-break" /></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="program_structure_activities_es.html"><img src="nav_graphics/prev.png" alt="Anterior" /></a> </td><td width="20%" align="center"><a accesskey="u" href="c_programming_part_es.html"><img src="nav_graphics/up.png" alt="Subir" /></a></td><td width="40%" align="right"> <a accesskey="n" href="data_types_structured_data_types_es.html"><img src="nav_graphics/next.png" alt="Siguiente" /></a></td></tr><tr><td width="40%" align="left" valign="top">1.3. 
    <span xml:lang="es" lang="es">Actividades</span>
   </td><td width="20%" align="center"><a accesskey="h" href="index_es.html"><img src="nav_graphics/home.png" alt="Inicio" /></a></td><td width="40%" align="right" valign="top"> 2.2. 
      <span xml:lang="es" lang="es">Tipos de datos estructurados</span>
      
    </td></tr></table></div><div id="adagio_page_footer"><a href="http://www.uc3m.es">© Universidad Carlos III de
	Madrid</a> | 
    <a id="cc_license_icon" href="http://creativecommons.org/licenses/by-nc-sa/3.0/es/">Licencia Creative
	Commons</a></div><script type="text/javascript">
        var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
        document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
      </script><script type="text/javascript">
        var pageTracker = _gat._getTracker("UA-68116639-1");
        pageTracker._trackPageview();
      </script></body></html>
Scroll al inicio