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


1. (1 punto)
a) Suponga que hay una lista doblemente encadenada. Suponga tambien que hay un puntero "p" apuntando a un nodo y que este tiene un nodo anterior y uno siguiente. Se pide hacer las líneas de programa que eliminen el nodo apuntado por "p" de la lista.
struct a{ 
int x;
struct a *anterior;
struct a *siguiente;
};
2. (1 punto)
a) ¿Qué hace el siguiente programa?, ¿Para qué sirve la función xxx?

void xxx(int n){
if(n<=0)return;
if(n==1){printf("1");return;}
xxx(n/2);
printf("%d",n%2);
}
main(){
xxx(0);
printf("\n");

xxx(1);
printf("\n");

xxx(3);
printf("\n");

xxx(7);
printf("\n");

}

b) Explique que pasa al ejecutarse el siguiente programa y qué hace la función yyy.

void yyy(int x){
int m = 0x80000000;
int i;
for (i = 0;i<32;i++){
if(((x<<i)&m)==0)printf("%d",0);
else printf("%d",1);
}
printf("\n");
}

main(){
yyy(0);
yyy(1);
yyy(3);
yyy(7);
}

3. (2 puntos) 
Escriba una función que determine si dentro de un string de caracteres, que se le pasa como argumento, cada vez que viene la letra 'a' le sigue la 'z'.
Debe devolver un entero con 1 si hay 'a' que no es seguida por 'z', 0 en cualquier otro caso.
Ejemplos válidos:  xxxxxazuytuazl,    132443azkkk
Ejemplos inválidos:  ssahgsdfh,     kjhkjhkjhkj.
Puede usar la función strlen(char *s), para obtener el número de caracteres del string.

4. (2 puntos)
Hacer un programa que calcule e imprima en pantalla el promedio de un curso, la menor y la mayor nota (del 1 al 7). Las notas parciales del curso se encuentran almacenados en un archivo llamado "curso" y los registros del archivo son binarios, con la siguiente estructura:
struct alumno {
float notaFinal;
char nombre[64];
};