Make your own free website on Tripod.com

Programación C

Indice

I. Formato de un programa en C.

  1. Sistemas numéricos.
  2. Interpretación de datos.
  3. El modelo de la computadora para el programador.
  4. Definición de programa.
  5. Estructura de un programa en C.

II. Operadores, tipos y expresiones.

  1. Constantes.
  2. Nombres de variables.
  3. Tipos de datos y tamaños.
  4. Declaraciones.
  5. Operadores.
  6. Operador de asignación y expresiones.
  7. Precedencia y orden de evaluación.
  8. Sentencias de entrada y salida.

III. Control de flujo.

  1. Sentencias y bloques.
  2. If-Else.
  3. Else-If.
  4. Switch.
  5. Arreglos.
  6. While y For.
  7. Do-While.
  8. Break y continue.

IV. Estructuras, funciones y unidades.

  1. Estructuras.
  2. Funciones.
  3. Librerias.

V. Archivos.

  1. Descriptor de archivo.
  2. Entrada y salida de bajo nivel.
  3. Entrada y salida de alto nivel.

Revisión y entrega del proyecto.

Bibliografía.

Inicio


1. Formato del Programa en C

Sistemas numéricos

Los sistemas de numeración son conjuntos de dígitos usados para representar cantidades, así se tienen los sistemas de numeración decimal, binario, octal, hexadecimal, romano, etc. Los cuatro primeros se caracterizan por tener una base (número de dígitos diferentes: diez, dos, ocho, dieciseis respectivamente) mientras que el sistema romano no posee base y resulta más complicado su manejo tanto con números, así como en las operaciones básicas.

Los sistemas de numeración que poseen una base tienen la característica de cumplir con la notación posicional, es decir, la posición de cada número le da un valor o peso, así el primer dígito de derecha a izquierda después del punto decimal, tiene un valor igual a b veces el valor del dígito, y así el dígito tiene en la posición n un valor igual a: (bn) * A.


Donde:

b = valor de la base del sistema
n = número del dígito o posición del mismo
A = dígito.

Por ejemplo:
Digitos =>
1
2
4
9
5
3
.
3
2
4
Posición =>
5
4
3
2
1
0
.
-1
-2
-3
El Sistema Numérico Decimal

El sistema de numeración decimal es el más usado, tiene como base el número 10, o sea que posee 10 dígitos (o simbolos) diferentes (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). El sistema de numeración decimal fué desarrollado por los hindúes, posteriormente lo introducen los árabes en Europa, donde recibe el nombre de sistema de numeración decimal o arábigo. Si se aplica la notación posicional al sistema de numeración decimal entonces el dígito número n tiene el valor: (10n)* A. Este valor es positivo y es mayor o igual que uno si el dígito se localiza a la izquierda del punto decimal y depende del dígito A, en cambio el valor es menor que uno si el dígito se localiza a la derecha del punto decimal. Por ejemplo, el número 3489.125 expresado en la notación posicional es:

Posiciones a la derecha
Posiciones a la izquierda
Primero 9 * (100) = 9
primero 1*(10-1) = 0.1
Segundo 8 * (101) = 80
segundo 2*(10-2) = 0.02
Tercero 4 * (102) = 400
tercero 5*(10-3) = 0.005
Cuarto 3 * (103) = 3000

Por lo tanto el valor del número es:

= 5*(10-3) + 2*(10-2) + 1*(10-1) + 9*(100) + 8*(101) + 4*(102) + 3*(103)
= 0.005 + 0.02 + 0.1 + 9 + 80 + 400 + 3000
= 3489.125

Notación Posicional del Sistema

(10-6) = 0.000001

(10-5) = 0.00001
(10-4) = 0.0001
(10-3) = 0.001
(10-2) = 0.01
(10-1) = 0.1
(100) = 1
(101) = 10
(102) = 100
(103) = 1000
(104) = 10000
(105) = 100000
(106) = 10000000
El Sistema Numérico Binario

El sistema de numeración más simple que usa la notación posicional es el sistema de numeración binario. Este sistema, como su nombre lo indica, usa solamente dos dígitos (0,1).

Por su simplicidad y por poseer únicamente dos dígitos diferentes, el sistema de numeración binario se usa en computación para el manejo de datos e información. Normalmente al dígito cero se le asocia con cero voltios, apagado, desenergizado, inhibido (de la computadora) y el dígito 1 se asocia con +5, +12 volts, encendido, energizado (de la computadora) con el cual se forma la lógica positiva. Si la asociación es inversa, o sea el número cero se asocia con +5 volts o encendido y al número 1 se asocia con cero volts o apagado, entonces se genera la lógica negativa.

A la representación de un dígito binario se le llama bit (de la contracción binary digit) y al conjunto de 8 bits se le llama byte, así por ejemplo: 110 contiene 3 bits, 1001 contiene 4 y 1 contiene 1 bit. Como el sistema binario usa la notación posicional entonces el valor de cada dígito depende de la posición que tiene en el número, así por ejemplo el número 110101b es:

1*(20) + 0*(21) + 1*(22) + 0*(23) + 1*(24) + 1*(25) = 1 + 4 + 16 + 32 = 53d

La computadora está diseñada sobre la base de numeración binaria (base 2). Por eso este caso particular merece mención aparte. Siguiendo las reglas generales para cualquier base expuestas antes, tendremos que:

Por ejemplo,11012 (en base 2) quiere decir: 1*(23) + 1*(22) + 0*(21) + 1*(20) = 8 + 4 + 0 + 1 = 1310

El Sistema Numérico Octal

El sistema de numeración octal es también muy usado en la computación por tener una base que es potencia exacta de 2 o de la numeración binaria. Esta característica hace que la conversión a binario o viceversa sea bastante simple. El sistema octal usa 8 dígitos (0,1,2,3,4,5,6,7) y tienen el mismo valor que en el sistema de numeración decimal. Como el sistema de numeración octal usa la notación posicional entonces para el número 3452.328 tenemos:

2*(80) + 5*(81) + 4*(82) + 3*(83) + 3*(8-1) + 2*(8-2)

= 2 + 40 + 4*64 + 64 + 3*512 + 3*0.125 + 2*0.015625

= 2 + 40 + 256 + 1536 + 0.375 + 0.03125

= 1834 + 0.40625 entonces, 3452.328= 1834.4062510

El Sistema Numérico Hexadecimal

Un gran problema con el sistema binario es la verbosidad. Para representar el valor 20210 se requieren ocho dígitos binarios, la versión decimal sólo requiere de tres dígitos y por lo tanto los números se representan en forma mucho más compacta con respecto al sistema numérico binario. Desafortunadamente las computadoras trabajan en sistema binario y aunque es posible hacer la conversión entre decimal y binario, ya vimos que no es precisamente una tarea cómoda. El sistema de numeración hexadecimal, o sea de base 16, resuelve este problema (es común abreviar hexadecimal como hex aunque hex significa base seis y no base dieciseis). El sistema hexadecimal es compacto y nos proporciona un mecanismo sencillo de conversión hacia el formato binario, debido a ésto, la mayoría del equipo de cómputo actual utiliza el sistema numérico hexadecimal. Como la base del sistema hexadecimal es 16, cada dígito a la izquierda del punto hexadecimal representa tantas veces un valor sucesivo potencia de 16, por ejemplo, el número 123416 es igual a:

1*163 + 2*162 + 3*161 + 4*160 lo que da como resultado: 4096 + 512 + 48 + 4 = 466010

Cada dígito hexadecimal puede representar uno de dieciseis valores entre 0 y 1510. Como sólo tenemos diez dígitos decimales, necesitamos inventar seis dígitos adicionales para representar los valores entre 1010 y 1510. En lugar de crear nuevos simbolos para estos dígitos, utilizamos las letras A a la F. La conversión entre hexadecimal y binario es sencilla, considere la siguiente tabla:

Binario
Hexadecimal
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
A
1011
B
1100
C
1101
D
1110
E
1111
F

Esta tabla contiene toda la información necesaria para convertir de binario a hexadecimal y visceversa. Para convertir un número hexadecimal en binario, simplemente sustituya los correspondientes cuatro bits para cada dígito hexadecimal, por ejemplo, para convertir 0ABCDh en un valor binario:

0
A
B
C
D
<- Hexadecimal
0000
1010
1011
1100
1101
<- Binario

Por comodidad, todos los valores numéricos los empezaremos con un dígito decimal; los valores hexadecimales terminan con la letra h y los valores binarios terminan con la letra b. La conversión de formato binario a hexadecimal es casi igual de fácil, en primer lugar necesitamos asegurar que la cantidad de dígitos en el valor binario es múltiplo de 4, en caso contrario agregaremos ceros a la izquierda del valor, por ejemplo, el número binario 1011001010:

2
C
A
<- Hexadecimal
0010
1100
1010
<- Binario
  1. La primera etapa es agregarle dos ceros a la izquierda para que contenga doce ceros: 001011001010.
  2. La siguiente etapa es separar el valor binario en grupos de cuatro bits, así: 0010 1100 1010.
  3. Finalmente buscamos en la tabla de arriba los correspondientes valores hexadecimales dando como resultado, 2CA, y siguiendo la convención establecida: 02CAh.
Cambios de Base de Numeración

Existe un procedimiento general para cambiar una base cualquiera a otra cualquiera:
Para pasar de una base cualquiera a base 10, hemos visto que basta con realizar la suma de los productos de cada dígito por su valor de posición. Los valores de posición se obtienen como potencias sucesivas de la base, de derecha a izquierda, empezando por el exponente cero. Cada resultado obtenido se suma, y el resultado global es el número en base 10.

Para pasar de base 10 a otra base:

  1. En vez de multiplicar, dividimos el número a convertir entre la nueva base.
  2. El cociente se vuelve a dividir por la base, y así sucesivamente hasta que el cociente sea inferior a la base.
  3. El último cociente y los restos (en orden inverso) indican los dígitos en la nueva base.

El sistema binario trabaja de forma similar al sistema decimal con dos diferencias, en el sistema binario sólo está permitido el uso de los dígitos 0 y 1 (en lugar de 0-9) y en el sistema binario se utilizan potencias de 2 en lugar de potencias de 10. De aquí tenemos que es muy fácil convertir un número binario a decimal, por cada 1 en la cadena binaria, sume 2n donde n es la posición del dígito binario a partir del punto decimal contando a partir de cero. Por ejemplo, el valor binario 11001010 representa:

1*(27) + 1*(26) + 0*(25) + 0*(24) + 1*(23) + 0*(22) + 1*(21) + 0*(20) = 128 + 64 + 8 + 2 = 20210

Para convertir un número decimal en binario es un poco más difícil. Se requiere encontrar aquellas potencias de 2 las cuales, sumadas, producen el resultado decimal, una forma conveniente es trabajar en reversa por ejemplo, para convertir el número 1359 a binario:

Inicio


Interpretacion de datos

Formatos Binarios

En un sentido estricto, cada número binario contiene una cantidad infinita de dígitos, también llamados bits que es una abreviatura de binary digits, por ejemplo, podemos representar el número siete de las siguientes formas:

111
00000111
000000000000111

Por conveniencia ignoraremos cualquier cantidad de ceros a la izquierda, sin embargo, como las instrucciones compatibles con los procesadores Intel 80x86 trabajan con grupos de ocho bits a veces es más fácil extender la cantidad de ceros a la izquierda en un múltiplo de cuatro u ocho bits, por ejemplo, el número siete podemos representarlo así: 01112 o 000001112. También es conveniente separar en grupos de cuatro dígitos los números binarios grandes, por ejemplo, el valor binario 1010111110110010 puede ser escrito así 1010 1111 1011 0010. Además, en una cadena binaria asignaremos al dígito de la extrema derecha como el bit de posición cero y cada bit subsecuente se le asignará el siguiente número sucesivo, de ésta manera un valor binario de ocho bits utiliza los bits cero al siete: X7 X6 X5 X4 X3 X2 X1 X0 Al bit cero se le conoce como el bit de bajo orden en tanto que al bit de la extrema izquierda diferente de cero se le llama bit de alto orden.

Suma, Resta, Multiplicación y División

Dos números binarios se pueden sumar siguiendo este esquema: 0+0=0, 0+1=1, 1+1=10 . Ejemplos:

Suma
Resta
Multiplicación
10110 +
01101
------
100011

1011010 -
 110101
________
100101

101
* 1001
______
      101
    000
  000
 101
_______
 101101

Las operaciones aritméticas con números en base 2 son muy sencillas. Las reglas básicas son: 1 + 1 = 10 y 1 × 1 = 1. El cero cumple las mismas propiedades que en el sistema decimal: 1 × 0 = 0 y 1 + 0 = 1. La adición, sustracción y multiplicación se realizan de manera similar a las del sistema decimal. Reglas de la divisiíon binaria: 0/0 no permitida, 1/0 no permitida,0/1=0, 1/1=1.

Medidas de almacenamiento de la información

Byte: unidad de información que consta de 8 bits; en procesamiento informatico y almacenamiento, el equivalente a un único cáracter, como puede ser una letra, un número o un signo de puntuación.

En informática, cada letra, número o signo de puntuación ocupa un byte (8 bits). Por ejemplo, cuando se dice que un archivo de texto ocupa 5.000 bytes estamos afirmando que éste equivale a 5.000 letras o caracteres. Ya que el byte es una unidad de información muy pequeña, se suelen utilizar sus múltiplos: kilobyte (Kb), megabyte (MB), gigabyte (GB)... Como en informática se utilizan potencias de 2 en vez de potencias de 10, se da la circunstancia de que cada uno de estos múltiplos no es 1000 veces mayor que el anterior, sino 1024 (2 exponente a la 10 = 1024). Por lo que 1 GB = 1024 MB = 1048576 Kb = más de 1073 millones de bytes.

Inicio


El modelo de la computadora para el programador.

Los esquemas y los modelos son una herramienta muy importante para el programador. Nos permiten describir las relaciones y componentes de un todo. Además nos ayudan a entender, explicar, analizar y desarrollar nuevas cosas.

La siguiente figura es un modelo para la descripción de la organización de la memoria en una computadora y almacenamiento de información en ella.

Modelo memoria

El modelo describe 64 bloques de 8 bits ( 1 Byte). Tiene del lado derecho un número decimal y del lado izquierdo un número binario. Estos se utilizan para localizar de manera univoca cada byte de los 64. Para mostrar la forma como la computadora hace la localización de un bloque, se usa el número binario. Para mostrar la forma que las personas lo harian se usa el número decimal.

Debido a las limitaciones físicas y tecnológicas, entre otras cosas, se usan grupos de bytes para restringir el almacenamiento de datos. Esta limitación genera la necesidad de determinar cuando se hace referencia a un byte, cuando a 2, cuando a 4, etc.

El almacenamiento de información requiere de:

  1. Un consumo de almacenamiento. Número de bytes a utilizar.
  2. Un formato (sintaxis). Para indicar el uso de cada bit de(l) (los) byte(s).
  3. Una descripcion de su interpretación. De que manera obtengo un resultado final.

Como ejemplo el modelo muestra agrupaciones de 1, 2 y 4 Bytes a los cuales llama Caracter, Entero y Flotante respectivamente. Para el caso del Caracter:

  1. Consume 1 Byte.
  2. Su formato consiste en 1 bit para el signo y 7 para el valor.
  3. La descripción para su interpretación es:
    1. Si el bit de signo es 0, es positivo.
    2. De lo contrario es negativo.
      De los 7 bits se obtiene el valor absoluto del número.

Definición de programa.

Un programa es un conjunto de instrucciones para resolver una tarea especifica. Los sistemas de computo ejecutan estas instrucciones.

Las personas mismas ejecutan programas todos los dias (simple análogia). Ejemplo, imagine como serian las instrucciones para realizar una conversación telefónica:

Algortimo Para Hablar Por Teléfono

1. Levantar la bocina.

2. Si Existe tono entonces.

2.1 Marcar el número de telefono.

2.2 Si contestan entonces.

2.2.1 Conversar.

2.2.2 Colgar.

2.2.3 Ir al paso 3.

2.3 De lo contrario (Si no contestan).

2.3.1 Colgar.

2.3.2 Si Es la primera vez que marco entonces.

2.3.2.1 Ir al paso 1.

2.3.3 De lo contrario (No es la primera vez que marca).

2.3.3.1 Ir al paso 3.

3. Finalizar.

Ejercicios: Realizar algoritmos para las siguientes tareas.

Inicio


Estructura de un programa en C.

Un programa en C puede tener muchas variantes. Aun así se pueden identificar las siguientes secciones: Librerias, Constantes, Variables, Funciones y la funcion main. El siguiente formato es el sugerido: definir las librerias, definir las constantes, definir las variables, definir y especificar las funciones y por ultimo las escritura de la funcion main.

Librerias

Esta sección es utilizada para incluir funciones proporcionadas, en archivos denominadas librerias, por el paquete del compilador utilizado.

Para especificar la intencion de incluir una libreria se escribe la frase #include seguido del nombre de la libreria (archivo) entre los simbolos menor que (<) y mayor que (>). Ejemplo #include <stdio.h>.

Constantes

Esta sección es utilizada para definir las constantes que el programa utilizara. Vease Constantes.

Variables
Esta seccón es utilizada para definir las variables globales a utilizar por el programa (variables globales). Vease variables.
Funciones

Esta sección es utilizada para definir y especificar el cuerpo de las funciones utilizadas por el programa. Vease funciones.

La función main

La función main es la primer función que el lenguaje C localiza para iniciar la ejecucion del programa. Dado que el resto de las funciones seran utilizadas por ella o por otras y el lenguaje C no permite usar una función que no este definida antes, la función main debe ser la última.

Ejercicio Identificar las secciones dentro de un programa completo escrito en lenguaje C.

Inicio


II. Operadores, tipos y expresiones.

Constantes.

Una constante de C es generalmente la versión escrita de un número. Por ejemplo 1, 0, 5.73, 12.5e9. Podemos especificar nuestras constantes en octal o hexadecimal, o forzarlas para ser tratados como números enteros largos.

Las constantes de carácter son justamente el carácter entre apóstrofes; 'a', 'b', 'c'. Algunos caracteres no pueden ser representados de esta manera, así que utilizamos una secuencia de 2 caracteres (secuencia de escape).

Secuencia
Caracter equivalente
'\n'
Nueva línea
'\t'
Tabulación
'\\'
Barra invertida
'\''
Comilla simple
'\0'
Carácter nulo (Usado para terminar una cadena de caracteres automaticamente)
'\a'
Alarma (bocina de la pc)
'\b'
Backspace
'\f'
Alimentación de hoja
'\r'
Retorno de carro
'\v'
Tabulador vertical
'\"'
Comillas dobles
'\xoo'
Número hexadecimal
'\ooo'
Número octal

Además, un patron de bits se puede especificar usando su equivalente octal.

'\044' produce el patron de bits 00100100.

Las constantes de carácter se utilizan raramente, puesto que las constantes de cadena de caracteres son más convenientes. Una constante de cadena de caracteres es rodeada por comillas dobles ej. "Brian y Dennis". La cadena se almacena realmente como un arreglo de caracteres. El carácter nulo '\0' se coloca automáticamente en el extremo de tal secuencia para actuar como un símbolo de fín de cadena.

Un carácter es un tipo de dato diferente una cadena de un caracter.

Nombres de variables.

Cada variable tiene un nombre y un valor. El nombre identifica la variable, el valor del dato almacenado. Existe una limitación para estos nombres. Cada nombre de variable en C debe comenzar con una letra, el resto del nombre puede consistir en letras, números y caracteres de la raya. Para C las mayúsculas y minúsculas son diferentes. Finalmente, no se pueden utilizar las palabras claves (reservadas) de C como main, while, switch, etc para nombres variables.

Palabras reservadas del lenguaje C

Ejemplos de nombres variables legales son:

Generalmente se evita el uso de mayúsculas en nombres variables. Éstas se utilizan para los nombres de constantes. Algunas viejas versiones de C utilizan solamente los primeros 8 caracteres de un nombre variable. La mayoría modernos don't aplican este límite sin embargo.

Nota: Las reglas que gobiernan nombres variables también se aplican a los nombres de funciones.

Inicio


Tipos de datos y tamaños.

Tipo de dato

Tamaño
Rango
unsigned char
8
0 a 255
char
8
-128 a 127
enum
16
-32,768 a 32,767
unsigned int
16
0 a 65,535
short int
16
-32,768 a 32,767
int
16
-32,768 a 32,767
unsigned long
32
0 a 4,294,967,295
long
32
-2,147,483,648 a 2,147,483,647
float
32
3.4 x 10-38 a 3.4 x 10+38
double
64
1.7 x 10-308 a 1.7 x 10+308
long double
80
3.4 x 10-4932 a 1.1 x 10+4932

Inicio


Declaraciones.

La declaración de variables sigue la sintaxis:

tipo_de_dato nombre_variable[= valor_inical, nombre_variable2[= valor_inicial],...];

En C, una variable debe ser declarada antes de que pueda ser utilizada. Las variables se pueden declarar en el comienzo de cualquier bloque del código, pero la mayoría se encuentran en el comienzo de cada función. Se crean cuando se llama la función y se destruyen cuando termina su ejecución. Una declaración comienza con el tipo, seguido por el nombre de unas o más variables. Por ejemplo:

int alta, baja, resultados[20];

Los declaraciones se pueden separar, permitiendo espacio para un comentario explicativo. Las variables se pueden también inicializar cuando se declaran, esto es, agregando un igual y el valor requerido después del declaración.

int alta= 250; /* Maxima Temperatura */
int baja= -40; /* Minima Temperatura */
int resultados[20]; /* Serie de temperaturas leidas*/

Las constantes se pueden declarar definiendo un identificador equivalente o alias con #define. Ejemplo:

#define PI 3.141516
#define MAX_LONGITUD 50
#define ALARMA '\a'
#define NUEVA_LINEA '\n'

Tambien utilizando la frase const en la declaración de una variable. Ejemplo:

const double e = 2.71828182845905;

const char msg[] = "precaución: ";

Ejercicios Identificar errores en la declaración de variables y contantes y uso de tipos de datos en un programa escrito en Lenguaje C.
Inicio

Operadores.

Operadores Aritméticos *
Prioridad
Símbolo
Tipo
Operador
Ejemplo
Significado
Nivel 1
+
Unario
Positivo
+5
Cinco positivo
-
Unario
Negativo
-5
Cinco negativo
++
Unario
Incremento
a++
Incrementar a en 1
--
Unario
Decremento
a--
Decrementar a en 1
Nivel 2
*
Binario
Multiplicación
a * b
Multiplicar a con b.
/
Binario
División
a / b
Dividir a sobre b.
%
Binario
Modulo
a % b
Lo que sobra de la division de a sobre b
Nivel 3
+
Binario
Suma
a + b
Sumar a con b
-
Binario
Resta
a - b
Restar b de a

* Datos tomados de Borland Turbo C++ 3.0.

 

Operadores Relacionales *
Prioridad
Símbolo
Tipo
Operador
Ejemplo
Significado
Nivel 1
<
Binario
Menor que
A < B
Verdadero si A es menor que B
<=
Binario
Menor o igual que
A <= B
Verdadero si A es mayor o igual que B
>
Binario
Mayor que
A > B
Verdadero si A es mayor que B
>=
Binario
Mayor o igual que
A >= B
Verdadero si A es mayor o igual que B
Nivel 2
==
Binario
Igual que
A == B
Verdadero si A es igual que B
!=
Binario
Diferente de
A != B
Verdadedi si A es diferente de B

* Datos tomados de Borland Turbo C++ 3.0.

 

Operadores Lógicos *
Nivel
Símbolo
Tipo
Operador
Ejemplo
Significado
Nivel 1
!
Unario
Negación
!A
Verdadero si A es falso o falso si A es verdadero
Nivel 2
&&
Binario
And
A && B
Verdadero si A y B son verdaderos (los dos tiene que ser verdad).
Nivel 3
||
Binario
Or
A || B
Verdadero si A o B son verdaderos (al menos uno es verdad).

* Datos tomados de Borland Turbo C++ 3.0.

 

Inicio


Operador de asignación y expresiones.

Operadores de Asignación *
Prioridad
Símbolo
Tipo
Operador
Ejemplo
Significado
Nivel 1
=
Binario
Asignación simple
x = y
El valor de y asignaselo a x
*=
Binario
Multiplicar y asignar
x *= y
Asignale a x la multiplicacion de x por y
/=
Binario
Dividir y asignar
x /= y
Asignale a x la división de x sobre y
%=
Binario
Modulo y asignar
x %= y
Asignale a x el modulo de x sobre y
Nivel 2
+=
Binario
Sumar y asignar
x += y
Asignale a x la suma de x con y
-=
Binario
Restar y asignar
x -= y
Asignale a x la resta de y a x

* Datos tomados de Borland Turbo C++ 3.0.

Inicio


Precedencia y orden de evaluación.

Precedencia de los Operadores *
Prioridad
Símbolo
Tipo
Operador
Ejemplo
Significado
Nivel 1
!
Unario
Negación
!A
Verdadero si A es falso o falso si A es verdadero
+
Unario
Negativo
+5
Cinco positivo
-
Unario
Positivo
-5
Cinco negativo
++
Unario
Incremento
a++
Incrementar a en 1
--
Unario
Decremento
a--
Decrementar a en 1
Nivel 2
*
Binario
Multiplicación
a * b
Multiplicar a con b.
/
Binario
División
a / b
Dividir a sobre b.
%
Binario
Modulo
a % b
Lo que sobra de la division de a sobre b
Nivel 3
+
Binario
Suma
a + b
Sumar a con b
-
Binario
Resta
a - b
Restar b de a
Nivel 4
<
Binario
Menor que
A < B
Verdadero si A es menor que B
<=
Binario
Menor o igual que
A <= B
Verdadero si A es mayor o igual que B
>
Binario
Mayor que
A > B
Verdadero si A es mayor que B
>=
Binario
Mayor o igual que
A >= B
Verdadero si A es mayor o igual que B
Nivel 5
==
Binario
Igual que
A == B
Verdadero si A es igual que B
!=
Binario
Diferente de
A != B
Verdadedi si A es diferente de B
Nivel 6
&&
Binario
And
A && B
Verdadero si A y B son verdaderos (los dos tiene que ser verdad).
||
Binario
Or
A || B
Verdadero si A o B son verdaderos (al menos uno es verdad).
Nivel 7
=
Binario
Asignación simple
x = y
El valor de y asignaselo a x
*=
Binario
Multiplicar y asignar
x *= y
Asignale a x la multiplicacion de x por y
/=
Binario
Dividir y asignar
x /= y
Asignale a x la división de x sobre y
%=
Binario
Modulo y asignar
x %= y
Asignale a x el modulo de x sobre y
+=
Binario
Sumar y asignar
x += y
Asignale a x la suma de x con y
-=
Binario
Restar y asignar
x -= y
Asignale a x la resta de y a x

* Datos tomados de Borland Turbo C++ 3.0.

Sentencias de entrada y salida

int printf ( const char *format [, argument, ...]);

La función printf hace lo siguiente:

  • Acepta una serie de argumentos.
  • Aplica a cada argumento un especificador de formato contenido en la cadena de format.
  • Da salida a los datos formateados a la salida estandard.

Esta funcion aplica el primer especificador de formato al primer argumento, el segundo especificador al segundo argumento, el tercero al tercero, etc., hasta al final del formato.

Nota: Deben existir los suficientes argumentos para cada especificador de formato.

Nota: El exceso de argumentos ( mas de los requeridos por los especificadores de formato) son ignaroados.

Especificadores de Formato [const char *format]

Sigue la sintaxis:

% [flags] [width] [.prec] type_char

Cada especificador de formato inicia con el caracter de porcentaje (%).

El % va seguido de:

Componente
Significado
[flags]

(Opcional) caracteres de banderas.

Justificacion de la salida, signo en los numeros, punto decimal, ceros a la izquierada decimal, ceros de relleno, octal y hex prefijos.

[width]

(Opcional) Especificador del ancho.

El minimo numero de caracteres a imprimir, rellenando con ceros o espacios en blanco.

[.prec]

(Opcional) Especificador de precision.

Numero maximo de caracteres a imprimir; para enteros, minimo numero de digitos a imprimir.

type_char
(Requerido) Caracter para el tipo de conversion.

Caracteres de banderas [flags]

Especifican la justificacion de la salida, signo numerico, punto decimal, ceros a de relleno y prefijos octal y hexadecimal.

Los caracteres de baderas pueden aparecer en cualquier orden.

Bandera
Significado
-

Justifica a la izquierda el resultado, imprime espacios en al derecha.
Si se omite, el resultado se justifica a la derecha, imprime espacios en la izquierda.

+

Muestra el resultado con signo. (+) valores positivos o (-) valores negativos.

blanco

Si el valor es no negativo, la salida inicia con espacios sin un (+); los valores negativos inician con (-).

0
Imprime ceros de relleno.

El mas (+) tiene precedencia sobre blanco( ) en el caso que ambos sean especificados.

Especificadores de ancho [width]

Los especificadores ancho colocan el ancho minimo para la salida de un valor. value.

El ancho es especificado en una de la siguientes formas:

  • Directamente, a traves de una cadena de digitos.
  • Indirectamente, a traves de un asteristico.

Si usa un asterisco, el siguiente argumento en la llamada ( el cual debera ser un entero) especificara el ancho minimo para la salida.

Si el resultado de la conversion es mas ancho que el especificador, el campo se expande para contener la conversion.

Especificar de Precision [.prec]

Coloca el maximo numero de caracteres ( o minimo numero de digitis enteros) se van a imprimir.

Un especificador de precision debe iniciar con el caracter punto (.) para separarlo de cualquier especificador de ancho.

Asi, como [width], precision es especificado en una de las dos formas:

  • Directamente, a traves de una cadena de digitos.
  • Indirectamente, a traves de un asterisco (*).

Si usa un asterisco, el siguiente argumento en la llamada ( el cual debera ser un entero) especificara el ancho minimo para la salida.

[.prec]
Significado
(none)

La precision es por omision:
= 1 para los tipos d, i, o, u, x, X.
= 6 para los tipos e, E, f.
= Todos los digitos significativos para los tipos g, G.
= Imprime hasta el primer caracter null en los tipos s.
= No tiene efecto en los tipos c.

.0

Para los tipos d, i, o, u, x, la precision es colocada por omision; para los tipos e, E, f, no se imprime el punto decimal.

.n

n caracteres o n lugares decimal son impresos. Si el valor de salida tiene mas de n caracteres la salida podria ser truncada o redondeada. (Si esto
sucede depende del tipo caracter).

*
En la lista de argumentos la precision es indicada la precision, este debera seguir despues del argumento que esta siendo formateado.

[.prec] afecta la conversion de la siguiente manera:

Caracter del tipo
Efecto de [.prec] (.n) sobre la conversión
d
o
u
x
X

Especifica que al menos n digitos son impresos.
Si un argumento de entrada tiene menos que n digitos,
el valor de salida será rellenada con espacios o ceros.
Si un argumento de entrada tiene más de n digitos, la salida no es truncada.

e
E
f

Especifica que n caracteress son impresos despues del punto decimal, y el ultimo digito es redondeado.

g
G

Especifica que los n digitos mas significativos son impresos.

c
No tiene efecto sobre la salida.
s
Especifica que no mas de n caracteres son impresos.

Caracteres para el tipo de conversión (type_char)

Caracter del tipo
Salida esperada
Formato de salida

Numéricos

d
Entero

Entero decimal con signo.

i
Entero

Entero decimal con signo.

o
Entero
Entero octal sin signo.
u
Entero
Entero decimal sin signo..
x
Entero
Entero hexadecimal sin signo (con a, b, c, d, e, f)
X
Entero
Entero hexadecimal sin signo (con A, B, C, D, E, F)
f
Flotante
Valor con signo de la forma [-]dddd.dddd.
e
Flotante
Valor con signo de la forma [-]d.dddd or e[+/-]ddd
g
Flotante
Valor con signo de la forma e o f, se basa en el valor y precision. Ceros de relleno y punto decimal son impresos si es necesario.
E
Flotante
Igual que e; con E para exponente.
G
Flotante
Igual que g; con E para exponente si e format es usado.
Caracteres
c
Caracter
Un solo caracter.
s
Ptr a caracter
Imprime los caracteres hasta el caracter nulo o hasta la precision indicada.
%
None
Imprime el caracter %.

Los numero de punto flotante infinitos son impresos como +INF y -INF.

int scanf ( const char *format [, address, ...])

La funcion scanf:

  • Lee una serie de campos de entrada caracter por caracter.
  • Da formato a cada campo de acuerdo con su especificador de formato indicada en la cadena de format, *format.
  • Almacena la entrada formateada en la direccion indicada como argumento.
Argumento
Significado
address
Apuntador a una lista de argumentos.
format
Cadena de formato.

Debe existir un especificador de formato y dirección para cada campo.

Espeficicador de Formato [format]

Las cadenas de formato tiene la siguiente forma:

% [width] type_char

Cada especificador de formato inicia con el caracter de porcentaje (%).

Cada % va seguido de:

Componente
Significado
[width]
(Opcional) especificador de tamaño.
Inidica el numero maximo de caracteres a leer; no todos los caracteres seran leido si la funcion encuentra espacios en blanco o caracteres imposibles de convertir.
type_char
(Requerido) Caracter de tipo.

Caracter de Tipo [type_char]

Caracter del tipo
Entrada esperada
Tipo de argumento

Numéricos

d
Entero decimal

Pointer to int (int *arg).

D
Entero decimal
Pointer to long (long *arg)
e, E
Punto flotante Pointer to float (float *arg)
f
Punto flotante Pointer to float (float *arg)
g, G
Punto flotante Pointer to float (float *arg)
o
Entero octal Pointer to int (int *arg)
O
Entero octal Pointer to long (long *arg)
i
Entero decimal, octal o
hexadecimal
Pointer to int (int *arg)
I
Entero decimal, octal o hexadecimal Pointer to long (long *arg)
u
Entero decimal sin signo Pointer to unsigned int(unsigned int *arg)
U
Entero decimal sin signo Pointer to unsigned long (unsigned long *arg)
x
Entero hexadecimal Pointer to int (int *arg)
X
Entero hexadecimal Pointer to long (long *arg)
Caracteres
c
Cáracter Apuntador a char (char *arg) si un campo tiene especificado el ancho W (como %5c) necesita un arreglo de W caracteres (char arg[W]).
s
Cadena de caracteres Apuntador a arreglo de carcateres (char arg[])
%
Cáracter No se hace conversion; el % es almacenado

Ejercicios Desarrollo de programas.

Ejercicios ¿Qué hacen los programas?

Inicio


III. Control de flujo.

Sentencias y bloques.

Una expresion como x = 0 o i++ o printf(...) es una sentencia cuando es seguida de un punto y coma (;), como en:

x = 0;
i++;
printf(...);

En C, el punto y coma es un simbolo que indica la terminacion de una sentencia.

Las llaves { y } son usadas para agrupar declaraciones y sentencias como una sentencia compuesta o bloque. Esto es , son sintacticamente equivalentes a una sola sentencia. Las llaves que encierran las sentencias de una función (vease funciones) son un ejemplo obvio de esto; llaves seguidas de las sentencias if, else, while o for son otros ejemplos.

Ejercicio. Identifique los bloques y sentencias.

Inicio


If-Else.

La sentencia if-else es utilizada para expresar decisiones. La sintaxis formal es:

if (expresión)

    Sentencias1;

[ else

    Sentencias2; ]

Donde la parte else es opcional (los corchetes. La expresion es evaluada; si esta toma un valor verdadera (si de la expresion se obtiene un valor diferente de cero), las Sentencias1 son ejecutadas. Si esta es falso (la expresión es cero) y si existe una parte else, las Sentencia2 son ejecutadas.

Ya que un if simplemente prueba un valor númerico de una expresión, ciertas abreviaciones son posibles. La mas obvia escritura es:

if (expresión)

En lugar de:

if (expresión != 0)

En algunas ocasiones esto es natural y claro; otras ocasiones puede ser dificil de apreciar.

Debido a que la parte else es opcional, existe una ambiguedad cuando el else es omitido de una secuencia de if. Esto se resuelve asociando el else con if usando bloques. Ejemplo:

if (n>0)
    if (a >b)
        z = a;
    else
        z = b;

El else va junto con el segundo if, tal como lo muetra la identacion. Si esto no es lo que deseamos, se deben usar las llaves para forzar la asociacion. Ejemplo:

if (n>0)
{
    if (a >b)
        z = a;
}
else
    z = b;

Ejercicio. Desarrollo de programas.

Ejercicio. ¿Cuáles son los errores en los programas?

Inicio


else If().

La construcción:

if (expresión1)
    Sentencias1
else if (expresión2)
    Sentencias2
else if (expresión3)
    Sentencias3
else if (expresión4)
    Sentencias4
else
    Sentencias5

Ocurre con tanta frecuencia. Es la forma mas general de escribir multipledecisiones. Las expresiones son evaluadas en ese orden; si cualquiera de las espresiones es cierta (se obtiene un valor diferente de cero), las sentencias asociadas con esta son ejecutadas y esta termina con la cadena entera.

El ultimo else maneja la situación "Ninguna de las anteriores" o la omisión en caso de que ninguna de las condiciones sea satisfecha. En ocasiones no existira una accion "por omisión"; en este caso la parte

else
    Sentencias5

Se omite.

Ejercicios. Desarrollo de programas.

Ejercicios. ¿Cuáles son los errores en los programas?

Inicio


Switch.

La sentencia switch es una sentencia para la multiple decisión. Si una expresion puede igualar con valor de un conjunto de constantes númericas enteras, el swith es la sentencia adecuada a utilizar. Su sintaxis es la siguiente:

swicth (expresión)
{
    case CONSTANTE1:
        Sentencias

    case CONSTANTE2:
        Sentencias

    case CONSTANTE3:
        Sentencias

    [ default:
        Sentencias
    break;]
}

Cada case es etiquetada por una o mas constantes numericas de valores enteros. Si el valor de un case iguala la expresión, la ejecución inicia en este case. Todos los valores case deben ser diferentes. Las sentencias de la etiqueta default son ejecutadas si ningún valor de las etiquetas case iguala. La etiqueta default es opcional.

Para interrupir la ejecucion de sentencias y terminar la sentencia switch se utiliza la instrucción break (vease break y continue).

Ejemplo:

main()
{
    char tecla;
    printf("Presiona una tecla de una operador: ");
    scanf("&c", &tecla);
    switch (tecla)
    {
        case '+':
            printf("Suma");
        break;

        case '-':
            printf("Resta");
        break;

        case '*':
            printf("Multiplicación");
        break;

        case '-':
            printf("División");
        break;

        default:
            printf("Noes un operador valido");
        break;
    } /* fin del switch */
} /* Fin del main */

Ejercicios. Desarrollo de programas.

Ejercicios. ¿Cuáles son los errores en los programas?

Inicio


Arreglos.

En C la definicion de un arreglo sigue la sintaxis:

tipo_de_dato nombre_arreglo[num_elementos];

Ejemplos:

int numeros[10];

char nombre[25];

char linea[80];

char msg[75];

Un arreglo es una colección finita, homogenea y ordenada de elementos.

Finita porque todo arreglo tiene un limite; es decir debe determinarse cual sera el numero maximo de elementos que podra formar parte del arreglo.

Homogenea porque todos los elementos de un arreglo son del mismo tipo (todos enteros, todos booleanos, etc..., pero nunca una combinacion de distintos tipos).

Ordenanda porque se puede determinar cual es el primero, el segundo, ... y el último (n-esimo) elemento.

Un arreglo puede representarse graficamente como:

Arreglo

Modelo de un arreglo almacenado en memoria

En los arreglos se distinguen 2 partes: Componentes e indices.

Los componentes hacen referencia a los elementos que forman el arreglo. Es decir, los valores que se almacenan en cada una de la casillas.

Los indices especifican cuantos elementos tendra el arreglo y ademas de que modo podran accesarse esos componentes del arreglo en forma individual, es decir, distinguir entre los elementos del mismo.

Para accesar o modificar un elemento del arreglo se sigue la sintaxis:

nombre_arreglo[indice]

El indice puede ser una variable entera o una constante numérica.

Ejemplos:

numeros[0] /* Se accesa al primer elemento */

numeros[5] /* Se accesa al sexto elemento */

numeros[9] /* Se accesa al decimo elemento */

Ejercicios 12.0 Desarrollo de programas.

Inicio


While y For.

La sintaxis de la sentencia while es:

La expresión es evaluada. Si este es un número diferente de cero, las sentencias son ejecutadas y la expresión es reevaluada. Este ciclo continua hasta que la expresión llega a cero.

while (expresión)
    Sentencias

La sintaxis de la sentencia for es:

for (expr1; expr2; expr3)
    Sentencias

y es equivalente a:

expr1;
while (expr2)
{
    Sentencias
    expr3;
}

En un ciclo for las expresiones expr1 y expr3 comunmente son asignaciones y expr2 es una expresión relacional (condición). Ademas cualquiera de las 3 partes puede ser omitida pero las comas deben estar presentes.

La utilización de un ciclo while en lugar de un for se da por preferencias personales. Por ejemplo, en:

while ( (c = getchar()) == ' ' || c == '\n' || c == '\t')
    ; /* Se brinca los caracteres de espacios */

No existe inicialización o reinicialización, por esto el while es más natural.

El for es preferido cuando existe una simple inicializacion y un incremento. Asi un for es mas obvio en:

for ( i=0; i<n; i++)
    ...

Ejemplos:

#include <stdio.h>

main() /* cuenta los digitos, los espacios en blanco y otros */
{
    int c, i, nespacios, ndigitos[0], notros;

    nespacios = notros = 0;
    for ( i=0; i < 10; i++ )
        ndigitos[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':
                ndigitos[c-'0']++;
            break;

            case ' ': case '\n': case '\t':
                nespacios++;
            break;

            default:
                notros++;
            break;

        }
    }
    printf("Digitos: ");
    for ( i=0; i<10; i++)
        printf("%d=%d;", i, ndigitos[i]);

    printf("\nEspacios = %d", nespacios);
    printf("Otros = %d", notros);
}

Ejercicios. Desarrollo de programas.

Inicio


Do-While.

La sintaxis del ciclo do-while es:


do{
    Sentencias
} while(expr);

Las sentencias son ejecutadas despues la expr es evaluada. Si es resulta un valor diferente de cero, las sentencias son ejecutadas. Si es cero continua con la siguiente instrucción.

Ejemplo:

#include <stdio.h>
#include <string.h>

main() /* cuenta los digitos, los espacios en blanco y otros */
{
    int i, signo, n;
    char s[50]; JN

    printf("Dame un numero:");
    scanf("%d",&n);

    if ( (signo = n) < 0) /* Almacena el signo*/
        n = -n; /* Hace n positivo */

    i = 0;
    do { /* Genera los digitos en orden inverso */
        s[i++] = n % 10 + '0'; /* obtiene el siguiente digito*/
    }while ( (n /= 10) > 0); /* borra este digito */

    if sign < 0)
        s[i++]='-';

    s[i] = '\0';
    strrev(s);
}

Ejercicios 16.0 Desarrollo de programas.

Inicio


Break y continue.

En ocasiones es necesario terminar un ciclo antes de que se evalue la expresion condicional. La sentencia break se utiliza pra salir de un ciclo sin continuar con las restantes sentencias del cuerpo.

Ejemplo:

#include <stdio.h>

main() /* elimina los espacios en blanco de una cadena*/
{
    int n;
    char s[50];

    printf("Dame una cadena de caracteres");
    scanf("%s",s);

    for ( n = strlen(s) - 1; n >= 0; n--)
        if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
            break;

    s[n+1] = '\0';
    return n;
}

 

La sentencia continue esta relacionada con la sentencia break, pero en el sentido opuesto; este causa la siguiente iteración desde el punto donde esta localiza la sentencia en el cuerpo.

Ejemplo:

for (i=0; i<n; i++)
{
    if (a[i] < 0)  /* skip negative elements */
        continue;
    ...
}

Inicio



IV. Estructuras, funciones y unidades.

Estructuras.

Definición de una estructura.

Una estructura es una coleccion de una o mas variables, posiblemente de diferentes tipos y agrupados bajo un solo nombre.

Las estructuras ayudan a organizar datos complicados de datos, particularmente en programas largos, porque permiten a un grupo de variables relacionadas ser tratadas como una sola unidad.

La sintaxis para su declaracion es:

struct [Nombre_Estructura]
{
    tipo Nombre_campo_1[, ...];
    [tipo Nombre_campo_2[, ...];
    ...
    tipo Nombre_campo_n[, ...]];
} [Nombre_variable_1, Nombre_variable2, ...];

Ejemplo:

struct TPunto
{
    int x,y;
} p1, p2;

Define una estructura TPunto con los miembros o campos enteros x y y.

Declaración de variables.

Adicionalmente se pueden definir variables de una estructura despues de haberla definido, siguiendo la sintaxis:

struct Nombre_Estructura Nombre_variable_1[, Nombre_variable_2, ...];

Acceso a los miembros de una estructuras.

Para accesar a los miembros o campos se sigue la sintaxis:

Nombre_variable_1.Nombre_campo

Ejercicios 18.0 Desarrollo de programas.

Inicio


funciones.

Las funciones en C desempeñan el papel de las subrutinas o procedimientos en otros lenguajes, esto es, permiten agrupar una serie de operaciones de tal manera que se puedan utilizar más tarde sin tener que preocuparnos por cómo están implementadas, simplemente sabiendo lo que harán.

El uso de funciones es una práctica común y recomendable ya que permite modularizar nuestro código, simplificando así el desarrollo y la depuración del mismo. Para utilizar funciones en un programa es necesario declararlas previamente al igual que las variables (en este caso indicaremos los argumentos de entrada y su tipo, y el tipo del valor que devolverá) y definir las operaciones que contiene.

En C la declaración de una función tiene la siguiente estructura:

La definicion de una funcion tiene la forma:

return_type function_name([tipo_arg1 name_arg1[,tipo_arg2 name_arg2...])
{
    Sentencias
}

Funciones que no retornan valor.

Cuando necesitamos que las funciones no retornen valor se utilize un tipo de dato especial denominado void . Este tipo de dato es conocido como vacio ya porque el compilador no exige que se utilice la sentencia return en una funcion. Ejemplo:

void suma()
{
    int a=10, b = 30;

    printf("La suma es : %d", a + b);
}

Para llamar a la funcion (usarla) de este tipo sigue la forma:

nombre_funcion([par1, par2,...]);

Ejemplo:

void main()
{
    int r = suma();

    printf("La suma es : %d", r);
}

Funciones que retornan valor.

Las funciones que retornan valor usan los tipos de datos mostrados en la tabla. Es este caso el compilador exige, es caso de olvido, utilizar la sentencia return para especificar el dato a retornar por la funcion cuando sea utilizada. Ejemplo:

int mayor(int a, int b)
{
    if (a>b)
        return a;
    else
        return b;

}

Para llamar a la funcion (usarla) de este tipo sigue la forma:

nombre_variable = nombre_funcion([par1, par2,...]);

El tipo de dato con el cual fue definida la variable debe coincidir con el tipo de dato definido para la funcion.

Parámetros por valor.

Por omision los parametros son pasados por valor (excepto los arreglos), es decir, se realiza un copia de los argumentos antes de que los argumentos se pasen realmente a una funcion. Debido a que los parametros de una funcion reciben copias de los valores de los argumentos, estos argumentos se dice que se pasan por valor. Ejemplo:

#include <stdio.h>

void cambia(int x)
{
    x++;
}

void main()
{
    int valor = 20;
    cambia(valor);
    printf("El valor es: %d", valor);
}

El valor que se imprime es el 20.

Parámetros por referencia.

Esta forma de enviar los parametros se utiliza cuando se quiere cambiar el valor de la variable dentro de la funcion y regresarlo modificado, a la funcion o programa llamador.

Para indicar en una funcion los parametros por referencia se antepone el simbolo & en el nombre del parametro. Ejemplo:

#include <stdio.h>

void cambia(int &x)
{
    x++;
}

void main()
{
    int valor = 20;
    cambia(valor);
    printf("El valor es: %d", valor);
}

El valor que se imprimira es 21.

Ejercicios 19.0 Desarrollo de programas.

Ejercicios 20.0 ¿Cuál es el resultado de los programas?

Inicio


Librerias.

Inicio



V. Archivos.

Descriptor de archivo.

Inicio


Entrada y salida de bajo nivel.

Inicio


Entrada y salida de alto nivel.

Inicio


Revisión y entrega del proyecto.

Requerimientos para presentar el proyecto

  1. Presentacion gráfica.
  2. Exposicion de las partes del codigo.
  3. Manual de usuario.

Aspectos a calificar del proyecto

  1. Ortografía en los documentos. (10%)
  2. Originalidad, creatividad e inovación. (20%)
  3. Dominio de las técnicas. (60%).
  4. Planeación y organización. (10%)

Calendario de las revisiones

Fecha
% de avance
18/02/2005
30%
11/03/2005
60%
25/03/2005
80%
Pendiente
100%

Inicio


Bibliografía

Urls

  1. http://fismat.umich.mx/~elizalde/curso/node32.html
  2. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn01.htm

Libros

  1. The C Programming Language
    Brian W. Kernighan, Dennis M. Ritchie
    Prentice Hall Software Series
    Second Edition
    -----------------------------------------------
  2. C con Ejemplos
    Greg Perry
    Prentice Hall

Inicio


Fecha de última actualización: Enero 11, 2005.