Documente Academic
Documente Profesional
Documente Cultură
Programacin en Lenguaje C
4.1 Programacin aplicado al hardware usando: for, while, do while, if else.
El Lenguaje de C
Derivado a partir del Lenguaje B (y del BPCL) por Dennis Ritchie en los Laboratorios BELL, 1972. Implantado por primera vez en una computadora PDP-11 de DEC. Usado para desarrollar el UNIX. Independiente del hardware (portable). Existieron muchas variaciones leves del C incompatibles entre si.
Se cre un comit para formar una definicin no ambigua independiente de la mquina. Estndar se cre en 1989, actualizada en 1999.
El Lenguaje de C
Combina elementos de lenguajes de alto nivel (Pascal, Basic) con funcionalidades de lenguaje ensamblador (Assembler). Mejor manejo de recursos de hardware: disco y archivos. Mejor manejo de posiciones de memoria. Portabilidad.
El Lenguaje de C
Un lenguaje estructurado
basada en funciones Bloques independientes invocados desde un bloque principal
Estructura
o
Programa principal
Disk
Disk
El programa es creado en el editor y almacenado en el disco Preprocesa las directivas El compilador crea el cdigo objeto y lo almacena en disco El enlazador vincula el cdigo objeto con las libreras
Preprocessor
Compiler
Disk Disk
Memoria Principal
1. Editar 2. Preprocesar 3. Compilar (Compile) 4. Enlazar (Link) 5. Cargar (Load) 6. Ejecutar (Execute)
Linker
Disk
.. .. ..
Memoria Principal
CPU
.. .. ..
El CPU toma cada una de las instrucciones y las ejecuta, almacenando, de ser necesario, nuevos datos en la memoria
Ejemplos de programas
Ejemplo 1. Escribir un programa en Lenguaje C que enve un mensaje (Hola mundo) a la pantalla del computador. Solucin
Inicio
Hola mundo
Fin
Ejemplos de programas
#include <stdio.h> main() { printf( Hola mundo ); return 0; }
Inicio
Solucin Ejemplo 1
Hola mundo
Fin
Concepto de identificador
Nombre
que permite hacer referencia a un objeto (constantes, variables, funciones) usado en un programa.
Reglas de formacin
Se
componen de letras y dgitos. El primer carcter debe ser una letra. Al menos los 31 caracteres de un nombre interno son significativos. El carcter de subrayado (_) cuenta Para nombres externos, el como una letra. estndar garantiza distinguir Algunas veces maysculas es til para de Se diferencian las 6letras hasta caracteres y sin mejorar la legibilidad de nombres diferenciar maysculas de las minsculas (case sensitive). largos. minsculas. Los identificadores pueden tener No es recomendable empezar los Por ejemplo: nyN son distintas. nombres con l, pues las letras rutinas cualquier longitud. La prctica usual es usar
de bibliotecas suelen hacerlo. minsculas para nombres de variables y todo en maysculas para constantes simblicas.
Reglas de formacin
Para
nombres definidos por el programador tener en cuenta que existen palabras reservadas por el lenguaje. Algunas implementaciones reservan auto double int struct las palabras fortran y asm. break else long switch
case char const continue default do enum extern float for goto if register return short signed sizeof static switch union unsigned void volatile while
Son smbolos que permiten al compilador separar y reconocer las diferentes unidades sintcticas del lenguaje. Los principales delimitadores son:
; , () [] {} es necesario para finalizar sentencias o declaraciones. separa dos elementos consecutivos de una lista. enmarca una lista de parmetros. enmarca la dimensin o el subndice de una tabla. enmarca un bloque de instrucciones o una lista de valores iniciales.
El tipo de un objeto determina el conjunto de valores que puede tener y qu operaciones se pueden realizar sobre l. Hay unos cuantos tipos de datos bsicos en C:
char un solo byte, capaz de contener un caracter del conjunto de caracteres local. int un entero, normalmente del tamao natural de los enteros en la mquina en la que se ejecuta. float punto flotante de precisin normal. double punto flotante de doble precisin.
Conceptos Fundamentales: Cada Tipos compilador puede seleccionar libremente los tamaos de datos
apropiados para su propio hardware, sujeto a la restriccin los Existen, de que shorts eadems, ints son poralgunos lo menos de 16 bits, los calificadores que se y aplican a estos longs son por lo menos de 32 bits el short no es mayor que int,tipos el cual bsicos. a su vez no es mayor que long.
La palabra int puede omitirse de tales declaraciones (lo que tpicamente se hace). signed o unsigned se puede aplicar a char o a cualquier entero. Los nmeros unsigned son siempre positivos o cero.
con cada enumeracin hay un conjunto de constantes nombradas: los enumeradores. Las enumeraciones se comportan como enteros.
Adems de los tipos bsicos, existe una categora conceptualmente infinita de tipos derivados, construidos a partir de los tipos fundamentales en las formas siguientes:
Arreglos de objetos de un tipo dado. Funciones que regresan objetos de un tipo dado. Punteros a objetos de un tipo dado. Estructuras que contienen una secuencia de objetos de varios tipos. Uniones capaces de contener un objeto cualquiera de varios tipos.
declaracin typedef atribuye un tipo a cada nombre entre sus declaradores en la forma usual. Ejemplo:
typedef long Entero64; typedef int Entero32; typedef short Entero16; Entero64 Total; Entero32 Acumulador; Entero16 Cont;
Ejemplos de constantes
1234 es una constante entera de tipo int. 123456789L es una constante entera de tipo long (se usa el sufijo l o L). 123456789 tambin ser considerado como una constante entera de tipo long para el caso de manejar ints de 16 bits (cualquier entero demasiado grande para caber dentro de un int ser tomado como long). 1234U es una constante entera sin signo (se usa el sufijo u o U para unsigned int, ul o UL para unsigned long). 31, 037 y 0x1f son constantes que tienen el mismo valor pero en formatos diferentes. Si al principio de una constante entera se coloca: 0 (cero) significa octal, 0x 0X significa hexadecimal.
Ejemplos de constantes
123.4 y 1e-2 son constantes de punto flotante del tipo double (se usa el punto decimal, un exponente o ambos). 123.4f es una constante de punto flotante del tipo float (se usa el sufijo f o F para float, lf LF para long double).
Ejemplos de constantes
x es una constante de carcter (stas son del tipo entero). El valor de una constante de carcter es el valor numrico del carcter en el conjunto de caracteres de la mquina. x y hola son constantes de cadena. es una cadena vaca. Las constantes de cadena pueden ser concatenadas en tiempo de compilacin. \n y \n son una constante de carcter y de cadena, respectivamente, formada por una secuencia de escape. \0 representa el carcter con valor 0, el carcter nulo. A menudo \0 se prefiere a 0 para resaltar la naturaleza de carcter de algunas expresiones.
Una constante simblica es un identificador cuyo valor nunca cambia durante la ejecucin del programa. El formato de declaracin es: #define identificador expresion_constante
Una expresin constante es una expresin que slo involucra constantes. Tales expresiones pueden ser evaluadas durante la compilacin en vez de que se haga en tiempo de ejecucin y por tanto pueden ser utilizadas en cualquier lugar en que pueda encontrarse una constante.
Ejemplos:
#define #define #define #define PI 3.14159 MAXIMO 999 ULTIMALETRA 'Z' MENSAJE Introduzca su edad:
Las variables, junto con las constantes, son los objetos bsicos que se manipulan en un programa. Toda variable debe ser declarada antes de ser usada:
Requiere de un tipo, el cual determina el conjunto de valores que puede tener y que operaciones se podrn realizar sobre l. Requiere de un identificador (cuyas reglas de formacin ya fueron presentadas). Opcionalmente puede ser inicializada.
Ejemplos char c; int i, j; double radio, longitud; Toda variable se encuentra asociada a una posicin en la memoria del computador.
Un operador es un carcter o grupo de caracteres que acta sobre una, dos o ms variables para realizar una determinada operacin con un determinado resultado.
Operador de Asignacin Operadores Aritmticos Operadores Incrementales Operadores Relacionales Operadores Lgicos Otros Operadores
Sirve para dar un valor a una variable. Este valor puede ser un nmero (constante) u otra variable:
a = 6; /* Se asigna el valor de 6 directamente */ a = b; /* Le damos el valor de otra variable */
Es vlida la expresin:
a = b = c = 10; /*Damos a cada
variable el valor
10*/
Enunciados de la forma
Ejemplos:
d -= 4; e *= 5; f /= 3;
Algunos operadores aritmticos actan antes que otros (por ejemplo, la multiplicacin antes que la suma)
()
Parntesis
*, /, %
Multiplicacin, Se evalan en segundo lugar. Divisin, Si existen varios se calculan de Mdulo izquierda a derecha.
Suma, Resta Se calculan al ltimo. Si existen varios se calculan de izquierda a derecha.
+, -
El resultado de una expresin depende del orden en que se ejecutan las operaciones. El siguiente ejemplo ilustra claramente la importancia del orden. Considrese la expresin: 3 + 4 * 2. Si se realiza primero la suma (3+4) y luego el producto (7*2), el resultado es 14. Si se realiza primero el producto (4*2) y luego la suma (3+8), el resultado es 11.
Existe dos tipos de reglas para determinar el orden de evaluacin: las reglas de precedencia y de asociatividad. Los distintos operadores de C se ordenan segn su distinta precedencia o prioridad. Para operadores de la misma precedencia o prioridad, en algunos el orden de ejecucin es de izquierda a derecha, y en otros de derecha a izquierda. A este orden se le llama asociatividad.
&& || ?: = += -=
, (operador coma)
En la Tabla anterior se indica que el operador * tiene precedencia sobre el operador +. Esto quiere decir que, en ausencia de parntesis, el resultado de la expresin 3+4*2 es 11 y no 14. Los operadores + y - tienen igual precedencia pero asociatividad de izquierda a derecha. Eso quiere decir que en la expresin a-b+d*5.0+u/2.0 el orden de evaluacin es el indicado por los parntesis:
(((a-b)+(d*5.0))+(u/2.0))
Incremento (++)
Decremento (--)
Puede ser usado en vez de c = c + 1 Puede ser usado en vez de c = c - 1 Incrementa (decrementa) la variable antes de que su valor se utilice Es usado antes de la variable ++c --c Incrementa (decrementa) la variable despus de que su valor ha sido utilizado Es usado despus de la variable c++ c--
Preincremento y Predecremento
Postincremento y Postincremento
Imprime 6 printf( %d, dato++ ); Imprime 5 En cualquier caso, dato ahora toma el valor de 6
Cuando la variable no est presente en una expresin, preincremento y postincremento tienen el mismo efecto:
++dato; printf(%d,dato); dato++; printf(%d,dato);
Cuando se evala una condicin el resultado que se obtiene es 0 si no cumple (falso), y un nmero distinto de 0 si se cumple (verdadero). Normalmente cuando se cumplen devuelven un 1.
Se puede imprimir aprueba o desaprueba dada una nota en un examen; nota >= 11 Si una condicin es verdadera, entonces el cuerpo del enunciado if es ejecutado El control contina despus de la estructura if
A veces se requiere comprobar si varias condiciones se cumplen de determinada manera. && (Y lgico - AND)
Retorna verdadero si ambas condiciones son verdaderas Ejemplo: n > 5 && n < 8 Retorna verdadero si cualquiera de las condiciones es verdadera Ejemplo: D == 3 || D >= 5
|| (O lgico - OR)
Verdadero
Verdadero
Falso
Verdadero
Falso
Verdadero
Resultado Falso
Verdadero Verdadero Verdadero
Error Peligroso:
No causa necesariamente errores de sintaxis Cualquier expresin que produce un valor puede ser usado en estructuras de control Valores distintos de cero verdaderos, valores cero son falsos
46
Ejemplo usando ==
if(payCode == 4) printf(ganas un bonus!\n);
Si
Si reemplazamos == por =
Se
asigna 4 a paycode 4 es distinto de cero, la expresin es verdadera, y se gana un bonus sin importar el valor previo de paycode
Diagramas de Flujo
Representacin Grfica de un algoritmo Smbolo de rectngulo :
valo :
Estructuras Lgicas
Notacin grfica
Condicin
Secuencia
Notacin grfica
Repeticin
Estructura de Seleccin if
La estructura de seleccin if es utilizada para realizar una de dos acciones distintas en base a una condicin.
Estructuras selectivas en C: if
Estructuras selectivas en C: if
Estructura de Seleccin if
La condicin la nota del alumno es mayor o igual a 11 tiene dos posibilidades: es verdadera o es falsa. Si la condicin es verdadera
Se ejecuta la accin de imprimir y el programa contina al siguiente enunciado El enunciado de impresin es ignorado y el programa contina al siguiente enunciado
Si la condicin es falsa:
Estructura de Seleccin if
Si lo traducimos al lenguaje C:
if ( nota_alumno >= 11 ) printf( Aprobado\n" ); Observar que el cdigo en C se parece al pseudocdigo La sangra permite que los programas sean ms fciles de leer, pues C ignora los espacio en blanco
En lenguaje C:
nota >= 11 verd
Es cero falso
print Aprobado
No es cero verdadero
falso
if
if/else
Especifica una accin a realizarse si la condicin es verdadera y otra accin si la condicin es falsa
Notar las convenciones de espaciado y tabulado if ( nota >= 11 ) printf( Aprobado\n"); else printf( Jalado\n");
Traducido a C :
falso
nota >= 11
verd
print Jalado
print Aprobado
Ejemplo
Si la nota del alumno es mayor o igual a 16 Imprimir A de lo contrario Si la nota del alumnos es mayor o igual a 12 Imprimir B de lo contrario Si la nota del alumno es mayor o igual a 8 Imprimir C de lo contrario Si la nota del alumno es mayor o igual a 4 imprimir D de lo contrario imprimir E
Enunciados compuestos:
Uso de llaves Ejemplo: if ( nota >= 11 ) printf( Aprobado.\n ); else { printf( jalado.\n); printf( Debe repetir el curso.\n ); } Sin las llaves, el enunciado
printf( Debe repetir el curso.\n );
se ejecutaria siempre
switch
Permite realizar una ramificacin mltiple, ejecutando slo una de varias posibilidades, dependiendo de los diferentes valores que puede tomar una variable.
caso a
Falso
Verdadero
caso b
Falso
Verdadero
caso z
Falso
Formato
while()
do-while()
for()
Instrucciones de control:
break continue
La estructura while()
while = mientras Estructura
El programador especifica que una accin se repite mientras cierta condicin se mantenga como verdadera Pseudocdigo:
Mientras haya ms cosas en mi lista de compras Comprar el siguiente item y sacarlo de mi lista
Ejemplo:
int producto = 2; while ( producto <= 1000 ) producto = 2 * producto;
verd
producto = 2 * producto
falso
Todas
vez
Formato:
do {
Ejemplo
do { printf( "%d ", contador ); } while (++contador <= 10);
acciones
Verdadero
condicin
Falso
Estructuras de repeticin
for do/while Usado para salir en forma inmediata y rpida de ciertas estructuras de control Usado para saltarse el resto de una estructura de repeticin, continuando con la siguiente iteracin del ciclo
break
continue
Lo esencial de la repeticin
Bucle o Lazo
Grupo de instrucciones que la computadora ejecuta en forma repetida mientras cierta condicin se mantiene como verdadera
Repeticin Definida: se conoce cuntas veces se ejecuta el lazo Se usa una variable de control para contar repeticiones
Ejemplo:
final
La sentencia for reemplaza a bucles del tipo while del siguiente tipo:
inicializacin; while (CondiciondeContinuaciondeCiclo)
{
Inicializacin e incremento
break
Causa una salida inmediata de una estructura tipo while, for, do/while o switch La ejecucin del programa contina con la primera sentencia despus de la estructura. Usos comunes de break
continue
Salta los enunciados restantes del cuerpo de una estructura while, for o do/while
Contina con la siguiente iteracin del lazo Se realiza la evaluacin de la continuacin del lazo inmediatamente despus que continue es ejecutada La expresin de incremento es ejecutada, y luego es evaluada la condicin de continuacin del lazo
while y do/while
for