Está en la página 1de 18

Fundamentos de Programación

Estructurada

• Estructura General de un Programa


• Compilación y Ligado
• Tipos de Datos y Modificadores
• Operadores
• Funciones de Entrada y Salida de Datos
• Funciones Matemáticas
• Ejercicios

Página 1
HISTORIA DEL LENGUAJE

El Lenguaje C nació en los Laboratorios Bell de AT&T y ha sido estrechamente asociado con el
sistema operativo UNIX, ya que su desarrollo se realizó en este sistema operativo y debido a que
tanto UNIX como el propio compilador de C y la casi totalidad de los programas y herramientas de
UNIX, fueron escritos en C. Su eficiencia y claridad han hecho que el lenguaje ensamblador apenas
haya sido utilizado en UNIX.

Este leguaje está inspirado en el lenguaje B escrito por Ken Thompson en 1970 con intención de re‐
codificar el sistema operativo UNIX, que en su inicio estaba escrito en ensamblador, en vista a su
transportabilidad a otras maquinas. B era un lenguaje evolucionado e independiente de la máquina,
inspirado en el lenguaje BCPL concebido por Martín Richard en 1967.

En 1972, Dennis Ritchie, toma y modifica el lenguaje B, creando el lenguaje C y rescribiendo el UNIX
en dicho lenguaje. La novedad que proporciono él lenguaje C sobre el B fue el diseño de tipos y
estructuras de datos.

En 1980 Bjarne Stroustrup de los laboratorios Bell de Murray Hill, New Jersey, inspirado en el
lenguaje Simula67 adicionó las características de la programación orientada a objetos (incluyendo
la ventaja de una biblioteca de funciones orientada a objetos) y lo denomino C con clases. Para 1983
dicha denominación cambio a la de C++. Con este nuevo enfoque surge la nueva metodología que
aumenta las posibilidades de la programación bajo nuevos conceptos.

Con la popularidad de las microcomputadoras se crearon muchas implementaciones de C. En lo que


se podría decir que era un milagro, los códigos fuentes aceptados por la mayoría de esas
implementaciones eran altamente compatibles. Sin embargo, como no existía ningún estándar,
aparecieron discrepancias. Para remediar la situación, el Instituto de Estándares Americano (ANSI)
estableció un comité a mediados de 1983 para crear un estándar que definiera al lenguaje C. Este
comité ANSI termino el proceso de formalización en 1990.

Actualmente muchas empresas se dedican a vender el compilador del lenguaje C, dos de estos
imperios son:

 Microsoft Visual C++


 Borland C++ Builder

La mayoría de los compiladores actuales soportan la programación en C Estándar, C Orientado a


Objetos y la Programación Visual.

Página 2
ESTRUCTURA DE UN PROGRAMA

Un programa escrito en lenguaje C tiene la siguiente estructura, aunque no necesariamente debe


contener todos los puntos:

1. Definición de archivos de cabecera.


2. Definición de constantes y variables globales.
3. Definición de funciones del usuario.
4. Definición e implementación del programa principal “main()”.
5. Implementación de funciones del usuario.

A manera de ejemplo considérese el siguiente programa:

//Est_Prog.cpp
//Definición de Archivos de Cabecera
#include <conio.h>
#include <stdio.h>
//Definición de Constantes y Variables Globales
#define PI 3.1416
float Area;
//Definición de Funciones del Usuario
void Area_Cir(int R);
//Definición e implementación del Programa Principal
int main()
{
int Radio;
void clrscr(void);
printf("INTRODUCCION AL LENGUAJE C");
printf("\n\n CALCULO DEL AREA DE UN CIRCULO");
printf("\n Radio: ");
scanf("%i",&Radio);
Area_Cir(Radio);
printf("\n El Area es: %8.2f",Area);
getch();
return 0;
}
//Implementación de Funciones del Usuario
void Area_Cir(int R)
{
Area= 2*PI*R*R;
}

La idea de presentar un programa no muy pequeño de entrada a diferencia de como lo hacen


algunos autores es con el fin de que se conozca una gran cantidad de información sobre el Lenguaje
C.

El programa Est_Pro.cpp contiene las 5 partes de la que se compone un programa escrito en el


lenguaje C. En la sección “Definición de Archivos de Cabecera” se presentan los archivos conio.h y

Página 3
stdio.h, ambos son archivos de cabecera definidos por el lenguaje, existen un gran número de ellos
que acompaña al compilador según la versión y fabricante. Por lo regular se encuentran ubicados
en el directorio \Include.

Los archivos de cabecera definidos en esta sección que pertenecen al compilador deberán estar
entre los signos < > y aquellos que el propio programador cree para sus aplicaciones entre comillas
“ “ lo cual le indicará al compilador que busque el archivo en el directorio de trabajo y no en el
directorio por default de archivos de cabecera (esto es el directorio include).

La siguiente lista muestra algunos de los archivos de cabecera que más se usan, así como una breve
descripción de su contenido:

Archivo Uso
<stdio.h>. Funciones de entrada/salida estándar.
<iostream.h> Funciones de entrada/salida por flujos.
<conio.h> Funciones de entrada/salida por teclado o consola.
<alloc.h> Asignación dinámica de memoria.
<graphics> Funciones relacionadas con gráficos.
<io.h> Funciones de entrada/salida de bajo nivel.
<math.h> Funciones matemáticas.
<mem.h> Funciones de manipulación de memoria.
<string.h> Funciones relacionadas con cadenas.
<time.h> Funciones de hora y fecha.

Para definir un archivo de cabecera se usa una directiva de pre‐procesamiento llamada #include
seguido del archivo de cabecera encerrado entre signos < > ó “ ” según el lugar dónde éste se
encuentre, de esta forma el compilador incluirá durante la compilación las variables, constantes y
funciones que se encuentren en el archivo y que sean usados por el programa en desarrollo.

En la sección “Definición de Constantes y Variables Globales” se encuentra otra directiva de pre‐


procesamiento conocida como #define que permite definir la constante, observe que después del
identificador PI no existe un signo =, aunque el significado es que el identificador PI toma el valor de
3.1416, para la definición de las variables globales basta con indicar su tipo de dato y el identificador
seguido de punto y coma, aquí se define Area de tipo real (float), recuerde que una variable global
perdura a lo largo de la ejecución de todo el programa y puede ser vista o modificable desde
cualquier parte del programa o función.

En la sección “Definición de Funciones del Usuario” se requiere definir todas las funciones que se
implementen por el programador, porque sólo de ésta forma el compilador puede conocer de forma
adelantada la existencia de las mismas, es decir antes de llamar a una función primero el compilador
necesita saber de su existencia en caso contrario no podría resolver esta referencia provocando un
error en tiempo de compilación, el lenguaje C es un lenguaje estructurado lo cual significa que un
programa según su tamaño se dividirá en varios módulos conocidos como funciones, de esta forma
se evita que la función principal este saturada de código. En este ejemplo se define solamente una

Página 4
función, Area_Cir() sin tipo de retorno (void) y recibe como parámetro un entero(El radio del
circulo).

La “Función Principal” main() es lo primero que se ejecuta cuando inicia un programa, por lo que es
indispensable que éste exista, en él se establece la lógica o secuencia que seguirá el programa
durante su ejecución.

Una descripción de lo que ocurre en el ejemplo es la siguiente:

 Se define una variable local Radio de tipo entero.


 Se borra la pantalla.
 Se imprimen mensajes en pantalla.
 Se lee un dato de tipo entero almacenándolo en la variable Radio.
 Se llama a la función Area_Cir() pasándole como argumento el radio leído.
 Se imprime la variable Area calculada en la función.
 Se espera la entrada de una tecla para terminar.

Como puede observarse el orden de los comandos es el orden o secuencia en que éstos se ejecutan.

Finalmente en la sección de Implementación de funciones se tendrá la implementación de todas las


funciones que el programador haya definido en la sección correspondiente, en este caso la función
Area_Cir() solamente tiene una línea de código que se encarga de asignar a la variable global Area,
el resultado de multiplicar 2*3.1416*R*R , si el usuario introdujo un Radio =5 entonces sería:
2*3.1416*5*5.

Si una función se define y se llama desde alguna parte del programa y no está implementada, se
detectará un error en tiempo de enlace y no en tiempo de compilación tema que se tratará a
continuación.

COMPILACIÓN Y LIGADO

Para crear un archivo ejecutable (código maquina relocalizable) se realiza mediante dos etapas o
tiempos que son: Compilación y Ligado.

 Compilación: Durante este proceso se examina el o los programas fuente de la aplicación y


los archivos de cabecera para hallar errores de sintaxis, de no existir se genera un archivo
objeto (.OBJ) por cada programa fuente.

 Ligado: Durante este proceso se unen todos los programas objeto del que se conforme la
aplicación, así como los archivos de biblioteca (.LIB) para formar un solo programa
independiente, o programa ejecutable (.EXE).

Para aclarar lo anterior observe la siguiente figura:

Página 5
Figura 1. Proceso de Compilación y Ligado de un programa en C.

La implementación de las funciones halladas en los archivos de cabecera predefinidos por el


lenguaje se encuentran en bibliotecas (Mathl.lib, Cl.lib, entre otras) incluidos también en el software
del compilador, por lo que se integran al programa en tiempo de enlace, es por esta razón que si
una función definida por el usuario no está implementada en el programa ni tampoco en una
biblioteca se detectará en tiempo de enlace.

De lo anterior se deduce entonces que un archivo de cabecera (*.h) es diferente de un archivo de


biblioteca (*.Lib), lo cual es muy cierto, a continuación se describen algunas diferencias:

Característica Archivo de Cabecera Archivo de Biblioteca


Tipo Texto Binario
Cuando se usa Tiempo de Compilación Tiempo de Ligado
Contenido Definiciones Implementaciones compiladas
Tabla 1. Diferencias entre un archivo de Cabecera y uno de Biblioteca.

Es frecuente que se confundan los términos archivo de biblioteca con archivo de cabecera, la tabla
y dibujo anterior precisamente tiene la finalidad de hacer notar que son diferentes. Durante la
escritura de un programa es frecuente probar una y otra vez si se está haciendo lo correcto, para
ello se usa la ejecución paso a paso de un programa (Depuración), en ocasiones algunos archivos de
cabecera se cargan en el ambiente de programación y se debe tener la precaución de no
modificarlos para no producir incongruencias entre el archivo de cabecera y el archivo de biblioteca,
al final ambos archivos están directamente relacionados entre sí.

TIPOS DE DATOS Y MODIFICADORES

Todo lenguaje de programación suministra al diseñador de software un conjunto de tipos de datos


y un conjunto de instrucciones, el diseñador a partir de éstos puede crear nuevos tipos y nuevas
instrucciones.

Página 6
Palabras reservadas

Las palabras reservadas del compilador son todas aquellas palabras que se usan para especificar
tipos de variables, estructuras cíclicas, estructuras de decisión, etc., y que no pueden ser usadas por
el usuario como nombre de variables, de funciones o de nuevos tipos .Estas palabras son las
siguientes:

asm delete goto public this


auto do huge register union
break double if return unsigned
case else int Short virtual
carch enum interrupt signet void
char extern long Sizeof volatile
class far near Static while
const float new Struct
continue for private Switch
defauld friend protected template
Tabla 2. Palabras reservadas del lenguaje C.

Las palabras reservadas deben escribirse siempre en minúsculas.

Tipos de Datos

Un tipo de dato en C es la manera como el compilador almacena la información en la memoria, por


ejemplo el sistema operativo MS‐DOS es un sistema de 16 bits, mientras que Windows 98, Windows
2000, Windows NT son de 32 bits, así que el compilador para cada uno de estos sistemas
operativos almacenará en algunos casos un mismo tipo de dato con longitud diferente, más
adelante se presenta una tabla de los tipos de datos para un sistema de 16 bits.

Antes de empezar a describir los tipos disponibles en el lenguaje se definirá lo que es una variable.

Las variables siempre pertenecen a un tipo de dato, este tipo de dato puede ser alguno de los tipos
predefinidos por el lenguaje o definido por el usuario, algunos tipos predefinidos para un sistema
de 16 bits son:

Tipos de datos # de Bits Intervalo


char 8 ‐127 a 127
int 16 ‐32768 a 32767
long 32 0 a 4294967295
float 32 Aprox. 6 dígitos de precisión
double 64 Aprox. 12 dígitos de precisión
void 0 Sin valor
Tabla 3. Tipos de Datos básicos de un sistema de 16 bits.

Página 7
Modificadores

Los modificadores son palabras reservadas que se le adicionan a los tipos para modificar su tamaño
y/o su rango, estos son:

 Signed.
 Unsigned.
 Long.
 Short.

Estas son algunas de las combinaciones que se pueden presentar:

Tipo # de Bits Intervalo


unsigned char 8 0 a 255
char 8 ‐127 a 127
unsigned int 16 0 a 65535
short int 16 Lo mismo que int
int 16 ‐32,768 a 32,767
unsigned long int 32 0 a 4,294,967,295
long int 32 ‐2,147,483,648 a 2,147,483,647
float 32 3.4E‐38 a 3.4E38
double float 64 1.7E‐308 a 1.7E308
Tabla 4. Tipos de datos con modificadores en un sistema de 16 Bits.

Como se puede observar cada tipo tiene un tamaño en bits, este tamaño define un rango de
operación que limita los números que se puede almacenar en una variable. Imagínese que se desea
diseñar un programa de nómina que va a manejar los sueldos de los empleados, piense en el tipo
de dato que usaría para la variable sueldo; seguramente pensará en un tipo unsigned int, sí
se observa la tabla anterior el tipo unsigned int almacena valores entre 0 y 65535, ¿Será el tipo
unsigned int el más apropiado? Bueno tal vez contestará que no, ya que los sueldos pueden ser
superiores a 65535, tal vez el tipo más apropiado será unsigned long que almacena valores entre 0
y 4294967295. Bueno, pero que pasaría si escogiera el tipo unsigned int para la variable sueldo, en
el momento que almacene un valor superior a 65535 el contenido quedará truncado.

Para el caso de un Sistema Operativo de 32 bits, el compilador almacenará los datos con tamaños
diferentes, este sería el caso:

Tipo # de Bits Intervalo


unsigned char 8 0 a 255
char 8 ‐128 a 126
unsigned int 32 0 a 4,294,967,295
short int 16 ‐32,768 a 32,767
int 32 ‐2,147,483,648 a 2,147,483,648
unsigned long int 32 Lo mismo que unsigned int
long int 32 Lo mismo que int
float 32 1.2E‐38 a 3.4E381

Página 8
double float 64 2.2E‐308 a 1.8E3082
Tabla 5. Tipos de datos con modificadores en un sistema de 32 Bits.

Al examinar la tabla anterior se puede observar que int es lo mismo que long int mientras que para
un sistema de 16 bits éstos tienen diferentes longitudes y por lo tanto diferentes intervalos.

Como se deduce en consecuencia que la longitud en bytes de un tipo dato depende del sistema
operativo y del compilador que se use, para conocer con precisión la longitud en bytes de una
variable de un tipo de dato se puede utilizar el operador sizeof. Por ejemplo:

int x;
x=sizeof(int));

En un compilador operando en el sistema operativo MS‐DOS x tomaría el valor de 2, mientras que


en Windows 98 el valor de 4.

Comentarios

Un comentario es una secuencia de caracteres utilizada para explicar el código fuente y no se toma
en cuenta durante la compilación (No se considera como código). Existen dos formas para definir
un comentario:

1. Secuencia de caracteres encerrados entre los símbolos /* y */

2. Comienza con los caracteres // y termina al final de la línea.

Variables

Es una posición de memoria de cierta longitud según el tipo de dato cuyo valor puede ser modificado
a lo largo de la ejecución de un programa.

Sintaxis:
[clase] tipo identificador[,identificador];

Donde:

clase representa un especificador de clase de almacenamiento (se explica posteriormente).


tipo determina el tipo de variable (char, int, float, entre otros)
identificador indica el nombre de la variable.

Una variable que se declara al inicio del programa es considerada como variable global y es accesible
desde cualquier parte del programa. Por lo contrario una variable declarada dentro de una función
se considera como variable local y es accesible solamente dentro de ésta.

Cada variable de un programa, debe declararse antes de ser utilizada. La declaración consiste en
enunciar el nombre de la variable y asociarle un tipo. El tipo determina los valores que puede tomar
así como las operaciones que con ella pueden realizarse.

Página 9
Ejemplos:
int Suma, Promedio;
char Car, Nombre[40];

Una variable puede ser inicializada cuando se declara:

char car = ’\0’ ;


int Incremento = 10;
char Archivo[] = ”Datos.dbf”;

Conversión de Tipos de Datos

Cuando se trabaja con datos de diferentes tipos es frecuente mezclarlos durante una expresión o
asignación, a diferencia de otros lenguajes, C realiza la conversión de tipos compatibles de manera
automática.

Por ejemplo:

int x=92; //Se declara la variable x de tipo entero inicializándola con 92


char car=x; //car es de tipo carácter y se le asigna el valor de un entero x

En este ejemplo se da la conversión automática de tipos, es decir a la variable car se le asigna el


carácter ’\’ , que es el equivalente del código ASCII.

Cuando se presenten casos de conversión de tipos se debe tener en cuenta que es posible la perdida
de datos. Supóngase que x=256 en lugar de 92, en este caso car tomaría el valor de ‘\0’, es decir el
carácter nulo. Esto se debe a que un entero es de 16 bits (en MS‐DOS) mientras que un char es 8
bits, por lo tanto los 8 bits más significativos del entero se perderán.

No todos los compiladores soportan la conversión de tipos durante las asignaciones, algunos
solamente lo soportan durante una expresión este es el caso del C++ Builder, por ejemplo:

int x;
x= Edit1‐>Text; //Error No se puede convertir una cadena a entero

Como Edit1‐>Text es una propiedad de tipo cadena (arreglo de caracteres) no se puede llevar a cabo
la conversión de manera directa, para solucionar este problema la asignación se debe realizar de
manera indirecta:

x = Edit1‐>Text*1; //OK La conversión se da en la expresión.

Operadores

Los operadores se utilizan para manipular datos: ejecutan cálculos, buscan igualdades, realizan
asignaciones, trabajan con variables y se encargan de muchas otras tareas que los programadores
nunca llevan a cabo. En la siguiente tabla se presentan los de uso más común:

Página 10
Operador Descripción Ejemplo
OPERADORES ARITMÉTICOS
+ Adición x = x+z;
‐ Sustracción x = x‐z;
* Multiplicación x = x*z;
/ División x = x/z;
% Modulo o resto x = x%z;
OPERADORES LÓGICOS
&& AND lógico if(x&&0xFF)
|| OR lógico if(x||0xFF)
! NOT lógico if(!Soltero)
OPERADORES RELACIONALES
== Igual que if(x==y)
!= Diferente que
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
OPERADORES DE CLASE Y ESTRUCTURA
:: Resol. de alcance Punto::Dibujar()
‐> Miembro indirecto P‐>Dibujar();
. Miembro directo P.Borrar();
OPERADORES DE ASIGNACIÓN
= Asignación x=10;
+= Asignar y sumar x+=10;
‐= Asignar y restar x‐=10;
*= Asignar y multiplicar x*=10;
/= Asignar y dividir x/=10;
&= Asignar operador AND x&=0x02;
|= Asignar operador OR x|=0x02;
OPERADORES A NIVEL DE BITS
& AND a nivel de bits C=A&B;
| OR a nivel de bits
^ XOR a nivel de bits C=A^B;
<< Desplazamiento a la izquierda C=A<<3;
>> Desplazamiento a la derecha C=A>>2;
~ NOT a nivel de bits C=~D;
OPERADORES DE APUNTADORES
* Indirección int *Ap;
& Dirección x=&Ap;
OTROS
++ Incremento x++;
‐‐ Decremento x‐‐;
Tabla 6. Operadores de C++ más usados.

Página 11
Prioridad y Orden de Precedencia

La prioridad de los operadores define el orden en que se evalúa una expresión cuando tiene distintos
operadores. C y C++ tienen reglas específicas para determinar el orden de evaluación. Lo más
sencillo de recordar es que la multiplicación y división tienen prioridad sobre la suma y la resta. A
partir de esto, si una expresión no le resulta clara, o tampoco lo será para alguien que lea el código,
por lo que deberá utilizar paréntesis para hacer más explicito el orden de evaluación. Por ejemplo:

A= x + y – 2 / 2 + z;

Tendrá un significado distinto dependiendo de cómo se agrupen los paréntesis:

A= x + (y ‐ 2) / (2 + z);

En la siguiente tabla se listan los operadores de C y C++ de mayor a menor prioridad, y describe
como se asocia cada operador (de izquierda a derecha o de derecha a izquierda). Todos los
operadores situados entre líneas tienen el mismo nivel de prioridad.

Nivel Operadores Asociatividad


1 () [] ‐> :: . Izquierda – Derecha
2 ! ~ ++ ‐‐ & * Derecha – Izquierda
3 */% Izquierda – Derecha
4 +‐ Izquierda – Derecha
5 << >> Izquierda – Derecha
6 < <= > >= Izquierda – Derecha
7 = != Izquierda – Derecha
8 & Izquierda – Derecha
9 ∧ Izquierda – Derecha
10 | Izquierda – Derecha
11 && Izquierda – Derecha
12 || Izquierda – Derecha
13 = *= ‐= *= %= < <= > >= &= ∧= |= Derecha – Izquierda
14 , Izquierda – Derecha
Tabla 7. Prioridad y asociatividad de los operadores en C++.

Ejemplos:

A) 8/4*6 8*6/4 28/(3*4)


2*6 48/4 28/12
12 12 2
B) 3/4*6 3*6/4
0*6 18/4
0 4
C) (float) 2/4
2.0/4
0.5
D) ‐3+4% 5/2

Página 12
‐3+4/2
‐3+2
‐1

Entrada y Salida de Datos (Estándar y por Flujos)

Prácticamente todos los programas requieren procesar información proveniente de fuentes


externas para obtener la solución de un problema específico. Esta información constituye los datos
de entrada del algoritmo que definen su programa y es mediante ellos que se obtendrá la salida o
solución correspondiente.

De ahí la importancia de proporcionar adecuadamente los valores o datos de aquellas variables del
programa que deba leer la computadora; además de la importancia de incluir mensajes en las
ordenes de salida que indiquen la naturaleza o nombre de los resultados obtenidos.

El sistema operativo MS‐DOS soporta dos métodos de entrada y salida de datos que son:

 Entrada y salida estándar.


 Entrada y salida por flujos.

Entrada y Salida Estándar

Para la entrada y salida de datos con formato se utilizan dos funciones halladas en el archivo de
cabecera stdio.h: printf() y scanf().

Salida por pantalla

Printf(char *cadena_de_control, Lista_argumentos);

La cadena de control está formada por dos tipos de elementos. El primer elemento es el carácter
que se mostrará en la pantalla. El segundo elemento contiene especificadores de formato que
definen la forma en que se muestran los argumentos posteriores. El especificador de formato
empieza con un % y va seguido por el código del formato. Debe haber exactamente el mismo
número de argumentos que especificadores de formato y ambos deben coincidir en su orden de
aparición de izquierda a derecha.

En la siguiente tabla se muestra una gran variedad de especificadores de formato.

Código Formato
%c Carácter
%d Entero en decimales con signo
%i Entero decimales con signo
%e Notación científica
%f Punto flotante
%h Entero corto
%o Octal sin signo
%s Cadena de caracteres

Página 13
%x Hexadecimal sin signo
Tabla 8. Especificadores de formato.

Ejemplo:

printf(“El Lado es: %i El Área del Cuadrado es: %f”, Lado, Area);

Si la variable Lado=5 por lo tanto la variable Area=25, así el mensaje sería:

El Lado es: 5 El Area del Cuadrado es: 25

También en la cadena de control pueden existir una serie de caracteres que permitan formatear la
salida, conocidos como secuencia de escape:

Secuencia de escape Acción realizada


\a Alarma
\b Retroceso
\f Avance de pagina
\n Nueva línea
\r Retorno de carro
\t Tabulación (horizontal)
\v Tabulación (vertical)
\\ Barra inclinada
Tabla 9. Secuencias de escape.

Entrada por teclado

Scanf(char *cadena_de_control, Lista_argumentos);

Esta función direcciona automáticamente la lectura de valores por el teclado de la computadora.


Como se aprecia el formato es idéntico al printf().

El lenguaje C emplea apuntadores en lectura de toda cantidad numérica debido a que asigna dichos
valores a través de las direcciones de las variables, por tal motivo los nombres de ellas van
precedidas del símbolo & (con lo que se indica que se usan apuntadores). En el caso de cadenas, los
nombres de las variables son en sí mismos apuntadores y no requieren dicho símbolo.

Ejemplo:

/*
ES-Estan.cpp
Muestra el uso de las funciones printf() y scanf()
*/
#include <conio.h>
#include <stdio.h>
int main(){
char Nom[40];

Página 14
int Edad;
float Peso;
void clrscr(void);
printf("IDENTIFIQUESE POR FAVOR");
printf("\n\n NOMBRE: ");
scanf("%s",Nom); // scanf("%[^\n]",Nom);
printf("\n EDAD: ");
scanf("%i",&Edad);
printf("\n PESO: ");
scanf("%f",&Peso);
printf("\n\n SUS DATOS SON: ");
printf("%s %i %4.2f",Nom,Edad,Peso);
getch();
return 0;
}

La Salida del programa después de ejecutarlo sería:

IDENTIFIQUESE POR FAVOR

NOMBRE: Emilio
EDAD: 3
PESO: 18.4

SUS DATOS SON: Emilio 3 18.40

Observe que al leer las variables Edad y Peso de tipo entero y real respectivamente se utiliza el
operador & que indica dirección, mientras que la variable Nom que es un arreglo de caracteres
(cadena) no lo requiere, la función printf() hace uso frecuentemente de la secuencia de escape \n
para cambiar de línea, por ejemplo el penúltimo printf() hace que se deje una línea en blanco.

Entrada y Salida por flujos

C++ proporciona el archivo de cabecera iostream.h que contiene funciones que realizan operaciones
de Entrada/Salida, este archivo tiene la ventaja sobre el stdio.h por ser una implementación
orientada a objetos, dos de estos objetos son: cin y cout. Donde:

 cin es usado para entrada de datos.


 cout es usado para salida de datos.

Para el manejo de estos dos objetos se utilizan dos operadores:

 El operador de inserción (<<) transmite sus argumentos situados a la derecha hacia el flujo
cout.

 El operador de extracción (>>) lee informaciones del flujo cin a la izquierda del operador y
las almacena en las variables indicadas a la derecha.

Página 15
A manera de ejemplo, se ha reescrito el programa ES‐Estan.cpp pero en lugar de usar printf() y
scanf() se usara cout y cin.

/*ES-Flujo.cpp*/
#include <conio.h>
#include <iostream.h> //En lugar de stdio.h
using namespace std;
int main(){
char Nom[40];
int Edad;
float Peso;
clrscr();
cout<<"IDENTIFIQUESE POR FAVOR";
cout<<"\n\n NOMBRE: ";
cin>>Nom; // gets(Nom); ó cin.getline(Nom,40);
cout<<"\n EDAD: ";
cin>>Edad;
cout<<"\n PESO: ";
cin>>Peso;
cout<<"\n\n SUS DATOS SON: ";
cout<<Nom<<" "<<Edad<<" "<<Peso;
getch();
return 0;
}

La Salida del programa después de ejecutarla sería idéntica al a salida del programa ES‐Estan.cpp

Cuando se lee un arreglo de caracteres como la variable Nom puede ocurrir que el usuario escriba
más de una palabra (una línea), en cuyo caso no sería conveniente utilizar cin sola, ya que este
solamente tomaría la primera palabra. Para leer más de una palabra se puede utilizar la función
getline() de la siguiente forma:

cin.getline(Cadena, num);

Donde:

Cadena es cualquier arreglo de caracteres que se haya definido con anterioridad y que contiene la
cadena de entrada.

Num es el número máximo de caracteres que desea leer con getline()

Ejemplo:

cin.getline(Nom, 40); //Se puede almacenar hasta 40 caracteres en Nom

En la penúltima línea se observa que se pueden concatenar varios operadores << en una sola línea.
Otro aspecto importante de los flujos, es que los operadores << y >> efectúan automáticamente las
conversiones necesarias.

Página 16
EJERCICIOS RESUELTOS

1.‐ Usando la entrada y salida estándar escribir un programa que calcule el área de un triangulo a
partir de su base y altura usando la formula: Área = (Base*Altura)/2.

/* Area.cpp */
#include <stdio.h>
#include <conio.h>
int main ()
{
float Altura,Base,Area;
void clrscr(void);
printf ("CALCULA EL AREA DE UN TRIANGULO.");
printf("\n\nTECLEE LA BASE: ");
scanf("%f",&Base);
printf("\nTECLEE LA ALTURA: ");
scanf("%f",&Altura);
Area=(Base*Altura)/2;
printf("\nEl EL AREA ES: %8.2f", Area);
printf("\nPRESIONE <ENTER> PARA TERMINAR");
getch();
return 0;
}

2.‐ Usando la entrada y salida estándar escriba un programa que calcule el sueldo de un empleado,
solicitando su nombre, número de horas trabajadas y el costo por hora.

/* Sueldo.cpp*/
# include <stdio.h>
# include <conio.h>
int main ()
{
char nombre[40];
float chr, hrst, Sueldo;
void clrscr(void);
printf ("\n CALCULA EL SUELDO DE UN EMPLEADO");
printf ("\n\n NOMBRE DEL EMPLEADO: ");
gets(nombre);
printf ("\n HORAS TRABAJADAS: ");
scanf ("%f", &hrst);
printf ("\n COSTO POR HORA: ");
scanf ("%f",&chr);
Sueldo=hrst*chr;
printf("\n EL SUELDO DE %s ES DE: $ %8.2f",nombre,Sueldo);
getch();
return 0;
}

Página 17
3.‐ Programa que calcula el precio de venta de un artículo. El precio de venta se calcula añadiéndole
al costo el 120% como utilidad y el 15% de impuesto.

/*Preventa.cpp*/
# include <stdio.h>
# include <conio.h>
int main ()
{
char descripcion[40];
float CosP, Temp, CVenta;
clrscr();
printf ("\n CALCULA EL PRECIO DE VENTA DE UN ARTICULO.");
printf ("\n\n DESCRIPCION DEL ARTICULO: ");
gets (descripcion);
printf ("\n COSTO DE PRODUCCION: ");
scanf("%f", &CosP);
Temp= (CosP+(CosP*1.2));
CVenta=Temp + Temp*.15;
printf("\n EL COSTO DE VENTA DE %s ES: $ %8.2f", descripcion, CVenta);
getch();
return 0;
}

4. – Usando la entrada y salida por flujos escriba un programa que lea la longitud de los lados A y B
de un triangulo y calcule la hipotenusa (C), aplicando el teorema de Pitágoras, C 2 = A2 + B2.

/* Hipotenu.cpp */
# include <iostream>
# include <conio.h>
# include <math.h> //Por las funciones matemáticas
using namespace std;
int main ()
{
float A, B, C;
void clrscr(void);
cout<<"CALCULO DE LA HIPOTENUSA";
cout<<"\n CATETO A:" ;
cin>>A;
cout<<"\n CATETO B:";
cin>>B;
C= sqrt (pow(A,2)+pow(B,2));
cout<<"\n LA HIPOTENUSA ES: "<<C;
getch();
return 0;
}

Página 18

También podría gustarte