ensayo sobre el lenguaje c

29
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN UNIVERSIDAD FERMIN TORO. CABUDARE-ESTADO LARA. EL LENGUAJE C Estudiante María Gabriela Castillo CI: 24162676 Introducción a la computación

Upload: maria-gabriela-castillo

Post on 12-Jan-2017

111 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: ENSAYO SOBRE EL LENGUAJE C

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN

UNIVERSIDAD FERMIN TORO.

CABUDARE-ESTADO LARA.

EL LENGUAJE C

Estudiante

María Gabriela Castillo

CI: 24162676

Introducción a la computación

Saia A

30/07/2016

Page 2: ENSAYO SOBRE EL LENGUAJE C

El lenguaje C es uno de los lenguajes de programación estructurada más utilizados en nuestros días. El principal componente estructural de C es la función. En C, las funciones son bloques en los cuales ocurren las actividades de un programa. Esto nos permite separar los programas en tareas, lo que nos conduce a la programación modular.

El lenguaje de programación C fue creado por Dennis Ritchie entre 1969 y 1973 cuando trabajaba en Bell Laboratorios de AT&T junto con Ken Thompson en el diseño del sistema operativo UNIX. C fue creado para poder escribir dicho sistema operativo en un lenguaje de alto nivel, independiente del hardware donde se ejecutara. Contar con un lenguaje de alto nivel permitió el avance de los sistemas operativos, ya que el mismo código podía ser utilizado en las distintas plataformas, propiciando la reutilización de código y reduciendo los tiempos de desarrollo. Así es que los sistemas operativos basados en UNIX, el sistema BSD, el sistema GNU/Linux y muchos otros fueron desarrollados en C. Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no está ligado a ningún sistema operativo ni a ninguna máquina concreta. Se le suele llamar lenguaje de programación de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar cualquier tipo de aplicación. Además, con el paso del tiempo se han desarrollado cientos de bibliotecas que permiten a los programadores de C utilizar el código desarrollado por otros para la realización de tareas comunes. Esto, a su vez, ha propiciado el desarrollo de aplicaciones en lenguaje C. En 1978 Kernighan y Ritchie publican su descripción en el libro "The C Programming Language", versión que es llamada hoy en día 'K&R C'. Este libro se suele llamar entre los programadores “La biblia del C”, existen varias ediciones, en las universidades suele ser el libro principal de la bibliografía. A mediados de los ochenta ya había en el mercado numerosos compiladores C, y muchas aplicaciones habían sido rescritas a él para aprovechar sus ventajas. Durante este periodo 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'. 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

Page 3: ENSAYO SOBRE EL LENGUAJE C

versatilidad del bajo nivel. En 1980 Bjarne Stroustrup de los laboratorios Bell de Murray Hill, New Jersey, adiciono las características de la programación orientada a objetos (incluyendo la ventaja de una biblioteca de funciones orientada a objetos) y lo denomino C con clases. Para 1983 dicha denominación cambio a la de c++. Con este nuevo enfoque surge la nueva metodología que aumente las posibilidades de la programación bajo nuevos conceptos. Con la posibilidad de las microcomputadoras se crearon muchas implementaciones de C. Sin embargo, como no existía ningún estándar, aparecieron discrepancias. Para remediar la situación, el instituto de Estándares Americano (ANSI) estableció un comité a mediados de 1983 para crear un estándar que definiera al lenguaje C. Este comité ANSI termino el proceso de formalización en 1990. Actualmente es imposible contar la cantidad de aplicaciones y herramientas desarrolladas en C.

Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes. En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores. C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de software de sistema, para la que se diseñó originalmente. Entre sus principales características podemos mencionar 1.-Tiene un conjunto completo de instrucciones de control.2.-Permite la agrupación de instrucciones.3.-Incluye el concepto de puntero (variable que contiene la dirección

Page 4: ENSAYO SOBRE EL LENGUAJE C

de otra variable).4.-Los argumentos de las funciones se transfieren por su valor.

5.- E/S no forma parte del lenguaje, sino que se proporciona a través de una biblioteca de funciones.6.-Permite la separación de un programa en módulos que admiten compilación independiente.

Originalmente el Lenguaje C estuvo muy ligado al sistema operativo UNIX como se había mencionado antes que, en su mayor parte, está escrito en C. Más adelante se comenzó a utilizar en otros sistemas operativos para programar editores, compiladores, etc. Aunque se le conoce como un lenguaje de programación de sistemas, no se adapta mal al resto de aplicaciones. De hecho, hoy en día un alto porcentaje de software para ordenadores personales está escrito en Lenguaje C. Por ejemplo, el sistema operativo MS-DOS. Algunas de las características más importantes que definen el lenguaje y que han permitido que sea tan popular, como lenguaje de programación son: Tamaño pequeño, Uso extensivo de llamadas a funciones, Comandos breves (poco tecleo), Lenguaje estructurado, Programación de bajo nivel (nivel bit), Implementación de apuntadores - uso extensivo de apuntadores para la memoria, arreglos, estructuras y funciones. Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia. Todo programa escrito en C consta de una o más funciones, una de las cuales se llama main. El programa siempre comenzará por la ejecución de la función main. Cada función debe contener:

Una cabecera de la función, que consta del nombre de la función, seguido de una lista opcional de argumentos encerrados con paréntesis.

Page 5: ENSAYO SOBRE EL LENGUAJE C

Una lista de declaración de argumentos, si se incluyen estos en la cabecera.

Una sentencia compuesta, que contiene el resto de la función.

Para la estructura del lenguaje C los argumentos son símbolos que representan información que se le pasa a la función desde otra parte del programa. (También se llaman parámetros a los argumentos). Cada sentencia compuesta se encierra con un par de llaves, {.....}. Las llaves pueden contener combinaciones de sentencias elementales (denominadas sentencias de expresión) y otras sentencias compuestas. Así las sentencias compuestas pueden estar anidadas, una dentro de otra. Cada sentencia de expresión debe acabar en punto y coma (;). Los comentarios pueden aparecer en cualquier parte del programa, mientras estén situados entre los delimitadores /*................ */ (por ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para identificar los elementos principales de un programa o simplemente para orientar a un posible usuario de ese código. Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. El programa comienza en la función main, desde la cual es posible llamar a otras funciones. Cada función estar formada por la cabecera de la función, compuesta por el nombre de la misma y la lista de argumentos (si los hubiese), la declaración de las variables a utilizar y la secuencia de sentencias a ejecutar.Encabezamiento

main( ){

variables localessentencias

}

f1( ){

variables localessentencias

}

...

...

...

fn( ){

variables localessentencias

}

Page 6: ENSAYO SOBRE EL LENGUAJE C

Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado de objetos en una secuencia determinada (patrón de arreglo). El objetivo de este proceso generalmente es facilitar la búsqueda de uno o más elementos pertenecientes a un conjunto.

Como ejemplos de conjunto de datos ordenados tenemos:

Meses del año (ordenados de 1 al 12). Listado de estudiantes (ordenados alfabéticamente). Guías Telefónicas (ordenadas por País/por región/por sector/por

orden alfabético)

La ordenación, tanto numérica como alfanumérica, sigue las mismas reglas que empleamos nosotros en la vida normal. Esto es, un dato numérico es mayor que otro cuando su valor es más grande, y una cadena de caracteres es mayor que otra cuando esta después por orden alfabético.

Los métodos de ordenación, pueden agruparse en dos grandes grupos:

Los internos: Es cuando los datos están disponibles en un área de la memoria principal, como cuando se leen un conjunto de datos desde el teclado.

Los externos: Los datos están guardados en un medio externo, como puede ser un fichero, una base de datos, etc. En donde los datos están alojados en el disco duro u otro medio físico.

En este sección explicaremos solo tres modos de ordenamiento, los mas usados como son:

Algoritmo de Ordenamiento Burbuja (Buble Sort)

Page 7: ENSAYO SOBRE EL LENGUAJE C

Algoritmo de Ordenamiento Insercion Algoritmo de Ordenamiento Quick Sort

Método de Burbuja (Bubble Sort)

El método de ordenamiento de burbuja, es un algoritmo que se aplica para poder ordenar una cantidad de datos ya sea de forma ascendente o descendente.

Es el algoritmo más fácil de implementar, pero a cambio pagamos un alto precio en procesamiento, ya que este método evalúa una cantidad los datos muchas veces y en ocasiones innecesariamente (como por ejemplo cuando son iguales).

A estas alturas posiblemente ya tengas conocimiento de sencillos pasos para ordenar datos, como por ejemplo, Determinar cual es el mayor o menor de dos números, pues aplicando este método podremos ordenar array, estructuras y cualquier tipo de dato NO atómico (es decir que se pueda dividir)

Este libro trata de programación en C, entonces a continuación nos aplicamos a esto:

Este metodo necesita de lo siguiente para implementarse:

Un array o estructura que ordenar (>1 elemento). Dos variables contadoras de ciclos (i,j por ejemplo). Una variable temporal (para almacenar un dato

momentaneamente). Dos ciclos y un Condicional...

.... //DE MENOR A MAYOR (Ascendente) #define Nelementos 4 ....

Page 8: ENSAYO SOBRE EL LENGUAJE C

int i,j; //Variables contadoras del ciclo. int lista[Nelementos]={6,9,3,1}; //Declaracion e

inicializacion de un arreglo de 4 elementos. int temp=0; //Variable temporal.

for (i=1;i<Nelementos;i++) { for (j=0; j <= Nelementos-1 ;j++) // for(j=0; j <

Nelementos-1; j++) es menor y no menor igual { if (lista[j] > lista[j+1])//Condicion mayor-menor { temp=lista[j]; lista[j]=lista[j+1]; lista[j+1]=temp; } } } //Para cambiar el modo de ordenamiento solo debemos

cambiar la condicion < ó >

'''<big>Explicando un poco lo que dice el codigo tenemos:</big>'''

# Iniciamos i a 1, de esta forma correremos el ciclo solamente 3 veces. Asi evitamos correr ciclos innecesariamente.

# El segundo for, se ejecutara 3 veces por cada primer ciclo.

# La condicion nos dice: * Si, el valor de lista 0 es mayor al valor de lista 1, es decir * '''Si, 6 > 9''', pero como la condicion no se cumple,

pasamos del ciclo y '''J=1'''. * Si, el valor de lista 1 es mayor al valor de lista 2, es decir * '''Si, 9 > 3''', como es '''verdadera''' hacemos: # Guardamos momentaneamente en la variable temporal

el valor de lista 1, es decir 9. # En la posicion de lista 1, guardamos el valor de lista 2,

es decir 3.

Page 9: ENSAYO SOBRE EL LENGUAJE C

# En la posicion de lista 2, guardamos el valor de temp, es decir 9

'''Volvemos''' nuevamente '''al ciclo''', ahora '''J=2'''... * Si, el valor de lista 2 es mayor al valor de lista 3, es decir * Si, '''9 > 1''', (recuerda que anteriormente '''movimos''' al

9 a la posicion de 3), es verdadera => # Guardamos momentaneamente en la variable temporal

el valor de lista 2, es decir 9. # En la posicion de lista 2, guardamos el valor de lista 3,

es decir 1. # En la posicion de lista 3, guardamos el valor de temp, es

decir 9.

De esta forma el ciclo se repite hasta que todos los datos se hallan movido. Como veras hasta ahora solo hemos estado moviendo el 9. Tu lista se veria asi:

* ''Original:'' 6 '''9''' 3 1 :* ''1er Mov:'' 6 3 '''9''' 1 :* ''2do Mov:'' 6 3 1 '''9'''

Si bien ya esta mas ordenada que la original, aun falta bastante, pero recuerda que estábamos en el primer ciclo del primer for (i).

'''Acá te dejo como serán los demás movimientos:''' * ''Segundo Ciclo i:'' :* 3 6 1 9 :* 3 1 6 9

* ''Tercer Ciclo i:'' :* 1 3 6 9 :* YA!

En un principio, pensaba no presentarles las variaciones que hay de este algoritmo, pero revisando en varios libros me percate de que aunque es el mismo algoritmo y funciona de la misma forma (con sus ventajas y desventajas), Creo que es preferible mostrarselos para evitar confusiones y enredos innecesarios.

== Variantes ==

Page 10: ENSAYO SOBRE EL LENGUAJE C

Buscando en varios libros e Internet me he encontrado numerosas variantes, y por motivos pedagógicos voy a mostrarlos, ya que considero que aunque sean el mismo algoritmo, su diferente implementacion puede llevar a confusiones.

En lo personal considero que el algoritmo planteado al principio es el que mejor se expresa (entiende), y es el que recomiendo implementar, pero hay libros que lo implementan de otra forma, por lo que los que se guían con el, pueden tener confusiones a la hora de apoyarse con este libro.

==== Variante: 1 Ciclo. ====

Aunque en realidad usa dos ciclos un while y un for, el while hace la función de nuestro primer for. Sin embargo la demás implementaciones son técnicamente las mismas, solo que en vez de usar una variable ya preparada (j en nuestro caso), este evalúa con la variable i.

Variante: Restar

Esta es una de las más usuales que he visto en los libros, folletos y otros. Todo es igual, pero cambian las condiciones, de esta forma se trabaja a la inversa de nuestro algoritmo.

Ejemplos

El algoritmo burbuja esta preparado para correr con todo tipo de datos NO atómicos, es por esto que no importa si el arreglo es de tipo char, int, float, etc. Funcionara con sus respectivas modificaciones. El siguiente ejemplo ordenara una lista de tamaño 6, que esta ordenada. Recuerden como buena práctica:

Definir las variables en un solo punto del código.

Definir el tamaño del array como constante. Usar la indentacion correspondiente (Tabulaciones).

Page 11: ENSAYO SOBRE EL LENGUAJE C

//Realizado por Master crack cocaino //UNAN-LEON Nicaragua.

#include <stdio.h>#define TAM 6

int main(){

int lista[TAM]={12,10,5,6,1,3}; //Declaracion e Inicializacion de un arrayint temp=0; //Variable temporalint i,j; //variables corredoras del ciclo

printf("La lista DESORDENADA es: \n");

for (i=0;i<TAM;i++) printf("%3d",lista[i]);//impresion de la lista con espacio de 3 lineas (%3d)

for (i=1;i<TAM;i++){

for (j=0;j<TAM-1;j++){

if (lista[j] > lista[j+1]) //condicion{

temp = lista[j]; //temp guarda momentaneamente el valor de lista[j]

lista[j]=lista[j+1]; //Asigno al la posicion lista[j], lo que hay en lista[j+1]

lista[j+1]=temp; //obtendra un nuevo valor por parte de temp.

}}

}

printf("\nLos valores ORDENADOS de lista son: \n");

Page 12: ENSAYO SOBRE EL LENGUAJE C

for(i=0;i<TAM;i++) printf("%3d",lista[i]);

return 0;}

//Revisado por: Gustavo A. Chavarria.//UNAN-LEON Nicaragua

Método de Inserción

Este método se podría decir que es algo superior al método de la burbuja, ya que logra evaluar menos veces la condición. Sin embargo aun es un algoritmo muy pobre y que utiliza recursos técnicamente igual que el algoritmo burbuja.

Concepto

El algoritmo consiste en ordenar los dos primeros elementos de la matriz, luego se inserta el tercer elemento en la posición correcta con respecto a los dos primeros, a continuación se inserta el cuarto elemento en la posición correcta con respecto a los tres primeros elementos ya ordenados y así sucesivamente hasta llegar al ultimo elemento de la matriz.

Explicación

Ejemplos

Método QuickSort

Es el ultimo método del que hablaremos en este libro, es el algoritmo que mas calidad tiene, pudiendo llegar a lo mismo que el método burbuja e inserción, mas rápido y con uso de menos recursos.

Concepto

El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás. Esta es probablemente la técnica más rápida conocida. Fue desarrollada por Tony Hoare en 1960.

Page 13: ENSAYO SOBRE EL LENGUAJE C

La idea del algoritmo es simple, se basa en la división en particiones de la lista a ordenar, por lo que se puede considerar que aplica la técnica divide y vencerás. El método es, posiblemente, el más pequeño de código, más rápido, más elegante, más interesante y eficiente de los algoritmos de ordenación conocidos.

Explicación

El método se basa en dividir los n elementos de la lista a ordenar en dos partes o particiones separadas por un elemento: una partición izquierda, un elemento central denominado pivote o elemento de partición, y una partición derecha. La partición o división se hace de tal forma que todos los elementos de la primera sublista (partición izquierda) son menores que todos los elementos de la segunda sublista (partición derecha). Las dos sublistas se ordenan entonces independientemente. Para dividir la lista en particiones (sublistas) se elige uno de los elementos de la lista y se utiliza como pivote o elemento de partición. Si se elige una lista cualquiera con los elementos en orden aleatorio, se puede seleccionar cualquier elemento de la lista como pivote, por ejemplo, el primer elemento de la lista. Si la lista tiene algún orden parcial conocido, se puede tomar otra decisión para el pivote. Idealmente, el pivote se debe elegir de modo que se divida la lista exactamente por la mitad, de acuerdo al tamaño relativo de las claves.

Una vez que el pivote ha sido elegido, se utiliza para ordenar el resto de la lista en dos sublistas: una tiene todas las claves menores que el pivote y la otra, todos los elementos (claves) mayores que o iguales que el pivote (o al revés). Estas dos listas parciales se ordenan recursivamente utilizando el mismo algoritmo; es decir, se llama sucesivamente al propio algoritmo quicksort. La lista final ordenada se consigue concatenando la primera sublista, el pivote y la segunda lista, en ese orden, en una única lista. La primera etapa de quicksort es la división o «particionado» recursivo de la lista hasta que todas las sublistas constan de sólo un elemento. El algoritmo es éste:

Page 14: ENSAYO SOBRE EL LENGUAJE C

Recorres la lista simultáneamente con i y j: por la izquierda con i (desde el primer elemento), y por la derecha con j (desde el último elemento).

Cuando lista[i] sea mayor que el elemento de división y lista[j] sea menor los intercambias.

Repites esto hasta que se crucen los índices.

El punto en que se cruzan los índices es la posición adecuada para colocar el elemento de división, porque sabemos que a un lado los elementos son todos menores y al otro son todos mayores (o habrían sido intercambiados). Al finalizar este procedimiento el elemento de división queda en una posición en que todos los elementos a su izquierda son menores que él, y los que están a su derecha son mayores.

El primer objetivo de un programa informático es el manejo de datos. Un dato es toda aquella información que se puede tratar en un programa informático. Existen unos datos de entrada y unos datos de salida. Los datos de entrada se manipulan en el programa produciendo unos datos de salida.

Un dato dentro de un programa se caracteriza por llevar asociado un identificador, un tipo y un valor. Hay dos clases de tipos de datos: tipos fundamentales y tipos derivados. Hablaremos de los tipos de datos fundamentales.

Tipo entero: representa números enteros con o sin signo, que estarán compuestos por los dígitos del 0 al 9, pudiendo ser precedidos por los signos + o -.

Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc.

Para definir variables en C se antepone la palabra reservada del tipo al identificador de la variable. El tipo de datos entero se define en el lenguaje de programación C por la palabra reservada int.

Page 15: ENSAYO SOBRE EL LENGUAJE C

Para definir un tipo de dato en C se escribe lo siguiente:

int nombre_variable = valor;

No es necesario que la variable tenga un valor predeterminado. Se puede definir sin asignarle ningún valor.

Si tenemos varios datos que son del mismo tipo, se pueden definir todas en la misma línea de código escribiendo un único int, separando el nombre de las variables por “,”. Una vez que se haya acabado de definir variables, se cierra la línea de código con “;”,

Por ejemplo: int edad = 24;

int edad;

int edad, num, contador;

Tipo real: Se emplean para representar números reales (con decimales).

Para definir datos reales se antepone la palabra reservada float al identificador de la variable.

float identificador = valor;

Por ejemplo: float numero1, numero2;

float numero3 = 123.43;

float numero3;

Tipo carácter: Este tipo de datos se emplea para representar un carácter perteneciente a un determinado código utilizado por el ordenador (normalmente el código ASCII).

Para representar este tipo de dato se antepone la palabra reservada char al identificador de la variable.

Char identificador = ‘valor’;

Page 16: ENSAYO SOBRE EL LENGUAJE C

Una constante tipo char se representa como un solo carácter encerrado entre comillas simples.

Por ejemplo: char letra, letra2;

char letra=’a’;

Tipo cadena de caracteres: una cadena de caracteres es un número de caracteres consecutivos (incluso ninguno) encerrado entre unos delimitadores determinados, que en el lenguaje C son las comillas dobles.

Para definir variables de tipo cadena, estas se definen como vectores de caracteres, esto es, anteponiendo la palabra reservada char al identificador de la variable, y después entre corchetes la longitud máxima de cadena.

Char identificador[cantidad] = “ mensaje ”;

Por ejemplo: char cadena[20];

char cadena[20] = “Hola mundo”;

char cadena[] = “HOLA”;

En la siguiente tabla se hace un resumen de los distintos tipos de datos:

Tipo de dato Palabra reservada EjemploEntero Int Int numero=0;

Real Float Float numero=12.2;

Carácter Char Char letra = ‘a’;

Cadena de carácter Char Char palabra[10] = “HOLA”;

Page 17: ENSAYO SOBRE EL LENGUAJE C

Los operadores relacionales, también denominados operadores binarios lógicos y de comparación, se utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relación (en realidad se trata respuestas a preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un resultado booleano (3.2.1b)

Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa false (cero). C++ dispone de los siguientes:

< Menor que

> Mayor que

<= Menor o igual que

>= Mayor o igual que

== Igual que (identidad)

!= Desigual que (desigualdad)

Sintaxisexpresión-relacional <>

expresión-relacional > shift-expresion

expresión-relacional <= shift-expresion

expresión-relacional >= shift-expresion

expresión-de-igualdad == expresión-relacional

expresión-de-igualdad != expresión-relacional

ComentarioComo puede verse, todos ellos son operadores binarios (utilizan dos operandos), de los cuales, dos de ellos son de igualdad: == y !=, y sirven para verificar la igualdad o desigualdad entre valores aritméticos o punteros. Estos dos operadores pueden comparar

Page 18: ENSAYO SOBRE EL LENGUAJE C

ciertos tipos de punteros, mientras que el resto de los operadores relacionales no pueden utilizarse con ellos.

Observe que los operadores == y != tienen una menor precedencia que el resto de los operadores relacionales < y >, <= y >=.

El operador de desigualdad != tiene otra forma estándar de designación mediante la palabra clave not_eq (4.9.8)

Cualquiera que sea el tipo de los operandos, por definición, un operador relacional, produce un bool (true ofalse) como resultado, aunque en determinadas circunstancias puede producirse una conversión automática de tipo a valores int (1 si la expresión es cierta y 0 si es falsa).

Ejemplo de comprobación:

#include 

int main() { float f = 12.1, g = 12.2; cout << "Tipo: " <<>

Salida

Tipo: bool

CondicionesEn las expresiones relacionales E1 E2, los operandos deben cumplir alguna de las condiciones siguientes:

1. E1 y E2 son tipos aritméticos.2. E1 y E2 son punteros a versiones cualificadas o no cualificadas

de tipos compatibles.3. Uno de ellos es un puntero a un objeto, mientras que el otro es

un puntero a una versión cualificada o no cualificada de void.4. Uno de los dos es un puntero, mientras que el otro es un

puntero nulo constante.

Cuando se trata de tipos definidos por el usuario (que no cumplen las

Page 19: ENSAYO SOBRE EL LENGUAJE C

condiciones anteriores) estos operadores pueden ser sobrecargados de forma que puedan ser utilizados con dichos tipos (4.9.18b1).

Precauciones

Con el operador de igualdadLas expresiones relacionales de igualdad son frecuentísimas en la programación. En multitud de ocasiones se comparan dos expresiones y se toma una decisión en función del resultado cierto / falso obtenido. Por ejemplo, la condición de la sentencia de iteración while(4.10.3) puede ser una expresión relacional de igualdad:

int x = 1; y = 2; ... while (x == y ) { cout << "Son iguales..." <<>

Es muy frecuente que, tanto el principiante, como el programador acostumbrado a otros lenguajes, donde el operador de asignación y el de igualdad son distintos a los utilizados en C++ (por ejemplo := y =), confundan el operador de igualdad == con el de asignación =. Es este caso, el código anterior sería escrito erróneamente:

while (x = y ) { cout << "Son iguales..." <<>

El resultado es que el bucle se ejecuta mientras sea y != 0, ya que la expresión asigna y a x, y el resultado es cierto mientras que x sea distinto de cero.

Los operadores Lógicos son muy utilizados en informática, lógica proposicional y Algebra Booleana , entre otras disciplinas. Los operadores lógicos nos proporcionan un resultado a partir de que se cumpla o no una cierta condición. Esto genera una serie de valores que, en los casos más sencillos, pueden ser parametrizados con los valores numéricos 0 y 1, como se puede apreciar en los ejemplos de abajo. La combinación de dos o más operadores lógicos conforma una función lógicos.

Los más sencillos son (nótese su relación con los operadores relacionales):

Page 20: ENSAYO SOBRE EL LENGUAJE C

Operador NO-lógico: '¬A' significa todo lo que no es A' Operador Y-lógico: 'A ∧ B' significa 'A y B a la vez';

resultando FALSO (0) si no se cumple y VERDADERO (1) si sí lo hace.

Operador O-lógico: 'A ∨ B' significa 'O bien A, o bien B, o bien los dos'; resultando FALSO (0) si no se dan ni A ni B y VERDADERO (1) si se da alguno de los dos o los dos a la vez.

Operador =: 'A = B' significa 'A debe ser igual a B'; resultando FALSO (0) si esto no es así y VERDADERO (1) en caso contrario.

Operador <: 'A <> Los operadores más complejos se construyen a partir de los

anteriores (podría incluirse alguno más) y ya entran dentro de lo que sería una función lógica. Un ejemplo muy utilizado sería 'SI (condición;A;B)' ('IF condición THEN A ELSE B' en la mayoría de los lenguajes de programación) cuyo resultado sería A si se satisface la 'condición' o B en caso contrario.

Ejemplo: Habiendo declarado las variables:

En pseudocódigo:

entero r = 2, s = 9, t = 8

En lenguaje C:

int r = 2, s = 9, t = 8;

se puede escribir

En pseudocódigo:

no( r = s o r <= t )

En lenguaje C:

!( r == s || r <= t )

La expresión se evalúa a

En pseudocódigo:

falso (actúan en orden los operadores: (<=), (==), (||) y (!))

En lenguaje C:

Page 21: ENSAYO SOBRE EL LENGUAJE C

0 (C simula el valor lógico falso con el valor entero 0)

Los operadores Aritméticos Comprenden las cuatro operaciones básicas, suma, resta, multiplicación y división, con un agregado, el operador módulo. Los operadores aritméticos existentes en C son, ordenados de mayor a menor precedencia:

Los operadores ++, -- y % solo pueden usarse con datos de tipo int o char. El operador incremento (++), incrementa en una unidad el valor de la variable sobre la que se aplica, el operador decremento (--), decrementa en una unidad el valor de la variable, y el operador módulo (%), calcula el resto de una división de dos variables de tipo entero o carácter. Un aspecto que conviene explicar es el hecho de que los operadores incremento y decremento pueden preceder o posceder a su operando, lo cual permite escribir, si x es una variable de tipo int, las expresiones ++x o x++. Usado de forma aislada no presenta ninguna diferencia, sin embargo, cuando se usa en una expresión existe una diferencia en el orden de ejecución del mismo. Cuando el operador incremento (o decremento) precede al operando, C primero realiza el incremento (o decremento), y después usa el valor del operando, realizándose la operación al contrario si el operador poscede al operando.

Así, considérense el siguiente código de un programa:

Page 22: ENSAYO SOBRE EL LENGUAJE C

int var1=10,var2;

var2=++var1; /* Pone 11 en var2, pues primero incrementa var1,*/

/* y luego asigna su valor a var2 */

Mientras que el siguiente código funciona de forma distinta:

int var1=10,var2;

var2=var1++; /* Pone 10 en var2, pues primero asigna su valor */

/* a var2, y luego incrementa var1 */

Los operadores por Asignación el lenguaje C, a diferencia de otros lenguajes tales como Pascal, no diferencia la asignación de cualquier otro operador del lenguaje. Para C, la asignación es un operador, el llamado operador asignación (=), el cual posee la prioridad más baja de todos los operadores. Es por ello que en C podemos escribir expresiones del tipo:

if ((c=a*b)<0) /* if es la comprobación condicional de C, que */

/* se vera con posterioridad */

Esta expresión asigna a la variable c el valor de a*b y devuelve su valor para compararlo con el valor constante 0. Los paréntesis son necesarios pues el operador asignación tiene la prioridad mas baja de todos los operadores.

Para terminar podríamos dar como conclusión donde C es un lenguaje de programación de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador.

Su característica principal es ser portable, es decir, es posible adaptar los programas escritos para un tipo de computadora en otra. Otra de sus características principales es el ser estructurado, es decir, el programa se divide en módulos (funciones) independientes entre sí.

El lenguaje C inicialmente fue creado para la programación de:

Page 23: ENSAYO SOBRE EL LENGUAJE C

-Sistemas operativos

-Intérpretes

-Editores

-Ensambladores

-Compiladores

-Administradores de bases de datos.

Actualmente, debido a sus características, puede ser utilizado para todo tipo de programas.

Para poder leer y escribir datos en el lenguaje de programación C existen una serie de funciones agrupadas en un conjunto de librerías de código objeto, que constituyen la llamada biblioteca estándar del lenguaje. En el caso concreto de las funciones de entrada y salida (lectura y escritura), su archivo de cabecera es stdio.h.Existen varias funciones que realizan la entrada y salida de datos en el lenguaje de programación C, pero nos vamos a centrar solamente en dos de ellas: printf() y scanf().

Funcion printf()

La función printf() sirve para escribir datos en la pantalla con un formato determinado.El prototipo de esta función es la siguiente:

int printf(const char *formato, arg1, arg2, …, argn)donde:

formato: hace referencia a una cadena de caracteres que contiene información sobre el formato de salida.

Arg1, arg2, …, argn: argumentos que representan los datos de salida

La cadena de control puede constar de hasta tres tipos de información:

-        texto: que será mostrado por pantalla tal cual este escrito-        Secuencias de escape: secuencias reservadas propias del lenguaje. Van precedidas por '\' y las más importantes son '\n' que introduce un salto de línea, y '\t' que introduce un tabulador.

Page 24: ENSAYO SOBRE EL LENGUAJE C

-        Especificadores de formato: son ciertos caracteres precedidos del carácter tanto por ciento '%'.A continuación se muestra una tabla con estos especificadores de formato dependiendo del tipo de dato a los que representan:

Tipo de dato Especificadores de formato

Comentario

Int %d Entero con signo

Float %f Real con signo

Char %c carácter

Char [n] %s Cadena de caracteres

Ejemplos:

printf(“\n Valores: %d, %f”, entero, real);Salida por pantalla:

(Retorno de carro)Valores: 2, 2.3

printf(“%s\t%d\n%f”, concepto, num, coste);Salida por pantalla:

Cremallera 1234

12.345

Función scanf()La función scanf() se pude considerar de alguna manera como la inversa de la función printf(), pues sirve para introducir datos desde el teclado con un formato determinado.El prototipo de esta función es el siguiente:

int scanf(const char *formato, arg1, arg2, …, argn);donde:

       formato: hace referencia a una cadena de caracteres (cadena de control) que contiene información sobre el formato de los datos que se van a introducir mediante el teclado.

      arg1, arg2, …, argn: son los argumentos que representan los datos de entrada.

Page 25: ENSAYO SOBRE EL LENGUAJE C

La cadena de control puede constar de:

        Especificadores de formato, que son ciertos caracteres precedido por el carácter tanto por ciento '%'.

        Caracteres de espacio         Otros caracteres no espacios, para entradas con

formatoA continuación se muestra una tabla con estos especificadores de formato dependiendo del tipo de dato a los que representan:

Tipo de dato Especificadores de formato

Comentario

Int %d Entero con signo

Float %f Real con signo

Char %c carácter

Char [n] %s Cadena de caracteres

Ejemplos:

scanf(“%d”, numero);scanf(“%d %s %f”, numero, &cadena, &real);