Examen
Examen
MRA_Engineer
Programación
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
SEPTIEMBRE 1996
____________________________________________________________________________________
____________________________________________________________________________________
APELLIDOS:
NOMBRE:
El alumno debe contestar cada pregunta colocando DOS cifras decimales en el recuadro RESPUESTA,
que correspondan con la SUMA de las opciones que considere correctas.
Ejemplos:
-- Si se considera que son correctas las opciones 01) y 04), se contestará con:
RESPUESTA: 0 5
-- Si se considera que son correctas las opciones 01), 02) y 08), se contestará con:
RESPUESTA: 1 1
RESPUESTA: 0 8
RESPUESTA: 0 0
NOTA:
Suponer que en los códigos fuente de todos los enunciados están ya incluidos mediante directivas
"include" todos los ficheros de cabecera que sean necesarios.
_________________________________________ __________________________________________
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
01) ¿Qué imprime el siguiente programa si se introduce por teclado la cadena "Ana Ines"?
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
{ if (*cad >= 'a' && *cad <= 'z') *cad -= 'a' - 'A';
cad++; }
return (pun);
}
main()
{
char cad[100];
gets (cad);
fun (cad);
puts (cad);
}
RESPUESTA:
____________________________________________________________________________________
02) Se pretende crear un array que contenga los coeficientes de un polinomio de orden "n", con el
siguiente programa:
#include<stdlib.h>
main ()
{ float *P; /* P = puntero a los coeficientes del polinomio */
int n, i; /* n = orden del polinomio */
printf ("Orden del polinomio:"); scanf ("%d", &n);
if ((P = (float *) malloc ((n+1) * sizeof (float))) == NULL)
{ printf ("Error de reserva dinámica de memoria"); exit (-1); }
printf ("Introduce coeficientes de la forma An An-1 ..... A0");
for (i = n; i >= 0; i--) scanf ("%f", &P[i]);
}
01) La función scanf ("%f", &P[i]) no lee los coeficientes bien, pues debería ser sin "&"
02) Crea el arrary correctamente
04) La reserva de memoria es incorrecta
08) Se debería haber puesto float P[n+1]; en vez de realizarlo mediante reserva dinámica
con malloc
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
struct pepe
{ int num;
struct inf pers;
};
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
struct inf
{ char nom[30];
int edad;
};
main()
{
struct pepe val;
printf("%d", sizeof (val));
}
01) 32
02) 30
04) 33
08) 2
____________________________________________________________________________________
04) Si queremos imprimir un polinomio de la forma P[n] X^n + P[n-1] X^n-1 + .... + P[0] , indicar si
la función siguiente imprimiría dicho polinomio:
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
char palabra[ ] = "abcd";
lon = strlen (palabra);
for (k = 1; k<=lon; k++)
{
funci2 (palabra, lon);
printf ("%s ", palabra);
}
}
void funci2 (char pal[ ], int n)
{
int i;
char car = pal[0];
for (i = 0; i<n-1; i++)
pal [i] = pal[i+1];
RESPUESTA:
____________________________________________________________________________________
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
SEPTIEMBRE 1996
____________________________________________________________________________________
int f (int);
main()
{
printf ("xxx %d", f (4));
}
int f (int x)
{
float k = 0.0;
if (x == 0) return (-1);
else
{ k = x * f (x-1); printf ("\n <> %d, %f", x, k); return (x); }
RESPUESTA:
____________________________________________________________________________________
01) No es válida porque el primer argumento de fopen ha de ser una cadena de caracteres.
02) Abre un archivo en binario para escribir y leer, cuyo nombre pide.
04) Daría error de compilación
08) Daría error de ejecución.
RESPUESTA:
_________________________________________ __________________________________________
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
#include<stdio.h>
#include <string.h>
char *funci1 (int, char *);
main()
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
{
int i;
char *p, cadena[ ]="abcd";
p = funci1 (strlen(cadena), cadena);
for (i = 0; i < strlen (cadena); i++)
printf ("%c", *p--);
}
char *funci1 (int x, char *pt)
{
int i;
for (i = 0; i < x; i++) pt++;
pt--; return (pt);
}
01) abcd
RESPUESTA:
____________________________________________________________________________________
main()
{
FILE *pun;
int y[10] = {2, 4, 6, 8, 10, 12};
int x[ ] = {1, 2, 3, 4, 5, 6};
int i = 0, n;
pun = fopen ("fic.dat", "w+b");
fwrite (x, 2, n = sizeof (x) / 2, pun);
fread (y, 2, n, pun);
for (; i<n; ) printf("%d ", y[i++]);
fclose (pun);
}
01) 2 4 6 8 10 12
02) 1 2 3 4 5 6
04) No imprime nada
08) 1 2 3 4 5 6 12 34 56 ....
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
main()
{
FILE *pun;
int y = 55;
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
int x[ ] = {1,2,3,4,5,6};
int i = 0, n;
pun = fopen ("fic.dat", "w+b");
fwrite (x, 2, n=sizeof (x) / 2, pun);
fseek (pun, -2, SEEK_END);
fread (&y, 2, 1, pun);
printf ("%d ", y);
fclose (pun);
}
01) 6
02) 1 2 3 4 5 6
04) 5
08) 1
____________________________________________________________________________________
12) Si se crea un arbol binario de búsqueda con los valores 8, 10, 5, 4, 9, 20 en el que cada nodo está
compuesto por una estructura del tipo: struct nodo
{ int dato;
struct nodo *iz;
struct nodo *de;
}
¿Qué imprimirá la función imprime , si recibe el el argumento "r" la dirección del nodo raiz?
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
13) Se quiere escribir una función que busque una cadena en un fichero de texto, usando como prototipo
de la función la siguiente: void buscar (char *cad, char *nombre_fichero); donde "cad" es la
cadena (que esta formada por una linea de texto) que se ha de buscar en las lineas del fichero cuyo
nombre es "nombre_fichero".
Indicar el conjunto de sentencias necesarias para completar la función "buscar", si queremos que, si se
encuentra la cadena buscada, se imprima primero el Número de Linea del fichero donde se encuentra la
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
cadena, y a continuación la propia cadena.
RESPUESTA:
____________________________________________________________________________________
14) Completar el programa siguiente para que lea caracteres desde la entrada estandar (stdin) en un array
"s" hasta que se introduzca un retorno de carro.
main()
{ char s[256], *p = s;
while ((*p++ = getchar ()) != '\n');
/* COMENTARIO A SUSTITUIR */
printf ("%s \n", s);
}
01) *p = '\n';
02) *p = '\0';
04) *p++ = '\n';
08) *p++ = '\0';
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
SEPTIEMBRE 1996
____________________________________________________________________________________
15) Tenemos una lista enlazada formada por elementos del tipo struct datos dado, en la que su último
elemento (cuyo campo "psig" apunta a NULL) está apuntado por el puntero "pf". Se quiere insertar un
nuevo elemento (con campo "num" a valor 20) apuntado por el puntero "P", a continuación del
apuntado por "pf". Indicar cual es el grupo de sentencias necesario para insertar dicho elemento al final de
esa lista. struct datos
{ int num; struct datos *psig; }
RESPUESTA:
____________________________________________________________________________________
typedef struct
{ char *nombre;
float nota;
} reg;
void transferir (reg *p);
main()
{
reg alumno = {"Luis Sanchez", 7.50};
transferir (&alumno);
printf ("%s, %.2f \n", alumno.nombre, alumno.nota);
}
void transferir (reg *p)
{
p->nombre = "Juan Garcia"; p->nota = 9.80; return;
}
01) Luis Sanchez, 7.50
02) Juan Garcia, 9.80
04) [valor basura], [valor basura]
08) Juan, 9.80
RESPUESTA:
_________________________________________ __________________________________________
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
struct pp
{ int n1;
int n2;
};
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
int fun (struct pp x)
{
return (x.n1 + x.n2);
}
main()
{
struct pp val = {4, 7};
printf ("%d", fun (val));
}
01) 4
02) 7
04) 12
08) Valor basura
____________________________________________________________________________________
main()
{
int *Pa, *Pb;
int a[8] = {10,20,30,40,50,60,70,80};
Pa = &a[0];
Pb = &a[5];
printf ("Pb - Pa = %x", Pb - Pa);
}
01) Pb - Pa = 10
02) Pb - Pa = 5
04) Pb - Pa = [valor basura]
08) Pb - Pa = 50
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511
____________________________________________________________________________________
DEPARTAMENTO DE AUTOMATICA
EXAMEN DE PROGRAMACION
SEPTIEMBRE 1996
____________________________________________________________________________________
#include <stdio.h>
int *funci (int *p);
int a[] = {4,8,5,9,20,3,10};
main ()
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
{
int *p;
p = funci (a);
printf ("Valor = %d\n", *p);
}
int *funci (int *p)
{
int i, m = p[0], indice=0;
for (i = 1; i < sizeof(a); ++i)
if (p[i] < m) { m = *(p+i); indice = i; }
return (p + indice);
}
01) Valor = 4
RESPUESTA:
____________________________________________________________________________________
20) Dado un programa que contiene las siguientes sentencias: char x, y = 'A';
char *Px, *Py = &y;
*Py = y+1;
x = *Py + 1;
Px = &x;
Si el valor asignado a "x" se almacena en la dirección de memoria F80 y el valor asignado a "y" se
almacena en la dirección F81, indicar el valor asignado a las variables siguientes:
01) Py vale F81, *Py vale 'B', x vale 'C', Px vale F80.
02) Py vale F81, *Py vale 'A', x vale 'B', Px vale F81.
04) Py vale F81, *Py vale 'A', x vale 'C', Px vale F80.
08) Py vale 'B', *Py vale 'C', x vale 'B', Px vale 'A'.
RESPUESTA:
_________________________________________ __________________________________________
Tenemos lo que nos faltaba: Imprime tus apuntes al mejor precio y recíbelos en casa
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-2539511