Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
c
c
c
donde se declaran tres variables locales i1, i2 e i3. Luego se ejecutan las siguientes
instrucciones:
!
½? unciones.
½? *ariables.
½? Constantes simbólicas.
½? Estructuras de datos.
½? ëefiniciones de tipos (hechas mediante typedef).
!
puntero
nombre_empleado
area
TAMANO_STRING
EdadEmpleado
potencia10
i
For
iF
Nombre
nombre
Los siguientes son identificadores inválidos. Entre paréntesis se indica por qué.
* "!
En C, las variables reciben nombres que respetan las reglas de los identificadores.
Además, ( "" ! ! , que define básicamente
la clase de dato que se almacenará en ella y la forma en que deberá ser tratado.
ëonde <tipo> puede ser: u. [] significa opcional. <valor_inicial> puede
corresponder a una constante del tipo entero, real, caractér, arreglo, etc..
int numero ;
char nombre ;
int numero = 10 ;
Char nombre = ´G´ ;
Las variables pueden ser declaradas como globales (pueden ser utilizadas y modificadas
por todas las funciones), locales (sólo pueden ser utilizadas y modificadas por la
función donde se definió a ésta) y static (pueden ser utilizadas sólo por la función que
definió a ésta y además no inicializada cada vez que se la utiliza ). Más detalles de la
declaración de variables y asignación de valores a las variables.
å!+ !
Cada uno de los distintos objetos que son manipulados dentro de un programa tiene
asociado un ï. ëesde el punto de vista de almacenamiento o para llevar a
cabo operaciones sobre estos objetos, es necesario tratarlos de distinta manera. Así, la
mayoría de los lenguajes de programación separan aquellos objetos que son caracteres
de los que son números enteros y números con decimales.
Es importante recordar que todo objeto dentro de un programa tiene un tipo de datos
asociado, y es necesario tener esta asociación en mente a la hora de manipular,
almacenar, operar y hasta desplegar en pantalla dicho objeto.
å!!
El tipo entero básico es . Existen además las variantes ï , que permite
almacenar valores más pequeños (con el subsecuente ahorro de espacio en memoria), y
el , que soporta números más grandes (pero con mayor gasto de memoria).
El valor máximo que se puede almacenar en las variables de cada uno de estos tipos
depende de la arquitectura del computador y del compilador que se estén empleando.
å! !
Las variables de tipos de datos reales pueden almacenar valores numéricos con
decimales.
El tipo real básico es . Existe también la variante , que permite almacenar
valores en uï, más grandes y con mayor cantidad de decimales. Sin
embargo, el uso de este tipo provoca un mayor gasto de memoria que si se empleara el
tipo básico .
c !
å ! u
Las variables de tipos de datos u, pueden almacenar un caracter del u
á á (256 caracteres). En realidad, lo que se guarda no es el caracter en sí, sino el
código correspondiente. Por lo tanto, puede verse al tipo u como un subtipo del tipo
, que puede almacenar enteros entre 0 y 255. ëe hecho, las expresiones de tipo u
pueden manipularse como enteros.
Las constantes de tipo u se representan delimitadas por comillas simples. Así, para
escribir el caracter que representa la letra A mayúscula escribimos:
'A'
El hecho de que las expresiones de tipo u se consideren como enteros permite llevar
a cabo (!!.!!u $.!!. Por ejemplo, es
posible llevar a cabo las siguientes asignaciones, las cuales son todas equivalentes y
almacenan en la variable correspondiente la letra A mayúscula (código ASCII 65).
char ch;
int i;
ch = 65;
i = 'A';
ch = 'A';
i = 65;
'\65'
Esta notación es muy útil para representar caracteres especiales, que no aparecen en los
teclados y no se pueden ver en la pantalla. Este es el caso del caracter nulo (ASCII 0):
'\0', el cual se empleará más adelante para indicar el final de los ï ï. Así, las
siguientes son representaciones equivalentes en C para el caracter constante que
representa la letra A mayúscula:
'A'
65
'\65'
Otros caracteres especiales que se pueden representar mediante esta notación son:
'\n':
'\t':
½? Tabulador (también útil en )
'\\':
!
Por ejemplo, dentro de un programa que convierte una lista de temperaturas expresadas
en grados ahrenheit, a grados Celsius , podríamos definir una función que haga una de
las conversiones, y la emplearíamos varias veces para lograr completar nuestra tarea.
Por otra parte, para especificar el proceso de transformación que debe llevar a cabo la
función, es necesario emplear las instrucciones del lenguaje de programación. Es
necesario respetar algunas pautas, tanto para la especificación de los parámetros de
entrada, como del valor de retorno, pero la estructura general es la misma.
<valor_retorno>, debe ser una expresión (constante, aritmética, lógica del tipo que se
especificó como <tipo_retorno>, y establece la expresión que retornará la función una
vez que haya terminado.
!
variable corresponde a una variable denotada por un identificador del mismo tipo del
valor que devolverá la función.
!
El resultado del procesamiento llevado a cabo por la función es devuelto como su (
.
Tanto los argumentos de entrada como el valor de retorno tienen un tipo de datos
asociado. En el ejemplo de la función que calcula el área de un círculo, los parámetros
de entrada son la constante pi y el radio del círculo, de tipo real ( ), y el valor de
retorno, también real, es el valor calculado para el área.
.!!
Se conocen como expresiones los valores que son manipulados dentro de un programa.
Estos valores !! !*( !
! !* . ! !( "!*!
!! !.! ! .
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
expresión, por ejemplo, en cuáles variables podremos almacenar su valor.
Existe un conjunto de operadores para cada tipo de datos, de manera que siempre es
posible construir una nueva expresión a partir de una o varias ya existentes. Tenemos,
por ejemplo, operadores aritméticos para construir expresiones numéricas, y operadores
lógicos para construir expresiones booleanas.
.!!4- !
+ Suma
- Resta
* Multiplicación
/ División
- Signo negativo
++ Incremento
-- Decremento
++ -- -(unitario)
* / %
+ -
4! (
Por la izquierda
.!!
Los operandos pueden ser variables o constantes numéricas. Sin embargo, los
operadores unarios ++ y -- fueron pensados para aplicarse a variables y el operador
unario - a constantes.
operador-unario operando
Caso particular:
!.!! - !
.!! !6 !
! G lógico
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
= > >=
== !=
&&
||
.!!
operador-logico-unario operando
!.!!" !
1 Verdadero siempre.
0 Falso siempre.
!! !c
Máxima
( ) [ ] - ->
! ~ ++ --
* / %
+ -
>>
= > >=
== =
&
|
&&
||
= += -= /=
Mínima
!!
Las instrucciones son las órdenes que reconoce un computador mientras se encuentra
ejecutando un programa. ëe hecho, un programa es una ! !!
que al ejecutarse resuelve algún problema para el usuario.
½? Secuenciales
o? Ejemplos: declaraciones de variables, asignaciones, llamado a funciones,
salida ( ) y entrada (ïu)
½? Control de flujo (o decisión)
o? Ejemplos: , ï u
½? Iteración
o? Ejemplos: , ,
/ .!
instruccion> ;
Existe instrucciones complejas que pueden abarcar varias líneas, y que pueden contener
otras instrucciones dentro de ellas en forma subordinada.
instruccion1> ;
instruccion2> ;
...
instruccionN> ;
Las variables permiten representar los datos que se están 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.
Las listas de variables están formadas por una serie de identificadores válidos,
separados por comas, de la siguiente manera:
La declaración de variables puede aparecer en el nivel más alto del programa (fuera de
toda función), 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 " !.
Las declaraciones que son internas a las funciones provocan que el ámbito en donde son
reconocidas las variables se limite a la función en que son declaradas. A estas se las
conoce como !
En todo caso, para poder referenciar una variable global dentro de una función, la
declaración debe aparecer anterior a la definición de la función.
ï
tipo> identificador> ;
Las variables definidas dentro de una función con la característica ! 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 ejecución del programa. Sin embargo, su
alcance es limitado y pueden ser accesadas únicamente desde la función en que fueron
declaradas.
!
Ejemplo de un programa que utiliza variables globales, locales y static que muestra la
vida útil de las variables..
variable> = expresion> ;
En todo caso, es necesario tener en cuenta algunas consideraciones sobre los tipos de las
variables y de los valores que se están asignando. Más adelante se tratarán los aspectos
relativos a la conversión de tipos.
!
½? indice = 0;
o? Se almacenará el valor 0 en la variable íu
½? suma = a+b;
o? Se obtendrá la suma de las variables y , y el resultado se almacenará
en la variable ï
½? NuevaX = *iejaX;
o? El valor de la variable * se copiará a la variable
½? j = (i = 9)
o? Asigna el valor de 9 a las variables y
"!( "!%( !!'
En este ejemplo ilustraremos la problemática 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.
* 7 !* "!
Se muestra un programa con una función en la que se declaran dos variables, una de
tipo ï u y otra con existencia limitada (no ï u). El valor almacenado en la variable
de tipo ï u sobrevive a varios llamados mientras que la otra pierde su valor anterior y
deberá ser inicializada nuevamente en cada llamado.
,! !!
Se muestra un programa con una variable global y una función que recibe un parámetro.
Se ilustra el paso de parámetros a la función y la forma en que la función devuelve
valores. Además, se muestra como dichos parámetros son copiados a almacenamiento
temporal de la función al hacer el llamado, por lo que los cambios de que son objeto no
afectan el parámetro real que se pasó.
c(!å!%å á'
Por último, es posible hacer una conversión de tipo en forma explícita, indicando entre
paréntesis el tipo al que se quiere convertir una determinada expresión. Esto se hace
siguiendo la siguiente sintaxis:
(tipo>) expresion>
!
½? parte_entera = 7/4;
o? A la variable se le asignará el resultado de la división pero
truncado: 1
½? (int)(7.0/4.0)
o? El resultado de esta expresión también es 1
½? 7.0/4.0
o? El resultado de la división será exacto, con todos los decimales
½? 7.0/4
o? Se convierte el 4 a 4.0 y la división arroja decimales
½? x = 7.0/4.0
o? El resultado de la división tendrá decimales, pero si la variable es de
tipo entero al asignar el valor habrá truncamiento.
½? (float)1
o? Convierte 1 a tipo , resultando en 1.0
!
Al igual que las instrucciones, los datos del programa también pueden estructurarse,
definiéndolos 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
sección sobre declaración de variables.
/ .!
/ .!8
§ ?librerías>
tipo> @
{
cuerpo_de_la_función_principal>
§include stdio.h>
Para llevar a cabo esta interacción es necesario contar con instrucciones destinadas para
tal efecto. Las bibliotecas del lenguaje de programación 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 u
(biblioteca ï ).
Para llevar a cabo salida con formato contamos con la instrucción , la cual permite
desplegar en la pantalla del computador información de variados tipos, permitiéndonos
a la vez especificar la forma en que dichos datos deberán aparecer (formato).
/
/ .!8
La cadena de formato debe ir delimitada por comillas dobles, y debe incluir una
especificación de conversión por cada argumento en la lista de argumentos. El texto que
se incluya en la cadena de formato aparecerá durante el despliegue, y cada
especificación de conversión será reemplazada por el correspondiente argumento.
! !c(!
! de Kernighan y Ritchie.
!
+(!! !c(!
Ejemplo de impresión en pantalla ( ). Imprime un valor de tipo utilizando
varios formatos dentro de .
u
/ .!8
ï
( "cadena_de_control", lista_de_argumentos> ) ;
½? Caracteres ordinarios (distintos de %), los cuales se espera que coincidan con el
próximo caracter %, distinto de blanco del flujo de entrada.
½? d - indica que se espera un número decimal (el argumento debe ser un puntero a
).
½? h - similar al anterior, pero el argumento debe ser puntero a ï .
½? lx - similar a los anteriores, pero el argumento debe ser puntero a .
½? c - indica que se espera un caracter (el argumento debe ser un puntero a u).
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 número con decimales (el argumento debe ser un
puntero a ). La entrada puede darse en notación 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 .
!
½? scanf("%d", &edad);
o? Espera un entero que será almacenado en la variable edad.
scanf("%4d", &agno);
scanf("%s", nombre);
c !
Con este fin, el lenguaje ofrece la posibilidad de incluir dentro del programa cualquier
texto que pretenda comentar el código escrito. Este texto puede abarcar una o varias
líneas, y debe incluirse dentro de los delimitadores mostrados a continuación.
/ .!8
!
/* Programa para calcular ...
Escrito por ...
*/
int radio; /* Guarda el radio del circulo */
/* Funcion que calcula el area de un circulo */
float area(float radio) { ...
Ahora bien, las normas aquí mostradas ! "! !, y reflejan únicamente las
preferencias del autor. Existen muchas otras, quizá hasta mejores. Lo importante aquí es
adoptar un estándar y respetarlo al máximo posible. ëe esta forma escribiremos
programas correctos, no sólo en cuanto a su funcionalidad, sino también en cuanto a su
apariencia.
4!!!
Trate siempre de que el nombre ayude a comprender la función del objeto que
está identificando. Por ejemplo, una variable que almacena la edad de un
empleado podría llamarse , o mejor aún
, y no simplemente
. Las funciones deben tener nombres activos, como uï, y no
simplemente ï, o peor aún un nombre sin sentido. Cuanto más
significativos sean los nombres, menor será la cantidad de comentarios que
deberá incluir.