Anda di halaman 1dari 20

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

UNIDAD I.-FUNDAMENTOS DE C Y SENTENCIAS BSICAS.


1.1 INTRODUCCIN
1.1.1. ANTECEDENTES DE LENGUAJE C
Fue el resultado del desarrollo escalonado de los lenguajes BCPL y B.
BCPL fue desarrollado por Martin Richards en 1967 para escribir sistemas operativos e
influy en el lenguaje llamado B, que fue inventado por Ken Thompson, en 1967 en los
laboratorios BELL y fue usado en las versiones iniciales del sistema operativo UNIX.
A inicios de los 70, el lenguaje B llev a Dennis Ritchie a desarrollar el lenguaje C en una
Dec PDP-11, implantndolo en 1972 en UNIX, donde fue considerado como lenguaje base.
A finales de los 70, Brian Kernigham y Dennis Ritchie publicaron un libro en el cual
describan las bases del lenguaje C usado en la versin V de UNIX. Este libro sirvi como
punto de referencia para que varias compaas crearan compiladores de C.
La principal caractersticas de estos compiladores era que todos soportaban de manera casi
uniforme el C de Kernigham y Ritchie, agregndole caractersticas especiales que eran muy
tiles, pero que no se aplicaba a todos lo compiladores.
Al notar lo anterior, la ANSI creo en 1983 un comit para que proporcionara una definicin
del lenguaje no ambigua e independiente de la mquina. Lo cual se logr en 1989 y se le
conoce como el documento ANSI/ISO 9899: 1990.
En este documento tambin se establecen tambin las bibliotecas estndar de C, las cuales
contienen una amplia coleccin de funciones que hace la vida del programador ms fcil, al
proporcionarle herramientas bien pensadas y construidas con cuidado, y que adems son
comunes en todos los compiladores.

1.1.2. CARACTERSTICAS. EL POR QU DE SU POPULARIDAD.


Existen una serie de caractersticas que hacen del lenguaje C, uno los mas usados en el ambiente
computacional, en cualquier nivel.
Esas caractersticas son las siguientes:

Lenguaje de nivel medio : Se considera as porque tiene algo de los dos extremos
adyacentes; caractersticas de los lenguajes de alto nivel, y caractersticas de los
ensambladores. Sin embargo se extraaran caracterstica de los lenguajes de alto nivel
(principalmente la proteccin de mbito y abstraccin) as como el control total del
hardware que se puede tener en un ensamblador.
1

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

Es portable: Significa que si se tiene cuidado de seguir las normas ANSI, se pueden
escribir cdigos que funcionen en cualquier compilador que se precie de ser compatible con
ANSI; incluso en compiladores de otras plataformas. Esta caracterstica puede ser tambin
limitante, ya que las mejoras particulares que un compilador agregue, no siempre son
aceptadas por otros, lo cual es un factor de peso al desarrollar aplicaciones.

Pocas palabras clave : El Lenguaje C estndar ANSI solo define 32 palabras clave. El
tener menos palabras reservadas que aprender resulta interesante, comparado con otros
lenguajes en los cuales se tiene que aprender al menos un centenar de palabras reservadas.
El inconveniente resulta que estas palabras reservadas no incluyen procesos de E/S, los
cuales se hacen a travs de funciones de la biblioteca estndar.

Es estructurado: Las caractersticas estructuradas de C no son tan amplias como las que
proporcionan lenguajes de alto nivel, que permiten incluso anidar subrutinas. En C solo se
cuentan con subrutinas de tipo funcin, pero estas son flexibles que no es necesario contar
con otro tipo para trabajar en el lenguaje.

Reemplazo de lenguajes ensambladores: Se considera como un buen reemplazo de


ensambladores, ya que genera programas que son casi tan eficientes como los creados en
ensamblador. Esto se debe a que muchos procesos que hacen lento el funcionamiento de los
lenguajes de alto nivel en C quedan a cargo del programador.

Diseado para programadores profesionales : Se considera as, por que el programador


debe de cuidar muchos detalles de tipo tcnico que en los lenguajes de alto nivel, el
compilador controla automticamente.

1.1.3. PALABRAS RESERVADAS POR ANSI


El estndar ANSI establece que cualquier implementacin deber considerar las
reservadas que se encuentran en la tabla siguiente:

palabras

Tabla de palabras reservadas


auto
continue
enum
if
short
switch
volatile

break
default
extern
int
signed
typedef
while

case
do
float
long
sizeof
union

char
double
for
register
static
unsigned

const
else
goto
return
struct
void

Adicionales a estas palabras reservadas cada implementacin de C agrega otras palabras mas. En el
caso de Turbo C, por ejemplo, se tiene las siguientes palabras reservadas.
2

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

Palabras reservadas en Turbo C adicionales a las de ANSI C


Sm
cdec1
Pascal

_cs
far

_ds
huge

_es
interrupt

_ss
near

Conocer las palabras reservadas en un lenguaje de programacin evita que estas sean usadas como
identificadores, lo cual no esta permitido.
Lenguaje C distingue entre maysculas y minsculas en sus identificadores; a esta
caracterstica se le llama sensibilidad al contexto (case sensitive).
1.1.4 VARIABLES, DECLARACION E INICIALIZACION
1.1.4.1 Variables.
Una variable es un nombre asignado a una posicin de memoria donde se puede almacenar
un dato el cual puede cambiar durante la ejecucin de un programa. Los programas utilizan
variables para guardar varios tipos de datos durante su ejecucin. De hecho al usar un nombre de
variable en el programa, se esta haciendo referencia al dato que se encuentra guardado ah.
1.1.4.2 Declaracin de variables.
En C, una variable debe ser declarada antes de ser utilizada. Una declaracin de variable le
informa al compilador el nombre de la variable, el tipo de dato que se va a guardar y,
opcionalmente, la inicializa a un valor especfico. Si el programa trata de utilizar una variable que
no ha sido declarada, el compilador genera un error. Una declaracin de variable tiene la forma
siguiente:
Nombre de tipo nombre de variable
Nombre de tipo es una palabra reservada que especifica el tipo base del dato que se manejar con
esa variable.
Nombre de variable es el nombre que se le da a la variable. Se pueden declarar varias variables de
un mismo tipo, separando sus nombres por comas.
Ejemplo: int area, lado, cateto;
float porcentaje, total;
Reglas que se deben tener presente para darle nombre a las variables:
El nombre puede contener letras, dgitos y caracter de subrayado (_) .
El primer caracter del nombre debe ser una letra. Aunque el caracter de subrayado tambin
se acepta como inicial no se recomienda.

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


Tiene importancia el uso de maysculas y minsculas debido a que para el compilador los
dos tipos de letras son diferentes. Ejemplo contador y Contador son variables distintas.
Las palabras reservadas no se pueden utilizar como nombres de variables ya que una
palabra reservada es parte del lenguaje C.
Aunque el nombre de una variable puede tener una longitud de ms de 31 caracteres solo
los primeros 31 son significativos. se recomienda no utilizar nombres muy largos.
Si el nombre de una variable contiene 2 o mas palabras ser necesario unirlas con un
carcter de subrayado o bien unirlas sin dejar espacio entre ellas, pero escribiendo con letra
mayscula la inicial de cada palabra.
Ejemplo: tasa_interes o TasaInteres .
1.1.4.3 Inicializacin de las variables
Cuando se declara una variable se le instruye al compilador para que reserve espacio de
almacenamiento para la variable. Sin embargo el valor contenido en ese espacio o sea el valor de
la variable no est definido por lo que puede ser cero o basura al azar. Antes de utilizar una variable
siempre se debe inicializar a un valor conocido. Esto puede hacerse en forma independiente a la
declaracin de la variable, usando un enunciado de asignacin.
Ejemplo:
int contador; /* Reserva espacio para almacenamiento de contador */
contador = 0; /* Guardo un 0 en contador */
Cuando existen mas de una variable de un mismo tipo se separan por comas los nombres de cada
una de ellas.
Ejemplo:
int a, b3, c_1;
Tambin es posible inicializar una variable en el momento en que es definida hacindolo de la
siguiente forma:
int a=10, b3=5, c_1=20;

1.1.4.4.Tipos de variables
Existen 3 tipos de variables.
1. Las variables locales : Se definen dentro de un bloque de una funcin, al inicio del mismo,
antes de cualquier instruccin ejecutable (esto cambia en C++). Se crean en el stack
temporalmente mientras dure la funcin. Su mbito es solo el cuerpo de la funcin. Toman

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


como valor inicial, el que este en la memoria donde se aloja, por lo que es conveniente
inicializarlas antes de usarlas.
2. Los parmetros formales : Se consideran como variables locales, aunque se declaran en la
cabecera de la funcin por lo que se comportan como variables locales.
3. Las variables globales : Se declaran al inicio del programa fuera del mbito de un bloque
y se inicializan automticamente con 0. Son conocidas por cualquier funcin definida
despus de ella.

1.1.5 CONSTANTES. Las constantes son objetos que no cambian su valor durante la ejecucin de
un programa y se clasifican en constantes literales y constantes simblicas
1.1.5.1 Constantes literales
Tienen la finalidad de declarar un valor fijo en el cdigo del programa, el cual puede ser
almacenado en una variable o puede ser usado como operando de una expresin. A continuacin se
enlistan los tipos de constantes literales.
1.1.5.1.1 Numricas enteras
Las constantes numricas enteras se colocan sin valor fraccional y pueden expresarse en los
siguientes sistemas numricos:
-Decimales P.E.: 9, 16, 3241
-Octales
P.E.: 012=10 dec. 076 =62 dec.
-Hexadecimales
P.E.: 0x12=18 dec. 0x2f=47 dec.
El espacio que ocupa en memoria una constante literal por default es el mismo que ocupara una
variable tipo int.
Sin embargo se puede indicar que se desea que ocupe el espacio de un long poniendo despus del
valor entero una letra L .
Tambin se puede indicar que se desea un entero sin signo si se le agrega despus del valor una
letra U.
1.1.5.1.2 Numricas flotantes.
Las constantes flotantes pueden expresarse en forma decimal o en forma exponencial.
En forma decimal solo se indica: la parte entera, el punto y la parte fraccionaria.
En formato exponencial se indica: la parte entera, el punto, la parte fraccional el letra E y la
potencia.
Ejemplos:
Decimal:
123.4523
exponencial: 1.234523e+2
Por default una constante flotante ocupara el espacio de una variable double. Sin embargo se le
puede poner despus las letras F o L.
F instruye al compilador para que la constante ocupe el espacio de una variable float y L le indica
que ocupe el espacio de una long double.
5

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

1.1.5.1.3 Caracteres ASCII


Las constantes de caracteres ASCII se encierran entre comillas simples. P.E.: z y t.
Pudindose indicar cualquier carcter del cdigo ASCII.
Los caracteres de control (que no se pueden expresar directamente por teclado) se indican con el
formato \n donde n puede ser el caracter ASCII expresado numricamente en:

Decimal
Octal.
Hexadecimal.

Una letra clave para los caracteres de control comunes.


La siguiente tabla muestra las constantes de carcter de control permitidos.
Caracter
\a
\f
\r
\v
\?
\

Significado
Bell
ff
cr
tab. Vertical
signo interrogacin
comilla doble

Carcter
\b
\n
\t
\\
\
\0

Significado
Backspace
cr+lf
tab. Horizontal
diagonal invertida
comilla simple
nulo (terminador de
cadena)

Cabe mencionar que a pesar de poderse asignar valores ASCII en variables, C maneja internamente
todo como nmeros. Es decir se pueden sumar dos constantes caracter, cosa que en otros lenguajes
es incongruente.
Ejemplo:
\14
=
\015 =
\xd =
ff
1.1.5.1.4 Cadenas
Las constantes de cadena, a diferencia de las de carcter, permiten almacenar mas de una
letra. La cadena de caracteres se encierra entre comillas dobles a diferencia de las de carcter que
van entre comillas sencillas.
Se puede usar cualquier caracter del cdigo ASCII dentro de una cadena. Para indicar un caracter
que no se puede poner a travs de teclado se usa la misma convencin vista para constantes
caracter.
C no cuenta con un tipo nativo para manejar cadenas, para hacerlo usa arrays de datos char.
Con lo que sigue siendo valido lo mencionado anteriormente, de que todo se maneja internamente
como nmeros.
Ejemplo
\Tec. de Veracruz\\n

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


Constante simblica
Es una constante que est representada en el programa por un nombre (smbolo) y su valor
no puede ser cambiado.
Si se necesita el valor de la constante se utiliza su nombre. Se define con la directiva #define o con
la palabra clave const.
Ejemplo:
#define PI 3.1416
const float pi = 3.1416
1.1.6. TIPOS DE DATOS Y SUS MODIFICADORES.
1.1.6.1 Tipos de datos.
Los tipos de datos base en C son los siguientes:
TIPO
char
int
float
double
void

VALORES
Un caracter
Enteros
Flotantes cortos
Flotantes largos
Nulo

RANGO
- 128 a 127
- 32768 a 32767
3.4 E 38 a 3.4 E +38
1.7 E 308 a 1.7 E +308
Sin valor

BITS
8
16
32
64
0

1.1.6.2 Modificadores tipo


Son palabras que modifican el rango del tipo base, para adecuar los datos a las diversas situaciones
en que estos se encuentran los datos.
Los modificadores son:

signed.
unsigned.
short.
long.

Estos modificadores se pueden aplicar solo a los tipos


int
char
double (no a void y float).
Aunque es permitido indicar un entero con el modificador signed por default todos los enteros
soportan valores signados, por lo que es redundante indicarlo.

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

En la tabla que sigue se puede observar cmo se combinan los modificadores con los diferentes
tipos base y los rangos de valores que nos dan en cada caso.
TIPO
Char
unsigned char
signed short int
unsigned short int
signed long int
unsigned long int
float
double

EQUIVALENCIAS
signed char
signed, short, int, signed short,
signed int, short int
unsigned short, unsigned int
long, signed long
unsigned long

long double

BITS
8
8
16

RANGO
-128 a 127
0 a 255
-32768 A 32767

16
32
32
32
64

0 a 65535
-2,147483648 a 2147483647
0 a 4294967295
3.4 E-38 a 3.4 E+38
1.7 E-308 a
1.7 E+308
3.4 E-4392 a
3.4 E+4392

80

1.1.6.2.2 Modificadores de almacenamiento.


Le dicen al compilador como manejar y donde colocar las variables a las cuales se aplique este
modificador. Los modificadores son los siguientes: extern, static, register y auto.
extern :Evita la redundancia en la declaracin de variables, en diferentes archivos.
static : permite que una variable local o global conserve su valor entre diferentes llamadas,
sin que sea conocida fuera de su mbito.
register: le indica al compilador que la variable especifica tenga alojamiento en los
registros del CPU y no en la memoria, con lo cual el manejo de la variables es mas rpido.
Es ideal para usarla como contadores y solo se aplica a variables de tipo char e int.
auto : no se usa, ya que sirve para definir a las variables locales. Sin embargo todas las
variables por default son locales, por lo que no es necesario hacerlo.

1.1.6.2.3 Modificadores de acceso


Especifican las reglas con las que pueden ser accesadas (modificadas) las variables a las que
afecta.

const : permite definir en una zona de memoria en la cual se almacena un valor que no
puede ser modificado. Un uso til de este modificador es el de evitar que una funcin
modifique un parmetro pasado por referencia.
8

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

volatile
: permite que se defina una variable cuyo valor no ser modificado de forma
explcita (por asignacin, entrada, etc), evitando algn tipo de optimizacin que el
compilador quiera hacer en ella.

1.1.7 ESTRUCTURA DE UN PROGRAMA


1.1.7.1 Componentes
<declaraciones de variables globales>
<declaraciones de cabeceras de funcin>
main()
{
< variables locales>
<conjunto de sentencias>
}
<subrutina1> ( <parmetros>)
{
<variables locales>
<conjunto de sentencias>
}
:
<subrutina-N> ( <parmetros>)
{
<variables locales>
<conjunto de sentencias>
}

Reglas de mbito.- Determinan cual es el alcance de una funcin o variable dependiendo del lugar
donde fue declarada.
Las principales reglas de mbito en C son las siguientes:
1. Un bloque de cdigo puede ser el cuerpo de una funcin, as como una agrupacin de
instrucciones delimitadas por llaves.
2. El cdigo y las variables de una funcin son privados a la misma y solo pueden ser
accesadas a travs del llamado a la funcin.
3. Una funcin solo es conocida del lugar donde fue definida hacia abajo.

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


1.2 EXPRESIONES
Una expresin en C es una combinacin de operadores, constantes y variables que
obedecen una serie de reglas algebraicas. Sin embargo, la expresiones tienen unos aspectos que se
relacionan con C.
1.2.1 Operadores
Los operadores son smbolos que le indican al compilador que realice manipulaciones matemticas
o lgicas especficas sobre operandos. C cuenta con una rica variedad de operadores de diversos
tipos, los cuales se clasifican en matemticos, asignacin, relacionales, lgicos y sobre bits.
1.2.1.1 Matemticos
Indican operaciones matemticas como suma, resta, etc.
Operador
+, *, /, %
++
--

Significado
Mas y menos Monarios
multiplicacin, divisin, modulo
incremento en 1
decremento en 1

Ejemplo
+a, -a
a*b, a/b, a%b
a++ (a = a+1)
a-- (a = a - 1)

1.2.1.2 Asignacin
Instruyen al compilador para que guarde en una variable el resultado de una operacin
Operador
=
*=
/=
+=
-=

Significado
Asigna
Multiplica y asigna
Divide y asigna
Suma y asigna
Resta y asigna

Ejemplo
a =3
a *=b (a =a*b)
a /=b (a =a/b)
a +=b, (a = a +b)
a-=b (a=a-b)

1.2.1.3 Relacionales
Instruyen al compilador para que este compare dos o mas expresiones. El resultado es 1 o 0 el cual
se interpreta como cierto o falso
Operador
>
>=
<
<=
==
!=

Significado
Mayor
mayor o igual
Menor
Menor o igual
Igual
Diferente

Ejemplo
a>b
a>=b
a<b
a<= b
a ==b
a!= b
10

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


1.2.1.4 Lgicos
Permiten combinar dos o mas expresiones relacionales en una sola la cual se evala a cierto o falso.
Operador
!
&&
||

Significado
Not
And
Or

Ejemplo
!a, !( a < b )
a&&b, (a<b)&&(b<c)
a||b, (a<b) || (b<c)

1.2.1.5 Sobre bits


Se aplican sobre los tipos de datos : char, int y long
Operador
&
|
^
~
<<=
>>=

Significado
and
or
or exclusivo (xor)
Complemento a uno (not)
Corre bits a la izq. y asigna
Corre bits a la der. y asigna

Ejemplo
a&b
a|b
a^b
!a
a<<=2 (a =a<<2)
a>>=2 (a =a>>2)

Ejemplo de operadores sobre bits


char a=193,b=127,c;
c=a&b /* 11000001& 01111111=01000001 SON 65 */
a=128; b=3;
c=a|b /* 10000000 | 00000011=10000011 SON 131 */
a=127; b=120;
c=a^b /* 01111111 ^ 01111000=00000111 SON 7 */
a=7;
c=~a /*
~01111111=10000000 SON 128 */
c=a<<2
/*
00000111<<2=00011100 SON 28 */
b=c>>1
/*
00011100>>1=00001110 SON 14 */

1.2.2.1. Evaluacin de expresiones.


Las expresiones que usan operadores de relacin son expresiones de C verdaderas, que
evalan por definicin a un valor. Las expresiones relacionales evalan a un valor que puede ser
falso (0) o cierto (1) . Aunque el uso ms comn para las expresiones relacionales se da dentro de
los enunciados if y otras construcciones condicionales, pueden usarse como valores numricos
puros.
Precedencia de los operadores de relacin.
De manera similar a los operadores matemticos, los operadores relacionales tienen una
precedencia que determina el orden en el que se ejecutan en una expresin que tiene varios
operadores. De forma similar, se pueden utilizar parntesis para modificar la precedencia en
expresiones que usan operadores relacionales.
11

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


En primer lugar, todos los operadores relacionales tienen menor precedencia que los
operadores matemticos. Por lo tanto si se escribe if ( x + 2 > y ) el 2 es sumado a x y el
resultado es comparado con y . Tambin hay una precedencia de dos niveles dentro de los
operadores de relacin.
Orden de precedencia de los operadores relacionales de C.
Operador
<, <=, >, >
!=,==

Precedencia
1
2

Precedencia de los operadores lgicos.


Los operadores lgicos tambin tienen un orden de precedencia, tanto entre ellos como en
relacin a otros operadores. El operador tiene una precedencia igual a los operadores
matemticos unarios ++ y --. Es decir tiene una precedencia mayor que todos los operadores
relacionales y todos los operadores matemticos binarios .
Por el contrario los operadores && y || tienen una precedencia mucho menor que todos los
operadores matemticos y relacionales aunque la precedencia de && es mayor que la de ||.
De manera similar a los otros operadores se pueden utilizar parntesis para modificar el
orden de evaluacin cuando se usan operadores lgicos.
1.2.2.2. Asociatividad y precedencia de los operadores
Operador
Asociatividad
(), [ ], >
izq. a der.
+ - ++ -- ! (tipo) & * ~ sizeof
Der. a izq.
* / %
Izq. a Der.
+ Izq. a Der
<< >>
Izq. a Der.
< <= > >=
Izq. a Der.
== !=
Izq. a Der.
&
Izq. a Der.

Izq. a Der.
|
Izq. a Der.
&&
Izq. a Der.
||
Izq. a Der.
?:
Der. a Izq.
= += -= *= /= %= &= |=
Der. a Izq.
= <<= >>=

Tipo
Agrupacin
Arit. unarios
Arit. multiplicativos
Arit. Aditivos
Despl. de bits
Relacional
Rel. igualdad
and binario
xor binario
or binario
and lgico
or lgico
Condicional
Asignacin

Precedencia
Mayor

Menor

1.2.3 EXPRESIONES CON TIPOS DE DATOS MIXTOS

12

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


Una expresin devuelve un resultado de un tipo especfico, segn los operadores y tipos de
las variables usadas. Casi todas las situaciones de expresiones normales caen bajo el dominio de las
reglas del lgebra. Sin embargo existen algunas situaciones especificas que lenguaje C maneja de
forma diferente.
Cuando se mezclan variables de diferentes tipos, C tiende a convertirlos al tipo mas alto de
las variables usadas. Estas conversiones se rigen por las siguientes reglas:
Todos los char y short int se convierten a int.
Todos los float a double.
Para cada par de operandos ocurre lo siguiente, en secuencia:
Si uno de los operadores es long double el otro se convierte a este mismo tipo.
Si uno de los operadores es double el otro se convierte a este mismo tipo.
Si uno de los operadores es long el otro se convierte a este mismo tipo.
Si uno de los operadores es unsigned el otro se convierte a este mismo tipo.

Ejemplo:
char ch;
int i;
float f;
double d;
resultado = ch / i + f
int

* d

double

int

- f

double

double

double
double
double

double
double

13

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

1.2.3.1 CONVERSIN DE TIPOS EN LA ASIGNACIN.


La conversin de variables en la asignacin, se hace ajustando la variable de la derecha
(fuente) al tipo del de la izquierda (destino). Con esto se puede perder valores si la variable destino
es mas pequea que la fuente.
Para entender esto veamos el siguiente ejemplo:

#include <stdio.h>
main()
{ int x=300;
char ch=300;
float f=30.5;
ch=x;
printf( %d\n,ch);
x=f;
printf( %d\n,x);
f=300/ch;
printf( %f\n,f);
f=ch;
printf( %f\n,ch);
}

/* Caso 1 da 44*/
/* Caso 2 da 30*/
/* Caso 3 da 6.00*/
/* Caso 4 da 40.00*/

En el caso 1 se toman los 8 bits menos significativos, no considerando el byte alto por lo
que los valores que pasen de 128 son truncados.
En el caso 2 se toma solo la parte entera de la variable float.
En los casos 3 da 6.00 en vez de 6.82 como debera, ya que como los dos operadores son
enteros (char e int) el resultado da un divisin entera.
En el caso 4 se convierten del char a flotante.

14

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

La siguiente tabla resume las conversiones de diferentes tipos al asignar valores.


Destino
unsigned char
char
char
char
short int
int
int
float
double

Fuente
char
short int
int
long int
long int
long int
float
double
long double

Posible prdida de informacin


Si valor > 127, destino negativo
signo
El byte mas significativo
Los tres bytes mas significativos
Los 3 bytes mas significativos
Los 2 bytes mas significativos
Parte fraccional y prob. Mas
Precisin, se redondea valor
Precisin, se redondea valor

1.2.4 CONSTRUCCIN CASTS


Es una instruccin que permite forzar a una expresin a ser de un tipo. El formato general
de un casts es :
(tipo) expresin
Donde tipo es uno delos tipos de datos estndar de C
Por ejemplo si x es int y se desea que la computadora evalu x/2 como un float, se escribe
de la siguiente forma:
(float) x / 2
Aqu el cast (float) se asocia con x lo cual hace que la computadora eleve el 2 a float y el
resultado sea float.
Es recomendable tener cuidado con los casts. En el ejemplo anterior se asocia a x como un
float, sin embargo si se pone de la siguiente manera no se tendr el mismo resultado:
(float) (x / 2)
En este caso primero se hace la divisin, (una divisin entera) y luego esta divisin se
convierte a float.
1.3 ENTRADA Y SALIDA DE DATOS
1.3.1 Funciones de e/s sin formato
La definicin de las funciones de entrada / salida bsicas que se pueden usar, se encuentran
en los archivos de cabecera stdio.h y conio.h.
Para poder usar dichas funciones, se debe poner disponible con la directiva del compilador
include en la siguiente forma:

15

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

#include <stdio.h>
#include <conio.h>
Las funciones mas comunes son las siguientes:
Funcin:
Accin:

int getche(void);
Libreria:conio.h
Lee un carcter desde el teclado, colocndolo en una variable de tipo entero (char o
int), haciendo eco en pantalla del carcter captado.

Funcin:
Accin:

int putchar(int c);


Libreria:stdio.h
escribe un carcter en la pantalla en la posicin que este el cursor.

Funcin:
Accin:

int getchar(void);
Libreria:stdio.h
Lee un carcter desde el teclado, pero espera el retorno de carro para pasarlo al
sistema.

Funcin:
Accin:

int getch(void);
Libreria:conio.h
Lee un carcter al igual que getche, pero no hace eco en pantalla.

Funcin:
Accin:

char *gets(char *s);


libreria:stdio.h
Lee una cadena de caracteres de la consola y devuelve un puntero a s que es una
string. Acepta toda la cadena hasta que se da retorno de carro, pero este no es
almacenado. En lugar de este la funcin le coloca el carcter terminador nulo \0.

Funcin:
Accin:

char *puts(char *s)


Libreria:stdio.h
Hace una salida a video de una cadena de caracteres, a partir del lugar donde se
encuentre el cursor.

1.3.2 FUNCIONES DE E/S CON FORMATO


Funcin:
Accin:

int printf(char *cad_ctr, lis_ar);


Libreria:stdio.h
Muestra en video la salida de datos formateados, usando una cadena de control, que
muestra la distribucin y el orden de las variables de salida en una cadena de
caracteres. Las variables a salir se indican en una lista de argumentos, despus de la
cadena de control, separados por comas y en el orden que se deseen.

Algunos ejemplos de salidas con printf()


printf("%-10.2f", 123.2)
printf("%10.2f", 3.236)
printf("%10s", "hola")
printf("%-10s", "hola")

|123.2
|
|
3.24|
|
hola|
|hola
|
16

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


printf("%7s","123456789")

|1234567|

Los cdigos de formato de salida para printf son los siguientes:


Cdigo
%c
%d
%i
%e
%f
%g
%o
%s
%u
%x
%%
%p
Funcin:
Accin:

Formato
Un solo carcter
Decimal
Decimal
Notacin cientfica
Punto decimal flotante
Usa %e o %f la que sea mas corta
Octal
Cadena de caracteres
Decimal sin signo
Hexadecimal
Imprime signo %
Visualiza un puntero

int scanf(char *cad_ctr, lis_ar);


Libreria:stdio.h
Esta funcin nos permite recibir desde el teclado cualquier tipos de datos y lo
convierte automticamente a un formato interno adecuado a la variable en que ser
recibido.

La cadena de control consta de tres tipos de caracteres: especificador de formato, caracteres


de espacio, y caracteres de no espacio.
Los indicadores de formato que se pueden usar son los siguientes:
Cdigo
%c
%d
%i
%e
%f
%o
%s
%x
%p

Significado
Lee un carcter nico
Lee un entero decimal
Lee un entero decimal
Lee un num. En flotante.
Lee un num. En flotante
Lee un octal
Lee una cadena
Lee un hexadecimal
Lee un puntero

17

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

Algunos ejemplo del uso de scanf.


Instruccin
scanf("%d", &cont)
scanf("%s",cadena)
scanf("%d%d",&r,&t)
scanf("%d%*c%d",&x,&y)
scanf("%20s",cadena)
scanf("%c%c%c",&a,&b,&c)
scanf("%dt%d",&x,&y)

Accin
Pasa la direccin de cont a scanf.
Lee una cadena de caracteres.
Lee dos valores, los cuales se separan por un blanco que puede
ser espacio, tab o cr.
Lee tres valores pero ignora el intermedio
Lee una cadena de solamente 20 caracteres, los restantes se
quedan en el buffer.
Lee tres caracteres no respetando caracteres blancos. Si se lee "X
Y", 'X' va a a, ' ' va a b y 'Y' va a c
Leer dos valores con una t
intermedia, la cual ser ignorada.

Programa muestra de scanf


#include stdio.h
main()
{ char cad[20];
char b; int en=-32766;
clrscr();
gotoxy(10,1);
puts(Programa de muestras de usos del scanf para entradas);
gotoxy(5,3);
printf(Escribe un nmero entero (char)=); scanf(%d,&en);
gotoxy(5,4); printf([%d],en);
gotoxy(5,6);
printf(Escribe una cadena de caracteres=); scanf(%s,cad);
gotoxy(5,7); printf([%s],cad);
gotoxy(5,9);
printf(Escribe dos enteros separados por espacio=);
scanf(%d%d,&b,&en);
gotoxy(5,10); printf([%d][%d],b,en);
gotoxy(5,12);
printf(Escribe dos enteros separados por una l=);
scanf(%dl%d,&b,&en);
gotoxy(5,13); printf([%d][%d],b,en);
getch();
}

18

FUNDAMENTOS DE C Y SENTENCIAS BSICAS

Programa muestra de instrucciones E/S y printf


#include <conio.h>
#include <stdio.h>
main()
{ char cad[20]; char b; int en=-32766; float fl=234.453;
clrscr();
gotoxy(10,1); puts(programa de muestras de usos de instrucciones de E/S);
gotoxy(5,3);
printf(prueba de getchar: presione una tecla y luego enter..>);
b=getchar();
b=getchar(); /*saca del bufer de la libreria stdio el
carcter #10 */
gotoxy(5,4);
printf(Prueba de getche: presiones una tecla.>); b=getche();
gotoxy(5,5);
printf(Prueba de getch: presione una tecla.>);
b=getch();
gotoxy(15,6);
printf(La tecla presionada fue = [%c],b);
gotoxy(5,8);
printf(Prueba de gets: escriba una cadena y enter.>); gets(cad);
gotoxy(10,10); printf(Pruebas de impresion usando printf);
gotoxy(10,11); printf(El carcter %c capturado arriba,b);
gotoxy(10,12); printf(El caracter %c, como decimal= %i,b,b);
gotoxy(10,13); printf(El nmero %i en octal=%o,b,b);
gotoxy(10,14); printf(El nmero %i en hexa.=%x,b,b);
gotoxy(10,15); printf(El nmero %i pero sin signo=%u,en,en);
gotoxy(10,16);
printf(El nmero %f en notacin cientifica= %8.3e,fl,fl);
gotoxy(10,17);
printf(El nmero %f en flotante con decimales [%10.1f],fl,fl);
gotoxy(10,18);
printf(La forma mas corta %g de los dos de arriba,fl);
gotoxy(10,19); printf(Con un mensaje:[%s],cad);
gotoxy(10,20);
printf(Cadena con tamao especfico:[%30s],cad);
gotoxy(10,21);
printf(Cadena con tamao justificada:[%-30s],cad);
getch();
}
1.4. ENTORNO DEL COMPILADOR
1.4.1 RECONOCIMIENTO DEL ENTORNO
1.4,2 CAPTURA, EDICIN Y SALVADO DE UN PROGRAMA

19

FUNDAMENTOS DE C Y SENTENCIAS BSICAS


1.4.3 COMPILACIN Y EJECUCIN

20

Anda mungkin juga menyukai