introducción al c - oposicion- · pdf filesintaxis que vamos a emplear es la siguiente...

26
Introducción al C Editorial MAD: 1 1. HISTORIA DEL C El nacimiento del C, está fuertemente vinculado al desarrollo del sistema operativo UNIX. El UNIX era un sistema operativo que se quería implementar a partir de un lenguaje de alto nivel, con dicho propósito es desarrollado un lenguaje nuevo que se llamaría C. Este lenguaje nace en los laboratorios Bell en el año 1972 de manos de Dennis Ritchie. Recibe este nombre porque estaba fuertemente influenciado por el B(desarrollado por Ken Thompson), y el BCPL. Las ideas básicas del C, se plasman en 1978 en el libro “The C Programming Language” escrito por Brian Kernighan y Dennis Ritchie. Posteriormente, muchos programados descubren las virtudes de este lenguaje (que en principio era de propósito específico), y que resulta ser adecuado para muchas aplicaciones de diferente propósito. En el año 1983 aparece el C ANSI(Instituto Nacional Americano de estándares), lo que permite unificar todos los criterios de los compiladores de C existentes. 2. COMPILADORES DE C/C++ Existen en el mercado muchas herramientas de compilación para el lenguaje C, la mayoría también permiten la compilación en el lenguaje C++, por su similitud. A continuación vamos a comentar algunas de las más famosos: Gcc Por si no lo ha adivinado estamos hablando de un compilador en línea que funciona en sistemas UNIX/LINUX. Es un compilador de gran calidad. Existe un entorno IDE desarrollado para Windows denominado Dev-C++. Por supuesto, tanto el compilador como el entorno son de gratuitos. Turbo C++ Unos de los primeros compiladores de C++ para MS-DOS. Fabricado por Borland, dispone de un IDE(Entorno de desarrollo integrado). Es un compilador que está desfasado. Como ventaja podemos citar que es muy fácil de usar, además no necesita una máquina demasiado potente para usarlo. Borland C++ Versión del Turbo C++ para Windows. También está fabricado por la empresa Borland, dispone de un entorno de trabajo muy atractivo. Su compilador es de calidad aceptable, y es poco exigente con la máquina para que funcione.

Upload: buianh

Post on 09-Feb-2018

213 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 1

1. HISTORIA DEL C

El nacimiento del C, está fuertemente vinculado al desarrollo del sistema operativo UNIX. El UNIX era un sistema operativo que se quería implementar a partir de un lenguaje de alto nivel, con dicho propósito es desarrollado un lenguaje nuevo que se llamaría C.

Este lenguaje nace en los laboratorios Bell en el año 1972 de manos de Dennis Ritchie. Recibe este nombre porque estaba fuertemente influenciado por el B(desarrollado por Ken Thompson), y el BCPL. Las ideas básicas del C, se plasman en 1978 en el libro “The C Programming Language” escrito por Brian Kernighan y Dennis Ritchie.

Posteriormente, muchos programados descubren las virtudes de este lenguaje (que en principio era de propósito específico), y que resulta ser adecuado para muchas aplicaciones de diferente propósito.

En el año 1983 aparece el C ANSI(Instituto Nacional Americano de estándares), lo que permite unificar todos los criterios de los compiladores de C existentes.

2. COMPILADORES DE C/C++

Existen en el mercado muchas herramientas de compilación para el lenguaje C, la mayoría también permiten la compilación en el lenguaje C++, por su similitud. A continuación vamos a comentar algunas de las más famosos:

Gcc

Por si no lo ha adivinado estamos hablando de un compilador en línea que funciona en sistemas UNIX/LINUX. Es un compilador de gran calidad. Existe un entorno IDE desarrollado para Windows denominado Dev-C++. Por supuesto, tanto el compilador como el entorno son de gratuitos.

Turbo C++

Unos de los primeros compiladores de C++ para MS-DOS. Fabricado por Borland, dispone de un IDE(Entorno de desarrollo integrado). Es un compilador que está desfasado. Como ventaja podemos citar que es muy fácil de usar, además no necesita una máquina demasiado potente para usarlo.

Borland C++

Versión del Turbo C++ para Windows. También está fabricado por la empresa Borland, dispone de un entorno de trabajo muy atractivo. Su compilador es de calidad aceptable, y es poco exigente con la máquina para que funcione.

Page 2: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 2

Microsoft Visual C++

Uno de los compiladores más importantes de la historia de la programación. Con este compilador se desarrolló el sistema Windows. Conecta muy bien con las APIs, y permite un uso sencillo del OLE. Es un compilador de gran calidad. Como desventaja podemos citar que requiere de mucho disco duro, y ordenador bastante potente.

C++ Builder

Compilador con el sello de fábrica de Borland. Permite construir aplicaciones para Windows a 32 bits. Dispone de un R.A.D., y un entorno de desarrollo bajo Windows. Es un compilador de gran calidad. Requiere de una máquina media para que funcione adecuadamente.

3. EL PRIMER PROGRAMA EN C

Vamos a ver el famoso programa “Hola Mundo”: /* Ejemplo 1A*/ /* Mi primer programa en C*/ #include <stdio.h> main() { printf(“Hola Mundo\n”); }

Este programa como su nombre indica, imprime en pantalla la frase “Hola Mundo”.

Para probar este programita, debemos seguir los siguiente pasos:

1. Lo primero que debemos hacer es arrancar el compilador que vamos a usar.

2. A continuación en el editor escribimos el código tal como aparece en los apuntes.

3. El siguiente paso es grabar el fichero con un nombre como “ejemplo1a.c”.

4. Posteriormente debemos compilar el programa. Si se produce algún error debemos revisar el código fuente, es decir, regresamos al paso 2.

5. Ejecutamos el programa.

4. ESTRUCTURA DE UN PROGRAMA EN C

Vamos a estudiar el ejemplo anterior para aprender algunas cosas:

Page 3: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 3

Comentarios

Las primeras líneas corresponden a comentarios. Los comentarios en C se encierran entre los signos /* ...*/.

Los comentarios no sirven para indicar aclaraciones, autor del programa, uso de variables, etc. En realidad son explicaciones que introducimos para que otra persona que vea el código, o nosotros mismos lo entendamos. El preprocesador las elimina antes de compilar. Un comentario en C, puede tener varías líneas.

Un uso interesante de los comentarios consiste en eliminar instrucciones de nuestro programa para encontrar un error.

Directivas del preprocesador

Las siguientes instrucciones comienzan por #. Todas las líneas que empiezan por # van dirigidas al preprocesador. El preprocesador es un programa, que como su nombre indica procesa el fuente antes de pasarlo por el compilador.

Existen muchas directivas diferentes, las del tipo include sirven para señalar el uso de “librerías”.

main()

Todos los programas en C, tienen una función main(principal). La función main es la primera que se ejecuta al lanzar el programa. Si queremos usar otras funciones deben ser llamadas desde main. En el ejemplo main no recibe ningún parámetro, por esos aparecen los paréntesis vacíos.

{ }

Las llaves sirven para indicar los bloques en los que se divide el programa. Podemos definir un bloque como un conjunto de intrucciones. En este caso indican el comienzo de la función main({), y su final (}).

printf

printf es el comando de salida de datos(similar a Escribir en pseudocódigo). Esta instrucción saca por la salida estándar(normalmente la pantalla), un valor. En este caso, una cadena. Como también puede comprobar las cadenas en C, aparecen rodeadas de comillas dobles(“”).

printf aparece declarada en la librería stdio, por lo que tenemos que incluir su cabecera para poder usarla(#include <stdio.h>).

La frase entrecomillada finaliza con el carácter de salto de línea(\n).

5. SALIDA ESTÁNDAR: PRINTF

Page 4: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 4

Empezaremos hablando de la salida estándar. El comando que más vamos a emplear es el denominador “printf”. Esta instrucción sirve para sacar por la salida estándar(normalmente la pantalla), una frase, una variable, una expresión, etc.

Recuerde que si queremos usar “printf” debemos incluir la cabecera de stdio. La sintaxis que vamos a emplear es la siguiente:

printf ("formato", var1, var2, ..., varN);

Con prinft debemos especificar el formato en que queremos sacar las variables, valores o expresiones, y a continuación la lista de variables.

Y para muestra bien vale un botón: /* Ejemplo2 */ /* Uso de printf*/ #include <stdio.h> main() { /* Definimos una variable entera a la que le asignamos el

valor 15*/ int num = 15;

printf("El numero en decimal es %d, pero en hexadecimal es %X\n",num,num); }

Como puede comprobar dentro de formato indicamos tanto las palabras que queremos imprimir como los valores, y su formato.

El formato aparece precedido por el símbolo %, y seguido de una letra. Los formatos más importantes que podemos emplear son:

• %d : número entero. • %f : número real. • %c: carácter. • %s: cadena. • %o: número octal. • %x: número hexadecimal.

6. ENTRADA ESTÁNDAR: SCANF

Ya sabemos usar la salida estándar de una manera básica para comunicarnos con el usuario. Ahora deberíamos ver como puede el usuario emplear la entrada estándar (normalmente el teclado), para introducir datos.

La instrucción que se encarga de esta tarea se llama “scanf”. Al igual que con “printf” si queremos emplearla, debemos incluir la librería stdio.

La sintaxis de esta instrucción es la siguiente:

scanf("formato", &var1, &var2, ..., &varN);

Page 5: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 5

Como verá es muy similar a la de printf. El formato se especifica de igual forma. Vamos a ilustrarlo con un ejemplo:

/* Ejemplo3 */ /* Uso de scanff*/ #include <stdio.h> main() { int num; scanf("%d",&num);

printf("El numero en decimal es %d, pero en hexadecimal es %X, sin embargo en octal sería %o\n",num,num, num); }

Las variables deben ir precedidas por el símbolo “&”, porque es la forma de pasar un parámetro como referencia.

7. CREAR CONSTANTES

Para crear constantes en C, debemos emplear la directiva del preprocesador. Supongamos un programa que introduce un precio, y calculamos su iva:

/* Ejemplo4 */ /* Constantes*/ #include <stdio.h> #define IVA 16 main() { float precio, total; scanf("%f",&precio); total = precio + precio * IVA/100; printf("El precio del articulo con iva es de : %f\n",total); }

8. TIPOS DE VARIABLES

Los principales tipos de variables en C son:

• int : Tipo entero, sirve para números sin parte decimal positivos y negativos.

• float : Tipo real, sirve para números en coma flotante tanto positivos como negativos.

• char: Tipo carácter, almacena una letra , dígito o carácter especial únicamente.

Para declarar una variable debemos usar la siguiente sintaxis:

Page 6: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 6

Tipo_variable nombre1, nombre2, ..., nombre;

Precedemos el tipo de la variable a los nombres de las que vamos a usar, separadas por comas. Ejemplo:

int suma, n, contador;

En la última revisión del C, se permite inicializar las variables al crearlas. Tenga en cuenta que las variables que inicialicemos irán siempre al final de la definición. Ejemplo:

int suma, n, contador=1;

Veamos un pequeño ejemplo del uso de las variables de tipo carácter: /* Ejemplo 5*/ /* Manejo de variables de tipo char*/ /* Este programa pide un carácter por teclado y nos devuelve su

número ASCII (solo en ordenadores PC)*/ #include <stdio.h> main() { char c; printf(“Introduzca un carácter : “); scanf(“%c”, &c); printf(“El carácter %c en ASCII es %d”, c, c); }

9. IF-ELSE

Esta instrucción equivale al Si-sino-entonces de pseudocódigo. Su sintaxis es: if (condición) sentencia1; [else sentencia 2;]

La parte del else es opcional, por eso aparece rodeado de corchetes. Esta sentencia permite anidamiento, es decir en el else puede ir otro if, y así sucesivamente.

Veamos un ejemplo: /* Ejemplo 6 : Manejo de if anidados Este programa lee la altura de un jugador de baloncesto, y le

dice la posición en la que debería jugar*/ #include <stdio.h> main() { float altura; scanf(“%f”, &altura); if (altura > 1.7) printf(“Juegas de pivot”); else if (altura > 1.6) printf(“Juegas de alerón”); else if (altura > 1.5)

Page 7: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 7

printf(“Juegas de base); else printf(“Eres muy bajito, mejor juega

al futbito”); }

10. WHILE

Esta instrucción es similar al mientras-hacer de pseudocódigo. Imponemos una condición al principio del bucle, mientras que sea cierta repetimos el bloque de instrucciones que se sitúan dentro. Su sintaxis es:

while (codicion) { .... }

Y para muestra bien vale un botón: /* Ejemplo 7 : Manejo de while. Este programa calcula el factorial de un número*/ #include <stdio.h> main() { int num, fact = 1; scanf(“%d”, num); while (num>1) { fact = fact * num; num --; /* Equivale a num = num –1;*/ } printf(“%d”, fact); }

11. DO WHILE

Es lo más parecido que hay en C al REPETIR-HASTA de pseudocódigo. En este caso se va a repetir el bucle, mientras la condición sea cierta. En realidad, es como el while pero en orden inverso, en este caso la condición aparece al final del bucle, y no al principio. Su sintaxis:

do { ... } while(condicion);

Ahora lo que pega es un ejemplito: /* Ejemplo 8: instrucción do while. Este programa calcula la media de una serie de notas de

alumnos.*/ #include <stdio.h> main() { float nota, media, total = 0;

Page 8: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 8

int num = 0; do { scanf(“%f”, nota); /*En C el operador AND se escribe como &&*/ if (nota >= 0 && nota<=10) { total = total + nota; total ++; /* Equivale a total = total +1;*/ } } while (nota>=0 && nota<= 10); media = total/num; printf(“%f”, media); }

12. INSTRUCCIÓN FOR

Esta instrucción permite generar bucles al estilo PARA de pseudocódigo. Su sintaxis es la siguiente:

for (valor_inicial; condicion_repetir_bucle; incremento) { ... }

Vamos a ilustrarlo con un ejemplo: /* Ejemplo 9 : Uso de for. Este programa escribe un triángulo de astericos, nos pide por

entrada estándar la altura del triángulo*/ #include <stdio.h> main() { int contador1, contador2, n; scanf(“%d”, &n); for (contador1 = 1; contador1 <= n; contador1 ++){ for (contador2=1; contador2 <= contador1; contador2

++) printf(“*”); printf(“\n”); } }

BBllooqquuee ddee AAccttiivviiddaaddeess NNºº 11

• Cree un algoritmo en C, que calcule la suma de n términos de la siguiente progresión:

• N

S 1...31

211 ++++=

• Codifique un programa que muestre la tabla de multiplicar de un número introducido por la entrada estándar. Ejemplo:

! 3 (intro) ! 3x1 = 3

Page 9: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 9

! 3x2 = 6 ! ... ! 3x10=30

• Prepare un programa que lea una base, y un exponente. El exponente debe ser positivo (cosa que debe controlar usted), y nos devuelva el exponente elevado a la base. Ejemplo:

! Base: 3 (intro) ! Exponente: 4 (intro) ! 3 elevado a 4 es ... 81

• Crear un programa que calcule el máximo común divisor de 2 números enteros positivos, empleando el algoritmo de Euclides.

• Haga un programa que calcule el valor de Fibonacci para un número entero introducido por teclado.

• Resuelva la ecuación de segundo grado a partir de los valores de sus coeficientes (a, b, y c). Recuerde que una raíz de un número negativo genera un valor complejo que vamos a ignorar. Para calcular la raíz de un número debemos emplear la función sqrt, que se incluye en math.h.

• Algoritmo de un programa que calcule el área, y el perímetro de un rectángulo a partir de los valores de sus lados.

13. TIPOS ENUMERADOS

Las enumeraciones o tipos enumerados nos permiten crean en C, nuevos tipos de datos. En realidad, lo que hace C es asignarle a cada tipo un número comenzando desde el cero, y de esta manera los trata como si se tratase de enteros. La sintaxis para crear un tipo enumerado es la siguiente:

enum nombre_enumeracion { nombre1, nombre2, .., nombreN} variable1, variable2,.., variableN;

A la vez que definimos un tipo enumerado podemos declarar variables de ese tipo. Veamos algunos ejemplillos:

enum Logico { FALSO, VERDADERO} Primo; enum Dias {lunes = 1, martes, miercoles, jueves, viernes,

sabado, domingo};

Si no queremos que le asigne al primer valor el número cero, podemos hacer como en el ejemplo anterior, asignarle un número.

14. VARIABLES DE TIPO LÓGICO

Las variables de tipo lógico no existen en C(aunque sí en C++). Por lo que tenemos que crearlas nosotros. Existen diferentes formas de crear estas variables podríamos usar la directiva del preprocesador (#define) para crear 2 constantes, o crear un tipo enumerado usando enum. Nosotros vamos a crearlas usando un tipo enumerado.

Page 10: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 10

Empezaremos a contar desde FALSE, ya que C le asigna el número 0, que es el número que usa C cuando una comparación es falsa. Para TRUE emplearemos el número 1, que es el que usa el C.

Como este tipo de datos no existen originariamente en C, cuando queramos imprimir o leer una variable lógico no podemos hacerlo directamente. Debemos emplear una sentencia alternativa(if-else como en el ejemplo), para imprimirlo por pantalla, y para leerlo debemos usar una variable auxiliar, y después pasarle el valor al lógico.

Veamos un pequeño ejemplo: /* Ejemplo 10: Uso del tipo Lógico. Este programa calcula si un número introducido por teclado es

primo*/ #include <stdio.h> main() { enum Logico {FALSE, TRUE}; enum Logico PRIMO = TRUE; int n, contador =2; printf("Introduzca un numero : "); scanf("%d", &n); do { if (n % contador == 0) PRIMO = FALSE; contador ++; } while(PRIMO && contador < n); printf("\n%d ", n); /* Como no podemos imprimir un lógico debemos usar una

sentencia alternativa*/ if (PRIMO) printf("es primo"); else printf("no es primo"); }

15. SWITCH

La sentencia switch, es una alternativa múltiple. En muchas ocasiones hay que crear instrucciones alternativas donde hay muchas condiciones, para estos casos debemos emplear la sentencia switch. Su sintaxis es la siguiente:

switch(variable){ case valor1: .... break; case valor2: .... break; .... case valorN: .... break; [default: ........ break;] }

Page 11: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 11

Cada sentencia case debe ir seguida de un valor, y el conjunto de instrucciones que queremos que se realicen cuando la variable tome ese valor. Al final de cada sentencia case debe ir un break; que sirve para salir del bloque de instrucciones.

Podemos usar de forma opcional una sentencia default que se ejecutará si la variable no toma ninguno de los valores que aparecen en la lista.

Las variables que podemos usar dentro de un switch sólo pueden ser de tipo entero o carácter.

Vamos a ver un ejemplo de uso de la alternativa múltiple: /* Ejemplo 11: Uso del switch. Este programa va recibiendo notas, y al final calcula el número

de suspensos, aprobados, bien, notables, y sobresalientes*/ #include <stdio.h> main() { int insu=0, suf=0, b=0, not=0, sob=0, nota; do { printf("\nIntroduzca una nota : "); scanf("%d",&nota); switch(nota){ case 0: case 1 : case 2: case 3: case 4:

insu++;break; case 5: suf ++; break; case 6: b++; break; case 7: case 8: not ++; break; case 9: case 10: sob++; break; } } while(nota >=0 && nota <=10); printf("\nSuspensos = %d Aprobados = %d Bien = %d Notables =

%d Sobresalientes = %d", insu, suf, b, not, sob); }

BBllooqquuee ddee AAccttiivviiddaaddeess NNºº 22

• Empleando el uso de la sentencia switch, diseñe una pequeña calculadora. El programa irá repitiéndose hasta que se produzca la condición de salida. El usuario introducirá un carácter por la entrada estándar. Dependiendo del valor deberá hacer las siguientes operaciones:

o 1: Introduce por teclado el operador1.

o 2: Introduce por teclado el operador2.

o +: suma operador 1 con operador 2 y muestra el resultado por pantalla.

o -: resta al operador 1 el operador 2 y muestra el resultado por pantalla.

Page 12: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 12

o *: multiplica el operador 1 y el operador 2 y muestra el resultado por pantalla.

o /: divide el operador 1 por el operador 2 y muestra el resultado por pantalla.

o Cualquier otra opción: Salimos del programa.

• Cree un programa que permita introducir 3 número enteros por teclado, y que aparezcan ordenados de forma ascendente. Al final el programa debe mostrar los números ya ordenados, y decir si el usuario los introdujo de forma ordenada al comienzo.

• Realice un programa en el cual el usuario introduce un número por teclado, y el programa saque por pantalla el nombre del mes correspondiente a ese número. Ejemplo: 4 (intro) devuelve Marzo.

• Diseñe un programa que permita un número que hemos introducido por teclado pasarlo a binario, y viceversa. Este programa tendrá un pequeño menú donde el usuario podrá elegir una de las 2 opciones, o salir del programa.

• Este programa debe calcular el importe de una factura de electricidad, teniendo en cuenta las siguientes premisas:

o Se cobra una cuota mensual fija de 1 euros.

o Por cada kw contratado se cobra 0.6 euros.

o Se cobra por cada kw consumido 0.1 céntimos.

o A todo esto hay que añadir el iva que es del 7%.

o Para calcular el consumo introducimos la lectura actual, y la lectura anterior en kw.

o En pantalla deben aparecen los conceptos desglosados, y el total.

16. TIPOS DE DATOS AVANZADOS

En C no sólo disponemos de los tipos de datos que hemos comentado anteriormente. También existen los modificadores que permiten alterar los tipos de datos básicos:

• Signed: Números con signo, es decir, tanto positivo como negativos, es el que toma por defecto.

• Unsigned: Número positivo.

• Short: Corto, ocupa menos espacio.

• Long: Largo, ocupa más espacio.

Los más importantes son:

Nombre Descripción Bytes ocupados

Rango

Page 13: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 13

char Almacena un carácter con signo

1 -128...127

unsigned char

Almacena un carácter 1 0...255

int Almacena un entero 2 -32.768...32.767

short int Almacena un entero corto

2 -32.768...32.767

long int Almacena un entero largo

4 -2.147.483.648...2.147.483.647

unsigned int

Entero sin signo 2 0...65.535

unsigned short

Entero corto sin signo 2 0...65.535

unsigned long

Entero largo sin signo 2 0...4.294.967.295

float Número real 4 3.4E-38...3.4E+38

double Número real de doble precisión

8 1.7E-308...1.7E+38

long double

Real con 19 dígitos de precisión

10 3.4E-4932...3.4E+4932

Estos datos son orientativos, ya que cada compilador puede alterar el tamaño de almacenamiento de las variables según le convenga.

17. OPERADORES

A continuación vamos a estudiar los operadores más importantes que emplea C:

Operados aritméticos + : Suma.

- : Resta.

* : Producto.

/ : División.

% : Módulo o resto de la división entera.

- : Operador unario de cambio de signo.

Page 14: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 14

Operadores de incremento o decremento

Estos son unos de los operadores más curiosos que podemos usar en C. El operador de incremento(++), equivale a incrementar una unidad una variable. A su vez el operador de decremento(--), resta una unidad a la variable a la cual se le aplica.

A su vez ambos operadores pueden aplicarse delante de la variable o detrás, dando lugar a los operadores de preincremento, predecremento y postdecremento, postincremento.

Ejemplo: /* Ejemplo 11: Uso de los operadores de incremento y decremento*/ #include <stdio.h> main() { int a=1, b=6; a++; /* a vale 2 */ b --; /* b vale 5*/ a = ++b; /* b vale 6, y a también*/ b = a--; /*b vale 6, y a vale 5*/ a = b ++; /* a vale 6, y b vale 5*/ b = --a; /* a vale 5 y b también*/ printf("a=%d b=%d",a,b); }

Operadores de bits

<<: Desplazamiento a la izquierda

>>: Desplazamiento a la derecha

&: Operador AND

|: Operador OR

^: Operador XOR

~: Operador NOT

Operadores relacionales

== Operador igual a de

!= Operador distinto de

< Operador menor que

<= Operador menor o igual

>= Operador mayor o igual

> Operador mayor que

Page 15: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 15

Operadores lógicos

&& Operador AND

|| Operador OR

! Operador NOT

18. FUNCIONES EN C

A continuación vamos a estudiar las funciones en C. Hasta ahora todo el programa se ha codificado en el main, es el momento de empezar a dividirlo en “trozos pequeños de código”. De esta forma podremos resolver problemas empleando el diseño modular, lo que implica importantes ventajas, algunas de las más interesantes son las siguientes:

• El programa va a ser más fácil de depurar.

• Podremos reutilizar código de programas antiguos, o de programas realizados por otras personas.

• Permite el trabajo en equipo.

• Posibilitar trabajar en proyectos de mayor envergadura.

• En un futuro crearemos librerías.

• Podemos emplear la compilación separada.

Las funciones proceden del concepto matemático. En matemáticas, una función recibe unos o varios valores, realiza una serie de operaciones con ellos, y devuelve un único valor.

Las funciones en C, pueden recibir tantos valores como queramos, pero sólo devuelven un único valor. Para indicar al compilador el valor que debemos devolver usamos la instrucción return. Lo normal es que esta sentencia sea la última que contendrá la función. El valor que devuelve debe ser almacenado en una variable, imprimirlo por pantalla, etc. En caso contrario perderemos el resultado de la llamada a la función.

Los valores que recibe una función es lo que denominamos los parámetros de esa función.

Para usar una función tiene 2 partes:

• Declaración, prototipo o cabecera: Bautizamos la función, declaramos los parámetros que va a recibir, y los parámetros que va a de volver. La declaración de una función se sitúa delante del main().

Page 16: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 16

• Definición o cuerpo: Es donde incluimos el código de la función. A pesar de haber sido declarada anteriormente debemos volver a incluir su cabecera. La definición de una función se ubica después del main. En el cuerpo de una función puede aparecer cualquier cosa que podamos poner en el main(variables, bucles, llamadas a otras funciones, etc.) Si pensamos veremos que realmente el main es una función, la particularidad de esta función es que es la primera que ejecuta el compilador.

Veamos un pequeño ejemplo en C. Recordemos el programa que calculaba el binomio de Newton.

/* Ejemplo 12: Calcula el binomio de Newton. Crearemos la función factorial para usarla en el cálculo. */ #include <stdio.h> /* Cabecera o prototipo de la función, incluimos: Valor devuelto nombre de la función parámetros que recibe, no es necesario darles nombre */ int factorial(int); main() { int num, i, binomio; scanf("%d",&num); scanf("%d",&i); /* Diversas llamadas a la función factorial*/ binomio = factorial(num)/(factorial(i)-factorial(num-i)); printf("\n%d",binomio); } /* Cuerpo de la función Repetimos la cabecera, pero en este caso damos nombre a todos

los parámetros Después incluimos el código de la misma */ int factorial(int x) { int contador, num=1; for (contador = 1; contador<=x; contador ++) num = num * contador; /* Retornamos el valor del factorial del número*/ return num; }

Page 17: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 17

19. BLOQUE DE ACTIVIDADES Nº 3

• En un movimiento uniforme no acelerado el espacio es el producto de la velocidad por el tiempo. Empleando funciones diseñe un programa que a partir de la velocidad y el tiempo calcule el espacio recorrido por un móvil.

/* Ejemplo 13 Calcula el espacio recorrido por un movimiento uniforme no

acelerado */ #include <stdio.h> float espacio(float, float); main() { float v, t; scanf("%f",&v); scanf("%f", &t); printf("%f", espacio(v, t)); } float espacio(float vel, float tmp) { return vel*tmp; }

• Cree un programa que imprima por pantalla la tabla de senos, cosenos y tangentes comprendidos entre 2 ángulos en grados dados por el usuario. Además l usuario introducirá el incremento que debemos emplear para diseñar esa tabla. Recuerde que el ordenador mide los ángulos en radianes.Las funciones sin, cos y tan se encuentran en math.h.

• En primer lugar cree una función que calcule un porcentaje de una determinada cantidad. Usando esta función codifique un programa que calcule a partir de un precio que debe dar el usuario, su iva(16%), descuento(10%), y el total a pagar.

• Diseñe un programa que calcule los valores de f x x x 1 entre 2 valores introducidos por el usuario, con un incremento de 0.1.

• Cree la función valor absoluto de un número entero. Está función toma un número, si es positivo, lo devuelve tal como la recibió, y si es negativo lo devuelve cambiado de signo.

• Cree la función elevar que recibe una base y un exponente, y devuelve el valor del base elevado al exponente.

• Diseñe un programa que convierta de euros a pesetas, y de pesetas a euros usando funciones. Al comenzar el mismo veremos un pequeño

Page 18: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 18

menú donde podremos elegir entre convertir del euros a pesetas, y de pesetas a euros.

• Prepare una función que calcule la distancia entre 2 puntos del plano. La fórmula para calcular esa distancia es d x2 y2 2 x1 y1 2 . En c para calcular la raíz cuadrada usamos la función sqrt(), incluida en la librería math.h.

• Función que reciba horas y minutos, y los transforme a segundos.

20. VARIABLES LOCALES VERSUS VARIABLES GLOBALES

Como hemos comentado anteriormente una función puede contener cualquier elemento que se pueda situar en el main. Entonces ¿podremos crear variables dentro de las funciones? La respuesta es sí. A las variables que creemos dentro de una función las denominaremos variables locales, frente a las que declaremos fuera de las funciones son variables globales.

Las variables locales se crean al llamar a la función en la que están declaradas, y se destruyen al finalizar la función. Por lo tanto son variables “temporales” usadas para almacenar los resultados intermedios necesarios para calcular el valor que vamos a devolver.

¿Podrá tener una variable local y una variable global el mismo nombre? La respuesta es sí. Cuando estemos dentro de la función estaremos haciendo referencia a la variable local, y cuando estemos fuera de ella nos referiremos a la global.

¿Y qué hago si quiero usar una variable local de una función en otra función? La forma lógica de realizar esta operación es empleando los parámetros que para eso se crearon.

21. PASO DE PARÁMETROS

Hay 2 formas de pasar parámetros a una función:

• Por valor: Pasamos una copia del parámetro. De esta forma no podemos modificar el valor del parámetro. Por ejemplo cuando usamos printf.

• Por referencia: Pasamos la dirección del parámetro. De esta manera podemos alterar el valor del parámetro. Por ejemplo cuando usamos la función scanf.

Hasta ahora todos los parámetros que hemos usado han sido por copia. Para pasar un parámetro por referencia es necesario emplear punteros.

Pero ¿qué es un puntero? Un puntero no es más que una dirección de memoria. Sin embargo C debe conocer que contiene esa dirección por si queremos imprimir su

Page 19: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 19

contenido, trabajar con él, etc. Para representar un puntero usamos el asterisco(*). De forma que un puntero a un entero sería: int*, un puntero a un real: float*, etc.

Y esto lógicamente nos llevar a preguntarnos cómo podemos obtener la dirección de un objeto. En C usamos el símbolo “&” (recuerde el uso de scanf).

Veamos un ejemplillo: /* Ejemplillo 14 Diferencia entre el paso por valor y por referencia */ #include <stdio.h> /* Cabecera de la función que recibe el parámetro por valor*/ int por_valor(int); /* Cabecera de la función que recibe el parámetro por

referencia*/ int por_ref(int *); main() { int d = 2; /* Llamamos a la función que recibe el parámetro por valor

e imprimimos el contenido de d*/ por_valor(d); printf("\n%d", d); /* Ahora llamamos a la función que recibe el parámetro por

referencia, y también imprimimos el valor*/ por_ref(&d); printf("\n%d", d); } /* Cuerpo de la función que recibe el parámetro por valor*/ int por_valor(int x) { x = 7; return 0; } /* Cuerpo de la función que recibe el parámetro por referencia*/ int por_ref(int *x) { * x = 9; return 0; }

Page 20: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 20

Ahora escriba el ejemplo, y antes de compilarlo, intente adivinar el resultado de la ejecución.

Los parámetro por referencia son muy útiles cuando necesitamos que una función devuelva más de un valor, o cuando recibimos un objeto que ocupa mucho espacio en memoria para acelerar la ejecución del programa.

22. PROCEDIMIENTOS

Un procedimiento podría definirse como un módulo que no devuelve ningún valor. En C los procedimientos no existen como tales, por lo que tenemos que “hacer trampas” para usarlos. En C definiremos un procedimiento como una función que no devuelve nada (void).

Como un procedimiento no devuelve ningún valor no es necesario almacenarlo en ningún sitio.

Por lo demás no hay ninguna diferencia con las funciones. Y para muestra un botón:

/* Ejemplo 4 Ejemplo de procedimiento. Imprime asteriscos por la pantalla haciendo un estúpido

efecto de escalera. */ #include <stdio.h> /* La cabecera de nuestro procedimiento devuelve void*/ void asteriscos(int); main() { int num, conta; scanf("%d", &num); for (conta=1; conta <= num; conta ++){ asteriscos(conta); printf("\n"); } } /* El cuerpo de nuestro procedimiento */ void asteriscos(int x) { while(x>=1){ printf("*"); x--; }

Page 21: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 21

}

23. BLOQUE DE ACTIVIDADES Nº 4

• Diseñe un programa que pase un número entero y positivo menor que 5000 a números romanos.

• Codifique un programa que calcule el cambio exacto con el mínimo número de monedas y billetes para una cantidad de euros menor a 500 €.

• Redireccionando la entrada prepare un programa que tome un programa fuente escrito en C, y calcule si los paréntesis y las llaves están correctamente balanceadas.

24. CADENAS DE CARACTERES

Anteriormente, hemos empleado caracteres en nuestros programas. Ahora es el momento de empezar a usar cadenas de caracteres. Una cadena de caracteres se puede definir como un conjunto de caracteres. Cada lenguaje trata estas cadenas de forma diferente, veamos cómo lo hace C.

En C una cadena de caracteres no es más que un vector cuyo tipo de datos es el carácter. Para declarar una cadena debemos especificar su tamaño. Por ejemplo, vamos a declarar una cadena de 30 caracteres que llamaremos frase:

char frase[31];

También existe la posibilidad de inicializar la frase:

char frase[31] = “Que puchi mi primera cadena“;

¿Y se preguntará por qué defino el tamaño de 31, si he dicho que va a tener 30 caracteres? Muy sencillo, para señalar el final de un cadena, C usa el terminador '\0', por lo que hemos de reservar una posición extra para alojar el terminador.

Otra detalle que hemos de tener en cuenta es que podemos acceder a cada carácter de forma independiente, usando el operador de indexación ([número]). Por ejemplo, si quiero imprimir las tercera letra de la frase anterior, escribiría:

printf(“%c“, frase[2]);

¿Me he equivocado al poner el 2, cuando debía haber puesto el 3? Pues no, otra característica de los vectores en C, es que comienzan a contar desde el 0. Por lo tanto para acceder a la tercera letra he de indexar sobre el número 2.

Por último, si queremos imprimir con printf, o leer una cadena con scanf, su especificador de formato es el %s.

scanf(“%s“, &frase);

Page 22: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 22

printf(“%s“, frase);

Como siempre un pequeño ejemplo para alegrarnos el cuerpo:

/* Ejemplo 4. Manejo de cadenas Este programa educado te pide el nombre y te saluda */ #include <stdio.h> #define MAX 30 main() { char nombre[MAX]; printf("\nIntroduzca su nombre : "); scanf("%s", &nombre); printf("\nHola %s!\n", nombre); }

25. STRING.H

La librería que se encarga del manejo de las cadenas recibe el nombre de string. Ya sabe debe incluirla cada vez que use cadenas. En la ayuda de su compilador puede encontrar información detallada sobre las funciones que contiene esta librería y sus utilidades. Debido a su extensión no vamos a comentarlas todas, pero sí haremos referencia a las más importantes:

• strcat(destino, origen): Concatena al final de la cadena de destino, la cadena denominada como de origen.

• strcpy(destino, origen): Copia en la cadena destino, el contenido de la cadena origen. Si la cadena destino contenía alguna información está se pierde.

• strlen(cadena): Esta función devuelve un entero. Este entero representa la longitud de la cadena(si incluir contar el carácter terminador).

• strcmp(cadena1, cadena2): Esta función compara 2 cadenas, y devuelve un entero menor, igual o mayor que cero si se encuentra que s1 es, respectivamente, menor que, igual a, o mayor que s2.

• strncat(destino, origen, número): Similar a strcat, pero en este caso indicamos el número de caracteres que queremos copiar en destino.

• strncpy(destino, origen, número): Similar a strcpy, el último parámetro indica el número de caracteres de origen que queremos copiar en destino.

Page 23: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 23

Veamos un pequeño ejemplo de uso de string.h: /* Ejemplo 16. Manejo de string.h Este programa comprueba si 2 cadenas son palindromas. Definimos una cadena es palindroma de otra si escritas una al

revés coincide con la otra. Por ejemplo AMOR y ROMA son palíndromas. Por ejemplo MORA y ROMA no son palíndromas. */ #include <stdio.h> #include <string.h> #define MAX 30 enum Logico {FALSE, TRUE}; main() { char cad1[MAX], cad2[MAX]; int i, j; enum Logico Pal = TRUE; printf("\nIntroduzca la primera cadena : "); scanf("%s", &cad1); printf("\nIntroduzca la segunda cadena : "); scanf("%s", &cad2); i = strlen(cad1); j = strlen(cad2); if (i != j) Pal =FALSE; else { j --; for (i=0;j >=0 && Pal; i ++, j--) if (cad1[i] != cad2[j]) Pal = FALSE; } if (Pal) printf("\n %s y %s son palindromas.\n", cad1, cad2); else printf("\n %s y %s NO son palindromas.\n", cad1,

cad2); }

26. ENVÍO DE CADENAS COMO PARÁMETROS

Las cadenas la maneja C como si fuesen vectores, y curiosamente los vectores en C se manejan como punteros. De manera que si queremos enviar una cadena como parámetro debemos declarar el parámetro como un puntero a cadena (char *).

Un ejemplo ilustrativo: /* Ejemplo 6: Envio de cadenas como parametros Este programa le quita las vocales a las palabras */

Page 24: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 24

#include <stdio.h> #include <string.h> #include <conio.h> #define MAX 30 void quitavocales(char *); main() { char cadena[MAX]; scanf("%s",&cadena); quitavocales(cadena); printf("%s", cadena); getche(); } void quitavocales(char * s) { int i,j ; for (i= 0;i < strlen(s); i++){ { if (s[i] == 'a' || s[i] == 'e' || s[i]=='i'|| s[i] ==

'o' || s[i] == 'u') for (j=i; j < strlen(s); j ++) s[j] = s[j+1]; i--; } } }

27. PASO DE PARÁMETROS AL MAIN

main es simplemente una función más de C. La peculiaridad de esta función es que siempre es la primera que se ejecuta. ¿Entonces puede estar función recibir parámetros? Sí, aunque la forma de recibir los parámetros es un poco peculiar. Al ser la función “más externa” debe recibir los parámetros directamente desde el sistema operativo. Por lo tanto para probar estos programas debemos compilar el fuente, salir al sistema operativo, y llamar al ejecutable desde allí.

La función main recibe del sistema operativos 2 parámetros:

• argc: es un entero que indica el número de parámetros recibidos.

• argv: es un vector de punteros a cadenas. Contienen los parámetros recibidos. El parámetro que ocupa la posición cero (argv[0]) es el nombre del programa con su ruta completa.

Y para muestra un botón: /* Ejemplo 18 Parametros recibidos por el main Este programa imprime los parametros que recibe el main */

Page 25: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 25

#include <stdio.h> main(int argc, char *argv[]) { int i; for (i =0; i < argc; i ++) printf("Parametro %d : %s", i, argv[i]); }

28. BLOQUE DE ACTIVIDADES Nº 5

• El siguiente programa debe permitir ir introduciendo el nombre de un disco y los ejemplares vendidos. Esta acción se repetirá hasta que se introduzca un disco que haya vendido 0 copias. Al finalizar el programa por pantalla debe aparecer el nombre del disco más vendido.

• Cree un programa que permita conjugar los verbos regulares en el presente de indicativo a partir de su infinitivo. El usuario introducirá por teclado el infinitivo, y el ordenador deberá saber si pertenece a la primera conjugación a la segunda, o a la tercera. Posteriormente aparecerá en pantalla el verbo conjugado en el presente de indicativo.

• Diseñe un programa para jugar al ahorcado. Esta versión básica del ahorcado constará de una sola palabra que deberá adivinar un jugador. El jugador dispondrá de 5 fallos para adivinarla, si no lo consigue, el programa le dirá el resultado.

• Cree un pequeño juego similar al famoso mastermind. Esta versión no tendrá colores sino letras para cada color(a=azul, r = rojo, v = verde). El jugador introducirá una secuencia de 5 colores. El ordenador le contestará X, si el color no se encuentra en la combinación, Y si se encuentra pero en una posición diferente, O si el color se encuentra en la posición correcta.

• Realice una versión de la función strcpy. En este caso se llamará copiar, recibirá 2 punteros a cadenas, y no devolverá nada. Esta función debe copiar el contenido de la cadena recibida como segundo parámetro en la cadena recibida como primer parámetro.

• Diseñe un programa que llamaremos calculadora. Este programa recibirá como parámetro un conjunto de números y sus correspondientes operadores(+,-,/,*). El programa mostrará como el resultado de todas las operaciones realizadas. Ejemplo:

C:\bc5\bin\calcula 2.1 + 3.5 * 0.5

Resultado= 2.8

Page 26: Introducción al C - oposicion- · PDF filesintaxis que vamos a emplear es la siguiente ... y a continuación la lista de variables. Y para muestra bien vale ... Veamos un pequeño

Introducción al C

Editorial MAD: 26

29. BIBLIOGRAFÍA

• “Cómo programar en Lenguaje C”.Fernando Antón.2ª Edición. Prensa Técnica. 1999.

• “Ayuda del manual del GNU c”.

• “Temario de oposiciones: Volumen Práctico”. Angeles Sampalo, Ignacio Prieto y otros. Editorial MAD. 2002.

• “Apuntes de clase”Alicia Fernández.

• “Cómo programar en lenguaje C”. Fernando Antón. 2ª Edición. Prensa Técnica. 1999.

• “Curso de programación”. J. Castro, F. Cucker, X. Messeguer. McGraw-Hill.1993.