CURSO DESDE 0 DE PROGRAMACIÓN C BAJO GNU/LINUX.
Entrega 6. Operadores y Expresiones (I).
Como ya suponía...
Nadie iba a intentar los ejercicios, así que mi experimento ha salido como me imaginaba, con 0 respuestas. Así que veamos las soluciones:
Investigar la función 'sizeof', explicar para qué sirve y todo lo que puedas decirme sobre ella.
Para empezar, no es una función sino un operador, por eso no se encuentra en 'man 3 sizeof' . El operador sizeof informa del tamaño de almacenamiento utilizado por cualquier objeto y se puede usar de la siguiente forma:
sizeof expresión unitaria
sizeof (nombre del tipo)
Puesto que 'sizeof' se verá en próximas entregas, no diremos más.
Si te das cuenta, desde la entrega anterior no he hecho programas ejemplos desde el tipo float y double, haz un programa ejemplo que muestre el uso de todo lo aprendido desde ese punto hasta la entrega de hoy, cuantas más cosas tengas en cuenta de lo explicado para mostrarlas, mejor.
Pues aquí el código:
|
#include <stdio.h>
#define DIVIDENDO 355
#define DIVISOR 113
enum BOOLEAN {false,true};
typedef int Resultado;
void main (void)
{
float a,b;
float x;
double y;
long double z;
enum BOOLEAN cuestion;
Resultado salida_true,salida_false;
cuestion=true;
salida_true=cuestion;
cuestion=false;
salida_false=cuestion;
a=DIVIDENDO;
b=DIVISOR;
x=a/b;
y=a/b;
z=a/b;
printf("Esta es una aproximación de Pi mediante un número racional muy cercano a Pi\nPi=%7.6f\nPi=%13.12f\n",x,y);
printf("Los enum internamente son una numeración de enteros true=%d false=%d\n",salida_true,salida_false);
}
|
Y aquí la ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o sol_6 sol_6.c
sol_6.c: In function 'main':
sol_6.c:9: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./sol_6
Esta es una aproximación de Pi mediante un número racional muy cercano a Pi
Pi=3.141593
Pi=3.141592920354
Los enum internamente son una numeración de enteros true=1 false=0
matados2k@imperio:~/curso programacion$
|
Introducción.
Una de las características del lenguaje C es la cantidad y variedad de operadores que posee. Ambos se mezclan para formar expresiones. Cuando se usa más de un operador dentro de una expresión, el compilador aplicará las reglas de prioridad, pero esta prioridad puede cambiarse con el uso de paréntesis, como en las matemáticas de toda la vida.
C nos ofrece una gran variedad de operadores distintos que podemos agrupar de la siguiente forma:
-
Operadores aritméticos
-
Operadores relacionales
-
Operadores lógicos
-
Operadores de bits
-
Operadores de asignación
-
Operadores especiales
Operadores aritméticos.
Veamos la lista de este grupo:
|
Operador
|
Tipo
|
Función
|
|
+
|
Unario
|
Signo positivo
|
|
+
|
Binario
|
Suma
|
|
-
|
Unario
|
Signo negativo
|
|
-
|
Binario
|
Resta
|
|
*
|
Binario
|
Multiplicación
|
|
/
|
Binario
|
División
|
|
%
|
Binario
|
Módulo o resto
|
De estos hay que destacar que '%' sólo admite operadores enteros. Los operandos en el caso de los operadores binarios (un operador binario es aquel que necesita 2 operandos) deben ser del mismo tipo o se aplicarán unas reglas de conversión de tipos que se explicarán más adelante.
Las reglas de prioridad de los operadores aritméticos de mayor a menor son:
+ (unario), -(unario) Los de mayor prioridad
* / %
+ - Los de menor prioridad
Los operadores situados en el mismo nivel de precedencia son evaluados por el compilador de izquierda a derecha.
Veamos un ejemplo:
|
#include <stdio.h>
void main (void)
{
int x1,x2,x3,x4,x5,x6;
x1=2+3*4;
x2=(2+3)*4;
x3=10/2%3;
x4=-x1;
x5=(x1+x2)/x3;
x6=(x3*x3+x3/3);
printf ("x1=2+3*4=%d, x2=(2+3)*4=%d, x3=10/2%3=%d, x4=-x1=%d,\n x5=(x1+x2)/x3=%d, x6=(x3*x3+x3/3)=%d\n",x1,x2,x3,x4,x5,x6);
}
|
Y su ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_6_1 ejemplo_6_1.c
ejemplo_6_1.c: In function 'main':
ejemplo_6_1.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_6_1
x1=2+3*4=14, x2=(2+3)*4=20, x3=10/2%3=2, x4=-x1=-14,
x5=(x1+x2)/x3=17, x6=(x3*x3+x3/3)=4
matados2k@imperio:~/curso programacion
|
Operadores relacionales.
Lo de “relacional” se refiere a que se cumple una determinada relación entre dos valores cualesquiera del mimo tipo. Se basan en los valores booleanos verdadero y falso, es decir, si se cumple o no la relación. Como C no tiene tipo booleano, cualquier cosa que sea 0 es falso mientras que cualquier cosa distinta de 0 es verdadero.
Veamos la lista de este grupo:
|
Operador
|
Tipo
|
Función
|
|
>
|
Binario
|
Mayor
|
|
>=
|
Binario
|
Mayor o igual
|
|
<
|
Binario
|
Menor
|
|
<=
|
Binario
|
Menor o igual
|
|
==
|
Binario
|
Igual
|
|
!=
|
Binario
|
Distinto
|
Las reglas de prioridad de los operadores relacionales de mayor a menor son:
> >= < <= Los de mayor prioridad
== != Los de menor prioridad
Veamos un ejemplo:
|
#include <stdio.h>
void main (void)
{
int x1,x2,x3,x4,x5,x6;
x1=2==3;
x2=2==2;
x3=x1>x2;
x4=x1>=x3;
x5=x1<=x3;
x6=x1!=x2;
printf ("Los resultados son: %d,%d,%d,%d,%d,%d\n",x1,x2,x3,x4,x5,x6);
}
|
Y su ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_6_2 ejemplo_6_2.c
ejemplo_6_2.c: In function 'main':
ejemplo_6_2.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_6_2
Los resultados son: 0,1,0,1,1,1
matados2k@imperio:~/curso programacion$
|
Este grupo tiene realmente utilidad en el control de flujo que veremos en la siguiente serie de entregas.
Operadores lógicos.
Veamos la lista de este grupo:
|
Operador
|
Tipo
|
Función
|
|
&&
|
Binario
|
AND
|
|
||
|
Binario
|
OR
|
|
!
|
Unario
|
NOT
|
Los operadores lógicos se evalúan de la siguiente forma:
A&&B Es verdadero sólo si A y B son verdaderos, falso en cualquier otro caso.
A||B Es falso sólo si A y B son falsos, verdadero en cualquier otro caso.
!A Es verdadero si A es falso y falso si A es verdadero.
Por último, hay que destacar que C los evalúa al igual que los operadores relacionales.
Las reglas de prioridad de los operadores lógicos de mayor a menor son:
! Los de mayor prioridad
&& || Los de menor prioridad
Veamos un ejemplo:
|
#include <stdio.h>
void main (void)
{
int x1,x2,x3,x4;
x1=0&&1;
x2=1||0;
x3=!x1;
x4=!x1&&x2;
printf ("Los resultados son: %d,%d,%d,%d\n",x1,x2,x3,x4);
}
|
Y su ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_6_3 ejemplo_6_3.c
ejemplo_6_3.c: In function 'main':
ejemplo_6_3.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_6_3
Los resultados son: 0,1,1,1
matados2k@imperio:~/curso programacion$
|
Al igual que en el grupo anterior, realmente este grupo tiene utilidad en el control de flujo que veremos en la siguiente serie de entregas.
Despedida y cierre.
Bueno, pues la semana que viene continuamos, pasadlo bien y sed malos, que ser bueno es aburrido :P.
Agradecimientos:
· Revisión del documento: Karuchi (Carolina García).
Página oficial y dominio de mi propiedad http://matados2k.es
Matados'2k Usuario y moderador de www.sinuh.org
Matados'2k Moderador de foro.noticias3d.com
matados2k (arroba) gmail (punto) com
|
Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos.
|
Sólo los usuarios registrados pueden escribir comentarios. Por favor valídate o regístrate. Powered by AkoComment 2.0! |