Apellido y nombres: ________________________ Legajo: ______________________
Duración: 2 horas. Lenguaje: C (C99). Sólo se permite incluir stdio.h y stdlib.h, salvo indicación expresa.
Explique qué imprime el siguiente fragmento de código y justifique línea por línea, indicando qué se almacena en memoria en cada paso.
int a = 5;
int *p = &a;
*p = *p + 3;
int **q = &p;
printf("%d\n", **q);
Escriba una función int *duplicar(const int *v, int n) que reciba un arreglo v de n enteros y devuelva un nuevo arreglo, reservado con malloc, en el que cada elemento de v aparece multiplicado por 2. El arreglo original no debe modificarse. Indique qué debe hacer quien invoca con la memoria devuelta cuando termina de usarla.
Defina la estructura de un nodo de una lista enlazada simplemente de enteros y escriba la función nodo *insertar_ordenado(nodo *lista, int x) que inserte x manteniendo la lista ordenada en forma ascendente. La función debe devolver la lista actualizada.
Escriba una función int contar_vocales(const char *s) que cuente las vocales de la cadena s recorriéndola con aritmética de punteros (sin usar índices), sin distinguir mayúsculas de minúsculas.