1 - Introduccion A C
1 - Introduccion A C
1 - Introduccion A C
Fundamentos de Computación I
ORIGENES DEL C
En este caso las dos sentencias tras el if y entre las llaves se ejecutan juntas si x es
menor que 10.
Estas dos sentencias junto con las llaves representan un bloque de código.
Se trata de una unidad lógica: no se puede ejecutar una de las sentencias sin la otra.
Además, implementa directamente varias construcciones de bucles, tales como
while, do-while, for, y si bien también incluye el goto, éste no es la forma normal de
control.
Tiene la ventaja de usar compilador en lugar de intérprete, es más rápido.
El intérprete lee el código fuente de un programa línea a línea, realizando las
instrucciones específicas contenidas en esa línea, el código fuente debe estar presente
cada vez que se quiere ejecutar el programa. O sea, que cada vez que se ejecuta un
programa el código debe ser interpretado. (lentitud).
El compilador lee el programa entero y lo convierte a código objeto, que es una
traducción del código fuente del programa a una forma que puede ser ejecutada
directamente por la computadora. Una vez que el programa está compilado el código
fuente deja de tener sentido durante la ejecución. O sea, que una vez compilado lo único
que hay que hacer es ejecutarlo escribiendo su nombre (mayor rapidez).
En C las mayúsculas y las minúsculas son diferentes.
Todas las palabras claves de C, que son 43 (32 del standard ANSI y 11 de TURBO C),
están en minúscula, por lo tanto, else es palabra clave, mientras que ELSE o Else no lo
son.
Las 32 palabras claves del standard ANSI son:
Auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
Todos los programas en C consisten en una o más funciones estándares o creadas.
La única función que debe estar inevitablemente presente es la llamada main (), ya
que el programa comienza a ejecutarse con la llamada a esta función. Aunque
técnicamente main () no forma parte del lenguaje C (no es palabra clave), se la debe
tratar como si lo fuera. Usar main () como nombre de variable confundiría al
compilador.
En código C bien escrito main () contiene el esbozo de lo que el programa hace; este
esbozo estará compuesto por llamadas a funciones: programación top down).
FORMA DE UN PROGRAMA EN C
Funciones: contienen proposiciones que indican las operaciones de cálculo que se van a
realizar, normalmente se les puede dar cualquier nombre, excepto la función main (),
Ejemplo:
#include <stdio.h> Indica al compilador que debe incluir información acerca de la biblioteca
estándar de E/S (Standard InputOutput).
/* muestra la Cualquier carácter entre/* y */ es ignorado por el compilador y es tratado
suma de 2 números */ como un comentario.
int main () Define la función main (), que es la función principal del programa, está
seguida por un par de paréntesis vacíos, lo que significa que no hay
transferencia de argumentos. En otras funciones entre los paréntesis se
coloca la lista de argumentos que transfieren valores entre la función que
llama y la función llamada.
{ Las proposiciones de main () o de cualquier otra función van entre llaves {}
int a, b, c; En C se deben declarar todas las variables antes de su uso, al principio de
la función y antes de cualquier proposición ejecutable. Una declaración
está formada por un nombre de tipo y una lista de variables.
printf (“la suma es c = %d \n”, main llama a la función de biblioteca printf con e l argumento:
c); (8) (“la suma es c = %d\n”, c)
} \n representa el carácter nuevo línea y hace avanzar la impresión al
margen izquierdo de la siguiente línea,
printf no proporciona una nueva línea automáticamente (\n representa un
solo carácter).
Una secuencia de caracteres entre comillas dobles se llama cadena de
caracteres o constante de cadena.
CONSIDERACIONES AL ESCRIBIR UN PROGRAMA
• Utilizar comentarios
• Elegir nombres de variables con significado
• Utilizar líneas en blanco para separar las distintas secciones de la función
• Espacios en blanco entre los operadores
• Utilizar sangrado
• Mantener una línea con el posicionamiento de las llaves
• Tener en cuenta que x y X son dos caracteres distintos, que la mayor parte del
programa se escribe en minúscula de imprenta y se usa la mayúscula de imprenta para
escribir nombres de constantes
• Escribir una sentencia por línea
• C averigua dónde termina una sentencia y comienza la siguiente por medio de los
puntos y coma introducidos.
EL MODELO DE COMPILACIÓN DE C
CODIGO FUENTE
PREPROCESADOR
CODIGO ENSAMBLADOR
ENSAMBLADOR El ensamblador crea a partir del código fuente los archivos objeto
CODIGO EJECUTABLE
Etapas que cubre el compilador para obtener el código ejecutable.
EL PREPROCESADOR
El preprocesador acepta el código fuente como entrada y es responsable de:
• quitar los comentarios
• interpretar las directivas del preprocesador las cuales inician con #.
DIRECTIVAS DEL PREPROCESADOR
El preprocesamiento es el primer paso en la etapa de compilación de un programa.
El preprocesador tiene más o menos su propio lenguaje el cual puede ser una
herramienta muy poderosa para el programador.
Todas las directivas del preprocesador o comandos inician con un #.
Las ventajas que tiene usar el preprocesador son:
• los programas son más fáciles de desarrollar,
• son más fáciles de leer,
• son más fáciles de modificar
• y el código de C es más transportable entre diferentes arquitecturas de máquinas.
#define
La directiva #define se usa para definir constantes simbólicas o realizar sustitución de
macros. Su formato es el siguiente:
#define <nombre de macro> <nombre de reemplazo>
Por ejemplo:
#define FALSO 0
#define VERDADERO !FALSO
El preprocesador también permite configurar el lenguaje. Por ejemplo, se pueden
cambiar los delimitadores de bloque de código {...} por otros delimitadores inventados
por el programador como inicio
... fin haciendo:
#define inicio {
#define fin}
Por ejemplo:
#define MIN (a, b) (a < b)? a: b
main ()
{
int x=10, y=20;
printf ("EL mínimo es %d\n", MIN (x, y));
}
Cuando se compila este programa, el compilador sustituirá la expresión definida
por MIN (a, b), reemplazando (a, b) por x e y que son los operandos reales del
programa. Así después de que el compilador hace la sustitución, la sentencia
printf será ésta:
printf ("El mínimo es %d\n", (x < y)? x: y);
#include
El nombre del archivo fuente que se incluirá se debe encerrar entre comillas dobles
“…” o entre los signos menor que y mayor que < … >.
Por ejemplo:
#include <archivo>
#include "archivo"
Cuando se indica <archivo> el preprocesador busca el archivo especificado solo en el
directorio establecido para contener los archivos de inclusión.
Si se usa la forma "archivo" el preprocesador busca primero en el directorio actual, es
decir, donde el programa está siendo ejecutado.
Los archivos de inclusión usualmente contienen los prototipos de las funciones y las
declaraciones de los archivos cabecera (header files) y no tienen código de C
(algoritmos).
Librería
El lenguaje C provee de una gran cantidad de funciones ya codificadas para que el
programador las utilice directamente. Este conjunto de funciones recibe el nombre de
librería. La librería es en esencia un conjunto de módulos objeto que han sido
reunidos en un único archivo (con la extensión LIB). El enlazador extrae de este gran
depósito de código objeto aquellas funciones que
realmente han sido usadas por el programador en su código fuente. Las
declaraciones de estas funciones de
librería están disponibles en varios archivos de cabecera, provistos por el C. Por lo
tanto, para utilizar
funciones de librería, el programador sólo tiene que incluir el archivo de cabecera
correspondiente y dejar al enlazador la tarea de hallar el código de las funciones en
los archivos de librería.
NOMBRES DE IDENTIFICADORES
Se conocen como identificadores los nombres usados para referenciar las variables,
las funciones, las etiquetas y otros objetos definidos por el usuario.
Las reglas a tener en cuenta para los nombres de los identificadores son:
• Puede estar formado por letras mayúsculas, letras minúsculas, dígitos y el carácter
de subrayado ‘_’,
• El primer carácter no puede ser un dígito, y tampoco conviene que sea el carácter
de subrayado ‘_’, puesto que las rutinas de biblioteca con frecuencia usan tales
nombres. Por lo tanto, conviene que el primer carácter sea una letra.
• Su longitud puede variar entre 1 y 32 caracteres.
• Es conveniente elegir nombres que estén relacionados con el propósito de la
variable y que no sea probable confundirlos tipográficamente.
• No debe coincidir con ninguna palabra clave.
• No debe coincidir con el nombre de ninguna función escrita por el usuario o que se
encuentre en la biblioteca C.
• Se acostumbra usar minúsculas para nombres de variables y mayúsculas para
nombres de constantes simbólicas
Los siguientes son ejemplos de nombres de identificadores:
Correctos Incorrectos
cont 1cont
prueba_1 hola!
acum12 acum-12
NUM_3 NUM-3
N123 N*123
TIPOS DE DATOS
Los tipos de datos básicos pueden estar precedidos por modificadores que alteran el
significado del tipo base para que se ajuste más precisamente a cada necesidad.
Los modificadores de tipo que existen en C son:
short: reduce a la mitad la longitud de almacenamiento
long: duplica la longitud de almacenamiento
unsigned:número sin signo (siempre positivo)
signed:número con signo (positivo o negativo)
VARIABLES
:
{
func1() int t;
{ if (t > 0)
int x;
x = 10; {
. char s; /* esta existe únicamente en este bloque */ }
.
} /* aquí no se conoce a la variable s */
func2() }
{
int x;
x = 35;
·
La variable s se define dentro de un bloque de código,
·
fuera de él la variable s es desconocida. Este tipo de
}
variables se conocen como locales a bloque.
CONSTANTES NUMÉRICAS
• ARITMÉTICOS
Suma ................ +
Resta ................ –
Multiplicación ... *
División ............ /
Módulo ............. % (resto de la división entera- no puede aplicarse a operandos float
o double)
Incremento…… ++
Decremento…. --
INCREMENTO Y DECREMENTO
C contiene dos operadores muy útiles que no existen generalmente en otros lenguajes.
Son el incremento y el decremento, ++ y --.
++ ............. aumenta en 1 el valor del operando --
-- ............ disminuye en 1 el valor del operando
El formato de la expresión que resulta de aplicar el operador incremento o decremento
es:
Con éstos se pueden generar expresiones aritméticas cuyos operandos pueden ser
constantes, variables u otro tipo de expresiones.
• Cuando en una expresión se combinan distintos tipos de operadores, la
prioridad en la evaluación es:
1º ++ -- - (monario)
2º */ %
3º +-
Cuando en una expresión se combinan operadores de igual prioridad, la evaluación
es de izquierda a derecha. Los paréntesis alteran este orden de evaluación.
• RELACIONALES
• OPERADOR CONDICIONAL ( ?: )
• EL OPERADOR sizeof
Una expresión representa una unidad de datos simple, tal como un número o un
carácter.
La expresión puede consistir en una entidad simple, como una constante, una variable,
un elemento de un arreglo o una referencia a una función. También puede consistir en
alguna combinación de tales identidades interconectadas por uno o más operadores.
Por ejemplo:
a + b; x = y; c = a + b; x = = y
Una sentencia consiste en una expresión seguida de un punto y coma (;) y hace que la
computadora lleve a cabo alguna acción. La ejecución de la sentencia de expresión hace
que se evalúe la expresión. Algunos ejemplos de sentencias son:
a = 3; ++ i; c = a + b; suma += 10;
CONVERSIÓN DE TIPO DE DATOS
• a = 7 + 3.8
1º El resultado es 10.8
2º si a es int se almacena 10
si a es float se almacena 10.800000
si a es char se almacena el carácter “nueva línea”
• a = ‘A’ + 5.0
1º El resultado es 70.0
2º si a es int se almacena 70
si a es float se almacena 70.000000
si a es char se almacena el carácter F
a = ‘A’ + 5.9
1º El resultado es 70.9
2º si a es int se almacena 70
si a es float se almacena 70.900000
si a es char se almacena el carácter F
Nota: cuando una expresión aritmética que se asigna a una variable char da un
resultado mayor que 255 o menor que 0, el carácter que se almacena es el que
corresponde a los 8 bits menos significativos
• CONVERSIÓN FORZADA DE TIPO EXPLÍCITA O MOLDES (CAST )
Si algún operando de una expresión debe ser usado momentáneamente con otro tipo,
distinto al con el que fue declarado o más allá del que adquirió automáticamente de
acuerdo con las reglas anteriores, es posible provocar esa conversión. El operando
será afectado por el nuevo tipo de dato de la siguiente forma: