Lenguaje C+++
Lenguaje C+++
Lenguaje C+++
1
Evolución del lenguaje C
1978.
este lenguaje.
estándar C++.
2
2.1. Conceptos básicos de C.
#include <stdio.h>
#define PI 3.14159
float procesar(float radio);
main()
{
float radio, area;
printf (“Radio = ?”);
scanf(“%f”, &radio);
area = procesar(radio);
printf(“Area = %f”, area);
}
float procesar(float r)
{
float a;
a = PI * r * r;
return(a);
}
3
2.1.2. El conjunto de caracteres de C.
- Letras mayúsculas
- Letras minúsculas
- Dígitos del 0 al 9
- Caracteres especiales: + - * / = % & # ¿ < > [ ] { } ( ) : ; ....
- Secuencias de escape: \b \n \t
Palabras reservadas.
auto, extern, sizeof, break, float, static, case, for, struct, char, goto, switch,
const, if, typedef....
4
2.1.5. Constantes.
2.1.6. Variables.
5
2.1.7. Declaraciones.
int c = 12;
char estrella = ’*’;
float suma = 0.;
double factor = 0.23123e-6;
char texto[10] = ”casa”; (automáticamente añade \0 al final de casa)
2.1.8. Instrucciones.
Las acciones de un programa se ejecutan a través de instruciones.
Las instrucciones en C terminan siempre en ;
Las instrucciones compuestas se escriben entre llaves { }
Ejemplos:
a = 3;
c = a + b;
++i;
printf(“Area = %f”, area);
6
2.1.9. Constantes simbólicas.
Ejemplos:
#define INTERES 0.23
#define PI 3.14159
#define TRUE 1
#define FALSE 0
Ejemplos:
printf(“Entero: %d\n”, sizeof i);
printf(“i=%d\n”, i++);
printf(“i=%d\n”, i);
((int) f) % 2 con f en coma flotante
7
2.2.3. Operadores relacionales y lógicos.
Identificador = expresión
Ejemplos:
a = 3;
suma = a+b;
Ejemplo: i=j=5;
La expresión de asignación:
variable1 += variable2
Es equivalente a: variable1 = variable1 + variable2
8
2.2.5. El operador condicional.
9
2.2.6. Funciones de biblioteca.
Función Tipo
abs(i) int Valor absoluto de i
ceil(d) double Redondear por exceso al entero más próximo
cos(d) double Coseno de d
cosh(d) double Coseno hiperbólico de d
exp(d) double Elevar e a la potencia d
fabs(d) double Valor absoluto de d
floor(d) double Redondear por defecto al entero más próximo
fmod(d1,d2) double Resto de d1/d2 (parte no entera del cociente) con
el signo de d1
getchar() int Introducir un carácter del dispositivo de entrada
estándar
log(d) double Logaritmo natural de d
pow(d1,d2) double d1 elevado a la potencia d2
printf(...) int Mandar datos al dispositivo de salida estándar
putchar(c) int Mandar un carácter al dispositivo de salida
estándar
rand() int Devolver un entero positivo aleatorio
sin(d) double Devolver el seno de d
sqrt(d) double Devolver la raíz cuadrada de d
srand(u) void Inicializar el generador de números aleatorios
scanf(...) int Introducir datos del dispositivo de entrada estándar
tan(d) double Tangente de d
toascii(c) int Convertir el valor del argumento a ASCII
tolower(c) int Convertir una letra a minúscula
toupper(c) int Convertir una letra a mayúscula
10
2.3. Entrada y salida de datos.
2.3.1. Introducción.
Variable_carácter=getchar()
La función devuelve un carácter leído del dispositivo de entrada estándar
(teclado). Si encuentra una condición de fin de archivo devuelve la constante
EOF.
Ejemplo:
char c;
c = getchar();
putchar(variable_caracter)
La función transmite un carácter al dispositivo de salida estándar (pantalla).
Ejemplo:
#include <stdio.h>
#include <ctype.h>
main()
{
char letras[80];
int cont, auxiliar;
for (cont = 0; (letras[cont ] = getchar()) != ‘\n’; ++cont);
auxiliar = cont;
for (cont = 0; cont < auxiliar; ++cont)
putchar(toupper(letras[cont]));
}
11
2.3.4. Entrada de datos. Función scanf.
g Coma flotante
h Entero corto
i Entero decimal, octal o hexadecimal
o Entero octal
s Cadena de caracteres seguida del carácter espaciado (se
añade \0 al final)
u Entero decimal sin signo
x Entero hexadecimal
[...] Cadena de caracteres que puede incluir caracteres de
espaciado
Ejemplo:
main()
{
char concepto[20];
int no_partida;
float coste;
.....
scanf(“%s %d %f”, concepto, &no_partida, &coste);
......
}
12
Ejemplo:
#include <stdio.h>
main()
{
char linea[80];
.....
scanf(“%[ ABCDEFGHIJKLMNOPQRSTUVXYZ]”, linea);
......
}
Ejemplo:
#include <stdio.h>
main()
{
char linea[80];
.....
scanf(“%[^\n]”, linea);
......
}
Es posible limitar el número de caracteres especificando una longitud de
campo máxima para cada dato.
Ejemplo:
#include <stdio.h>
main()
{
int a;
float b;
char c;
.....
scanf(“%3d %5f %c”, &a, &b, &c);
......
}
Si introducimos 10 256.875 T se asignarán los valores: a 10, b 256.8 y c 7
13
2.3.5. Salida de datos. Función printf.
Transfiere los datos de los argumentos a la salida estándar con el formato que
se indica en la cadena de control.
Carácter Significado
de conversión
c Carácter
d Entero decimal con signo
e Coma flotante con exponente
f Coma flotante sin exponente
g Coma flotante
i Entero con signo
o Entero octal sin el cero inicial
s Cadena de caracteres
u Entero decimal sin signo
x Entero hexadecimal sin el prefijo 0x
Ejemplo:
#include <stdio.h>
main()
{
char concepto[20];
int no_partida;
float coste;
.....
printf(“%s %d %f”, concepto, no_partida, coste);
......
}
14
Ejemplo:
#include <stdio.h>
main() /*leer y escribir una línea de texto*/
{
char linea[80];
scanf(“ %[^\n]”, linea);
printf(“%s”, linea);
}
15
También es posible especificar la precisión:
Ejemplo:
#include <stdio.h>
main()
{
float x = 123.456;
printf(“%7f %7.3f %7.1f\n\n”, x, x, x);
printf(“%12e %12.5e %12.3e”, x, x, x);
}
Indicador Significado
16
2.3.6. Funciones gets y puts.
gets(cadena)
puts(cadena)
Ejemplo:
#include <stdio.h>
main()
{
char linea[80];
gets(linea);
puts(linea);
}
17
2.4. Instrucciones de control.
if (expresión) instrucción
La instrucción se ejecutará sólo si la expresión tiene un valor no nulo
(expresión cierta). La expresión puede ser simple o compuesta.
18
2.4.2. Instrucción while.
Ejemplo:
#include <stdio.h>
main()
{
int digito = 0;
while (digito <= 9) {
printf(“%d\n”, digito);
++digito;
}
}
Ejemplo:
#include <stdio.h>
main()
{
int digito = 0;
do
printf(“%d\n”, digito++);
while (digito <= 9);
}
19
2.4.4. Instrucción for.
El ciclo es equivalente a:
expresión1;
while (expresión2) {
instrucción
expresión3;
}
Ejemplo:
#include <stdio.h>
main()
{
int digito = 0;
for (digito = 0; digito <= 9; ++digito)
printf(“%d\n”, digito);
}
20
2.4.5. Instrucción switch.
21
2.4.6. Instrucción break.
Se utiliza para terminar la ejecución de los bucles while, do-while, for, o para
salir de la instrucción switch.
Ejemplo:
scanf(“%f”, &x);
while (x <= 100) {
if (x < 0) {
printf(“ERROR”);
break;
}
/*procesar el valor no negativo de x*/
}
Ejemplo:
22
2.4.8. Instrucción goto.
goto etiqueta;
Ejemplo:
/*bucle principal*/
scanf(“%f”, &x);
while (x<= 100) {
.......
if (x < 0) goto error;
......
scanf (“%f”, &x);
}
23
2.5. Funciones.
2.5.1. Introducción.
- Funciones de librerías de C
- Funciones definidas por el programador
Cabecera de la función:
tipo nombre(tipo1 arg1, tipo2 arg2, .... tipon argn)
Tipo es el tipo de dato que devuelve la función
Los argumentos se denominan argumentos o parámetros formales.
Cuerpo de la función: instrucción compuesta que debe incluir una o más
instrucciones
return expresión para devolver el control al punto de llamada.
Ejemplo:
char minus_mayus (char c1)
{
char c2;
c2 = (c1 >= ’a’ && c1 <= ‘z’) ? (‘A’ + c1 – ‘a’) : c1;
return (c2);
}
24
2.5.3. Llamada a una función.
Los argumentos serán ahora los parámetros reales de la función y pueden ser
constantes, variables o expresiones. La función devuelve un valor del tipo que
aparece en la definición.
Ejemplo:
#include <stdio.h>
25
2.5.4. Prototipos de funciones.
Ejemplo:
#include<stdio.h>
long int factorial(int n)
{
int i;
long int prod = 1;
if (n > 1)
for (i = 2; i <= n; ++i)
prod *= i;
return (prod);
}
main ()
{
int n;
printf(“\nn = “);
scanf(“%d”, &n);
printf(“\nn! = %ld”, factorial(n));
}
26
Ejemplo:
#include <stdio.h>
long int factorial(int n);
main ()
{
int n;
printf(“\nn = “);
scanf(“%d”, &n);
printf(“\nn! = %ld”, factorial(n));
}
long int factorial(int n)
{
int i;
long int prod = 1;
if (n > 1)
for (i = 2; i <= n; ++i)
prod *= i;
return (prod);
}
27
2.6. Estructura de un programa. Tipos de variables.
2.6.1. Tipos de variables.
Según su tipo de almacenamiento:
auto, extern, static, register
Ejemplo:
auto int a, b, c;
extern float raiz1, raiz2;
static int cont = 0;
extern char asterisco;
28
2.6.4. Variables estáticas (static).
Si una variable local (o estática) de una función tiene el mismo nombre que una
externa, dentro de la función prevalece la variable local (o estática).
Ejemplo:
float a, b, c; /*variables externas*/
void ficticio(void);
main()
{
static float a; /*variable estática real a*/
......
}
void ficticio(void)
{
static int a; /*variable estática entera a*/
int b;
}
29
2.6.5. Programas de varios archivos.
Ejemplo:
Primer archivo
#include <stdio.h>
extern void salida(void);
main()
{
salida();
}
segundo archivo
extern void salida(void)
{
printf(“HOLA”);
return;
}
30
2.7. Tablas.
2.7.1. Definición.
Colección de datos del mismo tipo, con un nombre común y uno o varios
índices (enteros no negativos) que recorren los datos.
Ejemplos:
int x[100];
char texto[80];
static char mensaje[25];
static float n[12];
Ejemplo:
#include <stdio.h>
#include <ctype.h>
#define TAMANO 80
main()
{
char letras[TAMANO];
int cont;
for (cont = 0; cont < TAMANO; ++cont)
letras[cont] = getchar();
for (cont = 0; cont < TAMANO; ++cont)
putchar(toupper(letras[cont]));
}
31
Las tablas automáticas, a diferencia de las variables automáticas, no pueden ir
inicializadas.
Para hacerlo, tendremos que definirlas como externas o estáticas. En ese caso,
los valores iniciales irán ordenados, separados por comas y entre llaves.
Ejemplo:
int digitos[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
static float x[6] = {0, 0.25, 0, -0.5, 0, 0}
char color[4] = {‘R’, ‘O’, ‘J’, ‘O’};
32
2.7.3. Tablas como parámetros de funciones.
Ejemplo:
float media(int a, float x[]);
main()
{
int n;
float med;
float lista[100];
.......
med = media(n, lista);
.......
}
float media(int a, float x[])
{
..............
}
33
2.7.4. Tablas multidimensionales.
Ejemplo:
float tabla[50][50];
char pagina[24][80];
static double registros[K][M][N];
int valores[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int val[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
34
2.7.5. Tablas y cadenas de caracteres.
Existen funciones para el tratamiento de cadenas de caracteres en string.h
Ejemplo: Ordenar alfabéticamente una lista de cadenas de caracteres.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reordenar (int n, char x[][12]);
main
{
int i, n=0;
char x[10][12];
printf(“Introducir una cadena. Escribir \’FIN\’ para terminar \n”);
do {
printf(“cadena %d: “, n +1);
scanf(“%s”, x[n]);
} while (strcmp(x[n++], “FIN”));
n--;
reordenar(n, x);
printf(“\n\nLista reordenada de cadenas \n”);
for (i= 0; i < n; ++i) printf(“\ncadena %d: %s”, i +1, x[i]);
}
void reordenar(int n, char x[][12])
{ char temp[12];
int i, elem;
for (elem = 0; elem < n –1; ++elem)
for (i = elem + 1; i < n; ++i)
if (strcmp(x[elem], x[i]) > 0) {
strcpy(temp, x[elem]);
strcpy(x[elem], x[i]);
strcpy(x[i], temp);
}
return;
}
35
2.8. Punteros.
2.8.1. Conceptos básicos.
&v dirección de v
pv = &v asignamos a pv la dirección de v
*pv contenido de la dirección de v (valor)
Dirección de v Valor
pv v
tipo_dato *ptvar;
Ejemplo:
#include <stdio.h>
main()
{
int v = 3;
int *pv;
pv = &v;
printf(“\n*pv=%d v=%d“, *pv, v);
*pv = 0;
printf(“\n\n*pv=%d v=%d”, *pv, v);
}
36
2.8.3. Paso de punteros a una función.
Permite el paso de parámetros por referencia.
Ejemplo:
#include <stdio.h>
void func1(int u, int v);
void func2(int *pu, int *pv);
main()
{
int u = 1;
int v = 3;
printf(“\nAntes de la llamada a func1: u=%d v=%d”, u, v);
func1(u, v);
printf(“\nDespués de la llamada a func1: u=%d v=%d”, u, v);
printf(“\nAntes de la llamada a func2: u=%d v=%d”, u, v);
func2(&u, &v);
printf(“\nDespués de la llamada a func2: u=%d v=%d”, u, v);
}
void func1(int u, int v)
{
u = 0;
v = 0;
printf(“\nDentro de func1: u=%d v=%d”, u, v);
return;
}
void func2(int *pu, int *pv)
{
*pu = 0;
*pv = 0;
printf(“\nDentro de func2: *pu=%d *pv=%d”, *pu, *pv);
return;
}
37
Salida:
Antes de la llamada a func1: u=1 v=3
Dentro de func1: u=0 v=0
Después de la llamada a func1: u=1 v=3
38
2.8.5. Asignación dinámica de memoria.
Podemos definir una tabla como un puntero: int *x en lugar de int x[10]
Si x es una variable puntero tendremos que asignarle memoria dinámicamente:
x = (int *) malloc(10 * sizeof(int));
#include<stdio.h>
#include<stdlib.h>
void reordenar(int n, int *x);
main()
{
int i, n, *x;
printf(“ \n¿Cuántos valores serán introducidos? ”);
scanf(“%d”, &n);
printf(“\n”);
x = (int *) malloc(n * sizeof(int));
for (i = 0; i<n; ++i) {
printf(“i = %d x = “, i + 1);
scanf(“%d”, x + i);
}
reordenar(n, x);
printf(“\n\nLista de números reordenada: \n\n”);
for (i = 0; i < n; ++i)
printf(“i = %d x = %d\n“, i + 1, *(x + i));
}
void reordenar(int n, int *x)
{
int i, elem, temp;
for (elem = 0; elem < n – 1; ++elem)
for (i = elem + 1; i < n; ++i)
if (*(x+i) < *(x + elem)) {
temp = *(x + elem);
*(x + elem) = *(x + i);
*(x + i) = temp;
}
return;
}
39
2.8.6 Punteros y tablas multidimensionales.
tipo_dato (*ptvar)[expresión2]
Ejemplo: La tabla int x[10][20] se puede definir como: int (*x) [20]
tipo_dato *ptvar[expresión1]
40
2.9. Estructuras y uniones.
2.9.1 Definición de una estructura.
struct marca {
miembro1;
miembro2;
.....
miembrom;
};
los miembros pueden ser variables, punteros, tablas u otras estructuras.
Ejemplo:
struct cuenta {
int no_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
};
struct cuenta antiguocliente, nuevocliente;
41
2.9.3 Tipos de datos definidos por el usuario.
Ejemplo:
typedef int edad;
edad varon, hembra;
Ejemplo:
typedef struct {
int no_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
} registro;
registro anteriorcliente, nuevocliente;
42
2.9.4 Estructuras y punteros.
pc = &cliente;
Para acceder a un miembro en términos de su correspondiente variable
puntero
pc->no_cuenta
que equivale en este caso a: cliente.no_cuenta (*pc).no_cuenta
43
Ejemplo:
#include <stdio.h>
typedef struct {
char *nombre;
int no_cuenta;
char tipo_cuenta;
float saldo;
} registro;
main()
{
static registro cliente = {“Lázaro”, 3333, ‘A’, 33.33};
printf(“%s %d %c %.2f\n”, cliente.nombre, cliente.no_cuenta,
cliente.tipo_cuenta, cliente.saldo);
ajustar(&cliente);
printf(“%s %d %c %.2f\n”, cliente.nombre, cliente.no_cuenta,
cliente.tipo_cuenta, cliente.saldo);
}
44
2.9.6 Estructuras autorreferenciadoras.
struct marca {
miembro1;
miembro2;
.....
struct marca *nombre;
};
Ejemplo:
struct lista_elementos {
char elem[40];
struct lista_elementos *sig;
};
45
2.9.7 Uniones.
Las uniones se componen de miembros que comparten el mismo área de
almacenamiento.
union marca {
miembro1;
miembro2;
......
miembrom;
};
Ejemplo:
union id {
char color[12];
int talla;
} camisa, blusa;
46
2.10. Enumeraciones.
o lo que es lo mismo:
Ejemplo:
enum colores {negro, azul, cian, verde, magenta, rojo, blanco, amarillo} color;
Ejemplo:
enum boolean {FALSE, TRUE};
FALSE-0 y TRUE-1.
47