Examen Lenguaje de Programación
Jorge López R.


1. (1 punto)
a) Escriba la definición de archivo y describa lo que hace  cada una de las funciones que operan sobre ellos.  b)¿ Cual es la diferencia entre arreglo de caracteres y string?
c) Explique si es posible que el compilador acepte la estructura siguiente y porqué:
struct a{ 
int x;
char c[10];
struct a anterior;
struct a *sguiente;
};
d) Corrija el proble a c), obtenga dinámicamente la memoria para dos instancias y haga el encadenamiento.
2. (1 punto)
a) ¿Qué hace el siguiente programa? y ¿qué hace la función xx?:
char * parA(char *, char *);
main(int argc, char * argv[]){
xx(0);
xx(1);
xx(2);
xx(7);
}
void xx(int n){
if(n<=0)return;
if(n==1){printf("1");return;}
binario(n/2);
printf("%d",n%2);
}
b) Hacer una función que devuelva la suma de la diagonal principal de una matriz MxM. El prototipo de la función, que debe ser completado en uno de sus argumentos es:
int sumaDiagonal(......., int M);

3. (2 puntos) 
a) Se debe hacer la especificación formal  de la búsqueda recursiva que del nodo de una lista encadenada que contiene un entero k y devolver el puntero. Debe incluir la situaciones particulares de lista vacía y no existencia de un nodo que contenga a k. Sólo se cuenta con un puntero al final del la lista. b) Crear una función en C que implemente la especificación formal de a)  La estructura del nodo y la declaración del puntero:
struct nodo {
int k;
struct nodo *prox;
};
struct nodo *ultimo;
4. (2 puntos)
Hacer un programa que rote circularmente  un archivo de enteros. El último pasa al primero. Suponga que existe la función:
 int fsize(FILE *), devuelve el número de bytes del archivo.