You are on page 1of 35

INSTITUTO POLITÉCNICO NACIONAL

CENTRO DE ESTUDIOS CIENTÍFICOS Y TECNOLÓGICOS 9

“JUAN DE DIOS BÁTIZ”

PROGRAMA ACADÉMICO
TÉCNICO EN SISTEMAS DIGITALES

UNIDAD DE APRENDIZAJE
LENGUAJE DE PROGRAMACIÓN

SEMESTRE / NIVEL
4° SEMESTRE

APUNTES DEL DOCENTE PERIODO 19/2

DOCENTE
ING. LUIS ERNESTO ROSALES SÁNCHEZ

FECHA: 21 – ENERO- 2019

1
UBICACION DEL TURBO C EN EL AMBIENTE DE LA COMPUTACION

Programas de aplicación
al usuario.

Paquetes de súper alto nivel


o Paquetes de Software
CW, Dbase, Word, WP,etc.

Proporciona diversas Lenguaje de alto nivel Pascal, Instrucciones a la compu-


estructuras de control Basic, Fortran, C. tadora escritas con palabras
similares a los lenguajes
humanos.

Representación simbólica Lenguaje de bajo nivel Códigos alfabéticos llama


de las instrucciones de -ensamblador- dos NEMOTECNICO ò NE-
maquina que ejecuta la MONICO.
computadora.

Sistema Operativo

BIOS
(Basic, Input, Output; System)

Lenguaje Maquina
1 y 0 (BIT)

2
CARACTERISTICAS BASICAS DEL LENGUAJE C:

C ------ Lenguaje del programador

Turbo C ------ Compilador

Sus orígenes el primer C usaba el S.O UNIX se utilizo durante muchos años siendo compatible con las nuevas
implementaciones a nivel de código fuente.
Posteriormente Borland creo el turbo c con las siguientes metas principales.

1) Implementar el estándar completo de ANSI (American National Standards Institute) de manera que
se tuviera disponible el compilador de C mas actualizado.

2) Producir el compilador más rápido y eficaz posible.

3) Proporcionar un entorno de programación integrado de C que acorta el proceso de desarrollo.

C Frente A C ++

C + + es una versión ampliada y mejorada de C, que ha sido diseñada para la programación orientada a objetos
(POO).
C + + contiene y admite el lenguaje C, además de un conjunto de ampliaciones orientadas a objetos.
Así todos los compiladores que puedan compilar programas en C + + también compilaran programas en C.

C ES UN LENGUAJE DE NIVEL MEDIO

- Combina elementos de lenguajes de alto nivel con la funcionalidad del ensamblador.


- Código C Transportable:
Transportabilidad: se puede adaptar el Software escrito para un tipo de computadora a otro tipo.
- El soporte del estándar ANSI asegura la transportabilidad del código a otros entornos.
- Todos los lenguajes de alto nivel soportan el concepto de tipos de datos.
- Tipo de dato:
 Define un conjunto de valores que una variable puede almacenar con un conjunto de
operaciones que la computadora puede realizar sobre esa variable.

- Cuenta con 5 tipos básicos de datos:


1.- Enteros (INT)
2.- Caracteres (CHAR)
3.- Reales (FLUAT)
4.- Dobles (DOUBLE)
5.- Sin Valor (VOID)

- No es un lenguaje fuertemente tipeado pero permite la conversión de tipos.


- Los compiladores de C realizan una ligera comprobación de error en tiempo de ejecución
(Limite de un array, compatibilidad de tipo de argumento).
- La justificación para la carencia de comprobación de error en tiempo de ejecución, es que ralentiza la
ejecución del programa.
-Permite la manipulación de BITS, BYTES y direcciones. (Son los elementos básicos con los que trabaja la
computadora).

C ES UN LENGUAJE ESTRUCTURADO

- El termino lenguaje estructurado por bloques no se aplica estrictamente al C., se le llama así debido a su
estructura.
- Un lenguaje estructurado por bloques permite declarar subrutinas dentro de otras subrutinas y C no lo

3
permite.

CARACTERISTICAS DE UN LENGUAJE ESTRUCTURADO

- Compartimentación de código y datos


- Es la habilidad del lenguaje para seccionar y ocultar del resto de programa la información e instrucciones
necesarias para realizar una tarea específica.
- La compartimentación es usar subrutinas separadas (define sus propias variables, utilizables por la propia
subrutina).
- Rutinas separadas ò es posible escribir subrutinas de manera que los sucesos que se produzcan en ellas no
tienen efectos en otras partes del programa.

LENGUAJES ESTRUCTURADOS

- PASCAL
- ADA
-C
- MODULA - 2

LENGUAJES NO ESTRUCTURADOS

-FORTRAN
- BASIC
- COBOL

(HACER UN ARBOL DE PROGRAMAS MODULAR)

COMPONENTE ESTRUCTURAL PRINCIPAL DE C.

FUNCION

- Función: Subrutina independiente.


- Son bloques constitutivos en los que se desarrolla toda la actividad de los programas.
- Permiten definir las tareas de un programa y codificarlas por separado haciendo que los programas sean
modulares.
- Una función que trabaja correctamente se puede aprovechar en distintas situaciones.

BLOQUES DE CODIGO

- Grupo de sentencias de un programa conectados en forma lógica que es tratado como una unidad.
- Se crean colocando una serie de sentencias entre ( ) (llaves).

CREACION DE UN PROGRAMA

Código Fuente ------ .C P P (C plus,plus)


(Turbo C (.C)

Archivo de cabecera Compilador


.h

(Contienen la información Código Objeto ------ .OBJ


que ciertas funciones de

4
biblioteca necesitan Enlazador ------ Bibliotecas

Código Ejecutable ------ .EXE

- Todas las palabras clave están en minúsculas


Las mayúsculas y minúsculas son diferentes.
Una palabra clave no debe ser usada como nombre de var o función.
- Todos los programas consisten de unas funciones
La única función que siempre debe estar, es

main ( ) (Contiene lo que en esencia esboza el programa)

ESTRUCTURA DE UN PROGRAMA

Directivas del preprocesador


# include

Macros del preprocesador


# define

Declaraciones globales
Funciones
Variable

Función principal
main ( )

Declaraciones Locales
Sentencias

{
Definición de otras funciones
Func 1 (...)

{
:

}.

LA BIBLIOTECA Y EL ENLACE

- C no proporciona en la definición real. Ningún método para llevar a cabo las operaciones
de entrada / salida ( I / O )
- Los programas incluyen llamadas a funciones contenidas en la biblioteca Standard.

5
- Los compiladores de C incorporan una biblioteca que proporciona las funciones más
Usuales.
- Se comportan como bloques constitutivos que solo hay que combinar.
- El enlazador es un programa que combina en programa con las funciones necesarias de la biblioteca.

COMPILACION DE UN PROGRAMA EN C

- C permite partir un programa en muchos archivos y que cada uno sea compilado por separado.
- Una vez compilados los programas se enlazan entre si junto con las rutinas de la biblioteca para formar el
código objeto.
- La ventaja de lo anterior es que un cambio en el código de uno de los archivos no requiere re compilación del
programa entero.
a) Creación del programa (con un editor)
b) Compilación del programa
c) Enlace del programa con las funciones necesarias de la biblioteca.

PARA QUE SE PUEDE USAR C

- Inicialmente C se utilizó para la programación de sistemas.


Un programa de sistemas es parte de una gran clase de programas que forman una porción de Sistema
Operativo de la computadora o sus utilidades soporte.

(Ayudan al funcionamiento de la computadora

- Sistemas Operativos
- Interpretes
- Editores
- Ensambladores
- Compiladores
- Administradores de base de datos

Pero a medida que ha crecido en popularidad, mucho se utiliza para programar cualquier tipo de tarea debido
a su portabilidad y eficiencia.

- C da al programador lo que el quiere.

- Pocas restricciones
- Pocas quejas
- Código rápido
- Eficiencia

COMPILADOR FRENTE A INTERPRETE

Se refiere a la forma en la que se ejecuta un programa

INTERPRETE: Lee el código fuente del programa línea a línea y realiza las instrucciones específicas que están
en esa línea.

COMPILADOR: Lee el programa entero y entonces lo convierte a un código objeto, que es traducción del
código fuente del programa a una forma que puede ser ejecutada directamente-
te por la computadora.
El código objeto se conoce como código binario o máquina.

6
- Cuando se usa un intérprete el código fuente debe estar presente cada vez que se quiera
ejecutar el programa.

- Un compilador convierte el programa en código objeto que pueda ser directamente ejecutado
por la máquina.

TERMINOS BASICOS

1.- Tiempo de Compilación: se refiere a los sucesos que ocurren durante el proceso de
Compilación.

2.- Tiempo de Ejecución: Se refiere a los sucesos que ocurren mientras se ejecuta el
Programa.

3.- Código Fuente: Texto de un programa que un usuario puede leer en forma natural
considerado como el programa. Es la entrada al compilador.

4.- Código Objeto: La traducción del código fuente de un programa a código maquinaria
que es el que la computadora puede leer y ejecutar directamente. Es la entrada al
enlazador.

5.- Enlazador: Programa que enlaza funciones compiladas por separado, para producir un
solo programa. Combina las funciones de la biblioteca estándar de C con el código que
se ha escrito la salida es un programa ejecutable.

6.- Biblioteca: Archivo que contiene las funciones estándar que se pueden usar en los
programas.

Esas funciones incluyen todas las operaciones de E / S así como otras rutinas útiles.

7
ELEMENTOS DE UN PROGRAMA

1) -UNA O MAS FUNCIONES QUE A SU VEZ CONTIENEN UNA O MAS SENTENCIAS.


-LOS NOMBRES DE FUNCIÓN, PALABRAS CLAVE Y EN GENERAL SE ESCRIBEN CON MINÚSCULAS.

SENTENCIA:
- ESPECIFICA LA ACCIÓN A LLEVAR A CABO POR EL PROGRAMA
- SON LAS QUE REALIZAN LAS OPERACIONES
- TERMINAN SIEMPRE CON ( ; )
- EL ( ; ) SIGNIFICA QUE ES UN FINALIZADOR DE SENTENCIA.
- NO EXISTEN RESTRICCIONES, SE PUEDEN SITUAR DOS O MAS SENTENCIAS EN UNA
LÍNEA.

-PARA ESCRIBIR UN PROGRAMA, PRIMERO SE CREAN LAS FUNCIONES Y DESPUÉS SE PONEN JUNTAS.
- UNA FUNCIÓN DEBE LLEVAR UN PARÉNTESIS ( ) DESPUÉS DEL NOMBRE DE LA FUNCIÓN.

FORMATO DE UNA FUNCIÓN:


nombre_de_función ( argumentos)
{
secuencia de sentencias ;
}

-NOMBRE DE UNA FUNCIÓN:


- CON LETRAS MINÚSCULAS
- DÍGITOS DE 0 AL 9
- CARACTER DE SUBRAYADO
-LLAMADA A UNA FUNCIÓN:
- SE ESPECIFICA SU NOMBRE SEGUIDO DE UNA LISTA DE ARGUMENTOS
SEPARADOS POR ( , ) Y DENTRO DE PARÉNTESIS.

2) LA ÚNICA FUNCIÓN QUE SIEMPRE DEBE ESTAR ES:


main ( ) - SE DEBE COLOCAR DONDE COMIENZA LA EJECUCIÓN DEL
PROGRAMA.
- COMIENZA DONDE ENCUENTRA LA LLAVE DE APERTURA { , Y
TERMINA
DONDE ENCUENTRA EL CIERRE }

3) FUNCIONES DE BIBLIOTECA:

- SE CONOCE COMO BIBLIOTECA ESTÁNDAR DE C.


- CONTIENE FUNCIONES PARA LLEVAR A CABO ENTRADAS / SALIDAS DE DISCO, MANEJO DE
CADENAS,
OPERACIONES MATEMÁTICAS, ETC.
- YA COMPILADO EL PROGRAMA EL CÓDIGO PARA LAS FUNCIONES SE AÑADEN AUTOMÁTICAMENTE
A EL.

4) ARCHIVOS DE CABECERA:

- TERMINAN CON EXTENSIÓN .h


- EL COMPILADOR UTILIZA LA INFORMACIÓN PARA GESTIONAR LAS FUNCIONES DE BIBLIOTECA.
- SE AÑADEN AL PROGRAMA UTILIZANDO LAS DIRECTIVAS DEL PREPROCESADOR DEL COMPILADOR
P OR EJEM. ( # include )

8
PREPROCESADOR: REALIZA DISTINTAS MANIPULACIONES EN EL ARCHIVO FUENTE ANTES DE
COMPILARLO.
- ARCHIVOS DE CABECERA MAS FRECUENTES < stdio.h > , < conio.h > , < math.h > .

DIRECTIVAS:
- INSTRUCCIONES QUE DA EL PROGRAMADOR AL COMPILADOR.
- LE DICE AL PREPROCESADOR QUE LEA EN OTRO ARCHIVO Y LO INCLUYA EN EL
PROGRAMA.
- NO TERMINAN EN ( ; ) POR QUE NO SON PALABRAS CLAVES QUE DEFINAN UNA
SENTENCIA.

5) DECLARACIÓN DE VARIABLES Y ASIGNACIÓN DE VALORES:

VARIABLES:
- POSICIÓN DE MEMORIA CON NOMBRE QUE PUEDE GUARDAR DISTINTOS
VALORES.
- SE DEBEN DECLARAR ANTES DE UTILIZARLAS.
- LE DICE AL COMPILADOR QUE TIPO DE DATO SE ESTA UTILIZANDO.

DECLARACIÓN:
TIPO nombre_var ;

TIPO = TIPO DE DATO


nombre_var = NOMBRE DE LA VARIABLE.

TIPOS DE DATOS BÁSICOS

TIPO SIGNIFICADO LONGITUD ( BYTE) RANGO PALABRA


CLAVE
CARACTER DATO CARACTER 1 0 .. 255 ch
ENTERO NUMERO ENTERO CON SIGNO 2 68.. 32767 int
FLOTANTE NUMERO EN PUNTO FLOTANTE 4 3.4 E - 38 . . 3.4 E 38 float
DOBLE NUMERO PUNTO FLOTANTE DE 8 1.7 E -308 .. 1.7 E 308 double
DOBLE PRECISION
SIN VALOR void

A) LOCALIZACION DE LAS VARIABLES

VARIABLES GLOBALES:
- DECLARADAS FUERA DE TODAS LAS FUNCIONES Y CUALQUIER FUNCIÓN PUEDE
ACCEDER A ELLAS.
VARIABLES LOCALES:
- DECLARADAS DENTRO DE UNA FUNCIÓN, SOLAMENTE ES CONOCIDA POR LA
FUNCIÓN.
LLAMADA A UNA FUNCIÓN: - EN LA DECLARACIÓN DE LOS PARÁMETROS FORMALES DE UNA
FUNCIÓN.

B) CARACTERISTICAS DE LAS VARIABLES


- SE PUEDEN DECLARAR MAS DE UNA VARIABLE DE UN MISMO TIPO SEPARADOS POR COMAS ( , ).
- LOS NOMBRES DE LAS VARIABLES ( IDENTIFICADOR) PUEDE TENER HASTA 30 CARACTERES.
- SE PUEDEN COMPONER DE LETRAS, DÍGITOS ( 0 - 9 ) Y SUBRAYADO.
- LOS TAMAÑOS DE LETRA SE TRATAN DIFERENTE.

6) ASIGNACIÓN DE UN VALOR A UNA VARIABLE:

DECLARACIÓN

9
nombre_variable = valor;

7) CONSTANTES:

- ES UN VALOR FIJO UTILIZADO EN UN PROGRAMA, SE UTILIZAN PARA INICIALIZAR VARIABLES.

CONSTANTES DE TIPO BASICO:

-Carácter: Encerradas entre (‘ ‘) Ejemplo: ‘A’, ‘B’ , ‘9’

-Enteros: Números sin componente fraccionario. Ejemplo: 1, 500, -50

-Punto flotante: Requieren del uso del punto decimal seguido por el componente fraccional. Ejemplo: 11.23, 245.0

COMO AÑADIR COMENTARIOS A UN PROGRAMA

Comentario = Es una anotación que se pone en el código fuente el compilador ignora todos los comentarios.
Se utilizan para documentar el significado y propósito del código fuente.

PARA DECLARAR UN COMENTARIO

/ * * /

Ejemplo:

/ * Comentario */

Los comentarios se pueden extender varias líneas.


Pueden ir en cualquier lugar excepto en medio de alguna palabra clave, nombre de función o de variable.
Se puede utilizar para quitar temporalmente una línea de código no se puede tener un comentario dentro de otro (anidado).

Para comentar un bloque de sentencias /* */

Para comentar solo una línea: //

10
ORDENES BÁSICAS

A) SENTENCIA if :

SU DECLARACIÓN ES:

if (condición ) sentencia

dónde : CONDICIÓN.- ES UNA EXPRESIÓN QUE SE EVALÚA PARA VER SI ES VERDADERA


O FALSA.
( EN C VERDAD ES NO CERO Y FALSO CERO ).

POR EJEMPLO:
if ( 10  11 ) printf ( “ 10 es menor que 11 “ ) ;

B) BUCLE for:

SU DECLARACIÓN ES :

for ( inicialización , condición , incremento ) sentencia ;

dónde : INICIALIZACIÓN .- ESTABLECE LA VARIABLE DE CONTROL DEL BUCLE A UN VALOR.

CONDICIÓN.- ES UNA EXPRESIÓN QUE EL COMPILADOR COMPRUEBA CADA VEZ QUE REPITE EL
BUCLE.( SE MANTIENE EL BUCLE EN FUNCIÓN MIENTRAS LA CONDICIÓN SEA
VERDAD )

INCREMENTO.- INCREMENTA LA VARIABLE DE CONTROL.

POR EJEMPLO:

main ( )
{
int contador ;
for ( contador  1 ; contador  100 ; contador ++) printf ( “%d” , contador ) ;

Contador inicializa a uno

11
Comprueba la condición  100
Si es verdad incrementa contador en uno con ++

COM O ESCRIBIR FUNCIONES

FUNCIONES:
-UNA FUNCIÓN ES UNA SUBRUTINA QUE CONTIENE UNA O MAS SENTENCIAS DE C
-ELLAS REALIZAN UNA O MAS TAREAS. CADA FUNCIÓN REALIZA UNA SOLA TAREA.
-CADA FUNCIÓN TIENE UN NOMBRE Y UNA LISTA DE ARGUMENTOS QUE RECIBE LA
FUNCIÓN.
-UNA FUNCIÓN TENDRÁ UN PARÉNTESIS DESPUÉS DEL NOMBRE DE LA FUNCIÓN.
POR EJEMPLO:
main ( )
{
hola ( ) ; / LLAMA A LA FUNCIÓN HOLA  /
}
hola ( )
{
printf ( “ hola “ ) ;
}

FUNCIONES CON ARGUMENTOS:

-. UN ARGUMENTO DE UNA FUNCIÓN ES UN VALOR QUE SE PASA A LA FUNCIÓN EN EL MOMENTO


QUE SE LLAMA.
- LAS FUNCIONES QUE TOMEN ARGUMENTOS NO NECESITAN VARIABLES, ASÍ QUE EL PARÉNTESIS
ESTA VACIÓ EN CASO CONTRARIO DENTRO DE EL SE TENDRÁ QUE COLOCAR LAS VARIABLES ASÍ
COMO SU TIPO.
- PARA QUE UNA FUNCIÓN PUEDA TOMAR ARGUMENTOS SE DEBEN DECLARAR ESPECIALESQUE
RECIBEN EL VALORES DE ARGUMENTO LLAMADAS PARÁMETROS FORMALES.
- EL TERMINO PARÁMETRO FORMAL SE REFIERE A LA VARIABLE DE UNA FUNCIÓN QUE RECIBE EL
VALOR DE LOS ARGUMENTOS EN SU LLAMADA.
- PUEDE TENER CERO O VARIOS ARGUMENTOS ( HASTA 31 ).

ARGUMENTO:
-EL TERMINO ARGUMENTO SE REFIERE AL VALOR USADO PARA LLAMAR A LA FUNCIÓN.
-ASÍ LAS FUNCIONES QUE TOMAN ARGUMENTOS SE LLAMAN FUNCIONES PARAMETRIZADAS .
-LA VARIABLE UTILIZADA COMO ARGUMENTO EN UNA LLAMADA DE FUNCIÓN NO TIENE QUE
VER CON EL PARÁMETRO FORMAL QUE RECIBE SU VALOR.
- EL TIPO DE ARGUMENTO QUE SE UTILIZA PARA LLAMAR A UNA FUNCIÓN DEBE SER DEL
MISMO TIPO QUE EL PARÁMETRO FORMAL QUE RECIBE ESE ARGUMENTO.
LOS ARGUMENTOS SE SEPARAN CON ( , ).

12
POR EJEMPLO:

main ()
{
mul ( 10, 11) ;
}
mul (a, b ) ;
int a, b ;
{
printf ( “ %d”, a  b) ;
}

FUNCIONES QUE DEVUELVEN VALORES:

-UNA FUNCIÓN DEVUELVE UN VALOR A LA RUTINA QUE LA LLAMA USANDO LA PALABRA


CLAVE return.
-USANDO LA SENTENCIA return SIN NINGÚN VALOR SE PUEDE VOLVER DE UNA FUNCIÓN.
-SE PUEDE USAR MAS DE UN return EN UNA FUNCIÓN.
-LA FUNCIÓN REGRESA INMEDIATAMENTE, NO SE EJECUTARA NINGUNA SENTENCIA DESPUÉS
DE ELLA.
- EL VALOR NO TIENE POR QUE SER CONSTANTE.
- SE DEBE PONER LA FUNCIÓN EN EL LADO DERECHO DE UNA SENTENCIA DE ASIGNACIÓN.
POR EJEMPLO: ANSWER  SQRT ( 10.0 )
- AJUSTAR EL TIPO DE VALOR QUE DEVUELVE UNA FUNCIÓN CON LA VARIABLE LA QUE SE
ASIGNARA EL VALOR.
- AJUSTAR LOS TIPOS DE UN ARGUMENTO DE UNA FUNCIÓN CON LOS TIPOS QUE SE REQUIERE.

13
FUNCIONES DE ENTRADA / SALIDA

A) printf ( )
SE UTILIZA PARA MOSTRAR VALORES DE CARACTERES ENTEROS Y EN PUNTO
FLOTANTE.

DECLARACIÓN:
printf ( “ cadena de control “, argumentos ) ;

CADENA DE CONTROL:
- CONTIENE LOS CARACTERES QUE SE VERÁN EN PANTALLA.
- LAS ORDENES QUE LE DICEN A printf COMO VISUALIZAR EL RESTO DEL
ARGUMENTO.
- CÓDIGOS DE FORMATO.

CÓDIGOS DE FORMATO:
- DETERMINA COMO SE MOSTRARA EL ARGUMENTO COINCIDENTE.
- COMIENZA CON UN %
- SE EMPAREJAN CON SUS ARGUMENTOS DE IZQUIERDA A DERECHA Y DEBE
HABER EL
MISMO NUMERO DE ARGUMENTOS COMO DE ESPECIFICADORES.

CÓDIGOS DE FORMATO MAS USUALES:

CÓDIGO SIGNIFICADO
%d VISUALIZA UN ENTERO EN FORMATO DECIMAL
%f VISUALIZA UN float EN FORMATO DECIMAL
%c VISUALIZA UN CARACTER
%s VISUALIZA UNA CADENA

B) scanf ( )
ES UNA DE LAS FUNCIONES DE ENTRADA, PUEDE LEER ENTEROS, NÚMEROS EN PUNTO
DECIMAL
DESDE TECLADO.

DECLARACIÓN:
scanf ( “ cadena de control “, & argumentos (nom-var) )

CADENA DE CONTROL:
-CONTIENE CÓDIGO DE FORMATO
- EL CÓDIGO INDICA QUE TIPO DE VALOR VA A RECIBIR

14
- LA LISTA DE ARGUMENTOS DEBE CONTENER EXACTAMENTE EL MISMO
NUMERO DE
ARGUMENTOS QUE DE CÓDIGOS DE FORMATO EN LA CADENA DE CONTROL.
- LAS VARIABLES CONTIENEN LOS VALORES INTRODUCIDOS DESDE TECLADO.
- EL & DEBE PRECEDER A LAS VARIABLES QUE RECIBIRÁN LOS VALORES
LEIDOS
DESDE TECLADO.
- & AYUDA A LOS CÓDIGOS DE FORMATO A DETERMINAR EL MODO EN QUE SE
LEERÁ
LA INFORMACIÓN EN LAS VARIABLES A LAS QUE APUNTAN LOS ARGUMENTOS
QUE
SIGUEN A LA CADENA DE CONTROL

CÓDIGOS DE FORMATO MAS USUALES

CÓDIGO SIGNIFICADO
%c LEE UN ÚNICO CARÁCTER
%d LEE UN ENTERO DECIMAL
%f LEE UN ENTERO EN PUNTO FLOTANTE

REALIZACIÓN DE CÁLCULOS MEDIANTE


EXPRESIONES ARITMÉTICAS SIMPLES

UNA EXPRESIÓN ES UNA COMBINACIÓN DE OPERADORES Y OPERANDOS.


LAS EXPRESIONES SIGUEN LAS REGLAS DEL ÁLGEBRA.

C DEFINE CINCO OPERADORES ARITMÉTICOS:

OPERADOR SIGNIFICADO

( ) OPERADOR DE AGRUPACIÓN
* MULTIPLICACIÓN
/ DIVISIÓN
+ SUMA
- RESTA
% MODULO
++ INCREMENTO ( SIN ESPACIOS )
-- DECREMENTO ( SIN ESPACIOS )

LOS OPERADORES + , - , / , * , SE PUEDEN UTILIZAR CON CUALQUIERA DE LOS TIPOS DE DATOS


BÁSICOS.
EL % SOLO SE DEBE UTILIZAR CON TIPOS ENTEROS. EL MODULO DEVUELVE EL RESTO DE UNA
DIVISIÓN ENTERA.

EL ( - ) TIENE DOS SIGNIFICADOS:

1) ES EL OPERADOR DE RESTA.
2) SE PUEDE UTILIZAR PARA INVERTIR EL SIGNO DE UN NUMERO.

EL OPERADOR DE INCREMENTO ++ INCREMENTA UNA VARIABLE EN UNO.

EL OPERADOR DE DECREMENTO -- DECREMENTA UNA VARIABLE EN UNO.

UNA EXPRESIÓN PUEDE APARECER AL LADO DERECHO DE UNA SENTENCIA DE ASIGNACIÓN

15
p ejem:
RESPUESTA = 100 * 10 ;

UNA EXPRESION PUEDE CONTENER VARIABLE CONSTANTES O AMBAS.


p ejem:
RESPUESTA = CONTADOR - 100 ;

LOS OPERADORES * , / , % TIENEN MAYOR PRIORIDAD QUE + Y - , PERO SE PUEDE ALTERAR


EL
ORDEN DE EVALUACIÓN UTILIZANDO LOS PARÉNTESIS.

OPERADORES LÓGICOS Y RELACIONALES

LOS OPERADORES RELACIONALES COMPARAN DOS VALORES Y DEVUELVEN UN RESULTADO


VERDADERO O FALSO.
LOS OPERADORES LÓGICOS AGRUPAN RESULTADOS DE VERDADERO / FALSO.
SE UTILIZAN PARA SOPORTAR LAS OPERACIONES LÓGICAS BÁSICAS DE Y (AND) , O (OR) , NO (NOT).
LOS OPERADORES LÓGICOS Y RELACIONALES TIENEN UNA PRIORIDAD MAS BAJA QUE LOS
OPERADORES ARITMÉTICOS.
LOS VALORES RESULTANTES DE LOS OPERADORES LÓGICOS Y RELACIONALES SON 0 Y 1.
C DEFINE COMO VERDADERO CUALQUIER VALOR DIFERENTE DE CERO.

LOS OPERADORES RELACIONALES Y LÓGICOS SIEMPRE DAN EL VALOR DE 1 PARA VERDADERO.

OPERADORES RELACIONALES

OPERADOR SIGNIFICADO

 MAYOR QUE
 MAYOR O IGUAL QUE
 MENOR QUE
 MENOR O IGUAL QUE
 IGUAL
 DISTINTO DE

OPERADORES LÓGICOS

OPERADOR SIGNIFICADO

 Y ( AND )
 O ( OR )

16
! NO ( NOT )

TABLA DE VERDAD

P Q P && Q P  Q
!Q

0 0 0 0
1
0 1 0 1
1
1 1 1 1
0
1 0 0 1
0

CARACTERÍSTICAS AVANZADAS DE printf

EL LENGUAJE C DEFINE 13 CÓDIGOS ESPECIALES QUE SE UTILIZAN PARA MOSTRAR CARACTERES


QUE NO SE PUEDEN INTRODUCIR DESDE TECLADO.
SE PUEDEN INTRODUCIR LOS CÓDIGOS DE BARRA INVERTIDA EN CUALQUIER LUGAR EN EL QUE SE
UTILICE UN CARACTER NORMAL.

CÓDIGOS DE BARRA INVERTIDA

CÓDIGO SIGNIFICADO

\b RETROCESO
\f AVANCE DE PAGINA
\n NUEVA LÍNEA
\r RETORNO DE CARRO
\t TABULADOR HORIZONTAL
\ COMILLAS DOBLES
\‘ COMILLA SIMPLE
\0 NULO
\\ BARRA INVERTIDA
\v TABULADOR VERTICAL
\a PITIDO

17
\N CONSTANTE OCTAL
\ xN CONSTANTE HEXADECIMAL

LOS CÓDIGOS DE BARRA INVERTIDA SON CONSTANTES DE CARACTER.


PARA ASIGNAR UNO A UNA VARIABLE DE CARACTER SE DEBE ENCERRAR EL CÓDIGO DE BARRA
INVERTIDA DENTRO DE COMILLAS SIMPLES.

MODIFICADORES DE TIPOS DE DATOS

LOS TIPOS BÁSICOS DE DATOS EXCEPTO void SE PUEDEN MODIFICAR UTILIZANDO MODIFICADORES
DE TIPO.

MODIFICADORES DE TIPO:
signed
unsigned
long PRECEDEN AL NOMBRE DEL TIPO
short

A) signed: SE UTILIZA CON char PARA CREAR UN ENTERO PEQUEÑO CON SIGNO.

B) char : CUANDO SE UTILIZA COMO UN ENTERO PUEDE CONTENER LOS NÚMEROS POSITIVOS EN
EL RANGO
DE 0 . . 255
SI SE ESPECIFICA COMO signed PUEDE CONTENER NÚMEROS EN UN RANGO DE -128 . . 127

C) long : SE PUEDE APLICAR A int O A double, CON :


int : DOBLA LA LONGITUD EN BITS DEL TIPO DE BASE QUE MODIFICA.
double : DOBLA LA PRECISIÓN.

D) short : REDUCE A LA MITAD EL TAMAÑO DE UN int.

E) unsigned : SE PUEDE APLICAR A char Y A int .


SE PUEDE UTILIZAR EN COMBINACIÓN CON long O CON short

18
SE PUEDE UTILIZAR PARA CREAR UN ENTERO CON signo.

* SE PERMITE UNA NOTACIÓN ABREVIADA PARA LA DECLARACIÓN DE ENTEROS unsigned, short O long.
BASTA CON UTILIZAR EL NOMBRE DEL MODIFICADOR SIN EL int. *

LAS VARIABLES DE TIPO char:

- UTILIZA LOS VALORES DE LOS CARACTERES ASCII


- PUEDE UTILIZAR OTROS VALORES
- ESTABLECE UNA DIFERENCIA ENTRE UN ENTERO Y UN CARACTER
EN BASE A SU TAMAÑO.

DEBIDO A QUE LA FUNCIÓN printf Y scanf DEBEN SABER CON EXACTITUD EL TIPO DE DATOS QUE
TRABAJA SE DEBE ANTEPONER UN MODIFICADOR:

MODIFICADORES PARA printf MODIFICADORES PARA scanf

PARA UN short %hd UN VALOR short %hd


PARA UN long %ld UN VALOR double %lf
UN VALOR unsigned %u UN VALOR longdouble %Lf
UN longdouble %Lf UN VALOR unsigned long int %lu
UN unsigned long int %lu

COMBINACIONES DE LOS TIPOS BÁSICOS DE DATOS


Y LOS MODIFICADORES CON TAMAÑOS Y RANGOS

TIPO TAMAÑO EN RANGO


BITS

char 8 - 128 a 127


unsigned char 8 0 a 255
signed char 8 - 128 a 127
int 16 - 32768 a 32767
unsigned int 16 0 a 65535
short int 16 - 32768 a 32767
unsigned short int 16 0 a 65535
long int 32 - 2147483648 a
2147483648
unsigned long int 32 0 a
4294967295
float 32 3.4 E - 38 a 3.4 E +
38
double 64 1.7 E - 308 a 1.7 E +
308
long double 80 3.4 E - 4932 a 1.1 E
+4932
BLOQUES DE CÓDIGO
SE DEFINE DE LA SIGUIENTE MANERA:
{
LISTA DE DEFINICIONES Y DECLARACIONES DE IDENTIFICADORES
LISTA DE PROPOSICIONES
}

19
- UN BLOQUE PUEDE APARECER EN CUALQUIER PARTE DE UNA FUNCIÓN.

- LOS IDENTIFICADORES DECLARADOS O DEFINIDOS EN EL BLOQUE SERÁN ACCESIBLES DENTRO DEL


MISMO.

- LAS VARIABLES DEFINIDAS EN EL BLOQUE SE CREARAN CUANDO LA EJECUCIÓN DEL PROGRAMA


LLEGUE AL INICIO DEL BLOQUE.

- SE PUEDEN ENLAZAR DOS O MAS SENTENCIAS.

- PARA CREAR UN BLOQUE DE CÓDIGO, SE RODEAN LAS SENTENCIAS EN EL BLOQUE CON LLAVES DE
APERTURA Y CIERRE.

ASÍ LAS SENTENCIAS FORMAN UNA UNIDAD LÓGICA QUE SE PUEDE UTILIZAR EN CUALQUIER LUGAR
DONDE PUEDA HACERLO UNA SENTENCIA SENCILLA.

EJEMPLO:
FORMA GENERAL DE if CON BLOQUES DE CÓDIGO:

if ( expresión ) {
sentencia1 ;
sentencia2 ;
.
sentencia n ;
}
else {
sentencia1 ;
. .
sentencia n ;
}
SI LA EXPRESIÓN SE EVALÚA COMO VERDADERA SE EJECUTARAN LAS SENTENCIAS CONTENIDAS EN
EL
BLOQUE DE CÓDIGO ASOCIADO CON if.

INTRODUCCIÓN DE CARACTERES

FUNCIÓN getchar ( ):
DEVUELVE UN CARACTER INTRODUCIDO DESDE TECLADO.
UNA VEZ LLAMADA , LA FUNCIÓN ESPERA A QUE SE PULSE UNA TECLA, ASÍ HACE
ECO
DE LA PULSACIÓN DE TECLA EN LA PANTALLA Y DEVUELVE EL VALOR DE LA
TECLA AL
SOLICITANTE.

FUNCIÓN getche ( ):
DEVUELVE EL VALOR INMEDIATAMENTE DESPUÉS DE QUE SE PULSE LA TECLA.

CONTROL DE FLUJO

-LAS PROPOSICIONES DE CONTROL FORMAN EL CUERPO DE UN LENGUAJE.

-SON QUIENES DETERMINAN DE QUE FORMA SE VAN APLICANDO LAS TRANSFORMACIONES A LOS
DATOS.

PROPOSICIONES DE CONTROL:

20
ES AQUELLA CONSTRUCCIÓN SINTÁCTICA DE UN LENGUAJE QUE PERMITE ESPECIFICAR UN
ORDEN
PARA LA EJECUCIÓN DE INSTRUCCIONES.
ESTE ORDEN PUEDE SER SENCILLO ( EJECUCIÓN SECUENCIAL : AL TERMINAR LA PROPOSICIÓN
ACTUAL SE EJECUTA LA SIGUIENTE ) O COMPLEJO ( CONDICIONES MÚLTIPLES Y REPETICIÓN
DE
UNA SERIE DE INSTRUCCIONES ).

PROPOSICIÓN CONDICIONAL SIMPLE:

if ( expresión ) sentencia1
else
sentencia2

SI EXPRESIÓN EVALÚA VERDADERO ( CUALQUIER VALOR ENTERO O REAL DISTINTO DE CERO) SE


REALIZA LA sentencia1 Y SE PASA A EJECUTAR LA PROPOSICIÓN SIGUIENTE AL if ( IGNORANDO LA
sentencia2 ).

else ES OPCIONAL Y SU OMISIÓN INDICA NO HACER NADA SI EXPRESIÓN EVALÚA FALSO.

ANIDAMIENTO DE SENTENCIAS if :

CUANDO UNA SENTENCIA if ES EL OBJETIVO DE OTRO if O else SE DICE QUE ESTA ANIDADA DENTRO
DEL if
MAS EXTERNO.

SE PERMITE MÁXIMO 15 NIVELES DE ANIDAMIENTO. EJEMPLO:

if ( p )
if ( q ) printf (  a y b son verdaderos ) ;
else printf ( ¿a que sentencia se destina else ? ) ;

PROPOSICIONES ITERATIVAS

BUCLE while :

SINTAXIS:
while ( expresión ) sentencia ;

-EL OBJETIVO ES UN BLOQUE DE CÓDIGO.


-FUNCIONA REPITIENDO SU OBJETIVO MIENTRAS LA EXPRESIÓN SEA CIERTA , CUANDO ES FALSA SE
DETIENE.
-EL VALOR DE LA EXPRESIÓN SE COMPRUEBA AL PRINCIPIO DEL BUCLE.

BUCLE do - while :

SINTAXIS:
do {

21
sentencias

} while ( expresión ) ;

- LAS LLAVES INDICAN QUE EL while QUE TERMINA EL do ES PARTE DE UN BUCLE do NO EL


PRINCIPIO DE UN BUCLE while.

- REPITE LA SENTENCIA O SENTENCIAS MIENTRAS LA EXPRESIÓN ES VERDADERA .


SE DETIENE CUANDO LA EXPRESIÓN ES FALSA.

do ES ÚNICO YA QUE SIEMPRE EJECUTA EL CÓDIGO DE DENTRO DEL BUCLE AL MENOS UNA VEZ,
DADO QUE LA EXPRESIÓN QUE CONTROLA EL BUCLE SE COMPRUEBA AL FINAL DEL MISMO.

VARIACIONES DEL for

A) NO ES NECESARIO UTILIZAR LA SECCIÓN DE INICIALIZACIÓN PARA INICIALIZAR LA VARIABLE DE


CONTROL DE BUCLE.

B) SE PUEDE OMITIR LA VARIABLE DE CONTROL DE BUCLE.

C) NO ES NECESARIO EL QUE INCREMENTE O DECREMENTE UNA VARIABLE.

D) UNA O MAS EXPRESIONES DENTRO DE EL PUEDEN ESTAR VACÍAS.

BUCLES ANIDADOS

CUANDO EL CUERPO DE UN BUCLE CONTIENE OTRO, SE DICE QUE EL SEGUNDO ESTA ANIDADO EN EL
PRIMERO.
LOS BUCLES PUEDEN ESTAR ANIDADOS AL MENOS 15 NIVELES.

SENTENCIA break

-LA SENTENCIA break PERMITE SALIR DE UN BUCLE DESDE CUALQUIER PUNTO, PASANDO POR ALTO
SU EXPRESIÓN DE FINALIZACIÓN NORMAL.

-CUANDO break SE ENCUENTRA DENTRO DE UN BUCLE, EL BUCLE TERMINA INMEDIATAMENTE Y EL


CONTROL DEL PROGRAMA CONTINUA EN LA SENTENCIA QUE SIGUE AL BUCLE:

EJEMPLO:
{
int i;
for ( i = 1 ; i  100 ; i++) {
printf ( “%d” , i ) ;
if ( i== 10 ) break ; /* sale del bucle */
}
}

break SE PUEDE UTILIZAR CON CUALQUIERA DE LOS BUCLES.

SENTENCIA continue

- ES EL OPUESTO DE break OBLIGA A QUE SE PRODUZCA LA SIGUIENTE ITERACIÓN DEL BUCLE ,


SALTANDO CUALQUIER CÓDIGO ENTRE ELLA Y LA CONDICIÓN DE PRUEBA DEL BUCLE.

22
- EN LOS BUCLES while Y do - while , UNA SENTENCIA continue HARÁ QUE EL CONTROL VAYA
DIRECTAMENTE A LA CONDICIÓN DE PRUEBA Y QUE CONTINUÉ EL PROCESO DEL BUCLE.

- EN EL CASO DE for SE LLEVA A CABO LA PARTE DE INCREMENTO DEL BUCLE, SE EJECUTA LA


PRUEBA CONDICIONAL Y EL BUCLE CONTINUA.

SENTENCIA CONDICIONAL MÚLTIPLE switch

- SE UTILIZA PARA ELEGIR UN CAMINO DE ENTRE VARIOS CAMINOS ALTERNATIVOS DE LA EJECUCIÓN


DEL PROGRAMA.

- COMPARA UNA VARIABLE CON UNA LISTA DE CONSTANTES ENTERAS O DE CARACTER.

- CUANDO CONCUERDA CON ALGUNA , SE EJECUTA LA SECUENCIA DE SENTENCIAS ASOCIADA CON


ESA CONSTANTE.

SINTAXIS:
swittch ( variable ) {
case constante1:
secuencia de sentencias
break ;
case constante2:
secuencia de sentencias
break ;
.
.
.
default
secuencia de sentencias
break ;
}

/* LA SECUENCIA DE SENTENCIAS DE default SE EJECUTAN SINO COINCIDE CON NINGUNA DE LAS


OTRAS:
default ES OPCIONAL */

- switch SE DIFERENCIA DE if EN QUE switch SOLAMENTE VERIFICA LA IGUALDAD MIENTRAS QUE if


PUEDE SER DE CUALQUIER TIPO.
- switch SOLO FUNCIONA CON TIPOS int O char.
- LAS SECUENCIAS DE SENTENCIAS ASOCIADAS CON CADA case NO SON BLOQUES; POR TANTO NO
VAN ENCERRADAS ENTRE LLAVES.
- SE PERMITEN HASTA 257 SENTENCIAS case.

ARRAYS

Un array es una lista de variables del mismo tipo que sé referencia por un nombre común.
A una variable individual del array se le llama elemento del array.
Constituyen un modo adecuado de gestionar grupos de datos relacionados.
DECLARACION:
tipo nombre_de_variable tamaño

tipo: Tipo válido de datos.


nombre_de_varaiable: Nombre del array.
tamaño: Número de elementos del array.
EJEM:
int miarray 20

23
A un elemento de un array se accede mediante un índice utilizando el número del elemento.
Todos los arrays empiezan por 0.
Por ejemplo: Si se quiere acceder al primer elemento de un array se utiliza 0 para el índice.
Para acceder por índice a un array se especifica dentro de corchetes el número de índice del elemento deseado.
Por ejemplo:
miarray 1

Para asignar un valor a un elemento del array se coloca el array al lado izquierdo de la sentencia de asignación.
Por ejemplo:
miarray0  100;

Almacena los arrays unidimensionales en una posición de memoria contigua con el primer elemento en la posición más
baja.
Por Ejemplo:
int i5;
int j;

for ( j  0 ; j  5 ; j++) i j   j

Se puede utilizar el valor de un elemento de un array en cualquier lugar en el que se utilizaría una variable o una constante.
Cuando se quiere utilizar scanf ( ) para introducir un valor numérico en un elemento del array basta con poner & delante
del
nombre del array.
Ejemplo:
scanf ( "% d" , &count 9  )

No realiza ninguna comprobación de los límites de los arrays, esto significa que es posible que se sobrepase los límites del
array.
Si se quieren copiar los valores de todos los elementos de un array en otro array se debe hacer copiando cada elemento por
separado.

Los arrays son muy útiles en programación cuando se tienen que administrar listas de información.
Los arrays son especialmente útiles cuando se quieren ordenar la información.

TIPOS DE ARRAYS:
Unidimensional: listas o vectores tipo nomb_var[tamaño]
Bidimensional: matriz o tabla tipo nomb_var[tamaño] [tamaño]
Multidimensional: tipo nomb_var[tamaño] [tamaño] [tamaño]...

Array Unidimensional: Acceso: Por medio de un índice y el número del elemento: i[0], i[1]
O en su defecto por medio de un índice y una variable que represente a los elementos: i[j], x[y]

UTILIZACIÓN DE CADENAS

El uso más común de un array unidimensional es la cadena.


C soporta cadenas utilizando arrays unidimensionales de caracteres.
Una cadena se define como un array de caracteres con un carácter de terminación nulo.
Para leer una cadena por teclado se utiliza la función de biblioteca gets( ) .
A la función se le llama utilizando el nombre de un array de caracteres sin ningún índice.
gets ( ) lee caracteres hasta que se pulsa ENTER.
El retorno de carro no se almacena , pero es substituido por un carácter nulo que termina la cadena.
gets ( ) no realiza comprobación de límites .
Si se desea mostrar una cadena se utiliza el especificador de formato %s .

24
FUNCIONES RELACIONADAS CON CADENAS

Estas funciones requieren del archivo de cabecera string.h

Función strcpy ( )
sintaxis: strcpy( hacia, desde ) ;

Copia los contenidos de desde en hacia.


No realiza comprobación de límites, por tanto el array receptor debe ser lo suficientemente grande para contener lo que se
está copiando incluyendo el carácter de terminación nulo.

Función strcat ( )
sintaxis: strcat ( hacia, desde ) ;

Añade los contenidos de una cadena en otra. Llamándose a lo anterior concatenación.


Añade los contenidos de desde a los contenidos de hacia.

Función strcmp ( )
sintaxis: strcmp ( c1, c2 ) ;

Compara dos cadenas. Devuelve 0 si las cadenas son iguales.


Devuelve un valor negativo si c1 es menor que c2, y un positivo si c1 es mayor que c2.
Las cadenas se comparan siguiendo el orden alfabético.
La comparación no se basa en la longitud de la cadena.
La comparación es sensible a mayúsculas y minúsculas, siendo las minúsculas mayores que las mayúsculas.

Función strlen ( )
sintaxis: strlen ( str ) ;

Devuelve la longitud de una cadena.


No toma en cuenta el carácter de terminación nulo.

Función strlwr
Sintaxis strlwr (cad)
Convierte una cadena a letras minúsculas.

Función strupr ()
Sintáxis strupr (cad)
Convierte una cadena a letras mayúsculas.

CREACIÓN DE ARRAYS BIDIMIENSIONALES

Se pueden crear arrays de dos o más dimensiones.

Para añadir una dimensión basta con especificar su tamaño dentro de corchetes rectangulares.
Por ejemplo:
int count 1012

25
Un array bidimensional es básicamente un array de arrays unidimensionales y es más fácil imaginarlo en un formato
matricial de filas, columnas.
Se puede acceder a ella fila a fila , de izquierda a derecha. Esto quiere decir que el índice de más a la derecha cambia más
rápido que el de más a ala izquierda, cuando se accede a los elementos del array en el orden en el que se han almacenado en
memoria.

INICIALIZACION DE ARRAYS

A los elementos de un array se les pueden dar valores iniciales.


Se lleva a cabo especificando una lista de valores que tendrán los elementos del array.
Formato general:
tipo nombre_del_array tamaño { lista de valores };

donde: lista_de_valores: Es una lista de constantes separadas por comas de tipo compatible con el tipo base del
array.
La primera constante se colocará en la primera posición del array, la segunda constante
en
la segunda posición y así sucesivamente.
Ejemplo:
int i 5  1, 4, 9, 16, 25 ;
así i0  1; i4  25;

Los arrays de caracteres se pueden inicializar de dos modos:


a) Si el array no contiene una cadena de terminación nulo: simplemente se especifica cada carácter utilizando una lista
separada por comas.
Ejemplo:
char a3  'A' ,'B',' 'C ' ' ;

b) Si el array de caracteres va a contener una cadena: Se puede inicializar el array utilizando una cadena entrecomillada.
Ejemplo:
char nombre 5  "Herb" ;
En esta forma de inicialización no se utilizan los corchetes.
Dado que las cadenas deben terminar con un carácter nulo se debe cerciorar de que el array que se declare sea lo
suficientemente grande para incluir el carácter nulo.

Los arrays multidimensionales sé inicializan del mismo modo que los unidimensionales:
Ejemplo:
int sqr 3 3  { así sqr0 0 tiene el 1
1, 2, 3 sqr0 1 tiene el 2
4, 5, 6 sqr0 2 tiene el 3
7, 8, 9
};

Si sé inicializa un array unidimensional no se tiene que especificar el tamaño del array, basta con no poner nada dentro de
los corchetes rectangulares.
Así el compilador solo cuenta él numero de constantes de inicialización y lo toma como tamaño para el array.
Ejemplo:
int pwr    { 1, 2, 4, 8, 16, 32, 64, 128 }

Los arrays que no tienen especificadas sus dimensiones se llaman arrays de tamaño indeterminado.
Un array de tamaño indeterminado es útil ya que es más fácil cambiar el tamaño de la lista de inicialización sin tener que
contarla y después cambiar la dimensión del array.
Para los arrays multidimensionales se tienen que especificar todas menos la dimensión de más a la izquierda, para permitir
que el compilador indexe el array adecuadamente.
Así se pueden construir tablas de longitud variable, asignando el compilador automáticamente espacio de almacenamiento
suficiente para ellas.
Ejemplo:

26
int sqr   3  {
1, 2, 3
4, 5, 6
7, 8, 9
};

CONSTRUCCION DE ARRAYS DE CADENAS

Los arrays de cadenas , a menudo llamados tablas de cadenas son muy comunes.
Una tabla de cadenas bidimensional se crea como cualquier otro array bidimensional.

Ejemplo:
char nombres 10  40;
Tabla que contiene:
10 cadenas cada hasta con 40 caracteres de longitud(incluyendo el carácter
de terminación nulo.
Para acceder a una cadena dentro de la tabla , se especifica el primer índice.

P U N T E R O S

( APUNTADORES )

Un puntero es básicamente la dirección de un objeto.

27
FUNDAMENTOS DE LOS PUNTEROS

Un puntero e es una variable que guarda la dirección de memoria de otro objeto.

Ejem:
Si una variable p contiene la dirección de otra variable llamada q , entonces se dice que p apunta a q.

Para declarar una variable de puntero:

tipo *nombre-de-variable;
donde:
tipo = es el tipo base del puntero.

El tipo base especifica el tipo del objeto al que puede apuntar el puntero.
El asterisco que precede al nombre de la variable indica que se esta creando una variable de puntero.

Ejem:

La sentencia crea un puntero a un entero:

int *p;

C contiene dos operadores de puntero especiales: * y &.

& devuelve la dirección de la variable a la que precede. ( se puede expresar como “dirección de”).
* devuelve el valor almacenado en la dirección a la que precede.( se puede expresar como “ en la dirección “).

Cuando el valor se referencia a través de un puntero, al proceso se le llama indirección.

Es posible utilizar el operador * al lado izquierdo de una sentencia de asignación para asignar un nuevo valor a una
variable utilizando un puntero a ella.

Aunque C permite que cualquier puntero apunte a a cualquier lugar de memoria, el tipo base es lo que determina como se
tratara el objeto apuntado.

En general el compilador utiliza el tipo base para determinar cuantos bytes hay en el objeto al que apunta el puntero.
Así es como se sabe cuantos bytes habrá de copiar cuando se hace una asignación indirecta, o cuantos bytes comparar
cuando se hace una comparación indirecta.

**No utilizar nunca un puntero de un tipo para apuntar a un objeto de un tipo distinto. **
La declaración de una variable de puntero simplemente crea una variable capaz de contener una dirección de memoria.

RESTRICCIONES DE LAS EXPRESIONES DE PUNTEROS.

Operadores aritméticos Los punteros se pueden utilizar como otras variables. Pero existen algunas restricciones:

Solamente hay cuatro operadores que se pueden aplicar a las variables de puntero:

28
Los operadores aritmeticos : + , ++ , - , -- .

Solo se pueden sumar o restar cantidades enteras.

Ejem:
No se puede sumar u numero en punto flotante a un puntero.

La aritmética de punteros se hace en relación al tipo base del puntero.


Cada vez que se incremente un puntero, apuntara al siguiente elemento, atendiendo a su tipo de base, mas allá del que este
apuntando actualmente.

La aritmética de punteros se puede realizar cuando se utilizan punteros a char .

Dado que los caracteres tienen una longitud de un byte, un incremento aumenta el valor del puntero en uno y un decremento
reduce su valor en uno.

Se puede sumar o restar cualquier cantidad entera que se quiera a un puntero.

Aparte de sumar o restar de un entero, no se puede realizar ningún otro tipo de operación aritmética ( no se puede
multiplicar, dividir o sacar el modulo de un puntero).Pero se puede restar un puntero de otro para hallar el numero de
elementos que los separa.

Se pueden aplicar los operadores de incremento o decremento bien al propio puntero o al objeto al que apunta.
Para incrementar a lo que un puntero apunta se debe hacer de la siguiente forma:

(*p)++;

El paréntesis hace que se incremente el valor al que apunta p.

Se pueden comparar dos punteros utilizando los operadores relacionales.

Pero las comparaciones de puntero solo tienen sentido si los punteros se relacionan entre si.

Se puede utilizar printf( ) para mostrar la dirección de memoria contenida en un puntero utilizando el especificador de
formato
%p.

UTILIZACIÓN DE PUNTEROS CON ARRAYS.

29
Existe una estrecha relación entre los punteros y los arrays. A menudo son intercambiables.

Esta relación entre los dos es la que hace su implementación sea única y potente.

Cuando se utiliza un nombre de array sin índice se esta generando un puntero al principio del array . Esto es por lo que no se
utilizan índices cuando se lee una cadena utilizando gets( ).

Lo que se esta pasando a gets ( ) no es un array, sino un puntero.

En C no se puede pasar un array a una función solamente se puede pasar un puntero al array.

La función gets ( ) utiliza el puntero para cargar el array al que apunta con los caracteres que se introducen por teclado.

Como un nombre de array sin índice es un puntero al principio del array, se puede asignar ese valor a otro puntero y acceder
al array utilizando aritmética de punteros.

Para utilizar un puntero como medio de acceso a arrays multidimensionales, se debe hacer manualmente lo que el
compilador hace en forma automática.

Ejem:
float balance [10] [5];
Para acceder a balance [3][1], se debe hacer lo siguiente:
*( p + (3 * 5) + 1)

Para alcanzar el elemento deseado, se debe multiplicar el numero de fila por el numero de elementos de la fila
y después sumar el numero del elemento dentro de la fila.

Los punteros y arrays están vinculados por mas que el simple hecho de que se pueda acceder a los elementos del array por
aritmética de punteros.

Un puntero se puede indexar como si fuese un array pero, solamente se debe indexar un puntero cuando ese puntero apunta
a un array.

Se puede utilizar aritmética de punteros en lugar de indexación de arrays para acceder a los elementos del array.
No se puede sin embargo, modificar el valor del puntero que se ha generado utilizando un nombre de array.

UTILIZACIÓN DE PUNTEROS A CONSTANTES DE CADENA

C permite que se utilicen constantes de cadena encerradas entre dobles comillas en un programa.
Cuando el compilador encuentra una cadena así la almacena en la tabla de cadenas del programa y genera un puntero a la
cadena.

Ejem:

#include <stdio.h>
main ( )
{
char *p;
p = “uno dos tres”; /* p se declara como un puntero a carácter */
printf (p);
}

CREACIÓN DE ARRAYS DE PUNTEROS

30
Los punteros pueden estructurarse como arrays igual que cualquier otro tipo de dato.
Ejem:
int *pa[20];

La sentencia declara un array de punteros a enteros que contiene 20 elementos.

pa[80] = &mivar;

La dirección de una variable entera se asigna al noveno elemento del array.

INDIRECCION MÚLTIPLE

Es posible hacer que un puntero apunte a otro puntero. A lo anterior se le llama Indireccion Múltiple.
Cuando un puntero apunta a otro puntero, el primer puntero contiene la dirección del segundo puntero, el cual apunta a la
posición que contiene el objeto.

Para declarar un puntero a un puntero se coloca un asterisco adicional delante del nombre del puntero.
Ejem:
char **mp;

El acceso al valor objetivo al que apunta indirectamente un puntero a puntero requiere que se aplique dos veces el operador
asterisco.
La indireccion múltiple no se limita solamente a puntero a puntero. Se puede aplicar el * tanto como se necesite, pero no
es recomendable.

UTILIZACIÓN DE PUNTEROS COMO PARÁMETROS

Los punteros se pueden pasar a funciones.

Cuando se pasa un puntero a una función , la función se debe declarar como receptora de un puntero del mismo tipo.
Cuando se pasa un puntero a una función, el código dentro de esa función tiene acceso a la variable a la que apunta el
parámetro.

Esto es que la función puede cambiar la variable utilizada para llamar a la función.

FUNCIONES ESPECIALES

31
Numeros aleatorios

Para obtener números aleatorios normalmente se usa la función rand(); que devuelve un entero entre 0 y RAND_MAX
numero = x + rand() % y;
donde x es el primer elemento del intervalo deseado de valores aleatorios y y es el número de elementos del intervalo
deseado. Por ejemplo, un número aleatorio de 2 a 5, el intervalo empieza en 2 y está formado por cuatro números:
numero = 2 + rand() % 4;

Obtener numeros aleatorios en C++ (rand, srand)


Lo primero que se tiene que hacer es incluir la librería:
#include<stdlib.h>

Se necesita esta libreria para usar la función time()


#include<time.h>

Luego inicializar los números aleatorios incluyendo esto:


srand(time(NULL));

Luego guardar el número aleatorio en alguna parte:


num = rand();

Para ajustar el rango de número aleatorios podemos hacer varias cosas.

- Número aleatorios entre 0 y 50:


num=rand()%51;

- Número aleatorios entre 1 y 100:


num=1+rand()%(101-1);

- Número aleatorios entre 250 y 420:


num=250+rand()%(421-250);

De forma general es:


variable = limite_inferior + rand() % (limite_superior +1 - limite_inferior)
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int MiRandom(int x)
{
srand(1);
int Numero=0;
Numero=(rand()%x);
return Numero;
}

COLOR

32
Si queremos cambiar el color del texto o fondo a la hora de ejecutar un código de programa en Dev C++, podemos seguir
estos sencillos pasos:

Paso 1:
Ingresamos la librerÌa stdlib.h al inicio del código de programa de la siguiente forma:

#include <stdio.h>

Paso 2:

Dentro del código del programa en la función principal (main), escribimos:

system (COLOR color de fondo color de letra);

Donde en color de fondo y color de letra son números hexadecimales (De 0 a F) que equivalen a un color.

Paso 3:

A continuación la lista de colores que podemos utilizar:

0 = Negro 8= Gris

1= Azul 9= Azul Claro

2= Verde A= Verde Claro

3= Aguamarina B= Aguamarina Claro

4= Rojo C= Rojo Claro

5= Púrpura D= Púrpura Claro

6= Amarillo E= Amarillo Claro

7= Blanco F= Blanco Brillante

Por Ejemplo si queremos que a la hora de ejecutar un código de programa con fondo de color azul y texto de color rojo,
ingresamos:

system(color 14);

SONIDO

FUNCIÓN: BEEP

Para ingresar sonido a un programa, se escribe:


BEEP (nota,velocidad)
Donde
Nota musical

FRECUENCIA DE LAS NOTAS MUSICALES

33
DO--523
RE--587
MI--659
FA--699
SOL--784
LA--880
SI--988

Velocidad: Es la frecuencia en mSeg., mientras más alta sea la velocidad de reproducción será menor.

BEEP (523,500);

(Sound)

>>

#include <windows.h>
#include <mmsystem.h>
#include <cstdlib>

using namespace std;

int main()
{

char soundfile[] = "C:/WINDOWS/Media/Apagado de Windows XP.wav" ;


PlaySound((LPCSTR)soundfile, NULL, SND_FILENAME | SND_ASYNC );

system("PAUSE");

return 0;
}

<<

** Nota: Es necesario especificar al linker la inclusión de la librería winmm para la función PlaySound

- Agregas este parametro a tu linker: -lwinmm


- Nombre de la librería para Dev-Cpp: libwinmm.a (en caso de problemas y lo tenga que agregar manualmente)

RETARDO

FUNCIÓN: SLEEP
Hace que la ejecución del programa sea lenta, entre mas grande sea el valor mas lenta será la salida, está dada en mS

#include <Windows.h>
Sleep(500);

FUNCIONES DE ESCRITURA

34
Uso del archivo de cabecera

#include <ctype.h>

toupper
sintaxis toupper (variable);
Cambia un carácter a mayúsculas.

tolower
sintaxis tolower (variable);
Cambia un carácter a minúsculas.

- La variable debe ser tipo carácter.

isalpha
sintaxis if (isalpha (c) ¡= 0 );

Verifica si un carácter es alfabético. Devuelve un valor distinto de 0, si c es un carácter alfabético; o 0 , si c no es alfabético.

isdigit

sintaxis if (isdigit (c) ¡=0);

Verifica si es un número. Devuelve un número distinto de 0, si es un digito; o un 0 si no es un digito. (0 – 9)

islower

sintaxis if (islower (c) );

if (islower (c) printf(‘%c es una letra minúscula’,c);

Indica si es una letra minúscula.

isupper

sintaxis if (isupper (c) );

if (isupper (c) printf(‘%c es una letra mayúscula’,c);

Indica si es una letra mayúscula.

fflush

sintaxis fflush (var)


Vacía los buffers

Operador
+= ------- m += n------------m = m + n;
-= -------- m -= n ------------m = m – n;
*= ---------m *= n ------------m = m * n;
/= ----------m /= n ------------m = m / n;
%= --------- m % = n ---------m = m % n;

35

You might also like