TÉCNICAS DE PROGRAMACIÓN EXAMEN I SUSTITUTO 19/06/06 1. Dadas las siguientes inicializaciones: int i = 21, j = 9; char c = 'c', k[] = "ABC", *q = k + 1; dé el resultado de las siguientes expresiones de C (asuma que el código de caracteres es ASCII): a. i/5 * j/2; b. j%2 ? i / (j – 1) : j / (i – j); c. c++ d. *(k + 3) e. (*q) + 1 f. *(q + 2) g. (3 * (i – j)) / 5 == 3 * ((i – j) / 5) 2. El siguiente programa intenta invertir una cadena; si la cadena no viene como primer argumento se supone que debe leerla de la entrada estándar (con scanf). Encuentre los errores. void invertir(char s[]) { int longitud = 0, i, c; while(s[longitud] != '\0') longitud++; for(i = 0; i < longitud / 2; i++) { c = s[i]; s[i] = s[longitud – i]; s[longitud – i] = c; } } main(int argc, char *argv[]) { char c = 'nada'; char kdna[3] = "abc"; char s[1000]; if(argc < 1) { printf("Ingrese línea a invertir\n"); scanf("%s", s); } invertir(s); printf(s); } 3. Encuentre los errores en el siguiente código que se supone debe manejar una pila. int MAXLENG = 1000; int tope = 0; void push(char valor) { if(tope < MAXLENG) { pila[tope] = valor; tope++; } } char pop() { if(tope == 0) { printf('la pila está vacía'); return 0; } else { valor = pila[tope]; tope--; return valor; } } 4. Declare una variable tipo apuntador a función que retorna int y recibe apuntador a char. 5. Escriba un programa que (suponiendo que ya existen las funciones que manejan una pila) lea caracter por caracter de la entrada estándar y, si es llave (paréntesis, corchete o llave) abierta lo introduzca en la pila y, si es llave (paréntesis, corchete o llave) cerrada, saque la llave del tope y verifique si corresponde a la que se acaba de cerrar y si no corresponde imprima un error y finalice. 6. Escriba un programa que reciba dos cadenas y retorne una nueva cadena donde el primer caracter sea el primero de la primera cadena, el segundo sea el primero de la segunda cadena, el tercero sea el segundo de la primera, el cuarto sea el segundo de la segunda, y así sucesivamente. Es decir intercale una cadena con la otra. Si una cadena se acaba primero que la otra, el resto de los caracteres de la nueva cadena vendrán sólo de la cadena que quede. 7. Escriba un programa que reciba un arreglo de enteros, junto con su longitud y lo ordene de forma ascendente. No intente hacer un algoritmo eficiente, simplemente haga el algoritmo más simple que esté seguro que hace el trabajo.