sábado, 27 de septiembre de 2014

Variables y expresiones aritméticas en C

El siguiente programa utiliza la fórmula °C = (5/9) (°F-32) para imprimir la siguiente tab de temperaturas Fahrenheit y sus equivalentes centígrados o Celsius:

0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 105
260 126
280 137
300 148
En sí el programa aún consiste de la definición de una única función llamada main. Es más largo que el que imprime "hola, mundo", pero no es complicado. 

Introduce varias ideas nuevas, incluyendo comentarios, declaraciones, variables, expresiones aritméticas, ciclos y salida con formato.
/* imprime la tabla Fahrenheit-Celsius para fahr = 0, 20, ..., 300 */

#include

main ( ){
    int fahr, celsius; 
    int lower, upper, step;
    lower = 0; /* límite inferior de la tabla de temperaturas */
    upper = 300; /* límite superior */
    step = 20; /* tamaño del incremento */
    fahr = lower;
    while (fahr <= upper){
         celsius =((5*(fahr-32))/9); 
         printf("%d\t%d\n", fahr, celsius); 
         fahr = fahr + step;
    }
}
Las línea
/* imprime la tabla Fahrenheit-Celsius para fahr = 0, 20, ..., 300 */
es un comentario, que en este caso explica brevemente lo que hace el programa.

Cualesquier caracteres entre /* y */ son ignorados por el compilador, y pueden ser utilizados libremente para hacer a un programa más fácil de entender. Los comentarios pueden aparecer en cualquier lugar donde puede colocarse un espacio en blanco, un tabulador o nueva línea.

En C, se deben declarar todas las variables antes de su uso, generalmente al principio de la función y antes de cualquier proposición ejecutable. Una declaración notifica las propiedades lista de variables, como:
    int fahr, celsius; 
    int lower, upper, step;
El tipo int significa que las variables de la lista son enteros, en contraste con float, que significa punto flotante, esto es, números que pueden tener una parte fraccionaria. El rango tanto de int como de float depende de la máquina que se está utilizando; los int de 16 bits, que están comprendidos entre el -32768 y + 32767, son comunes, como lo son los int de 32 bits. Un número float típicamente es de 32 bits, por lo menos con seis dígitos significativos 10-38 y io+38.

Además de int y float, C proporciona varios tipos de datos básicos, incluyendo:

char carácter —un solo bvte
short entero corto
long entero largo
double punto flotante de doble precisión
Los tamaños de estos objetos también dependen de la máquina. También existen arreglos, estructuras y uniones de estos tipos básicos, apuntadores a ellos y funciones que regresan valores con esos tipos, todo lo cual se verá en el momento oportuno.

Los cálculos en el programa de conversión de temperaturas principian con las proposiciones de asignación.

lower = 0;
upper = 300;
step = 20;
fahr = lower;
que asignan a las variables sus valores iniciales. Las proposiciones individuales se terminan con punto y coma.

Cada línea de la tabla se calcula de la misma manera por lo que se utiliza una iteración que se repite una vez por cada línea de salida; este es el propósito del ciclo while
while (fahr < = upper) {
}
El ciclo while funciona de la siguiente manera: se prueba la condición entre paréntesis. De ser verdadera (fahr es menor o igual que upper), el cuerpo del ciclo (las tres proposiciones entre llaves) se ejecuta. Luego la condición se prueba nuevamente, y si es verdadera, el cuerpo se ejecuta de nuevo. Cuando la prueba resulta falsa (fahr excede a upper) la iteración termina, y la ejecución continúa en la proposición que sigue al ciclo. No existe ninguna otra proposición en este progra-
ma, de modo que termina. El cuerpo de un while puede tener una o más proposiciones encerradas entre llaves, como en el convertidor de temperaturas, o una sola proposición sin llaves, como en
while (i < j) 
    i = 2 * i;
En cualquier caso, siempre se sangra la proposición controlada por el while con una tabulación (lo que se ha mostrado con cuatro espacios) pará poder apreciar de un vistazo cuáles proposiciones están dentro del ciclo. El sangrado acentúa la estructura lógica del programa. Aunque a los compiladores de C no les importa la apariencia del programa, un sangrado y espaciamicnto adecuados son muy im-
portantes para hacer programas fáciles de leer. Se recomienda escribir una sola proposición por línea y utilizar espacios en blanco alrededor de los operadores para dar claridad al agrupamiento. La posición de las llaves es menos importante, aunque la gente mantiene creencias apasionadas. Se eligió uno de los varios estilos populares. Seleccione un estilo que le satisfaga y úselo en forma consistente.

La mayor parte del trabajo se realiza en el cuerpo del ciclo. La temperatura Celsius se calcula y se asigna a la variable celsius por la proposición.
celsius = 5 * (fahr-32) / 9;
La razón de multiplicar por 5 y después dividir entre 9 en lugar de solamente multiplicar por 5/9 es que en C, como en muchos otros lenguajes, la división de enteros trunca el resultado: cualquier parte fraccionaria se descarta. Puesto que 5 y 9 son enteros, 5/9 sería truncado a cero y así todas las temperaturas Celsius se reportarían como cero.

Este ejemplo también muestra un poco más acerca de cómo funciona printf.
En realidad, printf es una función de propósito general para dar formato de salida, que se describirá con detalle en el capítulo 7. Su primer argumento es una cadena de caracteres que serán impresos, con cada % indicando en donde uno de los otros (segundo, tercero, ...) argumentos va a ser sustituido, y en qué forma será impreso. Por ejemplo, %d especifica un argumento entero, de modo que la proposición
printf("%d\t%d\n", fahr, celsius);
hace que los valores de los dos enteros fahr y celsius sean escritos, con una tabulación (\t) entre ellos.

Cada construcción % en el primer argumento de printf está asociada con el correspondiente segundo argumento, tercero, etc., y deben corresponder apropiadamente en número y tipo, o se tendrán soluciones incorrectas.
Con relación a esto, printf no es parte del lenguaje C; no existe propiamente una entrada o salida definida en C. printf es sólo una útil función de la biblioteca estándar de funciones que está accesible normalmente a los programas en C. Sin embargo, el comportamiento de printf está definido en el estándar ANSI, por lo que sus propiedades deben ser las mismas en cualquier compilador o biblioteca que se apegue a él.
La función scanf es como printf, exceptuando que lee de la entrada en lugar de escribir a la salida.

0 comentarios:

Publicar un comentario