02 Ingresando A Lenguaje C
02 Ingresando A Lenguaje C
02 Ingresando A Lenguaje C
Palabras Librerías y
reservadas. funciones.
Identificadores.
if include
void else
for while
stdio.h
conio.h
math.h
Constantes Variables.
Funciones
char float int
TIPOS DE DATOS
TIPO RANGO Memoria
Requerida
Caracteres especiales
Limitados por su rango, aunque puede extenderse con los
modificadores de tipo, dependiendo del compilador
trabajarán con 2 o con 4 bytes.
{ Inicio de la función
Ejemplo:
#include <stdio.h>
char caracter;
float iva,total_pagar,descuento;
unsigned long pvc,tcd;
void main(){
…
//instrucciones;
...
}
Las variables locales por otro lado deben ser incluidas dentro
de las funciones y solo serán visibles para dicha función
//llamado a las librerías
//declaración de una función
{
Tipo_dato1 variable1, variable2, … , variable_N;
Tipo_dato2 variable3, variable4, … , variable_X;
}
Ejemplo:
#include <stdio.h>
void main(){
int numero,edad,cantidad;
float iva,total_pagar,descuento;
unsigned long pvc,tcd;
//instrucciones;
...
}
Finalmente las variables estáticas se declaran dentro de una
función y se establece la palabra reservada static para señalar que
son de tipo estático
//llamado a las librerías
//declaración de una función
{
static Tipo_dato1 variable1, variable2, … , variable_N;
static Tipo_dato2 variable3, variable4, … , variable_X;
}
Ejemplo:
#include <stdio.h>
void main(){
int numero,edad,cantidad;
static float iva;
float total_pagar,descuento;
unsigned long pvc,tcd;
//instrucciones;
...
}
El siguiente ejemplo muestra el comportamiento de las variables
locales estáticas, no hay que preocuparse ahora mucho del tema
de funciones sino en entender que el valor de una variable static
permanece a pesar de que la función que la contiene no esté
activa.
#include <stdio.h>
int main()
{
calculaValor();
calculaValor();
calculaValor();
return 0;
}
void calculaValor()
{
static int valor = 0;
printf("El valor calculado es %d",valor);
valor ++;
}
Son aquellos valores que, una vez compilado el programa, no pueden ser
cambiados.
Al definir las constantes, debemos tomar en cuenta las siguientes reglas de
conversión de tipos de datos:
1.- Una constante entera (sin parte decimal) es tomada como tal, a menos que
se la añadan las letras F ó L (mayúsculas ó minúsculas) ejemplos :
1 : tomada como entera (int)
12f : tomada como flotante (float)
456L : tomada como doble larga (long double)
2.- Una variable con parte decimal es tomada siempre como DOUBLE, salvo
que se la siga de la letra F ó L
2.0 : tomada como doble (double)
3.56F : tomada como flotante (float)
1.007L : tomada como flotante larga (long float)
3.- Si en cualquiera de los casos anteriores agregamos la letra U o u la
constante queda calificada como UNSIGNED:
86u : tomada como entera sin signo (unsigned int)
32.44632UL : tomada como doble larga sin signo (unsigned long double)
4.- Una variable numérica que comienza con "0" (cero) es tomada
como OCTAL así : 012 equivale a 10 unidades en numeración decimal
5.- Una variable numérica que comienza con "0x" ó "0X" (cero – equis) es
tomada como HEXADECIMAL así : 0x16 equivale a 22 unidades en numeración
decimal
La sintaxis para declarar constantes es:
//llamado a las librerías
#define constante1 valor1;
#define constante2 valor2;
…
//declaración de una función{ ... }
Ejemplo:
#include <stdio.h>
#define PI 3.141592 //constante double
#define OCTAL 017 //constante octal
#define FLOTANTE 14F //constante flotante
Void main(){
…
//instrucciones;
... }
Como pudimos notar en el ejemplo una regla no forzada (puede no seguirse) en
la declaración de constantes es especificar el nombre de las mismas
en mayúsculas con el objeto de no confundirlas con variables que pudieran
llevar incluso el mismo nombre.
Existen otras 2 formas de declarar constantes en C, mediante el uso de las
cláusulas enum y const.
Ejemplo:
#define CONSTANTE_DEFINE 5
Es equivalente a:
enum T_ENUM { CONSTANTE_ENUM = 5 };
const int CONSTANTE_CONST = 5;
La principal diferencia es que la cláusula #define especifica un valor que el
compilador entenderá como una sustitución de un valor por otro más que
una asignación por ejemplo en nuestro caso todas las veces que apareciera
CONSTANTE_DEFINE en nuestro programa el compilador lo interpretará como
un 5, es decir como si fuera un alias, en el caso de enum y const, estos
permiten no solo manejar la equivalencia sino un tipo de dato asociado, en el
caso de enum solamente enteros y const maneja todos los tipos de datos por
lo que es más recomendable manejar constantes con esta última opción
siempre que sea posible.
En lenguaje C no hay palabras reservadas para realizar las acciones
de Entrada/Salida, estas se hacen mediante el uso de las funciones
de la librería estándar (stdio.h).
Para utilizar las funciones de E/S debemos incluir en el programa el
archivo de cabecera de la librería correspondiente, ejemplo:
stdio.h, mediante la declaratoria:
#include <stdio.h>
Función printf()
La principal función de salida es printf(), la cual permite enviar
mensajes a pantalla donde podemos incluir cadenas de texto de
salida así como valores calculados al interior del programa
(variables) para conocer el resultado del mismo.
La forma correcta de escribir una instrucción o en este caso llamar a
una función en lenguaje C se denomina sintaxis, la cual establece
los lineamientos bajo los cuales debe construirse cada instrucción,
si una regla sintáctica no es respetada entonces el compilador del
lenguaje C rechazará dicha instrucción y no permitirá la ejecución
del programa.
La sintaxis para la función printf es:
printf("Mensaje de Texto entrecomillado %e1 .. %en
<\n\t>",Variable_a_mostrar_e1, ...,Variable_a_mostrar_en);
Donde:
De e1 a en son especificadores de formato de salida, los cuales
"mostrarán" los valores que se indiquen en las variables de salida
respetando la posición de aparición, es decir la primera variable se
mostrará en el primer especificador, la segunda variable en el
segundo especificador y así sucesivamente, el carácter de
porcentaje (%) es una obligación sintáctica que le especifica al
compilador que lo que sigue es un especificador de formato.
Marcados como opcionales entre < >, cuando queremos insertar
saltos de línea en algún punto de la cadena de entrada
utilizamos \n para indicarlo, de manera similar al lenguaje C, de
esta misma manera \t nos sirve para insertar tabulaciones.
El formato de los especificadores se muestra en la siguiente tabla:
Cabe señalar que puede haber mensajes de texto sin
especificadores de variables de salida, así como mensajes
compuestos únicamente por especificadores de variables de salida.
Por ejemplo tenemos el siguiente código, que muestra un único
mensaje "Hola Mundo" sin especificadores.
Ahora vemos un ejemplo de un mensaje que especifica una
variable de salida de tipo entero. Como podemos notar se
especifica una salida en formato decimal (%d) y una variable
correspondiente con dicho formato, es decir una variable entera
(num1).
La salida que produce este código es un mensaje a pantalla
indicando: Soy el número 10
Ejemplo de uso de la función de salida printf
Funciones de salida para caracteres y cadenas
Función putchar()
Imprime un carácter en el dispositivo de salida (normalmente la
pantalla) en la posición actual del cursor
La sintaxis es:
putchar(<carácter>);
Función puts()
Escribe una cadena de caracteres de salida a pantalla (más
adelante estudiaremos como se forman las cadenas de caracteres
en C)
La sintaxis es:
puts(<cadena_de_caracteres>);
Así como la biblioteca stdio.h nos provee de funciones de salida,
también nos dota de sus contrapartes para recibir entradas
ingresadas por el usuario desde el teclado.
Función scanf()
Esta función nos permite leer desde el teclado el valor que ha de
asignarse a una variable, su sintaxis es la siguiente:
scanf("%especificador_de_formato",&Variable_Destino);
Donde:
El especificador de formato sigue las mismas reglas que para la
función de salida printf.
El carácter ampersand (&), es una obligación sintáctica que le
especifica al compilador que se leerá el contenido y no la
dirección de una variable, la diferencia entre contenidos y
direcciones se estudiará más adelante en el tema apuntadores,
por el momento nos basta entender que esta regla aplica para
todas las variables excepto cadenas de carácteres y apuntadores
per se, estos casos se estudiarán en temas posteriores del curso.
A continuación un código de ejemplo de la lectura de un dato de
entrada y con el mismo la realización de un cálculo:
Ejemplo de uso de la función de entrada scanf
Aunque aún no vamos a profundizar en el tema de cadenas de
caracteres, es importante saber cómo es que podemos declararlas
y leerlas, aquí un ejemplo para leer un nombre de hasta 20 letras
que acepta espacios y un apodo de hasta 12 letras que no acepta
espacios.
NOTA: Las lecturas en lenguaje C con la función scanf tienen
ciertas particularidades a considerar, por ejemplo, que si al leer
una cadena introducimos un espacio entonces hasta ese punto
se almacenarán los caracteres, es decir scanf() no puede leer
cadenas con espacios, si fuese necesario leer espacios se debe
usar la función gets() descrita más adelante.
El segundo punto a considerar es que al hacer una lectura de datos
el lenguaje C para saber que una cadena ha terminado le agrega un
terminador de cadena (conocido como el carácter '/0') el cual
coincide con el <ENTER>, la inclusión de este terminador muchas
veces es automática por el compilador, por ello cuando tecleamos
<ENTER> se acumulan dos terminadores, el automático y el que
introdujimos con la tecla de entrada, eso afectará nuestra siguiente
lectura la cual considerará que se leyó una cadena vacía pues
encontró el terminador '/0' que teníamos acumulado en el buffer de
entrada, es por ello que es conveniente que antes de cada nueva
lectura con scanf "limpiemos" ese buffer para evitar cualquier
entrada no deseada, para ello utilizamos la función fflush() la cual
puede limpiar el buffer tanto de entrada (stdin) como de salida
(stdout) según lo necesitemos.
Funciones de lectura para cadenas y carácteres
Función getc()
Esta función lee un carácter y retorna el valor entero
correspondiente a su código en ASCII, cabe señalar que como el
lenguaje C no es altamente tipificado (esto es que permite
combinar tipos de datos con cierta holgura) podemos asignar este
valor a un especificador o variable de tipo char y obtendremos el
carácter en lugar del valor entero, pero si lo asignamos a un
especificador o variable entera recibiremos el valor ASCII esperado.
La sintaxis es:
variable_destino=getc(stdin);
Donde:
stdin es la especificación sintáctica de la entrada estándar, pero getc
tiene la particularidad de que puede recibir datos desde otras
entradas adicionales a la estándar
Función getchar()
Lee un carácter y lo devuelve como su valor de salida
Función getche()
Lee un carácter y lo devuelve como su valor de salida mostrándolo
como “eco” en pantalla (está incluida en la librería <conio.h>
Función getch()
Es igual que getche() pero sin eco en pantalla, es decir el carácter
leído no se muestra en la pantalla (está incluida en la librería
<conio.h>)
La sintaxis de las 3 funciones es la misma:
<variable_carácter> = getchar();
Función gets()
Lee una cadena de caracteres de entrada desde el teclado
La sintaxis es:
gets(<variable_cadena>);