Teoria Metodología de la Programación
![]() |
![]() |
![]() |
Título del Test:![]() Teoria Metodología de la Programación Descripción: Cuestionario definitivo para aprobar la teoria de Metodología de la Programación |




Comentarios |
---|
NO HAY REGISTROS |
A partir de siguiente trozo de código, indica que aparecería en pantalla, sabiendo que las variables están almacenadas a partir de las siguientes direcciones: i=1000, pi=1004, ppi=1008. int main(){ int i=2; int *pi=&i; int **ppi =π printf("............."); ................ }. Con printf("%p",i):1000. Con printf("%p",ppi):1008. Con printf("%p",pi):1000. Con printf("%i",pi):2. Si unan variable tiene que almacenar la dirección de un carácter, ¿Que tipo debe tener la declaración?. char *. ** char. string *. char **. Indique cual de las siguientes afirmaciones es correcta. La suma de dos punteros es otro puntero. La multiplicación de dos punteros da como resultado una nueva dirección de memoria. Se pueden asignar punteros de diferenes tipos sin necesidad de hacer un casting. Si p es un puntero, p--, direcciona el elemento anterior. En el siguiente trozo de codigo: int main(){ char s[10]="Hola"; //Resto de instrucciones } char s[10]="Hola"; Seleccione una: Daria un error de compilación. Inicializa los primeros 5 caracteres de s. Inicializa solo los primeros 4 caracteres de s con las letras de "Hola". Ninguna de las anteriores. EN un programa se definen estas dos variables: int i=10; *i_ptr; Si la variable almacenada en la posición de memoria 100, ¿Qué valor contiene la variable i_ptr?. Su propia dirección de memoria. Ningún valor porque no ha sido inicializada. El valor 104 porque es la posición siguiente que ocupa i. El valor 100 que es la dirección de la variable i;. ¿Qué valor se imprime por pantalla al ejecutar el siguiente programa, sabiendo que la variable i esta almacenada a partir de la posición 2000? int main(){ int i; int *pi; i=2; pi=&i; printf("%d",*pi); ................ }. Un valor determinado, porque la asignación pi=&in es incorrecta. 2. 2000. EL formato de printf es incorrecto. Indica cual de las siguientes afirmaciones son correctas. Si p, q y r son punteros a enteros, se puede usar la expresión r=p+q. Al declarar un puntero, se inicializa a NULL automáticamente. Si p es un puntero a int y q es un puntero a float, sizeof(p) es distinto de sizeof(q). Los punteros se deben inicializar a NULL en la declaración. A partir de siguiente trozo de código, indica que aparecería en pantalla, sabiendo que las variables están almacenadas a partir de las siguientes direcciones: i=1000, pi=1004, ppi=1008. int main(){ int i=2; int *pi=&i; int **ppi =π printf("............."); ................ }. Con printf("%p",&ppi):1004. Con printf("%p",&pi):1000. Con printf("%p",&pi):1004. Con printf("%p",*pi):2. Considera el siguiente fragmento de codigo: struct data{ struct data *s;}; struct data a; struct data b; struct data c; ¿Que tres líneas de código son necesarias para crear una structura de datos circular (a.s apunta a b, b.s apunta a c y c.s apunta a a?. &a.s=b; &b.s=c; &c.s=a;. a.s=b; b.s=c; c.s=a;. a.s=&b; b.s=&c; c.s=&a;. a.s=*b; b.s=*c; c.s=*a;. ¿Cómo se define NULL en stdlib.h?. (char*). 0. NULL. No se define en ese fichero de cabecera. Se define un array de dos entero de 4 bytes del tipo int array[2] y está almacenado a partir de la posición 100 de memoria. Se ejecuta el código : array[0]=20; array[1]=30; ¿Qué valor tiene el elemento en la posición de memoria 104?. 30. 20. 104. 2. steuct Foo { int campo1; int *campo2; } struct Foo A, *p=&A; Para acceder a un campo de una estructura A a a través de p utilizaremos: "p.nombreDelCampo" independientemente del tipo de campo. "p->nombreDelCampo" independientemente del tipo de campo. "p->nombreDelCampo" si el campo al que se accede es de tipo puntero. "p.nombreDelCampo"si el campo al que se accede es de tipo puntero. Dado el siguiente código: int y; int *x; y=10; x=&y; (*x)++;. 1. 10. 9. 11. Una variable entera puede tener delante: El operador *. El operador &. El operador * y El operador &. Ninguna de las anteriores. EL tamaño de un puntero depende del tipo de datos al que apunta. Verdadero. Falso. ¿Qué código de control se debe utilizar en printf() para imprimir un puntero?. %x. %c. %d. %p. void p(int p1, int *p2){ p1=p1-1; *p2=p2+1; } int main(){ int a,b; int a=1; int b=3; p(b,&a); printf("a=&d b=&d" ,a,b); }. a=2 y b=2. a=1 y b=2. Produciría un error en tiempo de ejecución. a=2 y b=3. ¿Cuál de las siguientes sentencias es falsa?. El programa ar permite crear una biblioteca de cero. El programa ar permite crear actualizar los módulos de una biblioteca. El programa ar no permite añadir módulos nuevos a biblioteca existente. El programa ar permite eliminar módulos de una biblioteca. Una función recursiva que produzca llamadas recursivas infinitas desbordará: El mónton o el heap. La pila o stack. El registro. El código. En un programa desde el inicio hasta su finalización, debemos realizar tantas invocaciones de "free" como suma de invocaciones de calloc y malloc. Verdadero. Falso. ¿Que problema podemos observar en el siguiente bloque de código? char *s=(char *)malloc(sizeof(char*)*6); strcpy(s,"Adios"); printf("%s",s);. No se ha invocado a la funcion strcpy correctamente. La variable no se puede llamar s pues coincide con el modificador o formato de printf %s. No se ha invocado a la funcion malloc correctamente. Esta declarada correctamente. Dada la siguiente definición de función recursiva f(x) ¿que es lo que calcula? Si x=0 devuelve 1 Si no devuelve 2*f(x-1). El algoritmo en base 2 de x. 2^x. No calcula nada ya que introduce una llamada infinita. 2X. ¿Cuál de las siguientes afirmaciones sobre objetos dinámicos es falsa?. Los objetos dinámicos se alojan en el heap. El nº de objetos dinámicos se conocen en tiempo de compilación. Los objetos dinámicos se crea y se destruyen según las necesidades. El nº de objetos dinámicos pueden variar durante la ejecución. ¿De que tipo es el argumento de free()?. NULL. int *. void*. char*. Dada la declaración de int count=1; ¿Cuál es el contenido de la varibale count después de la llamda funcrecur(2,&count);? void funcrecur(int n, int *count){ *count=*count+1; if (n>0){ funcrecur (n-1,count); funcrecur (n-1,count); } }. 7. 8. 5. 6. Cuando un vector dinámico se crea dentro de una función, ¿la memoria reservada se destruye de forma automática al salir de la función?. No. Si. Solo si se ha hecho la reserva con malloc. Solo si se ha hecho la reserva con calloc. ¿Cuál de las siguiente afirmaciones es falsa?. Las librerías se crean con el comando ar. El uso de las librerías perjudican el trabajo del equipo. EL uso de librerías favorece la reutilización del código. El uso de las librerías favorece el trabajo del equipo. Dada la siguiente definición de función recursiva f(x) ¿que es lo que calcula? int f(int x){ if(x==0) return 1 else return 1+f(x-1) }. x-1. x. No calcula nada ya que introduce una llamada recursiva infinita. x+1. ¿Cuál de las siguientes afirmaciones sobre el algoritmos recursivos es correcta?. Un algoritmo recursivo sólo puede tener un caso base. Un algoritmo recursivo es siempre más eficiente que su versión iterativa. Los parámetros de un algoritmo recursivo pueden ser punteros. Sólo puede haber una llamada al propio algoritmo. ¿Cuál de las siguientes afirmaciones es cierta?. El uso de las librerías favorece la reutilización de código. El uso de las librerías perjudica el trabajo en equipo. El programa principal forma parte de la librería. Las librerías se crean con el comando lib. Sea la siguiente declaración: float **matriz; *(*matriz)+i es equivalente a: *(matriz[i]). (*matriz)[i]. matriz[0][i]. (matriz+i). Es correcto el siguiente trozo de código. int main(){ int nEle=2; int *pi; pi[0]=-1; pi[1]=1; }. Si, porque se ha definido un vector a través del puntero pi, y a continuación sin salirse del rango de dicho vector. No, porque se ha intentado utilizar pi utilizando[]. No, ya que falta reservar memoria para nEle elementos. No, porque sólo se puede acceder a pi[1] y pi[2] porque nEle=2. Dada la siguiente definición de función recursiva f(x),siendo x>0 ¿que es lo que calcula? int f(int x){ return x*f(x-1) }. Se produce un error en tiempo de compilación. x*(x-1). No calcula nada ya que introduce una llamada recursiva infinita. x!. Las llamads "calloc" y "malloc" en caso de que no se produzca error devuelven: EL número de elementos que se han reservado correctamente. Un puntero al final de la memoria reservada. Un puntero al inicio de la memoria reservada. Un puntero al medio de la memoria reservada. Lo que hace en un lenguaje de programación puede funcionar la recursividad es: El poder repetir los identificadores de los métodos. La rapidez del sistema ya que su no la recursividad sería demasiado lenta. La pila de llamadas al sistema. El uso de bucles para controlar el caso base. La declaración: int *numero; Seleccione una: No implica reserva de memoria en el heap. Reserva de forma automática espacio para un entero en el heap. Implica la reserva de un puntero a entero en el heap. Define una variable que se aloja en el heap. Si una llamada a la función realloc para ampliar la memoria falla, ¿que ocurre con la zona antigua y los datos que hubiera almacenados en ella?. Ni el contenido ni la memoria se modifican. La memoria se libera y por lo tanto los datos se pierden. Los datos se mantien, pero el puntero que los referencia toma el valor NULL. La memoria sigue reservada pero los datos se pierden. Para utilizar una biblioteca en nuestro programa necesitamos. El código de la biblioteca (fichero.a) y el fichero con los prototipos de las funciones incluidas en la biblioteca (fichero.h). El código con los objetos de las funciones (fichero.o). El código con los objetos de la biblioteca (fichero.a). El código fuente de las funciones (fichero.c). El tamaño del ejecutable obtenido al enlazar un programa principal con una biblioteca, no influye la estructura interna de la biblioteca (número de ficheros objeto, y/o número de funciones por fichero objeto). Falso, el tamaño dependerá de la organización de las funciones en ficheros objetos. Más ficheros, con menos funciones cada uno, darán ejecutables más pequeños. Falso, el tamaño dependerá de la organización de las funciones en ficheros objetos. Cuantas mas funciones haya por fichero objeto, menor será el tamaño del ejecutable. Verdadero. El tamaño del ejecutable sólo depende del programa principal. Falso. Cuantas más funciones tenga la biblioteca más grande será el tamaño del ejecutable. Si tienes que reservar una nueva porción de memoria dinámica e inicializarla a 0, utilizaremos;. Calloc. Malloc. Free. Realloc. ¿Cuándo enlazamos o "linkamos" un programa principal con una librería y obtenemos un ejecutable, el enlace sólo se realiza con los módulos .o en los que se encuentran las funciones utilizadas. Verdadero. El usuario es quien indica en la compilación con qué módulos se enlaza. Depende de la librería. No es lo mismo, por ejemplo, la librería matemática que la librería gráfica. Falso. El enlace se realiza con todos los módulos de la librería. ¿Cuál de las llamadas a la función Frecursiva devuelve los resultados correctos? long Frecursiva(int x, int y){ if(x==0){ return 0; } if(y==1){ return 1; } return (x*Frecursiva(x,y-1); }. Frecursiva (2,7) devuelve 64. Frecursiva (2,7) devuelve 512. Frecursiva (1,7) devuelve 7. Frecursiva (2,7) devuelve 128. Dadas las siguientes afirmaciones: 1.Siempre se prefiere la solución recursiva de un problema que sus solución iterativa 2. La solución recursiva de un problema es más eficiente que la solución iterativa. 1 es falsa y 2 es cierta. 1 y 2 son ciertas. 1 y 2 son falsas. 1 es cierta y 2 es falsa. Dada la siguiente funcion recursiva f(x), siendo x>0 ¿qué calcula función f(x)? long f(int x){ if(x==1){ return 1; } return 1+f(x-1); }. x-1. No calcula nada ya que introduce una llamada recursiva infinita. x. x+1. Indica que afirmación es correcta: La memoria dinámica reservada con calloc es liberada automáticamente. El compilador nos avisa cuando intentamos acceder a una zona de memoria no reservada. Cuando accedemos a una zona de memoria no reservada se produce un error en tiempo de ejecución. La memoria dinámica reservada con malloc es liberada automáticamente. La función calloc() reserva memoria de la zona del: Variables globales. Variables locales. La pila o stack. El montón o heap. ¿De que zona de memoria toma malloc() el espacio que necesita?. La pila o stack. El montón o heap. Los datos. El código. Dada la siguiente funcion recursiva f(x), siendo x>0 ¿qué calcula función f(x)? si x==0 devuelve 1 si no devuelve 2*f(x-1). 2x. 2^x. El logaritmo en base 2 de x. No calcula nada ya que introduce una llamada recursiva infinita. ¿Cuál de las siguiente afirmaciones sobre los objetos dinámicos es falsa?. El nº de objetos dinámicos puede variar durante la ejecución del programa. Los objetos dinámicos se alojan en el heap. Los objetos dinámicos se crean y se destruyen según las necesidades. El nº de objetos dinámicos se conoce en tiempo de ejecución. Dada la siguiente funcion recursiva f(x), siendo x>0 ¿qué calcula función f(x)? int f(int x){ return x*f(x-1); }. x!. x*(x-1). Se produce un error en tiempo de compilación. No calcula nada ya que introduce una llamada recursiva infinita. ¿Cuál de las siguientes zonas de memoria tiene un tamaño conocido en tiempo de compilación?. pila. stack. heap. datos estáticos. La extensión por defecto de los ficheros de la biblioteca o librería es: No tiene extensión. .o. .a. .lib. Indica cuál de las siguientes afirmaciones es correcta. Si mediante malloc reservamos n elementos e intentamos acceder el elemento n+5, se produciría un error en tiempo de ejecución. La suma de dos punteros da otro puntero. Si mediante malloc reservamos n elementos e intentamos n+5, el compilador no avisará. La función free() puede liberar memoria reservada en tiempo de compilación. Para leer de forma segura una líne del fichero indicado por pfic y almacenarla en la varibale s (char s[100+;) se utiliza: fgets(&s,100,pfic);. fgets(&s,99,pfic);. fgets(pfic,99,s);. fgets(s,100,pfic);. Las funciones fgets() y gets() en C: fgets() sustituye el '\n' final por '\0' y gets() no. gets() sustituye el '\n' final por '\0' y fgets() no. Ninguno sustituye el '\n' final por '\0'. Sustituyen el '\n' final por '\0'. Cuando almacenamos un fichero, los datos: Se almacenan directamente en el fichero físico. Se van almacenando en el buffer de salida y cuando éste está lleno se vuelcan en el fichero físico. Si el fichero es de texto, se almacena directamente en el fichero físico. Si el fichero es binario, se almacena directamente en el fichero físico. La función fclose() devuelve: FILE *. int *. int. void. ¿Qué devuelve la función fread()?. Nada. El numero de elementos que se requieren leer. La dirección de memoria a partir la cual se almacena la línea leída desde el fichero (si se ha leído correctamente). El número de elementos leídos. ¿Qué parámetros se les pasa a fseek() para especificar un desplazamiento desde el final del fichero?. SEEK_END. FSEEK_END. END. FSK_END. La función ftell(). Devuelve el número de bytes de un fichero. Devuelve el número de registros de un fichero binario. Devuelve el número de bytes que hay desde el principio de fichero, hasta el registro en el cual estemos situados. Devuelve el numero de registros de un fichero de texto. ¿Cuál es el valor de SEEK_END?. 0. 2. 3. 1. La función fgets() devuelve al ser ejecutada: -1 si se alcanzó el final del fichero u ocurrió algún error. EOF para indicar el final del fichero. La dirección a partir de la cual se almacena la línea leída desde el fichero (si se ha leído correctamente). EL número de caracteres leídos, incluyendo '\0' y el '\n'. ¿Cuál de los siguientes flujos permite leer desde el teclado?. Ninguna de las restantes es correcta. stdin. stderr. stdout. En el siguiente trozo de códgo, la varibale pfic alamacena; FILE *pfic; pfic=fopen("prueba.txt","r");. La dirección del fichero prueba.txt en el disco duro. La dirección del buffer o zona de memoria donde están almacenados todos los caracteres del fichero prueba.txt. La dirección de la estructura de control del fichero prueba.txt en memoria. La dirección de comienzo de la cadena de caracteres donde se ha almacenado el fichero prueba.txt en memoria. La siguiente función, ¿Devuelve los datos del empleado j-ésimo del fichero binario de datos de empleados pasado como argumento? struct empleado datosEmpleados_j (char *nombreFichero, int j){ FILE *f; struct empleado emp1_aux; f=fopen(nombreFichero,"rb"); fseek(f,(j-1)*sizeof(struct empleado), SEEK_SET); fread(&emp1_aux, sizeof(struct empleado),1,f); fclose(f); return (emp1_aux); } }. No, la llamada a la función fread es incorrecta. No, es necesario incluir un bucle para leer los empleados del fichero que aparece antes del requerido. Si, siempre que j tome valor entre 1 y el número de empleados en el fichero. No, la llamada a la función fseek es incorrecta. La función fopen() devuelve: FILE *. int. char *. void. La función fgets() devuelve al ser ejecutada: EOF para indicar el final del fichero. La dirección del ultimo carácter leído. El número de caracteres leídos, incluyendo el '\n' y el '\0'. NULL si se alcanzó el final del fichero u ocurrió algún error. ¿Cuál de las siguientes no es una característica de los ficheros binarios?. Contiene datos escritos como una secuencia de bits. Los datos no son legibles usando un editor de texto. Los datos se representan igual que en memoria. Contiene datos legibles para una persona. ¿Qué sentencia es correcta para abrir un fichero binario para escribir a continuación de su contenido?. fp=fopen("fichero.dat","rb);. fp=fopen("fichero.dat","ab);. fp=fopen("fichero.dat","wb);. fp=fopen("fichero.dat","rwb);. ¿Qué tipo devuelve la función fsacnf()?. long. int. void. char *. EL borrado físico: No libera espacio en el fichero puesto que no borra el registro. Marca el registro que se quiere borrar. Elimine un registro de un fichero para que el espacio que ocupa en el fichero quede libre. Es una actualización del fichero binario. EN el siguiente trozo de programa hay el siguiente error (o errores): int i; ....................... fscanf(stdin,"%d",i);. El formato para leer la varibale i es incorrecto. No es stdin, sino stdout. No hay error. Falta poner la dirección de la variable i. El carácter que marca el final de un fichero es el: END. EOF. \n. \0. ¿Cuál de las siguientes no es una característica de un fichero de texto?. El final del fichero de texto lo indica el caracter EOF. Puede ser generado y modificado con un editor de texto. Contiene datos legibles para una persona. Los datos se representan igual que en memoria. En un programa en C, la lectura de un fichero: Ninguna de las respuestas es correcta. No depende del soporte. El SO se encarga de ocultar el modo de lectura propio de cada dispositivo. No depende del soporte salvo que sea un CD-ROM, en ese caso se lee de modo especial. Depende del soporte donde esté guardado, porque hay que indicarlo en el programa. Si queremos abrir un fichero binario para corregir un registro, lo abriremos: Con la opción "ab". Con la opción "r+b". Con la opción "wb". En los ficheros de binarios no se puede realizar esta operación directamente. Para contar los registros de un fichero binario: Hay que leerlo registro a registro obligatoriamente. No hace fala contar, el número de registros será el número de bytes del fichero. Se pueden contar con la función count(). Se pueden contar sin leer el ficehro. ¿Qué valor devuelve fclose() si hay un error?. -1. EOF. 0. NULL. La siguiente función, sabiendo que j es menor o igual que el número de empleados del fichero ¿Devuelve los datos del empleado j-ésimo del fichero binario de datos de empleados pasado como argumento? struct empleado datosEmpleados_j (char *nombreFichero, int j){ FILE *f; struct empleado emp1_aux; f=fopen(nombreFichero,"rb"); fseek(f,(j-1)*sizeof(struct empleado), SEEK_SET); fread(emp1_aux, sizeof(struct empleado),1,f); fclose(f); return (emp1_aux); }. No, es obligatorio abrir el fichero con la opción "r+b". No, la llamada a la función fread es incorrecta. No, es necesario incluir un bucle para leer los empleados del fichero que aparecen antes del requerido. No, la llamada a la función fseek es incorrecta, ya que devuelve los datos del empleado j+1. Si queremos abrir un fichero de texto para corregir un registro, lo abriremos: En los ficheros de testo no se puede realizar esta operación directamente. Con la opción "a". Con la opción "r". Con la opción "w". La función printf() es equivalente a: sprintf(stdin,...). fprintf(stdout,...). fprintf(stdin,...). sprintf(stdout,...). En un fichero de texto, los elementos se separan: Si son enteros no hace falta separarlos, el compilador sabe cuánto ocupa un entero. Cualquier carácter que decida el programador. El espacio en blanco. No hace falta separarlos, el compilador sabe cuánto ocupa un entero. La siguiente función, sabiendo que j es menor o igual que el número de empleados del fichero ¿Devuelve los datos del empleado j-ésimo del fichero binario de datos de empleados pasado como argumento? struct empleado datosEmpleados_j (char *nombreFichero, int j){ FILE *f; struct empleado emp1_aux; f=fopen(nombreFichero,"rb"); fseek(f,(j*sizeof(struct empleado), SEEK_SET); fread(&emp1_aux, sizeof(struct empleado),1,f); fclose(f); return (emp1_aux); }. No, la llamada a la función fseek es incorrecta, ya que devuelve los datos del empleado j+1. No, la llamada a la función fread es incorrect. No, es obligatorio abrir el fichero con la opción "r+b". No, es necesario incluir un bucle para leer los empleados del fichero que aparecen antes del requerido. Para leer de forma segura una palabra del fichero indicado por pfic y almacenada en s (char s[100];) se utiliza: fscanf(pfic"%99s",&s);. fscanf(pfic,s,"%s");. fscanf(pfic"%100s",s);. fscanf(pfic"%99s",s);. Para borrar un registro de un fichero de texto: Se necesita tres ficheros (el original, un auxiliar, y el de destino). Se necesita dos ficheros (original y auxiliar). Se desplazan todos los registros que están detrás del borrado, una posición hacia arriba. Sólo se puede el regsitro sí éste es el último. ¿Cuál es el orden de utilización de un fichero?. Abrir el fichero, cerrar el fichero, procesar el fichero. Abrir el fichero, procesar el fichero, cerrar el fichero. Abrir el fichero, procesar el fichero. Procesar el fichero, abrir el fichero, cerrar el fichero. ¿Cuántos argumentos tiene la función fseek()?. 1. 2. 3. 4. Si no se cierra un fichero: No se puede volver a abrir el fichero. El fichero puede quedar incoherente y perder datos. Se borran los elementos que tenga el fichero. No pasa nada. La función ftell(). Devuelve el número de registros de un fichero binario. Devuelve el número de bytes de un fichero. Devuelve el número de registros de de un fichero de texto. Ninguna de las respuestas es cierta. ¿Es posible leer un fichero binario completo constituido por elementos del mismo tipo con una sola invocación a la función fread()?. Sería obligatorio usar un esquema iterativo para realizar múltiples lecturas con fread. Si conocemos el tamaño en bytes de los elementos contenidos en un fichero y la cantidad de elementos ubicados en el mismo sería posible con dos invocaciones de la función fread(). La segunda de ellas para ver si hemos llegado al final del fichero. No es posible. Si, es posible si conocemos el tamaño de bytes contenidos en dicho fichero y el número de elementos. ¿Qué función se usa para borrar un fichero?. delete(). remove(). unlink(). erase(). ¿Qué función se usa para renombrar un fichero?. name(). rename(). newname(). unname(). La función putchar() escribe un carácter en: La salida de error estándar. El flujo que se la pasa como parámetro. La salida estándar. La pantalla. |