Professional Documents
Culture Documents
Sentencia if:
Forma general: if (condicin) sentencia1; else sentencia2; Si la condicin es verdadera (se cumple), se ejecuta la sentencia1, de lo contrario la sentencia2. (esta estructura suena de la siguiente forma: si la (condicin) se cumple, se ejecuta la sentencia1, sino, se ejecuta la sentenca2.
Tambin se pueden escalonar los if: if (condicin) Sentencia1; else if (condicin) Sentencia2; else Sentencia3;
Y anidar: if (x) if (a<b) printf(a es mayor); else printf(a no es mayor que b); en caso que el else est asociado al if(x) se debera hacer: if (x) { if (a<b) printf(a es mayor); } else printf(x es 0);
La sentencia switch:
La sentencia switch permite evaluar diferentes valores para una misma variable: Su forma general es: switch(variable) { case valor1: sentencias; break; case valor2: sentencias; break; case valor3: sentencias; break; . . . default: sentencias; } El switch evalua cada caso, cuando coincide uno de ellos con el contenido de la variable, ejecuta las sentencias del caso y termina el switch. En caso de no encontrar ningn case que corresponda, en igualdad, con el contenido de la variable, ejecuta las sentencias de la clusula default, si esta ha sido especificada, sino termina el switch.
Ejemplo: La sentencia switch se usa en general para seleccionar menes de opciones, en este segmento de cdigo lo que se explora es justamente el valor de la opcin seleccionada, y segn la misma ser la operacin realizada: switch(opcion) { case 1: res = valor*valor; printf(El cuadrado de %i es %i\n, valor, res); break; case 2: res = valor*valor*valor; printf(El cubo de %i es %i\n, valor, res); break; case 3: res = valor % 2; if (res) prinf(El nmero %i es impar\n, valor); else printf(El nmero %i es par\n, valor); break; default: printf(Opcin erronea); } La variable opcion contiene el valor del men seleccionado por el usuario. En cada case lo que se explora es si la variable ha adquirido ese valor.
Para un bloque de sentencias (recordemos que el bloque queda definido por las llaves. for(inicializacin; condicin; incremento) { sentencias; }
El siguiente ejemplo muestra los primeros 100 nmeros enteros: #include <16f887.h> #fuses INTRC_IO,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP #use delay(clock=4000000) #use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
void main(void) { setup_adc_ports(NO_ANALOGS); //Selecciona terminales while(1)// ciclo for infinito { for(i=1; i<=100; i++) { printf(Contando=%d\r, i);// enva por la USART cada dato delay_ms(300); }
Tambin puede funcionar al revs, (los primeros 100 enteros mostrados de 100 a 1); for(i=100; i>=1; i - -) printf(%d, i); Se pueden evaluar ms de una variable: int i, j; for(i=1, j=100; i<=100, j>0; i++, j - -) printf(i = %d, j= %d\n, i, j); El siguiente bucle no termina nunca, (bucle infinito): for( ; ; ) Debemos recordar que si la cantidad de sentencias, (equivalencias, operaciones aritmticas, llamadas a funciones, etc.), pertenecientes al bucle son ms de una, estas deben ir entre { }.
El bucle while:
El bucle while permite ejecutar una o mas sentencias en tanto se cumpla una condicin. Si la condicin deja de cumplirse, se dejan de ejecutar la o las instrucciones y se sale del bloque while para continuar procesando las instrucciones que se encuentran despus del mismo
while (condicin) sentencia; while (condicin) { sentencia1; sentencia2; sentencia3; sentencia4; . . Senttencia_n; } Ejemplo: char salir; salir = n; while (salir != n) { printf(Estoy dentro del mientras\n); getc(%c, &salir); } printf(\nYa sal); El bucle tambin puede estar vaco. El siguiente ejemplo funcionar hasta que se pulse la letra A: while ((letra = getc()) != A);
El bucle do while:
La diferencia que existe con el while, es que en el bucle do while por lo menos una vez, el programa ejecuta las sentencias del bucle, (hasta llegar a la sentencia while), y luego decide si contina iterando, siempre que se cumpla la condicin examinada por el while.
Ejemplos de los operadores son los siguientes: var << n = se desplaza n bits a la izquierda. var >> n = se desplaza n bits a la derecha. 1 & 1 = 1 1 | 0 = 1, 0 | 1 = 1 y 1 | 1 = 1 1 ^ 0 = 1 y 0 ^ 1 = 1 ~1 = 0 y ~0 = 1 De forma general conviene tener siempre presente estos resultados X & 1 = X , X & 0 = 0 X | 1 = 1 , X | 0 = X X ^ 1 = ~X , X ^ 0 = X
Ejemplo: int numeros[10]; Es un arreglo de 10 elemento enteros, donde el primero es numeros[0] y el ltimo numeros[9]. Guardemos en este array los nmeros dgitos, (0 al 9): for(i=0; i<=9; i++) numeros[i] = i; ATENCIN: El lenguaje C no hace comprobacin de lmites, es decir que se pueden seguir ingresando valores, por encima del tamao asignado al array, con consecuencias peligrosas, ya que puede grabar sobre el propio programa, an peor, daar el sistema operativo. El C no emite mensaje, ni en tiempo de compilacin ni en tiempo de ejecucin, para sealar este error. Queda en manos del programador asignar el tamao necesario a los arrays que utilicen sus programas. Cuando se declara un array, tambin se le puede asignar valores iniciales.
Ejemplos: int numeros[10] = {1,2,3,4,5,6,7,8,9,10}; char cadena[6] = hola; char cadena[5] = {h, o, l, a, \0};
Cadenas (Strings):
En C no existe un tipo de datos especfico para declarar cadenas, en su lugar la idea de cadena surge de un array de caracteres que siempre termina con el carcter nulo, (\0) y cuya posicin debe contemplarse al dimensionar el array. Para guardar una cadena de 10 caracteres: char cadena[11]; Cuando se introduce una constante de cadena, (encerrada entre dobles comillas), no es necesario terminar con el carcter nulo, ya que el C lo crea automticamente. Ejemplo: El segmento del siguiente programa que muestra una cadena introducida desde el teclado usando el Hyperterminal y la USART del Microcontrolador: char cadena[100]; printf(Ingrese cadena, de hasta 100 caracteres\n); gets(cadena); printf(Usted ingres: %s, cadena);
Luego en (4) se muestra el contenido de x. Como en (3) se guard la direccin de x en p, ste, que es un puntero, tienen la cualidad de ver el contenido de esa direccin de forma indirecta por medio del operador *. Esto es lo que se hace en (5), ver el contenido de x, pero desde el puntero, ya que l tiene almacenada la direccin de memoria de x. Por eso se visualiza dos veces el contenido de x. Continuar .......