S0ftware T1,T2 y T3
|
|
Título del Test:![]() S0ftware T1,T2 y T3 Descripción: Preguntas de los Temas 1,2 y 3 de Software (intro de C) |



| Comentarios |
|---|
NO HAY REGISTROS |
|
int main (int argc, char *argv[ ]) { int i; for(i = 0; i < 5; i++){ if (i==2) { continue; } if (i > 3) break; printf(“%d”, i); } }. Imprime 01234. Imprime 0123. Imprime 0134. Imprime 013. Imprime 01134. char x[ ]; strcpy (x,”hi”);. No parece tener problema. Debería intercambiar los argumentos de strcpy. O no compila o provoca violación de segmento. Hace que x tenga el string “hi”. Hace que x tenga el string “h”. int main( int argc, char *argv[ ]) { int i; argc--; argv++; for(i = 0; i < argc; i++){ printf(“%s\n”,argv[i]); } return 0; } Si ejecutamos: $ programa uno dos tres. Hace exactamente lo mismo que el comando echo. Imprime dos líneas: dos,tres. No puede decrementar argc. Imprime tres líneas: uno, dos, tres. main nunca puede invocar. int essuficiente(int a) { if (a >= EsSuf) return 1; return 0; }. No compila, no se puede escribir un if sin llaves. No tiene sentido poner un if, se puede reescribir sin él. No compila, no se puede escribir un if sin else. Está mal, la función debería devolver un boolean. Compila pero la función no devuelve ningún valor. void reemplazar(char *s) { s = ”hola”; } int main(int argc, char * argv[ ]) } char *z; z = ”adios”; reemplazar(z); printf(“%s”, z); }. No compila, el puntero a char es constante. No compila, reemplazar debería devolver un valor. Escribe adios. Escribe hola. Compila, pero provoca una violación de segmento al ejecutar. int main(int argc, char *argv[]) { int i; for(i = 0; i<5; i++){ if (!i) break; } } printf("%d\n",i); exit(EXIT_SUCCESS); }. Imprime 11 valores. Se queda en un bucle infinito. No imprime nada. Imprime 0. No compila. int main(int argc, char *argv[ ]) { char p[5] = "hola"; int len; *p = 'z'; p[2] = 0; len = strlen(p); printf("%d\n", len); exit(EXIT_SUCCESS); }. Imprime 3. Imprime 1. Imprime 2. Compila, pero puede dar un error de compilación, P no es una storing. No imprime nada, no compila. En Linux, los siguientes comandos sirven para: lsmod. modprobe. rmmod. modinfo. En general, un driver del sistema operativo ejecuta en…. Ring 0. Ring -1. Los drivers no necesitan ejecutar instrucciones. Ring 3. Ring 4. gcc -o x y.o. Compilar el fichero fuente del programa y crear un fichero objeto. Compilar el fichero objeto y crear un fichero ejecutable. Enlazar el fichero objeto con la librería de C y crear un fichero ejecutable. Enlazar el código fuente del programa y crear un fichero objeto. Enlazar el fichero fuente de la librería de C y crear un fichero objeto. int isXXX(unsigned int val) { return val & 1; }. Devuelve true sí y solo sí recibe true (interpretando un booleano como un entero en C). Devuelve siempre true (interpretando un booleano como un entero en C). Devuelve si un número sin signo es par. Devuelve siempre false (interpretando un booleano como un entero en C). Devuelve si un número sin signo es impar. int main (int argc, char *argv[ ]){ int p[5] = {0,1,2,3,4}; int i; for(i = 0; i < sizeof(p); i++){ printf("%d\n", p[ i ]); } exit(EXIT_SUCCESS); }. Está mal: sizeof da el tamaño en bytes, posiblemente imprima basura. Funciona y funcionaría exactamente igual si p es un puntero en lugar de un array. Imprime valores de 0 al 5. No compila, no se puede inicializar un array en la pila. No funciona, le falta por inicializar un valor. Relaciona cada anillo (ring) del sistema operativo con su definición o lo que típicamente se ejecuta en él: Ring 0. Ring 3. Ring 1 y 2. Ring -1. Ring -2. Ring -3. Un fichero de texto plano... Contiene datos binarios, como imágenes o música, que no pueden ser leídos directamente como texto. Contiene texto sin formato, donde los datos están representados como secuencias de caracteres sin ningún tipo de formato especial o estructuras complejas. Contiene código fuente de programas compilados en formato binario. Contiene solo caracteres especiales y no puede ser leído por humanos sin herramientas especiales. Contiene información codificada en un formato propietario y requiere software específico para ser interpretado. addlettertoid(Id *id, char c) { id -> letras[id -> nletras++] = c; }. Añade una letra al final de una lista de letras de un objeto "Id" y aumentar "nletras" en uno. Añade una letra a una posición específica en el arreglo letras del objeto "Id". Decrementa el contador nletras del objeto "Id" y elimina la última letra del arreglo letras. Asigna un valor específico a la variable letras dentro de la estructura "Id". Crea una nueva instancia de la estructura "Id" y asigna la letra al campo "letras". struct Persona { char nombre[50]; int edad; }; int main() { struct Persona p1 = {"Juan", 30}; struct Persona *p2 = &p1; printf("Mi nombre es: %s\n", p2->nombre); printf("Mi nombre es: %s\n", (*p2).nombre); exit(EXIT_SUCCESS); }. Imprime el mismo valor dos veces. Imprime un error porque p2 es un puntero y no se puede usar el operador . con punteros. Imprime un error porque el operador -> no se puede usar con punteros a estructuras. Imprime dos valores diferentes. No compila. ¿Qué ocurre al compilar este programa? struct Persona { char nombre[20]; int edad; } int main() { struct Persona p = {"Ana", 25}; printf("%s tiene %d años.\n", p.nombre, p.edad); exit(EXIT_SUCCESS); }. Está bien, imprime "Ana tiene 25 años.". Está mal, la variable p no está declarada. Está mal, falta un punto y coma. Está mal, hay un error de tipo en printf. Está bien, pero da un comportamiento indefinido. typedef struct { int x; int y; } Punto; int main() { Punto p = {3, 4}; printf("%d, %d\n", p.x, p.y); exit(EXIT_SUCCESS); }. Está mal, no se ha declarado la variable tipo struct Punto. Está mal, typedef no puede usarse sin nombre. Imprime 3, 4. Imprime basura. struct Fecha { int dia; int mes; int anio; }; int main() { struct Fecha hoy = {25}; printf("%d/%d/%d\n", hoy.dia, hoy.mes, hoy.anio); exit(EXIT_SUCCESS) }. Imprime 25/0/0. Imprime 25/25/25. Está mal, no se han inicializado todas las variables. Imprime 0/0/0. Imprime basura. struct Rectangulo { int base; int altura; }; int main() { struct Rectangulo r = {5, 10}; struct Rectangulo *pr = &r; printf("%d\n", *pr.base); return 0; }. Imprime 5. Da error porque *pr.base no es válido. Imprime basura. Da error porque el operador * está mal colocado. Da error de segmentación. struct Punto { int x; int y; }; struct Palabra { struct Punto *fin; }; int main() { struct Punto p = {5, 10}; struct Palabra pal; pal.fin = &p; int x = pal.fin->x; printf("%d\n", x); return 0; }. Imprime 5. Imprime 10. Está mal, pal.fin->x no es una expresión válida. Está mal, se debe escribir (*pal.fin).x en vez de pal.fin->x. Imprime basura. struct Coord{ int x; int y; }; typedef struct Coord Coord; int main(int argc, char *argv[ ]) { int i; Coord *coords; coords = malloc(10*2*sizeof(int)); for(i = 0; i < 10; i++){ coords[i].x = i; coords[i].y = i; printf("(%d,%d)\n", coords[i].x, coords[i].y); } }. Es incorrecto: puede desbordar el array. Es correcto, imprime pares de números consecutivos. No compila, la declaración debería ser struct Coord *. No compila, lo que devuelve malloc no se puede asignar a coords. Es correcto, imprime pares de números iguales. |





