SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
AULA POLITÈCNICA / ETSETB




Marco A. Peña Basurto
José M. Cela Espín

Introducción a
la programación en C




                            EDICIONS UPC
Primera edición: septiembre de 2000




Diseño de la cubierta: Manuel Andreu


©       Los autores, 2000

©       Edicions UPC, 2000
        Edicions de la Universitat Politècnica de Catalunya, SL
        Jordi Girona Salgado 31, 08034 Barcelona
        Tel.: 934 016 883 Fax: 934 015 885
        Edicions Virtuals: www.edicionsupc.es
        E-mail: edicions-upc@upc.es


Producción:            CPET (Centre de Publicacions del Campus Nord)
                       La Cup. Gran Capità s/n, 08034 Barcelona


Depósito legal: B-32.449-2000
ISBN: 84-8301-429-7

Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del copyright, bajo las san-
ciones establecidas en las leyes, la reproducción total o parcial de esta obra por cualquier medio o pro-
cedimiento, comprendidos la reprografía y el tratamiento informático, y la distribución de ejemplares de
ella mediante alquiler o préstamo públicos.
Introducci´ n a la programaci´ n en C
          o                  o

               Marco A. Pe˜ a n
                 Jos´ M. Cela
                    e
  Departament d’Arquitectura de Computadors
     Universitat Polit` cnica de Catalunya
                      e
          08034 Barcelona, Espa˜ an
             marcoa@ac.upc.es
               cela@ac.upc.es

             19 de junio de 2000
i                                                                                                                                            ´
                                                                                                                                             Indice General




´
Indice General

´
Indice de Figuras                                                                                                                                                 v

´
Indice de Tablas                                                                                                                                                 vii

Prefacio                                                                                                                                                         ix

1 Conceptos b´ sicos de programaci´ n
              a                     o                                                                                                                             1
  1.1 Ordenador y perif´ ricos . . . . .
                         e                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    1
  1.2 Bits, bytes y palabras . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
  1.3 Lenguajes de programaci´ n . . .
                                o            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
      1.3.1 Lenguajes de bajo nivel .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3
      1.3.2 Lenguajes de alto nivel .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3
  1.4 Elaboraci´ n de un programa . .
                o                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
  1.5 Traductores . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
      1.5.1 Ensambladores . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
      1.5.2 Int´ rpretes . . . . . . .
                 e                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
      1.5.3 Compiladores . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6

2 Primer contacto con C                                                                                                                                           7
  2.1 Un poco de historia . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  2.2 Caracter´sticas del lenguaje . .
               ı                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  2.3 Creaci´ n de un programa . . .
            o                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
  2.4 Primeros pasos con C . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  2.5 El modelo de compilaci´ n de C
                              o          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10

3 Empezando a programar                                                                                                                                          13
  3.1 Identificadores . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  3.2 Estructura de un programa . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  3.3 Variables y constantes . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
      3.3.1 Variables . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
      3.3.2 Constantes . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
      3.3.3 Entrada y salida de valores          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  3.4 Expresiones . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
      3.4.1 Operador de asignaci´ n . .
                                    o            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
      3.4.2 Operadores aritm´ ticos . .
                                e                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17




                                     © Los autores, 2000; © Edicions UPC, 2000.
´
Indice General                                                                                                                                                     ii



         3.4.3 Operadores relacionales        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
         3.4.4 Operadores l´ gicos . . .
                              o               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
         3.4.5 Prioridad de operadores        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
   3.5   Ejercicios . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20

4 Construcciones condicionales                                                                                                                                    23
  4.1 Construcci´ n if . . . . . . . .
                o                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      4.1.1 Variante if-else . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
      4.1.2 Variante if-else-if               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
  4.2 El operador condicional ? . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
  4.3 Construcci´ n switch . . . . .
                o                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
  4.4 Ejercicios . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31

5 Construcciones iterativas                                                                                                                                       33
  5.1 Construcci´ n while . . . . . . . . .
                o                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
  5.2 Construcci´ n do-while . . . . . .
                o                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
  5.3 Construcci´ n for . . . . . . . . . .
                o                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
      5.3.1 El operador coma (,) . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
      5.3.2 Equivalencia for-while . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
  5.4 Las sentencias break y continue                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
  5.5 Ejercicios . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39

6 Tipos de datos elementales                                                                                                                                      41
  6.1 N´ meros enteros . . . . . . .
         u                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
       6.1.1 Modificadores . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
       6.1.2 Resumen . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
  6.2 Caracteres . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
       6.2.1 Caracteres especiales .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
       6.2.2 Enteros y el tipo char       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
       6.2.3 Conversiones de tipos        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  6.3 N´ meros reales . . . . . . . .
         u                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
  6.4 Ejercicios . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47

7 Tipos de datos estructurados: Tablas                                                                                                                            49
  7.1 Vectores . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       7.1.1 Consulta . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
       7.1.2 Asignaci´ n . . . . . . . .
                       o                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
       7.1.3 Ejemplos . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
  7.2 Matrices . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
       7.2.1 Consulta . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
       7.2.2 Asignaci´ n . . . . . . . .
                       o                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
       7.2.3 Ejemplo . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
  7.3 Tablas multidimensionales . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
       7.3.1 Ejemplo . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
  7.4 Cadenas de caracteres . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57




                                        © Los autores, 2000; © Edicions UPC, 2000.
iii                                                                                                                                         ´
                                                                                                                                            Indice General



            7.4.1 Asignaci´ n . . . . . . . . . . .
                             o                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
            7.4.2 Manejo de cadenas de caracteres           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
            7.4.3 Ejemplos . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60
      7.5   Ejercicios . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61

8 Otros tipos de datos                                                                                                                                          63
  8.1 Estructuras . . . . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
       8.1.1 Declaraci´ n de variables . . . . . . .
                         o                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
       8.1.2 Acceso a los campos . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
       8.1.3 Asignaci´ n . . . . . . . . . . . . . .
                        o                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
       8.1.4 Ejemplo . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
  8.2 Uniones . . . . . . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
       8.2.1 Ejemplo . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
  8.3 Tipos de datos enumerados . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
  8.4 Definici´ n de nuevos tipos de datos . . . . .
               o                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
  8.5 Tiras de bits . . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
       8.5.1 Operador de negaci´ n . . . . . . . .
                                   o                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
       8.5.2 Operadores l´ gicos . . . . . . . . . .
                            o                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
       8.5.3 Operadores de desplazamiento de bits                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
  8.6 Ejercicios . . . . . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72

9 Punteros                                                                                                                                                      75
  9.1 Declaraci´ n y asignaci´ n de direcciones
                o            o                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
       9.1.1 Declaraci´ n . . . . . . . . . . .
                        o                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
       9.1.2 Asignaci´ n de direcciones . . .
                       o                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
  9.2 Indirecci´ n . . . . . . . . . . . . . . .
               o                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
  9.3 Operaciones con punteros . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
  9.4 Punteros y tablas . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
  9.5 Punteros y estructuras . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83
  9.6 Ejercicios . . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84

10 Funciones                                                                                                                                                    87
   10.1 Generalidades . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   87
   10.2 Definici´ n y llamada . . . . . . . . . . .
                o                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   89
        10.2.1 Definici´ n . . . . . . . . . . . . .
                         o                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   89
        10.2.2 Prototipos . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   90
        10.2.3 Llamada . . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   91
   10.3 Variables y par´ metros . . . . . . . . . .
                       a                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   91
        10.3.1 Variables locales . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   91
        10.3.2 Variables globales . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   91
        10.3.3 Par´ metros formales . . . . . . .
                   a                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   92
   10.4 Devoluci´ n de resultados . . . . . . . . .
                 o                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   93
   10.5 Paso de par´ metros . . . . . . . . . . . .
                   a                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   94
        10.5.1 Paso de par´ metros por valor . . .
                           a                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   94
        10.5.2 Paso de par´ metros por referencia
                           a                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   95




                                           © Los autores, 2000; © Edicions UPC, 2000.
´
Indice General                                                                                                                                                    iv



        10.5.3 Las tablas y las funciones . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 96
        10.5.4 Par´ metros en la funci´ n main
                   a                   o                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 99
   10.6 Recursividad . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 100
   10.7 Ejercicios . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 101

11 Ficheros                                                                                                                                                      105
   11.1 Abrir y cerrar ficheros . . . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   107
   11.2 Leer y escribir en ficheros . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   109
   11.3 Otras funciones para el manejo de ficheros . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
        11.3.1 feof . . . . . . . . . . . . . . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
        11.3.2 ferror . . . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   113
        11.3.3 fflush . . . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   113
   11.4 Ficheros est´ ndar: stdin, stdout, stderr
                    a                                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   113
   11.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   116

A El preprocesador                                                                                                                                               119
  A.1 Directiva include . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
  A.2 Directivas define y undef .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
  A.3 Directivas ifdef y ifndef .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   120
  A.4 Macros . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   122

B La librer´a est´ ndar
            ı    a                                                                                                                                               123
  B.1 Manipulaci´ n de cadenas de caracteres . .
                    o                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   123
  B.2 Entrada y salida . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
        B.2.1 Entrada y salida b´ sica . . . . . .
                                a                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
        B.2.2 Entrada y salida con formato . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
        B.2.3 Ficheros . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   126
  B.3 Funciones matem´ ticas . . . . . . . . . .
                        a                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   127
  B.4 Clasificaci´ n y manipulaci´ n de caracteres
                   o             o                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   128
  B.5 Conversi´ n de datos . . . . . . . . . . . .
                o                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   129
  B.6 Manipulaci´ n de directorios . . . . . . .
                    o                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   129
  B.7 Memoria din´ mica . . . . . . . . . . . .
                      a                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   129

C Sistemas de numeraci´ n
                       o                                                                                                                                         135
  C.1 Naturales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                          .   .   .   .   .   .   .   .   .   .   .   135
  C.2 Enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                          .   .   .   .   .   .   .   .   .   .   .   135
  C.3 Reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                         .   .   .   .   .   .   .   .   .   .   .   136
       C.3.1 Problemas derivados de la representaci´ n en coma flotante
                                                      o                                                              .   .   .   .   .   .   .   .   .   .   .   138

D Tabla de caracteres ASCII                                                                                                                                      141

E Bibliograf´a y recursos WEB
            ı                                                                                                                                                    143




                                        © Los autores, 2000; © Edicions UPC, 2000.
v                                                                                                     ´
                                                                                                      Indice de Figuras




´
Indice de Figuras

    1.1   Niveles de abstracci´ n en los lenguajes de programaci´ n . . . . .
                               o                                o                     .   .   .   .   .   .   .   .   .   .   .   2
    1.2   Cronolog´a en el desarrollo de algunos lenguajes de programaci´ n
                   ı                                                       o          .   .   .   .   .   .   .   .   .   .   .   3
    1.3   Ciclo de vida de un programa . . . . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   4
    1.4   Fases en la interpretaci´ n de un programa . . . . . . . . . . . . .
                                   o                                                  .   .   .   .   .   .   .   .   .   .   .   5
    1.5   Fases en la compilaci´ n de un programa . . . . . . . . . . . . . .
                                 o                                                    .   .   .   .   .   .   .   .   .   .   .   6

    2.1   Modelo de compilaci´ n de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                             o                                                                                                    11

    4.1   Esquema de funcionamiento de if y de if-else . . . . . . . . . . . . . . . . . . .                                      24
    4.2   Esquema de funcionamiento de switch . . . . . . . . . . . . . . . . . . . . . . . . .                                   29

    5.1   Esquema de funcionamiento de while . . . . . . . . . . . . . . . . . . . . . . . . .                                    34
    5.2   Esquema de funcionamiento de do-while . . . . . . . . . . . . . . . . . . . . . . .                                     35
    5.3   Esquema de funcionamiento de for . . . . . . . . . . . . . . . . . . . . . . . . . . .                                  36

    7.1   Representaci´ n gr´ fica de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . .
                      o     a                                                                                                     50
    7.2   Representaci´ n gr´ fica de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . .
                      o     a                                                                                                     54
    7.3   Representaci´ n gr´ fica de una tabla de tres dimensiones . . . . . . . . . . . . . . . . .
                      o     a                                                                                                     56

    9.1   Acceso a una matriz mediante un puntero . . . . . . . . . . . . . . . . . . . . . . . .                                 82

    10.1 Acceso a una matriz mediante un puntero . . . . . . . . . . . . . . . . . . . . . . . .                                  99

    11.1 Almacenamiento de un fichero de texto . . . . . . . . . . . . . . . . . . . . . . . . . 106




                                         © Los autores, 2000; © Edicions UPC, 2000.
vii                                                                                                                                ´
                                                                                                                                   Indice de Tablas




´
Indice de Tablas

      3.1   Palabras reservadas de C . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    13
      3.2   Operadores aritm´ ticos en C . . . . . . . . . .
                             e                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    17
      3.3   Operadores relacionales y l´ gicos en C . . . . .
                                       o                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    19
      3.4   Tabla de verdad de los operadores l´ gicos en C
                                                o                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    19
      3.5   Prioridad y asociatividad de los operadores en C           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    20

      6.1   Representaci´ n de enteros en decimal, octal y hexadecimal
                         o                                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
      6.2   Resumen de tipos de datos enteros . . . . . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
      6.3   Caracteres interpretados como enteros . . . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
      6.4   Resumen de tipos de datos reales . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46

      8.1   Tabla de verdad de los operadores l´ gicos . . . . . . . . . . . . . . . . . . . . . . . .
                                               o                                                                                                            71

      C.1   Representaci´ n de n´ meros naturales en binario natural
                        o       u                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   135
      C.2   Representaci´ n de n´ meros enteros en complemento a 2
                        o       u                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
      C.3   Representaci´ n de n´ meros enteros en
                        o       u                       ��0��0   . . .
                                                                    0000                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   137
      C.4   Representaci´ n de n´ meros reales . . . . . . . . . . . .
                        o       u                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   138

      D.1 Caracteres y sus c´ digos ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
                            o




                                           © Los autores, 2000; © Edicions UPC, 2000.
ix                                                                                                 Pr´ logo
                                                                                                     o




Pr´ logo
  o

Este libro surge a partir de la experiencia docente de los autores en la asignatura Introducci´ n a los
                                                                                                o
ordenadores de la Escola T` cnica Superior d’Enginyeria de Telecomunicaci´ de Barcelona, de la Uni-
                            e                                                o
versitat Polit` cnica de Catalunya. Como su t´tulo indica, se trata de un texto de introduci´ n a la pro-
              e                               ı                                             o
gramaci´ n en lenguaje C. El libro pretende ce˜ irse a los aspectos fundamentales del est´ ndar ANSI C
         o                                     n                                         a
actual. Aunque hoy en d´a existen otros lenguajes de programaci´ n muy populares como C++ o JAVA,
                          ı                                       o
la comprensi´ n de estos lenguajes exige un s´ lido conocimiento de las bases de programaci´ n en C.
              o                              o                                               o
    El texto est´ concebido como un curso completo y por lo tanto debe ser le´do de forma secuencial.
                a                                                                  ı
Al final de cada cap´tulo hay un conjunto de ejercicios propuestos. El lector debe tratar de resolver el
                      ı
mayor n´ mero posible de estos ejercicos. De igual forma es una buena pr´ ctica el programar los ejem-
         u                                                                   a
plos resueltos en el texto. El lector debe recordar que la programaci´ n es una t´ cnica aplicada, igual que
                                                                     o           e
tocar un instrumento musical, y por lo tanto requiere muchas horas de ensayo para ser dominada. Los
ejercicios propuestos son lo suficientemente simples como para no requerir conocimientos adicionales
de otras materias (matem´ ticas, f´sica, contabilidad, etc).
                           a        ı
    Uno de los puntos m´ s importantes para quien empieza a programar es adoptar desde el principio
                         a
un buen estilo de programaci´ n. Esto es, escribir las construcciones del lenguaje de una forma clara
                              o
y consistente. En este sentido, los ejemplos resueltos en el texto muestran un buen estilo b´ sico de
                                                                                               a
programaci´ n, por lo que se recomienda al lector imitar dicho estilo cuando realice sus programas.
           o
     Los ap´ ndices A y B son de lectura obligada antes de comenzar a desarrollar programas de comple-
            e
jidad media. En dichos ap´ ndices el lector se familiarizar´ con el uso del preprocesador y de la librer´a
                           e                               a                                            ı
est´ ndar. Ambas son herramientas fundamentales para desarrollar programas.
   a
    El ap´ ndice C incluye una descripci´ n de los formatos de datos en el computador. Este tema no
          e                             o
es propiamente de programci´ n, pero la comprensi´ n de dichos formatos ayuda al programador a en-
                             o                      o
tender mejor conceptos b´ sicos, como las operaciones de conversi´ n de tipos. El lector puede leer este
                         a                                       o
ap´ ndice en cualquier momento, aunque recomendamos leerlo antes del cap´tulo 6.
  e                                                                         ı
    En las referencias bibliogr´ ficas se indican algunas direcciones web donde el lector podr´ encontrar
                               a                                                             a
preguntas y respuestas comunes de quienes se inician en el lenguaje C. As´ mismo, el lector podr´
                                                                               ı                       a
encontrar materiales adicionales sobre programaci´ n, historia del lenguaje, etc.
                                                    o




                                          © Los autores, 2000; © Edicions UPC, 2000.
1                                                                               1. Conceptos b´ sicos de programaci´ n
                                                                                              a                    o




Cap´tulo 1
   ı

Conceptos b´ sicos de programaci´ n
           a                    o

1.1 Ordenador y perif´ ricos
                     e
              o                         ´
Un ordenador s´ lo es capaz de ejecutar ordenes y operaciones muy b´ sicas, tales como:
                                                                   a

    0   Aritm´ tica entera: sumar, restar, multiplicar, etc.
             e

    0   Comparar valores num´ ricos o alfanum´ ricos
                            e                e

    0   Almacenar o recuperar informaci´ n
                                       o

    Con la combinaci´ n de estas operaciones b´ sicas, y gracias a su gran potencia de c´ lculo, el orde-
                      o                         a                                       a
nador puede llevar a cabo procesos muy complejos. Sin embargo, en cualquier caso existe una estrecha
dependencia del ordenador con el programador. Es el programador quien indica a la m´ quina c´ mo y
                                                                                        a         o
qu´ debe hacer, mediante la l´ gica y el razonamiento previo, expresado en forma de un programa.
  e                          o

    En definitiva, el ordenador s´ lo es capaz de aceptar datos de entrada, procesarlos y facilitar otros
                                 o
datos o resultados de salida. Los datos se introducen u obtienen del ordenador mediante los perif´ ricos
                                                                                                     e
                     ´
de entrada y salida. Estos son los encargados de facilitar la relaci´ n entre el coraz´ n del ordenador y el
                                                                    o                 o
mundo exterior, y en particular los usuarios de ordenadores. Dependiendo de su funci´ n particular, los
                                                                                           o
perif´ ricos pueden clasificarse en:
     e

Perif´ ricos de entrada: cuya funci´ n es facilitar la introducci´ n de datos y ordenes al ordenador: te-
     e                                  o                            o               ´
                o a         ´
      clado, rat´ n, l´ piz optico, lector de c´ digo de barras, esc´ ner, tableta digitalizadora, etc.
                                               o                    a

Perif´ ricos de salida: cuya funci´ n es mostrar al exterior informaci´ n almacenada en memoria o los
     e                            o                                   o
      resultados de las operaciones realizadas por el ordenador: pantalla, impresora, plotter, etc.

Perif´ ricos de entrada y salida: capaces tanto de introducir como de extraer informaci´ n del ordena-
     e                                                                                 o
                                               ´
      dor: discos y cintas magn´ ticos, discos opticos, etc.
                                e

Perif´ ricos de comunicaci´ n: encargados de establecer y facilitar el intercambio de informaci´ n entre
     e                    o                                                                    o
      dos ordenadores: m´ dem, tarjetas de red (Ethernet, Token Ring, RDSI, . . . ), etc.
                        o




                                         © Los autores, 2000; © Edicions UPC, 2000.
1.2. Bits, bytes y palabras                                                                                  2



                                   Programador


                                                  Lenguaje natural


                                                  Lenguaje de programación


                                                  Lenguaje máquina



                                    Ordenador

                 Figura 1.1: Niveles de abstracci´ n en los lenguajes de programaci´ n
                                                 o                                 o


1.2 Bits, bytes y palabras
La unidad de memoria m´ s peque˜ a en un ordenador se denomina bit (del ingl´ s binary digit). Puede
                            a         n                                               e
       ´
tomar unicamente dos posibles valores: o . En ocasiones, debido a la relaci´ n intr´nseca con los
                                              0     �                                     o    ı
valores en las se˜ ales el´ ctricas en circuitos digitales, se dice que un bit est´ bajo o alto, o bien desco-
                 n        e                                                       a
nectado o conectado. Como puede verse, no es posible almacenar mucha informaci´ n en un solo bit.
                                                                                            o
Sin embargo, un ordenador posee cantidades ingentes de ellos, por lo que podr´a decirse que los bits
                                                                                        ı
son los bloques b´ sicos con los que se construye la memoria del ordenador.
                  a

     El byte, compuesto por ocho bits (algunos autores se refieren a esta unidad como octeto), es una
                     a ´
unidad de memoria m´ s util. Puesto que cada bit puede tomar el valor o , en un byte pueden represen-
                                                                                       � 0
tarse hasta��� � 0�  combinaciones de ceros y unos (256 c´ digos binarios). Con estas combinaciones
                                                           o
pueden representarse, por ejemplo, los enteros entre y       ( 0 ��� 0    ), un conjunto de caracteres,
                                                                                000   � � 0�
etc.

    La unidad natural de memoria para un ordenador es la palabra. Los ordenadores de sobremesa
actuales, por ejemplo, suelen trabajar con palabras de 32 o 64 bits. En grandes ordenadores, el tama˜ o
                                                                                                    n
de la palabra puede ser mucho mayor, pero siempre formada por un n´ mero de bits, potencia de . En
                                                                       u                                �
cualquier caso, los ordenadores encadenan dos o m´ s palabras de memoria con el fin de poder almacenar
                                                   a
datos complejos y, en general, de mayor tama˜ o.
                                              n



1.3 Lenguajes de programaci´ n
                           o
Un lenguaje de programaci´ n podr´a definirse como una notaci´ n o conjunto de s´mbolos y caracteres
                            o        ı                           o                    ı
que se combinan entre s´ siguiendo las reglas de una sintaxis predefinida, con el fin de posibilitar la
                          ı
transmisi´ n de instrucciones a un ordenador. Dichos s´mbolos y caracteres son traducidos internamente
         o                                              ı
a un conjunto de se˜ ales el´ ctricas representadas en sistema binario, es decir, s´ lo dos valores: 0 y 1.
                     n      e                                                      o
Esta traducci´ n es necesaria porque el procesador s´ lo entiende ese lenguaje, al cual nos referiremos
              o                                       o
como lenguaje m´ quina.
                  a




                                        © Los autores, 2000; © Edicions UPC, 2000.
3                                                                            1. Conceptos b´ sicos de programaci´ n
                                                                                           a                    o



                       COBOL                               Forth
                                                                                          Ada
           FORTRAN                          Prolog             C
                              BASIC
                  LISP         PL/I       SIMULA                      Modula-2
Ensamblador        Algol               Logo          Pascal                   Smalltalk C++                 Java



    1950      1955       1960      1965          1970           1975               1980     1985   1990     1995

            Figura 1.2: Cronolog´a en el desarrollo de algunos lenguajes de programaci´ n
                                ı                                                     o


1.3.1 Lenguajes de bajo nivel
Se incluyen en esta categor´a aquellos lenguajes que por sus caracter´sticas se encuentran m´ s pr´ ximos
                            ı                                        ı                      a o
a la arquitectura del ordenador, como el lenguaje m´ quina y el lenguaje ensamblador.
                                                    a

Lenguaje m´ quina
          a
Cualquier problema que deseemos resolver se plantea en primer lugar en nuestro lenguaje natural.
Sin embargo, para que la secuencia de pasos que resuelven el problema pueda ser entendida por un
ordenador, debe traducirse a un lenguaje muy b´ sico denominado lenguaje m´ quina.
                                              a                           a
                                                   ´
    El lenguaje m´ quina se caracteriza por ser el unico que es directamente inteligible por el ordenador,
                 a
                                    o          ´
puesto que se basa en la combinaci´ n de dos unicos s´mbolos (0 y 1) denominados bits. Adem´ s cada
                                                        ı                                          a
procesador posee su propio lenguaje m´ quina, por lo que un programa escrito en lenguaje m´ quina de
                                        a                                                        a
un procesador X no podr´ , en principio, ejecutarse en un procesador Y.
                         a

Lenguaje ensamblador
Constituye una evoluci´ n del lenguaje m´ quina. Se basa en la utilizaci´ n de mnemot´ cnicos, esto es,
                       o                 a                              o             e
abreviaturas de palabras que indican nombres de instrucciones. Para programar en lenguaje ensambla-
dor es necesario conocer en profundidad la estructura y funcionamiento interno del ordenador, as´ como
                                                                                                ı
dominar el uso de diferentes sistemas de numeraci´ n, como el binario, hexadecimal, octal, etc.
                                                   o
     En general, los programas escritos en ensamblador requieren mucho menos espacio de memoria y
se ejecutan m´ s r´ pidamente que si se hubiesen desarrollado en un lenguaje de alto nivel, puesto que
              a a
   a                                          ı                       ´
est´ n optimizados para una arquitectura espec´fica. Sin embargo, esto ultimo es un inconveniente, pues
causa que los programas no sean portables de un ordenador a otro con un procesador distinto.

1.3.2 Lenguajes de alto nivel
Se engloban aqu´ todos los lenguajes de programaci´ n que por sus caracter´sticas se asemejan m´ s al
                 ı                                o                       ı                    a
lenguaje natural del programador. Algunos de los m´ s conocidos son: FORTRAN, BASIC, Pascal,
                                                    a
Modula, C, Ada, Java, etc. (ver Fig. 1.2).
   La caracter´stica m´ s importante de estos lenguajes es que son independientes de la arquitectura del
              ı       a
ordenador, por lo que un programa escrito en un lenguaje de alto nivel puede ejecutarse sin problemas




                                      © Los autores, 2000; © Edicions UPC, 2000.
1.4. Elaboraci´ n de un programa
              o                                                                                               4




             ��������
             00000000
              Análisis
             ��������                                    ��������������
                                                         00000000000000
                                                          Mantenimiento
             00000000                                    ��������������
                                                         00000000000000
                            �������
                            0000000
                            0000000 0000000000000�����������
                             Diseño                00000000000
                                                    Explotación
                            ������� ������������������������
                                                   00000000000
                                    0000000000000
                                    �������������
                                      Codificación
                                    0000000000000
                                    �������������
                                Figura 1.3: Ciclo de vida de un programa


en otros ordenadores con procesadores distintos. Por ello, el programador no necesita conocer a fondo
el funcionamiento del ordenador en el que programa, sino que el lenguaje le permite abstraerse de los
detalles de bajo nivel. Esta abstracci´ n de la arquitectura de la m´ quina implica que todo programa
                                      o                             a
escrito en un lenguaje de alto nivel deber´ traducirse a lenguaje m´ quina, de forma que pueda ser
                                            a                          a
entendido y ejecutado por el ordenador. Para ello cada tipo de ordenador deber´ disponer de unos
                                                                                    a
programas especiales que realicen dicha traducci´ n (ver Sec. 1.5).
                                                  o


1.4 Elaboraci´ n de un programa
             o
El desarrollo de un programa para solucionar un determinado problema inform´ ticamente puede resu-
                                                                                  a
                                                    ´
mirse en el ya cl´ sico concepto de ciclo de vida. Este puede desglosarse en los siguientes pasos a seguir
                 a
secuencialmente: an´ lisis, dise˜ o, codificaci´ n, explotaci´ n y mantenimiento (ver Fig. 1.3).
                      a         n              o            o

An´ lisis
  a
En la fase de an´ lisis se estudia cu´ l es el problema a resolver y se especifican a muy alto nivel los
                  a                  a
procesos y estructuras de datos necesarios, de acuerdo con las necesidades del cliente. Para realizar
un buen an´ lisis ser´ necesario interaccionar con el cliente y conocer a fondo sus necesidades. Antes
           a         a
de proceder al dise˜ o es muy importante haber comprendido correctamente los requerimientos del
                     n
problema.

    ˜
Diseno
Una vez bien definido el problema y las l´neas generales para solucionarlo, se requiere una soluci´ n
                                               ı                                                             o
adecuada a un conjunto de recursos determinado. Tanto f´sicos: en qu´ ordenador va a funcionar la
                                                                 ı              e
aplicaci´ n, de qu´ tipo de perif´ ricos se dispone . . . , como l´ gicos: qu´ sistema operativo se usar´ , qu´
        o         e              e                                o          e                          a e
herramientas de desarrollo, qu´ bases de datos . . . Finalmente se dise˜ ar´ un conjunto de algoritmos
                                 e                                            n a
que resuelvan los distintos subproblemas en que se haya dividido el desarrollo.

Codificaci´ n
         o
Consiste en la traducci´ n de los algoritmos dise˜ ados previamente, utilizando el lenguaje y entorno de
                       o                         n
desarrollo escogidos en la fase anterior. Ser´ necesario realizar pruebas que garanticen al m´ ximo la
                                              a                                                 a
calidad de los programas desarrollados. Entre otras cosas, que est´ n libres de errores.
                                                                  e
                     o                                                              a     ´
    La documentaci´ n generada en esta fase junto con la de las fases anteriores ser´ muy util en el
futuro para las eventuales actuaciones de mantenimiento.




                                        © Los autores, 2000; © Edicions UPC, 2000.
5                                                                             1. Conceptos b´ sicos de programaci´ n
                                                                                            a                    o



                        Instrucción 1                   Intérprete                   Ejecución 1

                        Instrucción 2                   Intérprete                  Ejecución 2

                        Instrucción 3                   Intérprete                  Ejecución 3

                          ...

                        Figura 1.4: Fases en la interpretaci´ n de un programa
                                                            o


Explotaci´ n
         o
Los diferentes programas desarrollados en la fase anterior se instalan en el entorno final de trabajo. Si
es necesario se instalar´ n tambi´ n otras herramientas de utilidad, necesarias para el correcto funciona-
                        a        e
miento del sistema. Se debe proporcionar documentaci´ n, manuales de usuario, formaci´ n, etc.
                                                         o                                  o


Mantenimiento
En esta fase se realizar´ n correcciones al sistema desarrollado, bien para solventar errores no depura-
                          a
dos, bien para cambiar o a˜ adir nuevas funcionalidades requeridas por el cliente. Dependiendo de la
                              n
importancia del caso, ser´ necesario retomar el ciclo de vida a nivel de codificaci´ n, dise˜ o o incluso
                            a                                                       o       n
an´ lisis (ver Fig. 1.3).
  a
     Cuanto mejor se haya documentado el desarrollo en las primeras fases del ciclo de vida, menor ser´
                                                                                                      a
el tiempo necesario para llevar a cabo los distintos tipos de mantenimiento.


1.5 Traductores
                                 ´
Como ya se ha comentado, el unico lenguaje directamente inteligible por el ordenador es el lenguaje
m´ quina. Por ello, si se programa usando lenguajes de alto nivel ser´ necesario alg´ n programa traduc-
  a                                                                  a              u
     ´
tor. Este, a su vez, ser´ el encargado de comprobar que los programas est´ n escritos correctamente, de
                        a                                                  e
acuerdo con la definici´ n del lenguaje de programaci´ n empleado. Pueden distinguirse varios tipos de
                         o                           o
traductores:


1.5.1 Ensambladores
Los programas ensambladores son los encargados de traducir a lenguaje m´ quina los programas escritos
                                                                       a
en lenguaje ensamblador. La correspondencia entre ambos lenguajes es muy directa, por lo que los
ensambladores suelen ser programas relativamente sencillos.


1.5.2 Int´ rpretes
         e
El objetivo de un int´ rprete es procesar una a una las instrucciones de un programa escrito en un lenguaje
                     e
de alto nivel. Para cada instrucci´ n se verifica la sintaxis, se traduce a c´ digo m´ quina y finalmente se
                                    o                                        o      a
ejecuta. Es decir, que la traducci´ n y la ejecuci´ n se realizan como una sola operaci´ n (ver Fig. 1.4).
                                    o             o                                     o




                                       © Los autores, 2000; © Edicions UPC, 2000.

Más contenido relacionado

La actualidad más candente

DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...
DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...
DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...ramtamplam13
 
Manual básico de programación en c++
Manual básico de programación en c++Manual básico de programación en c++
Manual básico de programación en c++cexar0
 
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas EmbebidosPFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidosazubi
 
52811100 manual-sp
52811100 manual-sp52811100 manual-sp
52811100 manual-sprnestor41
 
Econometria aplicada con gretl
Econometria aplicada con gretlEconometria aplicada con gretl
Econometria aplicada con gretlapuntesdeeconomia
 
chVhdl univ valencia
chVhdl univ valenciachVhdl univ valencia
chVhdl univ valenciajjebmiz
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAndy Juan Sarango Veliz
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapaRobert Wolf
 

La actualidad más candente (16)

DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...
DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...
DESARROLLO DE UN COPROCESADOR EN PUNTO FLOTANTE PARA LA RESOLUCIÓN DE LA ECUA...
 
Manual básico de programación en c++
Manual básico de programación en c++Manual básico de programación en c++
Manual básico de programación en c++
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Programación en c y c++
Programación en c y c++Programación en c y c++
Programación en c y c++
 
Gretl guide-es[1]
Gretl guide-es[1]Gretl guide-es[1]
Gretl guide-es[1]
 
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas EmbebidosPFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
 
52811100 manual-sp
52811100 manual-sp52811100 manual-sp
52811100 manual-sp
 
Minimanualillo swi prolog
Minimanualillo swi prologMinimanualillo swi prolog
Minimanualillo swi prolog
 
Econometria aplicada con gretl
Econometria aplicada con gretlEconometria aplicada con gretl
Econometria aplicada con gretl
 
chVhdl univ valencia
chVhdl univ valenciachVhdl univ valencia
chVhdl univ valencia
 
Xhtml tuto beta
Xhtml tuto betaXhtml tuto beta
Xhtml tuto beta
 
Guia analisis-de-algoritmos
Guia analisis-de-algoritmosGuia analisis-de-algoritmos
Guia analisis-de-algoritmos
 
Iniciación a python
Iniciación a pythonIniciación a python
Iniciación a python
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primero
 
C++
C++C++
C++
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapa
 

Destacado

Análise multimodal de infográfico - Fábio Nunes Assunção
Análise multimodal de infográfico - Fábio Nunes AssunçãoAnálise multimodal de infográfico - Fábio Nunes Assunção
Análise multimodal de infográfico - Fábio Nunes AssunçãoFabio Nunes
 
Emakumeen aurkako indarkeria
Emakumeen aurkako indarkeriaEmakumeen aurkako indarkeria
Emakumeen aurkako indarkeriaMaialen_Enbeita
 
Servicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleServicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleArmando Nuñez Ramos
 
How to save india from anarchy and violence
How to save india from anarchy and violenceHow to save india from anarchy and violence
How to save india from anarchy and violenceBharat Gandhi Votership
 
Presentaciónel rinoceront
Presentaciónel rinocerontPresentaciónel rinoceront
Presentaciónel rinocerontaleix_gonzalez
 
Aprende java como si estuviera en primero pre
Aprende java como si estuviera en primero preAprende java como si estuviera en primero pre
Aprende java como si estuviera en primero prejtk1
 
Mima agricultura y biotransformacion urbana
Mima agricultura y biotransformacion urbanaMima agricultura y biotransformacion urbana
Mima agricultura y biotransformacion urbanaRedprodepaz
 
Priporocilno_Furlan
Priporocilno_FurlanPriporocilno_Furlan
Priporocilno_FurlanŽiga Skarza
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del cursobeamior5472
 
Evidenciascanasta san luis
Evidenciascanasta san luisEvidenciascanasta san luis
Evidenciascanasta san luisyolyvasquez
 
Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...
Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...
Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...Kevin Morales Ccama
 
Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prevjtk1
 
Ficha de acompanhamento de leitura 1
Ficha de acompanhamento de leitura 1Ficha de acompanhamento de leitura 1
Ficha de acompanhamento de leitura 1brandao_cicera
 
Serlets y jsp prev
Serlets y jsp prevSerlets y jsp prev
Serlets y jsp prevjtk1
 
Karma nightclub posters
Karma nightclub postersKarma nightclub posters
Karma nightclub posterstheawingaard
 

Destacado (20)

Análise multimodal de infográfico - Fábio Nunes Assunção
Análise multimodal de infográfico - Fábio Nunes AssunçãoAnálise multimodal de infográfico - Fábio Nunes Assunção
Análise multimodal de infográfico - Fábio Nunes Assunção
 
Emakumeen aurkako indarkeria
Emakumeen aurkako indarkeriaEmakumeen aurkako indarkeria
Emakumeen aurkako indarkeria
 
Servicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleServicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y Google
 
How to save india from anarchy and violence
How to save india from anarchy and violenceHow to save india from anarchy and violence
How to save india from anarchy and violence
 
Rol de pago
Rol de pagoRol de pago
Rol de pago
 
Presentaciónel rinoceront
Presentaciónel rinocerontPresentaciónel rinoceront
Presentaciónel rinoceront
 
Aprende java como si estuviera en primero pre
Aprende java como si estuviera en primero preAprende java como si estuviera en primero pre
Aprende java como si estuviera en primero pre
 
Mima agricultura y biotransformacion urbana
Mima agricultura y biotransformacion urbanaMima agricultura y biotransformacion urbana
Mima agricultura y biotransformacion urbana
 
Priporocilno_Furlan
Priporocilno_FurlanPriporocilno_Furlan
Priporocilno_Furlan
 
Slae zambrano
Slae zambranoSlae zambrano
Slae zambrano
 
Power point udes
Power point  udesPower point  udes
Power point udes
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del curso
 
Zona de escape
Zona de escapeZona de escape
Zona de escape
 
Evidenciascanasta san luis
Evidenciascanasta san luisEvidenciascanasta san luis
Evidenciascanasta san luis
 
Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...
Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...
Ley sopa, ley pipa, cierre de upload y criminalizacion en la propiedad intele...
 
Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prev
 
Ficha de acompanhamento de leitura 1
Ficha de acompanhamento de leitura 1Ficha de acompanhamento de leitura 1
Ficha de acompanhamento de leitura 1
 
Serlets y jsp prev
Serlets y jsp prevSerlets y jsp prev
Serlets y jsp prev
 
Karma nightclub posters
Karma nightclub postersKarma nightclub posters
Karma nightclub posters
 
Sistemas informáticos
Sistemas informáticosSistemas informáticos
Sistemas informáticos
 

Similar a Introduccion a la programacion en c prev

Vba excel numericos
Vba excel numericosVba excel numericos
Vba excel numericosJOHN BONILLA
 
Introduccion comunicaciones
Introduccion comunicacionesIntroduccion comunicaciones
Introduccion comunicacioneshgm2007
 
Practicas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosPracticas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosChucho E. Peña
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje cChucho E. Peña
 
Manual Qcad
Manual QcadManual Qcad
Manual Qcadgeosam
 
Manual de qcad
Manual de qcadManual de qcad
Manual de qcadMAPIVALLE
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaAngel De las Heras
 
Programacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................roProgramacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................roMa Florencia Ferrari
 
Introducción a la programación en c
Introducción a la programación en cIntroducción a la programación en c
Introducción a la programación en cvictdiazm
 
Libro programación-en-c++
Libro programación-en-c++Libro programación-en-c++
Libro programación-en-c++Andres Escobar
 
Arduino user manual_es
Arduino user manual_esArduino user manual_es
Arduino user manual_essunam09
 

Similar a Introduccion a la programacion en c prev (20)

Vba excel mnumericos1
Vba excel mnumericos1Vba excel mnumericos1
Vba excel mnumericos1
 
Vba excel mnumericos
Vba excel mnumericosVba excel mnumericos
Vba excel mnumericos
 
Vba excel numericos
Vba excel numericosVba excel numericos
Vba excel numericos
 
Diseño Estructurado de Algoritmos
Diseño Estructurado de AlgoritmosDiseño Estructurado de Algoritmos
Diseño Estructurado de Algoritmos
 
Tutorial c18
Tutorial c18Tutorial c18
Tutorial c18
 
Introduccion comunicaciones
Introduccion comunicacionesIntroduccion comunicaciones
Introduccion comunicaciones
 
Manual cpp
Manual cppManual cpp
Manual cpp
 
Practicas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosPracticas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmos
 
Manual de programacion lenguaje en C
Manual de programacion lenguaje en CManual de programacion lenguaje en C
Manual de programacion lenguaje en C
 
Linux benchmarking como
Linux benchmarking comoLinux benchmarking como
Linux benchmarking como
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje c
 
Manual Qcad
Manual QcadManual Qcad
Manual Qcad
 
Manual de qcad
Manual de qcadManual de qcad
Manual de qcad
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Programacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................roProgramacion en Phyton desde ce..........................ro
Programacion en Phyton desde ce..........................ro
 
Introducción a la programación en C
Introducción a la programación en CIntroducción a la programación en C
Introducción a la programación en C
 
Introducción a la programación en c
Introducción a la programación en cIntroducción a la programación en c
Introducción a la programación en c
 
Libro programación-en-c++
Libro programación-en-c++Libro programación-en-c++
Libro programación-en-c++
 
Arduino user manual_es
Arduino user manual_esArduino user manual_es
Arduino user manual_es
 

Más de jtk1

Actividad modulo1
Actividad modulo1Actividad modulo1
Actividad modulo1jtk1
 
Java schaum pre
Java schaum preJava schaum pre
Java schaum prejtk1
 
Programar java 2pre
Programar java 2preProgramar java 2pre
Programar java 2prejtk1
 
Serlets java pre
Serlets java preSerlets java pre
Serlets java prejtk1
 
Portada java 2
Portada java 2Portada java 2
Portada java 2jtk1
 
Piensa en java per
Piensa en java perPiensa en java per
Piensa en java perjtk1
 
Lenguaje de programacion java prev
Lenguaje de programacion java prevLenguaje de programacion java prev
Lenguaje de programacion java prevjtk1
 
Java kaime conpre
Java kaime conpreJava kaime conpre
Java kaime conprejtk1
 
Java jedi prev
Java jedi prevJava jedi prev
Java jedi prevjtk1
 
Java j2me prev
Java j2me prevJava j2me prev
Java j2me prevjtk1
 
Java ferca
Java fercaJava ferca
Java fercajtk1
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 prejtk1
 
Java basico 2
Java basico 2Java basico 2
Java basico 2jtk1
 
Java angel estevan pre
Java angel estevan preJava angel estevan pre
Java angel estevan prejtk1
 
Java 3dpre
Java 3dpreJava 3dpre
Java 3dprejtk1
 
Java 2d
Java 2dJava 2d
Java 2djtk1
 
Introduc java pre
Introduc java preIntroduc java pre
Introduc java prejtk1
 
Guia de iniciación en java prev
Guia de iniciación en java prevGuia de iniciación en java prev
Guia de iniciación en java prevjtk1
 
52 ejercicios resueltos en pseudocodigoprev
52 ejercicios resueltos en pseudocodigoprev52 ejercicios resueltos en pseudocodigoprev
52 ejercicios resueltos en pseudocodigoprevjtk1
 
Serlets y jsp pre
Serlets y jsp preSerlets y jsp pre
Serlets y jsp prejtk1
 

Más de jtk1 (20)

Actividad modulo1
Actividad modulo1Actividad modulo1
Actividad modulo1
 
Java schaum pre
Java schaum preJava schaum pre
Java schaum pre
 
Programar java 2pre
Programar java 2preProgramar java 2pre
Programar java 2pre
 
Serlets java pre
Serlets java preSerlets java pre
Serlets java pre
 
Portada java 2
Portada java 2Portada java 2
Portada java 2
 
Piensa en java per
Piensa en java perPiensa en java per
Piensa en java per
 
Lenguaje de programacion java prev
Lenguaje de programacion java prevLenguaje de programacion java prev
Lenguaje de programacion java prev
 
Java kaime conpre
Java kaime conpreJava kaime conpre
Java kaime conpre
 
Java jedi prev
Java jedi prevJava jedi prev
Java jedi prev
 
Java j2me prev
Java j2me prevJava j2me prev
Java j2me prev
 
Java ferca
Java fercaJava ferca
Java ferca
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 
Java basico 2
Java basico 2Java basico 2
Java basico 2
 
Java angel estevan pre
Java angel estevan preJava angel estevan pre
Java angel estevan pre
 
Java 3dpre
Java 3dpreJava 3dpre
Java 3dpre
 
Java 2d
Java 2dJava 2d
Java 2d
 
Introduc java pre
Introduc java preIntroduc java pre
Introduc java pre
 
Guia de iniciación en java prev
Guia de iniciación en java prevGuia de iniciación en java prev
Guia de iniciación en java prev
 
52 ejercicios resueltos en pseudocodigoprev
52 ejercicios resueltos en pseudocodigoprev52 ejercicios resueltos en pseudocodigoprev
52 ejercicios resueltos en pseudocodigoprev
 
Serlets y jsp pre
Serlets y jsp preSerlets y jsp pre
Serlets y jsp pre
 

Introduccion a la programacion en c prev

  • 1.
  • 2. AULA POLITÈCNICA / ETSETB Marco A. Peña Basurto José M. Cela Espín Introducción a la programación en C EDICIONS UPC
  • 3. Primera edición: septiembre de 2000 Diseño de la cubierta: Manuel Andreu © Los autores, 2000 © Edicions UPC, 2000 Edicions de la Universitat Politècnica de Catalunya, SL Jordi Girona Salgado 31, 08034 Barcelona Tel.: 934 016 883 Fax: 934 015 885 Edicions Virtuals: www.edicionsupc.es E-mail: edicions-upc@upc.es Producción: CPET (Centre de Publicacions del Campus Nord) La Cup. Gran Capità s/n, 08034 Barcelona Depósito legal: B-32.449-2000 ISBN: 84-8301-429-7 Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del copyright, bajo las san- ciones establecidas en las leyes, la reproducción total o parcial de esta obra por cualquier medio o pro- cedimiento, comprendidos la reprografía y el tratamiento informático, y la distribución de ejemplares de ella mediante alquiler o préstamo públicos.
  • 4. Introducci´ n a la programaci´ n en C o o Marco A. Pe˜ a n Jos´ M. Cela e Departament d’Arquitectura de Computadors Universitat Polit` cnica de Catalunya e 08034 Barcelona, Espa˜ an marcoa@ac.upc.es cela@ac.upc.es 19 de junio de 2000
  • 5. i ´ Indice General ´ Indice General ´ Indice de Figuras v ´ Indice de Tablas vii Prefacio ix 1 Conceptos b´ sicos de programaci´ n a o 1 1.1 Ordenador y perif´ ricos . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Bits, bytes y palabras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Lenguajes de programaci´ n . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3.1 Lenguajes de bajo nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.2 Lenguajes de alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Elaboraci´ n de un programa . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 Traductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5.1 Ensambladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5.2 Int´ rpretes . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5.3 Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 Primer contacto con C 7 2.1 Un poco de historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Caracter´sticas del lenguaje . . ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 Creaci´ n de un programa . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4 Primeros pasos con C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5 El modelo de compilaci´ n de C o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Empezando a programar 13 3.1 Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Estructura de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3 Variables y constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3.2 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.3.3 Entrada y salida de valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.4.1 Operador de asignaci´ n . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.4.2 Operadores aritm´ ticos . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 © Los autores, 2000; © Edicions UPC, 2000.
  • 6. ´ Indice General ii 3.4.3 Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4.4 Operadores l´ gicos . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4.5 Prioridad de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4 Construcciones condicionales 23 4.1 Construcci´ n if . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.1.1 Variante if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.1.2 Variante if-else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2 El operador condicional ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.3 Construcci´ n switch . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5 Construcciones iterativas 33 5.1 Construcci´ n while . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2 Construcci´ n do-while . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.3 Construcci´ n for . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.3.1 El operador coma (,) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.3.2 Equivalencia for-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.4 Las sentencias break y continue . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6 Tipos de datos elementales 41 6.1 N´ meros enteros . . . . . . . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.1.1 Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.1.2 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.2 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.2.1 Caracteres especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.2.2 Enteros y el tipo char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.2.3 Conversiones de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.3 N´ meros reales . . . . . . . . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 7 Tipos de datos estructurados: Tablas 49 7.1 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 7.1.1 Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.1.2 Asignaci´ n . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.1.3 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.2 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7.2.1 Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.2.2 Asignaci´ n . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.2.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.3 Tablas multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.3.1 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.4 Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 © Los autores, 2000; © Edicions UPC, 2000.
  • 7. iii ´ Indice General 7.4.1 Asignaci´ n . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.4.2 Manejo de cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.4.3 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8 Otros tipos de datos 63 8.1 Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.1.1 Declaraci´ n de variables . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . 64 8.1.2 Acceso a los campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 8.1.3 Asignaci´ n . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . 65 8.1.4 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.2 Uniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.2.1 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.3 Tipos de datos enumerados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 8.4 Definici´ n de nuevos tipos de datos . . . . . o . . . . . . . . . . . . . . . . . . . . . . 69 8.5 Tiras de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 8.5.1 Operador de negaci´ n . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . 70 8.5.2 Operadores l´ gicos . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . 71 8.5.3 Operadores de desplazamiento de bits . . . . . . . . . . . . . . . . . . . . . . 71 8.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 9 Punteros 75 9.1 Declaraci´ n y asignaci´ n de direcciones o o . . . . . . . . . . . . . . . . . . . . . . . . . 75 9.1.1 Declaraci´ n . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.1.2 Asignaci´ n de direcciones . . . o . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.2 Indirecci´ n . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . 77 9.3 Operaciones con punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.4 Punteros y tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 9.5 Punteros y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 9.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 10 Funciones 87 10.1 Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 10.2 Definici´ n y llamada . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 89 10.2.1 Definici´ n . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 89 10.2.2 Prototipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 10.2.3 Llamada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10.3 Variables y par´ metros . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 91 10.3.1 Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10.3.2 Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10.3.3 Par´ metros formales . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 92 10.4 Devoluci´ n de resultados . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 93 10.5 Paso de par´ metros . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 94 10.5.1 Paso de par´ metros por valor . . . a . . . . . . . . . . . . . . . . . . . . . . . . 94 10.5.2 Paso de par´ metros por referencia a . . . . . . . . . . . . . . . . . . . . . . . . 95 © Los autores, 2000; © Edicions UPC, 2000.
  • 8. ´ Indice General iv 10.5.3 Las tablas y las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 10.5.4 Par´ metros en la funci´ n main a o . . . . . . . . . . . . . . . . . . . . . . . . . 99 10.6 Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 10.7 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 11 Ficheros 105 11.1 Abrir y cerrar ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 11.2 Leer y escribir en ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11.3 Otras funciones para el manejo de ficheros . . . . . . . . . . . . . . . . . . . . . . . . 111 11.3.1 feof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 11.3.2 ferror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 11.3.3 fflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 11.4 Ficheros est´ ndar: stdin, stdout, stderr a . . . . . . . . . . . . . . . . . . . 113 11.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 A El preprocesador 119 A.1 Directiva include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 A.2 Directivas define y undef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 A.3 Directivas ifdef y ifndef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 A.4 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 B La librer´a est´ ndar ı a 123 B.1 Manipulaci´ n de cadenas de caracteres . . o . . . . . . . . . . . . . . . . . . . . . . . . 123 B.2 Entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 B.2.1 Entrada y salida b´ sica . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 124 B.2.2 Entrada y salida con formato . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 B.2.3 Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 B.3 Funciones matem´ ticas . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 127 B.4 Clasificaci´ n y manipulaci´ n de caracteres o o . . . . . . . . . . . . . . . . . . . . . . . . 128 B.5 Conversi´ n de datos . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 129 B.6 Manipulaci´ n de directorios . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . 129 B.7 Memoria din´ mica . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 129 C Sistemas de numeraci´ n o 135 C.1 Naturales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 C.2 Enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 C.3 Reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 C.3.1 Problemas derivados de la representaci´ n en coma flotante o . . . . . . . . . . . 138 D Tabla de caracteres ASCII 141 E Bibliograf´a y recursos WEB ı 143 © Los autores, 2000; © Edicions UPC, 2000.
  • 9. v ´ Indice de Figuras ´ Indice de Figuras 1.1 Niveles de abstracci´ n en los lenguajes de programaci´ n . . . . . o o . . . . . . . . . . . 2 1.2 Cronolog´a en el desarrollo de algunos lenguajes de programaci´ n ı o . . . . . . . . . . . 3 1.3 Ciclo de vida de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Fases en la interpretaci´ n de un programa . . . . . . . . . . . . . o . . . . . . . . . . . 5 1.5 Fases en la compilaci´ n de un programa . . . . . . . . . . . . . . o . . . . . . . . . . . 6 2.1 Modelo de compilaci´ n de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 11 4.1 Esquema de funcionamiento de if y de if-else . . . . . . . . . . . . . . . . . . . 24 4.2 Esquema de funcionamiento de switch . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.1 Esquema de funcionamiento de while . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.2 Esquema de funcionamiento de do-while . . . . . . . . . . . . . . . . . . . . . . . 35 5.3 Esquema de funcionamiento de for . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 7.1 Representaci´ n gr´ fica de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . o a 50 7.2 Representaci´ n gr´ fica de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . o a 54 7.3 Representaci´ n gr´ fica de una tabla de tres dimensiones . . . . . . . . . . . . . . . . . o a 56 9.1 Acceso a una matriz mediante un puntero . . . . . . . . . . . . . . . . . . . . . . . . 82 10.1 Acceso a una matriz mediante un puntero . . . . . . . . . . . . . . . . . . . . . . . . 99 11.1 Almacenamiento de un fichero de texto . . . . . . . . . . . . . . . . . . . . . . . . . 106 © Los autores, 2000; © Edicions UPC, 2000.
  • 10. vii ´ Indice de Tablas ´ Indice de Tablas 3.1 Palabras reservadas de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Operadores aritm´ ticos en C . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . 17 3.3 Operadores relacionales y l´ gicos en C . . . . . o . . . . . . . . . . . . . . . . . . . . . 19 3.4 Tabla de verdad de los operadores l´ gicos en C o . . . . . . . . . . . . . . . . . . . . . 19 3.5 Prioridad y asociatividad de los operadores en C . . . . . . . . . . . . . . . . . . . . . 20 6.1 Representaci´ n de enteros en decimal, octal y hexadecimal o . . . . . . . . . . . . . . . 42 6.2 Resumen de tipos de datos enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.3 Caracteres interpretados como enteros . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.4 Resumen de tipos de datos reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 8.1 Tabla de verdad de los operadores l´ gicos . . . . . . . . . . . . . . . . . . . . . . . . o 71 C.1 Representaci´ n de n´ meros naturales en binario natural o u . . . . . . . . . . . . . . . . 135 C.2 Representaci´ n de n´ meros enteros en complemento a 2 o u . . . . . . . . . . . . . . . . 136 C.3 Representaci´ n de n´ meros enteros en o u ��0��0 . . . 0000 . . . . . . . . . . . . . . . . 137 C.4 Representaci´ n de n´ meros reales . . . . . . . . . . . . o u . . . . . . . . . . . . . . . . 138 D.1 Caracteres y sus c´ digos ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 o © Los autores, 2000; © Edicions UPC, 2000.
  • 11. ix Pr´ logo o Pr´ logo o Este libro surge a partir de la experiencia docente de los autores en la asignatura Introducci´ n a los o ordenadores de la Escola T` cnica Superior d’Enginyeria de Telecomunicaci´ de Barcelona, de la Uni- e o versitat Polit` cnica de Catalunya. Como su t´tulo indica, se trata de un texto de introduci´ n a la pro- e ı o gramaci´ n en lenguaje C. El libro pretende ce˜ irse a los aspectos fundamentales del est´ ndar ANSI C o n a actual. Aunque hoy en d´a existen otros lenguajes de programaci´ n muy populares como C++ o JAVA, ı o la comprensi´ n de estos lenguajes exige un s´ lido conocimiento de las bases de programaci´ n en C. o o o El texto est´ concebido como un curso completo y por lo tanto debe ser le´do de forma secuencial. a ı Al final de cada cap´tulo hay un conjunto de ejercicios propuestos. El lector debe tratar de resolver el ı mayor n´ mero posible de estos ejercicos. De igual forma es una buena pr´ ctica el programar los ejem- u a plos resueltos en el texto. El lector debe recordar que la programaci´ n es una t´ cnica aplicada, igual que o e tocar un instrumento musical, y por lo tanto requiere muchas horas de ensayo para ser dominada. Los ejercicios propuestos son lo suficientemente simples como para no requerir conocimientos adicionales de otras materias (matem´ ticas, f´sica, contabilidad, etc). a ı Uno de los puntos m´ s importantes para quien empieza a programar es adoptar desde el principio a un buen estilo de programaci´ n. Esto es, escribir las construcciones del lenguaje de una forma clara o y consistente. En este sentido, los ejemplos resueltos en el texto muestran un buen estilo b´ sico de a programaci´ n, por lo que se recomienda al lector imitar dicho estilo cuando realice sus programas. o Los ap´ ndices A y B son de lectura obligada antes de comenzar a desarrollar programas de comple- e jidad media. En dichos ap´ ndices el lector se familiarizar´ con el uso del preprocesador y de la librer´a e a ı est´ ndar. Ambas son herramientas fundamentales para desarrollar programas. a El ap´ ndice C incluye una descripci´ n de los formatos de datos en el computador. Este tema no e o es propiamente de programci´ n, pero la comprensi´ n de dichos formatos ayuda al programador a en- o o tender mejor conceptos b´ sicos, como las operaciones de conversi´ n de tipos. El lector puede leer este a o ap´ ndice en cualquier momento, aunque recomendamos leerlo antes del cap´tulo 6. e ı En las referencias bibliogr´ ficas se indican algunas direcciones web donde el lector podr´ encontrar a a preguntas y respuestas comunes de quienes se inician en el lenguaje C. As´ mismo, el lector podr´ ı a encontrar materiales adicionales sobre programaci´ n, historia del lenguaje, etc. o © Los autores, 2000; © Edicions UPC, 2000.
  • 12. 1 1. Conceptos b´ sicos de programaci´ n a o Cap´tulo 1 ı Conceptos b´ sicos de programaci´ n a o 1.1 Ordenador y perif´ ricos e o ´ Un ordenador s´ lo es capaz de ejecutar ordenes y operaciones muy b´ sicas, tales como: a 0 Aritm´ tica entera: sumar, restar, multiplicar, etc. e 0 Comparar valores num´ ricos o alfanum´ ricos e e 0 Almacenar o recuperar informaci´ n o Con la combinaci´ n de estas operaciones b´ sicas, y gracias a su gran potencia de c´ lculo, el orde- o a a nador puede llevar a cabo procesos muy complejos. Sin embargo, en cualquier caso existe una estrecha dependencia del ordenador con el programador. Es el programador quien indica a la m´ quina c´ mo y a o qu´ debe hacer, mediante la l´ gica y el razonamiento previo, expresado en forma de un programa. e o En definitiva, el ordenador s´ lo es capaz de aceptar datos de entrada, procesarlos y facilitar otros o datos o resultados de salida. Los datos se introducen u obtienen del ordenador mediante los perif´ ricos e ´ de entrada y salida. Estos son los encargados de facilitar la relaci´ n entre el coraz´ n del ordenador y el o o mundo exterior, y en particular los usuarios de ordenadores. Dependiendo de su funci´ n particular, los o perif´ ricos pueden clasificarse en: e Perif´ ricos de entrada: cuya funci´ n es facilitar la introducci´ n de datos y ordenes al ordenador: te- e o o ´ o a ´ clado, rat´ n, l´ piz optico, lector de c´ digo de barras, esc´ ner, tableta digitalizadora, etc. o a Perif´ ricos de salida: cuya funci´ n es mostrar al exterior informaci´ n almacenada en memoria o los e o o resultados de las operaciones realizadas por el ordenador: pantalla, impresora, plotter, etc. Perif´ ricos de entrada y salida: capaces tanto de introducir como de extraer informaci´ n del ordena- e o ´ dor: discos y cintas magn´ ticos, discos opticos, etc. e Perif´ ricos de comunicaci´ n: encargados de establecer y facilitar el intercambio de informaci´ n entre e o o dos ordenadores: m´ dem, tarjetas de red (Ethernet, Token Ring, RDSI, . . . ), etc. o © Los autores, 2000; © Edicions UPC, 2000.
  • 13. 1.2. Bits, bytes y palabras 2 Programador Lenguaje natural Lenguaje de programación Lenguaje máquina Ordenador Figura 1.1: Niveles de abstracci´ n en los lenguajes de programaci´ n o o 1.2 Bits, bytes y palabras La unidad de memoria m´ s peque˜ a en un ordenador se denomina bit (del ingl´ s binary digit). Puede a n e ´ tomar unicamente dos posibles valores: o . En ocasiones, debido a la relaci´ n intr´nseca con los 0 � o ı valores en las se˜ ales el´ ctricas en circuitos digitales, se dice que un bit est´ bajo o alto, o bien desco- n e a nectado o conectado. Como puede verse, no es posible almacenar mucha informaci´ n en un solo bit. o Sin embargo, un ordenador posee cantidades ingentes de ellos, por lo que podr´a decirse que los bits ı son los bloques b´ sicos con los que se construye la memoria del ordenador. a El byte, compuesto por ocho bits (algunos autores se refieren a esta unidad como octeto), es una a ´ unidad de memoria m´ s util. Puesto que cada bit puede tomar el valor o , en un byte pueden represen- � 0 tarse hasta��� � 0� combinaciones de ceros y unos (256 c´ digos binarios). Con estas combinaciones o pueden representarse, por ejemplo, los enteros entre y ( 0 ��� 0 ), un conjunto de caracteres, 000 � � 0� etc. La unidad natural de memoria para un ordenador es la palabra. Los ordenadores de sobremesa actuales, por ejemplo, suelen trabajar con palabras de 32 o 64 bits. En grandes ordenadores, el tama˜ o n de la palabra puede ser mucho mayor, pero siempre formada por un n´ mero de bits, potencia de . En u � cualquier caso, los ordenadores encadenan dos o m´ s palabras de memoria con el fin de poder almacenar a datos complejos y, en general, de mayor tama˜ o. n 1.3 Lenguajes de programaci´ n o Un lenguaje de programaci´ n podr´a definirse como una notaci´ n o conjunto de s´mbolos y caracteres o ı o ı que se combinan entre s´ siguiendo las reglas de una sintaxis predefinida, con el fin de posibilitar la ı transmisi´ n de instrucciones a un ordenador. Dichos s´mbolos y caracteres son traducidos internamente o ı a un conjunto de se˜ ales el´ ctricas representadas en sistema binario, es decir, s´ lo dos valores: 0 y 1. n e o Esta traducci´ n es necesaria porque el procesador s´ lo entiende ese lenguaje, al cual nos referiremos o o como lenguaje m´ quina. a © Los autores, 2000; © Edicions UPC, 2000.
  • 14. 3 1. Conceptos b´ sicos de programaci´ n a o COBOL Forth Ada FORTRAN Prolog C BASIC LISP PL/I SIMULA Modula-2 Ensamblador Algol Logo Pascal Smalltalk C++ Java 1950 1955 1960 1965 1970 1975 1980 1985 1990 1995 Figura 1.2: Cronolog´a en el desarrollo de algunos lenguajes de programaci´ n ı o 1.3.1 Lenguajes de bajo nivel Se incluyen en esta categor´a aquellos lenguajes que por sus caracter´sticas se encuentran m´ s pr´ ximos ı ı a o a la arquitectura del ordenador, como el lenguaje m´ quina y el lenguaje ensamblador. a Lenguaje m´ quina a Cualquier problema que deseemos resolver se plantea en primer lugar en nuestro lenguaje natural. Sin embargo, para que la secuencia de pasos que resuelven el problema pueda ser entendida por un ordenador, debe traducirse a un lenguaje muy b´ sico denominado lenguaje m´ quina. a a ´ El lenguaje m´ quina se caracteriza por ser el unico que es directamente inteligible por el ordenador, a o ´ puesto que se basa en la combinaci´ n de dos unicos s´mbolos (0 y 1) denominados bits. Adem´ s cada ı a procesador posee su propio lenguaje m´ quina, por lo que un programa escrito en lenguaje m´ quina de a a un procesador X no podr´ , en principio, ejecutarse en un procesador Y. a Lenguaje ensamblador Constituye una evoluci´ n del lenguaje m´ quina. Se basa en la utilizaci´ n de mnemot´ cnicos, esto es, o a o e abreviaturas de palabras que indican nombres de instrucciones. Para programar en lenguaje ensambla- dor es necesario conocer en profundidad la estructura y funcionamiento interno del ordenador, as´ como ı dominar el uso de diferentes sistemas de numeraci´ n, como el binario, hexadecimal, octal, etc. o En general, los programas escritos en ensamblador requieren mucho menos espacio de memoria y se ejecutan m´ s r´ pidamente que si se hubiesen desarrollado en un lenguaje de alto nivel, puesto que a a a ı ´ est´ n optimizados para una arquitectura espec´fica. Sin embargo, esto ultimo es un inconveniente, pues causa que los programas no sean portables de un ordenador a otro con un procesador distinto. 1.3.2 Lenguajes de alto nivel Se engloban aqu´ todos los lenguajes de programaci´ n que por sus caracter´sticas se asemejan m´ s al ı o ı a lenguaje natural del programador. Algunos de los m´ s conocidos son: FORTRAN, BASIC, Pascal, a Modula, C, Ada, Java, etc. (ver Fig. 1.2). La caracter´stica m´ s importante de estos lenguajes es que son independientes de la arquitectura del ı a ordenador, por lo que un programa escrito en un lenguaje de alto nivel puede ejecutarse sin problemas © Los autores, 2000; © Edicions UPC, 2000.
  • 15. 1.4. Elaboraci´ n de un programa o 4 �������� 00000000 Análisis �������� �������������� 00000000000000 Mantenimiento 00000000 �������������� 00000000000000 ������� 0000000 0000000 0000000000000����������� Diseño 00000000000 Explotación ������� ������������������������ 00000000000 0000000000000 ������������� Codificación 0000000000000 ������������� Figura 1.3: Ciclo de vida de un programa en otros ordenadores con procesadores distintos. Por ello, el programador no necesita conocer a fondo el funcionamiento del ordenador en el que programa, sino que el lenguaje le permite abstraerse de los detalles de bajo nivel. Esta abstracci´ n de la arquitectura de la m´ quina implica que todo programa o a escrito en un lenguaje de alto nivel deber´ traducirse a lenguaje m´ quina, de forma que pueda ser a a entendido y ejecutado por el ordenador. Para ello cada tipo de ordenador deber´ disponer de unos a programas especiales que realicen dicha traducci´ n (ver Sec. 1.5). o 1.4 Elaboraci´ n de un programa o El desarrollo de un programa para solucionar un determinado problema inform´ ticamente puede resu- a ´ mirse en el ya cl´ sico concepto de ciclo de vida. Este puede desglosarse en los siguientes pasos a seguir a secuencialmente: an´ lisis, dise˜ o, codificaci´ n, explotaci´ n y mantenimiento (ver Fig. 1.3). a n o o An´ lisis a En la fase de an´ lisis se estudia cu´ l es el problema a resolver y se especifican a muy alto nivel los a a procesos y estructuras de datos necesarios, de acuerdo con las necesidades del cliente. Para realizar un buen an´ lisis ser´ necesario interaccionar con el cliente y conocer a fondo sus necesidades. Antes a a de proceder al dise˜ o es muy importante haber comprendido correctamente los requerimientos del n problema. ˜ Diseno Una vez bien definido el problema y las l´neas generales para solucionarlo, se requiere una soluci´ n ı o adecuada a un conjunto de recursos determinado. Tanto f´sicos: en qu´ ordenador va a funcionar la ı e aplicaci´ n, de qu´ tipo de perif´ ricos se dispone . . . , como l´ gicos: qu´ sistema operativo se usar´ , qu´ o e e o e a e herramientas de desarrollo, qu´ bases de datos . . . Finalmente se dise˜ ar´ un conjunto de algoritmos e n a que resuelvan los distintos subproblemas en que se haya dividido el desarrollo. Codificaci´ n o Consiste en la traducci´ n de los algoritmos dise˜ ados previamente, utilizando el lenguaje y entorno de o n desarrollo escogidos en la fase anterior. Ser´ necesario realizar pruebas que garanticen al m´ ximo la a a calidad de los programas desarrollados. Entre otras cosas, que est´ n libres de errores. e o a ´ La documentaci´ n generada en esta fase junto con la de las fases anteriores ser´ muy util en el futuro para las eventuales actuaciones de mantenimiento. © Los autores, 2000; © Edicions UPC, 2000.
  • 16. 5 1. Conceptos b´ sicos de programaci´ n a o Instrucción 1 Intérprete Ejecución 1 Instrucción 2 Intérprete Ejecución 2 Instrucción 3 Intérprete Ejecución 3 ... Figura 1.4: Fases en la interpretaci´ n de un programa o Explotaci´ n o Los diferentes programas desarrollados en la fase anterior se instalan en el entorno final de trabajo. Si es necesario se instalar´ n tambi´ n otras herramientas de utilidad, necesarias para el correcto funciona- a e miento del sistema. Se debe proporcionar documentaci´ n, manuales de usuario, formaci´ n, etc. o o Mantenimiento En esta fase se realizar´ n correcciones al sistema desarrollado, bien para solventar errores no depura- a dos, bien para cambiar o a˜ adir nuevas funcionalidades requeridas por el cliente. Dependiendo de la n importancia del caso, ser´ necesario retomar el ciclo de vida a nivel de codificaci´ n, dise˜ o o incluso a o n an´ lisis (ver Fig. 1.3). a Cuanto mejor se haya documentado el desarrollo en las primeras fases del ciclo de vida, menor ser´ a el tiempo necesario para llevar a cabo los distintos tipos de mantenimiento. 1.5 Traductores ´ Como ya se ha comentado, el unico lenguaje directamente inteligible por el ordenador es el lenguaje m´ quina. Por ello, si se programa usando lenguajes de alto nivel ser´ necesario alg´ n programa traduc- a a u ´ tor. Este, a su vez, ser´ el encargado de comprobar que los programas est´ n escritos correctamente, de a e acuerdo con la definici´ n del lenguaje de programaci´ n empleado. Pueden distinguirse varios tipos de o o traductores: 1.5.1 Ensambladores Los programas ensambladores son los encargados de traducir a lenguaje m´ quina los programas escritos a en lenguaje ensamblador. La correspondencia entre ambos lenguajes es muy directa, por lo que los ensambladores suelen ser programas relativamente sencillos. 1.5.2 Int´ rpretes e El objetivo de un int´ rprete es procesar una a una las instrucciones de un programa escrito en un lenguaje e de alto nivel. Para cada instrucci´ n se verifica la sintaxis, se traduce a c´ digo m´ quina y finalmente se o o a ejecuta. Es decir, que la traducci´ n y la ejecuci´ n se realizan como una sola operaci´ n (ver Fig. 1.4). o o o © Los autores, 2000; © Edicions UPC, 2000.