Está en la página 1de 36

Examen de la asignatura: FUNDAMENTOS DE INFORMÁTICA

Titulación: GRADO INGENIERÍA MECÁNICA

Duración del examen: 2,5 horas MODALIDAD A


DPTO. DE TECNOLOGÍAS DE LA INFORMACIÓN

Alumno:_______________________________________________ DNI:_________________ Especialidad:____________

1.- Selecciona la respuesta correcta, rodeándola con un círculo. (2.5 puntos, 0,25 puntos por apartado)

Con el siguiente trozo de código que valor tiene b:


int a=0;
int b=0;
b=(a++)+1;

a) 2
b) 1
c) 0
d) Ninguna de las anteriores

¿Cuántas veces se repite la <instrucción1> en el siguiente trozo de código?


int i=0;
int j=1;
if (j<i);
for (i=20; i<=10; i-=2)
{
<instrucción 1>
}
a) 6 veces
b) 0 veces
c) 5 veces
d) Ninguna de las respuestas anteriores es correcta

El siguiente bucle for (i=1; i*=2; i++) se ejecutará:

a) 1 vez
b) 2 veces
c) 0 veces
d) Ninguna de las anteriores

Si tenemos el siguiente código:


int a=1;
int *b;
b=&a;
cambia(b);
a) En la declaración de la función debemos tener un puntero como parámetro.
b) En la declaración de la función debemos tener un entero como parámetro.
c) No es posible realizar una declaración de función correcta.
d) Ninguna es correcta.
Alumno:_______________________________________________ DNI:_________________ Especialidad:____________

Si tenemos la siguiente variable: int Numeros[7][4]; y la queremos rellenar con datos, debemos
utilizar el siguiente código:

a) for (int i=0; i<=7; i++)


for (int j=0; j<=4; j++)
b) for (int i=0; i<=6; i++)
for (int j=0; j<4; j++)
c) for (int i=0; i<=7; i++)
for (int j=0; j<4; j++)
d) La b y c son correctas

Si tenemos el siguiente código, cuál es la salida del programa:

float p;
p=++5;
printf(“%f”, p);

a) 5
b) 6.0
c) 5.0
d) Dicho programa provocará un error.

La operación (p && (q || !p)) devolverá:

a) Siempre Falso.
b) Siempre Verdadero
c) Falso, si p es falso.
d) Ninguna de las anteriores.

Qué resultado dará la siguiente expresión:


a=10; b=12; c=6; d=2;
a + (b*c) / (c * 2)+(-4+7) / d;

a) 12
b) 17
c) 9
d) Ninguna de las anteriores.

¿Qué es una de base de datos?

a) es una colección de datos relacionados con un significado implícito


b) es un conjunto de programas que permiten a los usuarios crear y mantener una serie de datos
c) es una gran colección de datos que recoge información de múltiples sistemas fuentes u
operacionales dispersos, y cuya actividad se centra en la Toma de Decisiones
d) Ninguna de las anteriores.

¿Cuál de las siguientes afirmaciones no es una restricción de integridad?

a) ningún atributo que forme parte de la clave primaria de una relación puede tomar un valor nulo.
b) Si en una relación hay una referencia a una tupla de otra relación, ésta deberá referenciar a una
tupla existente en la relación referenciada
c) En ciertos atributos no se permite valores nulos.
d) el valor de todos los atributos de una tupla no se puede repetir en ninguna otra.
Alumno:_______________________________________________ DNI:_________________ Especialidad:____________

2.- Dadas las siguientes llamadas a funciones indica cómo serían sus respectivos prototipos.
(2 puntos, 0.5 puntos por prototipo)

#include <stdio.h>

struct embarcación
{ char matricula[12]
char nombre[20];
float eslora;
float zona;
};

/* prototipos de funciones a rellenar por el alumno*/

void fun_pro1(float a, int b, float c);


int fun_pro2(struct embarcacion *a, float b, float *c);
float * fun_pro3(char a, int b, float c);
float fun_pro4(char a[11], char b[4], float c);

int main()
{
//Declaración de variables
struct embarcacion *pinta, nina;
int par1, par2;
float re_a, re_b;
float vre_1[3], vre_2[4][2];
int *pi;
float *pr;

fun_pro1(pinta->eslora, 3, re_b);
par1=fun_pro2(pinta, re_b, pr);
pr=fun_pro3(nina.nombre[0],*pi,re_b);
vre_1[2]=fun_pro4(“legendario”,”4.6”,5.0);

...
return 0;
}
Alumno:_______________________________________________ DNI:_________________ Especialidad:____________

3.- Disponiendo de las siguientes estructuras y declaración de variable, responda a las cuestiones que se
plantean: (2 puntos)

struct tripulante {
char nombre[30];
char categoría[15];
int edad;
};

struct embarcación{
char matricula[12];
char nombre[20];
float eslora;
float zona;
struct tripulante trip[10];
int n_tripulante; // número de tripulantes de la embarcación
};

struct empresa {
char nombre[25];
struct embarcación barcos[15];
char NIF[10];
float facturación;
int n_embarcaciones; // número de embarcaciones de la empresa
};

int main() {

struct empresa empresas_hu[10]; // variable que almacena a las empresas de huelva

a) Queremos mostrar el nombre del último tripulante de la segunda embarcación de la tercera empresa.

a)
ultimo=empresas_hu[2].barcos[1].n_tripulante-1;
printf(“%s”, empresas_hu[2].barcos[1].trip[ultimo].nombre)

b) Queremos mostrar los nombres de todos los tripulantes de la última embarcación, de la segunda
empresa de cuya edad sea menor de 30 años.
b)
ultima_emb=empresas_hu[1].n_embarcaciones-1;
ultimo=empresas_hu[1].barcos[ultima_emb].n_tripulante;

for(i=0;i<ultimo;i++){
if(empresas_hu[1].barcos[ultima_emb].trip[i].edad<30)
puts(empresas_hu[1].barcos[ultima_emb].trip[i].nombre);
}
Alumno:_______________________________________________ DNI:_________________ Especialidad:____________

4.- Indicar cómo queda la matriz del ejemplo una vez que se ejecuta el siguiente programa:
(1.5 puntos, 0.5 puntos por fila correcta)

1 2 3 1 2 3

4 5 6 4 5 21

7 8 9 6 9 9

#include <stdio.h> Para que el ejercicio sea corregido, el alumno


#include <stdlib.h>
obligatoriamente debe rellenar cómo queda la
int funcion(int a, int b); matriz tras cada ejecución del bucle do-while:
void procedimiento(int i, int *a, int *b);
Iteración 1:
int main()
{ int M[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j=2; 1 2 3
for (i=2; i>=0; i--){ 4 5 6
if (M[i][0]%2==0)
M[i][j]= funcion(M[i][j-1], M[i][j-2]); 6 9 9
else
procedimiento(i, &M[i][j-2],& M[i][j-1]);
}
return 0;
Iteración 2:
}

void procedimiento(int i, int *a, int *b) 1 2 3


{ int aux;
if (i%2)
{ aux = *a;
4 5 21
*a = *b;
*b = aux; 6 9 9
}
else
{ aux = *a+2;
*a = *b-2; Iteracion 3:
*b = aux;
}
} 0 3 3
int funcion(int a, int b)
{ int i, rdo=1; 4 5 21
if (a > b)
switch (b) 6 9 9
{ case 2:
case 4: for (i=1; i<=(b-2); i++)
rdo = rdo*a;
case 5: rdo-=b; Iteración 4:
break;
case 8: for (i=1; i<(b-3); i++)
rdo = rdo+a;
break;
default: rdo = a;
}
else
switch(a)
{ case 5:
Alumno:_______________________________________________ DNI:_________________ Especialidad:____________

case 7:
case 9: rdo = a+(--b);
break;
default: for (i=1; i<=a; i++)
rdo= rdo*b;
}

return rdo;
}
Examen: FUNDAMENTOS DE INFORMÁTICA
Fecha:
Curso:
Especialidad: Mecánica

Apellidos y nombre:_________________________________________________________________

Duración estimada del examen: 1,5 horas


Instrucciones:
1. Los móviles deben estar apagados
2. Es necesario disponer de un documento de identificación (DNI, pasaporte, …)
3. Los apuntes, libros y cualquier otro material deben estar debidamente guardados

Test. Selecciona la respuesta correcta, rodeándola con un círculo (3 puntos, 0.2 puntos por apartado)
1. Cuántos números diferentes es posible representar con 5 bits.
a) 16
b) 15
c) 7
d) 32
2. Cuál es el mayor número binario con signo que es posible representar con 10 bits
a) 255
b) 511 *
c) 256
d) 512
3. Indicar cuál de las siguientes listas de diferentes tipos de memorias está en orden decreciente de
velocidad (de más rápidas a más lentas):
a) disco, registros, memoria central, caché.
b) memoria central, caché, disco, registros.
c) registros, memoria central, disco, caché.
d) registros, caché, memoria central, disco. *
4. Si tenemos la siguiente llamada a una función cambia(&4):
a) En la propia función debemos recibir un puntero a entero como parámetro;
b) El parámetro en la función podría ser float;
c) La llamada a la función debería ser cambia(*4);
d) Ninguna de las respuestas anteriores es correcta. *
5. Señale cuál de las siguientes palabras no es una palabra reservada en el lenguaje C
a) enum
b) goto
c) size *
d) continue
e) signed
6. ¿Cuál es el motivo por el que el siguiente código sería incorrecto, si queremos que p apunte a x?
int *p;int x;
p = NULL;
p = *x;
a) En la última asignación el operador correcto no es el *, sino el & *
b) Para que el código fuese totalmente correcto, x debería tener algún valor.
c) A p no se le puede asignar ningún valor pues apunta a nulo
d) Tanto la a) como la c) son correctas.

1
Alumno:___________________________________________________________________________________________

7. Si tengo las siguientes variables:


float x[4], t;
int y[5][4], z, k[6];
y queremos hacer una llamada a la función cuyo prototipo es:
float funcion(float a[4], int *b, int c);
¿Cuál de las siguientes llamadas es la correcta?:
a) y[0][0] = funcion(x, &y[0][2], z);
c) x[0] = funcion (x, &k[3], y[1][2] + z); *
c) t = funcion (x, &z, &y[4][3]);
d) Todas las respuestas son correctas.
8. Cuando en un programa tengo un Warning representa que:
a) Tengo un error en tiempo de ejecución.
b) Tengo un error en tiempo de compilación.
c) Me informa de una situación que el compilador entiende que puede causar error. *
d) Ninguna de las respuestas anteriores es correcta.
9. ¿Cuánto vale la variable z tras la ejecución del siguiente trozo de código ?
int main(void)
{
int x = 1, y, z = 1;
y = 1;
if (x < y)
if (x == 1)
z = 2;
else
z = 3;
}

a) z=3
b) z=2
c) z=1 *
d) z=0
10. Tras la ejecución del siguiente código escrito en C.
int main() {
int t[3] = {3, 2, 1}, a = 0, z;
z = t[a++]--;
return 3;
}
a) z=1,a=1yt[]={1,1,2}
b) z=2,a=1yt[]={1,2,2}
c) z=3,a=1yt[]={2,2,1} *
d) z=2,a=0 yt[]={2,2,1}
11. Cuál de las siguientes afirmaciones relacionadas con la sentencia switch es correcta.
a) La expresión entre paréntesis que siempre acompaña al switch y que nos permite seleccionar entre los
diferentes casos, puede ser de tipo int, char o float.
b) Los valores que acompañan a los diferentes casos deben estar ordenados de menor a mayor.
c) Por razones de usabilidad en el código se aconseja que toda sentencia switch tenga un apartado
default.
d) El código que se ejecutaestá comprendido entre los dos puntos (:) del case en cuestión y la primera
sentencia break que haya tras los dos puntos, o bien hasta la llave que cierra el switch, en el caso de
no encontrar dicho break. *

2
Alumno:___________________________________________________________________________________________

12. La ejecución del siguiente código producirá:


int i, b=0;
if ((i=3)&&(b==0))
b=b+2;
else
b++;
a) i=3,b=2 *
b) b=2
c) No podemos saberlo ya que no sabemos cuanto vale i
d) El compilador dará un error en el if ya que en lugar dei=3 se debe poneri==3
13. Partiendo de las siguientes declaraciones de variables:
int ch; long int i; float f; double d;
De qué tipo es el resultado de evaluar la siguiente expresión:
i / (f + d * f) – i + ch
a) float
b) double *
c) int
d) Ninguna de las respuestas anteriores es correcta.
14. Si disponemos del siguiente array de caracteres char nombre[50], para asignar la cadena “HOLA” en
dicho array, la instrucción correcta es:
a) Ninguna de las respuestas anteriores es correcta. *
b) nombre = HOLA;
c) strcmp(nombre, HOLA);
d) strcpy(nombre, HOLA);

3
Alumno:___________________________________________________________________________________________

2. Disponiendo de las siguientes estructuras y declaración de variable, responda a las cuestiones que se
plantean(2 puntos):
struct provincia {
char nombre[12];
char gentilicio[15];
char fiesta_patronal[15];
int concejales;
};
struct region{
char nombre[12];
int habitantes;
float dimension;
struct provincia prov[60];
int n_provincias // indica el número de provincias por región
};
struct pais {
char nombre[25];
struct region reg[51];
char bandera[15];
int n_regiones; // indica el número de regiones de cada país
};

int main(void) {
struct país union_europea[28];

a) Queremos mostrar la suma de concejales de todas las provincias de la segunda región del último país
de la unión europea.

Int n, i, suma=0;
n=unión_europea[27].reg[1].n_provincia-1;
for(i=0; i<n; i++)
suma+=unión_europea[27].reg[1].prov[i].concejales;
printf(“El número de concejales es %i:”, suma);
system(“pause”);

b) Queremos saber qué región de la unión europea tiene mayor número de habitantes.
int mayor=unión_europea[0].reg[0].habitantes;
char nombre_mayor[12];
strcpy(nombre_mayor, unión_europea[0].reg[0].nombre);
for(i=0;i<28;i++){
n= unión_europea[i].n_regiones;
for(j=0;j<n;j++){
if (mayor< unión_europea[i].reg[j].habitantes){
mayor= unión_europea[i].reg[j].habitantes;
strcpy(nombre_mayor, unión_europea[i].reg[j].nombre);}
}
}
printf(El nombre de la región con más habitantes es %s”, nombre_mayor);

4
Alumno:___________________________________________________________________________________________

3.- Indicar cómo queda la matriz del ejemplo al ejecutar el siguiente programa. (3 puntos)
1 1 1

2 2 2

3 3 3
#include<stdio.h> El alumno debe rellenar cómo queda la matriz
#include<stdlib.h> tras cada ejecución del bucle do-while del
void procedimiento(int M[3][3], inti, int m);
int funcion(int M[3][3],inti,int m); programa principal:
Iteración 1:
int main()
{ 1 1 3
int M[3][3]= {1,1,1,2,2,2,3,3,3};
int m=0; 2 2 2
int i;
for (i=2; i>=0; i--){
switch(m){ 1 3 3
case 1:
procedimiento(M,i,m); Iteración 2:
break;
case 2: 1 1 3
M[i][m]=funcion(M,i,m);
break; 2 2 7
case 3:
M[m][i]=funcion(M,i,m);
break; 1 3 3
default:
procedimiento(M,i,m); Iteración 3:
break; 1 2 3
}
m=i%3;
} 1 2 7
return 1;
} 1 3 3
void procedimiento(int M[3][3], int i, int m){ Iteración 4:
int aux;
aux=M[i][m];
M[i][m]=M[m][i];
M[m][i]=aux;}

int funcion(int M[3][3],int i,int m){


int rdo=0;
if(i%2)
for(i=0; i<3;i++)
rdo+=M[m][i];
else
for(m=0; m<3;m++)
rdo+=M[m][i];
return rdo;
}

5
Alumno:___________________________________________________________________________________________

Ejercicio 1. (2.5 puntos)

El siguiente programa pide un número por teclado para que a continuación sea descompuesto en sus
cifras, mediante divisiones sucesivas entre la base. Despues se imprime cifra a cifra el número con el
uso del bucle for.Sin embargo se han cometido ciertos errores que impiden la ejecución y el correcto
funcionamiento del mismo.

Código original
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define BASE=10
4 int main() {
5 const int TAM==12;
6 int n,m,i;
7 int d[TAM];
8
9 printf("ingrese el numero\n%d");
10 scanf("%d",n);
11 while(n<=0)
12 {
13 printf("el numero debe ser positivo:\n");
14 scanf("%d",n);
15 }
16 i=0;
17 while(n)
18 {
19 d[i]=n%BASE;
20 n=n/BASE;
21 i++;
22 }
23 int j;
24 for(j=0;j<i;j+1)
25 {
26 printf("\ndigito de orden %d \n",j+1,d[j]");
27 }
28 system(pause);
29 return 1;
30 }

Reescriba a continuación, sólo aquellas líneas que contengan errores sintácticos, indicando su número.

Linea Código corregido


3 #define BASE 10
5 const int TAM=12;
9 printf("ingrese el numero\n");
10 scanf("%d",n);
14 scanf("%d",n);
24 for(j=0;j<i;j++)
26 printf("\ndigito de orden %d %d\n",j+1,d[j]");
28 system("pause");

6
Examen: FUNDAMENTOS DE
INFORMÁTICA

Apellidos y
nombre:_________________________________________________________________

Duración estimada del examen: 1,5 horas


Instrucciones:
1. Los móviles deben estar apagados
2. Es necesario disponer de un documento de identificación (DNI, pasaporte, …)
3. Los apuntes, libros y cualquier otro material deben estar debidamente guardados

1. Test. Selecciona la respuesta correcta, rodeándola con un círculo (3 puntos, 0.2 puntos por apartado)
1.Señale la afirmación correcta
a) La memoria RAM es de sólo lectura mientras que la ROM es de lectura y escritura.
b) Tanto la memoria RAM como la memoria ROM son volátiles.
c) La principal diferencia entre la memoria RAM y la memoria ROM es que la ROM es más rápida.
d) La memoria ROM suele usarse como buffer de almacenamiento temporal del procesador.
e) La principal diferencia entre las memoria RAM y ROM es que la RAM almacena el Sistema Operativo y
aplicaciones y la ROM almacena la BIOS.
2.Cuántos números diferentes es posible representar con 4 bits.
a) 16 b) 15 c) 7 d) 4
3.Cuál es el mayor número binario con signo que es posible representar con 8 bits
a) 255 b) 127 c) 256 d) 128
4. La diferencia fundamental entre un compilador y un intérprete es
a) que el intérprete genera código objeto entendible por el microprocesador.
b) que el compilador genera código objeto entendible por el microprocesador.
c) que el compilador a usar depende de la BIOS del ordenador concreto.
d) no hay diferencias ya que ambos son traductores.
e) Todas las respuestas anteriores son ciertas.
5. Los modificadores de los tipos de datos básicos en lenguaje C son
a) int y char.
b) int, char, float y double.
c) int, char, float, double y void.
d) unsigned, signed, long y short.
e) unsigned, signed, long, short y boolean.
e) auto, extern, static y register
6. ¿Cuál de las siguientes instrucciones de C es correcta?
a) int edad; scanf("%d",edad);
b) float nota; scanf("%f",nota);
c) char nombre[20]; scanf("%s",nombre);
d) char sexo; scanf("%c",sexo);
e) Ninguna es correcta
f) Todas son correctas
7.¿Qué escribe el siguiente programa si se teclea mecanica?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
1
Alumno:___________________________________________________________________________________________

int i, num; char cad [30];


scanf ("%s", cad);
for (i=strlen(cad), num=0; i>=0; i--)
if (cad[i]==cad[strlen(cad)-1])
num++;
printf ("%d\n", num);
system("pause");
}
a) 8
b) 2
c) 1
d) 0
e) 3
8. Evaluación de expresiones lógicas. Si a = 0 (false) y b = 1 (true), la expresión:
!(!(a || b) && !(a))
toma el mismo resultado que:
a) a && b
b) !(a || !b)
c) !!!b || !(a && b)
d) !(!a || b) || !b
e) Toma el mismo resultado que dos opciones
9. El valor que devuelve la expresión (float) b/a+1, teniendo int a=7 y int b=14 es:
a) 3
b) 3.0
c) 1
d) 2.7
10. ¿Cuántas veces se repite la <instrucción1> en el siguiente trozo de código?
int i;
for (i=2; i<=10; i+2)
if (i%4==0)
<instrucción 1>
a) 0 veces.
b) 2 veces.
c) Infinitas veces.
d) Ninguna de las respuestas anteriores es correcta.
11. Dado el siguiente subprograma en C:
#include <stdio.h>
int Oper (float a, float *b);
int main(void)
{
float A,B;
B = 4.0; A = 6.0;
Oper(A--,&B);
system("pause");
}
int Oper (float b, float *a)
{
b = b/2.0 + *a*3.0;
*a = *a-(b--);
return (int) b;
}
Los valores de A y B después de la llamada Oper(A,&B) son respectivamente:
a) 6.0 y 4.0
b) 5.0 y -11.0
c) 6.0 y -11.0
d) 4.0 y 4.0

12. Si tenemos el siguiente prototipo: void intercambiar(int &a, int &b);


2
Alumno:___________________________________________________________________________________________

a) Es correcto, si queremos intercambiar los valores, los pasamos por referencia.


b) Es incorrecto, ya que debería devolver un int en lugar de void.
c) El prototipo es incorrecto al ser incorrecta su sintaxis.
d) Ninguna de las respuestas es correcta.
13. Sea la declaración:
int C[2][2][2]={8, 7, 6, 5, 4, 3, 2, 1};
El valor de C[1][1][1] es:
a) 6
b) 5
c) 4
d) 1
e) Ninguno de los anteriores
14. Complete la siguiente frase que describe qué hace el siguiente programa:
El programa pide al usuario una matriz, la muestra y calcula ____su traspuesta_____________

#include<stdio.h>
#define MAX 5
int main(void)
{
int matriz[MAX][MAX], A, B, i=0, j=0;
printf("\n A:"); scanf("%d", &A);
printf("\n B:"); scanf("%d", &B);
for(i = 0;i < B;i++) {
for(j = 0;j < A;j++){
printf("Introduzca valor ", i+1, j+1);
scanf("%d", &matriz[i][j]);
} }
printf("\n\n");
for(i = 0;i < B;i++){
printf("\n\t\t");
for(j = 0;j < A;j++){
printf(" %6d ", matriz[i][j]);
} }
printf("\n\n");
for(j = 0;j < A;j++){
printf("\n\t\t");
for(i = 0;i < B;i++){
printf(" %6d ", matriz[i][j]);
} }
system("pause"); return 0;
}

15. Señale la afirmación incorrecta acerca del modelo de datos relacional:


a) Todas las tuplas deben ser distintas.
b) Una clave de una relación es un conjunto no vacío de atributos que identifica unívocamente cada tupla
c) ningún atributo que forme parte de la clave primaria de una relación puede tomar un valor nulo.
d) La restricción de no-obligatoriedad se utiliza para permitir valores nulos en ciertos atributos.
e) Si en una relación hay una referencia a una tupla de otra relación, ésta deberá referenciar a una tupla
existente en la relación referenciada.

3
Alumno:___________________________________________________________________________________________

2. Disponiendo de las siguientes estructuras y declaración de variable, responda a las cuestiones que se
plantean(2 puntos):
struct motor {
char modelo[30];
char combustible[15];
char tipoInyeccion[15];
int num_cilindros;
int potencia_CV;
int cubicaje_CC;
};
struct vehiculo{
char matricula[12];
float peso;
float dimension;
struct motor motores[4];
int num_motores;
};
struct empresa_logistica {
char nombre[25];
struct vehiculo vehiculos[15];
char NIF[10];
int n_vehiculos;
};
int main(void) {
struct empresa_logistica empresas_hu[10];

a) Queremos mostrar el modelo del úlLmo motor del segundo vehículo de la tercera empresa.

ultimo=empresas_hu[2].vehiculo[1].num_motores;
printf("%s", empresas_hu[2].vehiculo[1].motores[ultimo].modelo)

b) Queremos calcular la suma de todos los cubicajes de todos los motores, de todos los vehículos cuyo
peso se encuentre entre 1000 y 3000Kg. de la segunda empresa.

int acum_cubicaje=0;
for(i=0; i<empresas_hu[1].n_vehiculos; i++)
if(empresas_hu[1].vehiculos[i].peso>1000 && empresas_hu.vehiculos[i].peso<3000)
For(j=0; j< empresas_hu[1].vehiculos[i].num_motores; j++)
Acum_cubicaje+=empresas_hu[1].vehiculo[i].motores[j].cubicaje_CC;
printf("%d%",acum_cubicaje);

4
Alumno:___________________________________________________________________________________________

3.- Indicar cómo queda la matriz del ejemplo una vez a que se ejecuta el siguiente programa. ( puntos)
9 8 7 9 3 1

6 5 4 1 3 1

3 2 1 2 2 2

#include <stdio.h> El alumno debe rellenar cómo queda la matriz


#include <stdlib.h> tras cada ejecución del bucle do-while:
Iteración 1:
void Proce( int T[3][3], int a, int *b);
9 8 7
int main()
{ 6 5 4
int M[3][3]= {9,8,7,6,5,4,3,2,1};
int itr, f1, f2; 2 2 2
itr=0; Iteración 2:
f2=2;
9 8 7
do{
if(itr) 1 3 1
f1=itr-1;
else 2 2 2
f1=itr;
Iteración 3:
Proce(M,f1, &f2); 9 3 1

itr++; 1 3 1

}while(itr<3); 2 2 2
return 0;
} Iteración 4:

void Proce( int T[3][3], int a, int *b){


while(a<3){
if (a%2 == 0)
{
T[*b][a]=T[a][*b]%2+1;
a++;
}
else
{
T[*b][a]=T[a][*b]%2+2;
a++;
}
}
*b=*b-1;
}

5
Alumno:___________________________________________________________________________________________

4.- Programa que realiza una definición de tipo, así como una función que muestra los valores de variables de dicho tipo. Sin
embargo se han cometido ciertos errores. Se pide escribir correctamente cada una de las líneas en las que detecte algún error
(ya sea de tipo sintáctico, o un error que hace que la ejecución del programa no sea la esperada).
1 #include <stdio.h> #include <stdio.h>
2 #include <string.h> #include <string.h>
3 #include <stdlib.h> #include <stdlib.h>
4 tipedef struct t_libro{ typedef struct t_libro{
5 char titulo[30]; char titulo[30];
6 char autores[30]; char autores[30];
7 int edicion; int edicion;
8 int anio; int anio;
9 } };
10 int ImpLibro(t_libro p_libro); void ImpLibro(t_libro p_libro);
11 int main(){ int main(){
12 t_libro libro1; t_libro libro1, libro2;
13 printf("\n\nESTRUCTURA LIBRO.\n"); printf("\n\nESTRUCTURA LIBRO.\n");
14 /* asignaci¢n de valores a libro1 /* asignaci¢n de valores a libro1 */
15 strcpy(libro1.titulo,"Leng. de Programaci¢n C");*/ strcpy(libro1.titulo,"Leng. de Programaci¢n C");
16 strcpy("Kernighan y Ritchie", libro1.autores); strcpy(libro1.autores,"Kernighan y Ritchie");
17 libro1.edicion = 2; libro1.edicion = 2;
18 libro1.anio = 1991; libro1.anio = 1991;
19 printf("DATOS Libro 1:\n"); printf("DATOS Libro 1:\n");
20 ImpLibro(libro1); ImpLibro(libro1);
21 /* imprimir datos libro2 sin inicializar */ /* imprimir datos libro2 sin inicializar */
22 printf("DATOS Libro2 sin inicializar:\n"); printf("DATOS Libro2 sin inicializar:\n");
23 ImpLibro(libro2); ImpLibro(libro2);
24 /* asignaci¢n de valores a libro2 */ /* asignaci¢n de valores a libro2 */
25 strcpy(libro2.titulo,ibro2.titulo); strcpy(libro2.titulo,ibro2.titulo);
26 strcpy("libro2->autores, libro1->autores); strcpy("libro2.autores, libro1.autores);
27 libro2.edicion = 1; libro2.edicion = 1;
28 libro2.anio = 1978; libro2.anio = 1978;
29 printf("DATOS Libro 2:\n"); printf("DATOS Libro 2:\n");
30 ImpLibro(t_libro libro2); ImpLibro(libro2);
31 system("pause"); system("pause");
32 return 1; return 1;
33 } }
34 void ImpLibro(struct p_libro t_libro) void ImpLibro(struct t_libro p_libro)
35 { printf("Titulo: %s\n",p_libro.titulo); { printf("Titulo: %s\n",p_libro.titulo);
36 printf("Autores: %c\n",p_libro.autores); printf("Autores: %s\n",p_libro.autores);
37 printf("Anio: %d\n\n",p_libro.anio);} printf("Anio: %d\n\n",p_libro.anio);}
38 } }

6
Examen: FUNDAMENTOS DE INFORMÁTICA
Fecha: 1 de Septiembre de 2017
Curso: 2016/2017
Especialidad: Mecánica

Apellidos y nombre:_________________________________________________________________
Duración estimada del examen: 1,5 horas
Instrucciones:
1. Los móviles deben estar apagados
2. Es necesario disponer de un documento de identificación (DNI, pasaporte, …)
3. Los apuntes, libros y cualquier otro material deben estar debidamente guardados

Pregunta 1 - Test. Selecciona la respuesta correcta, rodeándola con un círculo. (Valor 2 puntos)
1).- Indique qué valor alcanza la variable a tras finalizar el siguiente trozo de código:
int a=-1, x, i=3;
for (;i<5;i=i+2)
{ for (x=1; x<4; x++);
a=a*(-2);}

a) 8
b) 16
c) 4
d) -1
e) Ninguna de las respuestas anteriores es correcta

2) La expresión (y==(t-z) && (!((t-z)!=y)) || ((t-y)==z)),devolverá:


a) Cualquier valor, ya que no sabemos cuánto valen las variables y, t, z.
b) Un error ya que la expresión indicada no tiene sentido.
c) Un valor verdadero siempre que el valor de t sea igual a la suma de y + z .
d) Ninguna de las anteriores.

3) Si no sabemos de qué tipo son las variables a, b y queremos garantizar que el resultado es un float tendremos que
usar la siguiente expresión:
a) (float)a / b;
b) (float)a / (int)b;
c) (float)(a / b);
d) Tanto la a) como la c) son correctas
e) Tanto la a) como la b) son correctas
f) Todas son correctas

4) Tras la ejecución del siguiente código escrito en C, qué valores toman la variables.
int main( )
{ int t[3] = {5, 1, 2}, a = 0, z;
z = t[a++]++;
return 0;
}
a) z = 5, a = 1 y t[] = {4, 1, 2}
b) z = 5, a = 1 y t[] = {6, 1, 2}
c) z = 2, a = 1 y t[] = {5, 2, 2}
d) z = 6, a = 1 y t[] = {6, 1, 2}

1
Alumno:___________________________________________________________________________________________

5) El valor que devuelve la expresión b+(float)(7/(a%3)), teniendo int a=11 y int b=4 es:
a) 6.33
b) 7.0
c) 7.5
d) 6.5

6) El valor que devuelve la expresión d+=a-b/c++; teniendo float a=7.0; int b=7; int c=2; float d=1;
es:
a) 3.0
b) 4.0
c) 3
d) 5.0

7) Indique qué valor alcanza la variable a tras finalizar el siguiente trozo de código:
int x, a=4;
for (x=1; x<=3; x++) {
if (x % 2 != 0)
a*2;
}
a) 8
b) 16
c) 4
d) Ninguna de las respuestas anteriores es correcta

8) Si disponemos del siguiente array de caracteres char nombre[50], para asignar la cadena “HOLA” en
dicho array, la instrucción correcta es:
a) nombre = HOLA;
b) strcmp(nombre, HOLA);
c) strcpy(nombre, HOLA);
d) Ninguna de las respuestas anteriores es correcta.

9) Una vez que compilo mi programa y no obtengo errores:


a) Puedo ejecutar el programa, ya que tras la compilación se obtiene el fichero objeto (.obj) consistente en mi
programa escrito en código máquina.
b) Puedo ejecutar el programa, ya que tras compilar obtengo el fichero ejecutable (.exe)
c) Necesito enlazar (linkar) el programa, para poder obtener el fichero ejecutable (.exe)
d) Ninguna de las respuestas anteriores es correcta.

10) ¿Cuántas veces se repite la <instrucción1> en el siguiente trozo de código?


int i=0;
int j=1;
if (j<i);
for (i=20; i<=10; i-=2)
{
<instrucción 1>
}
a) 6 veces
b) 0 veces
c) 5 veces
d) Ninguna de las respuestas anteriores es correcta
2
Alumno:___________________________________________________________________________________________

Pregunta 2: Disponiendo de las siguientes estructuras y declaraciones de variables, responda a las


cuestiones que se plantean. (3 puntos).
struct Datos_contacto{
char email[25];
char telefono_fijo[10];
char telefono_movil[10];
};
struct Fecha{
int dia;
int mes;
int anio;
}
struct Persona
{
char Nombre[35];
char Direccion[35];
struc Fehca Fecha_Nacimiento;
char clave[10]; // clave para poder acceder a los datos
struct Datos_contacto contacto[4];// el usuario debe tener cuatro contactos
int codigo_postal;
};

struct Agenda
{
struct Persona Amigos[100];
char Propietario[50];
int NAmigos;
};

int main(){
struct Agenda agenda_personal[5];}// se supone que el usuario tiene 5 agendas

a) Cambiar la clave de la tercera agenda del amigo cuyo nombre es "Antonio" . (1.2 ptos)

int i;
char clave_nueva[10];
for(i=0; i<agenda_personal[2].NAmigos;i++)
if(strcmp(agenda_personal[2].Amigos[i].Nombre, "Antonio")==0){
cout << "Introduzca la nueva clave:";
cin >> clave_nueva;
puts(agenda_personal[2].Amigos[i].clave, "clave_nueva
}
//solución optima
int i=0, encontrado=1;
char clave_nueva[10];
do{
if(strcmp(agenda_personal[2].Amigos[i].Nombre, "Antonio")==0){
cout << "Introduzca la nueva clave:";
cin >> clave_nueva;
puts(agenda_personal[2].Amigos[i].clave, "clave_nueva
encontrado=0;}
i++;

3
Alumno:___________________________________________________________________________________________

}while(i<agenda_personal[2].NAmigos && encontrado)

b) Mostrar el nombre de todos los amigos que han nacido en septiembre, mes 9. (1.8 ptos).

int i, j;
for(i=0;i<5;i++){
n_a=agenda_persona [i].nAmigos;
for(j=0;j<n_a ;j++){
if(agenda_personal[i].Amigos[j].Fecha_nacimiento.mes==9)
cout<< agenda_persona[i].Amigos[j].nombre);}}

agenda_personal[5]

Propietario[50] Amigos[100] NAmigos

nombre[35] Dirección[35] contacto[4]


FechaNacimiento clave[10] codigo postal

email[25] telefono_movil[10]
telefono_fijo[10] dia mes año

4
Alumno:___________________________________________________________________________________________

Pregunta 3.- El siguiente programa pretende leer una matriz de 10 x 5 enteros y calcular el valor mayor
y menor de la filas comprendidas entre A y B (ambas inclusive), siendo A y B dos valores distintos
introducidos por teclado que hacen referencia a los índices (según el usuario) de las filas. Sin embargo
se han cometido ciertos errores que impiden la ejecución y el correcto funcionamiento del mismo. Se
pide al alumno escribir correctamente cada una de las líneas en las que detecte algún error (ya sea de
tipo sintáctico, o bien un error que hace que la ejecución del programa no sea la esperada). (Valor 2
puntos).
1 #include <stdlib.h>
2 #include <studio.h> #include <stdio.h>
3 #define filas=10; #define filas 10
4 #define col=5; #define col 5
5 int main(void)
6 { int T[fil][col] { int T[filas][col];
7 int i, j; int i, j, A, B, mayor,
menor;
8 for (i=0, i==filas, i++) for (i=0; i<filas; i++)
9 for (j=0; j<=col-1; j++)
10 printf("M[&i,&i]: ", i+1;j+1); { printf("M[%i,%i]: ",
i+1, j+1);
11 scanf("%i%i", T[i][j]); scanf("%i", &T[i][j]); }
12 do
13 { printf("\nIndique los índices de 2 filas: ");
14 scanf("&i &i", %a %b); scanf("%i %i", &A, &B);
15 if (A<0 || B<0) || (A>filas || B>filas) if (A<1 || B<1 || A>filas
|| B>filas)
16 printf("\n\nLos índices son Incorrectos)"; printf("\n\nLos índices
son Incorrectos");
17 if (A=B) if (A==B)
18 printf("\n\nLos índices deben ser diferentes.");
19 } while (A<0 && B<0) || (A>filas && B>filas) || } while (A<1 || B<1 ||
(A<>B) A>filas || B>filas ||
A>=B);
20 mayor=T[0][0]; mayor=T[A-1][0];
21 menor=T[0][0]; menor=T[A-1][0];
22 for (i=0; j<fil; i++) for (i=A-1; i<B; i++)
23 for (j=0; j<col; j++); for (j=0; j<col; j++)
(sobra ;)
24 { if (T[fil][col]) > mayor; { if (T[i][j] > mayor)
(sobra ;)
25 mayor=T[fil,col];
26 else
27 menor=T[fil,col];
28 }
29 printf("El mayor es %s", mayor, " y el menor es
%i", menor);
30 system("pause");
31 return 0;
32 }

5
Alumno:___________________________________________________________________________________________

Pregunta 4.- Indicar cómo va variando la siguiente matriz a cada iteración del bucle while(i<2). (3 puntos)
9 8 7

6 5 4

3 2 1
#include <stdlib.h> El alumno debe rellenar cómo queda la matriz
#include <iostream> tras cada ejecución del bucle do-while:
using namespace std; Iteración 1:
int main()
6 8 7
{
int T[3][3]= {9,8,7,6,5,4,3,2,1};
int itr, f1, f2; 6 3 4
int i=0;
while(i<2){ 3 2 6
itr=0; Iteración 2:
if(i) {
f2=0; 5 8 7
f1=2;
do{ 6 3 4
if (f1%2 == 0)
{ 3 2 6
T[f1][f2]=T[f2][f1]%2+5;
Iteración 3:
f1--;
f2=f2+1;
}
else {
T[f2][f1]=T[f2][f1]%2+2;
f1--;
f2=f2-1;
} Iteración 4:
itr++;
}while(itr<3);
}
else {
f1=2;
f2=2;
do{
if (f1%2 == 0)
{
T[f1][f2]=T[f2][f1]%2+5;
f1--;
f2=f2-1;
}
else {
T[f2][f1]=T[f2][f1]%2+2;
f1--;
f2=f2-1;
}
itr++;
}while(itr<3);
}
i++;
}
return 0;
}

6
Examen: FUNDAMENTOS DE INFORMÁTICA
Fecha: 6 de FEBRERO de 2017
Curso: 2013/2017
Especialidad: Mecánica

Apellidos y nombre:_________________________________________________________________

Duración estimada del examen: 1,5 horas


Instrucciones:
1. Los móviles deben estar apagados
2. Es necesario disponer de un documento de identificación (DNI, pasaporte, …)
3. Los apuntes, libros y cualquier otro material deben estar debidamente guardados

1
Alumno:___________________________________________________________________________________________

Pregunta 2: Disponiendo de las siguientes estructuras y declaraciones de variables, responda a las


cuestiones que se plantean(3 puntos):
struct Datos_contacto{
char email[25];
char telefono_fijo[10];
char telefono_movil[10];
};
struct Persona
{
char Nombre[35];
char Direccion[35];
char Fecha_Nacimiento[11];
char clave[10]; // clave para poder acceder a los datos
struct Datos_contacto contacto[4];// el usuario debe tener cuatro contactos
int codigo_postal;
};

struct Agenda
{
struct Persona Amigos[100];
char Propietario[50];
int NAmigos;
};

int main(){
struct Agenda agenda_personal[5];}// se supone que el usuario tiene 5 agendas
a) Pedir una clave por teclado y comprobar si la clave del último Amigo de la primera agenda coincide con la
pedida por teclado. (1.2 ptos)

char c[10];
cout << "Introduzca la clave: ";
u=agenda_personal[
if(strcmp(c,Agenda_personal.Amigos[u].clave)==0)
cout << "clave correcta";
else
cout << "clave incorrecta";

b) Mostrar el número fijo de todos los Amigos de todas las agendas. (1.8 ptos).

int i, j, k;
for(i=0;i<5;i++){
n_a=agenda_persona [i].nAmigos;
for(j=0;j<n_a ;j++){
for(k=0;k<4; k++){
cout<< agenda_persona[i].Amigos[j].contacto[k].telefono_fijo);
}
}
}

2
Alumno:___________________________________________________________________________________________

agenda_personal[5]

Propietario[50] Amigos[100] NAmigos

nombre[35] Dirección[35] contacto[4]


FechaNacimiento clave[10] codigo postal

email[25] telefono_fijo[10] telefono_movil[10]

3
Alumno:___________________________________________________________________________________________

Pregunta 3: Indicar cómo va quedando la matriz del ejemplo tras cada iteración si se ejecuta el siguiente
programa. (3 puntos)
1 2 1

2 3 2

3 0 3

#include<stdio.h> El alumno debe rellenar cómo queda la matriz


#include<stdlib.h> tras cada ejecución del bucle do-while:
Iteración 1:
#define n 3
15 16 15
void Proc( int MA[n][n], int f1, int dia);
int Fun(int MA[n][n], int d); 2 3 2

int main() 3 0 3
{ Iteración 2:
int M[n][n]= {1,2,1,2,3,2,3,0,3};
int j,d; 15 16 15
j=0;
do{ 23 24 23
if (j%2){
d=Fun(M,0); 3 0 3
}
Iteración 3:
else{
d=Fun(M,1); 15 16 15
}
Proc (M, j, d); 23 24 23
j++;
}while(j<n); 87 84 87
system(“Pause”);
return 0; Iteración 4:
}

void Proc ( int MA[n][n], int f1, int dia){


int i;
for (i=0;i<n;i++){
if (f1%2) {
MA[f1][i]=MA[f1][i]+dia;
}
else{
MA[f1][i]=MA[f1][i]+dia*2;
}
}
}

int Fun (int MA[n][n], int d){


int i, r=0;
switch(d){
case 0: for (i=0;i<n;i++) r=r+MA[i][i];
break;
case 1: for (i=0;i<n;i++) r=r+MA[i][n-i-1];
}
return r;
}

4
Alumno:___________________________________________________________________________________________

4.- Programa que calcula el número de créditos y la cantidad de curso que un alumno está matriculado. Sin embargo se han
cometido ciertos errores. Se pide escribir correctamente cada una de las líneas en las que detecte algún error (ya sea de tipo
sintáctico, o un error que hace que la ejecución del programa no sea la esperada)(2 ptos)
Programa con errores Programa sin errores
1 #include<iostream> #include<iostream>
2 #include<string> #include<string>
3 #include <conio.h> #include <conio.h>
4 int main() int main()
5 { {
6 int ncredisp, ncred, ncursos=0,ciclo; int ncredisp, ncred, ncredmat=0, ncursos=0,ciclo;
7 char i, nom[25], seguir; char i, nom[25], seguir;
8 do{ do{
9 printf("Quiere introducir nuevo alumno (S/N): "); printf("Quiere introducir nuevo alumno (S/N): ");
10 getche(seguir); seguir=getche();
11 while(seguir!='S' | | seguir!='s' | | seguir!='N' | | seguir!='n'){ while(seguir!='S' && seguir!='s' && seguir!='N' &&
seguir!='n'){
12 printf("\nOp. erroena, (S/N): "); printf("\nOp. erroena, (S/N): ");
13 seguir=getche();} seguir=getche();}
14 if (seguir== 'N' || seguir== 'n') if (seguir== 'N' || seguir== 'n')
15 ciclo=3; ciclo=3;
16 else{ else{
17 printf("Nombre del alumno: "); printf("Nombre del alumno: ");
18 nom=gets(); gets(nom);
19 printf("Introd. el ciclo (1.-grado 2.- master): "); printf("Introd. el ciclo (1.-grado 2.- master): ");
20 scanf("%i",&ciclo);}//1.- grado 2.- master scanf("%i",&ciclo);}//1.- grado 2.- master
21 switch(ciclo){ switch(ciclo){
22 case 1: case 1:
23 ncredisp=60;ncredmat=0;ncursos=0;i=1; ncredisp=60;ncredmat=0;ncursos=0;i=1;
24 printf("Creditos disponibles: %f\n", ncredisp); printf("Creditos disponibles: %i\n", ncredisp);
25 do{ do{
26 printf("Intr. los creditos de %i- curso: ", i); printf("Intr. los creditos de %i- curso: ", i);
27 scanf("%i", &ncred); scanf("%i", &ncred);
28 while(ncred<0||ncred>ncredisp){ while(ncred<0||ncred>ncredisp){
29 printf("Debe estar entre 0 y %i:", ncredisp); printf("Debe estar entre 0 y %i:", ncredisp);
30 scanf("%i", &ncred);} scanf("%i", &ncred);}
31 ncredmat+=ncred; ncredmat+=ncred;
32 if(ncred>0) if(ncred>0)
33 ncursos+1; ncursos++;

5
Alumno:___________________________________________________________________________________________

Programa sin errores Programa sin errores


34 ncredisp=ncredisp-ncred; ncredisp=ncredisp-ncred;
35 printf("Credito Restante: %i\n", ncredisp) printf("Credito Restante: %i\n", ncredisp)
36 i++; i++;
37 }while(i<=4 && ncredisp>0) }while(i<=4 && ncredisp>0)
38 break; break;
39 case 2: case 2:
40 ncredisp=30;ncredmat=0;ncursos=0;i=1; ncredisp=30;ncredmat=0;ncursos=0;i=1;
41 printf("Creditos disponibles: %i\n", ncredisp); printf("Creditos disponibles: %i\n", ncredisp);
42 do{ do{
43 printf("Introd. los cred. de %i- curso: ", i); printf("Introd. los cred. de %i- curso: ", i);
44 scanf("%i", &ncred); scanf("%i", &ncred);
45 while(ncred<0||ncred>ncredisp){ while(ncred<0||ncred>ncredisp){
46 printf("Debe estar entre 0 y %i:", ncredisp); printf("Debe estar entre 0 y %i:", ncredisp);
47 scanf("%i", &ncred);} scanf("%i", &ncred);}
48 ncredmat+=ncred; ncredmat+=ncred;
49 if(ncred<0); if(ncred>0)
50 ncursos++; ncursos++;
51 ncredisp=ncredisp+ncred; ncredisp=ncredisp-ncred;
52 printf("Credito Restante: %i\n", ncredisp); printf("Credito Restante: %i\n", ncredisp);
53 i++; i++;
54 }while(i<=2 && ncredisp>0); }while(i<=2 && ncredisp>0);
55 break; break;
56 case 3: case 3:
57 printf("Hasta pronto."); printf("Hasta pronto.");
58 } }
59 if (ciclo=3){ if (ciclo!=3){
60 printf("INFORME: \n"); printf("INFORME: \n");
61 printf("Nombre del alumno: %s\n", nom); printf("Nombre del alumno: %s\n", nom);
62 printf("Ciclo del alumno: %i\n", ciclo); printf("Ciclo del alumno: %i\n", ciclo);
63 printf("Total de creditos matriculados: %i\n",ncredmat); printf("Total de creditos matriculados: %i\n",ncredmat);
64 printf("Total de creditos disponibles: %i\n",ncredisp); printf("Total de creditos disponibles: %i\n",ncredisp);
65 printf("Cursos matriculados: %i\n", ncursos);} printf("Cursos matriculados: %i\n", ncursos);}
66 }while(seguir!='N' | | seguir!='n'); } }while(seguir!='N' && seguir!='n'); }

6
Examen: FUNDAMENTOS DE
INFORMÁTICA
Fecha: 6 de FEBRERO de 2015
Curso: 2014/2015Duración del
examen: 2 horas
Especialidad: MecánicaDuración del
examen: 2 horas

Apellidos y nombre:______________________________________________________
Duración estimada del examen: 1,5 horas
Instrucciones:
1. Los móviles deben estar apagados
2. Es necesario disponer de un documento de identificación (DNI, pasaporte, …)
3. Los apuntes, libros y cualquier otro material deben estar debidamente guardados

Pregunta 1: Selecciona la respuesta correcta, rodeándola con un círculo. (2 puntos) (0.2 puntos por
apartado)

1) ¿Cuál de las siguientes NO es uno de los objetivos de las bases de datos?


a) Seguridad.
b) Integridad
c) Claridad
d) Evitar la redundancia

2) ¿Qué es una base de datos?


a) Conjunto de programas que permiten a los usuarios crear y mantener una base de datos
b) Conjunto formado por la Base de Datos y el SGBD
c) Colección de datos relacionados con un significado implícito.
d) Gran volumen de datos recopilados del universo del discurso

3) ¿Cuál de las siguientes No es una característica que deben cumplir las relaciones?
a) Cada relación tiene un nombre distinto al del resto de las relaciones
b) Los valores de los atributos son atómicos: en cada tupla, cada atributo toma un solo valor
c) No puede haber dos atributos con igual nombre en una relación. Además, el orden de los atributos no es
relevante.
d) No puede haber tuplas repetidas y deben estar ordenadas

4) Cuál de las siguientes opciones es una características de la Memoria Principal:


a) Está ligada a las unidades más rápidas del ordenador (UC, ALU, Controladores)
b) Está dividida en una serie de celdas (posiciones de memoria o palabras), numeradas con una dirección
unívoca a través de la cual se accede a cada una de ellas, cada celda tiene una longitud que siempre es un
byte.
c) La longitud de las palabras se mide en número de bytes (unidad mínima de información que se puede
almacenar).
d) La capacidad de la memoria se mide en bits.
e) Ninguna es correcta
f) Todas son correctas

1
Alumno:___________________________________________________________________________________________

5) ¿Qué función tiene este símbolo?


a) Llamada subrutina
b) Representa el comienzo y el final de un algoritmo
c) Representa una introducción de datos en la memoria desde los periféricos.
d) Indica cualquier tipo de operación.
6) El lenguaje C es:
a) Es muy portable, potente, eficiente, de propósito específico, compilado y de nivel medio.
b) Es muy portable, potente, eficiente, de propósito general, interpretado y de nivel medio.
c) Es muy portable, potente, eficiente, de propósito general, compilado y de nivel medio.
d) Es muy portable, potente, eficiente, de propósito general, compilado y de nivel alto.

7) Ante el siguiente código ¿qué valor toma la variable a?

int a=0;
switch (a+1){
case 1: a+1;
case 2: a+1;
case 3: a-1
default: a+1;
}
a) 2
b) 3
c) 0
d) 1

8) Si quisiera recorrer el siguiente array int matriz[7][3] desde el último elemento al primero, usaría el siguiente
código.
a) for(i=0; i<7;i++)
for(j=0;j<3;j++)
matriz[i][j];
b) for(i=6; i>=0;i--)
for(j=2;j>=0;j--)
matriz[i][j];
c) for(i=6; i>0;i--)
for(j=2;j>0;j--)
matriz[i][j];
d) for(i=0; i<7;i++)
for(j=0;j<3;j++)
matriz[j][i];

9) ¿Para qué sirve esta función strlwr(c1)?


a) Copia la cadena c2 sobre la cadena c1.
b) Convierte la cadena c1 a minúsculas
c) Concatena la cadena c1 con la cadena c2.
d) Busca la primera ocurrencia del carácter ch1 en la cadena c1.

2
Alumno:___________________________________________________________________________________________

10) A partir de la siguiente declaración de variables

#define PI 3.14
#define N "2"
struct punto{
float coordX;
float coordY;
};
struct punto Figuras[10], *F1;
char *p, colores[10][15];
float datos[20][10];
int T[15], N1;

y la llamada al subprogramaSUBPROG (N, &F1->coordX, &Figuras[N1].coordY, datos);¿cuál es el prototipo


adecuado?
a) void SUBPROG(float P1, char P2[15], float *P3, char P4[12]);
b) float SUBPROG(struct punto P1[10], char P2[2], float *P3);
c) struct punto SUBPROG(char *P1, char P2[4]);
d) float SUBPROG(struct punto P1[10], char P2[3], float *P3);
e) void SUBPROG(float P1, char P2[10], float *P3, struct punto *P4);
f) void SUBPROG(char P1, float P2, char P3);
g) void SUBPROG(char P1[2], float *P2, float *P3, float P4[20][10]);
h) void SUBPROG(char P1[3], float *P2, float *P3, float P4[20]);

3
Alumno:___________________________________________________________________________________________

Pregunta 2: Disponiendo de las siguientes estructuras y declaración de variable, responda a las


cuestiones que se plantean (3 puntos):
struct integrante {
char nombre[50];
char instrumento[20];
int valoración; // consideración a nivel mundial de integrante
};
struct banda {
char nombre[15];
int n_integrantes; // número de integrantes del grupo
int honorarios; // en miles de euros.
struct integrante componentes[10];
};
struct concierto {
char nombre[10];
char fecha[9];
int presupuesto; // en millones de euros
struct banda grupo[20];
int n_grupos // número de grupos en el festival
};
int main(){
struct concierto festival[10];
}
a) Mostrar el nombre del festival con mayor presupuesto(1.2 ptos).

int i; int i;
int mayor=0, int pos; int mayor=0, char nombre2[10];
for(i=0;i<10;i++) for(i=0;i<10;i++)
if(festival[i].presupuesto>mayor){ if(festival[i].presupuesto>mayor){
mayor= festival[i].presupuesto; mayor= festival[i].presupuesto;
pos=i; strcpy(nombre, festival[i].nombre) ;
} }
printf("El nombre es %s", festival[i].nombre); printf("El nombre es %s",nombre2);//puts(nombre2);
// puts(festival[i].nombre);

b) Mostrar el nombre del segundo componente del grupo con mayor honorarios. (1.8 ptos)

int i,j;
int mayor=0, char nombre2[50];
for(i=0;i<10;i++){
n=festival[i].n_grupos-1;
for(j=0;j<n;j++)
if(festival[i].grupos[j].honorarios>mayor){
mayor= festival[i].grupo[j].honorarios;
strcpy(nombre2, festival[i].grupos[j].componentes[1].nombre) ;
}
printf("El nombre es %s",nombre2); //puts(nombre2);

4
Alumno:___________________________________________________________________________________________

Indicar cómo queda la matriz del ejemplo una vez a que se ejecuta el siguiente programa. (3 puntos)
2 5 7 6 2 6 8 12

1 3 5 4 8 9 5 4

0 1 1 6 15 15 5 4

7 6 0 0 17 21 13 16
#include<stdlib.h> El alumno debe rellenar cómo queda la
#include<stdio.h> matriz tras cada ejecución del bucle do-
while:
#define n 4 Iteración 1:

void Proc(int MA[n][n],int f1, int f2,int f3); 2 6 8 12

int main() 1 3 5 4
{
int it; 0 1 1 6
int M[4][4]={2,5,7,6,1,3,5,4,0,1,1,6,7,6,0,0};
7 6 0 0
it=1;
Iteración 2:
do
{
2 6 8 12
if (M[it-1][it-1]%2 == 0) Proc(M,n-4,n-2,it-1);
else Proc(M,n-3,n-1,it-1); 8 9 5 4
it++;
} 0 1 1 6
while (it<=n);
system("Pause"); 7 6 0 0
return 0; Iteración 3:
}
2 6 8 12
void Proc(int MA[n][n],int f1, int f2, int f3)
{
int i; 8 9 5 4

for (i=0;i<n;i++) 15 15 5 4
{
MA[f3][i]=MA[f1][i]+MA[f2][i]; 7 6 0 0
}
Iteración 4:
}
2 6 8 12

8 9 5 4

15 15 5 4

17 21 13 16

5
Alumno:___________________________________________________________________________________________

4.- Programa que visualiza la media, el valor más pequeño, el valor más grande y la cantidad de números positivos de un vector,
llamando a una función que realiza dichos cálculos. Sin embargo se han cometido ciertos errores. Se pide escribir correctamente
cada una de las líneas en las que detecte algún error (ya sea de tipo sintáctico, o un error que hace que la ejecución del programa
no sea la esperada) (2 ptos)
Programa con errores Programa sin errores
1 #include <stdio.h> #include <stdio.h>
2 #include <stdlib.h> #include <stdlib.h>
3 #define tamax 20; #define tamax 20
4 void calculos (float vect[tamax], int celdas, float *media, void calculos (float vect[tamax], int celdas, float *media,
float *min, float *max, int *npos) float *min, float *max, int *npos);
5 int main (){ int main (){
6 float vect [celdas]={3.4, 4.5, 7.0, 8.0, 1.0, 0.0, 3.0, 1.0, 10.0, float vect [tamax]={3.4, 4.5, 7.0, 8.0, 1.0, 0.0, 3.0, 1.0,
5.0}; 10.0, 5.0};
7 int celdas=10; int npos,celdas=10;
8 float min, max, media; float min, max, media;
9 calculos (vect, celdas, media, min, max, npos); calculos (vect, celdas, &media, &min, &max, &npos);
10 printf ("\nLa media del vector es: %f",media); printf ("\nLa media del vector es: %f",media);
11 printf ("\nEl valor mas bajo es: %f",min); printf ("\nEl valor mas bajo es: %f",min);
12 printf ("\nEl valor mas alto es: %f",max); printf ("\nEl valor mas alto es: %f",max);
13 printf ("\nHay %f numeros positivos\n",npos); printf ("\nHay %d numeros positivos\n",npos);
14 system("pause"); system("pause");
15 } }
16 void calculos (float vect[tamax], int celdas, float *media, void calculos (float vect[tamax], int celdas, float *media,
float *min, float *max, int *npos) { float *min, float *max, int *npos) {
17 int suma; float suma;
18 int i; int i;
19 suma=0; *min=-999999.0; *max=999999.0; *npos=0; suma=0; *min=999999.0; *max=-999999.0; *npos=0;
20 for (i=0;i<=celdas;i++){ for (i=0;i<celdas;i++){
21 suma=suma+vect[i]; suma=suma+vect[i];
22 if (vect[i]< *min) *min=vect[i]; if (vect[i]< *min) *min=vect[i];
23 if (vect[i]> *max) *max=vect[i]; if (vect[i]> *max) *max=vect[i];
24 if (vect[i]>= 0) *npos=*npos+1; if (vect[i]>= 0) *npos=*npos+1;
25 } }
26 *media=celdas/suma; *media=suma/celdas;
27 } }

También podría gustarte