El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo...

20
1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada, es un modelo o paradigma de progra- mación, basado en tres mecanismos que se utilizan para definir el flujo o secuencia de ejecución de un programa. Esos mecanismos reciben el nombre de estructuras de control y se discutirán ampliamente en el capítulo dos de este libro. Un lenguaje de programación que aplique esas estructuras de control recibe el nombre de lenguaje estructurado. Uno de los lenguajes que toma ese modelo de programación es el lenguaje de programación C. 1.1.1. Lenguaje C El lenguaje C surge en la década de 1970 en un ambiente de programación Unix 1 y de ahí se expandió a las universidades y a la industria. Hoy día C, junto con C++ y Java son de los lenguajes más utilizados para la realización de todo tipo de sistemas informáticos. Por lo tanto, a pesar de su longevidad, 1 Unix es un sistema operativo. 7

Transcript of El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo...

Page 1: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1El lenguaje de programación ANSI C

Gerardo Cruz González

1.1. Introducción al lenguaje C

La Programación Estructurada, es un modelo o paradigma de progra-mación, basado en tres mecanismos que se utilizan para definir el flujo osecuencia de ejecución de un programa. Esos mecanismos reciben el nombrede estructuras de control y se discutirán ampliamente en el capítulo dos deeste libro.

Un lenguaje de programación que aplique esas estructuras de controlrecibe el nombre de lenguaje estructurado.

Uno de los lenguajes que toma ese modelo de programación es el lenguajede programación C.

1.1.1. Lenguaje C

El lenguaje C surge en la década de 1970 en un ambiente de programaciónUnix1 y de ahí se expandió a las universidades y a la industria. Hoy día C,junto con C++ y Java son de los lenguajes más utilizados para la realizaciónde todo tipo de sistemas informáticos. Por lo tanto, a pesar de su longevidad,

1Unix es un sistema operativo.

7

Page 2: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

8 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

C es un lenguaje que los especialistas en ciencias de la computación debenconocer.

1.1.2. Evolución del lenguaje C

La primera versión de C fue publicada por los autores del lenguaje BrianW. Kernighan y Dennis M. Ritchie en 1978. Las reglas definidas por ellos setomaron como las reglas de facto para el lenguaje. Sin embargo, los fabri-cantes de compiladores (ver sección 1.1.3) comenzaron a introducir cambiosarbitrarios en la definición del lenguaje, provocando que escribir un progra-ma fuese confuso y complicado. Por esa razón, en el año de 1989, el AméricanNational Standars Institute (ANSI), publicó la especificación oficial del len-guaje C. Así cualquier programa que siguiera esas reglas, debe ser compiladopor cualquier compilador del lenguaje C. El ANSI es un organismo estadou-nidense dedicado a supervisar el desarrollo de estándares para productos,servicios, procesos y sistemas en Estados Unidos. Toda la información refe-rente a este organismo se puede leer en http://ansi.org

Al pasar el tiempo el lenguaje C ha evolucionado y se ha tenido queajustar a las nuevas necesidades de los programadores. Por ello, ANSI se havisto obligado a generar nuevos estándares para el lenguaje. Los estándaresson los siguientes:

C89: Estas reglas son el resultado de un largo debate que inició en1983 y terminó en 1989.

C90: En 1990, ANSI realiza un ajuste menor a la versión anterior. Enla práctica C89 y C90 son lo mismo.

C99: Nueve años después, en 1999, ANSI actualiza las reglas del len-guaje.

C11: En el año 2011, ANSI publica la definición actual de C.

1.1.3. Compiladores de C

Un compilador es un programa de computadora que se utiliza para tra-ducir el código que escribe un programador, a otro código equivalente. ElCódigo que puede ejecutar una computadora se llama código ejecutable osimplemente ejecutable.

En la industria del software es posible encontrar compiladores desarrolla-dos por diferentes empresas u organizaciones. Entre los más populares están:

Page 3: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.2. AMBIENTE DE PROGRAMACIÓN 9

Intel C++ Compiler: Es un producto comercial multiplataformadesarrollado por Intel. Compila tanto código C como C++.

GNU Compiler Collection: Es un compilador multiplataforma dedistribución libre desarrollado por el grupo GNU.

Visual Studio de Microsoft: Es un producto desarrollado por Micro-soft para sus diferentes versiones de Windows.

Es importante aclarar que aunque existe una definición estandarizadadel lenguaje, no todos los desarrolladores de compiladores las implantan al100%. Por ejemplo, Microsoft ha dicho que no implantará ningún cambioque rompa la compatibilidad entre C y C++, y el grupo GNU ha dicho quelos cambios serán graduales, sin especificar fechas concretas.

1.2. Ambiente de programación

Para programar en C se requiere una computadora, un sistema operati-vo, un compilador y un editor de texto. La computadora puede ser una PC,una Mac o cualquier otra; el sistema puede se MS-Windows en cualquiera desus versiones, linux en cualquiera de sus presentaciones u OSX. El compila-dor puede ser cualquiera, siempre y cuando esté disponible para el sistemaoperativo de su elección y el editor de texto también puede ser cualquiera.

El compilador que se utiliza en este libro es gcc en modo ANSI 2011(c11), por estar disponible tanto en Windows, OSX, Linux y otros sistemasoperativos menos conocidos, aunque el estudiante puede utilizar el que seade su preferencia.

1.2.1. Desarrollo de programas en C

Como el nombre del programa es importante tanto para el programadorcomo para el compilador, a continuación se darán algunas recomendacionespara que los nombres no generen errores o confusiones.

Nombre de un programa

Un programa en C, puede tener cualquier nombre pero debe terminaren .c. Por ejemplo hola.c, nomina.c, etc. Cada sistema operativo tiene suspropias reglas para los nombres de los archivos. Se sugiere que para losnombres de sus archivos, solamente use letras, dígitos y subrayado. Tambiénse sugiere que los archivos que contienen código fuente de C, no terminen

Page 4: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

10 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

en .C, .cc, .cpp o .c++ ya que algunos compiladores compilarían siguiendolas reglas del lenguaje C++ y no las de C. También considere que en lossistemas operativos tipo Unix, las letras minúsculas se consideran diferentesa las mayúsculas.

Metodología de desarrollo

Antes de explicar la metodología de desarrollo de software, se darán lasdefiniciones necesarias para entender las secciones siguientes:

Editor de texto: Es un programa que permite escribir texto sin formato.No confundir con procesador de texto.

Código fuente: Es aquel que escribe el programador utilizando un editorde texto.

Código objeto: Es aquel que genera el compilador a partir del códigofuente.

Código ejecutable: Es aquel que puede ser ejecutado por la computado-ra.

Consecuentemente, los pasos para desarrollar un programa en C, son: (verfigura 1.1).

Editar el programa, es decir, escribir el código fuente utilizando uneditor de texto.

Compilar el programa utilizando un compilador. Si no hay errores, elcompilador traduce el código fuente a código objeto. En caso contrario,el programador debe corregir el error.

Después de compilado, al código objeto resultante se le debe anexar elcódigo de las bibliotecas o funciones necesarias para que pueda ejecu-tarse. De esto se encarga un programa llamado linker, el cual generael programa ejecutable.

En la siguiente sección se darán ejemplos de lo discutido anteriormente.

1.3. Estructura de un programa.

El lenguaje de programación C se basa en la noción de función. Unafunción es una secuencia de instrucciones agrupadas bajo un solo nombre y

Page 5: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.3. ESTRUCTURA DE UN PROGRAMA. 11

Figura 1.1: Ciclo de desarrollo.

que opcionalmente generan un valor como respuesta. Por esta razón, todoslos programas escritos en C, contienen una o más funciones2 y una de ellas, ysolamente una, recibe el nombre de main(). La función main() es la funcióndonde se inicia la ejecución del programa. Sin ella el programa no puedeejecutarse.

1.3.1. Hola Mundo.

Para ejemplificar lo anterior se usará el programa del listado 1.1

Programa 1.1: Hola Mundo1 #include <std i o . h>23 int main ( )4 {5 p r i n t f ( "Hola Mundo\n" ) ;6 return 0 ;

2Las funciones se estudian en el capítulo 3.

Page 6: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

12 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

7 }

Línea 1: se incluye un archivo fuente de nombre stdio.h. En ese archivoestán declaradas las funciones de entrada y salida que acompañan alcompilador de C. Note que el renglón inicia con # y que el nombre delarchivo está encerrado entre los símbolos < y >.

Línea 3: Se declara y se define la función main(). Toda función debe in-dicar el tipo de dato al que corresponde su resultado y entre paréntesis,debe indicar los parámetros de entrada que requiere para trabajar.

Cuando no se específica el tipo de resultado, el compilador asume queel resultado de la función es de tipo entero (int). En este caso, expli-citamente, se indica que main() regresa un dato de tipo int y que norequiere parámetros de entrada, por lo tanto sus paréntesis () quedanvacios.

Líneas 4 y 7: La totalidad del código de una función debe estar deli-mitada entre { y }. Esas son las marcas de principio y fin de bloque yen este caso, de programa.

Líneas 5: La función printf() declarada en stdio.h, se utiliza para im-primir los resultados de un programa. En este ejemplo, únicamente sequiere que en la pantalla aparezca la frase “Hola mundo”. Por eso seinvoca o se llama a esa función con la cadena “Hola mundo”. En C, unacadena de caracteres es una secuencia de números, letras, espacios enblanco y otros símbolos, rodeados por comillas dobles. Por ejemplo:“lavida es hermosa”, es una cadena.

La función printf() es una función especializada en formatear los datosque genera un programa, para que tengan un aspecto legible y agra-dable para el usuario. printf() toma los datos binarios de la memoriadel programa, los traduce a un formato entendible por el humano y losescribe en la salida estándar del programa que se está ejecutando. Lafunción printf() se discutirá ampliamente en la sección 1.7.

La salida estándar es un bloque o fragmento de memoria RAM endonde se guardan los datos que un programa requiere imprimir. Elsistema operativo decide si esos datos se envían a la pantalla, a laimpresora, al disco, o a la entrada de otro programa. Por omisión, laconexión es hacia la pantalla.

Page 7: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.3. ESTRUCTURA DE UN PROGRAMA. 13

Línea 6: En la línea 1, main() fue declarada de tipo entero. Por lotanto, forzosamente debe regresar o retornar un valor de ese tipo. Eneste caso regresa un cero (0). El return 0 de main, tiene un significadoimportante: Por medio de ese 0, main() le está avisando al sistemaoperativo que terminó su ejecución de forma exitosa. Un valor diferente,índica que la ejecución terminó con algún problema o error.

A continuación se presentará la manera en que se compila y ejecuta el pro-grama. Para ello, se utilizará gcc en modo compatible con el ANSI 2011.

1.3.2. Compilando, ligando y ejecutando

Después de escribir el código fuente, el programa se debe compilar y ligarpara convertirlo en un programa ejecutable. P

Todos los programas de éste libro serán compilados usando el compiladorgcc.

Entonces, suponiendo que el programa ya esté editado y que el archivotenga por nombre hola.c, la secuencias de pasos es:

Compilación y ligado: En este ejemplo basta con escribir en la con-sola:

gcc -std=c11 hola.c <enter>

Este comando, compila el programa y lo enlaza o liga con el códigonecesario para que sea un programa ejecutable. En linux el ejecutablese llamará a.out y en Windows, a.exe.

La opción -std=c11, le índica al compilador que debe aceptar códigoconforme a las reglas establecidas por el ISO en el año 2011.

Ejecución: Para ejecutarlo, en la consola de linux se deberá escribir:

a.out <enter> o ./a.out<enter> donde el primer punto (.) significa“buscar comando en la carpeta actual” y la diagonal / es simplementeun separador entre el punto y el nombre del programa.

En tanto que en la ventana de comandos de Windows, se debe escri-bir a<enter> para que el programa sea ejecutado. En Windows no esnecesario escribir .exe al final del nombre del programa.

Cambiando el nombre: Para que el ejecutable y el código fuente ten-gan el mismo nombre, gcc se debe invocar así:

Page 8: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

14 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

Figura 1.2: Compilando programa

gcc -std=c11 hola.c -o hola<enter>

La opción -o hola, índica que el ejecutable deberá tener por nombrehola en lugar de a.out o de hola.exe en lugar a.exe.

La figura 1.2 muestra la secuencia de pasos explicados anteriormente: En lasiguiente sección se presentarán los tipos de datos disponibles en C.

1.4. Tipos de datos.

El lenguaje de programación C tiene los siguientes tipos de datos: Tipode datos entero (int), tipo de datos para manejo de caracteres (char), tipo dedatos de punto flotante de precisión sencilla (float) y tipo de dato de puntoflotante de precisión doble (double). A continuación explicará cada uno deellos.

1.4.1. Tipo int

El tipo de dato entero, como su nombre lo indica, solamente se utilizapara representar valores numéricos enteros, es decir sin punto decimal. Porejemplo, los valores 5, 20, -10, -80 son enteros, pero 5.3, 30.8 y -8.2 no lo son.

De acuerdo con [KR91], el tipo de dato int se usa para la manipulaciónde valores numéricos enteros y tiene modificadores que alteran su comporta-miento y también la cantidad de bytes que se utilizan para su representacióninterna. A continuación se explicará todo lo referente al tipo de dato int ysus calificadores short, long, signed y unsigned. El tamaño en bytes que semuestra es el soportado por gcc tanto en Windows como en Linux.

Page 9: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.4. TIPOS DE DATOS. 15

int: Entero “normal” de 32 bits (4 bytes). El rango de valores que puedealmacenar es [!231 ! 1, 231 ! 1]

short int: Entero de 16 bits (2 bytes). El rango de valores que puedealmacenar es [!215 ! 1, 215 ! 1]

long int: Entero de 32 bits (4 bytes). El rango de valores que puedealmacenar es [!231!1, 231!1]. Dependiendo del hardware y del sistemaoperativo, un long int podría ser de 64 bits. La única garantía que existees que su tamaño siempre será mayor o igual al de un int.

signed int: Igual que un int pero especificando que soporta tantovalores positivos como negativos.

unsigned int: Entero de 32 bits (4 bytes) que únicamente almace-na valores iguales o mayores a cero. El rango de valores que puedealmacenar es [0, 232 ! 1]

unsigned long int: Es un entero largo sin signo.

unsigned short int: es un entero corto sin signo.

Por otro lado, las constantes enteras siguen estas reglas:

127 es una constante de tipo entero.

127l o 127L es una constante de tipo long.

127u o 127U se considera una constante entera sin signo (unsigned).

127ul o 127UL se considera una constante entera unsigned long.

Si un numero es muy grande para caber en un entero, se consideralong.

0127 será tomada como una constante octal (inicia con el dígito cero).

0x127 o 0X127 será interpretado como una constante hexadecimal (ini-cia con 0x).

0X127UL se considera un constante entera hexadecimal unsigned long.

Page 10: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

16 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

1.4.2. Tipo char

El tipo de dato char se usa para almacenar el código numérico del juegode caracteres ASCII. El código ascii consiste en asignarle un código numéricoa un caracter. Por ejemplo, el código ascii del símbolo ’A’ es 0x41 y el de’B’ es 0x42, etc. Esto se hace para que la computadora pueda manipularcaracteres por medio de valores numéricos.

Un char es un entero de 8 bits y se le puede aplicar el modificador signedo unsigned. La computadora solamente procesa datos numéricos en binario.Por eso es necesario asignarle valores numéricos a las letras y demás símbolosutilizados en los programas.

1.4.3. Tipo flotante

Estos tipos se llaman así, porque internamente se representan utilizandonotación científica: Por ejemplo, 35.21 se puede escribir como 3.521x101 ocomo 0.3521x102 . Note que el mismo valor se puede escribir variando deposición el punto decimal y el valor del exponente. Como el punto decimalse puede cambiar de posición, se dice que los valores son de punto flotante.

Los flotantes se clasifican en float, double y long double. En Windowsy Linux el tamaño de cada uno de ellos y el rango de valores que puedenrepresentar son:

float: flotante de precisión normal que utiliza 32 bits (4 bytes), cuyorango de valores es [1.175494x10!38 , 3.402823x1038 ]

double: flotante de precisión doble que utiliza 64 bits (8 bytes), cuyorango de valores es [2.225074x10!308 , 1.797693x10308 ]

long double: flotante que utiliza 96 bits (12 bytes).

Por otro lado, las constantes de punto flotante, siguen éstas reglas:

127.32 es una constante double.

3.678e+2 representa la constante double 367.8, es decir, 3.678x102.

3.678e-2 representa la constante double 0.03678, es decir, 3.678x10!2.

127.32l o 127.32L representa una constante double.

127.32f o 127.32F representa una constante float.

Page 11: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.5. VARIABLES, OPERADORES Y EXPRESIONES 17

1.5. Variables, operadores y expresiones

Las variables y las constantes son los objetos de datos básicos que semanipulan en un programa [KR91].

Constantes

Las constantes son valores que nunca cambian. Por ejemplo: 3, 6, 10 y -1son constantes porque no cambian.

Variables

Una variable es una región de memoria a la que se le asocia un nombre,un tipo de dato, un valor y una dirección o ubicación en la memoria dela computadora. Los valores almacenados en las variables cambian durantela ejecución del programa y una variable siempre debe declararse antes deutilizarse.

Los nombres de la variables pueden contener uno o mas caracteres (algu-nos compiladores soportan nombres de variables de hasta 32 o incluso másde ellos). Los caracteres válidos son letras, dígitos y el carácter de subrayado(_). El nombre de una variable siempre debe iniciar con una letra y se deberecordar que el lenguaje C es sensible a minúsculas y mayúsculas: Por ello, lavariable de nombre numAula se considera diferente a numAULA. Ejemplos:

int numEstudiantes, numAula, numAULA;

float pesoAdulto, pesoCachorro;

Ejemplo de declaración e inicialización de variables;

int numEstudiantes = 20, numAula = 3;

float pesoAdulto = 14.5, pesoCachorro =1.5;

Las variables no inicializadas contienen valores desconocidos, comúnmentellamados basura. Si en una expresión u operación se utiliza una variable noinicializada, el resultado estará indefinido.

Expresiones

En C, una expresión es una combinación de variables y de constantes pormedio de operadores que generan un nuevo valor. Las expresiones combinanvariables y constantes, por medio de los operadores, para producir nuevosvalores.

Page 12: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

18 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

Los expresiones, los operandos y los operadores están estrechamente re-lacionados. Por esa razón los ejemplos correspondientes se darán en las sub-secciones siguientes.

Operador de asignación

El operador de asignación, representado por el símbolo =, se utiliza paraasignar el valor de la expresión de la derecha, a la variable de la izquierda.Ejemplo:

x=5;

Aquí, el valor 5 se asigna a la variable x.

1.5.1. Operadores aritméticos

En la tabla 1.1 se muestran los operadores arítmeticos disponibles enC. Todos ellos se consideran operadores binarios porque requieren de dosoperandos para realizar la operación correspondiente.

Operador Operación

+ suma

- resta

* multiplicación

/ división

% modulo

Tabla 1.1: Operadores comunes en C.

A continuación se explicará cada uno de ellos.

Suma (+): Este operador se usa para sumar dos valores numéricos.Ejemplo:

int t;

int temp = 30;

t = temp + 2;

Page 13: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.5. VARIABLES, OPERADORES Y EXPRESIONES 19

En este ejemplo, al valor almacenado en la variable temp, se le sumael valor 2 y el resultado se asigna o se almacena en la variable t.

Resta (-): Este operador se usa para sustraer un valor numérico deotro.

int t;int temp = 30;

t = temp - 2;

En este ejemplo, al valor almacenado en la variable temp, se le resta elvalor 2 y el resultado se asigna o se almacena en la variable t.

Multiplicación (*): Este operador se usa para multiplicar dos valoresnuméricos. Ejemplo:

int t;int temp = 30;

t = temp * 2;

En este ejemplo, al valor almacenado en la variable temp, se multiplicapor 2 y el resultado se asigna a la variable t.

División (/): Este operador se usa para dividir dos valores numéricos.Ejemplo:

float t;float temp = 30;

t = temp / 2;

En este ejemplo, al valor almacenado en la variable temp, se divideentre 2 y el resultado se asigna a la variable t.

Módulo (%): Este operador se usa para obtener el residuo de unadivisión de números enteros.

int t;

int temp = 30;t = temp % 2;

En este ejemplo, al valor almacenado en la variable temp, se divideentre 2 y el residuo de la división se almacena en la variable t.

De los operadores vistos anteriormente, el operador módulo solamenteestá definido para enteros.

Page 14: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

20 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

1.6. Instrucciones de entrada y salida

El lenguaje de programación C, no define instrucciones de lectura y/oescritura de datos (E/S). Para ello hace uso de las funciones definidas en labiblioteca estándar de entrada y salida.

Las declaraciones o los prototipos de esas funciones están en un archivollamado stdio.h. stdio.h se debe anexar a cualquier programa que requierarealizar ese tipo de operaciones mediante la instrucción #include <stdio.h>como se muestra en el primer renglón del programa 1.2.

Programa 1.2: Incluir stdio.h1 #include <std i o . h>23 int main ( )4 {5 p r i n t f ( "Hola Mundo\n" ) ;6 return 0 ;7 }

Las funciones que se discutirán a continuación son printf(), para escriturade datos y de scanf() para lectura de datos.

1.7. Función printf()

La función printf está declarada en stdio.h y definida en la bibliotecaestándar que acompaña al lenguaje C. Se especializa en escribir la informa-ción generada por un programa en un formato legible para el usuario. Estáfunción es altamente sofisticada y sumamente potente. Se compone de dospartes:

Una cadena de control que indica el formato en que deben escribirselos resultados generados por las expresiones.

Una lista de las expresiones que generan los datos a ser escritos. Lasexpresiones se separan mediante coma (,).

1.7.1. printf() y los enteros

En esta sección se mostrarán las diferentes opciones de que dispone lafunción printf() para imprimir valores de tipo entero y para ejemplificarlo,se usará el programa 1.3:

Page 15: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.7. FUNCIÓN PRINTF() 21

Programa 1.3: Ejemplo de printf

1 #include <std i o . h>2 int main ( )3 {4 int k = 64 ;5 p r i n t f ( "El va l or de K en decimal es % d" , k ) ;6 p r i n t f ( "\n" ) ; // El cursor se cambia a l i n i c i o7 // de l s i g u i e n t e reng lon8 p r i n t f ( "El va l or de K en oc ta l es % o" , k ) ;9 p r i n t f ( "\n" ) ;

10 p r i n t f ( "El va l or de K en hexadecimal es % x" , k ) ;11 p r i n t f ( "\n" ) ;12 p r i n t f ( "K como ca rac t e r : % c" , k ) ;13 p r i n t f ( "\n" ) ;14 return 0 ;15 }

Línea 4: Se declara e inicializa la variable k con el valor decimal 64.

Línea 5: Se invoca a la función printf() con la cadena de control y lavariable a ser impresa.

En C, toda cadena va delimitada por comillas . La cadena de control“El valor de K en decimal es %d” significa lo siguiente:

• La parte .El valor de K en decimal es" se imprime tal cual, esdecir, sin ningún cambio.

• La parte que dice "%d" índica que en esa posición de la cadenaaparecerá un valor entero decimal. En este ejemplo, ese espacio sereserva para que allí se imprima el valor de la variable k.

Línea 8: La sección de cadena "%o" indica que en esa posición apare-cerá un valor entero escrito en octal.

Línea 10: La sección de cadena "%x" indica que en esa posición apa-recerá un valor entero en hexadecimal.

Línea 12: La sección de cadena "%c" indica que en esa posición apare-cerá un carácter, es decir, un símbolo del conjunto de caracteres ASCII.

La salida del programa 1.3 se puede ver en la figura 1.3.Note que un mismo valor se puede presentar de diferentes maneras. Su re-

presentación interna no cambia, pero su aspecto visual si. La función printf()no altera el valor de las variables, solamente los imprime.

Page 16: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

22 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

Figura 1.3: Enteros con printf.

1.7.2. printf() y los flotantes

Las opciones para imprimir valores de punto flotante son las siguientes:

Si w=0.003123456, printf(“w =%f”, w) imprimirá o escribirá w =0.003123. En este contexto%f índica que el valor a escribir será in-terpretado como un float o double.

Si w = 0.003123456, printf(“w =%.3f”, w) imprimirá o escribirá w =0.003. En este contexto%.3f índica que el valor a escribir será inter-pretado como un float o double y solamente considerará los primerostres dígitos decimales.

Si w=0.003123456, printf(“w =%e”, w) imprimirá o escribirá w =3.123456e-03 que significa 3.123456 x 10!3. En este contexto%e,índica que se usará notación científica para imprimir el valor.

“ %.2e” significa notación científica con dos dígitos decimales. Para w=0.003123456, printf(“w =%e”, w) imprimirá 3.12 x 10!3.

Lo anterior se puede observar en el programa 1.4 y su salida en la figura 1.4.

Programa 1.4: printf() y los flotantes1 #include <std i o . h>2 int main ( )3 {4 double w;5 w = 0.003123456 ;6 p r i n t f ( "w = %f \n" , w) ;7 p r i n t f ( "w = %.3 f \n" , w) ;8 p r i n t f ( "w = %e\n" , w) ;9 p r i n t f ( "w = %.2e\n" ) ;

10 return 0 ;11 }

Page 17: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.8. FUNCIÓN SCANF() 23

Figura 1.4: printf() y los flotantes

1.8. Función scanf()

La función scanf() es la contraparte de printf(), es decir, se especializaen la lectura de datos provenientes de la entrada estándar del programa. (Lamayoría de las veces, la entrada estándar está conectada al teclado de lacomputadora). Esta función trabaja así:

Si se tiene una varible int k; y se requiere leer un valor para ella, se debeejecutar: scanf(“ %d”, &k); donde la cadena de control o de formato“ %d” índica que se espera un valor de tipo entero y la expresión &kíndica la dirección en memoria de la variable k. Observe el código delprograma 1.5 y su salida en la figura 1.5.

Programa 1.5: Lectura de un número sin formato.1 #include <std i o . h>2 int main ( )3 {4 int k ;5 p r i n t f ( " Introduce un va lor de t ipo en te ro : " ) ;6 scan f ( " % d" , &k ) ;7 p r i n t f ( "k = % d\n" , k ) ;8 return 0 ;9 }

Figura 1.5: Lectura de un entero.

La función scanf(), exige conocer la dirección de la variable cuyo valordebe ser leído. Para ello, al nombre de la variable se le antepone eloperador &.

Page 18: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

24 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C

El operador & se llama operador de referenciación. Cuando al nombrede la variable V se le antepone el operador &, (&V), se lee “en ladirección de V”.

La cadena de control puede ser sofisticada: Por ejemplo, en la instruc-ción scanf(“(%d)”, &k); el usuario debe teclear (8) para que el valor8 pueda leerse y guardarse en la variable k. Observe el código del pro-grama 1.6 y su salida en la figura 1.6.

Programa 1.6: Lectura de un número con formato.1 #include <std i o . h>2 int main ( )3 {4 int k ;5 p r i n t f ( " Introduce un va lor de t ipo en te ro : " ) ;6 scan f ( "(%d) " , &k ) ;7 p r i n t f ( "k = % d\n" , k ) ;8 return 0 ;9 }

Figura 1.6: Lectura de una fecha.

Suponga que se requiere leer una fecha, para ello en el programa setiene la declaración int day, month, year;

Para leer esos datos se puede hacer lo siguiente: scanf(“ %d/%d/%d”,&day, &month, &year )

Para que la lectura sea exitosa, el usuario debe teclear algo similara 19/3/2014. Observe las diagonales tanto en la cadena de formatocomo en la línea de entrada tecleada por el usuario. También observeel código del programa 1.7 y su salida en la figura 1.7, mientras que elcódigo fuente se puede obtener aquí.

Page 19: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

1.8. FUNCIÓN SCANF() 25

Programa 1.7: Lectura de una fecha.1 #include <std i o . h>2 int main ( )3 {4 int day , month , year ;5 p r i n t f ( " Introduce una f echa en e l formato d/m/a : " ) ;6 s can f ( " %d/%d/%d" , &day , &month , &year ) ;7 p r i n t f ( "La f echa es : %d/%d/%d\n" , day , month , year ) ;8 return 0 ;9 }

Figura 1.7: Lectura de una fecha.

Para introducir valores de tipo float se debe cambiar ” %d” por ” %f”.

Las opciones de la función son muchas. Aquí solamente se ha presentado unpequeño bosquejo de lo que esta función puede hacer.

Page 20: El lenguaje de programación ANSI C - utm.mx€¦ · 1 El lenguaje de programación ANSI C Gerardo Cruz González 1.1. Introducción al lenguaje C La Programación Estructurada,esunmodelooparadigmadeprogra-

26 CAPÍTULO 1. EL LENGUAJE DE PROGRAMACIÓN ANSI C