Jerarquia de Operadores en C
Jerarquia de Operadores en C
Jerarquia de Operadores en C
Grupo de operadores
() [] -> .
Orden de
evaluacin
Comentarios
*/%
+-
<< >>
de izquierda Estos
son
los
operadores
a derecha
desplazamiento bit a bit (q.v.)
de izquierda
a derecha
== !=
de izquierda
a derecha
&
de izquierda
a derecha
de izquierda
de
a derecha
&&
Este
operador
y
el
siguiente
de izquierda producen resultados lgicos, pero no
a derecha
consideran bits individuales sino el
valor global del operando.
||
de izquierda
a derecha
?:
de derecha a
izquierda
= += -= *= /= %= &= de derecha a
^= |= <<= >>=
izquierda
Uso de parntesis.
Cuando el compilador genera el cdigo que se emplea para evaluar una
expresin, hace uso de la informacin textual de que dispone, pero no
"reconoce" la expresin, como puede hacerlo un ser humano. Las unicas reglas
que se aplican son las de prioridad de operadores expuestas en la tabla
anterior. Sin embargo, C nos permite especificar sin ambigedad el orden de
evaluacin deseado; esto se hace empleando parntesis. Los parntesis que
estn anidados con ms profundidad sern los primeros en evaluarse. Vese
un ejemplo.
La idea es bien sencilla: el operador parntesis fuerza la evaluacin de su
contenido, elevando su prioridad con respecto a todos los dems operadores,
salvo el propio operador parntesis en el caso de que se encuentre ms
profundamente anidado. Los parntesis no estropean nada, y aseguran que el
compilador entienda exactamente lo mismo que el programador. Cuando en
una expresin aparecen dos o ms subexpresiones entre parntesis de igual
"="
El operador de asignacin,
Y el operador de comparacin,
"=="
error lgico
Adems, siempre se imprimir en pantalla " a vale 7", que puede no ser
cierto; esto ocurre porque 7 es no nulo y por tanto se toma como un
valor lgico verdadero.
cociente = (a*b)/(c+d);
printf("Empleando parntesis,cociente vale %d\n",cociente);
cociente = 0;
a = 10;
b = 4; c = 5; d = 1;
cociente = a*b/c+d;
printf("Sin emplear parntesis,cociente vale %d\n",cociente);
}
/*
Resultados:
Comentarios
Cada etiqueta case especifica un valor constante. La instruccin switch transfiere el
control a la seccin switch cuya etiqueta case coincide con el valor de la expresin
switch (caseSwitch en el ejemplo). Si ninguna etiqueta case contiene un valor
coincidente, el control se transfiere a la seccin default, si hay alguna. Si no hay
ninguna seccindefault, no se realiza ninguna accin y el control se transfiere fuera de
la instruccin switch. En el ejemplo anterior, las instrucciones en la primera seccin
switch se ejecutan porque case 1 coincide con el valor de caseSwitch.
Una instruccin switch puede incluir cualquier nmero de secciones switch y cada
seccin puede tener una o ms etiquetas case (como se muestra en el ejemplo
siguiente de etiquetas case de una cadena). Sin embargo, las etiquetas case pueden
contener el mismo valor constante.
La ejecucin de la lista de instrucciones en la seccin switch seleccionada comienza
con la primera instruccin y contina a lo largo de la lista de instrucciones,
normalmente hasta que se alcance una instruccin de salto, comobreak, goto
case, return o throw. En este punto, el control se transfiere fuera de la
instruccin switch o a otra etiqueta case.
A diferencia de C++, C# no permite que la ejecucin contine de una seccin switch a
la siguiente. El cdigo siguiente genera un error.
C#
switch (caseSwitch)
{
// The following switch section causes an error.
case 1:
Console.WriteLine("Case 1...");
// Add a break or other jump statement here.
case 2:
Console.WriteLine("... and/or Case 2");
break;
}
C# requiere que el final de las secciones switch, incluida la ltima, sea inalcanzable. Es
decir, a diferencia de otros lenguajes, el cdigo puede no pasar explcitamente a la
siguiente seccin switch. Aunque este requisito se cumple normalmente mediante el
uso de una instruccin break, la siguiente etiqueta case tambin es vlida, porque
asegura que no se pueda llegar al final de la lista de instrucciones.
C#
case 4:
while (true)
Console.WriteLine("Endless looping. . . .");
Ejemplo
En el ejemplo siguiente se muestran los requisitos y las capacidades de una
instruccin switch.
C#
class Program
{
static void Main(string[] args)
{
int switchExpression = 3;
switch (switchExpression)
{
// A switch section can have more than one case label.
case 0:
case 1:
Console.WriteLine("Case 0 or 1");
// Most switch sections contain a jump statement, such as
break;
case "2":
case "medium":
cost += 25;
goto case "1";
case "3":
case "large":
cost += 50;
goto case "1";
default:
Console.WriteLine("Invalid selection. Please select 1, 2,
or 3.");
break;
}
if (cost != 0)
{
Console.WriteLine("Please insert {0} cents.", cost);
}
Console.WriteLine("Thank you for your business.");
}
}
/*
Sample Input: 2
Sample Output:
Coffee sizes: 1=small 2=medium 3=large
Please enter your selection: 2
Please insert 50 cents.
Thank you for your business.
*/
OTRO EJEMPLO.
Instrucciones
break;
case valor2:
Instrucciones
break;
case valor3:
Instrucciones
break;
.
.
.
default:
}
Instrucciones
break;
Luego de la palabra clave switch entre parntesis indicamos una variable, luego
con una serie de case verificamos si dicha variable almacena un valor igual a
[valor1, valor2, valor3 etc.] en el caso de ser igual se ejecutan las instrucciones
contenidas en dicho case.
Si todos los case son falsos, luego se ejecutan las instrucciones contenidas
despus de la plabra default.
Problema 1:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceEstructuraswitch1
{
classProgram
{
staticvoidMain(string[]args)
{
Console.Write("Ingreseunvalorentre
1y5:");
intvalor=
int.Parse(Console.ReadLine());
switch(valor)
{
case1:Console.Write("uno");
break;
case2:Console.Write("dos");
break;
case3:Console.Write("tres");
break;
case4:Console.Write("cuatro");
break;
case5:Console.Write("cinco");
break;
default:
Console.Write("Seingreso
unvalorfueraderango");
break;
}
Console.ReadKey();
}
}
}
Es obligatorio que est entre parntesis la variable luego de la palabra clave
switch.
Luego de cada case debemos indicar el valor con el que se comparar la variable
(siempre debe ser un valor constante y no podemos disponer una variable luego
de la palabra case.
Es necesario la palabra break luego de cada bloque de instrucciones por cada
case.
Problema 2:
Programa:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceEstructuraswitch2
{
classProgram
{
staticvoidMain(string[]args)
{
Console.Write("Ingreseunnmeroen
castellanoentreunoycinco:");
stringnro=Console.ReadLine();
switch(nro)
{
case"uno":Console.Write(1);
break;
case"dos":Console.Write(2);
break;
case"tres":Console.Write(3);
break;
case"cuatro":Console.Write(4);
break;
case"cinco":Console.Write(5);
break;
default:Console.Write("Debe
ingresarunvalorentreunoycinco");
break;
}
Console.ReadKey();
}
}
}
Esto quiere decir que podemos utilizar en el switch variables string para ser
comparadas.