FUNDAMENTOS DE INFORMÁTICA 1º INGENIERÍA TÉCNICA INDUSTRIAL ESCUELA UNIVERSITARIA POLITÉCNICA EJERCICIOS DEL TEMA 6: INTRODUCCIÓN AL LENGUAJE C Contenidos: • • • • • • • Declaraciones de variables y tipos de datos Presentación o escritura de datos con printf() Modificadores de formato Petición o lectura de datos con scanf() Conversión de tipos Operador sizeof() Funciones matemáticas Ejercicios propuestos IMPORTANTE: Para poder ver el resultado de la ejecución de los programas que se ponen como ejemplos y los que haga en el entorno de programación Dev-C++ tendrá que incluir al final de cada uno una instrucción de pausa o bien una instrucción de lectura. Para ello puede incluir al final de cada programa una de las siguientes instrucciones: system(“Pause”); Envía una señal de pausa al sistema operativo. Incluya el fichero de cabeceras stdlib.h. getch(); Espera a que introduzcamos cualquier carácter por teclado. Incluya conio.h. 1. Escribe el siguiente programa en tu ordenador: #include <stdio.h> void main() { int a; printf("Dame un valor: "); scanf("%d", &a); printf("El valor que has introducido es %d\n",a); } Pruébalo con los siguientes tipos de datos y escribe al lado el resultado que has obtenido: • Un número entero Æ Entrada ______________ Salida __________________ • Un número real Æ Entrada _______________ Salida ___________________ • Un carácter Æ Entrada ________________ Salida _____________________ Introduce ahora un número de 10 cifras cuando lo pruebes, ¿qué resultado sale? ___________________ ¿Cuál es el problema?__________________________________________________ 1 Modifica el programa en tu ordenador para que funcione bien. Anota sobre el programa anterior los cambios que has tenido que hacer. 2. Repite el ejercicio anterior, pero haciendo que el programa declare la variable utilizada para guardar el número como una variable real. Ejecuta el programa cuatro veces, introduciendo los siguientes tipos de datos: • Un número entero Æ Entrada ________________ Salida __________________ • Un número decimal con menos de seis decimales Æ Entrada _______________ Salida ______________ • Un número decimal con más de seis decimales Æ Entrada _________________ Salida ______________ • Un carácter Æ Entrada ________________ Salida ________________ 3. El siguiente programa lee dos números enteros desde teclado, posteriormente los suma, almacenando el resultado en una variable, y finalmente escribe por pantalla el resultado de la suma. #include <stdio.h> void main() { int a,b; printf("Dame un valor: "); scanf("%d", &a); printf("Dame otro valor: "); scanf("%d", b); s=a+b; printf("El resultado de sumar %d + %d es ",a,b,s); } Nota: El programa tiene tres errores, corrígelos antes de ejecutarlo en tu ordenador. Prueba el programa con las siguientes parejas de datos y anota el resultado que produce: Entradas: 13567 , 543 Resultado Æ _________________ ¿Hay algún problema? ¿Cuál? Entradas: 24345567 , 167659087 Resultado Æ _________________ ¿Hay algún problema? ¿Cuál? Entradas: 1, 90000000000 Resultado Æ _________________ ¿Hay algún problema? ¿Cuál? 4. ¿Cuál es la salida del siguiente programa? Salida 1: Salida 2: #include <stdio.h> void main() { printf("%d\n%d\n%d\n---\n%d\n", 6,18,124,6+18+124); } ¿Y del siguiente? #include <stdio.h> void main() { printf("%3d\n%3d\n%3d\n---\n%3d\n", 6,18,124,6+18+124); } 2 5. Retoca el programa del ejercicio 3 para comprobar el comportamiento de la anchura de campo dentro de la instrucción printf(). Para ello puedes colocar distintos valores de la anchura de campo como se muestra a continuación: #include <stdio.h> void main() { printf("El resultado de <%6d> + <%6d> es <%6d>", 234,22000,234+22000); } Nota: Los ángulos <> son sólo para delimitar cuántos espacios se han dejado libres dependiendo de la anchura de campo que se ponga. Analiza ahora los siguientes aspectos: a. ¿Qué ocurre si la anchura de campo no es suficiente (por ejemplo, se pone a 2)? b. ¿Qué ocurre si se pone un número negativo (por ejemplo, -6)? c. Para los valores reales, además de la anchura de campo se puede especificar la precisión del siguiente modo: %6.3f, donde el 3 indica el número de dígitos decimales que se muestran por pantalla. Comprueba, cambiando los datos a reales, cuál es el comportamiento en pantalla si se varía el parámetro que indica la precisión. 6. El siguiente programa escrito en C tiene 5 errores. Lee atentamente los mensajes de error que indica el compilador y encuéntralos. /*-------------------------------------------------------*/ /* Autor: */ /* Fecha: Versión: */ /*-------------------------------------------------------*/ /* Programa ejemplo sobre errores léxicos, */ /* sintácticos y semánticos */ /*-------------------------------------------------------*/ #include <stdio.h>; #define tasa 25.0 main() { float horas, dias, total, neto; printf("Introduce las horas trabajadas: "); scanf("%f", &horas); printf("Introduce los días trabajados: ") scanf("%f", &dias); horas*dias = total; neto = total-Tasa; printf("El valor total a pagar es: %12.5f, total); printf("El valor neto a pagar es: %12.5f", NETO); } 7. Escribe un programa que lea una palabra de cuatro letras por teclado, y posteriormente escriba dicha palabra de manera que cada letra se encuentre codificada sustituyéndola por aquel carácter que le sigue en la tabla de códigos ASCII. 3 8. Escribe un programa que lea una palabra de cuatro letras y a continuación la escriba en mayúsculas. Hágalo usando la función toupper()de la librería ctype.h y sin usarla. Nota: La función toupper() convierte la letra que se le pasa como argumento a mayúscula si es posible. Análogamente existe la función tolower() que convierte una letra a minúscula. 9. Escribe el resultado que produce cada una de las siguientes instrucciones, teniendo en cuenta la declaración de variables que aparece. Piensa primero cual sería el resultado y compruébalo después. int d=2, v=50, n=10, t=5; a. b. c. d. e. f. n / t + v / t + v - 3 * v + n / (v + n) v + n / 3 n n t / t - 10 * d + 4 * d * d (t + d) + d Æ Æ Æ Æ Æ Æ g. d / 57 h. 18 / -t i. v%3 j. ‘g’-‘a’+1 k. ‘G’-‘A’+1 l. d*=n+1 Æ Æ Æ Æ Æ Æ 10. Escriba un programa que muestre por pantalla el número de bytes que se reservan en memoria para los siguientes tipos de datos: int, short int, long int, unsigned int, unsigned short int y unsigned long int. Además el programa deberá mostrar los rangos de valores permitidos para los mismos tipos de datos. Estos rangos se calculan del siguiente modo: Para los tipos enteros con signo: [-(2 n-1), 2 n-1-1] Para los tipos enteros sin signo: [0, 2 n -1] donde n es el número de bits reservado para cada tipo. Nota: Utilice el operador sizeof(), que devuelve el número de bytes reservado para cada tipo. Además utilice la función pow() de la librería math.h para calcular cada potencia que aparece en la fórmula. Por ejemplo, para elevar 2 a n tendrá que usar pow(2,n). 11. Escriba un programa para calcular el tiempo transcurrido, en minutos, necesario para hacer un viaje. La ecuación es tiempo transcurrido = distancia total/velocidad promedio. Suponga que la distancia está en kilómetros y la velocidad en kilómetros/hora. Antes de escribir el programa analice los siguientes puntos: Datos de entrada al programa: ___________________________________________ Dados de salida: ______________________________________________ Relación entre los datos de entrada y salida: ________________________________ Una vez analizados esos puntos escriba el programa y anote el tiempo (en minutos) que le devuelve si la distancia son 30 km y la velocidad 110 km/h: ________________ 4 12. La ley de Coulomb indica que la fuerza, F, que actúa entre dos esferas con carga eléctrica puede obtenerse con la fórmula F=kq1q2/r, donde q1 es la carga de la primera esfera, q2 es la carga de la segunda esfera, r es la distancia entre los centros de las dos esferas, y k es una constante de proporcionalidad (busque su valor). Escribe un programa para calcular la fuerza, F. Analice los siguientes puntos: Datos de entrada al programa:___________________________________________ Valores constantes: ___________________________________________________ Datos de salida: ______________________________________________________ 13. Un tonel es un recipiente, generalmente de madera, muy utilizado para almacenar y mejorar un vino. La forma de un tonel es muy característica y es un cilindro en el que la parte central es más gruesa, es decir, tiene un diámetro mayor que los extremos. Escriba un programa que lea las medidas de un tonel y nos devuelva su capacidad, teniendo en cuenta que el volumen (V) de un tonel viene dado por la siguiente fórmula: V = π l a2 , donde: l es la longitud del tonel, su altura. a = d/2 + 2/3(D/2 - d/2) d es el diámetro del tonel en sus extremos. D es el diámetro del tonel en el centro: D>d Nota: Observe que si las medidas se dan en centímetros el resultado lo obtenemos en centímetros cúbicos. 14. Modifique el programa anterior para que, suponiendo que las medidas de entrada son dadas en centímetros, el resultado lo muestre en: litros, centímetros cúbicos y metros cúbicos. Recuerde que 1 litro es equivalente a un decímetro cúbico. Indique siempre la unidad de medida empleada. 15. Hacer un programa que pida: a. b. c. d. El total de kilómetros recorridos. El precio de la gasolina por litro. El dinero de gasolina invertido en el viaje. El tiempo que se ha tardado en el viaje (en horas y minutos). Y calcule los siguientes datos: a. El consumo de gasolina (en litros y euros) por cada 100 kilómetros. b. El consumo de gasolina (en litros y euros) por cada kilómetro. c. La velocidad media (en Km/h y m/sg). 16. Escriba un programa en C para calcular el valor de la pendiente de una línea que conecta dos puntos (x1,y1) y (x2,y2). La pendiente está dada por la ecuación (y2y1)/(x2-x1). Haga que el programa también calcule el punto medio de la línea que une los dos puntos, el cual viene dado por (x1+x2)/2,(y1+y2)/2. ¿Cuál es el resultado que devuelve el programa para los puntos (3,7) y (8,12)? Pendiente __________________ Valor medio __________________ ¿Y para los puntos (2,10) y (12,6)? Pendiente _________________ Valor medio ______________ 5 17. Rellena la siguiente tabla (use para ello la ayuda de algún compilador, libros o internet): Nombre de la función sqrt Qué hace la función Calcula la raíz cuadrada 1 double Número de argumentos Tipo de datos que requiere Tipo de datos del resultado Biblioteca Pow log atan double math.h 18. Escribir un programa que calcule la distancia euclídea de dos puntos en el plano definidos por sus dos coordenadas cada uno: (x1,y1) y (x2,y2). Utilice variables de tipo double y la función sqrt(), de la biblioteca math.h, para calcular la raíz cuadrada. 19. Escribe, compila y ejecuta un programa en C que calcule y devuelva la raíz cuarta de un número. Pruébalo con el número 81.0 (deberá devolverte 3). Utiliza el programa para calcular la raíz cuarta de 1728.8964: ______________________ Escribe aquí la instrucción que has utilizado para calcular la raíz cuarta: _________________________________________________________________ 20. El área de una elipse se obtiene con la fórmula πab , donde a es el radio menor de la elipse y b es el radio mayor, y su perímetro se obtiene con la fórmula π[4(a+b)2]0.5. Realice un programa en C utilizando estas fórmulas y calcule el área y el perímetro de una elipse que tiene un radio menor de 2.5 cm y un radio mayor de 6.4 cm. Área ______________ Perímetro _______________ 21. Si coloca una escalera de 3 metros a un ángulo de 85 grados al lado de un edificio, la altura en la cual la escalera toca el edificio se puede calcular como altura=3 * seno 85º. Calcule esta altura con una calculadora y luego escriba un programa en C que obtenga y visualice el valor de la altura. Compruebe que la altura es calculada correctamente y escriba aquí el resultado _____________________. Generalice el programa para cualquier altura y cualquier ángulo, pidiéndolos adecuadamente como entradas. Nota: Los argumentos de todas las funciones trigonométricas (seno, coseno, etc) deben estar expresados en radianes. Por tanto, para obtener el seno, por ejemplo, de un ángulo expresado en grados, primero deberá convertir el ángulo a radianes. 22. La máxima altura alcanzada por una pelota lanzada a una velocidad inicial v, en metros/seg, a un ángulo θ está dada por la fórmula altura=(0.5 * v2 * seno 2 )/g, donde g es la gravedad que vale 9.8. Utilizando esta fórmula, escriba un programa en C que calcule y visualice la altura alcanzada por una pelota lanzada a 5 millas/hora en un ángulo de 60 grados. Nota: asegúrese de convertir la velocidad inicial a las unidades correctas. Una milla tiene 1609 metros. 6 23. La amplificación de los circuitos electrónicos está medida en unidades de decibelios, los cuales se calculan como: 10 log(Po/Pi), donde Po es la potencia de la señal de salida y Pi es la potencia de la señal de entrada. Utilizando esta fórmula escriba un programa en C que calcule y visualice la amplificación en decibelios para una potencia determinada de entrada y salida. Escriba la salida del programa si la potencia de salida es 50 veces la potencia de entrada ____________________. Utilícelo también para calcular la amplificación de un circuito donde la potencia de salida es 4.639 vatios y la potencia de entrada es 1 vatio ________________________. 24. La velocidad de impacto (en metros/segundo) de una pelota de hule soltada desde una altura determinada (en metros), está dada por la fórmula velocidad = sqrt(2*g*altura). La pelota rebota a 2/3 de la altura desde la cual cayó. Con esta información, escriba un programa en C que calcule y visualice la velocidad de impacto de los tres primeros botes y la altura que alcanza la pelota en cada uno. Pruebe el programa utilizando una altura inicial de 2.0 metros y escriba a continuación los resultados que obtiene. Ejecute el programa dos veces y compare los resultados al dejar caer la pelota en la Tierra (g=9.81 metros/seg2) y en la Luna (g=1.67 metros/seg2). EN LA TIERRA Primer bote Velocidad de impacto Altura que alcanza Segundo Bote Tercer Bote EN LA LUNA Primer bote Velocidad de impacto Altura que alcanza Segundo Bote Tercer Bote Ejercicios resueltos 1. Solución al ejercicio 8. Solución 1: /* Ejercicio 8 usando toupper() */ #include<stdio.h> #include<ctype.h> void main(){ char a,b,c,d; a=getchar(); /* Igual a scanf("%c",&a) */ b=getchar(); c=getchar(); d=getchar(); } putchar(toupper(a)); putchar(toupper(b)); putchar(toupper(c)); putchar(toupper(d)); 7 Solución 2: /* Ejercicio 8 usando toupper() */ #include<stdio.h> #include<ctype.h> void main(){ char a,b,c,d; a=toupper(getchar()); b=toupper(getchar()); c=toupper(getchar()); d=toupper(getchar()); } putchar(a); putchar(b); putchar(c); putchar(d); Solución 3: /* Ejercicio 8 usando toupper() */ #include<stdio.h> #include<ctype.h> void main(){ char a,b,c,d; a=toupper(getchar()); b=toupper(getchar()); c=toupper(getchar()); d=toupper(getchar()); printf("%c%c%c%c",a,b,c,d); } Solución 4: /* Ejercicio 8 usando toupper() */ #include<stdio.h> #include<ctype.h> void main(){ char a=getchar(), b=getchar(), c=getchar(), d=getchar(); printf("%c%c%c%c",toupper(a),toupper(b), toupper(c),toupper(d)); } Solución 5: /* Ejercicio 8 SIN usar toupper() */ #include<stdio.h> void main(){ char a,b,c,d, distancia = 'A' - 'a'; /* 65-97 */ a = getchar() + distancia; b = getchar() + distancia; c = getchar() + distancia; d = getchar() + distancia; printf("%c%c%c%c",a,b,c,d); } 8 2. Solución al ejercicio 10 #include <stdio.h> // para la función printf #include <stdlib.h> // para la función system #include <math.h> // para la función pow /*****************************************************/ /* Muestra por pantalla el número de bytes que ocupa */ /* y el rango de valores para los tipos de datos */ /* entero con signo y entero sin signo */ /*****************************************************/ int main() { int n; printf("El número de bytes que ocupa un entero con signo es %d\n", sizeof(int)); printf("El número de bytes que ocupa un entero sin signo es %d\n", sizeof(unsigned int)); n=sizeof(int)*8; //número de bits que ocupa un int printf("El rango de un entero con signo es [-%.0f,%.0f]\n", pow(2,n-1),pow(2,n-1)-1); n=sizeof(unsigned int)*8; //bits que ocupa un unsigned int printf("El rango de un entero sin signo es [0,%.0f]\n", pow(2,n)-1); system("Pause"); return 0; } 3. Solución al ejercicio 18. Solución: /*******************************************/ /* Distancia entre dos puntos en el plano. */ /*******************************************/ #include <stdio.h> #include <math.h> void main (void){ double x1, y1, x2, y2; printf printf printf printf ("\n("\n("\n("\n- Introduce Introduce Introduce Introduce el el el el parámetro parámetro parámetro parámetro x1: y1: x2: y2: "); "); "); "); scanf scanf scanf scanf ("%lf",&x1); ("%lf",&y1); ("%lf",&x2); ("%lf",&y2); x1 = (x1-x2) * (x1-x2); /* Cuadrados de las distancias en los ejes X e Y */ y1 = (y1-y2) * (y1-y2); } printf ("\n* La distancia entre ellos es: %lf.\n",sqrt(x1+y1); 4. Escribir un programa que lea dos valores enteros y muestre su suma, resta, multiplicación, división entera y resto de la división. 9 Solución: /********************************************/ /* Operaciones aritméticas con dos enteros. */ /********************************************/ #include <stdio.h> void main (){ int a, b; printf ("\nIntroduce el primer número: "); scanf ("%i", &a); printf ("\nIntroduce el segundo número: "); scanf ("%i", &b); } printf printf printf printf printf ("\nLa ("\nLa ("\nLa ("\nLa ("\nEl suma es: %i.", a+b); resta es: %i.", a-b); multiplicación es: %i.", a*b); división entera es: %i.", a/b); resto de la división entera es: %i.", a%b); Observe que: o o o o o o o o o o Los números introducidos pueden ser también números negativos. La división entre enteros genera un resultado entero (sin decimales). Si uno de los operandos o el resultado excede del rango permitido para los números enteros, que es [-32768,32767], entonces, el resultado será incorrecto, pero el compilador no avisa de ningún error. Todas las instrucciones finalizan con un punto y coma (;). Pruebe a quitar un ; y compile a continuación. Lea el mensaje de error y fíjese que el error lo señala en la línea siguiente. Esto es debido a que es en la línea siguiente cuando detecta que falta un ;. a+b es una expresión (de suma). El resultado de esta expresión será imprimido por la función printf(). Se podría haber asignado el resultado de esta expresión a una variable (por ejemplo con c=a+b) y luego haber usado esa variable (c) para imprimirla. Igualmente ocurre con las demás expresiones, pero de la forma propuesta nos ahorramos instrucciones y variables. El código de formato o indicador de tipo %i (de int) es totalmente equivalente a %d (decimal). En la función de escritura printf() el número entero a escribir es insertado en la posición donde está situado el indicador %i. En un mismo printf() puede haber varios indicadores de tipo (de la forma %i). En ese caso, después de las comillas finales (") deben aparecer tantas expresiones como indicadores existan. Estas expresiones aparecerán en las posiciones de los indicadores y en el orden que aparecen. Por ejemplo, pruebe un printf() con tres expresiones: printf("\nSUMA: %i + %i = %i.", a, b, a+b); El carácter \n que hay al principio del texto que escribe la función printf() sirve para indicar que cambie de línea (retorno de carro, newline). Esto hace que cada una de las frases aparezca en una línea distinta. Pruebe a poner un \n en cualquier posición dentro del texto de printf() y observe qué ocurre. Las funciones printf() y scanf() son funciones que están incluídas dentro de la biblioteca stdio.h (entrada/salida estándar, standard input/output). Por eso, hay que incluir al principio del programa ese fichero de cabeceras (.h, headers). Pruebe a eliminar ese #include y observe los mensajes de error que genera al compilar. El texto incluido entre /* y */ se llama comentario y es ignorado por el compilador. Puede incluir comentarios en cualquier parte del programa para indicar cualquier aclaración que desee. Es siempre aconsejable poner un comentario al principio del programa para 10 o o o o indicar lo que hace el programa, tal y como se ve en este ejercicio. Los comentarios son aclaraciones para el programador (no para el compilador) y ayudan a entender un programa. main() es la función principal del programa. Todo programa en C debe contener una función main() y será por está función por la que empiece la ejecución. El tipo void (nulo), indica que la función de este programa no va a devolver ningún valor al Sistema Operativo. Los paréntesis en blanco indican que la función no tiene argumentos. También puede escribirse en el programa de forma explícita: main(void) La llave de apertura { indica, en este caso, que comienza la función main(). Suele ponerse al final de la línea de la orden que comienza. La llave de cierre } indica, en este caso, que termina la función main(). Suele ponerse justo debajo de la orden que cierra, en la misma columna de texto donde comienza dicha orden. Las instrucciones que contiene la función main() están sangradas (o indentadas) dos espacios hacia la derecha. Esto se hace así para indicar de forma clara que todas estas instrucciones están incluidas dentro de la función main(). El sangrado es muy importante para que un programa sea fácil de leer y cada sangrado debe tener entre 2 y 4 espacios en blanco. Errores comunes de programación 1. Omitir los paréntesis después del main. 2. Omitir o escribir de forma incorrecta la llave que abre o que cierra una función. 3. Escribir incorrectamente el nombre de una función; por ejemplo, escribir prinf en vez de printf. 4. Utilizar una función de biblioteca sin incluir la instrucción del preprocesador #include <....> 5. Utilizar una función sin la cantidad correcta de argumentos o el tipo adecuado de datos. 6. Olvidar encerrar entre comillas una cadena de caracteres en un printf o en los especificadores de tipo en un scanf. 7. Omitir el punto y coma al final de cada instrucción. 8. Poner un punto y coma al final del comando #include del preprocesador. 9. Escribir la letra O en lugar del número cero (0), o viceversa, y escribir la letra l por el número 1, o viceversa. 10. Olvidar declarar todas las variables utilizadas en un programa. 11. Guardar un tipo inapropiado de datos en una variable declarada. 12. Utilizar una variable en una expresión antes de haber asignado un valor a la variable. Cualquier valor que esté accidentalmente en la variable se utilizará al evaluar la expresión, y el resultado no tendrá sentido. 13. Dividir valores enteros de forma incorrecta. Este error normalmente se confunde dentro de una expresión más grande y puede ser muy difícil detectarlo. Por ejemplo, la expresión 3.4 + 2/3 + 7.9 produce el mismo resultado que la expresión 3.4 + 7.9 porque la división entera de 2/3 es 0. Es MUY IMPORTANTE saber asociar el mensaje de error que producirá el compilador para cada uno de esos errores. Para ello merece la pena escribir un programa e introducir deliberadamente cada uno de estos errores para ver qué mensaje de error producirá el compilador. Otro error muy común y MUY GRAVE, a un nivel más básico, es empezar a codificar y ejecutar un programa antes de que el programador comprenda qué se requiere y los algoritmos y procedimientos que utilizará para producir el resultado deseado. 11 Algo más sobre los posibles errores Un error de programa se puede detectar en diversos momentos: 1. Antes de compilar un programa. 2. Al compilar un programa (errores en tiempo de compilación). 3. Al ejecutar un programa (errores en tiempo de ejecución). 4. Al examinar el resultado de un programa después de que éste es ejecutado. 5. Nunca. En un programa hay dos tipos básicos de errores: sintácticos (o de sintaxis) y semánticos (o de lógica). Un error sintáctico ocurre cuando existen fallos en la estructura o en la ortografía de una instrucción (p.e. cuando faltan unas comillas, un punto y coma o cuando una palabra clave está mal escrita, etc). Todos estos errores son detectados al compilar el programa. Los errores semánticos son fallos inesperados, resultado directo de una deficiencia en la lógica del programa. Estos errores no los detecta el compilador y son más difíciles de descubrir que los errores sintácticos. La forma más normal de manifestarse estos errores es cuando el programa produce resultados incorrectos. Una de las mejores técnicas para detectar este tipo de problemas es utilizar un programa depurador (debugger), que verifica la ejecución del programa mientras se ejecuta. Resumen del tema • • • • • • • • • • Un programa en C consta de uno o más módulos llamados funciones. Una de estas funciones debe ser llamada main() (función principal). La función main() indica el punto de inicio de un programa en C. El programa más sencillo en C consiste en una sola función main(). Después del nombre de la función, el contenido de ésta tiene el siguiente formato general: void main() { todas las instrucciones de C van aquí; } Todas las instrucciones de C deben terminar con punto y coma. Existen tres tipos de datos básicos: número entero, número real (o en punto flotante) y carácter. Cada uno de ellos utiliza diferentes cantidades de memoria. C reconoce cada uno de estos tipos de datos, además de otros (con signo, sin signo, corto o largo) que son modificaciones de los anteriores. Toda variable de un programa en C debe ser declarada según el tipo de valor que puede guardar. Una variable sólo se puede utilizar después de haber sido declarada. Las variables también se pueden inicializar cuando son declaradas. Además, las variables del mismo tipo se pueden declarar utilizando una sola instrucción. Las instrucciones declarativas siempre efectúan una tarea software que consiste en informar al compilador los nombres válidos de las variables en una función. Además de eso, una declaración de variable también hace que la computadora asigne ubicaciones de memoria a la variable. La función printf() se puede utilizar para visualizar todos los tipos de datos que hay en C. La función scanf() nos permite leer del teclado datos y almacenarlos en variables de cualquier tipo. Cuando se utilizan las funciones printf() o scanf() dentro de un programa, el comando del preprocesador #include <stdio.h> debe estar colocado en la parte superior del programa. Los comandos del preprocesador no terminan con punto y coma. El operador sizeof() se puede utilizar para determinar la cantidad de espacio de almacenamiento reservado para las variables. 12