Está en la página 1de 20
Semana 1 Lenguaje de programación Unidad 1 Introducción al Lenguaje C Unidad 2 Tipos de
Semana 1 Lenguaje de programación Unidad 1 Introducción al Lenguaje C Unidad 2 Tipos de
Semana 1 Lenguaje de programación Unidad 1 Introducción al Lenguaje C Unidad 2 Tipos de

Semana 1 Lenguaje de programación

Unidad 1 Introducción al Lenguaje C

Unidad 2 Tipos de Datos y Operadores en C

Material compilado con fines académicos, se prohíbe su reproducción total o parcial sin la autorización de cada autor.

1. INTRODUCCIÓN AL LENGUAJE C De acuerdo con Hernández Mendoza (2003, p. 23): Programación es

1. INTRODUCCIÓN AL LENGUAJE C

De acuerdo con Hernández Mendoza (2003, p. 23):

Programación es elaborar una lista de instrucciones, es decir, escribir un programa. Diseñar un programa de computadora es muy similar a describir a alguien las reglas de un juego que nunca ha jugado. En ambos casos se requiere de un lenguaje de descripción que entiendan las partes involucradas en el fenómeno comunicativo. Los lenguajes utilizados para la comunicación entre el hombre y la computadora son llamados de programación. Las instrucciones dadas a la computadora deben ser representadas y combinadas de acuerdo con las reglas de sintaxis del lenguaje de programación. Las reglas de un lenguaje de programación son muy precisas y no permiten excepciones o ambigüedades.

El lenguaje de programación C fue desarrollado en 1972 por Dennis Ritchie en los Labora- torios Bell, de la AT&T. Fue creado para diseñar el sistema operativo UNIX, pero debido a su potencia, pronto se extendió su uso por programadores de todo el mundo, para escribir programas de propósito general, educativo, comercial y científico.

En 1989 se estableció el estándar ANSI C. Actualmente, cualquier compilador moderno soporta ANSI C. El lenguaje C debe su nombre a su predecesor, el lenguaje B, desarro- llado por Ken Thompson, también en los Laboratorios Bell.

1.1. Fundamentos del lenguaje C

De acuerdo con Byron (1996):

C es un lenguaje de programación estructurado de propósito general. Sus instruccio-

nes consisten en términos que se asemejan a expresiones algebraicas, aumentadas

por ciertas palabras clave en inglés como if, else, for, do y while. En este sentido, C se parece a otros lenguajes de programación estructurados de alto nivel, como Pascal

y Fortran. Sin embargo, C también contiene ciertas características adicionales que

permiten su uso en un nivel inferior, lo que reduce la brecha entre el lenguaje de máquina y los lenguajes de alto nivel más convencionales. Esta flexibilidad permite que C se utilice para la programación de sistemas (por ejemplo, para escribir sistemas operativos), así como para la programación de aplicaciones (por ejemplo, para escribir un programa para resolver un complicado sistema de ecuaciones matemáticas o para escribir un programa para facturar a los clientes).

El lenguaje C proporciona una gran flexibilidad de programación y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la responsabilidad y riesgo

2

y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la
y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la
y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la
y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la
y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la
y una muy baja compro- bación de incorrecciones, de forma que el lenguaje deja bajo la

del programador la detección de errores. Por ejemplo, C no comprueba que el índice de referencia de un vector (array) no sobrepase el tamaño del mismo, que no se escriba en zonas de memoria que no pertenecen al área de datos del programa, etc.

que no pertenecen al área de datos del programa, etc. El lenguaje C es un lenguaje

El lenguaje C es un lenguaje estructurado, pero no es estructurado por bloques, o sea, no es posible declarar subrutinas (pequeños trozos de programa) dentro de otras subrutinas, a diferencia de como sucede con otros lenguajes estructurados, tales como el Pascal.

Además, el lenguaje C es flexible en la comprobación de tipos de datos, y permite fácil- mente la conversión entre diferentes tipos de datos, por ejemplo:

float a; // Declaro una variable para de tipo “número real” int b; // Declaro otra variable de tipo “número entero” b=a; // Asigno a la variable b el número real

Cada programa en C consiste en uno o más módulos llamados funciones. Una de las fun- ciones es la principal y siempre debe ser llamada main. El programa siempre comenzará ejecutando la función principal main.

Toda función en C se compone de los siguientes elementos:

• Un encabezado de función, que consiste en el nombre de la función, seguido de

una lista opcional de argumentos entre paréntesis.

• Una lista de declaraciones de argumentos, sólo si los argumentos están incluidos

en el encabezado.

• Una declaración compuesta, que comprende el resto de la función, a la cual se le llama también “definición de la función”.

1.2. Compilación de un programa

El lenguaje C es un lenguaje de alto nivel, lo que significa que sus instrucciones son palabras del lenguaje que utilizan las personas para comunicarse entre sí. En este caso específico, las palabras del lenguaje C son palabras correspondientes al idioma inglés, por ejemplo:

• If-else (si, sino)

• while (mientras)

• for (para)

• do (hacer)

• printf (imprimir) (en este caso se agregó la letra ƒ al final de print)

• switch-case (selecciona-según el caso)

3

printf (imprimir) (en este caso se agregó la letra ƒ al final de print ) •
printf (imprimir) (en este caso se agregó la letra ƒ al final de print ) •
printf (imprimir) (en este caso se agregó la letra ƒ al final de print ) •
printf (imprimir) (en este caso se agregó la letra ƒ al final de print ) •
printf (imprimir) (en este caso se agregó la letra ƒ al final de print ) •
printf (imprimir) (en este caso se agregó la letra ƒ al final de print ) •
Así, cada una de estas palabras nos permite dar órdenes o instrucciones a la computa-

Así, cada una de estas palabras nos permite dar órdenes o instrucciones a la computa- dora para que ésta realice actividades específicas. Sin embargo, la computadora no es un ser humano, por lo que realmente no entiende lo que estas palabras significan hasta que un programa especial, llamado “compilador”, traduce esta serie de instrucciones de “lenguaje de alto nivel” a “lenguaje de máquina”, que ya es un lenguaje en código binario (ceros y unos) que la computadora sí entiende y es capaz de ejecutar.

Es por eso que todo programa escrito en lenguaje C debe ser “compilado”, es decir, tradu- cido a lenguaje de máquina, para que éste pueda ser ejecutado. Existen varios programas compiladores para el lenguaje C. El que utilizaremos a lo largo de este curso será uno llamado Dev-C++, debido a que es de código libre, es decir, de libre uso.

Para todos los ejercicios que se realizarán en esta materia deberás seguir el procedimiento descrito en la figura 1:

deberás seguir el procedimiento descrito en la figura 1: 1.3. Directivas del precompilador Las directivas son

1.3. Directivas del precompilador

Las directivas son palabras clave o sentencias que se colocan al inicio de un programa (en las primeras líneas del código fuente). Las directivas se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje C.

4

se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje
se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje
se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje
se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje
se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje
se pueden utilizar con diferentes fines, a continuación se describirán las directivas más comunes del lenguaje

#include

Incluye el archivo (librería), cuyo nombre se indica, para su compilación con el resto del

se busca en el directorio include del siste-

ma (/usr/include). Por ejemplo, #include <stdio.h> hace que el archivo /usr/include/stdio.h se incluya en ese punto para ser compilado con nuestro archivo fuente. Si el nombre se puede poner entre comillas ("), el sistema lo busca en el directorio actual (es decir, en donde se encuentra nuestro archivo fuente). Los archivos suelen tener la extensión .h y contienen declaraciones de tipos, variables y prototipos de funciones.

código. Si el nombre del archivo va entre <

>,

código. Si el nombre del archivo va entre < >, #define Define un símbolo o una

#define Define un símbolo o una constante; cada vez que aparece ese símbolo en el código fuente, éste es reemplazado por su definición. Por ejemplo, #define MAX 1024 hace que todas las veces que aparezca la cadena MAX dentro del código esta palabra sea sustituida por 1024.

1.4. Programa Hola Mundo

Ahora estamos listos para escribir y ejecutar nuestro primer programa en lenguaje C, para esto utilizaremos el procedimiento de la figura 1:

1. Ejecutaremos el programa Dev C++, previamente instalado en tu computadora. Deberá aparecer la imagen de la figura 2.

en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece

Figura 2. Imagen que aparece después de ejecutar Dev C++.

5

en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece
en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece
en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece
en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece
en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece
en tu computadora. Deberá aparecer la imagen de la figura 2. Figura 2. Imagen que aparece
2. Del menú “Archivo”, seleccionamos la opción ”Nuevo” y después la opción “Pro- yecto”, y

2. Del menú “Archivo”, seleccionamos la opción ”Nuevo” y después la opción “Pro-

yecto”, y aparecerá la siguiente ventana de la figura 3, en la cual seleccionaremos la opción “Console Application”; enseguida, la opción “En C”, y escribimos el nombre que queramos, en nuestro ejemplo le pusimos “ProyectoHolaMundo”.

en nuestro ejemplo le pusimos “ProyectoHolaMundo”. Figura 3. Selección del tipo de proyecto. 3. Nos aparece

Figura 3. Selección del tipo de proyecto.

3. Nos aparece la figura 4, en donde deberemos seleccionar una carpeta para alojar

nuestro proyecto. En la figura aparece el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”.

el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de

Figura 4. Selección de la carpeta de trabajo.

6

el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de
el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de
el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de
el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de
el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de
el nombre que elegimos (ProyectoHolaMundo) con la extensión “.dev”. Figura 4. Selección de la carpeta de

4. Finalmente, aparece la ventana principal de DevC++ con el código fuente del nues- tro proyecto. Todos los programas de C de tipo consola empiezan con las siguientes dos directivas del precompilador:

#include <stdio.h> #include <stdlib.h>

#include <stdio.h> #include <stdlib.h> Estas directivas indican que se incluirán los archivos

Estas directivas indican que se incluirán los archivos (librerías), llamadas stdio.h y stdlib.h, las cuales contienen algunos tipos y funciones básicos del lenguaje C.

A

continuación podemos identificar un comentario que es totalmente ignorado por

el

compilador (todos los comentarios son ignorados por el compilador):

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

Por el momento también ignoraremos este comentario, y sólo resaltaremos que cualquier segmento de código que esté empiece con los símbolos /* y termine con los símbolos */ es totalmente ignorado por el compilador, por lo que el programador utiliza estos segmentos para colocar comentarios de cualquier índole.

Finalmente, el código termina con las siguientes líneas:

int main(int argc, char *argv[]) { return 0;

}

Todo programa de C consta, básicamente, de un conjunto de funciones y una fun-

ción llamada main, la cual es la primera que se ejecuta al comenzar el programa, y

el código del usuario (programador) se agregará entre las primera llave “{“ y antes

de la frase “return 0”.

Siguiendo estas indicaciones, agregaremos la siguiente línea a nuestro programa:

printf (“Hola mundo”);

Si borramos el comentario (que no tiene ninguna utilidad), el código completo de nuestro programa es el siguiente:

#include <stdio.h> #include <stdlib.h>

7

el código completo de nuestro programa es el siguiente: #include <stdio.h> #include <stdlib.h> 7
el código completo de nuestro programa es el siguiente: #include <stdio.h> #include <stdlib.h> 7
el código completo de nuestro programa es el siguiente: #include <stdio.h> #include <stdlib.h> 7
el código completo de nuestro programa es el siguiente: #include <stdio.h> #include <stdlib.h> 7
el código completo de nuestro programa es el siguiente: #include <stdio.h> #include <stdlib.h> 7
el código completo de nuestro programa es el siguiente: #include <stdio.h> #include <stdlib.h> 7
int main(int argc, char *argv[ ]) { printf (“Hola mundo”); return 0; } A continuación,

int main(int argc, char *argv[ ])

{

printf (“Hola mundo”); return 0;

}

A continuación, compila el programa (con la tecla F9) y finalmente ejecútalo con la

tecla F10.

El resultado será una pantalla idéntica a la de la figura 5.

resultado será una pantalla idéntica a la de la figura 5. Hemos escrito, compilado y ejecutado

Hemos escrito, compilado y ejecutado nuestro primer programa en Lenguaje C.

2. TIPOS DE DATOS Y OPERADORES EN C

Los programas utilizan diferentes tipos de datos para almacenar valores y hacer opera- ciones; para almacenar estos valores y poder operar con ellos, C ofrece dos posibilida- des: variables y constantes. Una variable es un objeto donde se guarda un valor, el cual puede ser consultado y modificado durante la ejecución del programa; por el contrario, una constante tiene un valor fijo que no puede ser modificado y generalmente se utiliza para guardar valores conocidos y fijos como Pi, el diámetro de la tierra o valores que no cambiarán durante la ejecución del programa.

Existen diferentes tipos de valores. No es lo mismo un valor numérico que un número de personas, que, por lo tanto, siempre será un número entero, que un número cuyo valor podría tener varios puntos decimales, o bien, un valor de tipo cadena para representar nombres de personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje C para almacenar valores.

8

personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje
personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje
personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje
personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje
personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje
personas. En la sección 2.2 se revisarán los diferentes tipos de datos que tiene el lenguaje

2.1. Declaración de variables y constantes

2.1. Declaración de variables y constantes Una variable es un objeto donde se guarda un valor,

Una variable es un objeto donde se guarda un valor, el cual puede ser consultado y modificado durante la ejecución del programa. Para usar una variable, primero se debe declarar en el programa. La declaración de una variable indica al compilador que debe reservar cierto espacio en la memoria de la computadora para almacenar un dato de tipo elemental o estructurado. Por ejemplo, la declaración siguiente indica al compilador que debe reservar espacio en la memoria para tres variables de tipo entero, las cuales se llaman x, y, z:

int x,y,z;

Como podemos observar, declaramos tres variables al mismo tiempo pero pudimos de- clarar cada una de ellas de forma independiente, como en el siguiente ejemplo:

int x;

int y;

int z;

Un aspecto importante a notar es que cada una de las declaraciones termina con un pun- to y coma “;”, dado que la sintaxis del lenguaje C así lo requiere. De ahora en adelante no debemos olvidar que toda sentencia, instrucción o declaración completa la debemos terminar con un punto y coma “;”.

La sintaxis para declarar una variable es la siguiente:

Tipo_de_dato Nombre_de_Variable;

La sintaxis para declarar dos o más variables en una sola sentencia es la siguiente:

Tipo_de_dato

Nombre_de_Variable1, …,

Nombre_de_VariableN;

Finalmente, es muy útil asignar un valor a una variable desde el momento mismo de de- clararla, a esto le llamamos “inicializar” la variable, para esto la sintaxis es:

Tipo_de_dato Nombre_de_Variable = Valor;

De esta forma, la variable ya contiene un valor inicial.

A los nombres de las variables se les conoce como identificadores. Estos nombres pueden

9

ya contiene un valor inicial. A los nombres de las variables se les conoce como identificadores.
ya contiene un valor inicial. A los nombres de las variables se les conoce como identificadores.
ya contiene un valor inicial. A los nombres de las variables se les conoce como identificadores.
ya contiene un valor inicial. A los nombres de las variables se les conoce como identificadores.
ya contiene un valor inicial. A los nombres de las variables se les conoce como identificadores.
ya contiene un valor inicial. A los nombres de las variables se les conoce como identificadores.
ser casi cualquier texto pero respetando algunas reglas básicas, por ejemplo, el nombre de una

ser casi cualquier texto pero respetando algunas reglas básicas, por ejemplo, el nombre de una variable no puede ser igual a una de las palabras reservadas del lenguaje C (ins- trucciones). El lenguaje C (ANSI-C) tiene las palabras reservadas mostradas en la tabla 1:

tiene las palabras reservadas mostradas en la tabla 1: Tabla 1. Palabras reservadas del lenguaje C.

Tabla 1. Palabras reservadas del lenguaje C.

Un identificador es cualquier palabra no reservada que comience por una letra o por un subrayado, pudiendo contener en su interior letras, números y subrayados. La lon- gitud máxima de un identificador depende del compilador que se esté usando, pero generalmente suelen ser de 32 caracteres, ignorándose todos aquellos caracteres que compongan el identificador y sobrepasen la longitud máxima. El lenguaje C es sensible a mayúsculas y minúsculas, es decir, si dos identificador difieren sólo porque una letra, es mayúscula en uno y minúscula en otro, son dos identificadores diferentes.

Constantes Las constantes almacenan valores que no cambiarán durante toda la ejecución del progra- ma; para apreciar las ventajas de usar una constante, consideremos el siguiente ejemplo:

El código para calcular el perímetro de una circunferencia y el área de un círculo sería:

perimetro = 2 * 3.14 * radio; area = 3.14 * radio * radio;

Si se define una constante de nombre PI y valor 3.14, el código cambia a:

perimetro = 2 * PI * radio; area = PI * radio * radio;

Si quisiéramos usar un valor de PI mucho más preciso como 3.14159. En el primer caso deberíamos sustituir uno a uno cada uno de los valores de 3.14 por el nuevo valor (3.14159) en todo el código programa. En el segundo caso, basta cambiar la definición de la cons- tante PI con el nuevo valor.

10

en todo el código programa. En el segundo caso, basta cambiar la definición de la cons-
en todo el código programa. En el segundo caso, basta cambiar la definición de la cons-
en todo el código programa. En el segundo caso, basta cambiar la definición de la cons-
en todo el código programa. En el segundo caso, basta cambiar la definición de la cons-
en todo el código programa. En el segundo caso, basta cambiar la definición de la cons-
en todo el código programa. En el segundo caso, basta cambiar la definición de la cons-
Para esto, las constantes se definen con la directiva #define: #define PI 3.14159 Así, con

Para esto, las constantes se definen con la directiva #define:

#define PI 3.14159

Así, con sólo cambiar el valor de PI en la directiva, el programa lo usa cada vez que apa- rezca el identificador PI.

2.2. Tipos y tamaños de datos

El lenguaje C es flexible en la comprobación de tipos de datos, y permite fácilmente la conversión entre diferentes tipos de datos, por ejemplo:

float a;

int b; // Declaro otra variable de tipo “número entero”

b=a;

// Declaro una variable para de tipo “número real”

// Asigno a la variable b el número real*/

Para usar una variable en lenguaje C, la debemos declarar poniéndole un nombre (iden- tificador) y especificando el tipo de dato que va a almacenar. En C existen cinco tipos de datos básicos:

va a almacenar. En C existen cinco tipos de datos básicos: Ejemplos: int x,y; int a

Ejemplos:

int x,y; int a = 10; float z = 2.5; char caracter; char caracter_2 = ‘a’;

En los ejemplos anteriores la variable a se está inicializando con el valor 10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor a (la letra a).

11

10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor
10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor
10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor
10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor
10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor
10 al momento de declararla, así como la variable caracter_2 se está inicializando con el valor
Nótese que todas las declaraciones terminan con punto y coma. Además de los tipos de

Nótese que todas las declaraciones terminan con punto y coma.

Además de los tipos de datos, C cuenta con cuatro modificadores de tipo, los cuales se aplican sobre los tipos de datos básicos. Los modificadores de tipo permiten cambiar el tamaño, entre otras cosas, de los tipos de datos anteriormente especificados. Estos mo- dificadores, que sintácticamente anteceden a la declaración del tipo de dato, son:

anteceden a la declaración del tipo de dato, son: Algunos ejemplos de cómo aplicarlos serían: unsigned

Algunos ejemplos de cómo aplicarlos serían:

unsigned char x; long double a; short int z;

Así, por ejemplo, una variable entera “int” tiene una longitud de 32 bits, o sea que pue- de almacenar valores en el rango [-32768 a 32767], pero una variable tipo entero largo “long int” tiene una longitud de 64 bits, o sea que puede almacenar valores en el rango [-2147483647 a 2147483648].

Es muy importante comprender cómo enviar a la pantalla el valor de una variable. Como vimos en la sección 1.4. Programa Hola Mundo, existe una instrucción para mandar men- sajes a la pantalla. La instrucción tiene la siguiente sintaxis:

printf (“MENSAJE”);

En donde MENSAJE se refiere a cualquier combinación de letras, números y caracteres (excepto los caracteres especiales, los cuáles se tratarán en el Bloque 2).

Sin embargo, si lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la sintaxis sería la siguiente:

12

lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la
lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la
lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la
lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la
lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la
lo que queremos es escribir en pantalla el valor de una variable entera, por ejemplo, la

printf (“%d”,NOMBRE_DE_VARIABLE);

printf (“%d”,NOMBRE_DE_VARIABLE); En donde NOMBRE_DE_VARIABLE es el identificador de la variable a imprimir. Por ejem-

En donde NOMBRE_DE_VARIABLE es el identificador de la variable a imprimir. Por ejem- plo, el siguiente código:

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[])

{

int a = 3; printf (“%d”,a); return 0;

}

Escribe en la pantalla el número 3.

Si lo que queremos es imprimir en pantalla el valor de una variable de tipo float en vez de entera, se debe de cambiar el símbolo %d por un %f, como en el siguiente ejemplo:

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[])

{

float promedio = 6.77; printf (“%f”,promedio); return 0;

}

El código anterior escribe en la pantalla el número 6.77.

2.3. Operadores aritméticos

Una expresión es una fórmula matemática que se forma con constantes, variables y ope- radores. La forma más básica de una expresión es una asignación, en donde se le asigna un valor a una variable, por ejemplo:

a = 1;

13

más básica de una expresión es una asignación, en donde se le asigna un valor a
más básica de una expresión es una asignación, en donde se le asigna un valor a
más básica de una expresión es una asignación, en donde se le asigna un valor a
más básica de una expresión es una asignación, en donde se le asigna un valor a
más básica de una expresión es una asignación, en donde se le asigna un valor a
más básica de una expresión es una asignación, en donde se le asigna un valor a
Sin embargo, a veces las expresiones son mucho más complejas y se usan para calcular

Sin embargo, a veces las expresiones son mucho más complejas y se usan para calcular un valor, al mismo tiempo que se le asigna el resultado a una variable, por ejemplo:

a = b +2;

El caso anterior se trata de una expresión en donde se suma el valor de b más dos y el resultado se le asigna a la variable a;.

Los operadores aritméticos son aquellos que se usan para realizar las operaciones arit- méticas de suma, resta, multiplicación y división; en el lenguaje C, los operadores son:

• Operador de Suma:

+

• Operador de Resta:

-

• Operador de multiplicación:

*

• Operador de División:

/

• Operador de Módulo:

%

2.4. Operadores de relación y lógicos

Una expresión de tipo lógica o booleana sólo pueden tomar los valores de falso (false) o verdadero (true). Este tipo de expresiones se utiliza para tomar decisiones en los programas.

En este tipo de expresiones (lógicas) el resultado de su evaluación es un valor lógico (falso

o verdadero) en donde el operador principal debe ser un operador lógico o relacional.

También, en estas expresiones es posible emplear operadores o funciones aritméticas, variables o constantes numéricas y operadores de asociación. El conjunto de operadores lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2 y 3, respectivamente.

lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2

14

lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2
lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2
lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2
lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2
lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2
lógicos y relacionales que se pueden utilizar en las expresiones se presenta en las tablas 2
Antes de presentar un ejemplo de evaluación de expresiones lógicas, recordemos las tablas de verdad
Antes de presentar un ejemplo de evaluación de expresiones lógicas, recordemos las tablas de verdad

Antes de presentar un ejemplo de evaluación de expresiones lógicas, recordemos las tablas de verdad de la conjunción y la disyunción:

las tablas de verdad de la conjunción y la disyunción: A continuación se presenta un conjunto
las tablas de verdad de la conjunción y la disyunción: A continuación se presenta un conjunto

A continuación se presenta un conjunto de instrucciones en donde se ocupan expresio- nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de falso o verdadero):

15

nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de
nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de
nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de
nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de
nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de
nes lógicas que se asignan a una variable booleana (las variables booleanas reciben el valor de
2.5. Conversiones de tipo Conversión automática de tipos de datos En la vida cotidiana, los
2.5. Conversiones de tipo Conversión automática de tipos de datos En la vida cotidiana, los

2.5. Conversiones de tipo

Conversión automática de tipos de datos En la vida cotidiana, los seres humanos no consideramos los números con punto decimal como algo diferente a los números enteros, pero en el momento de realizar operaciones matemáticas les damos un tratamiento un poco diferente a la parte decimal para no perder precisión en nuestros resultados.

En el lenguaje C es posible combinar variables de diferentes tipos de datos siempre y cuando estemos plenamente conscientes de lo que esto implica para el resultado final. Si en una expresión combinamos diferentes tipos de datos, el compilador convertirá to- dos los operandos al tipo de dato más grande que esté presente. Esto se resume en las siguientes:

1. Todos los tipo carácter (char) y entero corto (short int) se convierten a entero (int).

16

en las siguientes: 1. Todos los tipo carácter ( char ) y entero corto ( short
en las siguientes: 1. Todos los tipo carácter ( char ) y entero corto ( short
en las siguientes: 1. Todos los tipo carácter ( char ) y entero corto ( short
en las siguientes: 1. Todos los tipo carácter ( char ) y entero corto ( short
en las siguientes: 1. Todos los tipo carácter ( char ) y entero corto ( short
en las siguientes: 1. Todos los tipo carácter ( char ) y entero corto ( short

Todos los tipo flotante de simple precisión (float) se convierten a flotante de alta precisión (doublé).

) se convierten a flotante de alta precisión ( doublé ). 2. Para todo par de

2. Para todo par de operandos se aplica secuencialmente (con este orden de pre- cedencia) la siguiente regla:

• Si uno de los operandos es un long double, el otro se convierte en long double.

• Si no, si uno de los operandos es double, el otro se convierte a double.

• Si no, si uno de los operandos es long, el otro se convierte a long.

• Si no, si uno de los operandos es unsigned, el otro se convierte a unsigned.

Veamos el siguiente ejemplo:

char car;

int ent;

float fl;

double db;

( car *

char int

ent )

+

( fl

/

db )

float double

-

( fl

-

float int

ent );

En cada operación entre paréntesis hay dos tipos diferentes, por lo que se convierte cada operando al tipo más grande de la siguiente forma:

car pasa de char a int.

fl pasa de float a double. *

( car

ent )

+

( fl

/

db )

int

int

double double

-

( fl

ent );

- double double

Al ser los dos operandos de igual tipo, realizamos la primera operación (car / i), y el re- sultado es de tipo int. De igual forma, para la segunda operación (f * d), y el resultado es de tipo double.

Ahora procedemos a realizar la suma de los dos primeros resultados (car * ent) + (fl * db), como uno de ellos es de tipo int y el otro de tipo double, el int se convierte en double por la segunda regla, y el resultado es un double.

(

car

*

ent )

+

( fl

/

db )

-

( fl

-

ent );

 

Int

double

 

double

17

( car * ent ) + ( fl / db ) - ( fl - ent
( car * ent ) + ( fl / db ) - ( fl - ent
( car * ent ) + ( fl / db ) - ( fl - ent
( car * ent ) + ( fl / db ) - ( fl - ent
( car * ent ) + ( fl / db ) - ( fl - ent
( car * ent ) + ( fl / db ) - ( fl - ent
Por último, realizamos la resta final, siendo los dos operandos de tipo double y el

Por último, realizamos la resta final, siendo los dos operandos de tipo double y el resul- tado final; por tanto, de tipo double.

Conversión automática de tipos de datos.

No siempre es posible que C convierta un tipo de dato a otro con el resultado que noso- tros deseamos, o incluso a veces intentar asignar el valor de una variable de un tipo de dato a otra con otro tipo de dato puede derivar en un error de ejecución grave. Para forzar la conversión de una variable de un tipo a otro existe lo que en C se denomina casting, lo cual se realiza colocando entre paréntesis el tipo de dato deseado a la izquierda de la variable a convertir:

(tipo) expresión

Veamos el siguiente ejemplo:

int x=3,y=2;

float z;

z=x/y;

Aquí, el valor asignado a z es 1.0, y no 1.5; esto, porque al ser x y y variables enteras, el resultado de dividirlas es un entero, y 3/2 es igual a 1. Posteriormente, el valor 1 se con- vierte a un valor en punto flotante (float) para realizar la asignación (valor 1.0), y se asigna a z. Si lo que se desea es que la división se realice en punto flotante, debe escribirse la operación de la siguiente forma: z = (float) x / y;

Esta conversión forzada obliga a convertir la variable a en float, y entonces, aplicando las reglas de conversión automática de tipos la variable, b se convierte automáticamente en float y se realiza la división en punto flotante. Con esto, el resultado final de la operación es 1.5, y dicho valor se asigna a la variable z.

2.6. Incremento y decremento

Además de las operaciones aritméticas, C proporciona los siguientes operadores unarios:

• Signo negativo:

-

• Incremento:

++

• Decremento:

--

La expresión x++

equivale a x = x+1

18

unarios: • Signo negativo: - • Incremento: ++ • Decremento: -- La expresión x++ equivale a
unarios: • Signo negativo: - • Incremento: ++ • Decremento: -- La expresión x++ equivale a
unarios: • Signo negativo: - • Incremento: ++ • Decremento: -- La expresión x++ equivale a
unarios: • Signo negativo: - • Incremento: ++ • Decremento: -- La expresión x++ equivale a
unarios: • Signo negativo: - • Incremento: ++ • Decremento: -- La expresión x++ equivale a
unarios: • Signo negativo: - • Incremento: ++ • Decremento: -- La expresión x++ equivale a

La expresión x-- equivale a x = x-1

La expresión x-- equivale a x = x-1 Los operadores ++ y -- pueden usarse tanto

Los operadores ++ y -- pueden usarse tanto de manera postfija como prefija, por ejemplo: --x.

El hecho de que los operadores se usen de forma postfija o prefija determina si el valor de la variable se modifica después o antes de la evaluación de la expresión en la que aparece. Por ejemplo, la siguiente línea de código:

a = ((++c) - (b--)) % 100;

equivale a:

c = c + 1;

a = (c - b) % 100;

b = b - 1;

Es decir, la variable c se decrementa antes de realizar la expresión, después se realiza la expresión y finalmente la variable b se incrementa.

2.7. Precedencia y orden de evaluación

Cuando tenemos expresiones muy largas y complejas, podría ser confuso entender cómo es que el compilador realiza cada una de las operaciones contenidas en la expresión. Además, se debe saber el orden en que el compilador realiza las operaciones porque el resultado puede ser completamente diferente al aplicar diferente orden.

Comencemos con un ejemplo sencillo del siguiente código:

int d=2; a = 3, b = 6; int Resultado; Resultado = d+b/a;

En este ejemplo, al sustituir los valores de cada variable obtenemos la siguiente ex- presión aritmética:

Resultado = 2+6/3;

Sería un grave error pensar que primero se realiza la suma 2+6, dando como resultado

19

aritmética: Resultado = 2+6/3; Sería un grave error pensar que primero se realiza la suma 2+6,
aritmética: Resultado = 2+6/3; Sería un grave error pensar que primero se realiza la suma 2+6,
aritmética: Resultado = 2+6/3; Sería un grave error pensar que primero se realiza la suma 2+6,
aritmética: Resultado = 2+6/3; Sería un grave error pensar que primero se realiza la suma 2+6,
aritmética: Resultado = 2+6/3; Sería un grave error pensar que primero se realiza la suma 2+6,
aritmética: Resultado = 2+6/3; Sería un grave error pensar que primero se realiza la suma 2+6,
la expresión. Resultado = 8/3; //Esto no ocurre Debido a la precedencia de operadores, el

la expresión.

Resultado = 8/3;

//Esto no ocurre

Debido a la precedencia de operadores, el compilador siempre ejecuta primero las divi- sión y después la suma, dando como resultado la expresión:

Resultado = 2+2; //Esto sí ocurre.

Si quisiéramos cambiar la precedencia anterior y hacer que se realice primero la suma, deberíamos colocar paréntesis para “aislar” la suma, de la siguiente forma:

Resultado = (2+6)/3

Esto se convierte en la expresión:

Resultado =

8/3.

La precedencia de los operadores está muy bien definida en el Lenguaje C, y cuando dos operadores tienen la misma precedencia, se realiza primero el que está a la izquierda.

La tabla siguiente muestra la precedencia de los operadores de arriba hacia abajo, es de- cir, tienen una prioridad mayor (precedencia) los que se encuentran en el primer renglón, después los del segundo, y así sucesivamente; los operadores que están en el mismo renglón tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la izquierda de la expresión.

tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la

20

tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la
tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la
tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la
tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la
tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la
tienen el mismo nivel de precedencia y se realiza primero el que esté más hacia la