Está en la página 1de 16

Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing.

Mirábile Marcelo
Asignatura: Módulo Introductorio

Introducción General
Se pueden usar muchos lenguajes de programación para poder programar una
computadora, el mas básico es el lenguaje de maquina (una combinación de 0 y 1 que
conforman el dialecto que entiende la maquina). Pero lo cierto es que muy pocas veces
se escriben programas en este lenguaje, básicamente por 2 razones: primero porque es
muy incomodo para trabajar y segundo porque cada maquina tiene su propio repertorio
de instrucciones, con lo cual un programa para una maquina debería ser reformado en
gran parte para ser usado en otra maquina.
Lo mas frecuente es utilizar lenguajes de alto nivel donde las instrucciones son
compatibles con el lenguaje humano. La mayoría de este tipo de lenguajes son de
propósito general como C, PHP, ASP, .NET, JAVA, PASCAL, COBOL, VISUAL
BASIC, etc., es decir, que este tipo de lenguajes se utilizan para desarrollar aplicaciones
de diversos tipos que van desde un juego para PC hasta un controlador de vuelo espacial
pasando por un sistema de facturación. Existen también lenguajes de propósito especial
como LISP, un lenguaje orientado al tratamiento de listas, el cual es usado en
aplicaciones de inteligencia artificial, por ejemplo.
Por norma general cada instrucción de un lenguaje de alto nivel será equivalente a
varias en lenguaje maquina, con lo cual una aplicación que se desarrolla en un lenguaje
de alto nivel puede ser ejecutado en varias maquinas sin mayores problemas ni
modificaciones. Llegando a la conclusión de que el uso de lenguajes de alto nivel tiene
3 ventajas “sumamente” importantes respecto al de maquina: sencillez, uniformidad y
portabilidad (independencia de la maquina).
Sin embargo no todo termina aquí, para que un programa escrito en algún lenguaje de
alto nivel pueda ser “reconocido” (ejecutado) por una maquina debe traducirlo al
lenguaje que ella conoce: lenguaje de maquina. He aquí donde se introduce un nuevo
concepto y proceso: compilación o interpretación. Los compiladores traducen el
programa completo a lenguaje maquina antes de ejecutar cualquiera de las
instrucciones, mientras que los interpretes recorren el programa tomando cada
instrucción (o bloques de ellas) la traducen y la ejecutan. Este proceso se realiza
automáticamente y generalmente pasa desapercibido ante los ojos del programador.
El programa original escrito en el lenguaje de alto nivel se denomina fuente mientras
que el compilado (o interpretado) se denomina objeto (en lenguaje maquina).
La mayoría de las implementaciones de C operan como compiladores aunque también
existen intérpretes.
Desde mi punto de vista el programador no debería preocuparse demasiado si un
lenguaje es compilado o interpretado, solo debe concentrarse en solucionar el problema
que tanto lo aqueja; pero sí debe saber que para que la maquina “entienda” lo que él
quiere hacer y/o decir, existe un proceso que traduce a un lenguaje que la maquina
entiende.

1
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

Introducción al Lenguaje C
C es un lenguaje de programación estructurada de propósito general, cuando se dice
“estructurado” se quiere decir que el código esta ordenado (estructurado) y sigue una
secuencia lógica. C tiene economía sintáctica, control de flujo, estructuras sencillas y un
buen conjunto de operadores. No es un lenguaje de muy alto nivel, es más bien un
lenguaje de “medio nivel” pero como su potencia es extrema se lo asocia a un nivel alto.
Es sencillo y no está especializado en ningún tipo de aplicación. Esto lo hace un
lenguaje potente, con un campo de aplicación sumamente amplio y sobre todo, se
aprende rápidamente. Una particularidad mas de este lenguaje es que es sensible al tipo
de escritura, es decir, que no es lo mismo escribir en mayúscula que en minúscula con
lo cual no es lo mismo “valor” que “Valor”. Preferentemente y como norma general
todo el programa se debe escribir en minúscula.
Este lenguaje fue desarrollado originalmente en los Laboratorios BELL en los años
setenta por Dennis Ritchie y Brian Kernighan.

Por qué Aprender C?


Existen ventajas de aprender programación en C antes de C ++ o Java, por ejemplo.
Cuando se trabaja en lenguajes como Java o incluso Python, te inicias inmediatamente
alejándote del aprendizaje de los fundamentos de un lenguaje de programación y
comienzas a aprender librerías y frameworks (marco o esquema de trabajo con reglas a
cumplir) asociados. Pero con C tienes un par de llamadas a librerías, y después tienes
que mantener la concentración en la semántica del lenguaje, y C a menudo te obliga a
pensar más y más profundo acerca de lo que está realmente sucediendo.
Es el lenguaje de los compiladores, intérpretes, editores, sistemas operativos y
programación embebida. Cuando se aprende programación en C casi tienes que
aprender cómo se ejecutan los programas. Aprendes lo que significan cosas como
registro, pila, mapeo de memoria, etc.

Características particulares de C

 Es un lenguaje de propósito general.


 Es de medio nivel. Permite programar a alto nivel (pensando a nivel lógico y no
en la maquina física) y a bajo nivel (máxima eficiencia y control absoluto de lo
que sucede en el interior de una maquina).
 Esta basado en funciones.
 Contiene una biblioteca amplia donde se definen funciones y procedimientos
básicos, que nos ayudan a resolver un problema sin preocuparnos de cosas
elementales como por ejemplo imprimir en pantalla, etc.
 Es un lenguaje portátil.
 Es un lenguaje muy potente y eficiente.

¿Dónde se utiliza todavía la programación en C?

2
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

Los siguientes son algunos de los sistemas que son utilizados por millones de personas
y están programados en el lenguaje C.

 Microsoft Windows, Linux y Mac: Parte de sus núcleos están desarrollados en


C
 Movil: Los kernels de iOS, Android y Windows Phone también están escritos
en C. En realidad son sólo adaptaciones móviles de los kernels existentes en
Mac OS, Linux y Windows. Así que los teléfonos inteligentes que utilizamos
todos los días se están ejecutando en un núcleo con programación en C.
 Bases de datos: Las bases de datos más populares del mundo, incluyendo
bases de datos Oracle, MySQL, MS SQL Server y PostgreSQL, están
codificados en C (los primeros tres de ellos en realidad tanto en C como C ++).
Las bases de datos se utilizan en todo tipo de sistemas: financieros,
gubernamentales, en medios de comunicación, entretenimiento,
telecomunicaciones, salud, educación, comercio minorista, redes sociales, web,
y similares.
 Películas 3D: Las películas en 3D son creadas con aplicaciones que
generalmente están escritas en C y C ++. Esas aplicaciones tienen que ser muy
eficientes y rápidas, ya que manejan una gran cantidad de datos y hacen muchos
cálculos por segundo. Cuanto más eficientes son, menos tiempo toma a los
responsables de crearlas para generar los fotogramas de las películas. Y eso no
solo es tiempo sino también mucho dinero ahorrado.
 Sistemas Embebidos: Con esto nos referimos a que todo aquellos dispositivos
como heladeras, lavarropas, controladores de apertura/cierres de puertas,
sistemas de transmisión de tracción vehicular, controles de airbag, frenos ABS,
sensores en vehículos, terminales de cobro con tarjetas. Todos esos dispositivos
(y muchos más) usan sistemas internos a los que les llama “embebidos”. Aunque
el lenguaje de programación utilizado en sistemas embebidos puede variar de
una marca a otra, con mayor frecuencia utilizan programación en C, debido a las
características de este lenguaje como flexibilidad, eficiencia, rendimiento y
cercanía con el hardware.

3
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

Estructura de un programa en C

El primer programa: Hola Mundo


En un alarde de originalidad vamos a hacer nuestro primer programa: hola mundo.
Nadie puede llegar muy lejos en el mundo de la programación sin haber empezado su
carrera con este original y funcional programa. Allá va:

#include <stdio.h>
int main()
{
/* Aquí va el cuerpo del programa */
printf( "Hola mundo\n" ); /* Esto imprime hola mundo en pantalla */
return 0;
}
Este programa lo único que hace es sacar por pantalla el mensaje:
Hola mundo

Vamos ahora a comentar el programa línea por línea (Esto no va a ser más que una
primera aproximación).

#include <stdio.h>

#include es lo que se llama una directiva. Sirve para indicar al compilador que incluya
otro archivo. Cuando el compilador se encuentra con esta directiva la sustituye por el
archivo indicado. En este caso es el archivo stdio.h que es donde está definida la
función printf, que veremos luego.
int main()

Es la función principal del programa y la mas importante. Todos los programas de C


deben tener una función llamada main. Es la que primero se ejecuta. El int (entero) que
tiene al principio significa que cuando la función main termine devolverá un número
entero. Este valor se suele usar para saber cómo ha terminado el programa.
Normalmente este valor será 0 si todo ha ido bien, o un valor distinto si se ha producido
algún error. De esta forma si nuestro programa se ejecuta desde otro, el programa 'padre'
sabe como ha finalizado, si ha habido errores o no. Se puede usar la definición 'void
main()', que no necesita devolver ningún valor. A lo largo de este curso verás muchos
ejemplos de uso 'void main' y a lo cual le falta, lógicamente, el return 0.
{
Son las llaves que indican el comienzo de una función, en este caso la función main.

/* Aquí va el cuerpo del programa */


Esto es un comentario, no se ejecuta. Sirve para describir el programa. Conviene
acostumbrarse a comentar los programas. Un comentario puede ocupar más de una
línea. Por ejemplo el comentario:
/* Este es un comentario
que ocupa dos filas */
es perfectamente válido.

4
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

printf( "Hola mundo\n" );


Aquí es donde por fin el programa hace algo que podemos ver al ejecutarlo. La función
printf muestra un mensaje por la pantalla. Al final del mensaje "Hola mundo" aparece el
símbolo '\n'; este hace que después de imprimir el mensaje se pase a la línea siguiente.
Fíjate en el ";" del final. Es la forma que se usa en C para separar una instrucción de
otra. Se pueden poner varias en la misma línea siempre que se separen por el punto y
coma.

return 0;
Como he indicado antes el programa al finalizar devuelve un valor entero. Como en este
programa no se pueden producir errores (nunca digas nunca jamás) la salida siempre
será 0. La forma de hacer que el programa devuelva un 0 es usando return. Esta línea
significa 'finaliza la función main haz que devuelva un 0.

}
...y cerramos llaves, con lo que termina el programa. Todos los programas finalizan
cuando se llega al final de la función main.

Librerias en C
Una librería (también conocida como biblioteca) es un conjunto de funciones donde
cada una de ellas tiene un objetivo en particular, como consecuencia de una necesidad
que desde hace un tiempo seguramente un grupo de desarrolladores tenia. Es decir que
para cubrir esa necesidad alguien desarrollo una función para agilizar el desarrollo. Por
ejemplo, en algún momento se tuvo la necesidad de capturar datos por teclado y un
alguien desarrollo esa función y la puso a disposición del resto de los desarrolladores.
Cuando la cantidad de esas funciones es numerosa se las agrupa en un archivo y a ese se
lo llama “librería”, por ejemplo C tiene una librería que se llama “stdio” la cual contiene
funciones básicas de ingreso y salida de datos.
En C, es necesario que el programador invoque todos aquellos archivos de librerías o
bibliotecas, que necesite, al comienzo del programa. La extensión de un archivo de
librería es .h (en algunas distribuciones de C puede que sean .cpp), es decir
nombre_librería.h El modo de incluir una librería es de la siguiente forma:

#include < librería.h >

Las librerías más importantes de C:


 stdio.h: contiene los prototipos de funciones y los tipos de datos para manipular
sus entradas y salidas.
 conio.h: Biblioteca no estándar de C, que incluye funciones específicas para el
control de entrada y salida por consola de una determinada plataforma, tal como
DOS.
 stdlib.h: Contiene tipos, macros y funciones para la conversión numérica,
generación de números aleatorios, búsquedas y ordenación, gestión de memoria
y tareas similares. string.h: Contiene los prototipos de las funciones y macros de
clasificación de caracteres.

5
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

 math.h: Contiene los prototipos de las funciones y otras definiciones para el uso
y manipulación de funciones matemáticas.
 time.h: Contiene los prototipos de las funciones, macros, y tipos para manipular
la hora y la fecha del sistema.
 iostream.h: Está especializada en la lectura y escritura de archivos. Es exclusiva
de C++.Algunas funciones que contiene son cout(), cin(), min(), max().
 cstring.h: Declara un conjunto de funciones principalmente para manipulación
de elementos tipo string. Algunas funciones que incluye son strcat() memcmp()
strpbrk() strlen() memset(). Se puede usar en C/C++.

Una mayor descripción de las librerías más importantes de C, se encuentra en el archivo


indicado en el aula virtual.

Nota: En un programa puede utilizarse más de una librería y el orden es indistinto,


siempre y cuando se ubiquen en la cabecera.

Variables
Una variable es un identificador que se utiliza para representar cierto tipo de
información. Una variable contendrá un dato simple (una cantidad numérica o un
carácter), en algún lugar del programa se le asignara ese valor (ya sea por teclado o
predefinido) y en otra parte se deseara usar ese valor para realizar algún trabajo
necesario. Se aclara también que durante el desarrollo del programa se le puede ir
asignando distintos valores a una misma variable, sin embargo el tipo de dato de esa
variable no puede cambiar.
A continuación se presenta la forma de declarar una variable y la forma de usarla:

int a, b, c;
char d;
..
a=2;
b=3;
c=a+b;
d=’f’;
..
a=5;
b=9;
c=a-b;
d=’W’;

Las 2 primeras líneas son declaraciones de tipo. El resto es una forma ejemplificada de
cómo se pueden usar esas variables.
Declaración de una variable

6
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

Una declaración asocia un tipo de datos determinado a una variable o grupo de ellas. Se
deben declarar todas las variables antes de que aparezcan sentencias ejecutables. Una
declaración consiste en un tipo de datos, seguido de una o mas variables, finalizando
con un punto y coma.

Ámbito de las variables


La declaración de las variables lleva asociado un ámbito, dentro del cual la variable es
visible:
– Ámbito global: La variable es visible para todas las funciones del programa.
– Ámbito local: La variable es visible sólo dentro de la función. (Tiene prioridad sobre
el ámbito global).

int x,y;
int main()
{
float x,z;
/* Aquí x y z son reales*/
}
/* Aquí x e y son variables enteras */
/* La variable z no existe fuera de la función */

Tipos de Datos
VARIABLES DEL TIPO ENTERO

TIPO BYTES VALOR MINIMO VALOR MAXIMO


signed char 1 -128 127
unsigned char 1 0 255
signed short 2 -32.768 +32.767
unsigned short 2 0 +65.535
signed int 4 -2.147.483.648 +2.147.483.648
unsigned int 4 0 +4.294.967.295
signed long 4 -2.147.483.648 +2.147.483.647
unsigned long 4 0 +4.294.967.295
NOTA: Si se omite el calificador delante del tipo de la variable entera, éste se adopta
por omisión (default) como "signed".

VARIABLES DE NUMERO REAL O PUNTO FLOTANTE


Un número real ó de punto flotante es aquel que además de una parte entera, posee
fracciones de la unidad. En nuestra convención numérica solemos escribirlos de la
siguiente manera: 2,3456, lamentablemente los compiladores usan la convención del
PUNTO decimal (en vez de la coma).

TIPO BYTES VALOR MINIMO VALOR MAXIMO


float 4 3.4E-38 3.4E+38
double 8 1.7E-308 1.7E+308

7
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

long double 10 3.4E-4932 3.4E+4932

Las variables de punto flotante son SIEMPRE con signo, y en el caso que el exponente
sea positivo puede obviarse el signo del mismo.

VARIABLES DE TIPO CARACTER


El lenguaje C guarda los caracteres como números de 8 bits de acuerdo a la norma
ASCII extendida, que asigna a cada carácter un número comprendido entre 0 y 255 ( un
byte de 8 bits) Es común entonces que las variables que vayan a alojar caracteres sean
definidas como:

char c ;

Sin embargo, también funciona de manera correcta definirla como

int c ;

Esta última opción desperdicia un poco más de memoria que la anterior, pero en
algunos casos particulares presenta ciertas ventajas.
Las variables del tipo carácter también pueden ser inicializadas en su definición, por
ejemplo es válido escribir:

char c = 97 ;

para que c contenga el valor ASCII de la letra "a", sin embargo esto resulta algo
engorroso , ya que obliga a recordar dichos códigos . Existe una manera más directa de
asignar un carácter a una variable; la siguiente inicialización es idéntica a la anterior:

char c = 'a' ;

Es decir que si delimitamos un carácter con comilla simple, el compilador entenderá


que debe suplantarlo por su correspondiente código numérico.

CONSTANTES
Aquellos valores que, una vez compilado el programa no pueden ser cambiados suelen
denominarse CONSTANTES. Un ejemplo de declaración.

#define PI 3.1416;
Aquí lo que se hace es definir la variable PI con el valor 3.1416.

Otro ejemplo es el siguiente:


const a = 1;
Tanto una como otra es válida. El valor que se le asigna es el que usara durante la
ejecución del programa.

OPERADORES

Si analizamos la sentencia siguiente:

8
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

var1 = var2 + var3;


estamos diciéndole al programa, por medio del operador +, que compute la suma del
valor de dos variables , y una vez realizado esto asigne el resultado a otra variable var1.
Esta última operación (asignación) se indica mediante otro operador, el signo =.
El lenguaje C tiene una amplia variedad de operadores, y todos ellos caen dentro de 6
categorías, a saber: aritméticos, relacionales, lógicos, incremento y decremento, manejo
de bits y asignación. Todos ellos se irán describiendo en los párrafos subsiguientes.

OPERADORES ARITMETICOS
Comprenden las cuatro operaciones básicas, suma, resta, multiplicación y división, con
un agregado, el operador módulo.

SIMBOLO DESCRIPCION EJEMPLO ORDEN DE EVALUACION


+ SUMA a+b 3
- RESTA a-b 3
* MULTIPLICACION a*b 2
/ DIVISION a/b 2
% MODULO a%b 2
- SIGNO -a 2

El operador módulo ( % ) se utiliza para calcular el resto del cociente entre dos
ENTEROS , y NO puede ser aplicado a variables del tipo float ó double.
Si bien la precedencia (orden en el que son ejecutados los operadores) se analizará más
adelante, en este capítulo, podemos adelantar algo sobre el orden que se realizan las
operaciones aritméticas.
En la anterior, la última columna, da el orden de evaluación de un operador dado.
Cuanto más bajo sea dicho número mayor será su prioridad de ejecución. Si en una
operación existen varios operadores, primero se evaluarán los de multiplicación,
división y módulo y luego los de suma y resta.
Se puede observar que no existen operadores de potenciación, radicación,
logaritmación, etc, ya que en el lenguaje C todas estas operaciones ( y muchas otras ) se
realizan por medio de llamadas a Funciones.
El último de los operadores aritméticos es el de SIGNO. No debe confundírselo con el
de resta, ya que este es un operador unitario que opera sobre una única variable
cambiando el signo de su contenido numérico. Obviamente no existe el operador +
unitario, ya que su operación sería DEJAR el signo de la variable, lo que se consigue
simplemente por omisión del signo.

OPERADORES RELACIONALES
Todas las operaciones relacionales dan sólo dos posibles resultados: VERDADERO ó
FALSO. En el lenguaje C, Falso queda representado por un valor entero nulo (cero) y
Verdadero por cualquier número distinto de cero En la siguiente tabla se encuentra la
descripción de los mismos.

SIMBOLO DESCRIPCION EJEMPLO ORDEN DE EVALUACION


< menor que (a < b) 5

9
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

> mayor que (a >b) 5


<= menor o igual que (a < = b) 5
>= mayor o igual que ( a >= b ) 5
== igual que ( a = = b) 6
!= distinto que ( a != b) 6

Uno de los errores más comunes es confundir el operador relacional IGUAL QUE (= =)
con el de asignación IGUAL A (=). La expresión a=b copia el valor de b en a, mientras
que a = = b retorna un cero, si a es distinto de b ó un número distinto de cero si son
iguales.

OPERADORES LOGICOS
Hay tres operadores que realizan las conectividades lógicas Y (AND), O (OR) y
NEGACION (NOT) y están descriptos en la siguiente tabla.

SIMBOLO DESCRIPCION EJEMPLO ORDEN DE EVALUACION


&& Y (AND) (a>b) && (c < d) 10
|| O (OR) (a>b) || (c < d) 11
! NEGACION (NOT) !(a>b) 1

Los resultados de la operaciones lógicas siempre adoptan los valores CIERTO ó


FALSO. La evaluación de las operaciones lógicas se realiza de izquierda a derecha y se
interrumpe cuando se ha asegurado el resultado.
El operador NEGACION invierte el sentido lógico de las operaciones, así será

!( a > b ) equivale a ( a < b )


!( a == b ) " " ( a != b )

En algunas operaciones suele usárselo de una manera que se presta a confusión, por
ejemplo: ( !i ) donde i es un entero. Esto dará un resultado CIERTO si i tiene un valor 0
y un resultado FALSO si i es distinto de cero.

OPERADORES DE INCREMENTO Y DECREMENTO

Los operadores de incremento y decremento son sólo dos y están descriptos en la tabla
siguiente.

SIMBOLO DESCRIPCION EJEMPLO ORDEN DE EVALUACION


++ incremento ++i ó i++ 1
-- decremento --i ó i-- 1

Para visualizar rapidamente la función de los operadores antedichos, digamos que las
sentencias:

10
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

a = a + 1;
a++ ;

tienen una acción idéntica , de la misma forma que


a = a - 1;
a--;

es decir incrementa y decrementa a la variable en una unidad. Si bien estos operadores


se suelen emplear con variables int, pueden ser usados sin problemas con cualquier otro
tipo de variable. Así si a es un float de valor 1.05 , luego de hacer a++ adoptará el valor
de 2.05 y de la misma manera si b es una variable del tipo char que contiene el carácter
‘C', luego de hacer b-- su valor será 'B'.
Si bien las sentencias
i++;
++i;

son absolutamente equivalentes, en la mayoría de los casos la ubicación de los


operadores incremento ó decremento indica CUANDO se realiza éste.

Veamos el siguiente ejemplo:


int i = 1 , j , k ;
j = i++ ;
k = ++i ;
acá j es igualado al valor de i y POSTERIORMENTE a la asignación i es incrementado
por lo que j será igual a 1 e i igual a 2 , luego de ejecutada la sentencia . En la siguiente
instrucción i se incrementa ANTES de efectuarse la asignación tomando el valor de 3 ,
él que luego es copiado en k.

OPERADORES DE ASIGNACIÓN
En principio puede resultar algo inútil gastar papel en describir al operador IGUAL A (
= ), sin embargo es necesario remarcar ciertas características del mismo.
Por ejemplo:

a = 17 ;
pero no es aceptado , en cambio
17 = a ; /* incorrecto */
ya que la constante numérica 17 no posee una ubicación de memoria donde alojar al
valor de a.
Aunque parezca un poco extraño al principio las asignaciones, al igual que las otras
operaciones, dan un resultado que puede asignarse a su vez a otra expresión.
De la misma forma que (a + b) es evaluada y su resultado puedo copiarlo en otra
variable : c = (a + b) ; una asignación (a = b) da como resultado el valor de b , por lo
que es lícito escribir
c = ( a = b );
Debido a que las asignaciones se evalúan de derecha a izquierda, los paréntesis son
superfluos , y podrá escribirse entonces :
c = a = b = 17;

11
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

con lo que las tres variables resultarán iguales al valor de la constante.


El hecho de que estas operaciones se realicen de derecha a izquierda también permite
realizar instrucciones del tipo:
a = a + 17 ;
significando esto que al valor que TENIA anteriormente a , se le suma la constante y
LUEGO se copia el resultado en la variable.
Como este último tipo de operaciones es por demás común, existe en C un
pseudocódigo, con el fín de abreviarlas.

Por ejemplo
a += b ; /* equivale : a = a + b */
a -= b ; /* equivale : a = a - b */
a *= b ; /* equivale : a = a * b */
a /= b ; /* equivale : a = a / b */
a %= b ; /* equivale : a = a % b */

Nótese que el pseudooperador debe escribirse con los dos símbolos seguidos, por
ejemplo += , y no será aceptado +(espacio) =.
Los operadores de asignación están resumidos en la tabla siguiente.

SIMBOLO DESCRIPCION EJEMPLO ORDEN DE EVALUACION


= igual a a=b 13
op= pseudocodigo a += b 13
=?: asig.condicional a = (c>b)?d:e 12

Como habrán notado a esta altura de la materia hemos hablado de 2 funciones muy
importantes para nuestra programación en C, scanf y printf. A continuación se trata de
explicar la funcionalidad de cada una de ellas.

Imprimir en pantalla

Printf:
Siempre he creído que cuando empiezas con un nuevo lenguaje suele gustar el ver los
resultados, ver que nuestro programa hace 'algo'. Por eso creo que el curso debe
comenzar con la función printf, que sirve para sacar información por pantalla. Para
utilizar la función printf en nuestros programas debemos incluir la directiva:

#include <stdio.h>

al principio de programa.
Si sólo queremos imprimir una cadena basta con hacer (no olvides el ";" al final):

printf( "Cadena" );

Esto resultará por pantalla:

12
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

Cadena
Lo que pongamos entre las comillas es lo que vamos a sacar por pantalla.
Si volvemos a usar otro printf, por ejemplo:
#include <stdio.h>
int main()
{
printf( "Cadena" );
printf( "Segunda" );
}
Obtendremos:
CadenaSegunda

Este ejemplo nos muestra cómo funciona printf. Para escribir en la pantalla se usa un
cursor que no vemos. Cuando escribimos algo el cursor va al final del texto. Cuando el
texto llega al final de la fila, lo siguiente que pongamos irá a la fila siguiente. Si lo que
queremos es sacar cada una en una línea deberemos usar "\n". Es el indicador de retorno
de carro. Lo que hace es saltar el cursor de escritura a la línea siguiente:
#include <stdio.h>
int main()
{
printf( "Cadena\n" );
printf( "Segunda" );
}
y tendremos:
Cadena
Segunda

También podemos poner más de una cadena dentro del printf:


printf( "Primera cadena" "Segunda cadena" );

Algo muy usual en un programa es esperar que el usuario introduzca datos por el
teclado. A continuación veremos algunas que usaremos a lo largo del curso.

Cout:
Otra alternativa para poder mostrar información por la salida estándar de una PC es usar
la instrucción “cout”. Esta es una instrucción que viene incorporada en la librería
“iostream” de C++ (note que se puede utilizar libremente aun cuando estamos
programando en C), es por ello que para poder hacer uso de dicha instrucción debemos
incorporar dicha librería.
Veamos algunos ejemplos de uso:

#include <iostream>
using namespace std;
int main() {
cout << “Hola MUNDO “ << endl;
cout << “Hola C++ “ << endl;
}
Es importante tener en cuenta que la instrucción cout siempre va acompañada

13
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

de << para controlar el flujo de datos que sale. La instrucción << endl hace que luego
de imprimir el texto por pantalla se imprima un salto de línea.
Veamos el mismo ejemplo pero “concatenando” texto dentro de la instrucción:

#include <iostream>
using namespace std;
int main() {
cout << “Hola MUNDO, “ << “ Hola C++ “ << endl;
}
Note como puedo ir concatenando texto (o información alojada en una variable) en una
instrucción cout.

Leer datos desde teclado

Scanf:
El uso de scanf es muy similar al de printf con una diferencia, nos da la posibilidad de
que el usuario introduzca datos en vez de mostrarlos. No nos permite mostrar texto en la
pantalla, por eso si queremos mostrar un mensaje usamos un printf delante. Un ejemplo:

#include <stdio.h>
int main()
{
int num;
printf( "Introduce un número " );
scanf( "%i", &num );
printf( "Ingresamos el número %i\n", num );
}

En definitiva la sintaxis de la función sería la siguiente:

scanf("secuencia de control", dirección de la variable ) ;

Donde en la secuencia de control se indicará que tipo de variable se espera leer. A


continuación se detallan algunas de las posibles secuencias de control:

%d si se desea leer un entero decimal (int)

%o " " " " " " octal "

%x " " " " " " hexadecimal "


%c " " " " " caracter
%f leerá un float
%ld leerá un long int
%lf leerá un double
%Lf leerá un long double

Cin
Asi como la instrucción “cout” es una alternativa a la función “printf”, cin lo es para
scanf.
En definitiva, cin es el flujo de entrada estándar que normalmente es el teclado.

14
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

Veamos un ejemplo:

#include <iostream>
using namespace std;
int main()
{
int numero;
cout << "Ingrese el 1er numero entero: ";
cin >> numero;
cout << "El numero ingresado es: " << numero;
return 0;
}

A diferencia de la instrucción cout, la instrucción cin usa los símbolos >> para poder
cumplir con su objetivo. En definitiva, la instrucción cin >> numero lo que permite es
que el dato que se ingrese por teclado se le asignara a la variable numero.
Otro ejemplo mas completo:

#include <iostream>
using namespace std;
int main()
{
cout << "Hola! Aqui podras realizar sumas" << "\n";

//Se declaran los números que se sumarán (pueden ser decimales)


float numero1, numero2;

//Se pide el primer numero


cout << "Por favor ingrese el primer valor: " << "\n";

//Se asigna el primer valor a numero1


cin >> numero1;

//Se pide el segundo numero


cout << "Por favor ingrese el segundo valor: " << "\n";

//Se asigna el segundo valor a numero2


cin >> numero2;

//Se muestra el resultado.


cout << numero1 << " + " << numero2 << " = " << numero1 + numero2;

return 0;
}
En el ejemplo anterior se están solicitando números y luego realizando operaciones
matemáticas con ellos.

Getch y getche
Si lo que queremos es que el usuario introduzca un caracter por el teclado usamos las
funciones getch y getche. Estas esperan a que el usuario introduzca un carácter por el
teclado. La diferencia entre getche y getch es que la primera saca por pantalla la tecla
que hemos pulsado y la segunda no (la e del final se refiere a echo=eco). Ejemplos:
#include <stdio.h>
int main()
{
char letra;
printf( "Introduce una letra: " );

15
Carrera: Tecnicatura en Desarrollo de Software Profesor: Ing. Mirábile Marcelo
Asignatura: Módulo Introductorio

fflush( stdout );
letra = getche();
printf( "\nHas introducido la letra: %c", letra );
}

Resultado:

Introduce una letra: a


Has introducido la letra: a

Quizás te estés preguntando qué es eso de fflush( stdout ). Pues bien, cuando usamos la
función printf, no escribimos directamente en la pantalla, sino en una memoria
intermedia (lo que llaman un buffer). Cuando este buffer se llena o cuando metemos un
carácter '\n' es cuando se envia el texto a la pantalla. En este ejemplo yo quería que
apareciera el mensaje Introduce una letra: y el cursor se quedara justo después, es decir,
sin usar '\n'. Si se hace esto, en algunos compiladores el mensaje no se muestra en
pantalla hasta que se pulsa una tecla (pruébalo en el tuyo). Y la función fflush( stdout )
lo que hace es enviar a la pantalla lo que hay en ese bufer.
Y ahora un ejemplo con getch:

#include <stdio.h>
int main()
{
char letra;
printf( "Introduce una letra: " );
fflush( stdout );
letra = getch();
printf("\n has introducido la letra :%c", letra );
}
Resultado:

Introduce una letra:


Has introducido la letra: a

Como vemos la única diferencia es que en el primer ejemplo se muestra en pantalla lo


que escribimos y en el segundo no.

16

También podría gustarte