Calculadora simple¶
El siguiente programa es una calculadora simple:
#include <stdio.h>
float potencia(float base, int exponente) {
float resultado = 1;
int i;
for (i = 0; i < exponente; ++i) {
resultado *= base;
}
return resultado;
}
int main() {
float x, y, resultado;
char op;
int valido = 1;
printf("Ingrese operacion: ");
scanf("%c", &op);
printf("Ingrese x: ");
scanf("%f", &x);
printf("Ingrese y: ");
scanf("%f", &y);
switch (op) {
case '+':
resultado = x + y;
break;
case '-':
resultado = x - y;
break;
case '*':
case 'x':
resultado = x * y;
break;
case '/':
resultado = x / y;
break;
case '^':
resultado = potencia(x, (int) y);
break;
default:
valido = 0;
}
if (valido)
printf("El resultado es %f\n", resultado);
else
printf("Operacion invalida\n");
return 0;
}
Al ejecutar el programa, primero uno ingresa la operación que será aplicada, que puede ser:
Signo | Operación |
+ |
Suma |
- |
Resta |
* |
Multiplicación |
/ |
División |
^ |
Potencia |
La multiplicación también puede ser indicada
con una x
minúscula.
A continuación, se debe ingresar los dos operandos. Finalmente, el programa muestra el resultado de la operación.
Escriba, compile y ejecute este programa.
En este programa puede ver que es posible asignar un valor inicial a una variable al momento de declararla:
float resultado = 1.0;
int valido = 1;
También note que
tanto en el if
como en el else
del final
se ha omitido los paréntesis de llave ({}
)
ya que en ambos casos
hay incluída solamente una única sentencia.
Definición de funciones¶
Al principio del programa,
se ha definido una función llamada potencia
.
Ella recibe como parámetros
la base (un número real)
y el exponente (un entero),
y retorna el resultado de elevar la base al exponente.
En C no existe un operador «elevado a»
(como el **
de Python),
por lo que sí es útil definir una función como ésta.
Es necesario especificar explícitamente
cuál será el tipo del valor retornado
(en este caso float
)
y los tipos de cada uno de los parámetros
(en el ejemplo, float
e int
).
Las variables declaradas dentro de la función se llaman variables locales. Estas variables comienzan a existir al momento de llamar a la función, y desaparecen cuando la función termina. Son invisibles desde fuera de la función.
En nuestro programa,
las dos funciones main
y potencia
tienen una variable local llamada resultado
.
Ambas variables son distintas,
y sus valores respectivos están almacenados
en regiones diferentes de la memoria.
Tipo char¶
El tipo char
se usa para representar
caracteres (símbolos) solitarios.
La variable op
que almacena la operación
es de este tipo.
Un valor de tipo char
se representa en un programa entre comillas simples.
Por ejemplo,
el signo más está representado como '+'
.
Técnicamente,
los valores de tipo char
son números enteros
que están comprendidos entre −128 y 127.
Cada número está asociado a un caracter
a través de la tabla ASCII.
Los enteros y los caracteres asociados son intercambiables;
por ejemplo, la expresión 'm' == 109
es evaluada como verdadera.
No hay que confundir un caracter
con un string de largo uno:
'a'
y "a"
son dos cosas distintas.
Sentencia switch¶
El switch es una sentencia de control condicional que permite indicar qué hacer si el resultado de una expresión es igual a alguno de ciertos valores constantes indicados
Un ejemplo de uso de switch
es el siguiente:
switch (expresion) {
case 1:
/* que hacer cuando expresion == 1 */
case 2:
/* que hacer cuando expresion == 2 */
default:
/* que hacer cuando la expresion no es igual
* a ninguno de los casos anteriores */
}
Cuando el resultado de la expresión
es igual a alguno de los valores indicados,
la ejecución del programa salta al case
con ese valor.
Si el valor con el resultado no existe,
salta a default
.
Hay que tener cuidado con una característica extraña
del switch
: cuando se cumple un caso,
los casos que vienen a continuación también se ejecutan.
En este ejemplo:
- si
expresion == 1
, el programa saltará acase 1
, y luego continuará concase 2
ydefault
; - si
expresion == 2
, el programa saltará acase 2
, y luego continuará condefault
; - si
expresion
no es ni 1 ni 2, el programa saltará adefault
.
Para evitar que los casos siguientes sean ejecutados,
debe ponerse un break
al final de cada caso.
Esto es lo que se hizo en el programa de la calculadora.
Conversión de tipos¶
El segundo parámetro de la función potencia
es entero,
pero los operandos ingresados por el usuario
son almacenados como números reales.
Para convertir el exponente de real a entero, basta con anteponer al valor el tipo entre paréntesis.
En este caso particular,
la conversión se hace truncando los decimales
del número real.
Así, si y
vale 5.9
,
entonces (int) y
vale 5
.
Para conversiones entre otros tipos,
se siguen otras reglas diferentes.
En inglés, el nombre de esta operación es cast. Posiblemente usted escuche más de una vez a alguien refiriéndose a esta operación como «castear».
Ejercicios¶
Modifique el programa
de modo que soporte una nueva operación:
obtener el coeficiente binomial
entre x
e y
.
Esta operación debe ser indicada
con el símbolo b
:
Ingrese operacion: `b`
Ingrese x: `12`
Ingrese y: `5`
El resultado es 792.000000
El coeficiente binomial es una operación entre números enteros. Tenga cuidado y use conversiones apropiadas.