Vous êtes sur la page 1sur 137

1.

Ejemplos de Programación en C

2.Lenguaje de programación C/C++


3.Entorno Dev-C++
4.Estructuras de control
5.Arrays y strings
Iñaki Zarauz Loz
6.Funcionesizarauz@fpbidasoa.org
en C/C++
Iñaki Zarauz Leoz
1. Ejemplos de Programación en C pag 2
2. Lenguaje de programación C/C++ pag 33
3. Entorno Dev-C++ pag 45
4. Estructuras de control pag 81
5. Arrays y strings pag 107
6. Funciones en C/C++ pag 121

Iñaki Zarauz Loz


izarauz@fpbidasoa.org
Iñaki Zarauz Leoz
1. Ejemplos de
Programación en C
Iñaki Zarauz Loz
izarauz@fpbidasoa.org
Iñaki Zarauz Leoz
1. Estructura de un programa.
1. Problema: Escribir un mensaje de texto en pantalla

Iñaki Zarauz Leoz


2. Definición de variables
2. Problema: Multiplicar dos números y presentar el resultado en pantalla

Iñaki Zarauz Leoz


2. Definición de variables

Iñaki Zarauz Leoz


2. Definición de variables

Iñaki Zarauz Leoz


3. Optimización del código
Ejemplo 3: Multiplicar dos número y mostrar el resultado en pantalla
optimizando el código

Iñaki Zarauz Leoz


4. Conversión de tipos
Ejemplo 4: Conversión de código

Iñaki Zarauz Leoz


5. Tipo char
Ejemplo 5: Asignación de variables tipo char

Iñaki Zarauz Leoz


Secuencias de escape

Iñaki Zarauz Leoz


6. Función sizeof
Ejemplo 6: Utilizar la función sizeof para determinar el valor de
una variable

Iñaki Zarauz Leoz


7. Constantes. Entrada/salidas
Ejemplo 7: Solicitar por teclado el valor del radio de una
circunferencia y presenta en pantalla el valor del perímetro
P= 2·Π·R

Iñaki Zarauz Leoz


8. Función printf
Ejemplo 8:Mostrar en pantalla valores enteros y valores reales

Iñaki Zarauz Leoz


9. Teclado: Scanf
Ejemplo 9: Introducir datos por teclado y mostrarlos en pantalla

Iñaki Zarauz Leoz


10. Intrucción: if-else

Problema 10: Presentar en pantalla opciones múltiples. Al elegir


una por teclado, mostrar en pantalla la elección realizado

Iñaki Zarauz Leoz


11. Intrucción: swich
Ejemplo 11: Solicitar la nota por teclado y mostrar el resultado
de la nota en formato texto (suspenso, aprobado, etc.)

Iñaki Zarauz Leoz


12. Intrucción: swich
Ejemplo 12: Optimizar el código del ejercicio 11

Iñaki Zarauz Leoz


13. Instrucción swich
Ejemplo 13: Implementar un programa que convierta el valor de
las monedas en pesetas a euros o de euros a pesetas

Iñaki Zarauz Leoz


14. Instrucción while
Ejemplo 14: Leer una palabra del teclado y escribirla al revés en
pantalla

Iñaki Zarauz Leoz


15. Instrucción do-while
Ejemplo 15: Sumar dos números introducidos por teclado.
Terminar la ejecución cuando se inserte un valor negativo o
nulo

Iñaki Zarauz Leoz


16. Instrucción for
Ejemplo 16: Implementar un programa que escriba las potencias de
un número

Iñaki Zarauz Leoz


17. Paso de parámetros por valor

Iñaki Zarauz Leoz


18. Manejo de cadenas de caracteres
Ejemplo 18: Manejo de cadenas de caracteres

Iñaki Zarauz Leoz


19. Función strtok
Ejemplo 19: Estudio de la función strtok

Iñaki Zarauz Leoz


20. Argumentos en línea de órdenes

Iñaki Zarauz Leoz


21. Función malloc

Iñaki Zarauz Leoz


22. Función atoi

Iñaki Zarauz Leoz


23. Función itoa

Iñaki Zarauz Leoz


24. Función strcat

Iñaki Zarauz Leoz


25. Función strlen

Iñaki Zarauz Leoz


26. Función strcpy

Iñaki Zarauz Leoz


27. Función strcmp

Iñaki Zarauz Leoz


2. El lenguaje de
programación C

Iñaki Zarauz Loz


izarauz@fpbidasoa.org
Iñaki Zarauz Leoz
Tipos de datos:
o INT: números enteros de 8 bits
o CHAR: datos de 8 bits, principalmente
caracteres.
o LONG: números reales de 16 bits.
o DOUBLE: números reales de 32 bits.

Ej: int a =3;


char a=‘a’;
long pi = 3.1415;
Iñaki Zarauz Leoz
Arrays:
o Nos permiten definir bloques de datos
del mismo tipo:

int primos[] = {1,3,5,7};


int x[2][2]={{1,2},{3,4}};
x[1][2]=3;
int a = primos[3];
char mensaje[] = “hola mundo”;

Iñaki Zarauz Leoz


Operadores:
o Aritméticos:
+ - * / % ++ --
o Relacionales y lógicos:
> >= < <= == != && || !
o Manejo de bits:
& | ^ << >> ~

Iñaki Zarauz Leoz


Estructuras de control:
o Condicionales.
o Decisión múltiple.
o Bucles while y do-while.
o Bucle for.

Iñaki Zarauz Leoz


Condicionales:
if ( portA= = 0x01 )
{
a = 3;
velocidad++;
}
else
if (portA = = 0x02)
{
a =2;
velocidad --;
}
else
{
a =1;
}

Iñaki Zarauz Leoz


Decisión múltiple:
switch ( c )
{
case ‘s’:
si();
break;
case ‘n’:
no();
break;
default:
error ();
}
Iñaki Zarauz Leoz
Bucles while y do-while:
while (! cansado)
{
trabaja ();
}

do {
trabaja ();
} while (! cansado);

Iñaki Zarauz Leoz


Bucle for:
for (inicialización de variables;
condición del bucle;
acción al final de cada iteración)

for (i=0;i<10;i++) {}
for(;;) {} bucle infinito equivalente a
while(1);

Iñaki Zarauz Leoz


Funciones:
Tipo devuelto nombre (parámetros) {}

int cuadrado (int x) {


return x*x;
}

void nada (void){


...
...
return;
}
Iñaki Zarauz Leoz
Funciones:
o La función principal es la función main:
Void main (void)
{
...
...
}
o Las funciones pueden estar en el propio
fichero o en otros (librerías). Estos
ficheros se pueden incorporar a nuestro
código.

Iñaki Zarauz Leoz


Directivas del compilador:
o Para definir valores constantes en
nuestro código (sustitución textual):
#define uno 1
o Para incluir ficheros con librerías:
#include <librería.h>
#include “librería.h”

Iñaki Zarauz Leoz


El lenguaje de
programación C

Iñaki Zarauz Loz


izarauz@fpbidasoa.org

Iñaki Zarauz Leoz


o3. Entorno dev-C++

Iñaki Zarauz Loz


izarauz@fpbidasoa.org

Iñaki Zarauz Leoz


El entorno de Desarrollo de
Dev-C++
oIncluye todas la operaciones
necesarias para crear o modificar
un programa.
oPosee un editor, un compilador y
enlazador y permite ejecutar el
programa de forma controlada y
su depuración.

Iñaki Zarauz Leoz 48


El entorno de Desarrollo de
Dev-C++
oIncluye todas la operaciones
necesarias para crear o modificar
un programa.
oPosee un editor, un compilador y
enlazador y permite ejecutar el
programa de forma controlada y
su depuración.

Iñaki Zarauz Leoz 49


Iñaki Zarauz Leoz 50
Editor
oDispone de una serie de ventanas
en las cuales se puede editar
texto y en las cuales podemos
escribir nuestros programas.

Iñaki Zarauz Leoz 51


Editor
oDispone de una serie de ventanas
en las cuales se puede editar
texto y en las cuales podemos
escribir nuestros programas.

Iñaki Zarauz Leoz 52


Tipos de ficheros en C (I)
o Fuente (.c): Es uno o más fichero escrito en
ascii con las instrucciones que debe
interpretar el programa
o Objeto (.obj): Son ficheros intermedios
creados a partir de la compilación
inteligibles por el montador y transparentes
al programador.
o Librería (.lib): Reúne varios ficheros objeto
en uno solo. Suelen agrupar funciones
estándar.
Iñaki Zarauz Leoz 53
Tipos de ficheros en C (II)
o Cabecera (.h): se utilizan para recoger
definiciones y declaraciones compartidas por
varios ficheros fuente así como las
correspondientes a ficheros objeto que incluyen
funciones estándar. Normalmente el
preprocesador de C lo incluye en el código
fuente.
o Ejecutables (.exe): Se almacena en un único
fichero todo el código máquina de los ficheros
objeto asociados al programa fuente.

Iñaki Zarauz Leoz 54


Tipos de ficheros en C (II)
o Cabecera (.h): se utilizan para recoger
definiciones y declaraciones compartidas por
varios ficheros fuente así como las
correspondientes a ficheros objeto que incluyen
funciones estándar. Normalmente el
preprocesador de C lo incluye en el código
fuente.
o Ejecutables (.exe): Se almacena en un único
fichero todo el código máquina de los ficheros
objeto asociados al programa fuente.

Iñaki Zarauz Leoz 55


Tipos de ficheros en C (II)
o Cabecera (.h): se utilizan para recoger
definiciones y declaraciones compartidas por
varios ficheros fuente así como las
correspondientes a ficheros objeto que incluyen
funciones estándar. Normalmente el
preprocesador de C lo incluye en el código
fuente.
o Ejecutables (.exe): Se almacena en un único
fichero todo el código máquina de los ficheros
objeto asociados al programa fuente.

Iñaki Zarauz Leoz 56


5. El proceso de la compilación

Otros Librerias
fichero y
fuente
otros
ficheros
objeto
Preproceso

Fichero Fichero Fichero


fuente objeto ejecutable
Compilador Montador

Extensión: *.c Extensión: *.exe

Iñaki Zarauz Leoz 57


5. El proceso de la compilación

Otros Librerias
fichero y
fuente
otros
ficheros
objeto
Preproceso

Fichero Fichero Fichero


fuente objeto ejecutable
Compilador Montador

Extensión: *.c Extensión: *.exe

Iñaki Zarauz Leoz 58


5. El proceso de la compilación

Otros Librerias
fichero y
fuente
otros
ficheros
objeto
Preproceso

Fichero Fichero Fichero


fuente objeto ejecutable
Compilador Montador

Extensión: *.c Extensión: *.exe

Iñaki Zarauz Leoz 59


6. La compilación
El menú “Ejecutar” permite compilar
ficheros fuente, enlazarlos con otros
ficheros fuentes y convertirlos en un
fichero ejecutable.

Iñaki Zarauz Leoz 60


6. La compilación
El menú “Ejecutar” permite compilar
ficheros fuente, enlazarlos con otros
ficheros fuentes y convertirlos en un
fichero ejecutable.

Iñaki Zarauz Leoz 61


7. Tipos de errores
• Evidentemente pueden
producirse errores en todo el
proceso antes descrito.
nErrores sintácticos.
nErrores en el enlace.
nErrores en ejecución.
nErrores semánticos.

Iñaki Zarauz Leoz 62


7. Tipos de errores
• Evidentemente pueden
producirse errores en todo el
proceso antes descrito.
nErrores sintácticos.
nErrores en el enlace.
nErrores en ejecución.
nErrores semánticos.

Iñaki Zarauz Leoz 63


8. Errores sintácticos
oLos lenguajes de programación tienen
una sintaxis determinada para que
puedan ser interpretados por el
compilador.
oEl compilador detecta estos defectos
de forma y muestra este tipo de
errores en la ventana de errores del
entorno.
oP.e. Dejarse un punto y coma al
acabar una instrucción.
Iñaki Zarauz Leoz 64
8. Errores sintácticos
oLos lenguajes de programación tienen
una sintaxis determinada para que
puedan ser interpretados por el
compilador.
oEl compilador detecta estos defectos
de forma y muestra este tipo de
errores en la ventana de errores del
entorno.
oP.e. Dejarse un punto y coma al
acabar una instrucción.
Iñaki Zarauz Leoz 65
9. Errores en la fase de montaje
oSe suele tratar de errores a la hora de
nombrar a las funciones, en los tipos o
número de parámetros o del lugar
donde se encuentran.
oSi apareciesen errores al cargar
archivos de cabecera (.h) revisa en
Options la opción Directories, donde
se especifica donde se encuentran los
ficheros .h.
Iñaki Zarauz Leoz 66
10. Errores en ejecución
oEstos errores se dan por que en la
ejecución de los programas ciertos
valores variables se pueden convertir
en ilegales para ciertas operaciones.
oP.e. División por cero, o la raiz
cuadrada de un valor negativo.

Iñaki Zarauz Leoz 67


10. Errores en ejecución
oEstos errores se dan por que en la
ejecución de los programas ciertos
valores variables se pueden convertir
en ilegales para ciertas operaciones.
oP.e. División por cero, o la raiz
cuadrada de un valor negativo.

Iñaki Zarauz Leoz 68


11. Errores semánticos
oSon los más difíciles de detectar y el
entorno no puede ayudarnos, puesto
que se tratan de discrepancias entre lo
que hace el programa y lo que se
pretende que haga.
oDe vez en cuando las advertencias
(warnings) que aparecen en la
ventana de messages permiten darnos
una idea de cual es el problema.
Iñaki Zarauz Leoz 69
12. Mi primer programa en C
o Introduce el siguiente código fuente en el editor de
Dev-C++ y guárdalo como A:\hola.c

Iñaki Zarauz Leoz 70


12. Mi primer programa en C
o Introduce el siguiente código fuente en el editor de
Dev-C++ y guárdalo como A:\hola.c

Iñaki Zarauz Leoz 71


12. Mi primer programa en C
o Ahora prueba a compilarlo.
o Podrás comprobar como aparecen una
pantalla con la compilación.
o Ahora crea el ejecutable con compilar y
ejecutar.
o ¿Ha pasado algo?
o Añade al código una nueva librería (stdlib.h)
y la instrucción system(“pause”); al final.

Iñaki Zarauz Leoz 72


12. Mi primer programa en C
o Ahora prueba a compilarlo.
o Podrás comprobar como aparecen una
pantalla con la compilación.
o Ahora crea el ejecutable con compilar y
ejecutar.
o ¿Ha pasado algo?
o Añade al código una nueva librería (stdlib.h)
y la instrucción system(“pause”); al final.

Iñaki Zarauz Leoz 73


12. Mi primer programa en C
o Ahora prueba a compilarlo.
o Podrás comprobar como aparecen una
pantalla con la compilación.
o Ahora crea el ejecutable con compilar y
ejecutar.
o ¿Ha pasado algo?
o Añade al código una nueva librería (stdlib.h)
y la instrucción system(“pause”); al final.

Iñaki Zarauz Leoz 74


13. Código Completo

Iñaki Zarauz Leoz 75


13. Código Completo

Iñaki Zarauz Leoz 76


13. Mi primer programa en C
o Ahora quita del programa el punto y coma.
o Ejecuta con F9 (es lo mismo que compilar,
enlazar, crear el ejecutable y ejecutar)
o ¿Qué ocurre?¿Qué tipo de error se produce?
o Vuelve a ponerlo y ahora pon print en vez
de printf.
o Vuelve a poner printf y ahora cambia stdio
por otro nombre.

Iñaki Zarauz Leoz 77


13. Mi primer programa en C
o Ahora quita del programa el punto y coma.
o Ejecuta con F9 (es lo mismo que compilar,
enlazar, crear el ejecutable y ejecutar)
o ¿Qué ocurre?¿Qué tipo de error se produce?
o Vuelve a ponerlo y ahora pon print en vez
de printf.
o Vuelve a poner printf y ahora cambia stdio
por otro nombre.

Iñaki Zarauz Leoz 78


13. Mi primer programa en C
o Ahora quita del programa el punto y coma.
o Ejecuta con F9 (es lo mismo que compilar,
enlazar, crear el ejecutable y ejecutar)
o ¿Qué ocurre?¿Qué tipo de error se produce?
o Vuelve a ponerlo y ahora pon print en vez
de printf.
o Vuelve a poner printf y ahora cambia stdio
por otro nombre.

Iñaki Zarauz Leoz 79


14. Prueba ahora este código
• #include <stdio.h>
• #include <stdlib.h>
• void main()
• {
• printf(“El resultado es: “,4/0);
• system(“pause”);
• }

¿Cuál es ahora el error al intentar mostrar el resultado de


dividir 4 entre 0?
Ahora pon 4/2....
Iñaki Zarauz Leoz 80
14. Prueba ahora este código
• #include <stdio.h>
• #include <stdlib.h>
• void main()
• {
• printf(“El resultado es: “,4/0);
• system(“pause”);
• }

¿Cuál es ahora el error al intentar mostrar el


resultado de dividir 4 entre 0?
Ahora pon 4/2....
Iñaki Zarauz Leoz 81
4. Estructuras de Control
Bloques / Ambitos
o Un bloque está constituido por una
línea de código ó por varias líneas de
código agrupadas por llaves.
Un bloque de una
sola línea de código
cout<<“Hola Mundo”<<endl;

{
cout<<“Hola Mundo”;
Un bloque de más
cout<<endl; líneas de código

}
Iñaki Zarauz Leoz
if / else
o Sintaxis
if (expr)
bloque
else
bloque

Iñaki Zarauz Leoz


if / else [Ejemplo 1]
int x = 4;
if (x ==4)
cout<<“Si es cuatro”<<endl;

int x = 4;
if (x ==4)
cout<<“Si es cuatro”<<endl;
else
cout<<“No es cuatro”<<endl;
Iñaki Zarauz Leoz
if / else [Ejemplo 2]
int p = 3;
if (!(p%3))
{
cout<<“Múltiplo de 3”<<endl;
cout<<“Hurra”<<endl;
}

Iñaki Zarauz Leoz


if / else
if (a == b)
cout<<“Hola”<<endl;
cout<<“Coca Cola es Así”<<endl;

Iñaki Zarauz Leoz


if / else
int p = 3, q = 5;
if (p = q)
cout<<“Albóndiga”<<endl;

Iñaki Zarauz Leoz


if / else
if (a > b)
if (b > c)
cout<<“Manzanas”<<endl;
else
cout<<“Peras”<<endl;

Iñaki Zarauz Leoz


while
o Sintaxis F
expr
while (expr)
bloque
V

bloque

Iñaki Zarauz Leoz


while [Ejemplo 1]
int p = 3, x;
while (p > 2)
{
x = p * 4;
cin>>p;
cout<<x;
}

Iñaki Zarauz Leoz


while [Ejemplo 2]
while (1)
cout<<“Hola!”;

Iñaki Zarauz Leoz


do / while
o Sintaxis
do
bloque
{
stmt_list;
}while (expr);
V
expr

Iñaki Zarauz Leoz


do / while [Ejemplo]
char c;
int x;
do{
cin>>x;
cout<<x * 2<<endl;
cin>>c;
}while (c == ‘s’ || c == ‘S’);

Iñaki Zarauz Leoz


for
o Sintaxis
for (expr1; expr2; expr3)
bloque;
o expr1 es también conocida como
expresión de inicialización
o expr2 es también conocida como
condición de permanencia
o expr3 es también conocida como
acumulador
Iñaki Zarauz Leoz
Diagrama de Flujo for
expr1

F
expr2

bloque

expr3

Iñaki Zarauz Leoz


for [Ejemplo 1]
for (int i=0; i<10; i++)
cout<<i<<endl;

for (int i=10; i>=0; i--)


cout<<i<<endl;

Iñaki Zarauz Leoz


for [Ejemplo 2]
for (;;)
cout<<“Arañas”<<endl;
for (i=0, j=10;i<5||j>5;i++,j--)
cout<<i<<j<<endl;

Iñaki Zarauz Leoz


for [Ejemplo 3]
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
if (i != j)
cout << i << ‘\t’ << j << endl;

Iñaki Zarauz Leoz


break, continue
o break
n Palabra reservada que sirve para salirse
del ciclo más interno.
o continue
n Palabra reservada que hace que el
código del bloque de un ciclo salte
directamente a evaluar la condición.

Iñaki Zarauz Leoz


Ciclo while

expr expr

F F
V V

Iñaki Zarauz Leoz break


continue
Ciclo do / while

V V
expr expr

F F

Iñaki Zarauz Leoz


continue break
Ciclo for
expr1 expr1

F F
expr2 expr2
V V

expr3 expr3

Iñaki Zarauz Leoz


continue break
Ejemplo… Número Mágico
o El problema:
n Elaborar un programa que calcule un
número al azar entre 1 y 10. Luego le dé
tres oportunidades al usuario para
adivinarlo. Si el usuario lo logra
entonces, gana el juego, sino pierde.

Iñaki Zarauz Leoz


Número Mágico
int rand() es una función declarada en stdlib.h
#include <iostream.h> Devuelve un entero entre 1 y MAXINT
#include <stdlib.h> Al aplicar módulo se restringe el rango a 0..9
Se le suma 1 para que quede de 1..10

int main()
{
// Declaración de Variables a utilizar
int magic, // Número a ser adivinado
curGuess;// Intento actual del usuario
bool won = false; // Variable para saber si ha ganado
magic = rand() % 10 + 1;

for (int curTry = 0; curTry < 3; curTry++){


cout<<"Este es su Intento #"<<curTry+1<<": ";
cin>>curGuess;
if (curGuess == magic){
Por cada intento que se tiene disponible (3)
won = true;
Leer el número
break; Verificar si gano…
} si es así… terminar el ciclo.
Iñaki Zarauz Leoz
}
Número Mágico
if (won) // Si se activo la bandera... Es que ganó
cout<<"Usted Ha Ganado... Yujuuuuu!"<<endl;
else
cout<<"Usted Ha Perdido... Buuuujuu!"<<endl;

system("PAUSE");
return 0;
}

Iñaki Zarauz Leoz


Tarea
o Modifique el programa del Número
Mágico de manera que:
n El usuario determine cuál es el número
máximo a adivinar.
n El usuario determine cuántos intentos
quiere tener.
n El usuario pueda jugar varias veces.

Iñaki Zarauz Leoz


5. Arrays y Strings en C\C++
1. Array unidimensional
array: VentaSemanal
+------+
•Un array es un
|dato| <-- componente 0, ( fila 0 ) |------|
conjunto de datos del
|dato| <-- componente 1, ( fila 1 ) |------|
mismo tipo ordenados
|dato| ...
en forman líneal uno
|-----|
después de otro.
|dato| ...
•Los componentes de
|-----|
un array se han de
|dato| ...
referenciar por medio
|-----|
del nombre del array
|dato| ...
y un índice de
|-----|
desplazamiento para
|dato| <-- componente 6, ( fila 6 )
indicar el componente
deseado.

Iñaki Zarauz Leoz


2. Array bidimensional
o Una array bi-dimensional es aquel en donde los
componentes son accesibles por medio de una pareja
de índices que apunten a la fila y a la columna del
componente requerido.
o Los arrays de este tipo son conocidos también con el
nombre de matrices.
o Un array bidimensional es en una lista compuesta de
filas y columnas,
o Para referirnos a una de ellas emplearemos un
número para indicar la posición de fila y otro número
para indicar la posición de la columna

Iñaki Zarauz Leoz


2. Array bidimensional
Ejemplo:
Array VentaSemanaQ, para registrar
las ventas de cada uno de los días de
la semana por cuatro semanas, o
sea, una tabla de7 x 4 elementos.

Iñaki Zarauz Leoz


2. Array bidimensional
Ejemplo:
•El elemento de la fila 4, columna 3 ( por ejemplo ) contenga el valor
de 5000
•Instrucción: VentaSemanaQ[4][3] = 5000;

Iñaki Zarauz Leoz


2. Array bidimensional
Ejemplos de declaraciones de arrays unidimensinales:

•int intA[5];
•long longA[5] = { 1, 2, 3, 4, 5 };
•char charA[3] = { 'a', 'b', 'c' };

Iñaki Zarauz Leoz


2. Array bidimensional
#include <stdio.h>
#include <stdlib.h>
#define FILAS 7
int main()
{
float ventas[FILAS] = { 123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 0.0 };
float total = 0;
int i; Esta es la salida del
programa:
puts("Ventas de la semana"); Ventas de la semana
for (i=0; i<FILAS; i++) 123.50
{ 234.60
total += ventas[i];
printf( "%8.2f\n", ventas[i] );
345.45
} 321.40
puts("--------"); 345.00
printf("%8.2f\n", total ); 456.65
system("pause"); 0.00
return 0; --------
}
1826.60
Iñaki Zarauz Leoz
Ejemplo
#include <stdio.h> for (f=0; f<FILAS; f++)
#include <stdlib.h> {
//hola for (c=0; c<COLS; c++)
#define FILAS 7 {
#define COLS 4 totales[c] += ventas[f][c];
int main() printf("%8.2f ", ventas[f][c] );
{ }
float VentaSemanaQ[FILAS][COLS] = { puts("");
123.50, 234.60, 345.45, } puts("--------------------------------------");
321.40, 345.00, 456.65, for (t=0; t<COLS; t++)
123.50, 234.60, 345.45, {
321.40, 345.00, 456.65, printf("%8.2f ", totales[t] );
123.50, 234.60, 345.45, grantotal += totales[t];
321.40, 345.00, 456.65, }
123.50, 234.60, 345.45, printf("\n\nGran total: %10.2f\n", grantotal);
321.40, 345.00, 456.65, system("pause");
0.0, 0.0, 0.0, 0.0 }; return 0; }
float totales[COLS] = { 0.0, 0.0, 0.0, 0.0 };
float grantotal = 0;
int f, c, t = 0 ; /* indices para filas, columnas y totales */
puts("Ventas de cuatro semanas");
puts("------------------------");

Iñaki Zarauz Leoz


Ejemplo

Iñaki Zarauz Leoz


3. Arrays

•En C, C++ las cadenas de caracteres no son más


que arrays de caracteres.
•Para manipular las cadenas de caracteres de la
misma manera en que manipula cualquier otro tipo
de array
• Es preferible hacer uso de una librería estándar
especialmente escrita para manipulacion de cadenas
de caracteres, la librería <string.h>

Iñaki Zarauz Leoz


Ejemplos

Iñaki Zarauz Leoz


La biblioteca <string.h>

qstrlen(): Obtener longitud de cadenas


qSintaxis: size_t strlen(const char *s);
qComentarios: La función strlen() devuelve la longitud de la cadena

qEjemplo:

char *nombre = "Oscar E. Palacios"; cout << strlen(nombre) << endl;

Iñaki Zarauz Leoz


La biblioteca <string.h>
o strcpy(): Copiar cadenas
Sintaxis: char *stpcpy(char *dest, const char
*src);
Comentarios: stpcpy copia la cadena src hacia
dest, la función termina hasta haber encontrado
en src el caracter de terminación null.
o Ejemplo:
char *nombre = "Oscar E. Palacios";
char copia[80];
strcpy(copia, nombre);
cout << copia << endl;
Iñaki Zarauz Leoz
La biblioteca <string.h>
largo = strlen(cadena)
// Para obtener el largo de una cadena
strcpy(destino, origen)
// Copia el contenido de origen en destino
// destino debe ser lo suficientemente grande
strcat(destino, origen)
// Agrega el contenido de origen al final de destino
// destino debe ser lo suficientemente grander
resultado = strcmp(cadena1, cadena2)
// Compara dos cadenas
// devuelve un valor menor, igual o mayor que 0
//según si cadena1 es menor,
// igual o mayor que cadena2, respectivamente.
posicion = strchr(cadena, caracter)
// Devuelve la posición en memoria de la primer
// aparición de caracter dentro de cadena
posicion = strstr(cadena,subcadena)
// Devuelve la posición en memoria de la primer
// aparición de subcadena dentro de cadena

Iñaki Zarauz Leoz


1. Funciones en C
2. Paso de parámetros por valor-
por referencia:“Apuntadores”
3. Variables locales y globales
4. Funciones recursivas
1. DEFINICIÓN “función”
• C tiene como bloque básico las “funciones”.
•main() es una función
•printf() es una función
•Hay muchas más funciones predefinidas,
•Podemos definir nuestras propias funciones.
•Las funciones deben declararse antes de ser
llamadas.
• Se escribe su tipo, su nombre, sus argumentos
entre paréntesis y luego, entre llaves, su código:

Iñaki Zarauz Leoz


1. DEFINICIÓN “función”
/* Inclusión de archivos */
#include <stdio.h>
void holamundo(void) /*Función donde se ejecuta la lógica del programa*/
{
printf("Hola Mundo\n"); /*imprime la cadena*/
return; /*sale de la función*/
}
int main(void) /*Función principal del programa*/
{
holamundo(); /*llamada a la función que lleva el peso*/
return 0; /*sale del programa: correcto*/
}

Iñaki Zarauz Leoz


Ejemplo
#include <stdio.h>
int sumar(int numero1, int numero2); // prototipo de la función
int main(void)
{
int suma; /* definimos una variable*/
suma = sumar(5, 3);
// la variable obtiene el valor retornado de sumar
// puede verse que entre los paréntesis se mandan los valores
// de los números que se desean sumar en este caso 5 y 3
// pueden haberse declarados estos dos números en otras variables
//int dato = 4, valor = 3; * suma = sumar(dato, valor);
// imprimimos la suma de los dos números

printf("La suma es: %d ", suma);


return 0;
}
int sumar(int numero1, int numero2)
{
int retsuma; // creamos la variable a retornar
retsuma = numero1 + numero2;
//asignamos a esa variable la suma de número 1 y 2
returnIñaki
retsuma;
Zarauz Leoz// retornamos la suma de los números
}
2. PASO DE PARÁMETROS:
a) Por valor
b) Por referencia
Paso de Parámetros

•Las funciones pueden recibir datos


•existen dos formas importantes de enviar los datos hacia una función

üpor valor
üpor referencia

Iñaki Zarauz Leoz


2. PASO DE PARÁMETROS:
a) Por valor

Por Valor

El paso por valor envía una copia de los parámetros a la función


por lo tanto los cambios que se hagan en ella no son tomados
en cuenta dentro de la función main().

Iñaki Zarauz Leoz


Ejemplo:a) Paso de parámetros por valor
#include <stdio.h>
void sumar_valor(int numero); /* prototipo de la función */
int main(void)
{
int numero = 57; /* definimos numero con valor de 57*/
sumar_valor(numero); /* enviamos numero a la función */

printf("Valor de numero dentro de main() es: %d\n", numero);


/* podemos notar que el valor de numero se modifica *
sólo dentro de la función sumar_valor pero en la principal
* número sigue valiendo 57 */
return 0;
}

void sumar_valor(int numero)


{
numero++;
// le sumamos 1 al numero
// el valor de número recibido se aumenta en 1
//y se modifica dentro de la función sumar_valor()

printf("Valor de numero dentro sumar_valor() es: %d\n", numero);


Iñaki Zarauz Leoz
return;
}
2. PASO DE PARÁMETROS:
b) Por referencia (“apuntadores”)

•El paso por referencia se hace utilizando apuntadores.


•Se envía la dirección de memoria de la variable,
por lo tanto los cambios que haga la función si afectan
el valor de la variable.

Iñaki Zarauz Leoz


Ejemplo
#include <stdio.h>
void sumar_referencia(int *numero); // prototipo de la función

int main(void)
{
int numero = 57; //definimos numero con valor de 57
sumar_referencia(&numero); // enviamos numero a la función

printf("\nValor de numero dentro de main() es: %d ", numero);

// podemos notar que el valor de numero se modifica


// y que ahora dentro de main() también se ha modificado
// aunque la función no haya retornado ningún valor.
return 0;
}

void sumar_referencia(int *numero)


{
*numero += 1;
// le sumamos 1 al numero
// el valor de numero recibido se aumenta en 1
//y se modifica dentro de la función
printf("\nValor de numero dentro sumar_referencia() es: %d", *numero); return;
}

Iñaki Zarauz Leoz


3. Variables locales y globales
Variables Locales y Globales

Además de pasar valores a una función,


también se pueden declarar tipos de datos dentro de las funciones,
estos tipos de datos declarados dentro de una función solo son accesibles
dentro de esta misma función y se les conocen como variables locales,
así pues podemos definir los mismos nombres de variables en
diferentes funciones, ya que estas variables solo son accesibles
dentro de esas funciones

Iñaki Zarauz Leoz


a) Variables locales
#include <stdio.h>
void funcion1()
{
int dato = 53; /* definimos dato en 53*/
char num1 = 'a'; /* num1 vale a */

printf("Funcion1, dato=%d, num1=%c\n", dato, num1);


return;
}
void funcion2()
{
int dato = 25; /* definimos dato en 25*/
char num2 = 'z'; /* num2 vale z*/

printf("Funcion2, dato=%d, num2=%c\n", dato, num2);


return;
}
int main(void)
{
funcion1(); /* llamamos a funcion1() */
funcion2(); /* llamamos a funcion2() */
return 0;
}

Iñaki Zarauz Leoz


b) Variables globales
Existen pues variables que se definen fuera de la
función principal main() y fuera de cualquier otra
función creada por nosotros,
estas variables se les conoce con el nombre de
Variables Globales ya que se pueden utilizar dentro
de main() y dentro de cualquier función creada por
nosotros.

Iñaki Zarauz Leoz


Ejemplo: variables globales
#include <stdio.h>
int variable_global = 99; /* inicializamos la variable global */
void funcion();
int main(void)
{
printf("main(), acceso a variable_global %d\n", variable_global);
funcion(); /* llamamos a la función */
return 0;
}
void funcion()
{
printf("funcion(), acceso a variable_global %d\n", variable_global);
return;
}

Iñaki Zarauz Leoz


4. Funciones “recursivas”
o La recursividad (recursión) es la propiedad por la cual una función se llama
a sí misma directa o indirectamente. La recursión indirecta implica
utilizar más de una función.
o Se puede considerar la recursividad como una alternativa a la iteración. La
recursión permite especificar soluciones naturales, sencillas, que serían, en
caso contrario, difíciles de resolver.
o Toda función recursiva debe contemplar un caso base o condición de
salida, para terminar, o la recursividad no podrá terminar nunca.
o Ejemplo:

funcion_recursiva( /* parámetros recibidos por la función */ )


{
/*código*/
funcion_recursiva( ); //llamada a la función misma
/* Código */
}

Iñaki Zarauz Leoz


4. Ejemplo función recursiva.
“Factorial de un número”
#include <stdio.h>
long factorial(int n)
{
if (n == 0) // caso base
return 1; // como 0! = 1, se retorna 1
else
return n * factorial (n - 1); // llamada a esta misma función
}

int main(void)
{
printf("%ld ", factorial(5));

return 0;
}

Iñaki Zarauz Leoz


PROGRAMACIÓN EN C

Iñaki Zarauz Leoz


izarauz@fpbidasoa.org

Vous aimerez peut-être aussi