Está en la página 1de 10

C/ Sánchez Ramade 3 - Bajo Tlfno.

y Fax
- 23.700 Linares (Jaén) 953 601 349

Capı́tulo 1
Teorı́a

1.1. Funciones
Todo programa estructurado debe basarse en funciones, desde el main, la función principal, a cualquier
que se ejecute. Siendo utilizadas para cuando necesitamos realizar una operación varias veces, pero solo
la operación, vease como ejemplo la función raiz cuadrada, que según el dato que le introduzcamos
devolverá un valor u otro.
La sintaxis básica de una función será:

1 <t i p o d e v u e l t o > <nombre de l a f u n c i o n >( t i p o 1 arg1 , . . . ) {


2 Variables
3 −−−−−−−−−−−−−−−−−−−−
4 /*
5 comentario largo
6 */
7 Algoritmo
8 −−−−−−−−−−−−−−−−−−−−
9 return v a r i a b l e .
10 }
Vamos a explicar cada una de las partes de la sintaxis.
1. <tipo devuelto>: Es el tipo valor que devuelve la función, en la siguiente sección se explica los tipos
que hay. Lo mejor es un ejemplo, si hiciesemos una raı́z cuadrada de un número el resultado, valor
devuelto, es un número real, por lo que en este caso deberiamos indicar que devuelve un valor de
tipo ”float”.
2. <nombre de la funcion>: Es el nombre que le daremos a la función, este nombre debe de ser único
y hay que tener cuidado con no llamar a las variables de la misma manera, C no serı́a capaz de
distinguir la diferencia entre una cosa y la otra. También hay que tener cuidado que se distingue
entre mayúsculas y minúsculas.
3. (tipo1 arg1,...): Aquı́ se indican las variables que se pasarán a la función, a tener muy en cuenta, no
se pasa el nombre, se pasa solo el contenido, no hace falta, y no se aconseja que tengan el mismo
nombre de las variables de origen, de esta manera se puede identificar una utilidad. El tipo1, tipo2...
es para indicar el tipo de dato que contiene cada una de las variables.

www.khaderce.com khader@khacerce.com Página - 1


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

1.2. Variables
Estas se dividen según el tipo de dato que queramos que contengan,
Entero int -62 → 62
Real float -128 → 128
Largo double -123 → 123
Carácter char cualquier carácter
Tenemos que darnos cuenta que, no se incluyen 2 cosas:
1. Vectores y/o matrices
2. Palabras
Ambos se tendrán que definir de otra manera, con arrays, los cuales veremos mas adelante.
Como nota final, tenemos que coger la costumbre de que las variables deberán ser declaradas e
inicializadas SIEMPRE, sin excepción, para evitar problemas de contenido,
1 funcion (){
2 // Declaracion
3 int i ;
4 float j ;
5 char c ;
6 // Inicializacion
7 i =0;
8 j =0.0;
9 c=’ ’ ;
10 // Ahora vendria la parte del algoritmo
11 }

1.3. Algoritmo
En esta sección vamos a ver de que herramientas disponemos para realizar los programas. Vamos a
serpararlos en 2 bloques.

1.3.1. Lógica
Lo primero a tener en cuenta es de lo que disponemos, para ello tenemos 2 grupos de operaciones muy
muy básicas, pero todas de carácter matemático,
1. Condiciones
a) ==, comparación de igualdad,
b) ! =, comparación de desigualdad,
c) <, comparación de menor,
d ) <=, comparación de menor o igual,
e) >, comparación de mayor,
f ) >=, comparación de mayor o igual
2. Operaciones

www.khaderce.com khader@khacerce.com Página - 2


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

a) a + b, suma,
b) a + +, se incrementa el valor de a en una unidad,
c) a − b, resta,
d ) a − −, se decrementa el valor de a en una unidad,
e) a ∗ b, multiplicación,
f ) a/b, división,
g) a = b, se introduce el valor de b en a.
Estas son las opciones que disponemos de ”serie”. Para trabajar con las operaciones se puede hacer de
manera directa, introduciéndolas directamente, en cambio para las condiciones, estas están pensadas para
incluirlas en lo siguiente:
1. if y if-else, sirven para ejecutar una serie de comandos si se cumple la condición, o si no se cumple
ejecutar otras solo en el caso del else.
if
1 i f ( condicion ){
2 // Comandos que se ejecutaran
3 }

if-else
1 i f ( condicion ){
2 // Se cumple
3 } else {
4 // No se cumple
5 }

Los diagramas de flujos son:

www.khaderce.com khader@khacerce.com Página - 3


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

2. for, su funcionamiento es idéntico al if, con la diferencia que se realizará está comprobación un
número de veces.
1 for ( v a l o r i n i c i a l ; condicion ; ultima l i n e a ){
2 /*
3 Si se cumple la condicion
4 Se ejecutara lo que haya aqui
5 */
6 }

Tenemos 3 valores que debemos definir dentro del for, son,

a) valor inicial, es la instrucción que se ejecuta antes de empezar el bucle.


b) condicion, es una condición, de las que se definieron en anteriormente, y que se debe de cumplir
para que se ejecute lo que hay escrito
c) ultima linea, es la instrucción o instrucciones, que se ejecutarán una vez haya terminado de
ejecutarse lo que hay indicado en el for.
El diagrama de flujo es:

3. while, sigue siendo un condicional que se repite, pero la diferencia radica en:

a) no tiene por que llegarse a ejecutar,


b) no tiene definidas unas lineas de ejecución antes y otra que se repite como .extra”.

1 while ( c o n d i c i o n ) {
2 /*
3 Lineas que se ejecutan al cumplirse la condicion indicada .
4 */
5 }

www.khaderce.com khader@khacerce.com Página - 4


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

A diferencia del caso del for, en el while solo tenemos una parte para la condición de repetición,
la cual esta presente antes de cualquier ejecución del bucle.
4. do-while Muy parecido al caso del while pero con la diferencia a ese caso es que siempre se
ejecutará 1 vez al menos.
1 do{
2 /*
3 Lineas que se ejecutan al cumplirse la condicion .
4 */
5 } while ( c o n d i c i o n ) ;

Y aquı́ los diagramas de flujo de los while y los do-while:

5. switch-case Este es un condicional con 2 curiosidades muy grandes,

a) solo permite comparación de igualdad,


b) pero esa comparación es multiple, de forma sucesiva, pero multiple
La sintaxis seria esta:
1 switch ( v a r i a b l e ) : {
2 case n1 : {
3 //a ejecutar si variable vale n1
4 break ;
5 }
6 case n2 : {
7 //a ejecutar si variable vale n2
8 }
9 // ...
10 }

www.khaderce.com khader@khacerce.com Página - 5


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

Debemos tener en cuenta que el funcionamiento varia si se incluye, o no, la instrucción break en
los casos posibles. Si se incluye, una vez llegue a esa instrucción detiene la ejecución del switch, en
cambio si es incluido, seguirı́a ejecutando todo lo incluido. Este matiz se aprecia perfectamente en
los diagramas de flujo.

1.3.2. Entrada-Salida
Para poder realizar cualquiera de estas opciones necesitaremos incluir la libreria stdio.h, para ello
deberemos incluir la siguiente linea,
1 #include <s t d i o . h>
Primero debemos tener en cuenta que debemos asumir el tipo de dato que debemos leer o escribir,
indicando su contenido, para ello,
entero int %i o %d
real float %f
caracter char %c
palabra char[] %s
Y cabe decir que tenemos posibilidad de dar formato tanto al dato que vamos a leer como el que vamos
a escribir, para ello vamos a fijarnos en el numero de tipo float, pudiendo indicar la forma que queremos
ver. Basándonos en 1 ejemplo, supongamos que tenemos el numero:
12345,678901
%f 12345,678901
%.2f 12345,67
%3.f 345,678901
%2.4f 45,6789

www.khaderce.com khader@khacerce.com Página - 6


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

Consola
Para la entrada de valores por consola se utilizará la función scanf, el cual tiene la siguiente sintaxis,
1 s c a n f ( " %t1 %t2 ... " ,& var1 ,& var2 , . . . ) ;
Por partes, se observan partes,
1. ” %t1 %t2...”, aquı́ se debe incluir el formato con el que introduciremos los valores, tenemos que
tener en cuenta que cada % indica una variable, ası́, %t1 es referido al tipo de dato que contendrá la
var1.
2. &var1,&var2,... , aquı́ se debe incluir un listado de las variables que vamos a leer, debe ser conse-
cuente con los %t debido a que son ellos quienes nos indican las variables que se leeran.
Un ejemplo serı́a el siguiente,
1 s c a n f ( " %d/ %d/ %d" ,& dia ,&mes,& a n i o ) ;
La linea en cuestión leerá un dato y esperará que el dato introducido sea de la siguiente forma,
3/9/1980
haciendo la siguiente asignación:
3 → dia
9 → mes
1980 → anio
Para la salida de datos, o mostrar texto, es lo mismo, se utilizará la función printf, la sintaxis es muy
parecida a la que se ha comentado anteriormente, siendo,
1 p r i n t f ( " Cadena de texto %tv1 %tv2 ..." , var1 , var2 , . . . ) ;
Al igual que el caso anterior, tenemos 2 partes que debemos tener presentes pero a diferencia de la
anterior, una de ellas, la 2da es opcional, solo utilizada si y solo si queremos mostrar el contenido de una
o varias variables. La cadena de texto con el %tv1 %tv2... son el tipo de valor a mostrar, y como se ha
comentado al principio de esta sección es cómodo el poder mostrar los valores con un cierto formato.

Ficheros
Para el acceso a ficheros, tenemos que tener en cuenta varias cosas que iremos enumerando y comen-
tando cada una de ellas.
Lo primero es tener en cuenta que lo primero es que necesitaremos DECLARAR e INICIALIZAR una
variable de tipo fichero, la cual tiene una sintaxis que seguiremos.
1 int main ( ) {
2 int v l e i d o ;
3 v l e i d o =0;
4 // Declaracion de los 2 que abriremos
5 FILE ∗ a r c h l e c t , ∗ a r c h e s c r i ;
6 // arch_lect lo abriremos de forma que sea SOLO para leer
7 a r c h l e c t=f o p e n ( " datos .txt" , "r" ) ;
8 // arch_escri lo abriremos para escritura
9 a r c h e s c r i=f o p e n ( " resultado .txt" , "a" ) ;
10 /*
11 Aqui iria el codigo hasta llegar al punto de lectura
12 */
13 // Lectura de 1 valor

www.khaderce.com khader@khacerce.com Página - 7


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

14 f s c a n f ( a r c h l e c t , " %d\n" ,& v l e i d o ) ;


15 // Leemos el resto de valores y despues SE CIERRA el archivo
16 fclose ( arch lect );
17 // Ahora escribimos el valor leido
18 f p r i n t f ( a r c h e s c r i , " %d\n" , v l e i d o ) ;
19 // Hacemos el resto de operaciones y despues SE CIERRA
20 fclose ( arch escri );
21 }
La diferencia, tanto en el fprintf como el fscanf es que aparece 1 término antes de la cadena de texto,
que es el archivo donde accederemos, ya sea para leer como para escribir. Las formas de abrir un archivo
seran las siguientes,
r Para solo leer, no permite escribir
w+ Permite leer y escribir, si no existe el archivo lo crea
a Para leer, pero, la mejor diferencia, es que los datos introducidos son añadidos al final

www.khaderce.com khader@khacerce.com Página - 8


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

Capı́tulo 2
Ejemplo de código

1 #include <s t d i o . h>


2 /*
3 Funcion ordena3 :
4 -Entrada : num1 , num2 y num3 de tipo entero
5 -Salida :
6 Simple codigo que ordena 3 numeros enteros
7 y los muestra por pantalla .
8 */
9 ordena3 ( int num1 , int num2 , int num3) {
10 i f (num1>=num2) {
11 i f (num2>=num3) {
12 p r i n t f ( " %i> %i> %i\n" , num1 , num2 , num3 ) ;
13 } else {
14 i f (num1>=num3) {
15 p r i n t f ( " %i> %i> %i\n" , num1 , num3 , num2 ) ;
16 } else {
17 p r i n t f ( " %i> %i> %i\n" , num3 , num1 , num2 ) ;
18 }
19 }
20 } else {
21 i f (num2>=num3) {
22 i f (num1>=num3) {
23 p r i n t f ( " %i> %i> %i\n" , num2 , num1 , num3 ) ;
24 } else {
25 p r i n t f ( " %i> %i> %i\n" , num2 , num3 , num1 ) ;
26 }
27 } else {
28 p r i n t f ( " %i> %i> %i\n" , num3 , num2 , num1 ) ;
29 }
30 }
31 }
32

www.khaderce.com khader@khacerce.com Página - 9


C/ Sánchez Ramade 3 - Bajo Tlfno. y Fax
- 23.700 Linares (Jaén) 953 601 349

33 int main ( ) {
34 // Declaracion de las 3 variables para leer
35 int v a l o r 1 , v a l o r 2 , v a l o r 3 ;
36 // Inicializacion de las variables
37 v a l o r 1 =0;
38 v a l o r 2 =0;
39 v a l o r 3 =0;
40 // Peticion de los numeros
41 p r i n t f ( " Introduce el valor 1: " ) ;
42 s c a n f ( " %d" ,& v a l o r 1 ) ;
43 p r i n t f ( " Introduce el valor 2: " ) ;
44 s c a n f ( " %d" ,& v a l o r 2 ) ;
45 p r i n t f ( " Introduce el valor 3: " ) ;
46 s c a n f ( " %d" ,& v a l o r 3 ) ;
47 // Llamamos a la funcion para que ordene , mandando los 3 valores
48 ordena3 ( v a l o r 1 , v a l o r 2 , v a l o r 3 ) ;
49 return 0 ;
50 }

www.khaderce.com khader@khacerce.com Página - 10