Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Problemes de programació
Índex de problemes per categories
1. Oposicions València 1999.....................................................................................................................1
2. Oposicions València 2000.....................................................................................................................1
3. Oposicions València 2001.....................................................................................................................2
4. Oposicions València 2002.....................................................................................................................4
5. Oposicions València 2004.....................................................................................................................8
6. Oposicions València 2005.....................................................................................................................9
7. Oposicions València 2006.....................................................................................................................9
8. Oposicions València 2006...................................................................................................................10
9. Oposicions València 2007...................................................................................................................10
10. Oposicions València 2009.................................................................................................................10
Oposicions Informàtica
El módulo Borrar_nodo, eliminará un nodo con un determinado valor. Para simplificar esta
última operación, supondremos que el nodo a eliminar tiene un solo subárbol o ninguno.
La estructura de datos a utilizar será un array de punteros a bloques de memoria obtenidos por
petición dinámica. Cada uno de dichos bloques será del tamaño mínimo imprescindible para
almacenar la cadena de caracteres que supone cada uno de los nombres de ciudades en
cuestión. El array podrá referenciar hasta un máximo de 10 nombres de ciudad.
Para la introducción de datos por teclado se desarrollará una función de entrada filtrada de
caracteres, la cual dará por concluida la introducción del nombre de una ciudad al pulsar la
tecla RETURN. Para ello se utilizará una función estándar que capture el código de la tecla
pulsada, sin eco ni confirmación, devolviéndolo como valor de retorno.
Minimizar en la medida de lo posible el uso del operador indexación “[]”, sustituyéndolo por la
utilización de punteros.
a) b) c) d)
129.4573 129.4573 129.4573 error
33 335 335
ii. La clase de almacenamiento que se toma por defecto en C para las variables locales es:
a) register
b) static
c) auto
d) int
iv. ¿En cuál de los siguientes programas se utiliza correctamente el paso de parámetros
por referencia?
val*=val; *val*=*val;
return(val); }
}
c) #include <stdio.h> d) El lenguaje C no permite paso por
int cuadrado(int &val); referencia.
void main(void) {
int n=5;
n=cuadrado(*n);
printf(“\n%d^2=%d”,5,n);
}
int cuadrado(int &val) {
*val*=*val;
}
vii. ¿Qué ocurrirá si se asigna un valor a un elemento de un array estático cuyo índice
excede el tamaño del array?
a) El elemento valdrá 0.
b) Error de compilación.
c) Otros datos pueden ser sobrescritos.
d) Se aumenta el tamaño del segmento de datos.
a) error de compilación
b) 5*# 4*# 3*# 2*# 1*
c) 5*# 6*# 5*# 4*# 3*# 2*# 1*#
d) 5*# 6*# 5*# 4*# 3*# 2*# 1*
a) f1 es una estructura.
b) valor es de tipo int.
c) el puntero se posiciona tomando como origen el fin del fichero.
d) Todas las anteriores son falsas.
#define LCAD 81
typedef struct
{
int c1;
char c2[LCAD];
Oposicions Informàtica
char c3;
float c4;
} Treg;
typedef struct
{
int c1;
float c2;
char c3;
char cad1[LCAD],cad2[LCAD],cad3[LCAD];
} R;
char c;
int i,j;
int * pi;
float x;
char palabra[LCAD];
FILE *f, *fdat, *ftxt;
Se define:
Indique cuál de las siguientes expresiones recoge por teclado el mes de nacimiento del
registro apuntado por p:
a) registro.cad3[3]
b) registro[3].cad3[3]
c) registro [5][3]
d) registro[3].cad3
v. Una función tiene que ordenar una tabla t de registros de tipo Treg por el campo c3.
La sentencia de comparación entre dos elementos de la tabla dentro de la función es:
vi. Para detectar el final de una cadena de caracteres char s[10], que almacena la
palabra “HOLA”, el lenguaje C:
a) v[3].int
b) v(3).c1
c) v.c1[3]
d) (v+3)->c1
viii. Dado un fichero binario de registros de tipo Treg, la sentencia que posiciona el cursor
de lectura preparado para leer el tercer registro es:
a) fseek(fdat,3*sizeof(Treg),SEEK_SET);
Oposicions Informàtica
b) fseek(fdat,2*sizeof(Treg),SET_SEEK);
c) fseek(fdat,2*sizeof(Treg),SEEK_SET);
d) fseek(fdat,3*sizeof(Treg),SEEK_CUR);
ix. ¿Qué doble bucle for imprime los elementos de una matriz n x n que se encuentren por
debajo de la diagonal principal? Es decir dada int t[3]
[3]={1,2,3,4,5,6,7,8,9} imprimiría 4 7 8.
x. Si fdat es una variable fichero asociada al fichero binario datos.dat, para abrirlo sólo
para escribir y borrar su contenido si fdat existe, la sentencia necesaria es:
a) fopen(fdat,"datos.dat","wb");
b) fopen("datos.dat","wb",fdat);
c) fdat = fopen("datos.dat","wb+");
d) fdat = fopen("datos.dat","wb");
a) PEPI
b) PEPITO GRILLO
c) PEPITO
d) PEPIT
a) p=&x;
b) x=p*;
c) &x=p;
d) &p=x;
entera posicion tiene el valor 9, ¿cuál será el contenido de la tabla tab tras la llamada
desplaza (tab,&posicion); ?
a) {1,0,0,0,0,0,0,0,0,0}
b) {1,0,0,0,0,0,0,0,0,1}
c) {0,0,0,0,0,0,0,0,0,1}
d) {0,0,0,0,0,0,0,0,0,0}
xiv. Si se quiere leer una variable c de tipo carácter de un fichero de texto denominado
ftxt, una posible sentencia sería:
a) &c=fgetc(ftxt);
b) fscanf("%c",&c,ftxt);
c) fscanf(ftxt,"%c",c);
d) fscanf(ftxt,"%c",&c);
xv. El siguiente fragmento de código se compila correctamente, pero tiene errores que
pueden provocar resultados inesperados durante la ejecución. Indicar dónde están estos
errores y explicar brevemente por qué se pueden producir.
void main(void) {
int i,j,v[50],*p;
char *s;
float f;
j=10;
for(i=0;i<=10;i++){
v[i]=0;
v[j]=5;
j-=2;
}
s=”Una cadena”;
p=v;
p++;
*p=f;
p=(int *)malloc(50*sizeof(int));
p=&i;
*p=20;
free(p);
}
• Nombre
• Teléfono
• E-mail
• Nombre (20)
• Teléfono (15)
• E-mail (20)
• Un cuarto campo que se obtendrá de concatenar los números de telefónico con la
primera letra del e-mail. Su longitud es 25.
Esta función devuelve 0 si las dos cadenas son iguales, devuelve 1 si la primera cadena
es mayor que la segunda y devuelve -1 si la segunda es mayor que la primera.
c) Si se considera necesario crear una función para concatenar el Teléfono con la primera
letra del E-Mail, la sintaxis será:
void concatena(cadena1, cadena2);
función en C que reciba la lista y el nombre de un país y elimine este país con su capital (en
caso de que esté en la lista) o muestre un mensaje (en caso de que no esté). La función debe
realizar las funciones de liberación de memoria necesarias. También se debe declarar la
estructura en C utilizada para los nodos de la lista.
• Un árbol de Fibonacci de orden n > 1 consta de una raiz, un subárbol izquierdo que es
un árbol de Fibonacci de orden n – 1 y un subárbol derecho que és un árbol de
Fibonacci de órden n – 2.