Para resolver los siguientes ejercicios te recomendamos que crees un fichero de texto en tu entorno de trabajo y que escribas en él las soluciones. Compila y (si procede) ejecuta el programa para verificar que realiza las operaciones esperadas. Puedes utilizar el siguiente esqueleto:
#include <stdio.h>
int main()
{
/* Escribe aquí tu código */
return 0;
}
Escribe la definición de una estructura que almacene una tabla de 10 enteros, una cadena de 20 letras, un número real de precisión simple y uno de precisión doble. A continuación, en una línea separada, declara dos variables de este tipo. Compila el programa para verificar que la sintaxis es la correcta.
Un programador ha escrito las siguientes definiciones:
#define SIZE 100 struct map_annotation { char note[SIZE]; struct coordinates point; }; struct coordinates { float longitude; float latitude; }; struct map_annotation annotations[SIZE];
¿Qué problema tienen? (siempre puedes cortar y pegarlas en tu programa y utilizar el compilador para comprobar)
Incluye en tu programa la variable cadena
para almacenar una cadena de texto de 10 letras definida como char
cadena[SIZE];
, donde SIZE
es 11. Se quiere procesar esa cadena de forma que cada letra
pase a valer una letra que está cuatro posiciones mas avanzadas en el
abecedario. Escribe el código para ejecutar esta operación (no te
preocupes por las letras “w”, “x”,
“y” y “z”. Al final del programa incluye la
siguiente línea para imprimir la cadena por pantalla:
printf("%s\n", cadena);
Descarga el programa enum.c
en tu entorno de
desarrollo Linux. Abre una ventana con un intérprete de comandos,
compílalo con el comando gcc -Wall -o enum enum.c y
ejecútalo con el comando ./enum.
#include <stdio.h> int main(int argc, char *argv[]) { enum status { ON = 0, OFF = 1 }; enum status a, b; a = 0; a++; a = 20; b = a++; /* Imprime a y luego b en la misma linea */ /* Print a and then b in the same line */ printf("%d %d\n", a, b); return 0; }
¿Qué valores imprime por pantalla? A la vista del resultado, ¿qué conclusión se deriva del funcionamiento de los tipos de datos enumerados en C?
Define una estructura de datos para almacenar el resultado de un sorteo de la Lotería Primitiva. Es decir, un grupo de seis números, un número complementario y un número de reintegro, todos ellos diferentes y entre los valores del 1 al 49. Calcula el tamaño que ocupa tu estructura de datos con los tamaños mostrados en la sección 2.1.5 (ver las Normas del juego).
Declara una tabla de 100 enteros y rellena su contenido con un valor cualquiera. Declara una segunda tabla también de 100 enteros. Escribe el código que almacena en cada elemento de la segunda tabla la suma de elementos hasta esa misma posición de la primera tabla.
Se necesita diseñar una estructura de datos para el buzón de entrada de un teléfono móvil. Los mensajes en ese buzón son de dos tipos, o SMS, o MMS. Los mensajes SMS tiene un remitente (un número de teléfono), una fecha/hora (que es un número entero), un texto de no más de 140 letras y un tipo de mensaje que puede ser SMC o normal. Los mensajes MMS tienen los mismos campos excepto que en lugar del tipo de mensaje tienen una cadena de texto de hasta 200 letras con la ruta a la imagen que contiene. Escribir las definiciones de las estructuras de datos necesarias para tener una tabla de 100 mensajes como buzón de entrada.
Descarga el siguiente programa equal.c
en tu entorno de
trabajo Linux.
#include <stdio.h> int main(int argc, char *argv[]) { struct equal { int x; }; struct equal e1, e2; e1.x = 1; e2 = e1; /* SPECIAL LINE */ e1.x = 2; printf("%d\n", e2.x); return 0; }
Abre un terminal con un intérprete de comando, compila
el programa con el comando gcc -Wall -o equal equal.c
y ejecútalo con el comando ./equal. ¿Puedes adivinar
qué resultado se va a imprimir por pantalla? A la vista del resultado
explica qué ocurre exactamente en la línea e2 = e1
y en
general con el operando =
aplicado a estructuras en
C.
Si tienes curiosidad, el programa Equal.java
contiene la
versión de este código en Java, y el resultado que aparece en pantalla
no es el mismo que el de C. ¿Por qué crees que pasa esto?
public class Equal { int x; public Equal() { x = 1; } public static void main(String args[]) { Equal e1 = new Equal(); Equal e2 = e1; /* SPECIAL LINE! */ e1.x = 2; System.out.println(e2.x); } }