Boletín 12.1: Lenguaje C. Estructura de un programa

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
BOLETÍN 12.1: Lenguaje C. Estructura de un programa
Curso: 2012/13
Versión: 1.0.5
OBJETIVOS



Introducir al alumnado en la instalación del IDE Eclipse para C.
En la primera parte, familiarizarse con los conceptos básicos: elementos del lenguaje, uso de
las funciones básicas y construcción de programas sencillos en lenguaje C.
En la segunda parte, profundizar en la construcción en lenguaje C de algunos métodos estáticos
ya implementados en Java.
INSTALACIÓN DEL IDE ECLIPSE PARA C
En http://www.eclipse.org/downloads/, quienes trabajen en entorno Windows deberán descargar el
archivo eclipse-cpp-juno-SR2-win32.zip (la siguiente imagen corresponde a esta opción). Para otros
sistemas operativos habrá que seleccionar la plataforma Linux o Mac OS X y descargar el Eclipse IDE
for C/C++ Developers correspondiente.
Se descomprime en una carpeta que se recomienda llamar Eclipse_C, para no colisionar, en su caso,
con la carpeta Eclipse que contiene el IDE para Java. Si lo desea, puede crear un acceso directo en el
escritorio (si ya tiene uno para Eclipse para Java, llámele a este acceso, por ejemplo: “Eclipse_C”).
Finalmente para poder compilar y enlazar los programas en C se hace necesario instalar el compilador
gcc. En los sistemas MAC OS X ya suele venir integrado y en Linux dependerá de la distribución del
mismo, por lo que habrá que buscar el que corresponda; en Windows instalaremos MinGW desde
http://sourceforge.net/projects/mingw/files/latest/download?source=files descargando el archivo
mingw-get-inst-20120426.exe. Al ejecutar este archivo se procederá a la instalación. Se aconseja
aceptar lo que por defecto se ofrece, salvo en la pantalla:
Boletín 12.1: Lenguaje C. Estructura de un programa
2
En la que podemos marcar también C++ Compiler.
Durante la instalación se abre una ventana en la que se descomprimen e instalan los respectivos
paquetes que conforman la instalación.
Finalmente hay que acceder a las variables de entorno del sistema operativo. En Windows XP,
consultando las propiedades de Mi PC  Opciones avanzadas (o similar en otras versiones de
Windows)  Variables de Entorno.
En Variables del sistema modificar Path, para añadir al final: “;C:\MinGW\bin\” (observe el punto y
coma (;) que se inserta por delante para separar de los paths que ya existen).
Boletín 12.1: Lenguaje C. Estructura de un programa
3
INTRODUCCION AL ENTORNO: MI PRIMER PROGRAMA C
En primer lugar, ofrecerá un workspace por defecto que podremos cambiar a otra carpeta (se
recomienda BP12.1, y en ningún caso utilice uno que haya sido usado para Java).
En segundo lugar, veamos cómo crear el primer programa C en el IDE “Eclipse C”. Para ello realice
los siguientes pasos:
1. En el Explorador de Proyectos (el equivalente al Explorador de Paquetes en la perspectiva
Java), con el botón contextual –BC- del ratón (botón derecho para los diestros), seleccione:
New  Project  C/C++  C Project  <<siguiente>>
2. Escriba el nombre del proyecto: HolaMundo (observe que empieza por mayúsculas), eligiendo
como Tipo de Proyecto: Executable (empty project) y posteriormente Toolchains
(herramientas): MinGW GCC y finalmente <<Finish>>
3. Sobre el nombre de proyecto con BC: New  Source File, y como nombre: holaMundo.c
(observar que empieza por minúsculas y que tiene la extensión .c) <<Finish>>
4. Escriba en la ventana de edición (la misma que en la perspectiva Java):
#include <stdio.h>
void main(void){
printf("Hola Mundo");
}
5. Guarde el código escrito.
6. Se compila y enlaza el proyecto eligiendo en la barra de menú: Project  Build All
7. Se ejecuta el proyecto eligiendo en la barra de menú: Run As  Local C/C++ Applications, o
simplemente Run.
8. En la consola se visualizará el resultado.
========================================================================
Otro ejemplo: escriba otro proyecto denominado “HolaYo”.
Descripción del programa:
Declare un nuevo proyecto denominado “HolaYo”.
Declare un nuevo programa (Source File) denominado “holaYo.c” (recuerde que termina en .c)
Incluya la librería <stdio.h> que permite el manejo de funciones de entrada/salida.
Programe la función main: void main(void) como se indica a continuación:
a. Declare dos variables que permitan almacenar un nombre de menos de 30 caracteres y
un número entero.
b. Visualice el mensaje “Escribe tu nombre y tu edad: \n”.
c. Escriba la sentencia fflush(stdout) que permite vaciar el buffer de salida antes de una
entrada por teclado. Aclarar que en otros entornos no es necesario, pero es una buena
práctica hacerlo siempre.
d. Mediante la sentencia o sentencias oportunas de captura de datos desde el teclado, haga
que se pueda introducir una cadena con el nombre y un número entero para almacenar
la edad (recuerde en el caso de la edad anteponer &)
e. Por último debe visualizar mediante una sola sentencia “Hola NNNNN ya tienes EE
años de edad”.
5. Ejecute el programa y pruébelo.
1.
2.
3.
4.
Boletín 12.1: Lenguaje C. Estructura de un programa
4
PARTE 1: EJERCICIOS BÁSICOS PROPUESTOS
EJERCICIO 1 – CÁLCULO DEL FACTORIAL DE UN NÚMERO NATURAL CON FUNCIONES ALMACENADAS
EN ARCHIVOS INDEPENDIENTES Y POR TANTO CON ARCHIVOS DE CABECERAS CREADOS POR EL
USUARIO.
El ejercicio anterior se ha resuelto programando un único archivo C denominado holaMundo.c u holaYo.c
respectivamente, al que se le incluía al principio una librería que viene incorporada en el compilador de C
para el manejo de funciones de E/S: stdio.h.
Ahora se trata de construir un proyecto con tres archivos independientes en un mismo proyecto que
denominaremos
respectivamente
testNumeroCombinatorio.c,
numeroCombinatorio.h
y
numeroCombinatorio.c. Realice los siguientes pasos:
1. Cree un proyecto llamado: NumeroCombinatorio.
2. Cree un programa C (Source File) llamado: testNumeroCombinatorio.c.
3. Incluya la librería que permite usar las funciones de entrada/salida e incluya el archivo de
cabecera numeroCombinatorio.h. Recuerde que mientras las librerías del compilador de C
necesitan en la sintaxis <_.h> las creadas por el usuario van entre comillas: “_.h”.
4. Programe la función void main (void) con las sentencias necesarias para que se visualice el
mensaje “Teclee el numerador y el denominador de un número combinatorio:\n” y a continuación
permita introducirlos por teclado (recuerde incluir fflush (stdout) antes de la sentencia y que las
variables que se necesitan en un programa C hay que definirlas en las primeras líneas del
programa) .
5. Una vez capturados los valores invoque a la función numeroCombinatorio(m, n) y visualice el
mensaje: “ xx sobre yy es zz” donde xx es el valor introducido para m, yy el introducido para n y
zz el resultado obtenido por la función numeroCombinatorio.
6. En la ventana del explorador de proyectos, encima del nombre del proyecto con –BC- se elige
new Header File y se crea un archivo de cabeceras denominado numeroCombinatorio.h, en el
que se incluyen, entre otras cosas, los prototipos de las funciones que serán invocadas desde el
archivo principal y que se han codificado en otros archivos (esto le sirve al compilador para
tener declaradas las funciones cuando compile el citado archivo principal). Incluya por tanto:
#ifndef NUMEROCOMBINATORIO_H
#define NUMEROCOMBINATORIO_H
long numeroCombinatorio(int,int);
long factorial(int);
#endif // NUMEROCOMBINATORIO_H
7. Por último, en otro (Source File) llamado numeroCombinatorio.c, en el que se debe incluir como
primera línea #include “numeroCombinatorio.h”, programe las dos siguientes funciones:
a. long factorial (int n), que devuelve el factorial del parámetro de entrada n. Recuerde que
el factorial de un número n es n * (n − 1) * (n − 2) * ... * 1.
b. long numeroCombinatorio(int m, int n), que apoyándose en la función anterior
devuelve el número combinatorio de m sobre n:
 m
m!
  =
 n  n! (m - n)!
Pruebe el resultado del ejercicio con 8 sobre 5 cuyo resultado es 56, lo mismo que 8 sobre 3.
Boletín 12.1: Lenguaje C. Estructura de un programa
5
PARTE 2: EJERCICIOS SOBRE TRASFORMACIÓN DE MÉTODOS ESTÁTICOS
JAVA EN FUNCIONES C
EJERCICIO 2 – FUNCIONES SOBRE ENTEROS (PROPUESTO PARA EL FINAL DE LA CLASE O, EN SU CASO,
PARA CASA)
Cree un proyecto que se denominará Enteros.
 Cree un archivo de cabecera de nombre “enteros.h” donde debe incluir:
a) Los ficheros de cabecera que necesite para el manejo de las funciones de entrada/salida
<stdio.h>, las matemáticas <math.h> y la función valor absoluto abs, que se encuentra en
<stdlib.h>.
b) La definición de un tipo enumerado (use la declaración typedef) denominado boolean que
pueda tomar los valores falso y cierto, para usarlo en lugar de sus homónimos de Java.
c) Y, como en el ejercicio anterior, los prototipos de las funciones que más abajo se describen
(añádalos ya, con independencia de que las funciones las vaya realizando progresivamente
mientras avanza en el ejercicio)
 Todas la funciones que figuran más abajo se implementarán en el archivo denominado
“funcionesDeEnteros.c”. Recuerde que debe incluir como primera línea el fichero de cabecera que
acaba de realizar.
 Por último, para probar las citadas funciones se creará otro archivo denominado “testEnteros.c” donde
estará codificada la función void main(void) que irá solicitanto oportunamente los datos por teclado
invocando a las funciones que se quieran probar y visualizando los resultados de las mismas.
Recuerde también incluir como primera línea el fichero de cabecera enteros.h.
Los métodos Java a transformar en funciones C son los siguientes:
a) //Comprueba que el valor v está en el intervalo [a,b]
boolean estaEn(int a, int b, int v)
b) //Máximo común divisor (recuerde al algoritmo de Euclides que consiste en dividir el número
mayor entre el menor. Si la división es exacta, el divisor es el m.c.d.; en otro caso, se continúa
dividiendo el divisor entre el resto obtenido y así sucesivamente hasta obtener una división
exacta, siendo el último divisor el m.c.d.)
int mcd(int m, int n)
c) //Mínimo común multiplo (se recuerda que es el producto de los números dividido por el
m.c.d. de los mismos)
int mcm(int m , int n)
d) //Comprobar si un número es primo. Si el número es negativo o cero se devuelve falso,
(recuerde que basta probar si es divisible por los números comprendidos desde 2 hasta la raíz
cuadrada de n)
boolean esPrimo(int n)
EJERCICIO 3 – MÁS FUNCIONES SOBRE ENTEROS (EN SU CASO, PROPUESTO PARA CASA)
Siguiendo la metodología del ejercicio anterior, aumente las funcionalidades de “funcionesDeEnteros.c”
añadiendo las siguentes funciones:
1. sumaPrimosMenores, que dado un número n>0, devuelva la suma de los números primos
menores o iguales que n.
2. sumaNoPrimosEntre, que dados dos numeros a y b, positivos y tales que a<b, devuelva la suma
de los números que no son primos y que están en el intervalo [a,b]
3. formanTrianguloRectangulo, que dados tres números a, b y c, positivos, compruebe si forman
un triángulo rectangulo; Recuerde el teorema de Pitágoras.
Descargar