Вы находитесь на странице: 1из 32

CONTENIDO UNIDAD I

Breve resea histrica del lenguaje de programacin en C

C es un lenguaje de programacin de propsito general


que ofrece economa sintctica, control de flujo y estructuras sencillas y un buen conjunto de
operadores. No es un lenguaje de muy alto nivel y ms bien un lenguaje pequeo, sencillo y no est
especializado en ningn tipo de aplicacin. Esto lo hace un lenguaje potente, con un campo de
aplicacin ilimitado y sobre todo, se aprende rpidamente. En poco tiempo, un programador puede
utilizar la totalidad del lenguaje.
Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados
conjuntamente. Sin embargo, este lenguaje no est ligado a ningn sistema operativo ni a ninguna
mquina concreta. Se le suele llamar lenguaje de programacin de sistemas debido a su utilidad para
escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar cualquier tipo
de aplicacin.
La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en
1970 para el primer sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al contrario que el
C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, nmeros enteros y en coma
flotante, de varios tamaos. Adems se pueden crear tipos derivados mediante la utilizacin de punteros,
vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC
PDP-11 y escribi el propio sistema operativo en Introduccin al lenguaje C.
C trabaja con tipos de datos que son directamente tratables por el hardware de la mayora de
computadoras actuales, como son los caracteres, nmeros y direcciones. Estos tipos de datos pueden ser
manipulados por las operaciones aritmticas que proporcionan las computadoras. No proporciona
mecanismos para tratar tipos de datos que no sean los bsicos, debiendo ser el programador el que los
desarrolle. Esto permite que el cdigo generado sea muy eficiente y de ah el xito que ha tenido como
lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de almacenamiento de datos que
no sea el esttico y no proporciona mecanismos de entrada ni salida. Ello permite que el lenguaje sea
reducido y los compiladores de fcil implementacin en distintos sistemas. Por contra, estas carencias se

compensan mediante la inclusin de funciones de librera para realizar todas estas tareas, que
normalmente dependen del sistema operativo.
Originariamente, el manual de referencia del lenguaje para el gran pblico fue el libro de Kernighan y
Ritchie, escrito en 1977. Es un libro que explica y justifica totalmente el desarrollo de aplicaciones en C,
aunque en l se utilizaban construcciones, en la definicin de funciones, que podan provocar confusin
y errores de programacin que no eran detectados por el compilador. Como los tiempos cambian y las
necesidades tambin, en 1983 ANSI establece el comit X3J11 para que desarrolle una definicin
moderna y comprensible del C. El estndar est basado en el manual de referencia original de 1972 y se
desarrolla con el mismo espritu de sus creadores originales. La primera versin de estndar se public
en 1988 y actualmente todos los compiladores utilizan la nueva definicin. Una aportacin muy
importante de ANSI consiste en la definicin de un conjunto de libreras que acompaan al compilador y
de las funciones contenidas en ellas. Muchas de las operaciones comunes con el sistema operativo se
realizan a travs de estas funciones. Una coleccin de ficheros de encabezamiento, headers, en los que
se definen los tipos de datos y funciones incluidas en cada librera. Los programas que utilizan estas
bibliotecas para interactuar con el sistema operativo obtendrn un comportamiento equivalente en otro
sistema.

Variables, constantes, identificadores y tipos de datos


Las Variables en C
A la hora de elaborar un programa es necesario usar unos datos, y para ello es imprescindible en
muchos casos grabar esos datos en memoria para o perar con ellos posteriormente. Recordemos que
no es lo mismo grabar los datos en memoria que grabarlos en el disco duro. Cuando decimos grabar
en memoria dentro de un lenguaje de programacin nos estaremos refiriendo a grabar esos datos en la
RAM.
Ahora bien, para grabar esos datos en la RAM podemos hacerlo racionalmente con dos
elementos, llamados: variables y constantes.
Los dos elementos funcionan como fuentes de almacenamiento de datos, la gran diferencia entre los
dos es que en el caso de las constantes su valor dado no varia en el transcurso de todo el programa o
cdigo. Tanto las variables como las constantes podra decirse que son direcciones de memoria con
un valor, ya sea un numero, una letra, o valor nulo.
Variables: Elementos de almacenamiento de datos o direcciones de memoria, que pueden variar
en el desarrollo o proceso del programa.
Tanto las variables como las constantes las utilizamos a la hora de programar para almacenar en
ellas unos datos determinados y poder nombrarlas en cualquier parte de nuestro cdigo-programa
para que nos devuelvan esos datos anteriormente introducidos.
Definicin de una variable
Definir una variable es indicar el tipo de dato que va a contener y almacenar, y en funcin de esto
reservar una determinada direccin de memoria o palabra de memoria (es la cantidad de bytes que
ocupa un tipo de dato). Con lo que si queremos que una variable contenga un dato numrico
deberemos de definirla de distinta forma que si queremos que contenga una cadena de caracteres.
Cuando definimos una variable no le estamos introduciendo ningn valor, sino que nicamente
estamos indicando que tipo de valor va almacenar posteriormente. Es obligatorio que siempre
definamos una variable antes de introducir en ella un valor, y esto es as porque es necesario que se
reserve en memoria un espacio limitado mas o menos grande dependiendo del tipo de dato que vaya a
albergar dicha variable.
Para definir una variable
La sintaxis a seguir es: [cualificador] <tipo> <ID>
En manuales o tutoriales d e informtica lo que se encuentra entre corchetes es opcional y el resto
es obligatorio.
Ante esa sintaxis, decimos que donde cualificador podemos poner opcionalmente uno de los
disponibles
que se encargan de variar o alterar el tipo de dato (ser explicado a continuacin), posteriormente
ira el tipo de dato, ya sea entero, decimal, etc. Y por ultimo el identificador o nombre de la variable.

Tipos de datos
En cualquier lenguaje de programacin es muy importante saber manejar los distintos tipos de datos
que te permite almacenar y trabajar con ellos. Como ya vimos anteriormente las variables almacenan
datos. Pero a la hora de definirlas hay que indicarles que tipo de dato van a almacenar. No es lo
mismo que una variable almacene el numero 5000, a que almacene la letra C. Existen 4
distintos tipos de datos en C, cada uno de los cuales reserva una zona mayor o menor en memoria
(segn sus necesidades), y esta preparada para almacenar un tipo de dato en concreto. En otro
lenguaje como el scriptting las va riables se definen y una vez definidas puedes almacenar cualquier
tipo de dato sin antes hacer alusin a el. Esto no pasa en C ni en la mayora de lenguajes grandes. En
C su potencialidad obliga a ello.
Existen 4 tipos de datos en C:
1) int Almacenan nmeros enteros (sin decimales). Este tipo limita el rango numrico de
32767 a
32767. Este tipo reserva en memoria 16 bits o lo que es lo mismo 2 bytes.
2) char Almacena un carcter o caracteres, en realidad lo que hace es almacenar un numero del
0 al 255 que son los nmeros que identifican a un carcter que corresponde a la tabla ascii.
Este tipo ocupa en memoria 1 byte.
3) float Tipo para definir que una variable almacenara nmeros decimales. Su rango numerico
es de 3,4E-38 a 3,4E38. Su espacio en memoria es de: 4 bytes.
4) double Igual que la anterior pero es capaz de almacenar mayores cadenas numricas.
Rango
de 1,7E-307 a 1,7E308. Su espacio en memoria es de 8 bytes.
Algunos tipos admiten unos prefijos a los cuales se les suelen llamar cualificadores, estos son: short
(corto), long(largo), signed(con signo + o -), unsigned (sin signo).
Estos cualificadores se colocan al principio del tipo y lo cualifican, ejemplos:
Short int identificador : esto definir a una variable de tipo entero y corto.
Unsigned float identificador : esto definir una variable de coma flotante o sea decimal y sin signo.

Identificadores
Los identificadores son las palabras con las que identificamos o llamamos a una variable o constante.
A la hora de dar nombre a una variable, o sea a la hora de identificar una variable debemos de tener
en cuenta unas reglas de nomenclatura, marcadas por el lenguaje de programacin en C.
Reglas de nomenclatura para los identificadores
Los nombres de los identificadores pueden llevar caracteres alfa -numricos. Letras de la A a la Z
excluyendo la que no vale . Y todos los nmeros. Si es obligatorio que el nombre del
identificador empiece por una letra y no un numero u otro signo.
Los identificadores solo aceptan el signo _ (guin bajo-subrayado), por tanto quedan excluidos otros
como

el signo de interrogacin, los parntesis, etc.


Tampoco podremos usar como identificadores las palabras reservadas de un lenguaje, palabras
tales como: if, else, goto, etc.
El numero de caracteres de un identificador nunca debe sobrepasar los 31. Algunos compiladores
solo reconocen los 8 primeros caracteres de los identificadores. Esto ya depende del potencial del
compilador. Recordemos que en C se distinguen entre maysculas y minsculas con lo cual es
distinto un identificador tal como, Suma que otro como suma. (Por convenio se ha decidido que los
identificadores estn escritos en minsculas.)
Lgicamente a la hora de dar nombre a una variable o constante, utilizaremos identificadores que nos
hagan referencia o semejanza a l dato que almacenan. Con lo que si necesitamos una variable para
almacenar la cadena de caracteres: Hola, seria conveniente llamar o identificar esta variable como
saludo y no como x. Los nombres de variables y constantes o sea los identificadores es adecuado que
si su valor almacenado tiene relacin unos con otros, los nombres de los identificadores tambin
tengan esa relacin (de forma lxica). Con todo esto lo que quiero decir es que nunca escatimemos en
el tiempo de bsqueda para dar nombre a una variable o constante. Si le damos un nombre cualquiera
luego al repasar el cdigo todo nos resultara mas confuso.
Palabras reservadas
Hay ciertos indicadores, identificadores o palabras llamadas palabras reservadas (valga la
redundancia) que no se pueden usar como identificadores, puesto que ya son usadas por el propio
lenguaje para una finalidad determinada.
Estas palabras son por lo general en ingles . Lo bueno es que no hace falta tener mucho nivel de
ingles para comprenderlas .
Algunas de estas palabras son: auto, break, case, char, const, continue, default, do, double, else,
enum, extern, flota, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch,
typedef, union, unsigned, void, volatile, while.
Definiendo variables
1) int suma
2) long float resultado
3) c har letra
1: En el primer caso estamos definiendo una variable de tipo entero (int). O sea una variable que
almacenara un dato numrico entero, sin decimales. Dicha variable es identificada por el nombre
suma (su identificador).
2: En el segundo de los casos, definimos una variable de tipo de coma flotante o lo que es lo
mismo decimal y a dems le atribuimos el cualificador long lo que hace que sea un a variable de
tipo decimal larga, esto hace que su rango numrico aumente. Y su nombre o identificador es:
resultado.
3: En el tercer y ultimo caso definimos una variable de tipo carcter, y esta almacenara un carcter. Su
ID
es: letra.
Asignacin de va lores a variables
Es aqu cuando estamos verdaderamente introduciendo un dato dentro de una variable (direccin de
memoria). Una vez que tenemos una variable definida, esta ya esta lista para albergar en su interior

un dato pero esto solo podr ser del ti po con el que se a definido la variable. Cuando metemos en
una variable un dato se dice que la estamos declarando. Aunque el concepto y la diferencia entre
definir y declarar no es muy claro.
Para mi, definir una variable es reservar el espacio en memoria y decir de que tipo va a ser, y cuando
le
metemos un dato ya estamos declarndola. Mas adelante esta definicin se emplea a la inversa para
las funciones.
Vamos a introducir valores a las variables definidas en el ejemplo anterior.
1) suma=2;
2) resultado=10.5;
3) letra=A;
1: Aqu estamos introduciendo el numero 2 dentro de la variable suma. Con lo que suma pasara a valir
2.
2: En el segundo caso, damos un numero decimal que introducimos dentro de la variable de tipo
decimal. As pues, la variable resultado a hora vale 10.5.
3: Por ultimo la variable de carcter letra le asignamos la letra a. Desde entonces siempre que
sea nombrada o referida por su identificativo nos devolver la letra a. Podramos declararla de otra
forma obteniendo el mismo resultado, tal y como es: letra = 65; De esta otra forma obtendramos
el mismo resultado pues que coge los nmeros identiicativos a caracteres de la tabla ASCII.

Tamao de una variable


Cuando definimos una variable, debemos saber con prioridad si va a almacenar una cantidad de bits
pequea o grande. Si la variable es de tipo entero (int) y almacena un numero mayor del rango que
tiene este tipo de dato, se producir un overflow. A la hora de hacer un programa debemos ser
previsores e intentar poner el tipo de dato con un rango que soporte las posibles cifras a introducir en
ese programa. Por ello es bueno conocer la forma de averiguar el rango de un tipo de dato, puesto
que sabrselos de memoria es tontera e imposible.
Para conocer el tamao o rango numrico que al canza un determinado tipo de dato se usa la funcin
sizeof.
#include <stdio.h>
main () {
printf( "El tipo de dato entero (int) ocupa %i bytes \n", sizeof(int));
}
En este programa saldr imprimido 4 bytes . Sabiendo que un byte son 8 bits, (4*8) son el
resultado de bits que ocupa el tipo de dato entero (int). Para calcular el mximo numero del rango que
puede alcanzar este tipo de dato se hace elevando (2^32) a la 32 que era el numero de bits y
obtenemos 4.294.967.296. Pero esta cifra podra variar en funcin del uso de los ya anteriormente
llamados cualificadores. La funcin sizeof se encuentra dentro de la librera stdio.h.

Uso de la funcin printf, pasando el argumento o parmetro de una variable


Nosotros cuando operamos con los distintos tipos de datos podemos o no saber la cifra que
van a devolver. Lo mejor ser verlo con un ejemplo.
#include <stdio.h>
main () {
int num1,num2,resultado;
num1=3;
num2=2;
resultado=num1+num2;
printf( "\nEl resultado es: %d,resultado);
}
Lo que hacem os en este pequeo programa es:
1) Definimos 3 variables de tipo entero: num1,num2,resultado.
2) Le damos a num1 el valor 3.
3) Le aadimos a num2 el valor 2.
4) Le damos el valor a resultado de la suma de las dos anteriores variables (num1 + num2).
5) Imprimimos por pantalla el valor de resultado.
El meollo de la cuestin esta en el 5 paso. Con este tipo de paso de parmetros al printf
estaremos continuamente trabajando as que no hay mas remedio que entenderlo .
Tenemos la funcin: printf( "\nEl resultado es: %d,resultado); Fijndonos en ella veriamos que el
texto que se deberia de imprimir es el que esta entre comillas, o sea "\nEl resultado es: %d Y as es
lo nico que no sale es el %d que es sustituido por el valor de la variable que hay al cerrar las
comillas despus de la coma.
Veamos otro ejemplo, que hace lo mismo pero con mejor presencia.
#include <stdio.h>
main () {
int num1,num2,resultado;
num1=3;
num2=2;
resultado=num1+num2;
printf( "\nEl resultado de %d + %d es igual a %d,num1,num2,resulta do);
}
Los primeros pasos hacen los mismo que el anterior ejemplo, debemos centrarnos en la ultima
orden, la funcin printf. El primer %d es sustituido en orden por el valor de num1, el segundo por
el valor de la variable num2, y el ultimo %d es sustituid o por la ultima variable resultado.
Ahora bien, no siempre es %d lo que hay que poner para que lo sustituya por el valor de la variable
pasada a la funcin. Segn el tipo de dato que contenga la variable pasada debemos poner %d
(enteros),
%c (carcter), % f (decimales), etc.
Al %d se le llama cadena de control Tipos
de cadenas de control.
%c = carcter

%d = decimal
%e,f,g = real
%h = entero corto
%i = entero que puede ser octal decimal o hexadecimal.
%o = entero octal
%u = estero decimal sin signo
%x = entero hexadecimal
%s = cadena de caracteres acabada por un espacio.
%[...] = una cadena de caracteres que puede incluir espacios.
Ahora hagamos otro programa entero de ejemplo.
#include <stdio.h>
main () {
int num1,num2=0;
char txt;
clrscr();
printf(\nEste programilla mostrara el valor de 3 variables);
printf(\n); num1=5;
txt=B;
printf(\nEl valor de la variable num1 es: %d,num1);
printf(\nEl valor de la variable num2 es: %d,num2);
printf(\nEl valor de la variable txt es: %c,txt);
printf(\n);
printf(\nFin del programa);
printf(\n);
}
Que pasara si definimos una variable y le asignamos un valor mayor del rango numrico que nos
permite el tipo de su asignacin?
Lo que pasara en tal cosa seras que si por ejemplo definimos una variable de tipo entero y supera el
rango numrico de 32767 pasara al siguiente numero y este seria el 32767. Puesto que no existe
un numero mayor en el rango de ese tipo de definicin de variables enteras. El compilador nos dira
warnig y se producira un overflow.
Las variables pueden ser segn su funcionamiento o dato almacenado
Las variables por contador: Son un tipo de variables muy usadas en los bucles, rizos o procesos de
repeticin. Estas tipo de variables tienen un valor inicial y entran en un bucle y en funcin de
una condicin van incrementando o decrementando su valor inicial hasta la salida del bucle.
Las variables por acumulador: Este otro tipo de variables, lo que hacen es ir acumulando los
valores, son las mas usuales.
Las variables pueden ser segn donde estn definidas pueden ser
Variables globales: Este tipo de variables devuelven su valor en cualquier parte del
procedimiento, afectan a todas las funciones que se encuentran en el programa.
Variables locales: Estas variables solo devuelven su valor en los procedimientos donde estn
definidas. Lo que quiere decir que estn restringidas al procedimiento. Si se definen dentro de la
funcin main solo tendrn vida dentro de esa funcin y no en funciones externas.

Constantes
Constantes : Elementos de almacenamiento de datos o direcciones de memoria, que no varan de
ninguna forma durante el proceso del programa. Con lo que su valor ser el mismo tanto al comienzo
como al final de este.
Las constantes no solo funcionan en cualquier parte del procedimiento como las variables globales
sino que tambin devuelven su valor almacenado en cualquier parte del cdigo o programa.
Existen 4 tipos distintos de constantes
C.enteras.
C.de cma flotante.
C.de carcter.
C.de cadena de caracteres.
Las constantes enteras: Este tipo de constantes pueden estar escritas en 3 tipos de sistemas
numricos, como son, el decimal, octal, y hexadecimal.

Si la constante empieza por cero esta seria una constante entera escrita en octal (solo
llevara del 0 al 7).
Si la constante empieza por 0 o x ser una constante entera escrita en hexadecimal (0 > 9 >F).
En caso de no cumplirse estas condiciones anteriores estaramos ante una constante entera
decimal.
Las constantes de coma flotante o decimal
Distinguen la parte decimal de la entera por un punto, para el aadido de exponentes usa la letra E.
Las constantes de carcter
Se representa el valor de la constante encerrado entre apostrofos.
Las constantes de cadena
Almacena una cadena de caracteres que esta encerrada entre comillas.
Tambin podemos especificar cualificadores en las constantes con lo cual tendramos
Si la constante acaba en UL estaremos ante una constante larga y sin signo.
Si la constante acaba solo en U, estaremos ante una constante sin signo.
Si la constante acaba en L, estaremos ante una constante larga.
Como definir una constante?
Las constantes afectan a todas las funciones que se encuentran dentro del cualquier parte o funcin
de nuestro programa.
Por ello se definen encima del main y debajo de los include. Las constantes se definen y se declaran
al mismo tiempo. Se les da ya el valor. Esto se hace con una directriz #define a continuacin va el
identificador de esa constante o lo que es lo mismo su nombre, y por ultimo su valor.
Ejemplo:
#inclu de <stdio.h>
#define PI 3.1416
main () {
printf( "\nEl numero PI vale: %f, PI);

}
Observemos en la segunda lnea de nuestro cdigo-programa. Ponemos la directriz #define que
definir constantes, a continuacin su ID (identificador o nombre), un ultimo es pacio y al final el
valor de esa constante.
Funciones
Una funcin es un conjunto de instrucciones (posiblemente acompaadas de algunos datos temporales)
que llevan a cabo una subtarea dentro de un programa ms complejo.
Por ejemplo, dentro de un programa que convierte una lista de temperaturas expresadas en grados
Fahrenheit, a grados Celsius , podramos definir una funcin que haga una de las conversiones, y la
emplearamos varias veces para lograr completar nuestra tarea.
Tenemos entonces que las funciones dentro de un programa cumplen con subtareas, para las
cuales es necesario suministrarles algunos datos de entrada, y luego de completadas, deberemos
recibir como resultado algunos datos de salida. Para el caso de una funcin que calcula el rea de un
crculo, la entrada que requiere la funcin sera el radio del crculo, y la salida que arrojara luego del
cmputo sera el valor para el rea. Este hecho se ilustra en el diagrama que se muestra abajo, en el que
podemos ver la tarea de transformacin de datos que cumple una funcin: La alimentamos con una
entrada y recibimos una salida en respuesta.
Por otra parte, para especificar el proceso de transformacin que debe llevar a cabo la funcin, es
necesario emplear las instrucciones del lenguaje de programacin. Es necesario respetar algunas pautas,
tanto para la especificacin de los parmetros de entrada, como del valor de retorno, pero la estructura
general es la misma.
Sintaxis de la definicin de Funciones
La sintaxis general de definicin de las funciones es la siguiente:
<tipo_retorno> <nombre_funcin> ( <lista_parmetros> ) {
<declaracin_de_variables_locales> ;
<cuerpo_de_la_funcin> ;
return (<valor_retorno>) ;
}
<tipo_retorno> es el tipo del valor que devolver la funcin. Es posible definir funciones que no
devuelven ningn valor (para por ejemplo definir funciones que solo imprimen valores o ciertos
mensajes en pantalla, para los que no es necesario que devuelva valor alguno). Para definirlos o
declararlos, se utiliza como tipo de retorno la palabra reservada void. A estas funciones se las conoce
tambin como procedimientos, porque no devuelven ningn valor.
<nombre_funcin> debe ser sustituido por un identificador que corresponde al nombre con que se
invocar la funcin posteriormente (o llamada de la funcin). Debe ser un identificador vlido. El valor
de retorno de la funcin es asociado al nombre de la funcin.

<lista_parmetros> corresponde con una lista de variables denotadas por identificadores asociados a
un tipo, cada uno representa un parmetro de entrada. La lista de parmetros puede ser vaca pero los
parntesis deben aparecer.
La <declaracin_de_variables_locales> se refiere a variables locales que podrn ser utilizadas
nicamente dentro de la funcin. Fuera de ella, no sern reconocidas.
El <cuerpo_de_la_funcin> es una lista de instrucciones, separadas por punto y coma.
<valor_retorno>, debe ser una expresin (constante, aritmtica, lgica del tipo que se especific como
<tipo_retorno>, y establece la expresin que retornar la funcin una vez que haya terminado.
Ejemplos:

Funcin que convierte temperaturas Fahrenheit a Celsius

Funcin que convierte temperaturas Celsius a Fahrenheit

Funcin que calcula el rea de un crculo

Sintaxis de la llamada a las Funciones definidas


La sintaxis general de las llamadas a las funciones definidas es la siguiente:
<variable> = <nombre_funcin> ( <lista_parmetros> ) ;
<variable> corresponde a una variable denotada por un identificador del mismo tipo del valor que
devolver la funcin.
<nombre_funcin> es el identificador que corresponde al nombre con que se invoca a la funcin.
<lista_paramtros> debe corresponder a una lista de variables denotadas por identificadores asociadas a
un tipo, o expresiones de un tipo. Ya sean variables o expresiones, stas deben corresponder en cuanto a
cantidad, posicin y tipos a las variables que se definieron como parmetros de entrada en la definicin
de la funcin. Representan los valores que se entregan como entrada a la funcin. Si en la definicin de
la funcin no se us parmetro alguno, entonces en la llamada tampoco debe escribirse ninguna
expresin o variable, pero los parntesis deben aparecer.
Ejemplos:

Llamada a la Funcin que convierte temperaturas Fahrenheit a Celsius

Llamada a la Funcin que convierte temperaturas Celsius a Fahrenheit

Llamada a la Funcin que calcula el rea de un crculo

Parmetros de Entrada y Valor de Retorno


Tal y como se mostr en el diagrama presentado anteriormente, las funciones transforman una entrada
para producir una salida.
La materia prima con la que trabajar la funcin le es pasada a travs de sus parmetros de entrada.
El resultado del procesamiento llevado a cabo por la funcin es devuelto como su valor de retorno.
Tanto los argumentos de entrada como el valor de retorno tienen un tipo de datos asociado. En el
ejemplo de la funcin que calcula el rea de un crculo, los parmetros de entrada son la constante pi y el
radio del crculo, de tipo real (float), y el valor de retorno, tambin real, es el valor calculado para el
rea.
La funcin principal main y los programas en C
Un programa en C, est formado por varias instrucciones. Estas instrucciones son escritas dentro de
funciones que realizan una tarea en particular con los parmetros de entrada, para devolver valores que
corresponden a sus resultados. Algunas instrucciones son escritas fuera de las funciones, stas son
algunas directivas como #include, #define o declaracin de variables. Una funcin tambin es una
instruccin.
El computador debe empezar a ejecutar en algn orden estas instrucciones. Bsicamente, este
orden comienza por la ejecucin de las directivas (#include y #define), declaraciones de variales
globales que se encuentran escritas al principio del programa. Luego el orden de ejecucin contina
tomando en cuenta inicialmente la funcin main. Esta funcin consta tambin de declaraciones,
instrucciones y llamadas a las definiciones de otras funciones. El orden de ejecucin de las instrucciones
dentro de la funcin main es secuencial de arriba a abajo y es as como es posible recin seguir la
ejecucin del resto de las funciones.
Para el primer programa visto en este captulo vea su orden de ejecucin.

Expresiones
Se conocen como expresiones los valores que son manipulados dentro de un programa. Estos
valores pueden surgir como resultado de efectuar operaciones, como valores de retorno de las
funciones, al extraerlos de las variables, o simplemente pueden ser constantes expresadas
directamente dentro del cdigo del programa.
Las expresiones, al igual que el resto de las entidades dentro de un programa, tienen asociado un tipo de
datos. Este tipo indicar la forma en que podremos manipular la expresin, por ejemplo, en cules
variables podremos almacenar su valor.
Existe un conjunto de operadores para cada tipo de datos, de manera que siempre es posible construir
una nueva expresin a partir de una o varias ya existentes. Tenemos, por ejemplo, operadores

aritmticos para construir expresiones numricas, y operadores lgicos para construir expresiones
booleanas.
Expresiones Aritmticas
Las expresiones aritmticas son valores numricos, de tipos enteros o reales. Pueden ser constantes,
resultados de operaciones aritmticas como sumas o multiplicaciones, contenido de variables numricas,
o combinaciones de las anteriores unidas mediante operadores aritmticos.
Operadores binarios:
+ Suma
- Resta
* Multiplicacin
/ Divisin
% Mdulo (slo sobre tipo int)
Operadores unitarios:
- Signo negativo
++ Incremento
-- Decremento
Precedencia:
++ -- -(unitario)
*/%
+Asociatividad:
Por la izquierda
Expresiones
Los operandos pueden ser variables o constantes numricas. Sin embargo, los operadores unarios ++ y -fueron pensados para aplicarse a variables y el operador unario - a constantes.
operando operador-binario operando
operador-unario operando
Caso particular:

++ -- (notacin pre o postfija)

Ejemplos de expresiones aritmticas:


2+3*2
* tiene precedencia sobre + (Resultado: 8)
(2 + 3) * 2

los parntesis alteran la precedencia (Resultado: 10)

-2 / x

si x vale cero se producir un error de ejecucin

x++

notacin postfija (retorna el valor antes del incremento)

++x

notacin prefija (retorna el valor despus del incremento)

2-1+3

asociatividad por la izquierda: 4

15 % 6

operador mdulo o residuo (Resultado: 3)

-x
le cambia el signo al contenido de x
3*4%5
igual precedencia, pero es asociativo por izquierda (Retorna: 2)
3 * (4 % 5 ) los parntesis alteran la precedencia (Retorna: 12)
1 + 15 % 6
% tiene precedencia mayor (Retorna: 4)
Expresiones Lgicas o Booleanas
A diferencia de otros lenguajes de programacin, C no cuenta con un tipo de datos que permita
manipular valores booleanos, o de verdad. Este tipo de valores se emplean para dirigir al programa por
un determinado flujo de ejecucin dependiendo de la evaluacin a verdadero o falso de una expresin
lgica.
En C, las instrucciones que dependen de valores lgicos dependen en realidad de un valor entero que se
interpreta como falso cuando es cero, y como verdadero en caso contrario (es decir, cuando es distinto
de cero).
Operadores binarios:
&& AND (hace la conjuncin lgica de dos valores booleanos -enteros-).
|| OR (hace la disjuncin lgica de dos valores booleanos -enteros-).
Operadores unitarios:
! NOT lgico
Operadores relacionales o de comparacin:
Este tipo de operadores permite comparar el valor de dos expresiones de cualquier tipo, devolviendo
como resultado un valor booleano (entero).
== igual
!= distinto
<

menor

<= menor o igual


>

mayor

>= mayor o igual


Precedencia:
La precedencia est establecida por el siguiente orden de evaluacin. La asociatividad se aplica de
izquierda a derecha, para operadores con igual precedencia.
< <= > >=
== !=
&&
||
Expresiones
Los operandos de las expresiones booleanas son valores enteros (booleanos), incluyendo aquellos que
resulten de la comparacin mediante los operadores relacionales mencionados anteriormente. Pueden
emplearse parntesis para dejar clara la precedencia de evaluacin.
operando operador-logico-binario operando
operador-logico-unario operando
Ejemplos de expresiones booleanas:
x
Verdadero cuando el contenido de la variable x
es distinto de 0.
!x

Verdadero cuando el contenido de la variable x


es igual a 0.

Verdadero siempre.

1 || x

Verdadero siempre, no importa lo que sea x.

Falso siempre.

0 && x

Falso siempre, no importa lo que sea x.

(x > 5) && !y Verdadero cuando el contenido de la variable x


es mayor que 5, y el contenido de y es 0.
(x==1)

Verdadero si el valor de la variable x es 1.

5 == 6
retorna 0, osea Falso.
4 >= 2
Retorna 1, osea Verdad.
((4 % 2 == 0) || (4 % 3 == 0) && 0

La precedencia de todos los operadores de C:


Mxima
( ) [ ] - ->
! ~ ++ -* / %
+ << >>
< <= > >=
== =
&
|
&&
||
= += -= /=
Mnima

Instrucciones
Las instrucciones son las rdenes que reconoce un computador mientras se encuentra ejecutando un
programa. De hecho, un programa es una secuencia de instrucciones que al ejecutarse resuelve algn
problema para el usuario.
Los programas estn escritos en un lenguaje de programacin, el cual define el conjunto de instrucciones
vlidas que podemos utilizar al escribirlos.
En nuestro caso emplearemos el lenguaje de programacin C, por lo que ser necesario que estudiemos
las instrucciones que componen dicho lenguaje. A lo largo del curso vamos a ir introduciendo estas
instrucciones de manera paulatina, hasta llegar a cubrir un subconjunto bastante importante del lenguaje.
Las instrucciones disponibles pueden clasificarse dentro de alguna de las siguientes categoras:

Secuenciales
o Ejemplos: declaraciones de variables, asignaciones, llamado a funciones, salida (printf) y
entrada (scanf)

Control de flujo (o decisin)

o Ejemplos: if, switch

Iteracin
o Ejemplos: for, while, do-while

Sintaxis
La sintaxis de las instrucciones en C vara bastante dependiendo de cada instruccin. En general, toda
instruccin debe ir terminada por un punto y coma, de la siguiente manera:
<instruccion> ;
Existe instrucciones complejas que pueden abarcar varias lneas, y que pueden contener otras
instrucciones dentro de ellas en forma subordinada.
Adems, las instrucciones se pueden agrupar en bloques, delimitados por corchetes: { }, de la siguiente
manera:
{
<instruccion1> ;
<instruccion2> ;
...
<instruccionN> ;
}
Declaracin de Variables y Asignacin
Las variables permiten representar los datos que se estn manipulando dentro de un programa. Como se
mencion anteriormente, todas las variables tienen un tipo de datos asociado, el cual determina la forma
de almacenar e interpretar los datos en las variables.
Declaracin de Variables
Para poder utilizar una variable es necesario declararla previamente dentro de algn mbito
(local, global, static). Esta declaracin debe incluir el tipo y el identificador con que se har referencia a
la nueva variable. Es posible introducir varias variables del mismo tipo dentro de la misma declaracin.
La sintaxis general de una declaracin de variables es la siguiente:
<tipo1> <lista_de_variables> ;
<tipo2> <lista_de_variables> ;
...
<tipoN> <lista_de_variables> ;
Las listas de variables estn formadas por una serie de identificadores vlidos, separados por comas, de
la siguiente manera:
<identificador1>, <identificador2>, ..., <identificadorM>

La declaracin de variables puede aparecer en el nivel ms alto del programa (fuera de toda funcin), en
cuyo caso el mbito de las variables ah declaradas lo ser el programa en su totalidad, incluyendo todas
las funciones. A este tipo de variables se les conoce como globales.
Las declaraciones que son internas a las funciones provocan que el mbito en donde son reconocidas las
variables se limite a la funcin en que son declaradas. A estas se las conoce como locales.
La redefinicin, dentro de una funcin, de una variable previamente definida en el nivel exterior,
provoca que la definicin anterior se oculte durante la ejecucin de la funcin, por lo que la
variable ah declarada no podr ser referenciada.
En todo caso, para poder referenciar una variable global dentro de una funcin, la declaracin debe
aparecer anterior a la definicin de la funcin.
Una caracterstica que resulta a menudo de mucha utilidad, es la posibilidad de dar un valor inicial a las
variables en el momento de su declaracin. Esto se logra de la siguiente manera:
<tipo> <identificador> = <valor_inicial> ;
Es importante recordar que la existencia de una variable est limitada a la existencia de la funcin en
que fue declarada. Esto quiere decir que los valores almacenados en una variable no perduran para
posteriores llamados a la funcin en que est declarada. Sin embargo, es posible hacer que estos valores
sean permanentes y que se mantengan intactos a lo largo de la ejecucin del programa. Para esto, es
necesario declarar las variables como estticas, de la siguiente manera:
static <tipo> <identificador> ;
Las variables definidas dentro de una funcin con la caracterstica static se comportan, en cuanto a la
perdurabilidad de los valores que se almacenan en ellas, de la misma manera que las variables globales.
Es decir, estas variables se crean una nica vez y los valores guardados permanecen durante toda la
ejecucin del programa. Sin embargo, su alcance es limitado y pueden ser accesadas nicamente desde
la funcin en que fueron declaradas.
Ejemplos

int suma, producto;


o Se declaran dos variables, suma y producto, ambas de tipo int.

int acumulado=0;
o Se declara la variable acumulado, de tipo int, y se inicializa con el valor 0.

static float interes;

o Se declara la variable inters, de tipo float, y con la caracterstica de esttica, por lo que
su valor perdurar entre distintos llamados a la funcin en que est siendo declarada.
Ejemplo de un programa que utiliza variables globales, locales y static que muestra la vida til de las
variables..

Operador de Asignacin
El operador de asignacin ( = ) permite almacenar datos en las variables. Es un operador binario, que
requiere que su primer operando (el del lado izquierdo) sea una variable. El segundo operando (el del
lado derecho) puede ser otra variable, un valor constante, o una expresin en general. La sintaxis general
de este operador es la siguiente:
<variable> = <expresion> ;
En caso de que el valor_asignado sea una constante, el resultado de esta operacin es que el valor
expresado se almacenar en la variable especificada al lado izquierdo.
Si el valor_asignado es otra variable, se har una copia del valor almacenado en la segunda variable y se
almacenar en la variable del lado izquierdo. Si se trata de una expresin, sta se evaluar previamente y
su resultado se almacenar en la variable indicada.
En todo caso, es necesario tener en cuenta algunas consideraciones sobre los tipos de las variables y de
los valores que se estn asignando. Ms adelante se tratarn los aspectos relativos a la conversin de
tipos.
Ejemplos

indice = 0;
o Se almacenar el valor 0 en la variable ndice

suma = a+b;
o Se obtendr la suma de las variables a y b, y el resultado se almacenar en la
variable suma

NuevaX = ViejaX;
o El valor de la variable ViejaX se copiar a la variable NuevaX

j = (i = 9)
o Asigna el valor de 9 a las variables i y j

Ejemplo: Intercambio del contenido de dos variables (vasos)


En este ejemplo ilustraremos la problemtica de intercambiar el contenido de dos variables. Al igual que
cuando nos enfrentamos al problema de intercambiar el contenido de dos vasos, en este caso ser
necesario emplear un tercer elemento de almacenamiento (variable o vaso), para guardar temporalmente
durante el intercambio uno de los contenidos.

Diagrama del intercambio empleando los vasos

Cdigo en C para intercambio de variables (swap)

Ejemplo: Vida til de las Variables


Se muestra un programa con una funcin en la que se declaran dos variables, una de tipo static y otra
con existencia limitada (no static). El valor almacenado en la variable de tipo static sobrevive a varios
llamados mientras que la otra pierde su valor anterior y deber ser inicializada nuevamente en cada
llamado.

Cdigo en C para el ejemplo

Ejemplo de ejecucin

Esquema de la vida til de las variables

Ejemplo: Parmetros de las Funciones


Se muestra un programa con una variable global y una funcin que recibe un parmetro. Se ilustra el
paso de parmetros a la funcin y la forma en que la funcin devuelve valores. Adems, se muestra
como dichos parmetros son copiados a almacenamiento temporal de la funcin al hacer el llamado, por
lo que los cambios de que son objeto no afectan el parmetro real que se pas.

Cdigo en C para el ejemplo

Ejemplo de ejecucin

Conversin de Tipos (Type Casting)


El lenguaje C permite cambiar el tipo de datos de las expresiones en el momento de llevar a cabo
las asignaciones. Existen algunas de estas conversiones que se llevan a cabo en forma implcita, sin
participacin del programador. Por ejemplo, si se asigna una expresin entera a una variable de tipo real,
el valor de la expresin se convertir primero al tipo real antes de llevar a cabo la asignacin. Este

resulta ser el caso ms simple de una conversin de tipos, pero existen algunas situaciones en las que se
requiere de cierta atencin especial:

De un tipo real a uno entero


o Se trunca el valor a su parte entera. La parte decimal se pierde.

Asignaciones entre char e int


o Puesto que en C se manejan los caracteres mediante su cdigo ASCII (que es un nmero
entero), este tipo de asignaciones funciona en general sin problemas.

Adems, existen conversiones de tipo que se llevan a cabo en el momento de evaluar expresiones
aritmticas, por ejemplo, al intentar sumar un valor float con uno int. En estos casos, la regla general
indica que el operando de tipo inferior, en este caso int, se convierte al tipo superior, en este
caso float, y el resultado ser del tipo superior (float). En general:

int se convierte en double y float

char se convierte en int

si hay un operando double, el otro se convierte a double y el resultado es double

Por ltimo, es posible hacer una conversin de tipo en forma explcita, indicando entre parntesis el tipo
al que se quiere convertir una determinada expresin. Esto se hace siguiendo la siguiente sintaxis:
(<tipo>) <expresion>
Ejemplos

parte_entera = 7/4;
o A la variable parte_entera se le asignar el resultado de la divisin pero truncado: 1

(int)(7.0/4.0)
o El resultado de esta expresin tambin es 1

7.0/4.0
o El resultado de la divisin ser exacto, con todos los decimales

7.0/4
o Se convierte el 4 a 4.0 y la divisin arroja decimales

x = 7.0/4.0
o El resultado de la divisin tendr decimales, pero si la variable x es de tipo entero al
asignar el valor habr truncamiento.

(float)1
o Convierte 1 a tipo float, resultando en 1.0

Estructura de un Programa
Un programa es un conjunto de instrucciones y datos que implementan la solucin a un problema. En el
caso del lenguaje de programacin C las instrucciones estn estructuradas como un conjunto
defunciones, cada una de las cuales cumple con alguna tarea en particular.
Existe una funcin principal (llamada main( )), que debe aparecer en todo programa, y que ser llamada
en forma implcita cuando la ejecucin del programa d inicio. Es comn visualizar esta funcin como
una especie de programa principal, desde donde se hacen llamados a las dems funciones para
implementar la solucin al problema en cuestin.
Al igual que las instrucciones, los datos del programa tambin pueden estructurarse, definindolos fuera
o dentro de las funciones. Los datos se definen en la forma de variables, las cuales son visibles
(accesibles) en ciertas partes del programa, dependiendo del lugar en que fueron definidas. Para mayor
detalle puede consultarse la seccin sobre declaracin de variables.
Sintaxis
A pesar de que existen muchas maneras de estructurar un programa en C, presentamos la estructura
general de un programa, segn las normas que seguiremos en todos los ejemplos que se presentarn.
Sintaxis General:
#include <libreras>
#define <identificador> <constante>
typedef <definicin_de_nuevos_tipos_de_datos>
<definicin_de_funciones>
<tipo> main() {
<cuerpo_de_la_funcin_principal>
}

La directiva para la consideracin de libreras o bibliotecas de funciones predefinidas es


#include. En la seccin de inclusin de bibliotecas se hace referencia a aquellos grupos de
funciones que se requieran para un correcto funcionamiento del programa (es decir, aquellas que
van a ser llamadas). Por ejemplo, si deseamos incluir stdio.h para emplear las funciones de la
biblioteca de entrada y salida estndar, se escribira:
#include <stdio.h>
De esta forma el compilador tendr conocimiento de las funciones que contiene la biblioteca.
Otras bibliotecas son:
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>

/* funciones bsicas */
/* funciones matemticas bsicas */
/* funciones para manejar cadenas */

La definicin de constantes simblicas se realiza con #define y consiste en asignar a un


identificador un valor que permanecer constante durante su uso en el programa. La definicin
de nuevos tipos de datos se estudiarn en profundidad ms adelante, por lo que no entraremos en
su explicacin por ahora.

En la <definicin de funciones> se escribe la declaracin e implementacin de las funciones


propias (es decir, escritas por nosotros mismos), y que van a ser empleadas a lo largo del
programa.

La funcin main() es la funcin principal del programa. Al iniciar el programa esta funcin se
llamar en forma implcita, por lo que podra considerarse como el cuerpo principal del
programa. Ms adelante en el curso se ver como especificar al programa argumentos desde la
lnea de comandos del sistema operativo, los cuales sern pasados como parmetros de entrada a
la funcin main().

El cuerpo de la funcin principal es un conjunto de instrucciones que implementan la


funcionalidad del programa (es decir, especifican lo que har el programa).

Ejemplo:
Programa de ejemplo, compuesto por dos funciones para conversin de temperaturas, y una funcin
principal main(), que hace algunos llamados a las funciones para crear una pequea tabla de
equivalencia de temperaturas.

Equivalencia de temperaturas (Fahrenheit-Celsius)

Entrada y Salida
La mayor parte de los programas interactan con el usuario durante su ejecucin. De esta forma,
el usuario puede suministrar al programa sus datos de entrada, y puede recibir de ste los resultados
obtenidos.
Para llevar a cabo esta interaccin es necesario contar con instrucciones destinadas para tal efecto. Las
bibliotecas del lenguaje de programacin C incluyen un amplio conjunto de instrucciones destinadas a
llevar a cabo entrada y salida de datos. Quiz las de mayor uso son las orientadas a la entrada y salida de
datos con formato (biblioteca stdio.h).
Para llevar a cabo salida con formato contamos con la instruccin printf, la cual permite desplegar en la
pantalla del computador informacin de variados tipos, permitindonos a la vez especificar la forma en
que dichos datos debern aparecer (formato).
Para obtener entradas con formato disponemos de la instruccin scanf, la cual permite capturar desde el
teclado del computador informacin de variados tipos, permitindonos a la vez especificar la forma en
que dichos datos debern interpretarse durante la lectura.
Tanto la instruccin printf, como scanf utilizan una serie de caracteres de conversin para especificar el
formato que deber tener la informacin de salida y entrada, respectivamente. De este modo ser posible
interpretarla correctamente.

Salida con Formato: printf


La funcin printf, de la biblioteca de entrada y salida estndar (stdio) permite desplegar datos en la
pantalla, con la posibilidad de especificar el formato con que se desea que aparezcan.
Sintaxis General:
printf ( "cadena-de-formato", <lista_de_argumentos> ) ;
La cadena de formato debe ir delimitada por comillas dobles, y debe incluir una especificacin de
conversin por cada argumento en la lista de argumentos. El texto que se incluya en la cadena de
formato aparecer durante el despliegue, y cada especificacin de conversin ser reemplazada por el
correspondiente argumento.
La lista de argumentos consiste de una secuencia de expresiones que se desean desplegar. Las
expresiones pueden ser variables, constantes u operaciones que deben resolverse antes del despliegue.
Tambin es posible especificar llamados a funciones que devuelvan algn valor.
Especificaciones de Conversin
Las especificaciones de conversin definen la forma en que sern tratados y desplegados los argumentos
de printf. Cada especificacin de conversin empieza con el caracter especial % y termina con alguno de
los caracteres de conversin que se detallan ms adelante. Adems, entre el smbolo % y el caracter de
conversin pueden incluirse:

Un signo menos, que indica que el campo debe ajustarse a la izquierda

Un nmero entero, que indica el tamao mnimo que deber ocupar el campo al desplegarse

Un punto seguido de un nmero entero, que indica las posiciones decimales que debern
desplegarse. De ser necesario se agregarn ceros al final.

Los caracteres de conversin indican a printf la forma en que deber interpretar el argumento. Se
mencionan a continuacin aquellos de mayor uso:

d - Nmero entero en notacin decimal (base 10)

c - Caracter

s - Cadena de caracteres (string)

e - Nmero con decimales, expresado en notacin exponencial o de punto flotante (mantisa y


exponente)

f - Nmero con decimales, expresado en notacin de punto fijo (parte entera, punto, parte
decimal)

Dentro de la expresin de conversin pueden especificarse las siguientes secuencias que tienen un
significado especial:

%% - Para imprimir un smbolo de %

\n - Para provocar que el cursor cambie de lnea

\t - Para producir una tabulacin en el despliegue

\ASCII - Despliega el caracter con el cdigo ASCII suministrado

Para una referencia ms amplia debe consultarse el libro "The C Programming Language" de Kernighan
y Ritchie.
Ejemplos:

printf("El valor de la variable x es: %d\n", x);


o Desplegar: El valor de la variable x es: 100 (si x contena un valor igual a 100), y
avanzar a la siguiente lnea luego del despliegue

printf("El valor de dos + cinco es: %d\n", 2+5);


o Desplegar: El valor de dos + cinco es: 7 y avanzar a la siguiente lnea luego del
despliegue
printf("El area de un circulo con radio %.2f es %.2f\n", radio, area);
o Desplegar: El area de un circulo con radio 1.00 es 3.14 (suponiendo los valores
indicados para las variables) y avanzar a la siguiente lnea luego del despliegue
printf("Este es el numero 2 con formato %%5d: %5d", 2);
o Desplegar: Este es el numero 2 con formato %5d: ____2 (en donde _ representa un
espacio en blanco)
printf("Este es el numero 2 con formatos %%-5d y %%d: %-5d %d", 2, 2);
o Desplegar: Este es el numero 2 con formatos %-5d y %d: 2_____2 (en donde _
representa un espacio en blanco)
printf("Este es el caracter %c cuyo codigo ASCII es %d", 'A', 'A');
o Desplegar: Este es el caracter A cuyo codigo ASCII es 65
Ejemplo: Diversos Formatos de Conversin
Ejemplo de impresin en pantalla (output). Imprime un valor de tipo float utilizando varios formatos
dentro de printf.

Ver el cdigo fuente

Ejemplo de ejecucin

Entrada con Formato: scanf


La funcin scanf, de la biblioteca de entrada y salida estndar (stdio) permite capturar datos desde el
teclado, con la posibilidad de especificar el formato para interpretarlos.

Sintaxis General:
scanf ( "cadena_de_control", <lista_de_argumentos> ) ;
La cadena de control, al igual que en el caso de la cadena de formato de printf, debe ir delimitada por
comillas dobles, y debe incluir una especificacin de conversin por cada argumento en la lista. Estas
especificaciones se utilizarn para dirigir la interpretacin de las secuencias de entrada.
La lista de argumentos consiste de una secuencia de punteros a variables, en las cuales se almacenarn
las entradas dadas por el usuario, una vez interpretadas por scanf. La cadena de control puede contener:

Espacios en blanco, tabuladores o finales de lnea, los cuales no se tomarn en cuenta.

Caracteres ordinarios (distintos de %), los cuales se espera que coincidan con el prximo caracter
%, distinto de blanco del flujo de entrada.

Especificaciones de conversin, formadas por el caracter %, un nmero opcional que indica el


tamao mximo del campo, y el caracter de conversin, de manera similar a como se defini
para el caso de printf.

Cada especificacin de conversin dirige la conversin del prximo campo de la entrada. El resultado se
almacena en la variable apuntada por el argumento (por el puntero). Un campo de entrada se define
como una cadena de caracteres delimitada por espacios en blanco (incluyendo tabulador y fin de lnea).
El campo concluye en el primer blanco, o cuando se alcance el mximo sealado en la especificacin de
conversin.
Los caracteres de conversin pueden ser:

d - indica que se espera un nmero decimal (el argumento debe ser un puntero a int).

h - similar al anterior, pero el argumento debe ser puntero a short int.

lx - similar a los anteriores, pero el argumento debe ser puntero a long int.

c - indica que se espera un caracter (el argumento debe ser un puntero a char). Para leer el primer
caracter distinto de blanco debe emplearse %1s.

s - indica que se espera una cadena de caracteres (el argumento debe ser un puntero a caracter, o
el nombre de un vector de caracteres).

f - indica que se espera un nmero con decimales (el argumento debe ser un puntero a float). La
entrada puede darse en notacin de punto fijo (parte entera, punto, decimales), o de punto
flotante (mantisa, E, exponente).

lf - similar al anterior, pero el argumento debe ser puntero a double.

Ejemplos:

scanf("%d", &edad);
o Espera un entero que ser almacenado en la variable edad.
scanf("%4d", &agno);
o Espera el ao actual (4 dgitos). El valor ingresado se guardar en la variable agno. Si se
ingresan ms de 4 dgitos, los restantes se descartarn, o se dejarn para la siguiente
llamada a scanf.
scanf("%d %f", &edad, &salario);
o Se esperan dos nmeros: El primero debe ser entero y el segundo puede tener decimales.
Los valores se guardarn en las variables edad y salario, respectivamente. El usuario
puede separar los valores durante la entrada con espacios en blanco, tabuladores o
caracteres de fin de lnea (es decir, presionando las teclas <Enter> <Return>).
scanf("%s", nombre);
o Se espera una cadena de caracteres (string). La entrada se almacenar en el vector
nombre, y se delimitar con un ASCII(0) al final. Obsrvese que el argumento no incluye
el smbolo &, pues los nombres de vectores son en s punteros. Debe tenerse cuidado de
que el vector puede almacenar la totalidad de la entrada, o pueden producirse errores de
ejecucin muy serios. Una manera de controlar esto es incluir un tamao mximo dentro
de la expresin de formato.

Ejemplo: Lectura de Nmeros Enteros


Ejemplo de entrada desde el teclado (input). Lee el valor de tres variables de tipo int. Al ingresarlas, el
usuario las podr delimitar empleando espacios en blanco, tabulaciones, o incluso ingresndolas en
diferentes lneas.

Ver el cdigo fuente

Ejemplo de ejecucin

Comentarios, Indentacin y Otros Aspectos Visuales


Comentarios
Con el objetivo de hacer los programas ms legibles, es importante la incorporacin de comentarios que
ayuden a comprender lo que hizo el programador. Es importante documentar dentro del programa
cualquier aspecto que no quede claro de la simple lectura del cdigo. Los comentarios son
IMPRESCINDIBLES.
Con este fin, el lenguaje ofrece la posibilidad de incluir dentro del programa cualquier texto que
pretenda comentar el cdigo escrito. Este texto puede abarcar una o varias lneas, y debe incluirse dentro
de los delimitadores mostrados a continuacin.
Sintaxis General:
/* Comentario - No debe incluir la combinacion de caracteres
slash-asterisco, pues se emplea para terminar el comentario
*/
Ejemplos:
/* Programa para calcular ...
Escrito por ...
*/
int radio; /* Guarda el radio del circulo */
/* Funcion que calcula el area de un circulo */
float area(float radio) { ...
Indentacin y otros aspectos visuales
A pesar de que el lenguaje de programacin C ofrece una amplia libertad en cuanto a la forma en que
pueden escribirse los programas, es necesario establecer algunas normas que ayuden a hacer los
programas ms legibles, y por lo tanto ms fciles de comprender y modificar. Aunque no es posible
ofrecer una lista exhaustiva de todas las decisiones de formato que un programador debe enfrentar al
escribir sus programas, intentaremos establecer algunas pautas, y el resto lo dejaremos para ser percibido
a lo largo del curso al estudiar los ejemplos.
Ahora bien, las normas aqu mostradas no son absolutas, y reflejan nicamente las preferencias del
autor. Existen muchas otras, quiz hasta mejores. Lo importante aqu es adoptar un estndar y respetarlo
al mximo posible. De esta forma escribiremos programas correctos, no slo en cuanto a su
funcionalidad, sino tambin en cuanto a su apariencia.
Algunos consejos:

Dnde poner los corchetes?

funcion (argumentos) {

...
}

Cmo indentar el cdigo?

Actividades para el aprendizaje


1. Explica la Estructura de un Programa C
En general, un programa en C consta de las siguientes partes:

Directivas al preprocesador.
Definicin de tipos de datos.
Declaracin de variables.
Definicin de funciones.
Cualquier programa debe poseer una funcin, llamada main, que es la funcin que toma el control
cuando se corre el programa.
El primer programa
El ejemplo siguiente muestra un programa completo en C, que imprime un texto en pantalla.

/* Mi primer programa en Lenguage C */


#include <stdio.h>
void main()
{
printf("Hola mundo");
}
Puntos a notar:

1. Comentarios: Los comentarios en C comienzan con la secuencia '/*' y termina con la secuencia
'*/'. Todo lo que se encuentre entre estas dos secuencias es omitido por el compilador. Algunos
compiladores (no todos) soportan el anidamiento de comentarios (comentarios dentro de
comentarios), pero por no ser una facilidad comn, no se aconseja su utilizacin. El uso de
comentarios en un programa es fundamental para su entendimiento. Una proporcin 50%-50%
(cdigo-comentario) no es exagerada.

2. Directivas al preprocesador: La etapa de compilacin se realiza en dos fases, una en la que un


preprocesador atiende todas las directivas que contiene el cdigo fuente y recien despues la etapa
de traduccin a cdigo objeto. Todas las directivas al proprocesador comienzan con el caracter
'#', en particular la directiva #include instruye al preprocesador para que inserte el contenido del
archivo que se pasa como argumento a la directiva para su posterior compilacin.

3. Definicin de funciones: Todas las funciones se definen colocando primero el tipo de


retorno (void significa que la funcin no retorna nada como resultado de su ejecucin.
Por defecto si no se coloca tipo de retorno, se asume que la funcin retorna un valor
entero); al tipo de retorno le sigue el nombre (la funcin main posee un significado
especial, ya que es la funcin que toma el control cuando se ejecuta el programa); le
siguen los argumentos separados com comas y encerrados entre parntesis (aunque la
funcin no reciba argumentos); y por ltimo el cuerpo de la funcin encerrado entre
llaves.
4. El llamado a funciones se realiza colocando su nombre seguida por los argumentos
encerrados entre parentesis. En el caso de que la funcin retorne algo como resultado,
se puede utilizar en el lado derecho de una asignacin.
5. Todas las sentencias terminan en el caracter ';'
El cuerpo de la funcin main en nuestro caso, consta nicamente de la invocacin de la
funcin printf con un "string" constante como argumento.
La accin de la funcin printf (cuyo cdigo se encuentra en las bibliotecas estndar del lenguaje) es la
de imprimir en el dispositivo estndar de salida (en general el monitor).

2. Explica la importancia de la funcin main


Su misin es marcar el inicio y fin de la ejecucin de un programa; es la funcin principal, la
primera que se ejecuta; es la funcin main. Su sintaxis "bsica" es:
int main()
{
<bloque_de_instrucciones>
}
La funcin main contiene al bloque de instrucciones principal de un programa, dentro de los
caracteres abrir llave ({) y cerrar llave (}).
Los parntesis "()" escritos despus de main sirven para indicar que el identificador main es una
funcin. Es importante comprender que main no es una palabra reservada de C. Ningn
identificador de funcin lo es.

Вам также может понравиться