logo sinuh
 

Inicio arrow Conocimiento arrow Curso de programación en C desde cero arrow Entrega 6. Operadores y Expresiones (I).
Entrega 6. Operadores y Expresiones (I). Imprimir
Por Luis García Galván   
viernes, 15 dic 2006 07:28

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.


 

Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor valídate o regístrate.

Powered by AkoComment 2.0!




© 2002-2005 SINUH - Comunidad GNU/Linux de Extremadura
Este portal utiliza Mambo
DHTML / JavaScript Tree by TwinHelix Designs

Para contactar con nosotros envía un correo a
info
Licencia Creative Commons
Los contenidos de este portal, salvo indicación en contra, están sujetos a una licencia de Creative Commons.

Los logotipos y marcas que aparecen son propiedad de sus respectivos dueños.

Las opiniones y declaraciones de las personas reflejadas en los foros y comentarios son propiedad y responsabilidad de sus autores, no identificando la opinión de SINUH y excluyendo de cualquier responsabilidad a esta asociación.
Ahora 10 visitantes
Advertisement