UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

El lenguaje de programación C

Ejercicios

1. Probando tus programas con el compilador

Plan de trabajo

Repite en tu máquina virtual los pasos que se muestran en el vídeo que se menciona en la sección anterior.

¿Cuánto tiempo has dedicado a esta actividad? mins.

2. Los elementos de un programa en C

Recursos

Un recurso que conviene que tengas a mano para consultar (no para leer ahora mismo pues tiene 300 páginas) es The GNU C Programming tutorial escrito por Mark Burgess (Versión on-line). Está en inglés pero contiene información detallada sobre todo lo relativo a C.

Plan de trabajo

Tras leer el documento de sugerido, responde a las preguntas en la siguiente sección.

Evaluación

Recuerda que el compilador, cuando procesa ficheros de código, lo hace de forma independiente y de una única pasada. Considera los siguientes ficheros de código.

Fichero_1.c Fichero_2.c Fichero_3.c
1
2
3
4
5
6
7
8
9
10
int b = 10;

void fill_squares(int *tbl, int b) 
{
    int i;
    for (i = 0; i < b; i++) 
    {
        tbl[i] = square(i + 1);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define SIZE 10

int cube(int);

int main(int argc, char *argv[]) 
{
    int a;
    int table[SIZE];

    a = square(b);
    b = cube(a);

    fill_squares(table, SIZE);
    return 0;
}

int square(int number) 
{
    return number * number;
}
1
2
3
4
5
6
int b = 10;

int cube(int number) 
{
  return square(number) * number;
}

Responde a las siguientes preguntas.

  1. En Fichero1.c el parámetro b (línea 3) y la variable global b (linea 1) son variables diferentes.

    • Verdadero

    • Falso

  2. En la línea 8 de Fichero1.c el compilador desconoce la función square. Se necesita incluir su prototipo antes de la función para que el compilador no muestre ninguna advertencia.

    • Verdadero

    • Falso

  3. En la línea 10 de Fichero2.c el compilador no sabe nada acerca de la función square.

    • Verdadero

    • Falso

  4. En la línea 11 de Fichero2.c el compilador no sabe nada de la función cube.

    • Verdadero

    • Falso

  5. La asignación a b en la línea 11 de Fichero2.c es correcta porque es una variable global definida en otro fichero.

    • Verdadero

    • Falso

  6. La función square en la línea 17 de Fichero2.c debe moverse al comienzo del fichero (o al menos incluir su prototipo) para que el compilador no muestre una advertencia.

    • Verdadero

    • Falso

  7. La declaración de b en la línea 1 de Fichero3.c es incorrecta porque colisiona con la declaración en la línea 1 de Fichero1.c

    • Verdadero

    • Falso

  8. El compilador no tiene información sobre la función square en la línea 5 de Fichero3.c.

    • Verdadero

    • Falso

Envía al foro del curso o consulta con los profesores sobre aquellas preguntas de las que no estés seguro.

¿Cuánto tiempo has dedicado a esta actividad? mins.

3. Resolución de ejercicios sobre definición de datos en C

Plan de trabajo

  1. Resuelve los cuatro primeros ejercicios. Comprueba las soluciones con un compañero, posteando en el foro o consultando con los profesores antes de la siguiente clase.

¿Cuánto tiempo has dedicado a esta actividad? mins.

4. Resolución de ejercicios sobre declaración y ámbito de validez de las variables

Recursos

Los siguientes documentos complementan la información incluida en este capítulo.

Plan de trabajo

  1. Resuelve los tres primeros ejercicios. Comprueba tus soluciones con un compañero, posteando en el foro o consultando a los profesores.

¿Cuánto tiempo has dedicado a esta actividad? mins.

5. Resolución de ejercicios sobre funciones

Recursos

Los siguientes documentos complementan la información incluida en este capítulo.

Plan de trabajo

  1. Resuelve los dos primeros ejercicios. Comprueba tus resultados con un compañero, posteándolo en el foro o consultando con los profesores.

¿Cuánto tiempo has dedicado a esta actividad? mins.

6. Tarifas de llamadas

Plan de trabajo

En una aplicación a ejecutar en un móvil se pide diseñar las siguientes dos estructuras de datos:

  • Estructura para almacenar una tarifa de llamada. Debe contener el nombre del operador, la hora de comienzo y la de final (ambos valores entre 0 y 23), la tarifa de establecimiento de llamada y la tarifa en minutos (ambas en euros). Declara un sinónimo para este tipo de datos. Declara una tabla para almacenar 100 elementos de este tipo.

  • Estructura para almacenar una llamada saliente. Debe contener el nombre del operador del número destino, la hora de comienzo (sólo la hora, entre 0 y 23, sin minutos ni segundos), la duración en minutos y el número al que se ha llamado. Declara un sinónimo para este tipo de datos. Declara una tabla para almacenar 100 elementos de este tipo.

Responder a las siguientes preguntas.

  • ¿Qué tamaño tienen ambas tablas?

  • ¿Cómo has elegido el tamaño del campo para almacenar el nombre del operador?

  • ¿Puedes conseguir que tus estructuras de datos ocupe menos menoria?

  • ¿Qué funciones se te ocurren se pueden implementar que procesan la información en estas tablas? (o por separado o funciones que operen en las dos a la vez).

  • Supongamos que cada estructura de datos con sus funciones están en ficheros separados. Se añade un tercer fichero en el que sólo está la función main pero utiliza las funciones y estructuras de datos descritas anteriormente. ¿Qué información debe estar en este nuevo fichero antes de la definición del main?

¿Cuánto tiempo has dedicado a esta actividad? mins.