sábado, 27 de septiembre de 2014

Ejercicios resueltos paso a paso del funcionamiento del if.

15 ejercicios resueltos paso a paso sobre el uso del condicional if.

1.- Hacer un programa en C que pida un número del 1 al 5 y diga si es primo o no.
#include 

int main(void)
{
      int i;
      printf("Introduzca número del 1 al 5:");
      scanf("%d",&i);

      if (i!=4) {
            printf("Es primo.");
      }
      else{
       printf("No es primo.");
      }

      system("PAUSE");     
      return 0;
}
2.- Hacer un programa en C que pida un número y diga si es par o impar.
#include 

int main(void){
      int i;
      printf("Introduzca número:");
      scanf("%d",&i);

      if (i%2==0) {
            printf("Es par.");
      }
      else{
            printf("Es impar.");
      }

      system("PAUSE");     
      return 0;
}
3.- Hacer un programa en C que pida 3 números y los ordene de menor a mayor.
#include 

int main(void){
      int num1,num2,num3;
           
      printf("Introduzca número 1:");
      scanf("%d",&num1);

      printf("Introduzca número 2:");
      scanf("%d",&num2);

      printf("Introduzca número 3:");
      scanf("%d",&num3);

      if (num1<num2 && num1<num3){
            if (num2<num3){
                  printf("%d",num1);
                  printf("%d",num2);
                  printf("%d",num3);
            }
            else{
                  printf("%d",num1);
                  printf("%d",num3);
                  printf("%d",num2);
            }
      }
      else if (num2<num1 && num2<num3){
            if (num1<num3){
                  printf("%d",num2);
                  printf("%d",num1);
                  printf("%d",num3);
            }
            else{
                  printf("%d",num2);
                  printf("%d",num3);
                  printf("%d",num1);
            }
      }
      else if (num3<num1 && num3<num2){
            if (num1<num2){
                  printf("%d",num3);
                  printf("%d",num1);
                  printf("%d",num2);
            }
            else{
                  printf("%d",num3);
                  printf("%d",num2);
                  printf("%d",num1);
           }
      }
   
      system("PAUSE");     
      return 0;
}
4.- Hacer un programa en C que pida 3 números y los ordene de mayor a menor.
#include 

int main(void)
{
      int num1,num2,num3;
           
      printf("Introduzca número 1:");
      scanf("%d",&num1);

      printf("Introduzca número 2:");
      scanf("%d",&num2);

      printf("Introduzca número 3:");
      scanf("%d",&num3);

      if (num1>num2 && num1>num3){
            if (num2>num3){
                  printf("%d",num1);
                  printf("%d",num2);
                  printf("%d",num3);
            }
            else{
                  printf("%d",num1);
                  printf("%d",num3);
                  printf("%d",num2);
            }
      }
      else if (num2>num1 && num2>num3){
            if (num1>num3){
            printf("%d",num2);
            printf("%d",num1);
            printf("%d",num3);
            }
            else{
                  printf("%d",num2);
                  printf("%d",num3);
                  printf("%d",num1);
            }
      }
      else if (num3>num1 && num3>num2){
            if (num1>num2){
                  printf("%d",num3);
                  printf("%d",num1);
                  printf("%d",num2);
            }
            else{
                  printf("%d",num3);      
                  printf("%d",num2);
                  printf("%d",num1);
            }
      }
      system("PAUSE");     
      return 0;
}
5.- Hacer un programa en C que pida 1 número y diga si es positivo, negativo o cero.
#include 

int main(){
      int x;
	
      printf("\nIngresa un numero: ");
      scanf("%d",&x);
	
      if(x==0)
            printf("\nEl numero es cero");
      else if(x>0)
            printf("\nEl numero es positivo");
      else
            printf("\nEl numero es negativo");
}
6.- Hacer un programa en C que pida 1 numero y devuelva su valor absoluto.
#include

int main(){
	int x;
	
	printf("\nIngresa un numero: ");
	scanf("%d",&x);
	
	if(x<0)
		printf("\n|%d|=%d",x,x*-1);
	else
		printf("\n|%d|=%d",x,x);

	return 1;
}
7.- Hacer un programa en C que pida 3 números y diga si la multiplicación de los dos primeros es igual al tercero. 
#include 

int main(void)
{
      int num1,num2,num3;
           
      printf("Introduzca número 1:");
      scanf("%d",&num1);
   
      printf("Introduzca número 2:");
      scanf("%d",&num2);

      printf("Introduzca número 3:");
      scanf("%d",&num3);

      if (num1*num2==num3){
             printf("El tercer número es la multiplicación\n");
      }
      else{
            printf("El tercer número NO es la multiplicación \n");       
      }

      system("PAUSE");     
      return 0;
}
8.- Hacer un programa en C que pida 3 números y diga si el tercero es el resto de la división de los dos primeros.
#include 

int main(void){

      int num1,num2,num3;
           
      printf("Introduzca número 1:");
      scanf("%d",&num1);
   
      printf("Introduzca número 2:");
      scanf("%d",&num2);

      printf("Introduzca número 3:");
      scanf("%d",&num3);

      if (num1%num2==num3){
            printf("El tercer número es el resto de la división.\n");
      }
      else{
            printf("El tercer número NO es el resto de la división.\n");       
      }

      system("PAUSE");     
      return 0;
}
9.- Hacer un programa en C que pida un numero y diga si es menor, mayor o igual a 10.
#include

int main(){
      int x;
	
      printf("\nIngresa un numero: ");
      scanf("%d",&x);
	
      if(x<10)
            printf("\nEl numero ingresado es menor que 10");
      else if(x>10)
            printf("\nEl numero ingresado es mayor que 10");
      else
            printf("\nEl numero ingresado es igual a 10");
      return 1;
}
10.- Hacer un programa en C que pida una letra y diga si es vocal o no.
#include 

int main(void)
{
      char c;
           
      printf("Introduzca un carácter:");
      scanf("%c",&c);
   
      switch (c){
            case 'a':
                  printf ("Es vocal\n");
                  break;
            case 'e':
                  printf ("Es vocal\n");
                  break;
            case 'i':
                  printf ("Es vocal\n");
                  break;
            case 'o':
                  printf ("Es vocal\n");
                  break;
            case 'u': 
                  printf ("Es vocal\n");
                  break;             
            default:
                  printf ("No es vocal\n");
                  break;
      }
      system("PAUSE");     
      return 0;
}
11.- Hacer un programa en C que pida una letra y diga si es consonante o no.
#include

int main(){
      char x;
	
      printf("\nIngresa un caracter: ");
      scanf("%d",&x);
	
      if(x!='a'||x!='e'||x!='i'||x!='o'||x!='u'){
            printf("\nEl caracter inresado es una consonante");
      }
      else
            printf("\nEl caracter ingresado es una consonante");
      return 1;
}
12.- Hacer un programa en C que pida una letra y diga si es consonante o vocal.
#include

int main(){
	char x;
	
	printf("\nIngresa un caracter: ");
	scanf("%d",&x);
	
	if(x!='a'||x!='e'||x!='i'||x!='o'||x!='u'){
		printf("\nEl caracter inresado es una consonante");
	}
	else
		printf("\nEl caracter ingresado es una vocal");
	return 1;
}
13.- Hacer un programa en C que implemente una calculadora básica.
#include 
 
int main() {
  
      int x,y; /*Declaración de variables a utilizar*/
  
      printf("\nCalculadorea en C\n\n1.-Suma"); /*Creación del menú*/
      printf("\n2.-Resta");
      printf("\n3.-Multiplicacion");
      printf("\n4.-Division");
      printf("\n\nSeleccion una opcion: ");
      scanf("%d",&x); /*Se guardará la opción en la variable x*/
  
      switch(x){ /*Se usará switch para realizar cada operación*/
      case 1: 
              printf("\nIngresa un numero: ");
              scanf("%d",&x); /*para no declarar más variables se
                              sobreescribirá x*/
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
   
              printf("\nla suma de %d + %d = %d",x,y,x+y); /*Operador suma*/
              break;
      case 2: 
              printf("\nIngresa un numero: ");
              scanf("%d",&x);
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
              printf("\nla resta de %d - %d = %d",x,y,x-y); /*Operador resta*/
              break;
      case 3: 
              printf("\nIngresa un numero: ");              scanf("%d",&x);
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
              printf("\nla multiplicacion de %d * %d = %d",x,y,x*y); /*Operador
                                                               multiplicacion*/
              break;
      case 4: 
              printf("\nIngresa un numero: ");
              scanf("%d",&x);
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
              printf("\nla devisión de %d / %d = %d",x,y,x/y); /*Operador 
                                                                Division*/
              printf(" y el residuo es %d",x%y);/*Operador Módulo*/
              break;
      }
  
      return 0;
}
14,. Hacer un programa en C que pida 2 números y diga cual es el mayor.
#include

int main(){
      int x,y;
	
      printf("\nIngresa un caracter: ");
      scanf("%d",&x);
	
      printf("\nIngresa un caracter: ");
      scanf("%d",&y);
	
      if(x>y)
            printf("\n%d es mayor que %d",x,y);
      else if (x<y)
            printf("\n%d es menor que %d",x,y);
	
      else
            printf("\n%d es igual que %d",x,y);
      return 1;
}
15.- Hacer un programa en C que solo permita introducir los caracteres S y N.
#include 

int main(void){
      char c;
           
      printf("Introduzca un carácter:");
      scanf("%c",&c);
   
      if (c=='s' || c=='n' ){
            printf("Es correcto\n");
      }
      else{
            printf("Es incorrecto\n");
      }
   
      system("PAUSE");      
      return 0;
}

Condicionales estructura y ejemplos resueltos en C (If, switch, while, do while)

Llega un punto en la programación en el cual deseas realizar aplicaciones que puedan tomar decisiones según los datos que introduzca un usuario. Todas las aplicaciones de usuario actúan según las opciones que eligen los mismos, podemos poner por ejemplo la aplicación que hay en los cajeros automáticos o en los puntos de información. 

Si quieres aprender a usar este tipo de condicionales lee completo este post, puesto que explicare su funcionamientos y al final habrán muchos ejercicios resueltos para poder comprender bien este tema.

Antes de comenzar recomiendo visitar este este post donde explico los tipos de operadores los cuales son fundamentales para el uso de condicionales.

Como ya se ha mencionado, C es un ejemplo de programación estructurada. En este tipo de programación, es necesario contar con ciertas estructuras que permitan controlar el flujo del programa, es decir, tomar decisiones y repetir acciones.

La estructura condicional if  else

En la gran mayoría de los programas será necesario tomar decisiones sobre qué acciones realizar. Esas decisiones pueden depender de los datos que introduzca el usuario, de si se ha producido algún error o de cualquier otra cosa.

La estructura condicional if - else es la que nos permite tomar ese tipo de decisiones. Traducida literalmente del inglés, se la podría llamar la estructura "si - si no", es decir, "si se cumple la condición, haz esto, y si no, haz esto otro".

La estructura del condicional if es la siguiente:


La sentencia if, tras evaluar una expresión lógica, ejecuta una serie de sentencias en caso de que la expresión lógica sea verdadera. 

La expresión lógica lo puedes estudiar aquí, caben expresiones relacionales y expresiones lógicas cuyo resultado sea verdadero o falso. Esta sentencia condicional también puede ser compuesta. Es igual que la anterior pero se le añade un apartado que es el else que contendrá instrucciones que se ejecutarán en caso de que la expresión evaluada por el if es falsa. 

La estructura del condicional if - else es la siguiente:


Dentro de una sentencia if se puede colocar otra sentencia if y asi sucesivamente, esto es lo que se denomina como anidamiento, y permite crear programas donde se valoren expresiones complejas.

La estructura de la anidación de condicionales en la siguiente:


Para el caso del if - else solo se evaluará la expresión lógica contenida dentro del condicional if, si no se cumple, el programa nos mandará por default a las instrucciones contenidas en else,

Al no cumplirse las condiciones del if y de necesitar más, podemos utilizar el condicional else - if el cual nos permite evaluar mas condiciones después de haber "rechazado" la condición anterior. 

La estructura del else - if es la siguiente:


Decir que, tanto en el if como en el else sólo hay una única sentencia entonces en la sintaxis podemos eliminar las llaves ({}). Para que este concepto te quede completamente claro vamos a ver un ejemplo en c++. El ejemplo siguiente va a mostrar un programa con alternativas. El programa pedirá una nota de 0 a 10, y según esa nota escribirá en la pantalla si es un aprobado, si la nota es mayor que 5 o si es un suspenso, si la nota es menor que cinco.

Para poder entender bien el uso de condicionales hay muchos ejemplos resueltos paso a paso, dando clic aquí.

Estructura del condicional switch

Una instrucción switch (alternativa múltiple) permite seleccionar, por medio de una expresión, el siguiente bloque de instrucciones a ejecutar de entre varios posibles. 

La estructura de switch es la siguiente:


Para poder entender bien el uso de condicionales hay muchos ejemplos resueltos paso a paso, dando clic aquí.

Tipos de operadores y ejemplos en C

Concepto de operador en C

“Un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción. Los operadores que requieren un operando, como el operador de incremento se conocen como operadores unarios. Los operadores que requieren dos operandos, como los operadores aritméticos (+,-,*,/) se conocen como operadores binarios. Un operador, el operador condicional (?:), utiliza tres operandos y es el único operador ternario de C.

Existen 6 tipos de operadores según su función, que son aritméticos, relacionales, de asignación, 
lógicos, de dirección y de manejo de Bits.

Operadores aritméticos

Operación Acción
x++ Postincremento
++x Preincremento
x-- Predecremento
+x + Unario
-x - Unario
x*y Multiplicación
x/y División
x%y Módulo
x+y Suma
x-y Resta
Los operadores incremento y decremento proporcionan una forma breve de sumar o restar 1 a una variable. Usados como prefijo, como ++i, el valor de la variable se incrementa (decrementa) antes de que la variable sea usada; usada como sufijo, como i++ el valor de la variable se incrementa (decrementa) despues de su utilizacion.

Ejemplo:

Hacer una calculadora básica en C
#include 

int main() {
 
      int x,y; /*Declaración de variables a utilizar*/
 
      printf("\nCalculadorea en C\n\n1.-Suma"); /*Creación del menú*/
      printf("\n2.-Resta");
      printf("\n3.-Multiplicacion");
      printf("\n4.-Division");
      printf("\n\nSeleccion una opcion: ");
      scanf("%d",&x); /*Se guardará la opción en la variable x*/ 
 
      switch(x){ /*Se usará switch para realizar cada operación*/
      case 1: 
              printf("\nIngresa un numero: ");
              scanf("%d",&x); /*para no declarar más variables se
                              sobreescribirá x*/
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
  
              printf("\nla suma de %d + %d = %d",x,y,x+y); /*Operador suma*/
              break;
      case 2: 
              printf("\nIngresa un numero: ");
              scanf("%d",&x);
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
              printf("\nla resta de %d - %d = %d",x,y,x-y); /*Operador resta*/
              break;
      case 3: 
              printf("\nIngresa un numero: ");              scanf("%d",&x);
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
              printf("\nla multiplicacion de %d * %d = %d",x,y,x*y); /*Operador
                                                               multiplicacion*/
              break;
      case 4: 
              printf("\nIngresa un numero: ");
              scanf("%d",&x);
              printf("\nIngresa otro numero: ");
              scanf("%d",&y);
              printf("\nla devisión de %d / %d = %d",x,y,x/y); /*Operador 
                                                                Division*/
              printf(" y el residuo es %d",x%y);/*Operador Módulo*/
              break;
      }
 
      return 0;
}
Operadores relacionales.

Los operadores relacionales comparan sus operandos y devuelven el valor 1 si la relacion es cierta y 0 si no lo es. Son:

Operador Propósito
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
== Igual que
!= Direrente de
Ejemplo:

Hacer un programam en C que pida dos número, los compare y diga si son iguales, diferentes y cual es el mayor.
#include 

int main() {
      int x,y;
 
      printf("\nIngresa un numero ");
      scanf("%d",&x);
      printf("\nIngresa otro numero: ");
      scanf("%d",&y);
 
      if(x==y)
            printf("\n%d y %d son iguales",x,y); 
      else if(x!=y){
            printf("\n%d y %d no son iguales",x,y);
            if(x>y)
                  printf("\n\n%d es mayor que %d",x,y);
            if(x&l;ty)
                  printf("\n\n%d es menor que %d",x,y);
      }
      return 0;
}
Operadores logicos.
Operador Accion
! Negación lógica
&& Y lógico
|| O lógico
Veamos qué significan cada uno de ellos:

valor = (expresion1 && expresion2)
En este caso si expresion1 y expresion2 son verdaderas, el valor resulta verdadero (true).
Si alguna o ambas de las expresiones son falsas, el valor resulta en falso (false).

valor = (expresion1 || expresion2)
En este caso si ambas expresiones son verdaderas, el valor resulta verdadero.
Si una de las expresiones es verdadera y la otra falsa, el valor resulta verdadero.
Si las dos expresiones son falsas, el valor resulta falso.

valor = (!expresion1)
En este caso si la expresión es verdadera, el valor resulta falso.

Si la expresión es falsa, el valor resulta falso.

Ejemplo:
#include 

int main() {
      int x;

      printf("\nIngresa tu edad: ");
      scanf("%d",&x); /*El valor ingresados guardará en x*/
 
      if(x>=12 && x<=18) /*El operador && nos dice que si
        eres mayor o igual a 12 y menor o igual a 18 eres un
        adolescente, si alguna de las 2 condiciones no se 
        cumple, entonces no se jecutará la intrucción*/
            printf("\nEres un adolescente\n");
      else
            printf("\Es usted un adulto");
 
      return 0;
}

#include 

int main() {
      int x;
 
      printf("\nIngresa tu edad: ");
      scanf("%d",&x);
 
      if(!(x>17)) /*Niega por completo la expresión*/
            printf("\nAun no eres un adulto");
      else 
            printf("\nEs usted un adulto");
 
      return 0;
}
Los valores logicos en C estan representados por enteros: 0 es falso y un valor no cero es verdadero. Por ejemplo, el operador ! toma un operando numerico y devuelve int 1 para un operando cero y int 0 En el lenguaje caso contrario. El operador && devuelve 1 si los dos operandos son valores no cero y 0 en el lenguaje cualquier otro caso. El operador || devuelve 1 si cualquiera de los dos operandos es no cero y 0 en otro caso. Los operadores && y || evaluan primero el operando de su izquierda, y no evaluan el operando de la derecha si no es necesario.

Por ejemplo, si y es cero, la expresion y && x/y da 0 y no realiza la division por 0.

Precedencia de operadores.

La interpretación de cualquier expresión en el lenguaje C esta determinada por la precedencia y asociatividad de los operadores en dicha expresión. Cada operador tiene una precedencia y los operadores en una expresión se evalúan en orden de mayor a menor precedencia. La evaluación de operadores con la misma precedencia viene determinada por su asociatividad. Y, al igual que en matemáticas, los paréntesis anulan las reglas de precedencia.
En la siguiente tabla se listan los operadores en el lenguaje C, su precedencia y su asociatividad. Los operadores se listan en orden de prioridad decreciente (los situados mas arriba tienen mayor prioridad). Los operadores en la misma linea horizontal tienen la misma precedencia.

Operador Propósito Asociatividad
:: Scope (unario) De derecha a izquierda
:: Scope (binario) De izquierda a derecha
-> . Seleccion de miembros De izquierda a derecha
[] indices De izquierda a derecha
() Llamada a funcion De izquierda a derecha
++ Postincremento De izquierda a derecha
-- Postdecremento De izquierda a derecha
sizeof Tamaño de un objeto De derecha a izquierda
++ Preincremento De derecha a izquierda
-- Predecremento De derecha a izquierda
* & + - ! ~ Operadores unarios De derecha a izquierda
new Crea un objeto De derecha a izquierda
delete Borra un objeto De derecha a izquierda
() Conversion de tipo (type cast) De derecha a izquierda
->* .* Puntero a un miembro De izquierda a derecha
* / % Operadores multiplicativos De izquierda a derecha
+ - Operadores aditivos De izquierda a derecha
<< >> Operadores bitwise De izquierda a derecha
< > <= >= Operadores de relacion De izquierda a derecha
== != Operadores de igualdad De izquierda a derecha
& Y bitwise De izquierda a derecha
^ bitwise O exclusivo De izquierda a derecha
| bitwise O inclusivo De izquierda a derecha
&& Y logico De izquierda a derecha
|| O logico De izquierda a derecha
?: Operador condicional De derecha a izquierda
= *= /= += -= >*gt;=
&= ^= |= %= <<=
Operadores de asignacion De derecha a izquierda
, Operador coma De derecha a izquierda
En el lenguaje C las reglas de precedencia y asociatividad de operadores corresponden a las reglas matemáticas. Sin embargo, esto no funcionara, por ejemplo, con los operadores bitwise. Para tales operadores, se debe utilizar la tabla anterior, o bien parentesis.

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.

viernes, 26 de septiembre de 2014

Introducción a la programación en el lenguaje C

C es un lenguaje de programación de propósito general que ofrece como ventajas economía de expresión, control de flujo y estructuras de datos modernos y un rico conjunto de operadores. 

Además, C no es un lenguaje de “muy alto nivel” ni “grande”, y no está especializado en alguna área especial de aplicación. 

Pero su ausencia de restricciones y su generalidad lo hacen más conveniente y efectivo para muchas tareas que otros lenguajes supuestamente más poderosos. 

Originalmente, C fue diseñado para el sistema operativo UNIX y Dennis Ritchie lo implantó sobre el mismo en la DEC PDP-11. El sistema operativo, el compilador de C y esencialmente todos los programas de aplicación de UNIX (incluyendo todo el sofware utilizado para preparar este libro) están escritos en C. También existen compiladores para la producción en otras máquinas, incluyendo la IBM System/370, la Honeywell 6000 y la Interdata 8/32. El lenguaje C no está ligado a ningún hardware o sistema en particular y es fácil escribir programas que correrán sin cambios en cualquier máquina que maneje C.