Programación Básica
Programación Básica
PROGRAMACIN BSICA
AVISO LEGAL
Derechos Reservados 2012, por RED TERCER MILENIO S.C.
Viveros de Ass 96, Col. Viveros de la Loma, Tlalnepantla, C.P. 54080, Estado de Mxico.
Prohibida la reproduccin parcial o total por cualquier medio, sin la autorizacin por escrito del titular de
los derechos.
Datos para catalogacin bibliogrfica
Manuel Josu Escobar Cristiani
Programacin bsica
ISBN 978-607-733-168-1
Primera edicin: 2012
DIRECTORIO
NDICE
INTRODUCCIN.............................................................................................................................. 7
Mapa Conceptual ....................................................................................................................... 8
UNIDAD 1 ....................................................................................................................................... 9
CONCEPTOS BSICOS DE PROGRAMACIN................................................................................... 9
OBJETIVO: .................................................................................................................................. 9
Mapa Conceptual Unidad 1 ..................................................................................................... 10
Introduccin ..................................................................................................................... 11
1.1 Orgenes del lenguaje C ........................................................................................ 122
1.2 UNIX y el lenguaje C .............................................................................................. 133
1.3 Lenguajes de mquina, lenguajes ensambladores y lenguajes de alto nivel ............. 13
1.4 Compilacin y Ligado ................................................................................................. 17
1.5 El entorno integrado de desarrollo (IDE) ................................................................... 18
1.6 Estructura de un Programa en C ............................................................................. 20
1.7 Mi primer programa en C ....................................................................................... 21
Autoevaluacin: ....................................................................................................................... 25
UNIDAD 2 ................................................................................................................................... 266
TIPOS DE DATOS SIMPLES ............................................................................................................ 26
OBJETIVO.................................................................................................................................. 26
Mapa Conceptual Unidad 2 ..................................................................................................... 27
Introduccin ..................................................................................................................... 28
2.1 Tipos de datos simples ............................................................................................... 29
2.2 Declaraciones de Variables ........................................................................................ 29
2.3 Clases de almacenamiento ........................................................................................ 30
2.4 Sentencias de asignacin ......................................................................................... 311
3
2.5 Definicin de Constantes ......................................................................................... 322
2.6 Operadores .............................................................................................................. 333
2.6.1 Operadores aritmticos .......................................................................................... 34
2.6.2 Operadores de relacin y lgicos .......................................................................... 344
2.6.3 Conversiones de tipo ............................................................................................ 355
2.6.4 Operadores de incremento y decremento ............................................................. 37
2.6.5 Operadores para manejo de bits ............................................................................ 38
2.7 Procedimientos definidos de entrada / salida estndar ............................................ 39
Autoevaluacin: ....................................................................................................................... 42
UNIDAD 3 ..................................................................................................................................... 43
FUNCIONES Y LA ESTRUCTURA DEL PROGRAMA ......................................................................... 43
OBJETIVO: ................................................................................................................................ 43
Mapa Conceptual Unidad 3 ..................................................................................................... 44
Introduccin ..................................................................................................................... 45
3.1 Definicin de funcin ................................................................................................. 45
3.2 Llamada de una funcin ............................................................................................. 45
3.3 Funciones que regresan valores no enteros .............................................................. 46
3.4 Argumentos, llamada de una funcin por valor ........................................................ 47
3.5 Paso de parmetros de una funcin .......................................................................... 47
3.6 Variables..................................................................................................................... 47
3.6.1 Variables externas ................................................................................................. 488
3.6.2 Variables Estticas................................................................................................... 48
3.6.3 Variables registro .................................................................................................... 48
3.7 Funciones predefinidas en C ................................................................................... 48
3.8 Recursividad ............................................................................................................. 499
Autoevaluacin: ....................................................................................................................... 51
4
UNIDAD 4 ..................................................................................................................................... 52
ESTRUCTURAS DE CONTROL DE FLUJO ........................................................................................ 52
OBJETIVO: ................................................................................................................................ 52
Mapa Conceptual Unidad 4 ..................................................................................................... 53
Introduccin ................................................................................................................... 544
4.1 Proposiciones y bloques............................................................................................. 55
4.2 Sentencias Condicionales ........................................................................................... 57
4.2.1 If Else ..................................................................................................................... 577
4.2.2 Else If ....................................................................................................................... 60
4.2.3 Switch ...................................................................................................................... 61
4.3 Ciclos y bucles ............................................................................................................ 63
4.3.1 While y For .............................................................................................................. 63
4.3.2 Do While.................................................................................................................. 64
4.4 Break y Continue ........................................................................................................ 64
4.5 Etiquetas y goto ......................................................................................................... 65
Autoevaluacin: ....................................................................................................................... 67
UNIDAD 5 ..................................................................................................................................... 68
TIPOS DE DATOS ESTRUCTURADOS ............................................................................................. 68
OBJETIVO: ................................................................................................................................ 68
Mapa Conceptual Unidad 5 ..................................................................................................... 69
Introduccin ..................................................................................................................... 70
5.1 Arreglos. ..................................................................................................................... 71
5.2 Estructuras. ................................................................................................................ 73
5.2.1 Conceptos bsicos de estructuras. ......................................................................... 73
5.2.2 Estructuras y funciones. .......................................................................................... 75
5.2.3 Arreglos de estructuras. .......................................................................................... 75
5
5.2.4 Apuntadores a estructuras. .................................................................................... 76
5.2.5 Estructuras autorreferenciadas. ............................................................................. 79
5.3 Uniones ...................................................................................................................... 81
5.4 Campos de bits. .......................................................................................................... 81
Autoevaluacin: ....................................................................................................................... 84
UNIDAD 6 ..................................................................................................................................... 85
APUNTADORES............................................................................................................................. 85
OBJETIVO: ................................................................................................................................ 85
Mapa Conceptual Unidad 6 ..................................................................................................... 86
Introduccin ..................................................................................................................... 87
6.1 Definicin de Apuntadores. ....................................................................................... 88
6.2 Operacin de Apuntadores. ....................................................................................... 89
6.3 Apuntadores y Arreglos. ............................................................................................ 90
6.4 Aritmtica de direcciones. ......................................................................................... 93
6.5 Apuntadores a caracteres y funciones. ...................................................................... 93
6.6 Asignacin dinmica de memoria. ............................................................................. 96
Autoevaluacin: ..................................................................................................................... 101
UNIDAD 7 ................................................................................................................................... 102
ARCHIVOS Y ENTRADA / SALIDA ................................................................................................ 102
OBJETIVO: .............................................................................................................................. 102
Mapa Conceptual Unidad 7 ................................................................................................... 103
Introduccin ................................................................................................................... 104
7.1 Descriptores de archivos. ......................................................................................... 105
7.2 E/S de bajo nivel: read y write. ................................................................................ 106
7.3 E/S por consola: getchar( ) y putchar( ), gets( ) y puts( ). ........................................ 107
7.4 E/S por consola con formato printf( ) y scanf( ). ...................................................... 109
6
7.5 Manejo de archivos. ................................................................................................. 113
7.5.1 Open ...................................................................................................................... 114
7.5.2 Creat ...................................................................................................................... 114
7.5.3 Close ...................................................................................................................... 117
7.5.4 Unlink .................................................................................................................... 117
7.5.5 Acceso aleatorio: Lseek ......................................................................................... 117
Autoevaluacin: ..................................................................................................................... 119
Bibliografa: ................................................................................................................................ 120
Glosario
121
INTRODUCCIN
Desde 1978, ao en que nace el lenguaje de programacin C el mundo de las
computadoras ha cambiado enormemente, las grandes computadoras de
entonces tienen menos recursos que un pequeo equipo personal moderno,
dentro del gran desarrollo de los sistemas de cmputo podemos mencionar que
una gran computadora de hace ms de 30 aos, ocupaba una habitacin de
ms de 30 metros cuadrados y contaba con las siguientes caractersticas:
memoria principal de 64,000 Bytes, sin gigas, megas o kilos, su nico
dispositivo de entrada era por medio de tarjetas de cartn perforadas, y todos
los resultados los arrojaba impresos en papel continuo en una impresora del
tamao de una lavadora moderna, su pequeo teclado y su monitor
monocromtico servan para que los grandes gurs de programacin pudieran
encender y apagar dicha computadora, sin embargo en estos 32 aos el
lenguaje de programacin C solo ha sufrido cambios muy modestos.
En 1983, el American National Standars Institute (ANSI) estableci un
comit cuyo propsito era el desarrollo de un estndar de lenguaje C que
fuera totalmente independiente al equipo de cmputo en el que se utilizara,
naciendo de esta forma el estndar ANSI del lenguaje C.
El objetivo principal de este libro es ensearle al alumno el lenguaje de
programacin C; para lograr este objetivo es muy importante, que durante el
curso, el alumno tenga acceso a un equipo con el compilador C y as aprender
mediante la programacin constante de ejemplos y proyectos.
Es por esta razn, que desde el captulo 1 presentamos nuestro primer
programa en C, para comprender mejor lo explicado en este libro.
Espero que al finalizar el libro el estudiante sea capaz de resolver problemas de
programacin mediante la utilizacin de este lenguaje de programacin.
MAPA CONCEPTUAL
Conceptos Bsicos de
programacin
Estructuras de control
de Flujo
Funciones y
estructura del
lenguaje C
Datos Estructurados
Entrada / Salida
Apuntadores
UNIDAD 1
CONCEPTOS BSICOS DE PROGRAMACIN
OBJETIVO:
Que el estudiante aprenda cmo naci el lenguaje de programacin C y su
importancia en el desarrollo de los sistemas de cmputo, as como algunos
conceptos bsicos, pero en extremo importantes, utilizados en la programacin
de sistemas
TEMARIO
1.1
1.2
UNIX Y EL LENGUAJE C
1.3
1.4
COMPILACIN Y LIGADO
1.5
1.6
1.7
MI PRIMER PROGRAMA EN C
10
MAPA CONCEPTUAL
Conceptos Bsicos de
programacin
Orgenes del
lenguaje C
UNIX y el
lenguaje C
Compilacin
y Ligado
IDE
Estructura
de C
Tipos de Lenguajes
de Programacin
11
INTRODUCCIN
El lenguaje C fue desarrollado hace 32 aos, durante ms de 3 dcadas a
conservado su esencia sin sufrir grandes cambios, en este captulo se mostrar
la estructura de un programa escrito en C, como logramos que las
instrucciones escritas por los programadores lleguen a ser entendibles por las
computadora, es decir, convertir el cdigo a lenguaje de unos y ceros. Tambin
escribiremos nuestro primer programa en C para poder condensar lo
aprendido en un programa sencillo.
12
13
1.2 UNIX
Y EL LENGUAJE
1.3 L ENGUAJES
ALTO NIVEL
14
lenguajes de mquina
lenguajes ensambladores.
Lenguaje de Mquina
Un lenguaje de mquina es el nico lenguaje que, realmente puede
entender una computadora, es un conjunto de reglas sintcticas, escritos
exclusivamente con un conjunto de unos y ceros, por ejemplo:
1000110010010001
1100011101010110
1100110110101101
Estos lenguajes son muy difciles de programar y de entender -solamente
programadores expertos y muy capacitados podran entenderlos- a la vez que
2
15
son muy largos, como fueron los primeros programas en aparecer se les
conoce como lenguaje de primera generacin.
Estos lenguajes son desarrollados para ser utilizados en una sola
mquina y en un solo procesador, aunque son entendibles para la mquina en
que fueron desarrollados es muy difcil ser entendido por los programadores.
Lenguaje ensamblador
Para ser ms sencillos de entender por los programadores se
desarrollaron los lenguajes ensambladores, son ms fciles de utilizar que el
lenguaje de mquina, y son nicos para un procesador en particular (Z80, 8080,
Pentium IV, etc.), utilizan smbolos para interpretar las instrucciones en lugar
de largas cadenas de 1 y 0
Por ejemplo:
LR 5,0
M 4,=F4
4,7
16
Z= X + Y / 2 + C*SEN(N)
Compilador
C
Programa
fuente en C
Computadora
Programa Objeto o
de mquina
17
1.4 C OMPILACIN
L IGADO
18
Cdigos previamente
programados
C
Programa
fuente en C
Compilador
C
Ligador
Programa
Ejecutable
1.5 E L
(IDE)
19
IDE PHP
Editor de texto.
Compilador.
Debbuger (depurador).
20
Desarrollo que ser utilizado durante el curso, investigar cules son sus
componentes principales y cmo pueden utilizar dichos componentes.
1.6 E STRUCTURA
DE UN
P ROGRAMA
EN
21
del programa C, solo las hemos utilizado como una notacin, en cambio las
llaves { } indican el principio y el fin de una funcin escrita en C y deben ser
escritas en el programa.
Los parntesis "()" escritos despus de main sirven para indicar que el
identificador main es una funcin, y que no recibe argumentos, es importante
comprender que main no es una palabra reservada de C.
Dentro de las llaves podemos escribir todo nuestro programa, realizar
llamadas a otras funciones, ya sean escritas por el mismo programador o
almacenadas dentro de las libreras del lenguaje de programacin C.
Si se van a utilizar libreras del lenguaje de programacin, antes del
nombre de la funcin deben indicarse las libreras a utilizarse, por ejemplo:
#include <stdio.h>
1.7 M I
PRIMER PROGRAMA EN
22
#include <stdio.h>
main()
{
printf(Buenos das amigos\n);
}
Este sencillo programa nos sirve para comprender los puntos sealados
en el tema 1.6, donde aprendimos la estructura bsica de un programa en C y
nos prepara para entender mejor los siguientes captulos donde aprenderemos
las principales funciones existentes en el lenguaje C.
Para comprender mejor este programa daremos las siguientes
explicaciones:
Un programa en C est compuesto de funciones y variables.
Una funcin contiene proposiciones, las cules especifican todas las
operaciones de clculo que deben ser realizadas, estas son similares a las
subrutinas o procedimientos utilizados en otros lenguajes de programacin.
Las variables almacenan los valores utilizados durante los clculos.
Una funcin puede tener el nombre que el programador desee, pero main es
la funcin principal de un programa en C, cualquier programa escrito en C
comienza a ejecutarse al principio de esta funcin, por lo que cualquier
programa debe existir una funcin main en alguna parte de dicho programa.
Esta funcin principal llamar a otras funciones que la ayuden a realizar
su trabajo, algunas de estas funciones son de la biblioteca de C, y otras las
puede realizar usted mismo.
23
Una de las formas en que pueden comunicar datos entre las diversas
funciones es por medio de una lista de valores que proporciona la funcin que
llama, a la funcin que est invocando, esta lista de valores o argumentos se
ubican entre parntesis despus del nombre de la funcin.
En nuestro primer programa la funcin main() est definida para ser una
funcin que no espera argumentos, por lo que la lista entre parntesis est
vaca.
La primera lnea del programa:
#include <stdio.h>
le indica al
main()
24
ACTIVIDAD DE APRENDIZAJE
25
AUTOEVALUACIN
1. Menciona las principales caractersticas del Lenguaje de Programacin C
26
UNIDAD 2
TIPOS DE DATOS SIMPLES
OBJETIVO
Que el estudiante aprenda los diferentes tipos de datos, como se declaran
variables, conozca el concepto de constantes y se familiarice con los diferentes
operadores
con
su
manejo,
por
ltimo
aprender
los
diferentes
TEMARIO
2.1 TIPOS DE DATOS SIMPLES
2.2 DECLARACIONES DE VARIABLES
2.3 CLASES DE ALMACENAMIENTO
2.4 SENTENCIAS DE ASIGNACIN
2.5 DEFINICIN DE CONSTANTES
2.6 OPERADORES
2.6.1 OPERADORES ARITMTICOS
2.6.2 OPERADORES DE RELACIN Y LGICOS
2.6.3 CONVERSIONES DE TIPO
2.6.4 OPERADORES DE INCREMENTE Y DECREMENTO
2.6.5 OPERADORES PARA MANEJO DE BITS
2.7 PROCEDIMIENTOS DEFINIDOS DE ENTRADA/SALIDA ESTNDAR
27
MAPA CONCEPTUAL
Conceptos bsicos de
programacin
Tipos de datos
simples
Declaracin de
variables
Orgenes del
lenguaje C
Sentencias de asignacin y
definicin de Constantes
Operadores
E/S Estndar
Clases de
almacenamiento
28
INTRODUCCIN
El lenguaje C se desarroll para el manejo sencillo de datos, con variables,
constantes y operadores simples, si bien permite el manejo de informacin
numrica y alfanumrica, las operaciones son sencillas, dentro de este captulo
aprenderemos que las variables y las constantes son los objetos de datos
bsicos que se utilizan en un programa en C, para la utilizacin de los cules
se manejan:
29
int
2.2 D ECLARACIONES
DE
V ARIABLES
30
Existen palabras reservadas del lenguaje C como son if, else, char, int, etc.
que no pueden utilizarse como nombres de variables.
Es muy conveniente que se utilicen nombres que tengan que ver con el
propsito de la variable.
Todas las variables deben de ser declaradas antes de ser utilizadas, es decir
para que podamos utilizar una variable es preciso utilizar una declaracin
previamente, la declaracin especifica un tipo y contiene una lista de una o ms
variables del tipo indicado, las declaraciones deben tener la siguiente sintaxis:
<tipo> <nombre1, nombre2,>;
Donde <tipo> toma cualquiera de los valores expresados en el tema 2.1, como
ejemplos podemos citar las siguientes declaraciones:
int num, alfa, variable;
char nombre, apellido, n;
float x;
Como se observa en los ejemplos anteriores todas las declaraciones finalizan
con el smbolo ;
2.3 C LASES
DE ALMACENAMIE NTO
31
Para este tipo de datos existen los calificadores: short y long, por
ejemplo:
short int nombre;
Existen tambin los calificadores signed y unsigned, que se utilizan tanto para
datos tipo char como para datos int, los nmeros unsigned son siempre
positivos o cero.
ACTIVIDAD DE APRENDIZAJE
El estudiante deber investigar, para el equipo de cmputo y el compilador
utilizados en clase, los tamaos disponibles para todos los tipos de datos
sealados, incluyendo el uso de los calificadores short, long, unsigned y signed.
2.4 S ENTENCIAS
DE ASIGNAC IN
32
DE
C ONSTANTES
Una constante entera es un int, una constante long se escribe con una l o L al
final de la constante, un entero demasiado grande para caber dentro de un valor
int se toma como long, si la constante no tiene signo se escribe con una u o U y
con una ul o UL se escribe una constante long sin signo.
El valor de un entero puede especificarse en forma octal o hexadecimal en lugar
de la forma decimal. Un 0 (cero) al principio de una constante entera significa
octal; un 0x o 0X al principio significa hexadecimal.
Ejemplo
Decimal
31
Octal
031
Hexadecimal
0X1F
Estas pueden ser seguidas por L para convertirlas en long y U para convertirlas
en unsigned (sin signo).
33
Por ejemplo: 0XFUL es una constante sin signo long con valor de F
hexadecimal o 15 en decimal.
Las constante de punto flotante contienen punto decimal (123.45) o un
exponente (le-2), o ambos, su tipo es double, los sufijos f o F indican una
constante float; l o L indican un long double.
Una constante de tipo carcter se escribe dentro de apstrofos .
El valor de una constante de carcter es el valor numrico del carcter
dentro el conjunto de caracteres de la mquina
Por ejemplo x, 0 este ltimo ejemplo el valor de 0 en el conjunto de
caracteres ASCII es 48 no equivale al entero 0
2.6 O PERADORES
Los operadores nos permiten el manejo de operandos para obtener nuevos
valores, generalmente son binarios, es decir requieren 2 operandos, pero
tambin existen en C operadores que solo utilizan un operando.
Como ejemplo de operadores podemos utilizar los operadores de asignacin
como +=
i += 2
En esta expresin se incrementa en 2 el valor de i y es equivalente a la
expresin:
i=i+2
La mayora de los operadores binarios tienen un correspondiente operador de
asignacin, op= donde op es uno de los siguientes operadores binarios:
+ - * / % << >> & ^ |
34
x *= y+1
x= x*(y+1)
>=
<
<=
Todos tienen la misma prioridad, bajo estos operandos en prioridad estn los
operadores de igualdad:
==
35
||
ACTIVIDAD DE APRENDIZAJE
El estudiante deber realizar un programa sencillo donde utilice los diferentes
operadores y validar la preferencia que ellos tienen en el clculo de los
resultados, el maestro puede dejar un programa en particular a realizar o puede
dejar la opcin abierta para que los estudiantes decidan qu problema resolver.
36
ACTIVIDAD DE APRENDIZAJE
El estudiante deber referirse al libro El lenguaje de programacin C autores
Brian W. Kernighan y Dennis M. Ritchie editorial Pearson Educacin , pgina 47
para analizar cada una de las expresiones utilizadas en este ejercicio y las
entregar al profesor.
37
asigna 5 a la variable x
X=++n
asigna 6 a la variable x
38
AND de bits
OR inclusivo de bits.
OR exclusivo de bits.
<<
Corrimiento a la izquierda.
>>
Corrimiento a la derecha.
Complemento a uno.
()
[]
--
39
A?:
Mnima
= += -= *= /=
2.7 P ROCEDIMIENTOS
SALIDA ESTNDAR
putchar()
gets()
puts()
printf()
scanf()
40
int getchar(void)
getchar regresa el siguiente carcter de la entrada cada vez que es invocada o
EOF cuando encuentra el fin de archivo. La constante simblica EOF (End of
File) est definida en <stdio.h> y su valor tpicamente es -1.
Un archivo puede tomar el lugar del teclado empleando la convencin <
para re direccionamiento de entrada
La funcin putchar
formato
un nico carcter.
Decimal.
Notacin cientfica.
Coma flotante decimal.
41
%g
%o
%s
%u
%x
Salida
(%-5.2f,123.234)
123.23
ACTIVIDAD DE APRENDIZAJE
El estudiante deber realizar el siguiente programa en C, el cul tomar
caracteres desde el teclado y los imprimir en pantalla, cambiando las
maysculas por minsculas y viceversa, para finalizar el programa se debe
pulsar un punto.
Main () /* cambia maysculas por minsculas y viceversa*/
{
char ch;
do {
ch=getchar();
if (islower(ch)) putchar(toupper(ch));
else putchar(tolower(ch));
}while (ch !=.; /* use el punto para parar el programa*/
}
El alumno buscar la definicin de las funciones islower, toupper y
tolower para discutirlas en clase.
Nota las funciones do-while, if-else se estudiarn a lo largo de este curso.
42
AUTOEVALUACIN
1. Menciona los operadores que maneja C
Operadores aritmticos.
Operadores de asignacin.
--
43
UNIDAD 3
FUNCIONES Y LA ESTRUCTURA DEL PROGRAMA
OBJETIVO:
Que el estudiante aprenda qu son las funciones y cmo utilizarlas, cmo pasar
y recibir informacin a y desde una funcin, conozca las diferentes variables
que existen en C y conozca el concepto de recursividad.
TEMARIO
3.1 DEFINICION DE FUNCION.
3.2 LLAMADA DE UNA FUNCION.
3.3 FUNCIONES QUE REGRESAN VALORES NO ENTEROS.
3.4 ARGUMENTOS, LLAMADA DE UNA FUNCIN POR VALOR.
3.5 PASO DE PARAMETROS DE UNA FUNCION.
3.6 VARIABLES.
3.6.1 VARIABLES EXTERNAS.
3.6.2 VARIABLES ESTATICAS.
3.6.3 VARIABLES REGISTRO.
3.7 FUNCIONES PREDEFINIDAS EN C.
3.8 RECURSIVIDAD.
44
MAPA CONCEPTUAL
Definicin de funcin
Llamada de una
funcin
Valores de las
funciones
Paso de
parmetros
Variables
Funciones
predefinidas
Recursividad
Argumentos y
llamadas a
funciones
45
INTRODUCCIN
Las funciones nos sirven para dividir tareas grandes en tareas ms pequeas,
nos dan la posibilidad de construir sobre los programas que otros han hecho y
utilizarlos para nuevas soluciones en lugar desde comenzar desde cero.
El lenguaje C se dise para que las funciones fueran eficientes y muy fciles
de utilizar normalmente los programas que se escriben en C se componen de
muchas funciones pequeas en lugar de solo algunas grandes.
3.1 D EFINICIN
DE FUNCIN
Las funciones son bloques con los que se constituyen programas en lenguaje
C y en ellas se llevan a cabo las funciones del programa.
Una vez que una funcin ha sido escrita, compilada, ligada y depurada puede
utilizarse una y otra vez desde cualquier otro programa
3.2 L LAMADA
DE UNA FUNCIN
46
Todas las funciones devuelven por lo menos un valor, este valor puede
estas explcitamente especificado con la palabra return, o bien puede ser cero si
no se especifica ningn otro valor. Por default todas las funciones devolvern
valores enteros pero se pueden especificar otro tipo de valores.
Una funcin puede ser utilizada dentro del cuerpo de una expresin,
debido a que cada funcin devuelve un valor, como ejemplo de esto
mencionamos las siguientes expresiones todas validad en C :
x= potencia (y);
if ( max(x,y) > 100) printf(mayor que);
3.3 F UNCIONES
47
Cuando se utiliza un valor devuelto que no sea entero se tiene que hacer
una segunda cosa: La rutina que llam a la funcin tiene que saber el tipo de
dato que devolver la funcin, por lo que debemos declarar la funcin dentro de
la rutina de llamada.
3.4 A RGUMENTOS ,
Generalmente existe dos formas en que pueden pasarse los argumentos a las
funciones: La primera se denomina llamada por valor, este mtodo copia el
valar de cada uno de los argumentos en los parmetros formales de la funcin,
la segunda forma se conoce como llamada por referencia con este mtodo, la
direccin de cada argumento se copia los parmetros de la funcin, es decir los
cambios hechos en el parmetro afectaran a la variable utilizada para llamar a
la funcin.
Las funciones C utilizan la llamada por valor, esto significa que no se
pueden alterar las variables utilizadas para llamar a la funcin esta es la forma
general.
3.5 P ASO
3.6 V ARIABLES
Una variable local es dinmica; se crea cuando la funcin se ejecuta y se
destruye en el momento en que la funcin termina, una variable local solo se
conoce dentro de la funcin en la que es declarada.
48
3.7 F UNCIONES
PREDEFINIDA S EN
49
<assert.h>
<float.h>
<math.h>
<stdarg.h>
<stdlib.h>
<ctype.h>
<limits.h>
<setjmp.h>
<stddef.h>
<string.h>
<errno.h>
<locale.h>
<signal.h>
<stdio.h>
<time.h>
ACTIVIDAD DE APRENDIZAJE
El estudiante analizar por lo menos 10 funciones predefinidas de C, las
cuales forman parte de la librera estndar del lenguaje.
Estas debern ser discutidas en clase, tratando de mencionar diferentes tipos
de funciones, es decir de entrada y salida, de operaciones para archivos,
funciones de error, funciones para cadenas de caracteres, funciones
matemticas, etc.
3.8 R ECURSIVIDAD
En los programas desarrollados en C las funciones pueden llamarse a si
mismas es decir son recursivas, esto es si dentro del cuerpo de la funcin existe
50
/* recursiva */
int n;
{
int respuesta;
if(n==1) return(1);
respuesta=factr(n-1)*n;
return(respuesta);
}
51
AUTOEVALUACIN
1. Explica que son las variables externas en una funcin escrita en C
Una variable externa se declara fuera de cualquier funcin y es conocida
por todas las funciones del programa. Las variables externas permanecen
durante toda la duracin del programa.
2. En qu consiste el concepto de recursividad?
Es la capacidad que tienen las funciones desarrolladas en C de
llamarse a si mismas.
3. Menciona 3 funciones de la biblioteca estndar de C
printf
getchar
putchar
52
UNIDAD 4
ESTRUCTURAS DE CONTROL DE FLUJO
OBJETIVO:
Que el estudiante aprenda a utilizar las sentencias condicionales, los ciclos, las
proposiciones de rompimiento de la secuencia normal de ejecucin de un
programa (break, continue, goto y etiquetas) para la toma de decisiones en la
elaboracin de programas con el lenguaje de programacin C, al finalizar este
captulo podr realizar programas ms complejos para la solucin de los
problemas que se le planteen.
TEMARIO
4.1 PROPOSICIONES Y BLOQUES
4.2 SENTENCIAS CONDICIONALES
4.2.1 IF ELSE
4.2.2 ELSE IF
4.2.3 SWITCH
4.3 CICLOS Y BUCLES
4.3.1 WHILE Y FOR
4.3.2 DO WHILE
4.4 BREAK Y CONTINUE
4.5 ETIQUETAS Y GOTO
53
Proposiciones y
bloques
Sentencias
Condicionales
Ciclos y Bucles
if else
while y for
else if
Do While
switch
break y
continue
Etiquetas y
goto
54
INTRODUCCIN
El lenguaje C cuenta con una serie de expresiones para poder controlar la
secuencia en la ejecucin de los diversos bloques que componen el programa,
se cuenta con sentencias condicionales y con ciclos o bucles
55
56
}
Recordemos que un comentario se puede escribir al finalizar una
proposicin, como sucede en la declaracin de la variable entera i, siempre y
cuando lo encerremos entre /* y */ todo lo que va entre estos smbolos es
considerado un comentario y no ser analizado por el compilador C.
La variable i solo estar disponible en la rama verdadera del if, por lo
que esta i no tiene ninguna relacin con alguna otra variables llamada i fuera de
este bloque, su valor se pierde en el momento de encontrar la llave derecha }
que indica terminacin del bloque.
Una variable automtica que se declara e inicializa en un bloque, deber
ser inicializada cada vez que se entra al bloque
Una variable esttica se inicializa solamente la primera vez que se entra
al bloque.
Como un ejemplo final analicemos las siguientes proposiciones:
Int a
Int b
f1 (double a)
{
double b;
57
En este ejemplo
En la funcin f1 las ocurrencias de a se refieren al parmetro que es double.
Fuera de f1 se refieren al int externo, lo mismo ocurre para la variable b.
Se recomienda evitar nombres de variables dentro de una funcin que
sean idnticos con nombres de un alcance exterior, para evitar errores o
confusiones.
ACTIVIDAD DE APRENDIZAJE
El estudiante deber realizar un programa que utilice una variable i externa y
una variable i interna a un bloque de instrucciones, realizar variaciones del valor
de dicha variable, tanto fuera como dentro del bloque, mandando a imprimir su
valor varias veces para verificar que son dos variables independientes.
4.2.1 If Else
Esta proposicin se utiliza para tomar decisiones, su sintaxis es:
58
if (expresin)
proposicin1
else
proposicin2
La expresin entre parntesis ( ) se evala, si es verdadera (tiene un
valor diferente de 0) se ejecuta la proposicin1, pero si es falsa (tiene un valor
igual a 0) entonces se ejecuta la proposicin2, esto siempre que exista una
parte de else, ya que esta ltima parte es opcional.
Como un if prueba el valor numrico de una expresin, podemos abreviar
el cdigo, por ejemplo:
Utilizar:
if (expresin)
59
60
4.2.2 Else If
Para poder contar con una desicin mltiple, es decir poder evaluar una
condicin y en base al resultado de la misma tomar un camino determinado se
utiliza esta instruccin, su sintaxis es la siguiente:
if (expresin)
proposicin
else if (expresin)
proposicin
else if (expresin)
proposicin
else if (expresin)
proposicin
else
proposicin
Todas las expresiones se evaluarn en orden, si cualquiera de ellas es
verdadera, la proposicin asociada con ella se ejecuta, terminando con ello la
cadena de decisiones, como hemos mencionado, cada proposicin puede ser
una proposicin simple o un grupo de ellas dentro de llaves {.}.
El ltimo else, en el ejemplo anterior, maneja el caso ninguno de los
anteriores, es el caso por default que se ejecutar cuando ninguna de las
condiciones establecidas se satisface, no siempre se utiliza, pero nos resulta til
para detectar errores o para una condicin imposible
61
ACTIVIDAD DE APRENDIZAJE
El profesor deber solicitar a los alumnos la realizacin de, por lo menos 2
programas que resuelvan mediante el uso de if-else y/o de else-if problemas
sencillos pero que sirvan para comprender completamente el uso de estas
sentencias condicionales.
4.2.3 Switch
Esta es una decisin mltiple que prueba si una expresin coincide con unos de
un nmero de valores constantes enteros, su sintaxis es la siguiente:
switch (expresin) {
case exp-const:proposiciones
case exp-const: proposiciones
default: proposiciones
}
Cada case se etiqueta con uno o ms valores constantes enteros o
expresiones constantes enteras, cuando un case coincide con el valor de la
expresin, la ejecucin comienza en ese punto, es importante mencionar que
todas las expresiones case deben ser distintas.
La etiqueta default se ejecuta si ninguno de los otros casos se satisfizo, y
es optativo, si esta etiqueta no se escribe y ninguno de los casos coincide no se
tomar accin alguna.
62
ACTIVIDAD DE APRENDIZAJE
Los alumnos realizarn, compilarn y ejecutarn el siguiente programa5.
#include <Stdio.h>
main () /* cuenta dgitos, espacios en blanco y otros caracteres */
{
int c, i, nwhite, nother, ndigit[10];
nwhite = nother = 0;
for(i=0; i<10; i++)
ndigit[i] = 0;
while ((c = getchar()) != EOF) {
switch ( c) {
case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9:
ndigit[c-0]++;
break;
case :
case \n:
case \t:
nwhite++;
break;
default:
nother++;
break;
}
}
printf(digitos =);
for (i=0; i<10; i++)
printf(%d, ndigit[i]);
5
Tomado del libro El Lenguaje de programacin C; autor Brian W. Kernighan, Dennis M Ritchie; editorial
Pearson Educacin
63
4.3 C ICLOS
Y BUCLES
64
4.4 B REAK
C ONTINUE
65
4.5 E TIQUETAS
Y GOTO
if (desastre)
goto error;
}
error:
arreglamos el desastre
66
ACTIVIDAD DE APRENDIZAJE
El profesor deber solicitar a los alumnos la realizacin de, por lo menos 2
programas que resuelvan mediante el uso de ciclos, break, continue, goto y
etiquetas problemas sencillos pero que sirvan para comprender completamente
su uso.
67
AUTOEVALUACIN
1. Menciona 2 ejemplos de ciclos o bucles.
3. Qu es un ciclo o bucle?
una
condicin
establecida,
pueden
ser
sentencias
68
UNIDAD 5
TIPOS DE DATOS ESTRUCTURADOS
OBJETIVO
Que el estudiante aprenda a utilizar arreglos, estructuras, uniones y campos de
bits.
TEMARIO
5.1 ARREGLOS.
5.2 ESTRUCTURAS.
5.2.1 CONCEPTOS BSICOS SOBRE ESTRUCTURAS.
5.2.2 ESTRUCTURAS Y FUNCIONES.
5.2.3 ARREGLOS DE ESTRUCTURAS.
5.2.4 APUNTADORES O ESTRUCTURAS.
5.2.5 ESTRUCTURAS AUTORREFERENCIADAS
5.3 UNIONES
5.4 CAMPOS DE BITS
69
MAPA CONCEPTUAL
Tipos de datos
estructurados
Arreglos
Estructuras
Uniones
Campos de Bits
70
INTRODUCCIN
El alumno aprender:
71
5.1 ARREGLOS
Un apuntador es una variable que contiene la direccin de una variable, estos
son muy utilizados en C, los apuntadores y los arreglos estn muy
relacionados, en este captulo analizaremos los arreglos y en el siguiente los
apuntadores.
En C los arreglos se componen de posiciones contiguas de memoria,
donde la direccin ms baja corresponde al primer elemento y la ms alta al
ltimo elemento.
La sintaxis general para un arreglo unidimensional es:
type var_nombre[dimensin];
Se requiere que a cada arreglo se le d una longitud en la sentencia de
declaracin, en C los arreglos empiezan en cero, por ejemplo, cuando
escribimos:
char p[10];
Declaramos un arreglo de caracteres que tiene 10 elementos, de p[0} a
p[9].
char x[10];
Declaramos un arreglo de nmeros enteros de 10 elementos de x[0] a
x[9].
ACTIVIDAD DE APRENDIZAJE
El estudiante analizar el siguiente ejemplo y lo discutir en clase:
int i[10];
int cont;
for (cont=0;cont<10;++cont) i[cont]=cont;
72
Nota: Recordar la diferencia entre ++var y var++, recordar la estructura del for
m+7
0,0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
1,0
1,1
1,2
1,3
1,4
1,5
1,6
1,7
2.0
2,1
2,2
2,3
2,4
2,5
2,6
2,7
3,0
3,1
3,2
3,3
3,4
3,5
3,6
3,7
4,0
4,1
4,2
4,3
4,4
4,5
4,6
4,7
Primer ndice
m+(rxc)-1
73
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar un programa para llevar un arreglo multidimensional
donde coloque Nombre, Apellido Paterno y Apellido Materno de todos los
alumnos inscritos en su grupo.
En clase analizar las diversas soluciones presentadas.
5.2 E STRUCTURAS
Una estructura en C es una coleccin de una o ms
variables, de tipos
74
(x,y)
(0,0)
Con la palabra reservada struct sirve para declarar una estructura, esta
es una lista de declaraciones entre llaves, se utiliza un nombre de forma
optativa como rtulo de la estructura, en el ejemplo anterior el rtulo de la
estructura es point, este puede ser utilizado como una abreviatura para la
parte de declaraciones entre llaves.
Las variables nombradas dentro de una estructura se denominan
miembros.
Un miembro, un rtulo y una variable ordinaria, esto es, no miembro,
pueden tener el mismo nombre sin causar ningn conflicto, ya que se pueden
distinguir fcilmente por el contexto en que se utilicen.
En diferentes estructuras se pueden encontrar los mismos nombres de
miembros, sin que se tenga algn problema, pero por claridad y estilo se
deberan utilizar los mismos nombres solo para objetos estrechamente
relacionados.
75
Una declaracin struct define un tipo, la llave derecha que cierra la lista
de miembros puede ser seguida por una lista de variables, como lo hacemos
para cualquier tipo bsico:
struct {..} x, y, z;
Es muy similar a escribir:
int x, y, z;
76
Con esto definimos una estructura llamada dir y se declaran las variables
ainfo, binfo, cinfo, del tipo dir.
Ahora declararemos un arreglo de cien elementos de estructuras del tipo dir,
esto es:
struct dir ainfo[100];
Esto crea cien conjuntos de variables que estn organizadas como se
defini en la estructura dir.
Para imprimir el cdigo postal DP de la estructura 3 debemos escribir:
printf(%d,ainfo[2].DP);
Como en todas las variables de arreglos, los arreglos de estructura
empiezan sus contadores en cero.
Ejemplo tomado del libro: El Lenguaje de Programacin C, de Brian W. Kernighan y Dennis M. Ritchie,
editorial Pearson Educacin.
77
78
79
ACTIVIDAD DE APRENDIZAJE
El estudiante analizar en clase el ejemplo anterior, hasta comprender en su
totalidad el funcionamiento de todo el programa.
El profesor deber aclarar todas las dudas que se presenten.
80
char *word;
/* apuntador al texto */
int count;
/* nmero de ocurrencias */
/* hijo a la izquierda */
/*/hijo a la derecha */
};
ACTIVIDAD DE APRENDIZAJE
El estudiante del libro El lenguaje de programacin C de Brian W Kernighan y
Dennis M.Ritchie, editorial Pearson Educacin, realizar, analizar, compilar y
ejecutar los problemas presentados en las hojas 155 y 156 para entender el
concepto de estructuras autorreferenciadas.
El profesor deber aclarar todas las dudas que se presenten.
81
5.3 U NIONES
En el lenguaje de programacin C una unin es un lugar de la memoria que se
utiliza por algunas variables diferentes y posiblemente de diferentes tipos.
En el siguiente ejemplo se da la unin llamada u entre un carcter y un
entero:
unin u {
int i;
char ca;
};
Como ocurre en el caso de las estructuras, esta unin no declara
ninguna variable, la variable puede ser declarada colocando su nombre al final
de la definicin o por medio de una sentencia de declaracin separada, para
declarar una variable tipo unin llamada cnvt, utilizando la definicin que acaba
de darse se debe escribir:
union u cnvt;
5.4 C AMPOS
DE BITS .
82
Las tres variables se declaran como unsigned por que un bit no puede
tener signo, los nicos valores que puede tener un bit son 0 y 1. La variable
estructura codi_dispositivo se puede utilizar para decodificar informacin desde
el puerto de una cinta magntica, por ejemplo el siguiente fragmento de cdigo
lo utilizamos para escribir un byte de informacin en la cinta y comprobaremos
los errores utilizando codi_dispositivo.
Wr_cinta(c)
Char c;
{
while(!codi_dispositivo-ready) rd(&codi_dispositivo); /* espera */
wr_to_tape(c); /* escribe un byte */
while (codi_dispositivo.activo) rd(&codi_dispositivo); /* espera hasta que
la informacin se escriba */
if(dev_code.xmt_error) printf(error de escritura);
}
83
No usado
Codi_disositivo.activo
Codi_dispositivo.listo
Codi_dispositivo.xmt_error
84
AUTOEVALUACIN
1. Qu es un arreglo?
Cierto
3. Qu es una estructura?
85
UNIDAD 6
APUNTADORES
OBJETIVO:
Que el estudiante aprenda el concepto de apuntadores, las operaciones que
pueden realizarse con ellos, comprenda la aritmtica de direcciones para
utilizarlos en la solucin de problemas complejos de programacin.
TEMARIO
6.1 . DEFINICIN DE APUNTADORES
6.2 OPERACIN DE APUNTADORES
6.3 . APUNTADORES Y ARREGLOS
6.4 ARITMTICA DE DIRECCIONES
6.5 APUNTADORES A CARACTERES Y FUNCIONES
6.6 ASIGNACIN DINMICA DE MEMORIA
86
MAPA CONCEPTUAL
Apuntadores
Definicin de
apuntadores
Operacin de
apuntadores
Apuntadores y
Arreglos
Apuntadores a
caracteres y
funciones
Aritmetica de
direcciones
Asignacin
dinmica de
memoria
87
INTRODUCCIN
En captulos anteriores ya se han utilizado los apuntadores, pero hasta este
captulo aprenderemos a utilizarlos con todo detalle, esto nos permitir realizar
programas cuyo tiempo de ejecucin sea ms rpido.
El uso de los apuntadores es importante para realizar de forma correcta
programas en el lenguaje de programacin C.
El alumno aprender:
88
consecutivamente,
esta
celdas
se
pueden
manipular
c:
89
6.2 O PERACIN
DE
A PUNTADORES
90
float *x;
Debemos de tener la seguridad de que las variables tipo apuntador
siempre apunten al tipo de datos correcto, cuando declaramos que un
apuntador es del
/* da la direccin de x a p2 */
y=p2;
printf (%u,y);
6.3 A PUNTADORES
A RREGLOS
91
m[0]
m[1]
m[2]
m[3] m[4]
m[5]
m[6] m[7]
m[8]
m[9]
m
:
m[0]
m[1]
m[2]
m[3] m[4]
m[5]
m[6] m[7]
m[8]
m[9]
92
pm+1:
pm+2:
m
:
m[0]
m[1]
m[2]
m[3] m[4]
m[5]
m[6] m[7]
m[8]
m[9]
Esto es correcto sin importar el tipo o tamao de las variables del arreglo m,
La relacin entre indexacin y aritmtica de apuntadores es muy
estrecha.
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar la solucin de un problema definido por el profesor de
dos maneras distintas:
Mediante el uso de arreglos con ndices.
Mediante el uso de arreglos y apuntadores
Nota: En lo posible tratar de comparar los tiempos de ejecucin de ambas
soluciones.
93
6.4 A RITMTICA
DE DIRECCI ONES .
6.5 A PUNTADORES
94
de
arreglo
*/
95
Hola\0
pmensaje
Hola\0
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar y analizar el siguiente ejemplo tomado del libro
Programacin en lenguaje C del autor Herbert Schildt, editorial Mc Graw Hill:
main()
{
int strcmp();
96
comp(s1,s2,strcmp);
}
Comp(a,b,cmp)
Char *a,*b;
Int (*cmp) ();
{
printf(comprueba la igualdad\n);
if (!(*cmp) (a,b)) printf(igual);
else printf(distinto);
}
6.6 A SIGNACIN
DINMICA D E MEMORIA
al
resultado
final.
Por
ejemplo,
algunos
programas
son
Nota para una mayor claridad, este tema se tom del libro Programacin Avanzada del
97
98
pila
Programa
Baja
Si usted no est familiarizado a fondo con malloc() y free(), aqu hay una
pequea revisin.
Una revisin de malloc() y free()
Las funciones malloc() y free() forman el sistema de asignacin
dinmica de memoria del lenguaje C y son parte de la librera estndar de este
lenguaje. Funcionan juntas utilizando la regin de memoria libre que queda
entre el programa y el principio de la pila para establecer y mantener una lista
de almacenamiento disponible. Cada vez que se hace una peticin de memoria
por malloc(), se asigna una porcin de la memoria libre restante. Cada vez que
se hace una llamada para liberar memoria con free() es organizar la memoria
en una lista enlazada.
La funcin malloc() es la funcin de asignacin dinmica de memoria de
propsito general de C. La forma general de llamada es
char *malloc(), *p;
int nmero_bytes;
p=malloc(nmero_bytes);
99
{
int *p, t;
p=malloc(40*sizeof(int));
if(p==0) {
printf(no hay memoria\n);
100
exit (0);
}
for (t=0;t<40;++t) *(p+t)=t;
for (t=0;t<40;++t) printf (%d ,*(p+t));
free(p9);
101
AUTOEVALUACIN
1. Qu es un apuntador?
Es una variable que contiene una direccin de memoria. Esta direccin es la
posicin de alguna variable en memoria.
2. Suponiendo que n es un entero y p un apuntador a un entero, escribir el
fragmento de cdigo que asignar el valor de 10 a n utilizando el apuntador
p.
p = &n;
*p = 10;
3. Qu operadores aritmticos pueden usarse con los apuntadores?
Solo existen dos operadores aritmticos que se pueden utilizar con los
apuntadores, + y -.
4. Qu funcin tienen malloc() y free() en C.
forman el sistema de asignacin dinmica de memoria del lenguaje C y
son parte de la librera estndar de este lenguaje, malloc() hace una
peticin de memoria y free() es una llamada para liberar memoria.
5. Mencione los operadores especiales sobre apuntadores, y explique su
funcionamiento.
Existen dos operadores especiales sobre apuntadores & y *, ambos son
operadores unarios.
El operador & sirve para dar la direccin de un objeto, y solo se aplica a
objetos que estn en memoria (variables y elementos de arreglos) El
operador * accede al contenido de una variable cuya direccin es el valor de
un puntero.
102
UNIDAD 7
ARCHIVOS Y ENTRADA / SALIDA
OBJETIVO:
El estudiante aprender:
Qu son y cmo funcionan los archivos, as como las principales funciones
utilizadas para su manejo.
Las diferentes funciones de entrada / salida existentes en el lenguaje de
programacin C
TEMARIO
7.1 . DESCRIPTORES DE ARCHIVOS
7.2 E/S DE BAJO NIVEL: READ Y WRITE
7.3 . E/S POR CONSOLA: GETCHAR( ) Y PUTCHAR( ), GETS( ) Y PUTS( )
7.4 E/S POR CONSOLA CON FORMATO PRINTF( ) Y SCANF( )
7.5 MANEJO DE ARCHIVOS
7.5.1 OPEN
7.5.2 CREAT
7.5.3 CLOSE
7.5.4 UNLINK
7.5.5 ACCESO ALEATORIO: LSEEK
103
MAPA CONCEPTUAL
Archivos
Descriptores de
archivos
Entrada / Salida
read, write
gets( ), puts( )
Manejo de archivos:
open, creat, close, unlink, lseek
104
INTRODUCCIN
El manejo de archivos en C y las funciones de entrada / salida tienen vital
importancia para poder intercambiar informacin con los programas, funcionan
como interfaz entre los programas y el usuario, se analizarn diferentes
funciones de entrada / salida, aprenderemos los descriptores de archivo y cmo
redireccionar las entradas y salidas estndar hacia archivos u otros dispositivos.
El alumno aprender:
105
entrada
estndar,
salida
estndar
error
estndar
106
7.2 E/S
107
Actividad de aprendizaje
El estudiante analizar y discutir en clase el siguiente problema tomado del
libro el lenguaje de programacin C, Brian W. Kernighan y Dennis M. Ritchie:
#include syscall.h
main()
{
char buf(BUFSIZ);
int n;
7.3 E/S
Y PUTCHAR (
),
GETS (
Y PUTS (
).
108
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar el siguiente programa el cul toma caracteres desde el
teclado (entrada estndar) y los mostrar en la pantalla (salida estndar)
cambiando las maysculas por minsculas y viceversa, para finalizar el
programa pulsar un punto . La funcin islower() devuelve cierto si ch
(carcter pulsado en teclado) es un carcter en minscula. La funcin toupper()
convierte una letra minscula en mayscula y la funcin tolower() convertir una
letra mayscula en minscula, ninguna de estas dos funciones afecta a los
caracteres especiales como +, , %, etc. Estas funciones se encuentran en la
librera estndar de C.
main ()
{
char ch;
do {
ch=getchar();
if(islower(ch)) putchar(toupper(ch));
109
else putchar(tolower(ch));
} while (ch!=.);
Las funciones que nos permiten leer cadenas de caracteres por consola,
son el siguiente paso en complejidad y potencia son:
Gets() devuelve una cadena terminada con el carcter nulo en el arreglo de
caracteres que recibe como argumento, se pueden teclear caracteres
desde el teclado hasta que se pulse enter, con esto se coloca un
carcter nulo al final de la cadena y gets() devuelve el valor. El enter o
retorno de carro no va en la cadena, por lo que esta funcin no se
puede utilizar para devolver el retorno de carro, sin embargo getchar() si
lo puede hacer. Gets() permite corregir errores de escritura por medio
de la tecla backspace antes de pulsar enter o retorno de carro.
Puts() escribe su argumento de cadena en la pantalla, reconoce los mismos
cdigos de barra invertida que printf(), como puede ser \n para cambio
de lnea. Una llamada a puts() produce menos sobrecarga al
procesador que la llamada a printf(), debido a que solo saca a pantalla
una cadena de caracteres, no puede sacar nmeros o hacer
conversiones de formatos, por esto ocupa menos espacio y es mas
rpida que printf() cuando muestra cadenas en la pantalla, est en la
mayora de las libreras estndar
7.4 E/S
Y SCANF (
).
110
Un nico carcter.
%d
Decimal.
%e
Notacin cientfica.
%f
%g
111
%o
Octal.
%s
Cadena de caracteres.
%u
%x
Hexadecimal.
112
%c
%d
%e
%f
%h
%o
%s
%x
113
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar al menos 10 ejemplos ms de formatos con la funcin
printf() y 10 ms con la funcin scanf()
7.5 M ANEJO
DE ARCHIVOS .
114
7.5.1 Open
Esta funcin regresa un descriptor de archivo que es tan solo un int, regresa -1
si ocurrea lgn error.
include <fcntl.h>
int fd;
int open(char *nombre, int flags, int perms);
fd=open(nombre,flags,perms);
El argumento nombre es una cadena de caracteres que contiene el
nombre del archivo, el segundo argumento (flags) es un int que especifica como
se debe abrir el archivo:
O_READONLY abrir solo para lectura.
O_WRONLY abrir solo para escritura.
O_RDWR abrir tanto para lectura como para escritura.
Estas constantes estn definidas en <fcnl.h> cuando usamos, por
ejemplo UNIX System V, y en <sys/file.h> en otros sistemas, por ejemplo Unix
con Berkeley (BSD).
Ejemplo:
Abrir un archivo ya existente para lectura:
fd = open(nombre, O_RDONLY,0);
7.5.2 Creat
Sera un error tratar de abrir un archivo que no exista, con la instruccin de
arriba, para poder crear nuevos archivos o reescribir archivos viejos, se utiliza la
llamada al sistema creat:
int creat(char *nombre,int perms);
115
fd = creat(nombre, perms);
Esta funcin regresa un descriptor de archivo si pudo crear el archivo, y
un -1 si no pudo ser creado.
Si el archivo ya existe, esta funcin lo truncar a longitud cero,
descartando su contenido previo, no significa un error crear con creat un archivo
existente, en caso de que no exista creat lo crea con los permisos que
especificamos con el argumento perms.
En sistemas de archivos con el SO UNIX hay 9 bits para informacin de
permisos asociados con archivos, que nos permiten controlar el acceso de
lectura, escritura y ejecucin tanto para el propietario del archivo, para el grupo
del propietario y para el resto de los usuarios que tengan acceso al archivo. Por
esto un nmero octal de 3 dgitos es apropiado para especificar los permisos de
acceso a un archivo, por ejemplo 0755, especifica permisos para leer, escribir y
ejecutar solo para el propietario del archivo y de lectura y ejecucin para el
grupo al que pertenece el propietario y para todos los dems usuarios.
7558 = 111 101 1012
El grupo de 3 bits de la derecha hacen referencia al propietario, el del
centro al grupo de usuarios del propietario y el de la derecha al resto de
usuarios.
Cada bit puede brindar si su valor es 1 un permiso o negarlo si su valor
es 0, cada grupo de 3 bits proporciona permisos de lectura, escritura y
ejecucin respectivamente de derecha a izquierda.
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar y analizar el siguiente programa en C que le permite
copiar un archivo a otro.
116
#include <stdio.h>
#include <fcntl.h>
#include syscall.h
#define PERMS 0666
/* cp: copia f1 a f2 */
main(int argc, char *argv[])
{
int f1, f2, n;
char buf[BUFSIZ];
if(arg = 3)
error (uso: cp de hacia);
if((f1 = open(argv[1], O_RDONLY, 0)) == -1)
error(cp: no se puede abrir %s, argv[1]);
if((f2 = creat(argv[2],PERMS)) == -1)
error(cp:
no
se
puede
crear
%s,
modo
%03o,
argv[2],PERMS);
while((n = read(f1, buf, BUFSIZ)) > 0)
if (write(f2, buf, n) != n)
error(cp: error de escritura en archivo %s, argv[2]);
return 0;
}
117
7.5.3 Close
Existe un lmite en el nmero de archivos que un programa en C puede tener
abiertos simultneamente, comnmente de 20. Por esta razn es muy
importante la siguiente funcin, cuya sintaxis es:
close(int fd)
Esta funcin suspende la conexin entre un descriptor de archivo y un
archivo abierto, liberando al descriptor de archivo para que pueda ser utilizado
por otro archivo. Es muy similar a la funcin fclose de la biblioteca estndar,
pero no existe un buffer que vaciar. La funcin exit o return desde el programa
principal cierra todos los archivos abiertos,
7.5.4 Unlink
La sintaxis de esta funcin es:
unlink(char *nombre)
remueve el archivo nombre del sistema de archivos.
Corresponde a la funcin remove de la biblioteca estndar.
118
Origen
0
1
2
ACTIVIDAD DE APRENDIZAJE
El estudiante realizar un programa para leer archivos, la finalidad de dicho
programa debe ser definida por el profesor.
119
AUTOEVALUACIN
1. Menciona 3 funciones tiles en el manejo de archivos.
open, close, creat, unlink.
2. Cules son los dispositivos estndar para la entrada y salida?
El teclada para la entrada y la pantalla para la salida.
3. Qu es un descriptor de archivo?
Siempre que vamos a realizar operaciones de entrada / salida sobre un
archivo se utiliza el descriptor de archivo como identificacin en lugar del
nombre de archivo, un descriptor de archivo es similar al apuntador de
archivo usado por la biblioteca estndar.
4. Escribir una llamada a scanf() para que introdusca una cadena de
caracteres y dos nmeros enteros.
scanf(%s%d%d, s, d1, d2);
5. Escribir una llamada a printf() que muestre en pantalla por lo menos 5
caracteres, pero no mas de 10, para cada uno de los siguientes tipos de
datos: entero, cadena de caracteres, y flotante.
printf(%5.10d %5.10s %5.10f, dec, string, flt);
120
BIBLIOGRAFA
121
GLOSARIO
Acceso Aleatorio: en computacin es la habilidad que se tiene para acceder a
un elemento arbitrario de una secuencia de datos, no requiere haber accesado
al elemento previo.
Apuntadores: variable existente que hace referencia a una direccin fsica de
memoria de una computadora
Archivo: es un conjunto de bits almacenado en un dispositivo perifrico de una
computadora.
Arreglos: tabla de una o ms dimensiones que permite almacenar de manera
ordenada informacin en una computadora.
Bit: acrnimo de Binary Digit, es un dgito del sistema de numeracin binario,
solo puede tener dos valores 0 o 1, es la unidad bsica de informacin en una
computadora.
Byte: Secuencia de bits contiguos, en muchas ocasiones conjunto de 8 bits, es
la unidad bsica de almacenamiento en una computadora.
Compilar: Traducir un programa escrito en un lenguaje de programacin
generalmente de alto nivel a cdigo de mquina que puede ser interpretado por
una computadora.
Constante: es un valor que no puede ser alterado durante la ejecucin de un
programa.
Funcin: es un subprograma que sirve para resolver una tarea especfica, en
programacin son subrutinas que devuelven un valor.
Ligar: tomar los programas en cdigo objeto o de mquina generado por un
compilador para unirlo con todos los cdigos de funciones, subrutinas, etc.
almacenados en las libreras para generar el cdigo ejecutable de un programa.
122
Operador: es un smbolo matemtico que indica que debe ser llevada a cabo
una operacin especfica sobre un cierto nmero de operandos.
Recursividad: es la forma en la cual se especifica un proceso basado en su
propia definicin, en programacin es un proceso que dentro de su definicin
hace llamada a el mismo.
Variable: es un smbolo que representa un elemento no especificado de un
conjunto dado, en programacin es una zona de memoria que puede tomar
diversos valores durante la ejecucin de un programa.