Вы находитесь на странице: 1из 11

EL LENGUAJE "C".

CARACTERÍSTICAS DEL LENGUAJE "C".

C trabaja con tipos de datos que son directamente tratables por el hardware de la mayoría de computadoras
actuales, como son los caracteres, números y direcciones.

El lenguaje C se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y
compilados. Los interpretados son aquellos que necesitan del código fuente para funcionar (P.ej: Basic). Los
compilados convierten el código fuente en un fichero objeto y éste en un fichero ejecutable. Este es el caso
del lenguaje C.

Podemos decir que el lenguaje C es un lenguaje de nivel medio, ya que combina elementos de lenguaje de
alto nivel con la funcionalidad del lenguaje ensamblador.

Es un lenguaje estructurado, ya que permite crear procedimientos en bloques dentro de otros procedimientos.

Hay que destacar que el C es un lenguaje portable, ya que permite utilizar el mismo código en diferentes
equipos y sistemas informáticos: el lenguaje es independiente de la arquitectura de cualquier máquina en
particular.

Por último solo queda decir que el C es un lenguaje relativamente pequeño; se puede describir en poco
espacio y aprender rápidamente.

Este es sin duda el objetivo de éste curso. No pretende ser un completo manual de la programación, sino una
base útil para que cualquiera pueda introducirse en este apasionante mundo.

ESTRUCTURA DE UN PROGRAMA EN C.

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

Ejemplo:

Declaraciones de funciones

main( )
{

variables locales
bloque
}

funcion1( )
{
variables locales
bloque
}
Comentarios.

A la hora de programar es conveniente añadir comentarios (cuantos más mejor) para poder saber que función
tiene cada parte del código, en caso de que no lo utilicemos durante algún tiempo. Además facilitaremos el
trabajo a otros programadores que puedan utilizar nuestro archivo fuente.

Para poner comentarios en un programa escrito en C usamos los símbolos /* y */:

/* Este es un ejemplo de comentario */


/* Un comentario también puede
estar escrito en varias líneas */

El símbolo /* se coloca al principio del comentario y el símbolo */ al final.


El comentario, contenido entre estos dos símbolos, no será tenido en cuenta por el compilador.

// Aquí los comentarios son para una sola línea


// cada que escribo un comentario en una línea debo poner doble diagonal

Símbolos Especiales.

Hay un grupo de símbolos, que son tratados como caracteres individuales, que especifican algunos caracteres
especiales del código ASCII. Los más importantes son:

\a Alert
\b backspace
\f formfeed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\' single quote
\" double quote
\OOO visualiza un carácter cuyo código ASCII es OOO en octal.
\xHHH visualiza un carácter cuyo código ASCII es HHH en hexadecimal.

Un programa algo más complicado pero que hace algo, es el siguiente:

#include <stdio.h>
main()
{
printf("Hola amigos!\n");
}

Con el visualizamos el mensaje Hola amigos! en el terminal. En la primera línea indica que se tengan en
cuenta las funciones y tipos definidos en la librería stdio (standard input/output). Estas definiciones se
encuentran en el fichero header stdio.h. Ahora, en la función main se incluye una única sentencia que llama a
la función printf. Esta toma como argumento una cadena de caracteres, que se imprimen van encerradas entre
dobles comillas " ". El símbolo \n indica un cambio de línea.
/*Programa ejemplo que despliega el contenido de "ROL" en pantalla*/
#include <stdio.h>
#define ROL "9274002-1"

despliega_rol()
{
printf("Mi rol es : \%s\n", ROL);
}

void main()
{
despliega_rol();
}

/* Fin programa */

TIPOS BÁSICOS Y VARIABLES.

Los tipos de datos básicos definidos por C son caracteres, números enteros y números en coma flotante. Los
caracteres son representados por char, los enteros por short, int, long y los números en coma flotante
por float y double. Los tipos básicos disponibles y su tamaño son:

char Carácter (normalmente 8 bits)


short Entero corto con signo (normalmente 16 bits)
int Entero con signo (depende de la implementación)
unsigned Entero sin signo (depende de la implementación)
long Entero largo con signo (normalmente 32 bits)
float Flotante simple (normalmente 32 bits)
double Flotante doble (normalmente 64 bits)

La palabra unsigned en realidad es un modificador aplicable a tipos enteros, aunque si no se especifica un


tipo se supone int. Un modificador es una palabra clave de C que indica que una variable, o función, no se
comporta de la forma normal. Hay también un modificador signed, pero como los tipos son por defecto con
signo, casi no se utiliza.

Las variables son definidas utilizando un identificador de tipo seguido del nombre de la variable. Veamos el
siguiente programa.

#include <stdio.h>
main()
{
float cels, farh;
farh = 35.0;
cels = 5.0 * ( farh - 32.0 ) / 9.0;
printf(">>> %f F son %f C\n", farh, cels );
}

En el programa anterior se definen dos variables float, se asigna un valor a la primera y se calcula la
segunda mediante una expresión aritmética. Las asignaciones en C también son una expresión, por lo que se
pueden utilizar como parte de otra expresión, pero según que prácticas de este tipo no son muy recomendables
ya que reducen la legibilidad del programa. En la instrucción printf, el símbolo %f indica que se imprime
un número en coma flotante.

Hay un tipo muy importante que se representa por void que puede significar dos cosas distintas, según su
utilización. Puede significar nada, o sea que si una función devuelve un valor de tipo void no devuelve
ningún resultado, o puede significar cualquier cosa, como puede ser un puntero a void es un puntero
genérico a cualquier tipo de dato. Más adelante veremos su utilización.
EXPRESIONES Y OPERADORES.

Los distintos operadores permiten formar expresiones tanto aritméticas como lógicas. Los operadores
aritméticos y lógicos son:

+, - suma, resta
++, -- incremento, decremento
*, /, % multiplicación, división, módulo
>>, << rotación de bits a la derecha, izquierda.
& AND booleano
| OR booleano
^ EXOR booleano
~ complemento a 1
! complemento a 2, NOT lógico
==, != igualdad, desigualdad
&&, || AND, OR lógico
<, <= menor, menor o igual
>, >= mayor, mayor o igual

En estos operadores deben tenerse en cuenta la precedencia de operadores y las reglas de asociatividad, que
son las normales en la mayoría de lenguajes. Se debe consultar el manual de referencia para obtener una
explicación de tallada. Además hay toda una serie de operadores aritméticos con asignación, como pueden ser
+= y ^=.

En la evaluación de expresiones lógicas, los compiladores normalmente utilizan técnicas de evaluación


rápida. Para decidir si una expresión lógica es cierta o falsa muchas veces no es necesario evaluarla
completamente. Por ejemplo una expresión formada <exp1> || <exp2>, el compilador evalúa primero
<exp1> y si es cierta, no evalúa <exp2>.

Por ello se deben evitar construcciones en las que se modifiquen valores de datos en la propia expresión, pues
su comportamiento puede depender de la implementación del compilador o de la optimización utilizada en
una compilación o en otra. Estos son errores que se pueden cometer fácilmente en C ya que una asignación es
también una expresión.

Debemos evitar:
if (( x++ > 3 ) || ( x < y ))

y escribir en su lugar: x++;


if (( x > 3 ) || ( x < y ))

Hay un tipo especial de expresión en C que se denomina expresión condicional y está representada por los
operadores ? : . Su utilización es como sigue: <e> ? <x> : <y>. Se evalúa si e entonces x; si no, y.

int mayor ( int a, int b )


{
return ( a > b ) ? TRUE : FALSE;
}

waste_time ()
{
float a, b = 0.0;
( b > 0.0 ) ? sin(M_PI / 8) : cos(M_PI / 4);
}
Asignación.

El signo de igualdad, =, es el operador básico de asignación en C. Un ejemplo de asignación es: i=7

A la variable i se le asigno el valor 7, y la expresión, como un todo, toma ese valor. Cuando la expresión va
seguida de un punto y coma, se convierte en una proposición.
Algunos ejemplos de proposiciones son: i = 7;
x = 3.1 + sin(22.2);

Se calcula el valor de la expresión que esta a la derecha del signo = y luego se asigna a la variable del lado
izquierdo. Por ejemplo
int a, b, c
a = 7;
b = 2;
c = a + b;
declara que las variables a, b y c son de tipo int, luego asigna el valor 7 a `a`, el valor 2 a `b`, y el valor de la
expresión a + b a `c`.

Notación compacta.

Una expresión como


k = k + 2;
sumara dos al antiguo valor de k y le asignara el resultado; así la expresión, como un todo tendrá ese valor. La
expresión
k += 2;
utiliza el operador de asignación += para ejecutar la misma tarea.
Otro ejemplo seria
k *= 3 + x;
es equivalente a
k = k * (3 + x);

Operadores aritméticos.
Los operadores aritméticos + - * / % corresponden a las operaciones matemáticas normales de
suma, resta, multiplicación, división y modulo, respectivamente. La división de enteros devuelve el valor
entero que obtuvo y desecha cualquier fracción restante.

Por ejemplo, 1 / 2 tiene el valor 0, 3 / 2 tiene el valor 1, y -7 / 3 tiene el valor -2. La expresión a % b se lee "a
modulo b". Si a y b son enteros positivos, el resultado será el residuo de la división de a ente b. Por ejemplo, 7
% 2 tiene el valor 1, y 12 % 3 tiene el valor 0; si a, b o ambos son negativos, entonces a % b esta definido,
pero el resultado es dependiente de la maquina. El valor de b no puede ser cero, porque eso nos conduciría a
dividir por cero.
Operadores de incremento y decremento.

Como operador de incremento tenemos el ++ y de decremento es el --. Tanto ++ como - - pueden aplicarse a
variables, pero no a constantes o a expresiones.

Algunos ejemplos son: ++y


--k
y++
k--
La proposición
++y; es equivalente a i = i + 1;

Así, también la proposición


y++; es equivalente a i = i + 1;

y de manera similar
--k; es equivalente a k = k - 1;
k--; es equivalente a k = k - 1;

Las expresiones ++a y a++ provocan que a se incremente en 1. En forma similar, - -a y a- - causan que a
disminuya en 1. No obstante, al usar ++a en una expresión, el valor de a se aumenta antes de evaluar la
expresión, mientras que al emplear a++, la expresión se evalúa con el valor actual de a, incrementándolo
después. Lo mismo ocurre con - -a y a- -.

OPERADORES DE RELACION, IGUALDAD Y LOGICA.

Operadores y Expresiones de Relación.

Los operadores de relación


< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
son todos binarios. Cada uno de ellos toma dos expresiones como operandos y dan como resultado el valor
INT 0 o el valor INT 1.

Considérese una expresión de relación como a < b. Intuitivamente, si el valor de a es menor que el de b, la
expresión es VERDADERA; y como en C lo VERDADERO se representa con cualquier valor distinto de 0,
es natural que a < b tenga el valor INT 1. Si el valor de a no es menor que el de b, entonces la expresión es
FALSA, y a < b tendrá el valor INT 0.

Algunos ejemplos son:


a < 3
a > b
-7.7 <= -99.335
-1.3 >= (2.0 * x + 3.3)
Operadores y Expresiones de Igualdad.

Los operadores de igualdad


== igual a
!= distinto de
son operadores binarios que actúan sobre expresiones, y producen valores INT 0 o 1. Las conversiones
usuales de aritmética se aplican a las expresiones que sean operandos de los operadores de igualdad.

Algunos ejemplos son:


c == 'w'
x != -2.77
22 == 33
Intuitivamente, una expresión de igualdad como a = = b es VERDADERA o FALSA. Si el valor de a es igual
al de b, entonces la expresión producirá el valor INT 1, en caso contrario, si a no es igual b la expresión
producirá el valor INT 0. La expresión a != b se evalúa de la misma manera.

Obsérvese que las expresiones


a == b a=b

son similares A PRIMERA VISTA. Se parecen en la forma, pero son completamente distintas en cuanto a la
función. La expresión a = = b es una prueba de igualdad, mientras que a = b es una expresión de asignación.
Uno de los errores mas comunes en programación es codificar algo como.

if (i = 1)
. . . . /* hacer algo */
en lugar de
if (i == 1)
. . . . /* hacer algo */

La expresión de la primera proposición IF siempre es VERDADERA, y será muy difícil encontrar un error de
este tipo.

Operadores y Expresiones Lógicos.

Los operadores lógicos


! (unario) negación
&& y lógico
|| o lógico
se aplican a expresiones, producen los valores INT 0 o bien 1.
Algunos ejemplos son:
!5
!'z'
!(x + 7.7)
2 || 3
a || b
a && 1
a && b
Usos de printf() y scanf().

La función PRINTF() se usa para la salida; en forma similar, la función SCANF() se usa para la entrada. En
sentido técnico, estas funciones no son parte del lenguaje C, sino del sistema C; residen en una biblioteca
estándar y están disponibles para usarlas donde quiera que haya un sistema C. Ambas funciones tienen una
lista de parámetros con dos partes:
string_de_control y lista_de_argumentos

La primera es un string y puede contener especificaciones de conversión o formatos. Una especificación de


conversión se inicia con un carácter % y termina con un carácter de conversión; por ejemplo, en el formato
%d la letra d es el carácter de conversión y permite imprimir el valor de una expresión como un entero
decimal. Para imprimir las letras ABC en la pantalla, podría usarse la proposición
printf("ABC");
Otra manera de hacer esto es mediante la proposición
printf("%s", "ABC");

El formato %s hace que el argumento "ABC" se imprima en el formato de un string de caracteres. Esto mismo
puede realizarse también con la proposición
printf("%c%c%c", 'A', 'B', 'C');

Los apóstrofos que encierran cada letra se emplean para designar constantes de caracteres; de acuerdo con
esto, `A` es la constante de carácter que corresponde a la letra A mayúscula. El formato %c imprime el valor
de una expresión como un carácter. Por ejemplo:

char c1, c2, c3;

c1 = 'A';
c2 = 'B';
c3 = 'C';
printf("%c%c%c", c1, c2, c3);

imprimirá de nuevo las letras ABC en la pantalla.

Ahora veamos los caracteres de conversión:


c caracter
d decimal
e número de punto flotante en notación científica
f número de punto flotante
g en el formato-e o el formato-f, el que sea más corto
s string

La función scanf() es análoga a la función printf(), pero se usa para la entrada. Su primer argumento es un
string de control con formatos que corresponden a las diferentes formas en que pueden interpretarse los
caracteres en la entrada como valores para los diferentes tipos de variables. La lista de argumentos esta
formada por DIRECCIONES de variables. El símbolo & representa al operador de dirección; por ejemplo, la
proposición

scanf("%d", &x);

contiene el formato %d, el cual provoca que scanf() interprete los caracteres de entrada como un entero
decimal y que coloque el valor en la dirección x. La función scanf() puede usarse para convertir cadenas de
dígitos decimales en valores enteros y almacenarlos en el lugar apropiado.

AHORA VEAMOS LOS CARACTERES DE CONVERSIÓN:

c caracter
d decimal
f número de punto flotante (float)
lf numero de punto flotante (double)
s cadena de caracteres (string)
Veamos un ejemplo.
#include <stdio.h> /* Estándar Input/Output */
main()
{
int x;
char c;
float y;
double z;

printf("\nIngrese un caracter : ");


scanf("%c", &c);
printf("\nIngrese un int : ");
scanf("%d", &x);
printf("\nIngrese un float : ");
scanf("%f", &y);
printf("\nIngrese un double : ");
scanf("%lf", &z);
printf("\n\nLos datos que ud. ingreso fueron :\n");
printf("%c %d %e %e\n\n", c, x, y, z);
}

Usos de getchar() y putchar().

El sistema proporciona getchar() y putchar() para manejar los caracteres de entrada y salida.

Ejemplo:
#include <stdio.h> /* Estándar Input/Output */

main()
{
char c;

c = getchar();
putchar(c);
putchar(c);
}

Todo lo que hace este programa es recibir un caracter de entrada y devolverlo a la pantalla dos veces.

La variable c se declara de tipo char, uno de los fundamentales en C. Las variables de este tipo pueden tener
valor de caracteres.
FUNCIONES.

Un programa C está formado por un conjunto de funciones que al menos contiene la función main. Una
función se declara con el nombre de la función precedido del tipo de valor que retorna y una lista de
argumentos encerrados entre paréntesis. El cuerpo de la función está formado por un conjunto de
declaraciones y de sentencias comprendidas entre llaves. Veamos un ejemplo de utilización de funciones:

#include <stdio.h>
#define VALOR 5
#define FACT 120

int fact_i ( int v )

{
int r = 1, i = 0;
while ( i <= v )
{
r = r * i;
i = i + 1;
}
return r;
}

int fact_r ( int v )

{
if ( v == 0 )
return 1;
else
return v * fact_r(v-1);
}

main()
{
int r, valor = VALOR;
if ( (r = fact_i(valor)) != fact_r(valor) )
printf("Codificación errónea!!.\n");
else
if ( r == FACT )
printf("Codificación correcta.\n");
else
printf("Algo falla!!.\n");
}

Se definen dos funciones, fact_i y fact_r, además de la función main. Ambas toman como parámetro
un valor entero y devuelven otro entero. La primera calcula el factorial de un número de forma iterativa,
mientras que la segunda hace lo mismo de forma recursiva.

Todas las líneas que comienzan con el símbolo # indican una directiva del precompilador. Antes de realizar la
compilación en C se llama a un precompilador cuya misión es procesar el texto y realizar ciertas sustituciones
textuales. Hemos visto que la directiva #include incluye el texto contenido en un fichero en el fuente que
estamos compilando. De forma parecida, #define nombre texto sustituye todas las apariciones de nombre
por texto. Así, en el fuente, la palabra VALOR se sustituye por el número 5.
El valor que debe devolver una función se indica con la palabra return. La evaluación de la expresión debe
dar una valor del mismo tipo de dato que el que se ha definido como resultado. La declaración de una variable
puede incluir una inicialización en la misma declaración. Se debe tener muy en cuenta que en C todos los
argumentos son pasados 'por valor'. No existe el concepto de paso de parámetros 'por variable' o 'por
referencia'. Veamos un ejemplo:

int incr ( int v )


{
return v + 1;
}

main()
{
int a, b;
b = 3;
a = incr(b);
/* a = 4 mientras que
b = 3. No ha cambiado después de la llamada.*/
}

En el ejemplo anterior el valor del parámetro de la función incr, aunque se modifique dentro de la función,
no cambia el valor de la variable b de la función main. Todo el texto comprendido entre los caracteres /* y
*/ son comentarios al programa y son ignorados por el compilador. En un fuente C los comentarios no se
pueden anidar.

Вам также может понравиться