Title: INTRODUCCI
1INTRODUCCIÓN AL LENGUAJE C
2Entrada y Salida
- En C la Entrada y Salida de datos se realiza a
través de operaciones de flujos (streams). - Estos flujos están definidos en la librería
iostream.h que deberá ser incluída en el programa.
3Salida cout
- cout corresponde al flujo de SALIDA.
- Normalmente corresponde a la pantalla del
usuario. - El operador de insercción, ltlt, inserta datos en
el flujo cout. Por ejemplo -
coutltlt Mensaje de prueba coutltlt
500ltlt600ltlt700 int i5, j10,m100 coutltlt "El
valor de i es"ltlti ltlt j ltlt m
4Salida Formato
- cout.setf(iosfixed) Imprime en formato punto
fijo (scientific es el estándar) - cout.setf(iosshowpoint) Imprime mostrando el
punto decimal. - cout.precision(n) Cantidad de decimales de
precisión - cout.width(n) Espacios para mostrar un valor.
- cout.setf(iosright) Justifica el texto a
imprimir a la derecha. (left)
5Entrada cin
- Proporciona un flujo de entrada.
- El operador de extracción gtgt, extrae valores del
flujo y lo almacena en variables. - Normalmente el flujo de entrada es el teclado.
- int numero1, numero2
- cingtgtnumero1
- cingtgtnumero2
6Ingresar 2 edades y determinar quién es mayor
Ejercicio
include ltiostream.hgt void main() cout ltlt
"Ingrese su edad " int miEdad cin gtgt
miEdad cout ltlt "Ingrese la edad de un amigo
" int suEdad cin gtgt suEdad if
(miEdad lt suEdad) cout ltlt "Yo soy menor
que mi amigo \n " else if (miEdad gt
suEdad) cout ltlt "Mi amigo es menor
que yo \n " else cout ltlt
"Mi amigo y yo tenemos la misma edad \n "
7Tipos de DatosELEMENTALES
8Tipos de Datos Numéricos
Tipo Ejemplo Bytes Rango
char a 1 0..255
short -15 1 -128..127
int 1024 2 -32768..32767
long 262144 4 -2147483648..2147483637
float 10.5 4 3.410E-38.3.410E308
double 0.00045 8 1.710E-308..1.710E308
9Punteros
- Una variable que puede almacenar una dirección de
memoria se llama puntero. - Una variable de tipo puntero puede guardar
direcciones de variables de un tipo determinado
punteros a int, double, char, etc.
10Declaración de punteros
- tipo nombre_variable
- int i3, p,r // p y r son punteros a entero
- double d3.3,q // q es un puntero a double
- char c'a', t // t es un puntero a carácter
- pi
- rp
- p q es un ERROR porque son punteros de
diferente tipo.
11Otras operaciones con punteros
- cingtgtp
- if (pr)
- coutltlt"El valor de i es "ltltp
- pp3
- pp3
12Mostrar una dirección
- Es posible mostrar el una dirección como valor de
una variable de tipo puntero, o la dirección de
cualquier variable, en la pantalla utilizando un
cout. - cout ltlt p ltlt p ltlt endl
- cout ltlt n ltlt n ltlt endl
- cout ltlt p ltlt p ltlt endl
13Ejemplo Ilustrativo
1. int p, q, a5
2. pa
a
a
5
a
a
14Ejemplo Ilustrativo
a
a
b
NOTA a,b,p,q variables locales automáticas
15Ejemplo 1
- void main()
- int x, y, p, q
- p x
- p 5
- q y
- q 23
- cout ltlt p ltlt " ltlt q ltlt endl
- q p
- p 35
- cout ltlt p ltlt " ltlt q ltlt endl
- q NULL
- cout ltlt x ltlt " ltlt y ltlt endl
16Ejemplo 2
- void main()
-
- int p, q, x, y
- p x
- p 14
- q p
- cout ltlt p ltlt " " ltlt q ltlt endl
- q NULL
- cout ltlt x ltlt " ltlt y ltlt endl
17Ejemplo 3
- void main()
- int x, y, p, q
- p x
- p 12
- q y
- q 23
- cout ltlt p ltlt" "ltltqltltendl
- p q
- cout ltlt p ltlt" "ltltqltltendl
- q NULL
- coutltltpltltendl
- coutltltxltlt" "ltltyltltendl
18Ejemplo 4
- void main()
- int x, y, p, q
- p x
- p 14
- q p
- if ( p q) coutltlt"Mensaje 1"
- q y
- if ( p q) coutltlt"Mensaje 2"
- q 14
- if (p q) coutltlt"Mensaje 3"
- if (p q) coutltlt"Mensaje 4"
19Tipos enumerados
- enum Frutas Manzana, Pera, Guinda, Kiwi,
- enum Color Rojo10, Verde, Azul
- enum Raza Pastor, Cooker, Poodle, Setter,
Collie
void main() Color cVerde if
(cVerde) coutltlt"Color VERDE"
20Tipos de DatosESTRUCTURADOS
21Tipos de Datos Arreglos
- Permite definir variables estructuradas
homogéneas. - Vectores o Arreglos Unidimensionales
-
int v10
int v1041,23,87,19,-9
int v41,23,87,19,-9,91,103,25,11,22
coutltltv3
22Tipos de Datos Matrices
- Matrices o Arreglos Bidimensionales
-
0 1 2
float a53 int x5333,21,47,
82,91,95,
50,72,45, 36,79,63,
53,60,74
33 21 47
82 91 95
50 72 45
36 79 63
53 60 74
0 1 2 3 4
coutltlta32
23Tipos de Datos Strings
- Strings Vector de caracteres, que termina con el
caracter NULO '\0' -
char s5 char s15'h','o','l','a','\0' char
s25"hola" char s3"hola"
typedef char String5 String s
24Tipos de Datos Strings
- Lee del flujo de entrada un string.
- Deja para la siguiente lectura el '\n'
- No reconoce el espacio inicial en las entradas
cingtgts
Ingresar Este es un ejemplo
i1 do cingtgts coutltltiltlt" "ltltsltltendl i w
hile (ilt5)
25Tipos de Datos Strings
cin.getline(s, largo)
- Lee del flujo de entrada un string de largo
caracteres. - La lectura termina
- Con la línea ('\n'), si la cantidad de caracteres
es menor que largo. - Cuando se extraído la cantidad largo de
caracteres, aunque NO haya terminado la línea.
26Tipos de Datos Strings
i1 do cin.getline(s,20) coutltltiltlt"
"ltltsltltendl i while (ilt5)
27Tipos de Datos Strings
- strlen(string)
- strcpy(destino,origen)
- strcmp(string1, string2)
- 0 Si string1 string2
- 1 Si string1 gt string2
- -1 Si string1 lt string2
28Tipos de Datos Strings
- include ltiostream.hgt
- include ltstring.hgt
- void main()
- char x5
- char y"Hola"
-
- strcpy(x,y)
- coutltlt"x"ltltxltltendl
- coutltlt"y"ltltyltltendl
29Tipos de Datos Strings
- include ltiostream.hgt
- include ltstring.hgt
- void main()
- char x
- char y"Hola"
-
- xnew charstrlen(y)1
- cin.getline(x,20)
- coutltlt"x"ltltxltltendl
- coutltlt"y"ltltyltltendl
-
30Tipos de Datos Strings
- include ltiostream.hgt
- include ltstring.hgt
- void Copiar(char a, char b)
- strcpy(a,b)
- void main()
- char x
- char y"Hola"
- xnew charstrlen(y)1
- Copiar(x,y)
- coutltlt"x"ltltxltltendl
- coutltlt"y"ltltyltltendl
31Tipos de Datos Strings
- include ltiostream.hgt
- include ltstring.hgt
- void Copiar(char a, char b)
- strcpy(a,b)
- void main()
- char x
- char y"Hola"
- xnew charstrlen(y)1
- Copiar(x,y)
- coutltlt"x"ltltxltltendl
- coutltlt"y"ltltyltltendl
32Tipos de Datos Strings
- include ltiostream.hgt
- include ltstring.hgt
- char Mayor(char a, char b)
- if (strcmp(a,b)gt0)
- return a
- return b
-
- void main()
- char x
- char y"Hola"
- xnew charstrlen(y)1
- cin.getline(x,20)
- coutltlt"El mayor "ltltMayor(x,y)
33Tipos de Datos Estructuras
- Constructor de tipos de dato que permite agrupar
elementos de diversos tipos de datos como UNA
variable.
RUT nom prom
struct int RUT char nom10 float prom
Persona Persona a
a
coutltlt a.prom
34Tipos de Datos Estructuras
struct int hh int mm int ss Hora Hora
h, v10, p h.hh8 ph v3.hh
5 v7(p).hh cout ltltp-gthh ltlt h.hhltltv7.hh
35Nuevos Tipos de Datos
typedef int Vector10 Vector v
typedef float Matriz53 Matriz a
typedef enum Boolean FALSE, TRUE enum Color
Rojo, Verde, Azul, Amarillo
typedef struct Persona char paterno10 char
materno10 char nombre10
36Nuevos Tipos de Datos
typedef union Numero int i float f
Vector v // int v10 Boolean sw
FALSE Persona alumno Numero x
37OBJETOS CONSTANTES
38Objetos Constantes
- Se definen mediante el prefijo const.
- Estos objetos NO puede ser modificada por
asignación. - Sólo se permite su inicialización.
const int x // error x debe ser inicializada x
7 // error x no puede ser
modificada por asignación const int z 3
cout ltlt z ltlt '\n'
39FUNCIONES
40Definición
- Tipo de retorno Nombre ( Parámetros )
- declaraciones locales
- Instrucciones
-
- Las funciones no se pueden anidar.
- Todas las funciones son externas, se pueden
llamar desde cualquier punto del programa.
41Prototipo de funciones
include ltiostream.hgt void f1() void
f2(void) void main() f1() f2()
void f1() cout ltlt "Función sin argumentos
\n" void f2(void) cout ltlt "Función también
sin argumentos \n"
42Tipos de retorno
- Si la función no devuelve un valor int, se debe
especificar el tipo de dato devuelto - char, double, float
- También puede retornar un UN PUNTERO.
- Puede no retornar valores (void).
- Puede retornar una referencia (ALIAS)
lttipogt Nombre(parámetros)
43Declaración (prototipo)
- Tipo_de_retorno Nombre ( Parámetros )
- Se pueden omitir los nombres de los parámetros y
dejar solamente los tipos. - No es necesario declarar las funciones si las
definimos antes de usarlas.
44Variables locales y globales
- Una variable que se declara fuera de las
funciones es una variable global y puede ser
utilizada dentro de todas las funciones del
programa. - Una variable que se declara dentro de una función
es una variable local y solamente puede ser
utilizada dentro de dicha función. Al terminar la
ejecución de la función desaparece.
45Parámetros
- Parámetros Formales
- Son los que se escriben al definir y/o declarar
la función. - Parámetros Actuales
- Son los que se escriben al llamar la función.
Argumentos. - Los parámeros actuales se usan para dar valor
inicial a los parámetros formales o para recibir
valores desde las rutinas.
46Parámetros actuales
- Los parámetros actuales pueden ser
- Valores
- Variables
- Expresiones.
- Ejemplo
-
total CalcArea(20, 4)
L 30 A12 total CalcArea(L,A2)
47Formas de Parametrización
- Parámetros por Valor
- Al llamar a la función se copia valor del
parámetro actual en el parámetro formal. - El parámetro formal se inicializa con el valor de
parámetro actual. - La función trabaja con una copia, por lo tanto
No modifica el valor de la variable o parámetro
actual.
LLAMADA DEFINICIÓN
Ejemplo(a) Ejemplo(a1) Ejemplo(4) void Ejemplo(int x)
48Formas de Parametrización
- Parámetros por Referencia
- Se pasa la dirección del parámetro actual al
parámetro formal - El parámetro actual es ALIAS del parámetro formal
- La función puede cambiar su valor.
LLAMADA DEFINICIÓN
Ejemplo(a) void Ejemplo(intx)
49Ejemplo Por referencia
void Ejemplo(int a, int b) void main( ) int x
2, y 4 Ejemplo(x, y) coutltltxltlt
ltltyltltendl void Ejemplo (int a, int b) a
5 b 8
50Ejemplo
- Escriba una función que calcule el cuadrado y el
cubo de un número entero. - Éstos resultados se DEBEN retornar como
parámetros.
51Ejemplos Prototipos
include ltiostream.hgt int cuadPorVal(int) void
cuadPorInd(int ) void cuadPorRef(int )
52Ejemplos
void main() int x 2, y 3, z 4 cout ltlt
"Por valor x " ltlt cuadPorVal(x) ltlt '\n'
cuadPorInd(y) cout ltlt "Por indirección y
" ltlt y ltlt '\n' cuadPorRef(z) cout ltlt "Por
referencia z " ltlt z ltlt '\n'
53Ejemplos
int cuadPorVal(int a) return a aa void
cuadPorInd(int b) b (b) (b) void
cuadPorRef(int c) c cc
54Prototipos de funciones
include ltiostream.hgt void f1() void
f2(void) main() f1() f2() return 0 void
f1() cout ltlt "Función sin argumentos \n"
void f2(void) cout ltlt "Función también sin
argumentos \n"
55Funciones en línea
- La cláusula inline sugiere al compilador la
generación de una copia del código de esa función
"in situ" (cuando sea apropiado), a fin de
evitar una llamada. - Esta sugerencia es generalmente acogida en el
caso de funciones pequeñas.
56Funciones inline
- inline float cubo(float x)
- return xxx
- void main()
- cout ltlt "Ingrese el largo del lado de un cubo
" - float lado
- cin gtgt lado
- cout ltlt "Volumen del cubo de lado "
- ltlt lado ltlt " es " ltlt cubo(lado) ltlt '\n'
57Memoria Dinámica
int p p new int delete p int
qnew int(3) float tnew float(2,2)
delete q
58Ejemplo Ilustrativo
1. int p, q
2. pnew int
?
59Ejemplo Ilustrativo
. 6. p new ( int)
?
85
60Ejemplo Ilustrativo
8. delete q
9. delete q
?
p q
p q
9
?
?
61Memoria Dinámica
typedef struct int num float
saldo Cuenta Cuenta c cnew Cuenta
62Memoria Dinámica
int v v new int 100 // crea un arreglo
dinámico de 100 int delete v
// libera la memoria dinámica ocupada por v
63Resolución de alcance
Operador
float x 1.23 void main() int x 7 cout ltlt
"x local "ltlt x ltltendl cout ltlt "x global
" ltlt x ltlt endl
64Sobrecarga de funciones
Funciones con igual nombre pero se diferencian, a
lo menos, en uno de los siguientes puntos
- El tipo de dato de la función
- La lista de parámetros
- Cantidad de parámetros
- Tipo de datos de los parámetros
65Sobrecarga de funciones
float cuadrado(int k) return kk float
cuadrado(float x) return xx
void main() cout ltlt "El cuadrado del entero 7 es
" ltlt cuadrado(7) cout ltlt "El cuadrado del
real 1.2 es " ltlt cuadrado(1.2)