0% encontró este documento útil (0 votos)
32 vistas

Estructuras de Control - Parte 1

El documento describe la historia y elementos básicos del lenguaje de programación C. C fue desarrollado en los Laboratorios Bell en 1972 y ha influido en muchos otros lenguajes como C++, Java y C#. El documento explica conceptos clave como la función main, identificadores, tipos de datos enteros y reales, y operadores aritméticos. También cubre temas como declaración de variables, precedencia de operadores e incrementos/decrementos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas

Estructuras de Control - Parte 1

El documento describe la historia y elementos básicos del lenguaje de programación C. C fue desarrollado en los Laboratorios Bell en 1972 y ha influido en muchos otros lenguajes como C++, Java y C#. El documento explica conceptos clave como la función main, identificadores, tipos de datos enteros y reales, y operadores aritméticos. También cubre temas como declaración de variables, precedencia de operadores e incrementos/decrementos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 38

ESTRUCTURAS

DE CONTROL –
PARTE 1
Lógica de Programación
Mg. Carlos A. Cardona C.
[email protected]
2.1 ELEMENTOS BÁSICOS DE
C/C++
ALGOL 60, 1960

CPL (Lenguaje de Programación Combinado) Cambridge y la U de Londres en, 1963.

BCPL (Lenguaje Básico de Programación combinado) Cambridge, 1967

B (Ken Thompson) Laboratorios Bell, 1970

C (Dennis Ritchie) Laboratorios Bell, 1972

C++ (Bjarne Stroustroup) Laboratorios AT&T, 1980


 C es un lenguaje para programadores, por ejemplo, COBOL y BASIC no lo eran.
 C tiene varios herederos; C++, Java, C# son algunos lenguajes basados en la filosofía de C por
lo que el aprendizaje de C ayuda a la comprensión de las nuevas ramas que han aprovechado
las mejores características de uno de los lenguajes más poderosos con los que se cuenta en la
actualidad.
 En fin, la lista es enorme porque C es el lenguaje de desarrollo de sistemas profesionales.
 Prácticamente todo el software profesional del mercado está escrito en algún dialecto de C o
proporciona una interfaz con C.
2.1.1 LA FUNCIÓN MAIN ( )
El lenguaje C está basado en el concepto de funciones.
 Un programa C es una colección de una o más funciones, en donde cada una tiene un nombre
y una lista de argumentos.
 En general se puede dar a una función el nombre que se quiera, con excepción de main
(principal), que se reserva para la función que inicia la ejecución del programa.

Dev-C++ es un compilador y entorno de


desarrollo (IDE) para C/C++
2.1.2 IDENTIFICADORES
ENTEROS Y REALES
El programa que hemos escrito presenta un severo inconveniente: es demasiado rígido.
 Para lograr que tenga mayor flexibilidad requerimos la asignación de valores que varían
conforme se ejecuta ese programa.
 A estos valores en las conoce como variables, y los nombres con que se identifican, como
identificadores de variable.
 El programa define una celda de memoria en donde
podemos almacenar información entera (int).
 Esa celda de memoria tiene un nombre con el cual se hace
referencia a ella, dicho nombre es el identificador de la
variable, que para este ejemplo es iResultado.
 El lenguaje C es sensible al tamaño.
 Esto significa que, en general, las mayúsculas y las
minúsculas son tomados como caracteres distintos.
 Un identificador de variable no puede ser igual a ninguna
palabra reservada para el uso exclusivo del compilador, de
tal forma que ninguna variable puede llamarse main, esto
podría crear confusión el compilador al no saber cómo
tratar al identificador en cuestión
 Los nombres de variable se forman empezando con una letra.
 No es permitido comenzar con un símbolo especial tal como >, <, ), (, *, ;, etcétera; es más
coma dichos símbolos no son permitidos en ninguna parte del identificador.
 Enseguida del primer carácter se puede escribir un dígito, un carácter subrayado, o una letra.
 La longitud máxima depende del compilador, es regla general suponer que la longitud máxima
es de 6 caracteres significativos en el nombre, y aunque pueden tener una longitud mayor a la
máxima permitida, el resto de los caracteres no será tomado en cuenta.
Todas las variables que se utilicen en un programa deben ser declaradas.
 Esto tiene como finalidad informar al compilador sobre el tipo de representación que tendrán
los datos en forma interna y las operaciones válidas que les podrán ser aplicadas.
 Una declaración de tipo se puede realizar en tres partes distintas de un programa: dentro de las
funciones, en la definición de parámetros de funciones y fuera de todas las funciones.
 En este momento veremos la primera de las formas de declaración.
 El proceso de declaración es de vital importancia pues todas las variables deben reservar
memoria en la RAM para poder contener la información.
 El compilador reserva esta memoria en cantidad suficiente y para ello usa la información que
proporciona el programador durante la declaración.
En lenguaje C los enteros tienen el mismo significado que en matemáticas: un entero no posee
parte fraccionaria.
 En C no se cuenta con una forma para representar el punto decimal en este tipo de enteros.
 La forma de declarar un entero es con la palabra reservada int (integer:entero).
 El rango que una variable entera puede abarcar depende de la máquina en la cual se esté
trabajando. (* para PC antiguos de 16 bits)
 El estándar ANSI especifica también otros tipos de enteros; estos se diferencian por el rango
de valores que son capaces de soportar:
Tipo Tamaño en bits* Tamaño PC Rango*
contemporaneos
int 16 (2 Bytes ) 4 Bytes -32767 a 32767
unsigned int 16 (2 Bytes) 4 Bytes 0 a 65535
short int 8 (1 Byte) 2 Bytes -125 a 125
unsigned short int 8 (1 Byte) 2 Bytes 0 a 255
long int 32 (4 Bytes) 4 Bytes / 8 Bytes -2 147 483 647 a -2 147 483 647
unsigned long int 32 (4 Bytes) 4 Bytes / 8 Bytes 0 a 4 294 967 295
Los identificadores reales soportan números que poseen parte fraccionaria.
La precisión de este tipo de datos suele darse con base en el número de dígitos que es capaz de
representar; esta característica depende del tipo de representación interna en la máquina. (* para
PC antiguos de 16 bits)
 Básicamente existen 2 tipos de identificadores reales: los de tipo float (flotante, hace
referencia a la representación interna del punto decimal) y double (doble, se refiere a la doble
longitud en la representación interna).

Tipo Tamaño en bits* Precisión en dígitos


float 32 (4 Byte) 7
double 64 (8 Bytes) 15
long double 128 (16 Byte) 15 (32 bits) / 19 (bits)
 Una vez definida la manera como se pueden declarar las variables con las cuales se trabajará
en el sistema, debemos pasar al estudio de los operadores que manipularán dichas variables.
 Las expresiones se forman con las variables y los operadores válidos para esas variables.
 Una expresión válida en lenguaje C, pero no en matemáticas, es x= x+1, que se lee suma una
unidad al valor actual de la variable x, y entonces asigna ese valor a la variable x.

Operador Acción
- Resta
+ Suma
* Multiplicación
/ División
% División en módulo
-- Decremento
++ Incremento
 En la tabla anterior se muestran los operadores
válidos para los números que hemos descrito hasta el
momento.
 Se puede apreciar que los cuatro operadores
aritméticos comunes (-, +, *, /) se encuentran entre
el conjunto de operadores de C.
 Esto se manejan de la misma manera que en
cualquier otro lenguaje y tal como lo establece la
aritmética, y se pueden aplicar indistintamente a las
variables flotantes y a las enteras; sin embargo, una
división con el operador (/) entre números enteros
truncará la parte fraccionaria.
 El operador % sólo es posible aplicarlo a las
variables enteras. Obtiene el residuo de una división.
Sea por ejemplo el siguiente segmento de código:
 El incremento a una de las variables suele escribirse como se mostró anteriormente: x= x+1;
 C provee de un operador muy útil para esta tarea tan común; el operador ++ ejecuta la misma
acción que la expresión anterior, pero se escribe simplemente x++ o ++x.
 Asimismo, el operador -- ejecuta la misma acción que x=x-1, basta con escribir x - - o - -x.
Es necesario precisar si los operadores ++, - - van a preceder o anteceder a la variable dentro de
las expresiones.
 Cuando el operador empecé a la variable, primero se realiza el incremento y después se utiliza
dentro de la expresión; cuando el operador precede a la variable primero se utiliza el valor de
la variable dentro de la expresión y después se incrementa la variable.
 Supongamos que la variable x posee el valor de 10 antes de cada una de las siguientes
expresiones:
2.1.3 PRECEDENCIA
Se llama precedencia de una operación a la prioridad que posee dentro de la ejecución de una
operación.
 Esta prioridad se resume: en la tabla mostrada a continuación:

Tabla de Precedencia
() Mayor precedencia
++ - -
*/%
+-
= Menor precedencia
 En general, las expresiones se evalúan de izquierda a derecha, pero no deben escribirse
expresiones partiendo de dicha suposición, ya que algunos compiladores optimizan código y
esta regla puede dejar de cumplirse.
Problema: determinar el valor obtenido en la variable z en el siguiente código:

 Resultado:
1) -x = -10
2) -x*y = -30
3) -30+ (10/3) = -30 + 3
4) -30 + 3*5 = -30 + 15
5) -30 + 15 – 4 = -19 = z
Problema: codificar la siguiente expresión:

Resultado:
 Programa: Escribir un programa que obtenga el área de un triángulo.
 Solución:
Observaciones:
Dentro del printf( ) se ha introducido %d para indicar que, en ese lugar, dentro del formato de
salida, se desean imprimir los dígitos enteros y %f para los números flotantes indicados en la
lista de variables.
 Las variables enteras que constituyen la iBase y la iAltura entregarán decimales cuando se les
divide entre 2.
 Se observa que las variables poseen un prefijo i. Este indica que la variable ha sido creada con
el tipo entero.
 El compilador no pide el prefijo y no marcará ningún error si se elimina.
 El prefijo indicando el tipo es una práctica que se encuentra ampliamente extendida entre los
programadores profesionales.
 Tiene muchas aplicaciones, aunque la más común es garantizar que no se introducen errores
sutiles relacionados con los tipos de datos involucrados.
2.1.4 ENTRADA Y SALIDA DE
DATOS
 En el ejemplo anterior se presentó de manera informal la función printf ( ) ; es momento de
formalizarla un poco más.
 2.1.4.1 Salida con formato.
 Problema: Hacer un programa que realice la conversión de centímetros a pulgadas; tenga en
cuenta que 1 in equivale a 2.54 cm.
 Solución:
Código Formato
 A reserva de explicar más adelante el %c Carácter
uso de cada especificador, se lista a %d Enteros decimales con signo
continuación el conjunto de
especificadores de formato. %i Enteros decimales con signo

 Un entero definido como long no %e Notación científica (e minúscula)


puede ser impreso solamente usando %E Notación científica (E mayúscula)
el especificador de campo %d; es %f Coma flotante
necesario anteponer el especificador l
para indicar que se trata de un tipo %g Usar %e o %f el que resulte más corto
largo. %G Usar %E o %f el que resulte más corto
 Este modificador de campo también %o Octal sin signo
puede anteponerse a i, o, u, x. %s Cadena de caracteres
%u Enteros decimales sin signo
%x Hexadecimales sin signo (letras minúsculas)
%X Hexadecimales sin signo (letras mayúsculas)
%% Imprimir el signo %
2.1.4.2 Entrada con formato.
Código Formato
 La lectura desde un dispositivo externo se
%c Carácter
realiza por medio de la función scanf ( ).
%d Enteros decimales con signo
 Por su conducto es posible leer los datos
%i Enteros decimales con signo
desde el teclado de una terminal, y
especificar además el tipo de datos que se %e Notación científica
desea escribir. La siguiente es una tabla de %f Coma flotante
los especificadores de scanf ( ):
%o Octal sin signo
%s Cadena de caracteres
%x Hexadecimales sin signo
%n Recibe un valor entero igual al número de
caracteres leídos
%u Enteros decimales sin signo
%[ ] Muestra un conjunto de caracteres
 Programa: En una tienda departamental se desea instaurar un sistema de cómputo en el cual
la cajera introduzca el total a pagar y la cantidad con la que se paga el programa debe dar por
resultado el cambio que se le ha de entregar al cliente.
 Solución:
Observaciones:
 Dentro de scanf( ) se coloca la cadena de control que, como hemos visto, tiene una forma
similar a la de printf( ).
 En la lista de variables se coloca la o las variables que han de ser leídas desde el teclado.
 Cada una de estas variables debe ser antecedida por un & para que scanf( ) asigne
correctamente el valor en la localidad de memoria dedicada a esa variable.
 Es muy importante este signo, ya que no colocarlo podrían suceder cosas impredecibles.
 De la lista de especificadores podemos notar que un número entero puede ser leído con %d o
con %i.
 Asimismo, un número real puede ser leído con %e, %f, o %g.
 No siempre es deseable tener tanta precisión en el número de salida; por ejemplo, en la
escritura de números que representen cantidades monetarias basta con dos decimales.
 Ejemplo:
 Defina la salida para el siguiente código:
 Programa: escribir un programa que calcule el IVA a una cantidad de compras y entregue el
total a pagar.
 Solución:
2.1.5 CARACTERES Y
CADENAS
Frecuentemente es necesario disponer de variables que no tengan números, sino letras o
símbolos.
 A las variables que contienen una sola letra coma un solo dígito o un solo símbolo coma se les
conoce como variables carácter.
 La lectura de una variable carácter puede realizarse de muy distintas formas:
 Funciones scanf( ), getchar ( ): estas 2 funciones leen de la memoria del teclado un carácter y
lo almacenan en la variable, ambas esperan un retorno de carro para continuar.
 Son 2 formas de lectura de una variable carácter que no son muy recomendables para entornos
de programación en los que la lectura del teclado debe ser instantánea, las cuales esperan
<Enter> para concluir.
 Funciones getch( ), getche ( ): estas 2 funciones leen un solo carácter del teclado y son más
recomendables para entornos interactivos.
 La función getch( ) no hace eco en la pantalla del carácter leído, es decir, no se visualiza en la
pantalla lo que se edite en el teclado, en tanto que la función getche ( ) si visualiza el carácter
en la pantalla.
Recibe el nombre de cadena un conjunto de caracteres unidos como un solo objeto.
A las variables que almacenan cadenas son conocidas como arreglos de caracteres o variables
string (string: cadena).
El apellido de una persona, su domicilio y su ocupación son ejemplos de cadenas de caracteres.
 En el lenguaje C almacena las cadenas en variables carácter reunidas bajo un mismo nombre.
Lo único que diferencia un carácter de otro es un subíndice.
 Cualquier cadena debe terminar con el carácter nulo.
 C no realiza validaciones sobre límites; si no se indica dónde termina una, el programa
continuará haciendo información en el dispositivo de salida hasta que encuentre un carácter
nulo.
 La lectura de una cadena se realiza por medio de scanf( ) y el indicador de campo %s o bien
con la función gets( ).
Observaciones:
En el programa anterior existe la variable de szNombre hoy en donde se almacenarán 10
caracteres según lo indica la declaración.
El conteo de los subíndices comienza en 0 y llega hasta el número 9.
El último carácter de cualquier cadena C es nulo, el cual ha sido añadido en forma automática
por la función al final del último carácter leído.
 Obsérvese que las cadenas cambian el prefijo de c a sz.
 Esto es así porque las cadenas son gestionadas para ser usadas con muchos caracteres.
 Como cada cadena termina con un nulo coma el prefijo especifica que se manejan los
caracteres (string) terminados en nulo (zero).
Observaciones:
En este ejemplo se ha visto cómo es posible iniciar una variable en el mismo instante que se
declara.
En el caso de la variable szNombre la asignación se realiza mediante una constante de cadena.
Dicha constante está encerrada entre comillas y no requiere de la indicación del carácter nulo, ya
que el compilador se la asigna automáticamente.
Cabe mencionar que el carácter nulo también debe estar contemplado al totalizar el largo
máximo de la cadena, es decir, el carácter nulo también ocupa espacio.
La asignación de la variable szApellidoPaterno se ha realizado dentro del bloque de programa,
asignando carácter por carácter a la variable que contiene la cadena.
 Una forma alterna de hacer exactamente lo mismo, pero con una notación distinta, es mostrado
con la variable szApellidoMaterno.
 Algunas de las funciones más comunes para el manejo de cadenas son:

 strcpy (cadena1, cadena2) Copia cadena 2 en cadena 1


 strcat (cadena1, cadena2) Concatena cadena 2 al final de cadena 1
 Strlen (cadena) Obtiene la longitud de la cadena
 Strcmp (cadena1, cadena2) Retorna: igual a cero si cadena1 = cadena2
menor que cero si cadena1 < cadena2
mayor que cero sí cadena1 > cadena2
 Estas funciones se encuentran definidas en el archivo de cabecera string.h. Debe por tanto
indicarse en una sentencia #include al inicio del archivo que las ocupe para que el compilador
pueda encontrarlas.
2.1.6 CONSTANTES
Una constante es un valor que no cambia a lo largo de la ejecución de un programa.
Cuando un valor es definido como una constante no será posible realizar modificaciones sobre
el mismo durante la ejecución del programa; por ejemplo, podemos definir que PI= 3.1415 o
que IVA= 0.19; estos son valores que no debieran cambiar y que es deseable definir en un punto
específico del programa.
 Un programador que utilice frecuentemente una cantidad constante, como el IVA, necesita
definirlo una sola vez y después usar su nombre simbólico.
 Si por alguna razón este valor cambia (por motivos fiscales o de precisión), se tendrá que
modificar en una sola línea y no en todos los lugares en donde se haga referencia a dicho
valor.
BIBLIOGRAFÍA
Peñaloza, E. (2007). Fundamentos de
Programación C/C++. México: Alfaomega.

También podría gustarte