Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ProgramacionBasica en C
ProgramacionBasica en C
es
(3)
(3.7) variables_________________________________________________________________________ 20 (3.7.1) introduccin 20 (3.7.2) declaracin de variables 20 (3.7.3) tipos de datos 20 (3.7.4) asignacin de valores 23 (3.7.5) literales 23 (3.7.6) mbito de las variables 24 (3.7.7) conversin de tipos 26 (3.7.8) modificadores de acceso 27 (3.8) entrada y salida por consola ______________________________________________________ 28 (3.8.2) funcin scanf 31
(5)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
(3.9) operadores_______________________________________________________________________ (3.9.1) operadores aritmticos (3.9.2) operadores relacionales (3.9.3) operadores lgicos (3.9.4) operadores de bits (3.9.5) operador de asignacin (3.9.6) operador ? (3.9.7) operadores de puntero & y * (3.9.8) operador sizeof (3.9.9) operador coma (3.9.10) operadores especiales (3.9.11) orden de los operadores (3.10) expresiones y conversin de tipos _________________________________________________ (3.10.1) introduccin (3.10.2) conversin (3.10.3) operador de molde o cast
31 31 32 33 33 33 34 34 35 35 35 35 37 37 37 38
(3.2.2) C y C++
Debido al crecimiento durante los aos 80 de la programacin orientada a objetos, en 1986 Bjarne Stroupstrup creo un lenguaje inspirado en Simula pero utilizando la sintaxis del lenguaje C. (6)
C y C++ pues, comparten instrucciones casi idnticas. Pero la forma de programar es absolutamente diferente. Saber programar en C no implica saber programar en C++
Es un lenguaje compilado. El cdigo que se obtiene en C es muy rpido (gracias a ser compilado y a
no alejarse demasiado de los lenguajes de bajo nivel).
(7)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
Ya se ha explicado en unidades anteriores que la conversin del cdigo escrito en un lenguaje de programacin (cdigo fuente) puede ser traducido a cdigo mquina mediante un compilador o mediante un intrprete. En el caso del lenguaje C se utiliza siempre un compilador (es un lenguaje compilado). El proceso completo de conversin del cdigo fuente en cdigo ejecutable sigue los siguientes pasos (ver Ilustracin 1): (1) Edicin. El cdigo se escribe en un editor de texto o en un editor de cdigo preparado para esta accin. El archivo se suele guardar con extensin .c Preprocesado. Antes de compilar el cdigo, el preprocesador lee las instrucciones de preprocesador y las convierte al cdigo fuente equivalente. Compilacin. El cdigo fuente resultante en lenguaje C se compila mediante el software apropiado, obteniendo el cdigo en ensamblador equivalente. Ensamblado. El cdigo anterior se ensambla (utilizando software ensamblador, ya que el cdigo que este paso requiere es cdigo en ensamblador) para obtener cdigo mquina. ste cdigo an no es ejecutable pues necesita incluir el cdigo de las libreras utilizadas. ste es el cdigo objeto (con extensin obj) Enlazado. El cdigo objeto se une al cdigo mquina de las libreras y mdulos invocados por el cdigo anterior. El resultado es un archivo ejecutable (extensin .exe en Windows)
(2)
(3)
(4)
(5)
El cdigo enlazado es el que se prueba para comprobar si el programa funciona. La mayora de entornos de programacin tienen un cargador o lanzador que permite probar el programa sin abandonar el entorno. Desde el punto de vista del usuario de estos entornos, slo hay dos pasos: compilar (conseguir el cdigo (8)
(3.4) fundamentos de C
(3.4.1) estructura de un programa C
Un programa en C consta de una o ms funciones, las cuales estn compuestas de diversas sentencias o instrucciones. Una sentencia indica una accin a realizar por parte del programa. Una funcin no es ms que (por ahora) un nombre con el que englobamos a las sentencias que posee a fin de poder invocarlas mediante dicho nombre. La idea es: nombreDeFuncin(parmetros) { sentencias } Los smbolos { y } indican el inicio y el final de la funcin. Esos smbolos permiten delimitar bloques en el cdigo. El nombre de la funcin puede ser invocado desde otras sentencias simplemente poniendo como sentencia el nombre de la funcin. Como a veces las funciones se almacenan en archivos externos, necesitamos incluir esos archivos en nuestro cdigo mediante una sentencia especial include, que en realidad es una directiva de preprocesador. Una directiva de preprocesador es una instruccin para el compilador con el que trabajamos. El uso es: #include <cabeceraDeArchivoExterno> La directiva include permite indicar un archivo de cabecera en el que estar incluida la funcin que utilizamos. En el lenguaje C estndar los archivos de cabecera tienen extensin h. Los archivos de cabecera son los que permiten utilizar funciones externas (o libreras) en nuestro programa. Una de las libreras ms utilizadas en los programas, es la que permite leer y escribir en la consola del Sistema Operativo. En el caso de C esta librera est disponible al incluir la cabecera stdio.h
(9)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
el primer programa en C En todos los lenguajes de programacin, el primer programa a realizar es el famoso Hola mundo, un programa que escribe este texto en pantalla. En C++ el cdigo de este programa es: #include <stdio.h> int main() { printf("Hola mundo"); return 0; } En el programa anterior ocurre lo siguiente: (1) (2) (3) (4) La lnea include permite utilizar funciones de la librera stdio.h que es la que permite leer y escribir datos por la consola del Sistema Operativo La funcin main es la funcin cuyas instrucciones se ejecutan en cuanto el programa inicia su proceso. La instruccin printf( "Hola mundo") es la encargada de escribir el texto "Hola mundo" por pantalla La instruccin return 0 finaliza el programa e indica (con el valor cero) que la finalizacin ha sido correcta.
(10)
Descargar e instalar MingW desde la pgina www.mingw.org Aadir la carpeta de ejecutables de MingW al path de Windows
(normalmente los archivos ejecutables c:\Mingw\bin) lo cual se hace as: se instalan en la ruta
Pulsar el botn derecho sobre Mi PC y elegir Propiedades Ir al apartado Opciones avanzadas Hacer clic sobre el botn Variables de entorno Aadir a la lista de la variable Path la ruta a la carpeta de ejecutables de MingW
Escribir:
gcc nombreArchivo.c o nombreArchivoEjecutable La sintaxis de MingW es la misma que la de Windows.
(11)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
Compilador. El software que convierte el lenguaje en cdigo mquina. Lanzador. Prueba la ejecucin de la aplicacin Depurador. Programa que se utiliza para realizar pruebas sobre el
programa.
(12)
Para Windows:
Devcpp. Quiz el entorno de programacin ligero ms popular de la actualidad. Con licencia GNU. Utiliza el compilador MingW lo que permite programar fcilmente en C estndar (es en el que se han programado todos los ejemplos de los apuntes y el que se usa como ejemplo). WxDevCpp. Software basado en el anterior utilizando WxWidgets Code::blocks. Con la misma filosofa del anterior, una opcin similar que gana adeptos gana da. Est programa en C y C++ (devcpp est programado en Delphi) lo que le permite ejecutarse para cualquier plataforma. Visual Studio (.NET). Se trata del entorno de programacin desarrollado por Microsoft para su plataforma .NET, aunque permite crear cualquier tipo de aplicacin C/C++ (aunque el lenguaje no es 100% estndar). Hay versiones Express que no incorporan las funcionales de la versin profesional (que evidentemente es de pago) pero que es gratuita. Dicha versin funciona durante 30 das y luego pide registrarse al usuario para poder seguir utilizndola. Borland C++ Builder. Otro de los grandes entornos profesionales de programacin. Con el anterior quiz los mejores (aunque ste es ms respetuoso con el estndar).
(13)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
Un truco es hacer esta versin del Hola mundo: #include <stdio.h> #include <stdlib.h> int main(void){ printf("Hola mundo\n"); system("pause"); return 0; }
La librera <stdlib.h> es necesaria para utilizar la instruccin system(pause) que permite hacer una pausa al final. opciones del entorno Dev Cpp Una de las primeras labores con nuestro editor es personalizar el funcionamiento. Algunas opciones interesantes son:
Opciones principales de edicin. Se encuentran en HerramientasOpciones del editor-Principal. Algunas opciones elegibles en esa pantalla son: Tamao del tabulador. Espacio que dejamos cada vez que pulsamos la tecla tabulador (14)
Resaltar llaves y parntesis concordantes. Para facilitar no olvidar cerrar llaves ni parntesis Sintaxis resaltada en los archivos. Permite ver el cdigo con diferentes colores segn el tipo de palabra que tengamos Tabuladores inteligentes. Permite que el programa deje espacios detectando si es lo apropiado para el cdigo (puede no funcionar muy bien a veces)
(15)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
(16)
Cdigo por defecto. Se trata de un apartado del cuadro que nos permite escribir el cdigo que deseemos para que sea el que utiliza el programa para colocarle al hacer un nuevo cdigo fuente. Es decir, cuando creemos un nuevo programa aparecer ese cdigo (deberemos asegurar que no tenga errores y colocar todo aquello que sea comn a cualquier programa.
(17)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
(3.6.2) comentarios
Se trata de texto que es ignorado por el compilador al traducir el cdigo. Esas lneas se utilizan para documentar el programa. Esta labor de documentacin es fundamental. De otro modo el cdigo se convierte en ilegible incluso para el programador que lo dise. Tan importante como saber escribir sentencias es utilizar los comentarios. Todava es ms importante cuando el cdigo va a ser tratado por otras personas, de otro modo una persona que modifique el cdigo de otra lo tendra muy complicado. En C los comentarios se delimitan entre los smbolos /* y */ /* Esto es un comentario el compilador har caso omiso de este texto*/ Como se observa en el ejemplo, el comentario puede ocupar ms de una lnea.
A estas palabras a veces los compiladores aaden una lista propia. Como C distingue entre maysculas y minsculas, el texto GoTo no es una palabra reservada.
(3.6.4) identificadores
Son los nombres que damos a las variables y a las funciones de C. Lgicamente no pueden coincidir con las palabras reservadas. Adems puesto que C distingue entre las maysculas y las minsculas, hay que tener cuidado de usar siempre las minsculas y maysculas de la misma forma (es decir, nombre, Nombre y NOMBRE son tres identificadores distintos). El lmite de tamao de un identificador es de 32 caracteres (aunque algunos compiladores permiten ms tamao). Adems hay que tener en cuenta que los identificadores deben de cumplir estas reglas:
Deben comenzar por una letra o por el signo de subrayado (aunque comenzar
por subrayado se suele reservar para identificadores de funciones especiales del sistema).
(19)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
(3.7) variables
(3.7.1) introduccin
Las variables sirven para identificar un determinado valor que se utiliza en el programa. En C es importante el hecho de tener en cuenta que una variable se almacena en la memoria interna del ordenador (normalmente en la memoria RAM) y por lo tanto ocupar una determinada posicin en esa memoria. Es decir, en realidad identifican una serie de bytes en memoria en los que se almacenar un valor que necesita el programa. Es decir si saldo es un identificador que se refiere a una variable numrica que en este instante vale 8; la realidad interna es que saldo realmente es una direccin a una posicin de la memoria en la que ahora se encuentra el nmero 8.
(20)
rango de valores posibles -32768 a 32767 (algunos compiladores consideran este otro rango: -2.147.483.648 a 2.147.483.647 3.4E-38 a 3.3E+38 1.7E-308 a 1.7E+308 sin valor
4 8 0
Hay que tener en cuenta que esos rangos son los clsicos, pero en la prctica los rangos (sobre todo el de los enteros) depende del computador, procesador o compilador empleado. tipos enteros Los tipos char e int sirven para almacenar enteros y tambin valen para almacenar caracteres. Normalmente los nmeros se almacenan en el tipo int y los caracteres en el tipo char; pero la realidad es que cualquier carcter puede ser representado como nmero (ese nmero indica el cdigo en la tabla ASCII). As el carcter A y el nmero 65 significan exactamente lo mismo en lenguaje C. tipos decimales En C los nmeros decimales se representan con los tipos float y double. La diferencia no solo est en que en el double quepan nmeros ms altos, sino en la precisin. Ambos tipos son de coma flotante. En este estilo de almacenar nmeros decimales, la precisin es limitada. Cuntos ms bits se destinen a la precisin, ms preciso ser el nmero. Por eso es ms conveniente usar el tipo double aunque ocupe ms memoria. tipos lgicos En C estndar el uso de valores lgicos se hace mediante los tipos enteros. Cualquier valor distinto de cero (normalmente se usa el uno) significa verdadero y el valor cero significa falso. Es decir en el cdigo: int x=1; Se puede entender que x vale 1 o que x es verdadera. Ejemplo: int x=(18>6); printf("%d",x); /*Escribe 1, es decir verdadero */
(21)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
En C++ se aadi el tipo bool (booleano o lgico) para representar valores lgicos, las variables bool pueden asociarse a los nmeros cero y uno, o mejor a las palabras true (verdadero) y false (falso). Ejemplo: bool b=true; //Eso es el equivalente C++ del C int b=1; En C para conseguir el mismo efecto se utilizan trucos mediante la directiva #define (cuyo uso se explica ms adelante) modificadores de tipos A los tipos anteriores se les puede aadir una serie de modificadores para que esos tipos varen su funcionamiento. Esos modificadores se colocan por delante del tipo en cuestin. Son:
unsigned. Contrario al anterior, hace que el tipo al que se refiere use el rango
de negativos para incrementar los positivos. Por ejemplo el unsigned int tomara el rango 0 a 65535 en lugar de -32768 a 32767
long. Aumenta el rango del tipo al que se refiere. short. El contrario del anterior. La realidad es que no se utiliza.
Las combinaciones que ms se suelen utilizar son:
tipo de datos signed char unsigned int long int (o long a secas) long long rango de valores posibles -128 a 127 0 a 65335 -2147483648 a 2147483647 -9.223.372.036.854.775.809 a 9.223.372.036.854.775.808 (casi ningn compilador lo utiliza, casi todos usan el mismo que el long) 3.37E-4932 a 3,37E+4932 tamao en bytes 1 2 4 8
long double
10
Una vez ms hay que recordar que los rangos y tamaos depende del procesador y compilador. Por ejemplo, el tipo long double no suele incorporarlo casi ningn compilador (aunque s la mayora de los modernos). An as conviene utilizar esas combinaciones por un tema de mayor claridad en el cdigo.
(22)
(3.7.5) literales
Cuando una variable se asigna a valores literales (17, 2.3,etc.) hay que tener en cuenta lo siguiente:
Los nmeros se escriben tal cual (17, 34, 39) El separador de decimales es el punto (18.4 se interpreta como 18 coma 4) Si un nmero entero se escribe anteponiendo un cero, se entiende que est
en notacin octal. Si el nmero es 010, C entiende que es el 8 decimal (23)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
Los caracteres simples van encerrados entre comillas simples, a Los textos (strings) van encerrados entre comillas dobles Hola Los enteros se pueden almacenar como caracteres A o como enteros cortos.
Es ms A es lo mismo que 65. Eso vale tanto para los tipos char como para los int. secuencias de escape En el caso de los caracteres, hay que tener en cuenta que hay una serie de caracteres que son especiales. Por ejemplo como almacenamos en una variable char el smbolo de la comilla simple, si la propia comilla simple sirve para delimitar, es decir: char a=;/*Error*/ Eso no se puede hacer ya que el compilador entiende que hay una mala delimitacin de caracteres. Para resolver este problema y otros se usan los caracteres de escape, que representan caracteres especiales. Todos comienzan con el signo \ (backslash) seguido de una letra minscula, son:
cdigo \a \b \n \r \t \ \ \\ significado Alarma (beep del ordenador) Retroceso Nueva lnea Retorno de carro Tabulador Comilla simple Comilla doble Barra inclinada invertida o backslash
(3) (4)
Se la utiliza en diversas sentencias (no se puede utilizar su contenido sin haberla asignado ese primer valor. Cuando finaliza el bloque en el que fue declarada, la variable muere. Es decir, se libera el espacio que ocupa esa variable en memoria. No se la podr volver a utilizar.
variables locales Son variables que se crean dentro de un bloque (se entiende por bloque, el cdigo que est entre { y }). Con el fin del bloque la variable es eliminada. La mayora son locales a una determinada funcin, es decir slo se pueden utilizar dentro de esa funcin. Ejemplo: void func1(){ int x; x=5; } void func2(){ int x; x=300; } Aunque en ambas funciones se usa x como nombre de una variable local. En realidad son dos variables distintas, pero con el mismo nombre. Y no podramos usar x dentro de la funcin func2 porque estamos fuera de su mbito. Otro ejemplo: void func(){ int a; a=13; { int b; b=8; }/*Aqu muere b*/ a=b; /*Error! b est muerta*/ }/*Aqu muere a*/ En la lnea a=b ocurre un error de tipo Variable no declarada, el compilador ya no reconoce a la variable b porque estamos fuera de su mbito.
(25)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
variables globales Son variables que se pueden utilizar en cualquier parte del cdigo. Para que una variable sea global basta con declararla fuera de cualquier bloque. Normalmente se declaran antes de que aparezca la primera funcin: #include <stdio.h> int a=3; //La variable a es global int main(){ printf("%d",a); return 0; } En C no se permite declarar en el mismo bloque dos variables con el mismo nombre. Pero s es posible tener dos variables con el mismo nombre si estn en bloques distintos. Esto plantea un problema, ya que cuando se utiliza la variable surge una duda: qu variable utilizar el programa, la ms local o la ms global? La respuesta es que siempre se toma la variable declarada ms localmente. Ejemplo: #include <stdio.h> int a=3; int main(){ int a=5; { int a=8; printf("%d",a); //escribe 8. No hay error } return 0; } En el cdigo anterior se han declarado tres variables con el mismo nombre (a). Cuando se utiliza la instruccin printf para escribir el valor de a, la primera vez escribe 8, la segunda vez escribe 5 (ya que ese printf est fuera del bloque ms interior). Es imposible acceder a las variables globales si disponemos de variables locales con el mismo nombre. Por eso no es buena prctica repetir el nombre de las variables.
valor es el mismo, es la interpretacin del valor lo que cambia). Pero eso tambin significa que puede haber problemas indetectables, por ejemplo este programa: #include <stdio.h> int main(){ char a; int b=300; a=b; printf("%d %d",a,b); } /* Escribe el contenido de a y de b. Escribe 44 y 300 */ En ese programa el contenido de a debera ser 300, pero como 300 sobrepasa el rango de las variables char, el resultado es 44. Es decir, no tiene sentido, esa salida est provocada por el hecho de perder ciertos bits en esa asignacin. En la conversin de double a float lo que ocurre normalmente es un redondeo de los valores para ajustarles a la precisin de los float.
El segundo archivo utiliza las variables declaradas en el primero modificador auto En realidad las variables toman por defecto este valor (luego no hace falta utilizarle). Significa que las variables se eliminan al final del bloque en el que fueron creadas.
(27)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
modificador static Se trata de variables que no se eliminan cuando el bloque en el que fueron creadas finaliza. As que si ese bloque (normalmente una funcin), vuelve a invocarse desde el cdigo, la variable mantendr el ltimo valor anterior. Si se utiliza este modificador con variables globales, indica que esas variables slo pueden utilizarse desde el archivo en el que fueron creadas. modificador register Todos los ordenadores posee una serie de memorias de pequeo tamao en el propio procesador llamadas registros. Estas memorias son mucho ms rpidas pero con capacidad para almacenar muy pocos datos. Este modificador solicita que una variable sea almacenada en esos registros para acelerar el acceso a la misma. Se utiliza en variables char o int a las que se va a acceder muy frecuentemente en el programa (por ejemplo las variables contadoras en los bucles). Slo vale para variables locales. register int cont; for (cont=1;cont<=300000;cont++){ ... modificador const Las variables declaradas con la palabra const delante del tipo de datos, indican que son slo de lectura. Es decir, constantes. Las constantes no pueden cambiar de valor, el valor que se asigne en la declaracin ser el que permanezca (es obligatorio asignar un valor en la declaracin). Ejemplo: const float pi=3.141592; modificador volatile Se usa para variables que son modificadas externamente al programa (por ejemplo una variable que almacene el reloj del sistema).
Lgicamente a veces se necesitan sacar el contenido de las variables en la salida. Para ello dentro del texto que se desea mostrar se utilizan unas indicaciones de formato, las cuales se indican con el signo% seguido de una letra minscula. Por ejemplo: int edad=18; ... printf(Tengo %d aos,edad); /*escribe tengo 18 aos*/ El cdigo %d sirve para recoger el valor de la variable que se indique entendiendo que esa variable tiene valores enteros. Esa variable va separada del texto por una coma. Si se usan ms variables o valores, stos se separan con comas entre s. Ejemplo: int edad=18, edadFutura=19; printf(Tengo %d aos, el ao que viene %d,edad,edadFutura); /*Escribe: Tengo 18 aos, el ao que viene 19 */ Adems del cdigo %d, hay otros que se pueden utilizar:
cdigo %d %i %c %f %e %g %o %x %s %u %li o %ld %p %% significado Entero Entero Un carcter Punto flotante (para double o float) Escribe en notacin cientfica Usa %e o %f, el ms corto de los dos Escribe nmeros enteros en notacin octal Escribe nmeros enteros en notacin hexadecimal Cadena de caracteres Enteros sin signo Enteros largos (long) Escribe un puntero Escribe el signo %
(29)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
Ejemplo: char c=H; int n=28; printf(Me gusta la letra %c y el nmero %d, %s,c,n,adis); /* Escribe: Me gusta la letra H y el nmero 28, adis */ Mediante printf, tambin se pueden especificar anchuras para el texto. Es una de sus caractersticas ms potentes. Para ello se coloca un nmero entre el signo % y el cdigo numrico (i, d, f,...). Ese nmero indica anchura mnima. Por ejemplo: int a=127, b=8, c=76; printf(%4d\n,a); printf(%4d\n,b); printf(%4d\n,c); /* Sale: 127 8 76 */ En el ejemplo se usan 4 caracteres para mostrar los nmeros. Los nmeros quedan alineados a la derecha en ese espacio, si se desean alinear a la izquierda, entonces el nmero se pone en negativo (%-4d). Si se coloca el nmero delante del nmero, el espacio sobrante se rellena con ceros en lugar de con espacios. Ejemplo: int a=127, b=8, c=76; printf(%04d\n,a); printf(%04d\n,b); printf(%04d\n,c); /* Sale: 0127 0008 0076 */ Tambin se pueden especificar los decimales requeridos (para los cdigos decimales, como f por ejemplo). De esta forma el cdigo %10.4f indica que se utiliza un tamao mnimo de 10 caracteres de los que 4 se dejan para los decimales. (30)
(3.9) operadores
Se trata de uno de los puntos fuertes de este lenguaje que permite especificar expresiones muy complejas gracias a estos operadores.
La suma, resta, multiplicacin y divisin son las operaciones normales. Slo hay que tener cuidado en que el resultado de aplicar estas operaciones puede ser un (31)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
nmero que tenga un tipo diferente de la variable en la que se pretende almacenar el resultado. El signo - tambin sirve para cambiar de signo (-a es el resultado de multiplicar a la variable a por -1). El incremento (++), sirve para aadir uno a la variable a la que se aplica. Es decir x++ es lo mismo que x=x+1. El decremento funciona igual pero restando uno. Se puede utilizar por delante (preincremento) o por detrs (postincremento) de la variable a la que se aplica (x++ ++x). Esto ltimo tiene connotaciones. Por ejemplo: int x1=9,x2=9; int y1,y2; y1=x1++; y2=++x2; printf(%i\n,x1); printf(%i\n,x2); printf(%i\n,y1); printf(%i\n,y2);
La razn de que y1 valga 9, est en que la expresin y1=x1++, funciona de esta forma: y1=x1; x1=x1+1; Mientras que en y2=++x2, el funcionamiento es: x2=x2+1; y2=x2; Es decir en x2++ primero se asigno y luego se incremento. Si el incremento va antes se realiza al contrario.
(32)
Por ejemplo: (18>6) && (20<30) devuelve verdadero (1) ya que la primera expresin (18>6) es verdadera y la segunda (20<30) tambin. El operador Y (&&) devuelve verdadero cuando las dos expresiones son verdaderas. El operador O (||) devuelve verdadero cuando cualquiera de las dos es verdadera. Finalmente el operador NO (!) invierte la lgica de la expresin que le sigue; si la expresin siguiente es verdadera devuelve falso y viceversa. Por ejemplo !(18>15) devuelve falso (0).
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
Adems tambin se permiten abreviar las expresiones de bit: &=, |=, ^=, >>=, <<=
(3.9.6) operador ?
Permite escribir expresiones condicionales. Su uso es el siguiente: Expresin_a_valorar?Si_verdadera:Si_falsa Ejemplo: x=(y>5?A:B); Significa que si la variable y es mayor de 5, entonces a x se le asigna el carcter A, sino se le asignar el carcter B. Otro ejemplo: printf(%s,nota>=5?Aprobado:Suspenso); En cualquier caso hay que utilizar este operador con cautela. Su dominio exige mucha prctica.
(34)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
tiene preferencia sobre la suma. Es decir hay operadores con mayor y menor preferencia. Lgicamente el orden de ejecucin de los operadores se puede modificar con parntesis. Por ejemplo: x=(6+9/3; y=(x*3)/((z*2)/8); Como se observa en el ejemplo los parntesis se pueden anidar. Sin parntesis el orden de precedencia de los operadores en orden de mayor a menor precedencia, forma 16 niveles. Los operadores que estn en el mismo nivel significa que tienen la misma precedencia. En ese caso se ejecutan primero los operadores que estn ms a la izquierda. El orden es (de mayor a menor precedencia): (1) (2) ( ) [ ] . -> Lo forman los siguientes:
NOT de expresiones lgicas: ! NOT de bits: ~ Operadores de punteros: * & Cambio de signo: sizeof (cast) Decremento e incremento: ++ -(3) (4) (5) (6) (7) (8) (9) (10) (11) Aritmticos prioritarios: / * % Aritmticos no prioritarios (suma y resta): + Desplazamientos: >> << Relacionales sin igualdad: > < >= <= Relacionales de igualdad: == != & ^ | && (36)
(3.10.2) conversin
Cuando una expresin utiliza valores de diferentes tipos, C convierte la expresin al mismo tipo. La cuestin es qu criterio sigue para esa conversin. El criterio, en general, es que C toma siempre el tipo con rango ms grande. En ese sentido si hay un dato long double, toda la expresin se convierte a long double, ya que ese es el tipo ms grande. Si no aparece un long double entonces el tipo ms grande en el que quepan los datos. El orden de tamaos es: (1) (2) (3) (4) (5) (6) long double double float unsigned long long int
Es decir si se suma un int y un float el resultado ser float. En una expresin como: int x=9.5*2; El valor 9.5 es double mientras que el valor 2 es int por lo que el resultado (19) ser double. Pero como la variable x es entera, el valor deber ser convertido a entero finalmente.
(37)
fundamentos de programacin
(Unidad 3) programacin bsica en lenguaje C
(38)