0% encontró este documento útil (0 votos)
17 vistas13 páginas

Examen

El documento presenta un examen de programación con varias preguntas. Cada pregunta presenta un código de ejemplo y varias opciones de respuesta. El estudiante debe seleccionar las opciones correctas sumando los códigos correspondientes y escribir el resultado.

Cargado por

Usuario Zeta
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
17 vistas13 páginas

Examen

El documento presenta un examen de programación con varias preguntas. Cada pregunta presenta un código de ejemplo y varias opciones de respuesta. El estudiante debe seleccionar las opciones correctas sumando los códigos correspondientes y escribir el resultado.

Cargado por

Usuario Zeta
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Prog96b.

pdf

MRA_Engineer

Programación

1º Grado en Ingeniería Electrónica de Comunicaciones

Escuela Politécnica Superior


Universidad de Alcalá

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
____________________________________________________________________________________

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:

CARRERA de la asignatura: I.T.Sist.Electrónicos I.T.Sist.Telecomunicación I.T.Telemática


(márquese lo que proceda) Libre Elección: SI NO
____________________________________________________________________________________

INFORMACION SOBRE LA FORMA DE REALIZAR EL EXAMEN


=====================================================

Reservados todos los derechos.


Después del enunciado de cada pregunta, existen cuatro opciones numeradas: 01) 02) 04) 08).

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

-- Si se considera que sólo es correcta la opción 08), se contestará con:

RESPUESTA: 0 8

-- Si se considera que ninguna opción es correcta, se contestará con:

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"?

char *fun (char *cad)


{
char *pun = cad;
while (*cad != 0)

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);
}

01) ANA INES


02) ana ines

Reservados todos los derechos.


04) aNA INES
08) Error de ejecución

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
____________________________________________________________________________________

03) ¿Qué imprime el siguiente programa?

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

Reservados todos los derechos.


RESPUESTA:

____________________________________________________________________________________

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:

void imprimir_polinomio ( float *P, int n )


/* P = puntero a los coeficientes del polinomio n = orden del polinomio */
{
int i;
for (i = n; i > 0; i--)
{
if ( P[i] >= 0) printf ("+");
printf ("%g X^%d ", P[i], i);
}
if (P[i] >= 0) printf ("+");
printf ("%g\n", P[i]);
}

01) Lo imprime correctamente


02) No imprime bien los términos negativos del polinomio
04) El bucle "for" debería ser: for (i = n-1; i > 0; i--)
08) El bucle "for" debería ser: for (i = 1; i < n; i++)

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
____________________________________________________________________________________

05) ¿Qué se imprime al ejecutar el siguiente programa?

void funci2 (char [ ], int);


main()
{
int k, lon;

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];

Reservados todos los derechos.


pal[n-1] = car;
}

01) abcd bcda cdab dabc


02) aaaa bbbb cccc dddd
04) bcda cdab dabc abcd
08) bbbb cccc dddd aaaa

RESPUESTA:

____________________________________________________________________________________

06) Dada la función posicion, ¿qué imprimen las siguientes sentencias?

int posicion (char cad[ ], char c)


{
int pos = -1, i;
for (i = 0; cad[i] != '\0'; ++i)
if (cad[i] == c) pos = i;
return (pos);
}
01) printf ("%d", posicion ("EJEMPLO DE", 'D')); /* Imprime 8 */
02) printf ("%d", posicion ("EJEMPLO DE", 'E')); /* Imprime 0 */
04) printf ("%d", posicion ("EJEMPLO DE", 'E')); /* Imprime 9 */
08) printf ("%d", posicion ("EJEMPLO DE", 'A')); /* Imprime -1 */

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
____________________________________________________________________________________

07) ¿Qué imprime el siguiente programa?

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); }

Reservados todos los derechos.


}

01) <> 1, -1.000000


<> 2, 2.000000
<> 3, 6.000000
<> 4, 12.000000xxx 4
02) <> 1, -1.000000
<> 2, 2.000000
<> 3, 6.000000
<> 4, 12.000000xxx
04) xxx 4
<> 1, -1.0
<> 2, 2.0
<> 3, 6.0
<> 4, 12.0
08) xxx
<> 1, -1.000000
<> 2, 2.000000
<> 3, 6.000000
<> 4, 12.0000004

RESPUESTA:

____________________________________________________________________________________

08) Dadas las siguientes declaraciones: FILE *pun; char cad[10];


la instrucción pun = fopen (gets (cad), "w+b");

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
____________________________________________________________________________________

09) ¿Qué imprime el siguiente programa?

#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

Reservados todos los derechos.


02) dcba
04) dcb
08) dddd

RESPUESTA:

____________________________________________________________________________________

10) ¿Qué imprime el siguiente programa?

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
____________________________________________________________________________________

11) ¿Qué imprime el siguiente programa?

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

Reservados todos los derechos.


RESPUESTA:

____________________________________________________________________________________

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?

void imprime (struct nodo *r)


{
if (r != NULL)
{ printf ("%d ", r->dato);
imprime (r->iz);
imprime (r->de);
}
}
01) 8 4 5 9 10 20
02) 8 5 4 10 9 20
04) 4 5 8 9 10 20
08) 4 8 5 9 10 20

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.

void buscar ( char *cad, char *nombre_fichero)


{
FILE *f;
char linea[256];
int n_linea = 0;
if ((f = fopen(nombre_fichero, "r")) == NULL)
{ printf ("Error de apertura"); return; }
/* COMENTARIO A SUSTITUIR */
fclose (f);
}

01) while (fgets (linea, sizeof (linea), f) != NULL)

Reservados todos los derechos.


{ ++n_linea; if (strcmp (cad, linea) == 0) printf ("%d: %s", n_linea, linea); }
02) while (fgets (linea, 256, f) != NULL)
{ ++n_linea; if (cad == linea) printf ("%d: %s", n_linea, linea); }
04) while (fgets (cad, sizeof (linea), f) != NULL)
{ ++n_linea; if (strcmp (linea, cad) == 0) printf ("%d: %s", n_linea, linea); }
08) while (fgets (cad, 256, f) != NULL)
{ ++n_linea; if (strcmp (cad, linea) == 0) printf ("%d :%s", n_linea, linea); }

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; }

01) P = (struct datos *) malloc (sizeof (struct datos));


P->num = 20; P->psig = NULL;
pf->psig = P; pf = P;
02) P = (struct datos *) malloc (sizeof (struct datos));
P->num = 20; P->psig = pf;
pf->psig = P; P = pf;

Reservados todos los derechos.


04) P = (struct datos *) malloc (sizeof (struct datos));
P->num = 20; P->psig = NULL;
pf = P; pf->psig = P;
08) P = (struct datos *) malloc (sizeof (struct datos));
P->num = 20; pf->psig = P;
pf = P; P->psig = NULL;

RESPUESTA:

____________________________________________________________________________________

16) ¿Qué imprime el programa siguiente?

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
____________________________________________________________________________________

17) ¿Qué se imprime al ejecutar el siguiente programa?:

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

Reservados todos los derechos.


RESPUESTA:

____________________________________________________________________________________

18) ¿Qué se imprime al ejecutar el siguiente programa?

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
____________________________________________________________________________________

19) ¿Qué imprime el siguiente programa?

#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

Reservados todos los derechos.


02) Valor = 10
04) Valor = 3
08) Valor = 0

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

También podría gustarte