1. Fundamentos de c

27
FUNDAMENTOS DE C Y SENTENCIAS BÁSICAS UNIDAD I.-FUNDAMENTOS DE C Y SENTENCIAS BÁSICAS. 1.1 INTRODUCCIÓN 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, implantándolo 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 describían las bases del lenguaje C usado en la versión V de UNIX. Este libro sirvió como punto de referencia para que varias compañías crearan compiladores de C. La principal características de estos compiladores era que todos soportaban de manera casi uniforme el C de Kernigham y Ritchie, agregándole características 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 definición del lenguaje no ambigua e independiente de la máquina. Lo cual se logró en 1989 y se le conoce como el documento ANSI/ISO 9899: 1990. En este documento también se establecen también las bibliotecas estándar de C, las cuales contienen una amplia colección de funciones que hace la vida del programador más fácil, al proporcionarle herramientas bien pensadas y 1

description

fundamentos de c

Transcript of 1. Fundamentos de c

UNIDAD I

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.

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 palabras reservadas que se encuentran en la tabla siguiente:

Tabla de palabras reservadas

autobreakcasecharconst

continuedefaultdodoubleelse

enumexternfloatforgoto

ifintlongregisterreturn

shortsignedsizeofstaticstruct

switchtypedefunionunsignedvoid

volatilewhile

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.

Palabras reservadas en Turbo C adicionales a las de ANSI C

Sm_cs_ds_es_ss

cdec1farhugeinterruptnear

Pascal

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 variableNombre 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.

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 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 enterasLas 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.

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.

CaracterSignificadoCarcterSignificado

\aBell\bBackspace

\fff\ncr+lf

\rcr\ttab. Horizontal

\vtab. Vertical\\diagonal invertida

\?signo interrogacin\comilla simple

\comilla doble\0nulo (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

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.14161.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:

TIPOVALORESRANGOBITS

charUn caracter- 128 a 1278

intEnteros- 32768 a 3276716

floatFlotantes cortos3.4 E 38 a 3.4 E +3832

doubleFlotantes largos1.7 E 308 a 1.7 E +30864

voidNuloSin valor0

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.

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.

TIPOEQUIVALENCIASBITSRANGO

Charsigned char8-128 a 127

unsigned char80 a 255

signed short intsigned, short, int, signed short,

signed int, short int16-32768 A 32767

unsigned short intunsigned short, unsigned int160 a 65535

signed long intlong, signed long32-2,147483648 a 2147483647

unsigned long intunsigned long320 a 4294967295

float323.4 E-38 a 3.4 E+38

double641.7 E-308 a

1.7 E+308

long double803.4 E-4392 a

3.4 E+4392

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.

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

main()

{< variables locales>

}

( )

{

}

:

( )

{

}

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.

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.

OperadorSignificadoEjemplo

+, -Mas y menos Monarios+a, -a

*, /, %multiplicacin, divisin, moduloa*b, a/b, a%b

++incremento en 1a++ (a = a+1)

--decremento en 1a-- (a = a - 1)

1.2.1.2 Asignacin

Instruyen al compilador para que guarde en una variable el resultado de una operacin

OperadorSignificadoEjemplo

=Asignaa =3

*=Multiplica y asignaa *=b (a =a*b)

/=Divide y asignaa /=b (a =a/b)

+=Suma y asignaa +=b, (a = a +b)

-=Resta y asignaa-=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

OperadorSignificadoEjemplo

>Mayora>b

>=mayor o iguala>=b

); 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

1.4.3 COMPILACIN Y EJECUCIN

PAGE 9