Lengiaje C

Informática. UNIX. Estructura y fases. Constitución. Declaraciones de variables. Críticas

  • Enviado por: Cronosinda
  • Idioma: castellano
  • País: Venezuela Venezuela
  • 20 páginas
publicidad

REPUBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR

PARA LA EDUCACION SUPERIOR

INSTITUTO UNIVERSITARIO DE TECNOLOGIA

PEDRO EMILIO COLL”

MARACAIBO-ESTADO ZULIA

 
 
 
  
 
 

LENGUAGE C 
  


 
 

MARACAIBO, 21 de Enero de 2008

INTRODUCCION.

El lenguaje C se conoce como un lenguaje de medio nivel, pues podríamos situarlo entre los lenguajes de bajo nivel o de máquina (ensamblador) y los de alto nivel como el PASCAL, por ejemplo.

Un lenguaje de medio nivel nos ofrece un conjunto básico de sentencias de control y de manipulación de datos que nos permitirá construir sentencias y estructuras de nivel más alto.

En la actualidad existen numerosos compiladores de C, todos ellos con sus peculiaridades, sin embargo, prácticamente todos son compatibles con el C normalizado por ANSI, el ANSI C, en el que nos centraremos partir de ahora.

Definicion

HISTIRIA

El lenguaje C fue diseñado por Dennis Ritchie, de los Laboratorios Bell, y se instaló en un PDP-11 en 1972.

Se diseñó para ser el lenguaje de los sistemas operativos UNIX.

Se creó para superar las limitaciones del lenguaje B, utilizado por Ken

Surgió a partir de dos lenguajes de programación de sistemas, BCPL y B.

Thompson para producir la versión original de UNIX en 1970.

El lenguaje B se basó en BCPL, lenguaje sin tipos desarrollado por

Martin Richards, en 1967, para programación de sistemas.

Su definición apareció en 1978: apéndice "C Reference Manual" del libro "The C programming Language" de Brian W. Kernighan y Dennis M. Ritchie (Ed. Prentice-Hall).

En 1983, se publicó otro estándar:

"The C Programming Language-Reference Manual" (Lab.Bell) escrito por Dennis M. Ritchie

A mediados de los ochenta ya había en el mercado numerosos compiladores C, y muchas aplicaciones habían sido reescritas a él para aprovechar sus ventajas.

Durante este periodo de tiempo numerosos fabricantes introducen mejoras en el lenguaje, las cuales son recogidas por un comité de estandarización ANSI y establecen las especificaciones de lo que se conoce hoy en día como 'ANSI C'.

Estructura y fases de creación de un programa C

Un programa C está formado exclusivamente por funciones independientes. A diferencia de lenguajes como PASCAL, en C no se puede crear una función dentro de otra función.

El código de un programa C suele distribuirse entre varios ficheros fuente (con extensión .c), denominados módulos. Así, habitualmente un programa de cierto tamaño constará de un módulo que contiene el programa principal (ubicado en una función especial denominada main()), y de otros módulos con el código de diversas funciones agrupadas según algún criterio, o con definiciones de tipos utilizados. Además, todos los compiladores ponen a disposición del programador una enorme cantidad de funciones, accesibles

por medio de librerías (ver sección 7.4). De hecho, si el programa es suficientemente pequeño puede constar de un sólo módulo, el principal, que haga uso de las librerías.

En la Figura se muestran las 4 fases en la creación de un programa ejecutable desarrollado en el lenguaje

Características

El C se encuentra en la jerarquía de lenguajes en un nivel intermedio entre Pascal y el Ensamblador. Pretende ser un lenguaje de alto nivel con la versatilidad del bajo nivel.

Se diseñó junto con el sistema operativo UNIX y está muy orientado a trabajar en su entorno.

En su desarrollo se siguieron una serie de líneas generales tales como:

El compilador debe ser lo más pequeño y eficiente posible. Pocas palabras reservadas, esto es, un conjunto reducido de sentencias. No existe anidamiento de procedimientos.

La entrada/salida no se considera parte del lenguaje en sí, sino que se suministra a través de funciones de librería. La misma política se sigue con cualquier otro tipo complejo de instrucciones.

Para escribir un programa se debe poder escribir poco texto. Para lograr esto se reduce el número de palabras claves.

Con ello se llegó a un compilador con un poderoso juego de instrucciones, que permite aumentar la productividad/día de los programadores.

A pesar de ello el C es un lenguaje rápido de aprender, que deriva en compiladores sencillos de diseñar, robustos, y que generan objetos pequeños y eficientes.

Una de las características más apreciadas de C es su gran portabilidad, gracias a que deja en manos de librerías las funciones dependientes de la máquina, ¡y todo ello sin restringir el acceso a dicha máquina!

Estas y otras características lo hacen adecuado para la programación en áreas tales como:

  • Programación de sistemas
  • estructuras de datos y sistemas de bases de datos
  • aplicaciones científicas
  • software gráfico
  • análisis numérico

Constitución de un Programa en C (Encabezado, cuerpo y Cierre):

ENCABEZAMIENTO Las líneas anteriores a la función main() se denominan ENCABEZAMIENTO (HEADER) y son informaciones que se le suministran al Compilador. La primera línea del programa está compuesta por una directiva: " #include " que implica la orden de leer un archivo de texto especificado en el nombre que sigue a la misma ( <stdio.h> ) y reemplazar esta línea por el contenido de dicho archivo. En este archivo están incluidas declaraciones de las funciones luego llamadas por el programa ( por ejemplo printf() ) necesarias para que el compilador las procese. Por ahora no nos preocupemos por el contenido del archivo ya que más adelante, en el capítulo de funciones, analizaremos exhaustivamente dichas declaraciones. Hay dos formas distintas de invocar al archivo, a saber, si el archivo invocado está delimitado por comillas (por ejemplo "stdio.h") el compilador lo buscará en el directorio activo en el momento de compilar y si en cambio se lo delimita con los signos <.......> lo buscará en algún otro directorio, cuyo nombre habitualmente se le suministra en el momento de la instalación del compilador en el disco ( por ejemplo C:\TC\INCLUDE). Por lo general estos archivos son guardados en un directorio llamado INCLUDE y el nombre de los mismos está terminado con la extensión .h. La razón de la existencia de estos archivos es la de evitar la repetición de la escritura de largas definiciones en cada programa. Nótese que la directiva "#include" no es una sentencia de programa sino una orden de que se copie literalmente un archivo de texto en el lugar en que ella está ubicada, por lo que no es necesario terminarla con "; ".

Ciclos repeticiones

Variables

Una variable es un nombre que se asigna a una localidad de memoria que almacena un determinado valor, (el valor de la variable).

El nombre de una variable debe de cumplir con las siguientes reglas:


1.  Serie de caracteres formados por letras, dígitos y subrayados,  (underscore: '_');

 2.  No debe empezar con un dígito;

 3.  Cualquier longitud (ANSI < 31 caracteres)

 4.  C trata como distintas las letras mayúsculas de las minúsculas, por lo que se debe de tener cuidado en este aspecto al declarar una variable y referenciarla más tarde
 
  Los siguientes son ejemplos de nombres de variables válidos:


 1.  cachafas

 2.  toto12

 3.  Un_Nombre_de_variable_largo

 4.  x
 
 

Los siguientes son ejemplos no válidos de nombres de variables:

 1.  esto-no-se-vale

 2.  12x

 3.  (nombre)

 4.  variable$

LA DECLARACIÓN DE VARIABLES

  • Para poder utilizar una variable es necesario primero declararla.
  • Para declarar una variable se requiere especificar su tipo, nombre y  opcionalmente su valor inicial
  • La sintaxis de declaración es:

         <tipo variable>  <nombre variable>  [, <nombre variable>];

Un ejemplo de declaración es:

        int                                  i;
       char                              letra, opc;
       unsigned short           s1, s2;
       float                              num, res;
       long                             grande;

Constantes:

  • Las constantes son datos cuyos valores permanecen constantes durante la ejecución de un programa.
  • Son los posibles valores que una variable puede tomar.
  • Encontramos constantes numéricas y de caracteres.
  • Las constantes numéricas pueden expresarse en base ocho, diez y 16.
  • Ejemplos de constantes son:


                - caracteres:  'c','d','e','\n','\0'

                - decimal:  123, 345, -1943, +4567

                - octal: 0123, 0456, 01234, 04567

                - hexadecimal:  0x12, 0xf5ad12, 0x12f103

PALABRAS CLAVE

El _lenguaje ANSI C está formado por 32 palabras clave que no pueden ser utilizadas como nombres de variable ni de función.

La lista de palabras clave es:

Auto

Double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

Const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

COMPONENTES BÁSICOS DEL LENGUAJE C

 
 

  • El objetivo de un programa es el de procesar información en forma de datos, para obtener un determinado resultado.
  • Lo que diferencia un lenguaje computacional de otro es la forma de representar los datos y las herramientas que ofrece para procesarlos.

 

 Es decir:
 

  •    Los tipos de datos que maneja
  •    Su declaración de Variables
  •    Las constantes
  •    La forma de realizar asignaciones
  •    La estructura general de un programa
  •    Los comentarios
  •    Sus operaciones de entrada/salida
  •    Las operaciones condicionales
  •    Las iteraciones

LOS TIPOS DE DATOS

C maneja cuatro clases de tipos:

  1. los enteros:


       (a) char
       (b) short
       (c) int
       (d) long

  1. los enteros sin signo:


       (a) unsigned short
       (b) unsigned int
       (c)unsigned long

  1. los flotantes:


       (a) float
       (b) double

 4. los apuntadores

LOS ENUNCIADOS EN C

  • Las partes del programa que realizan operaciones sobre las variables y/o datos del programa se conoce enunciados
  • Un programa esta formado por un gran número de instrucciones.
  • Es necesario saber donde termina una y donde empieza la otra.
  • Un enunciado es un conjunto de instrucciones que definen las acciones a realizar.
  • Después de cada enunciado se debe teclear un punto y coma ; para indicar que el enunciado terminó.
  • El enunciado es la unidad elemental de la estructura de un programa
  • C es un lenguaje secuencial ya que los enunciados son ejecutados secuencialmente, uno después de otro, y nunca simultáneamente

ESTRUCTURA GENERAL DE UN PROGRAMA EN C

  • tipo var1;
    tipo var2;
  • tipo f1(par1)
    tipo par1;
    {     tipo var3;
  •       {   tipo var4;
               Bloque 1
               Bloque2
          }
  • }
    tipo var5;
  • int main()
    {
    tipo var6;
  • }

LOS COMENTARIOS

  • Un buen programa debe de contener notas o comentarios que faciliten su comprensión a los lectores humanos
  • Los comentarios son ignorados por el compilador del lenguaje
  • Entre la información que generalmente se escribe como comentario esta:


1.  Nombre del autor

2.  Fecha de última modifición del programa

3.  Explicación general de lo que hace el programa

4.  Explicación de lo que realiza cada función, sus parámetros de entrada y de salida

5.  Significado de las variables más importantes
 

  • C soporta dos tipos de comentarios:

       1.  comentarios de bloque: /*   */
                por ejemplo:  /* esto no lo lee el compilador*/

       2.comentarios de línea:  incian a partir de la secuencia de caracteres: //  y hasta el fin de línea.
                por ejemplo:  // Esto no lo lee el compilador
 

LOS ARCHIVOS

  • Almacenamiento en variables y arreglos es temporal: termina programa y estos datos se pierden;
  • Conservación permanente de grandes cantidades de datos: archivos;
  • Archivos almacenados en dispositivos almacenamiento secundario, (p.e. disco);
  • C ve un archivo como un flujo secuencial de bytes, (stream); que se conoce con el nombre de descriptor o manejador de archivos.
  • Cada archivo termina con un marcador de fin de archvio, (eof);
  • Cuando un archivo se abre se asocia un stream con el archivo;
  • La ejecución de un programa abre automaticamente tres archivos, los cuales tienen relacionados tres streams:

                                        1. stdi: entrada estándar, (que vale 0);
                                        2. stdo: salida estándar, (valor: 1);
                                        3. stderr: error estándar, (valor: 2);

  • Dos tipos de archivos:

                                        1. Archivos tipo texto
                                        2. Archivos binarios
 

Abertura de archivos texto

stream= fopen(nombre-archivo, modo)

stream: debe ser una variable tipo apuntador a un archivo FILE *<nombre-variable>

nombre-archivo: es el nombre de un archivo, el cual debe de estar entre comillas, (''):
                    ''/usr/local/tarea.txt''

también puede referenciarse usando un arreglo de caracteres:
                    char nombre[40]
                    nombre = ''/usr/local/tarea.txt''

modo: al igual que el nombre-archivo se puede expresar entre comillas o a travez de un arreglo de caracteres;

Los valores que puede tomar modo son:

simbolo                         si existe el archivo                                                     si no existe


    r                                 abre archivo para lectura                                     error: regresa NULL
    w                               abre archivo para escritura                         crea archivo y abre escritura
    a                                abre archivo para añadir                             crea archivo y abre escritura
    b                             declara archivo como binario
                                    (manejado por fread() y fwrite())
                                    + permite lectura y escritura
 

Ejemplos abertura archivos

main()
            {
                FILE *p, *q;
                char nombre[25], modo[5];

/*     Abriendo archivo texto en modo escritura*/

                if ( p = fopen(''ejemplo.txt'', ''w+''))
                        {
                            ...
                        }
                else
                        {
                                printf(''\n Error: no se pudo abrir el archivo \n'');
                                exit(1)
                        }
                ...

/* Abriendo archivo binario en modo lectura*/

                nombre = ''/usr/al445566/toto.dat''; modo = ''rb'';
                if ( q = fopen(nombre,modo) == NULL)
                    printf(''No pudo abrirse el archivo nn'');
               else
                    ...
}

Críticas

Dentro de las principales críticas que se le achacan podemos destacar:
 

  • Lo poco estricto que es el lenguaje con la comprobación de los tipos de datos, dejando esta tarea muchas veces en manos del programador.
  • El no verificar automáticamente los límites de los vectores.
  • La repetición que hace de símbolos en operadores diferentes (=,*,-). (Sobrecarga de operadores).
  • El no poder anidar funciones, con lo que se dificulta la estructuración y la abstracción de datos.
  • La incertidumbre existente en el orden de evaluación de las listas de expresiones y parámetros.
  • La facilidad con que los programas pueden derivar hacia ser crípticos.

for(i=0;i<10;i++)
  for (j=0;j<10;)
     *(*(x+i)+j++)=(y[i][j]>*(*(z+i)+j))?1:2;

for (;*a|*b;*p++=(*a>*b)?*a++;*b++);


Tipos de Datos

C utiliza 5 palabras reservadas para definir los tipos de datos fundamentales. A diferencia de Pascal, un determinado tipo de datos puede ir cualificado por un conjunto de modificadores que estudiaremos más adelante.
Los tipos de datos fundamentales son:

char            short int              int
long int        unsigned char          unsigned short int
unsigned int    unsigned long int      double
float           long float             void


Tipos de datos fundamentales

char                          Representa un carácter en código ASCII, también se puede interpretar como
                                 un entero.

short int                   Indica un entero de tamaño corto.

int                            Entero igual que integer en Pascal.

long int                    Entero largo.

unsigned short int  Como short int pero sin signo.

unsigned int            Como int pero sin signo.

unsigned long int    Como long int pero sin signo.

float                        Flotante corto. Análogo al single de Pascal.

double                    Flotante largo. Análogo al double de Pascal.

void                        No indica ningún tipo. Es el tipo de las funciones que no devuelven nada.

Los tipos short int, long int, unsigned int y long float se pueden escribir como: short, long, unsigned y double.

Con respecto al tamaño que ocupan en memoria variables de estos tipos, todo lo que garantiza C es:

 sizeof(char) = 1
 sizeof(short) <= sizeof(int) <= sizeof(long)
 sizeof(unsigned) = sizeof(int)
 sizeof(float) =< sizeof(double)

Donde sizeof es un operador que está incorporado en C y devuelve el número de bytes que tiene un objeto.

Hay un grupo de modificadores que indican la forma que se almacena una determinada variable de un determinado tipo. Se indica antes del tipo de la variable.

static
Cuando se invoca a una función por segunda vez se pierden los valores que las variables locales de la función tenían al acabar la anterior llamada. Declarando una variable de este tipo cuando se llama por segunda vez a la subrutina la variable static (estática) contiene el mismo valor que al acabar la llamada anterior.

auto
Es lo mismo que si no se usara ningún modificador

volatile
El compilador debe asumir que la variable está relacionada con un dispositivo y que puede cambiar de valor en cualquier momento.

register
El compilador procurará almacenar la variable cualificada de este modo en un registro de la CPU.

extern
La variable se considera declarada en otro fichero. No se le asignará dirección ni espacio de memoria.

Declaración de variables

La forma general de declarar variables en C es la siguiente:

cualificador tipo identificador = valor, identificador = valor, ... ;

Las expresiones = valor sirven para inicializar la variable y pueden ser opcionales.
Las variables pueden ser declaradas en dos puntos: dentro de un bloque antes de la primera línea ejecutable; en este caso el ámbito de la variable es el cuerpo del bloque y fuera de todos los procedimientos, en este caso, el ámbito abarca a todas las funciones, es decir son declaraciones globales. El cuerpo de una función es considerado como un bloque.

int a,b,c;                   Tres variables enteras.
float raiz1, raiz2;          Dos variables de tipo real.
char caracter, texto[80];    Un caracter y una cadena de 80.
short int a;                 Entero corto.
long int b;                  Entero largo.
unsigned short int d;        Entero corto sin signo.
unsigned char a;             Caracter sin signo.
signed char b;               Caracter con signo.
char texto[3] = "abc";       Declaración e inicialización
char a = '\n';               Inicialización con Return.
char texto[] = "abc";        Sin especificar tamaño.
extern unsigned short int    Variable externa.