Programación I - Tema 4. El lenguaje de programación C.pdf

114
Programación I Matemáticas Aplicadas y Computación Andrés Hernández Balderas 2015

Transcript of Programación I - Tema 4. El lenguaje de programación C.pdf

Page 1: Programación I - Tema 4. El lenguaje de programación C.pdf

Programación I

Matemáticas Aplicadas y Computación Andrés Hernández Balderas

2015

Page 2: Programación I - Tema 4. El lenguaje de programación C.pdf

4 EL LENGUAJE DE PROGRAMACIÓN C

# include <stdio.h> int main() { printf("Hola Mundo\n"); return 0; }

2 Andrés Hernández Balderas - 2015

Page 3: Programación I - Tema 4. El lenguaje de programación C.pdf

4.1 Conceptos elementales del lenguaje C

• Fue desarrollado en 1972 por Dennis M. Ritchie cuando trabajaba para los laboratorios Bell.

• Parte de este desarrollo tuvo como base al lenguaje B, se dice que de ahí viene el nombre C, ya que era una evolución de dicho lenguaje.

• La historia del lenguaje C está íntimamente relacionada con el desarrollo del sistema operativo Unix. Originalmente, Unix estaba escrito en lenguaje ensamblador pero después fue reescrito en C.

3 Andrés Hernández Balderas - 2015

Page 4: Programación I - Tema 4. El lenguaje de programación C.pdf

• La potencia y sencillez del lenguaje hicieron que rápidamente cobrara popularidad entre los programadores superando a Basic, que durante años había sido el principal lenguaje utilizado en las microcomputadoras.

• La misma popularidad hizo que las diferentes organizaciones desarrollaran sus propias versiones de C, ocasionando problemas de compatibilidad.

4.1 Conceptos elementales del lenguaje C

4 Andrés Hernández Balderas - 2015

Page 5: Programación I - Tema 4. El lenguaje de programación C.pdf

• Dado que, desde su surgimiento, la única definición del lenguaje con la que se contaba era el manual de referencia de la primera edición del libro El lenguaje de programación C de Ritchie y Kernighan, se hizo indispensable una estandarización que facilitara la portabilidad del código.

• Originalmente esta tarea corrió a cargo del American National Standards Institute (ANSI) y posteriormente por la International Organization for Standardization (ISO).

4.1 Conceptos elementales del lenguaje C

5 Andrés Hernández Balderas - 2015

Page 6: Programación I - Tema 4. El lenguaje de programación C.pdf

Estandarizaciones existentes:

1. ANSI X3.159-1989 también conocida como C89

2. ISO/IEC 9899:1990 la cuál fue la adopción por parte de ISO del estándar C89 de ANSI. Se conoce como C90.

3. ISO/IEC 9899:1999 el cuál fue adoptada como estándar por ISO en el año 2000. Comúnmente se le conoce como C99.

4. ISO/IEC 9899:2011 o C11 es la última estandarización la cual terminó de revisarse en el 2011

4.1 Conceptos elementales del lenguaje C

6 Andrés Hernández Balderas - 2015

Page 7: Programación I - Tema 4. El lenguaje de programación C.pdf

4.1 Conceptos elementales del lenguaje C

Algunas de las características que volvieron popular a C: • Es un lenguaje de propósito general. • Tamaño pequeño. • No está ligado a ningún sistema operativo ni a ninguna computadora. • Proporciona una gran variedad de tipos de datos. • La base del lenguaje es simple pero sus funcionalidades pueden ser

extendidas utilizando bibliotecas. • Algunos lo consideran como un lenguaje de nivel medio ya que combina

elementos de un lenguaje de alto nivel con funcionalidad de los ensambladores

• Permite el acceso a la memoria de bajo nivel. • Contiene un conjunto reducido de palabras clave. • Proporciona una estructuración en bloques. • Permite el uso de funciones independientes. • No tiene una comprobación rígida de tipos de datos, lo cual permite

combinarlos. 7 Andrés Hernández Balderas - 2015

Page 8: Programación I - Tema 4. El lenguaje de programación C.pdf

• La estructura que debe seguir un programa en C puede variar de acuerdo al estándar que siga el compilador utilizado, pero en general:

4.2 Estructura general de un programa en C

Sentencias para el preprocesador

Declaración de variables globales

Definición de funciones

Definición de la función main

8 Andrés Hernández Balderas - 2015

Page 9: Programación I - Tema 4. El lenguaje de programación C.pdf

• Sentencias para el preprocesador. Son indicaciones que se ejecutan antes del proceso de compilación, por ejemplo la inclusión de bibliotecas.

• Declaración de variables globales. Las variables globales son reconocidas en todas las funciones del programa por lo que son declaradas fuera de ellas.

4.2 Estructura general de un programa en C

9 Andrés Hernández Balderas - 2015

Page 10: Programación I - Tema 4. El lenguaje de programación C.pdf

• Definición de funciones. Las funciones se consideran subprogramas que tienen un objetivo muy específico. El programa puede contener muchas de ellas. Una función puede contener parámetros de entrada que son procesados para generar una salida. La salida es de un tipo específico que es indicado en la definición de la función. Para poder transformar las entradas en salidas, es posible que la función requiera del uso de variables locales.

• Definición de la función main. La función main tiene la particularidad de que es la primera que se ejecuta por la que su existencia es obligatoria.

4.2 Estructura general de un programa en C

10 Andrés Hernández Balderas - 2015

Page 11: Programación I - Tema 4. El lenguaje de programación C.pdf

4.2 Estructura general de un programa en C

#include <stdio.h> #include <math.h> #define PI 3.1416

Ejemplo:

En este caso las sentencias para el preprocesador son de dos tipos: para incluir bibliotecas (stdio y math) y para definir una constante simbólica (PI)

char respuesta;

En este ejemplo, la variable global respuesta podrá ser utilizada en todas las funciones del programa, incluyendo a main.

11 Andrés Hernández Balderas - 2015

Page 12: Programación I - Tema 4. El lenguaje de programación C.pdf

4.2 Estructura general de un programa en C

La función areaCirculo tiene como objetivo el cálculo del área de un círculo. Para lograr este propósito, recibe como entrada el valor r y genera una salida de tipo float. Es importante observar que esta función tiene su propia sección de definición de variables locales.

float areaCirculo(float r) { float area; area=PI*pow(r,2); return area; }

12 Andrés Hernández Balderas - 2015

Page 13: Programación I - Tema 4. El lenguaje de programación C.pdf

4.2 Estructura general de un programa en C

La más importante de las funciones, y la única obligatoria, es main. Esta función es la primera que se ejecuta y puede hacer uso de las otras funciones.

int main() { float radio; float area; do{ printf("\nPropocione el radio: "); scanf("%f",&radio); area=areaCirculo(radio); printf("El área del círculo es %f",area); printf("\n¿Desea continuar (S/N)? "); respuesta=getche(); }while(respuesta=='S'); return 0; }

13 Andrés Hernández Balderas - 2015

Page 14: Programación I - Tema 4. El lenguaje de programación C.pdf

4.3 Preparación y ejecución de un programa en C en la línea de comandos

• Para crear un programa en C se puede hacer uso de cualquier editor de texto plano (sin formato). Por ejemplo, en Windows se puede utilizar Notepad, en Unix el editor vi o en Linux nano. Por convención la extensión del archivo que guarda el programa debe ser .c

• Una vez guardado, el programa debe ser compilado antes de su ejecución.

14 Andrés Hernández Balderas - 2015

Page 15: Programación I - Tema 4. El lenguaje de programación C.pdf

4.3 Preparación y ejecución de un programa en C en la línea de comandos

• La compilación dependerá de la plataforma de trabajo y del compilador que se usa. Para hacerlo de manera correcta es importante leer la documentación del compilador.

• Aquí se presenta un ejemplo con uno de los compilador más utilizados: GCC (GNU Compiler Collection ) el cual es un compilador integrado del proyecto GNU para C, C++, Objective C y Fortran que puede conseguirse en http://gcc.gnu.org/

15 Andrés Hernández Balderas - 2015

Page 16: Programación I - Tema 4. El lenguaje de programación C.pdf

4.3 Preparación y ejecución de un programa en C en la línea de comandos

• Con GCC se compila de la siguiente manera:

gcc -o NombreEjecutable NombrePrograma.c

• GCC traducirá el código guardado en NombrePrograma.c y generará un archivo ejecutable de nombre NombreEjecutable.

• Si no se utiliza el parámetro –o con el nombre del ejecutable deseado, se generará uno con el nombre a en el directorio donde se localiza gcc

16 Andrés Hernández Balderas - 2015

Page 17: Programación I - Tema 4. El lenguaje de programación C.pdf

4.4 Compiladores de C y entornos de desarrollo • El proceso para crear programas consta de varias

actividades. Cada una de ellas utiliza un programa específico: editores, compiladores, enlazadores, depuradores, etc.

• Hay una gran variedad de estos programas para los diferentes sistemas operativos por lo que puede ser algo tedioso su búsqueda, instalación y configuración.

• Una alternativa es el uso de entornos de desarrollo o IDE (Integrated Development Environment).

17 Andrés Hernández Balderas - 2015

Page 18: Programación I - Tema 4. El lenguaje de programación C.pdf

4.4 Compiladores de C y entornos de desarrollo

• Un IDE es un programa que integra todos los programas necesarios para desarrollar en un solo ambiente. En él se encuentran todas las herramientas necesarias.

• Algunos de los IDE son los siguientes: – Dev-C++

– Visual C++

– Borland C++

– Code Blocks

– Eclipse

– NetBeans

18 Andrés Hernández Balderas - 2015

Page 19: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

Variables

• El uso de variables en C es similar al que se le da en Matemáticas: representan valores desconocidos o que pueden cambiar.

• En el ambiente de la programación, el valor de las variables se puede establecer con una entrada dada por un usuario o con el resultado de una operación.

• En C, es importante que las variables sean declaradas antes de su uso para evitar errores durante la compilación.

19 Andrés Hernández Balderas - 2015

Page 20: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

Cada variable tiene un identificador (o nombre) que representa una posición de memoria donde será guardado su valor. Cumple con:

• Se puede formar con una combinación de letras (mayúsculas y minúsculas) y números

• Puede contener el guion bajo ( _ ).

• No debe contener espacios en blanco, ni otros caracteres distintos a los mencionados arriba ($, &, (, {, etc.).

• El primer carácter siempre debe ser una letra o un guion bajo.

• Se hace distinción entre letras mayúsculas y minúsculas.

• La longitud del identificador puede ser de hasta 31 caracteres.

• No puede ser usada como identificador alguna de las palabras reservadas en el lenguaje C.

20 Andrés Hernández Balderas - 2015

Page 21: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

• La declaración de una variable, ya sea global o local, se hace de la siguiente manera:

tipo variable1, variable2, …,variablen;

• Un ejemplo puede ser el siguiente:

int edad, estatura;

float calificacion1, calificacion2, promedio;

21 Andrés Hernández Balderas - 2015

Page 22: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

Constantes

• A diferencia de las variables, las constantes no cambian su valor durante la ejecución del programa. Por ejemplo, en la siguiente expresión que calcula el área de un círculo, el 2 y 3.1416 son constantes, mientras que area y r son variables:

area = 3.1416 * r 2

22 Andrés Hernández Balderas - 2015

Page 23: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

Existen varios tipos de constantes:

• Numéricas. Pueden ser enteros o de punto flotante. Por ejemplo: 5, 3.0, 5.78865

• Caracter. Las constantes de este tipo se utilizan para representar caracteres como pueden ser letras o símbolos especiales. En general se considera parte de este tipo a cualquier caracter que esté entre apóstrofos (aunque sean números). Ejemplo: ‘a’, ‘5’, ‘Z’, ‘#’.

23 Andrés Hernández Balderas - 2015

Page 24: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

• Cadenas de caracteres. Están formadas por un conjunto de caracteres agrupados entre comillas. Por ejemplo, “Hola, mundo”, “5”, “Juan Pérez”.

• Constantes Simbólicas. Se establecen en una instrucción para el preproceso de la siguiente forma: #define nombre valor. Este nombre puede utilizarse en múltiples instrucciones a lo largo del programa en lugar del valor. Si en algún momento se requiere cambiar el valor, sólo es necesario hacerlo en la definición y el resto del código no es alterado. Ejemplo: #define PI 3.1415167

24 Andrés Hernández Balderas - 2015

Page 25: Programación I - Tema 4. El lenguaje de programación C.pdf

4.5 Variables y constantes

• Vale la pena aclarar que las constantes 5, ‘5’ y “5” son diferentes. La constante 5 es numérica, en específico un entero. La constante ‘5’ es un caracter, en realidad es 53 que corresponde a su código ASCII. Por último, “5” es una constante de cadena de caracteres (aunque sólo tenga uno) y para ella se construye toda una estructura para su manejo.

25 Andrés Hernández Balderas - 2015

Page 26: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6 Tipos de datos, operadores y expresiones en C

Toda variable, antes de ser utilizada, debe ser declarada de la siguiente forma:

tipo nombre;

26 Andrés Hernández Balderas - 2015

Page 27: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.1 Tipos de datos simples (char, int, float, double)

27

Tipos enteros char

int

Tipos reales float

double

Andrés Hernández Balderas - 2015

Page 28: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.1 Tipos de datos simples (char, int, float, double)

28

char • Es de los tipos más simples. Generalmente se utiliza

para representar un caracter como ‘a’. Internamente almacena el código ASCII correspondiente.

• Otro de los usos que se le da es para almacenar valores enteros pequeños. Por ejemplo, podría utilizarse para guardar la edad de una persona.

• Según el compilador y la plataforma en la que se esté trabajando, este tipo suele usar 1 byte en memoria. Los valores que se pueden representar [-128, 127].

Andrés Hernández Balderas - 2015

Page 29: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.1 Tipos de datos simples (char, int, float, double)

29

int • El tipo int se utiliza para aquellas variables enteras que

requieran de valores más grandes que los proporcionados por char.

• Por lo general este tipo utiliza 4 bytes y sus valores están en el rango [-2,147,483,647, 2,147,483,648].

Andrés Hernández Balderas - 2015

Page 30: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.1 Tipos de datos simples (char, int, float, double)

30

float • El tipo float es un tipo real de precisión simple de

punto flotante. • Este tipo puede representar números muy grandes o

muy pequeños (positivos y negativos). • La precisión depende de cuántos bytes utilice. • Normalmente utiliza 4 bytes que permiten los

siguientes rangos de valores [-3.4E+38, -3.4E-38], [0] y [3.4E-38, 3.4E+38].

Andrés Hernández Balderas - 2015

Page 31: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.1 Tipos de datos simples (char, int, float, double)

31

double • Es posible que la precisión proporcionada por float no

sea suficiente y será necesario utilizar el tipo double. • Es común que este tipo utilice 8 bytes en memoria, el

doble de una precisión simple, y que permita los siguientes rangos de valores [-1.7E+308, -1.7E-308], [0] y [1.7E-308, 1.7E+308]

Andrés Hernández Balderas - 2015

Page 32: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.1 Tipos de datos simples (char, int, float, double)

32

• Como se mencionó antes, la cantidad de bytes que cada tipo utiliza, depende del compilador y de la plataforma de trabajo. Una forma simple de investigar el valor real es haciendo uso del operador sizeof:

sizeof(tipo) • Por ejemplo:

printf(“Bytes por double %d”, sizeof(double));

Andrés Hernández Balderas - 2015

Page 33: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.2 Modificadores (long, short, signed, unsigned)

33

Los tipos pueden ser alterados para que se ajusten mejor al programa que se esté desarrollando. Esto se hace mediante el uso de modificadores que permiten cambiar el rango de valores de cada tipo.

Modificador Consecuencia

long Indica que se deben usarse más bytes, generalmente el doble.

short Indica que se deben utilizar menos bytes, generalmente la mitad.

signed Indica que el número lleva signo por lo que se pueden representar

valores positivos o negativos.

unsigned Indica que no se debe representar el signo por lo que solamente se

podrán utilizar números positivos. La ventaja de este modificador es

que se podrá representar el doble de cantidad de números ya se

hace uso del bit que originalmente estaba destinado al signo.

Andrés Hernández Balderas - 2015

Page 34: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.2 Modificadores (long, short, signed, unsigned)

34

Con la incorporación de estos modificadores, que no aplican en todos los casos, la cantidad de bytes utilizados y los rangos de números que se pueden representar se resumen en:

Tipo Bytes Rango de valores

signed char / char 1 [-128, 127]

unsigned char 1 [0, 255]

signed int / int 4 [-2,147,483,647, 2,147,483,648]

unsigned int 4 [0, 4,294,967,295]

signed short int / short int 2 [-32,768, 3,2767]

unsigned short int 2 [0, 65,535]

signed long int / long int 4 [-2,147,483,647, 2,147,483,648]

unsigned long int 4 [0, 4,294,967,295]

float 4 [-3.4E+38, -3.4E-38], [0 ],

[3.4E-38, 3.4E+38]

double 8 [-1.7E+308, -1.7E-308], [0] ,

[1.7E-308, 1.7E+308]

long double 16 [-3.4E-4932, -1.1E+4932], [0 ],

[3.4E-4932, 1.1E+4932]

Andrés Hernández Balderas - 2015

Page 35: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

1. Operadores

• Un operador es un símbolo que actúa sobre variables y constantes para realizar una operación.

• El lenguaje C es rico en operadores y los tiene de varios tipos. Los tiene unarios, binarios y ternarios de acuerdo a si operan sobre uno, dos o tres operandos.

35 Andrés Hernández Balderas - 2015

Page 36: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

Operadores de asignación

36

Operador Significado

= Asigna el resultado de una

expresión a una variable.

• La función de este operador es la de guardar, en el espacio reservado a una variable, el resultado de una operación, el valor de una variable o de una constante.

variable = expresión • Es importante respetar el orden de los operandos. En el lado izquierdo se

coloca la variable que guardará el resultado de la expresión de la derecha. A continuación algunos ejemplos:

suma = valor1 + valor2; a = 2; b = x;

Andrés Hernández Balderas - 2015

Page 37: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

Operadores aritméticos

37

• Ejemplos: resultado = dato1 + datos2; resultado = valor – numero1; resultado = 5 * radio; promedio = (dato1 + dato2) / 2; residuo = 25 % 5;

Operador Significado

+ Suma

- Resta

* Multiplicación

/ División

% Residuo de la división

Andrés Hernández Balderas - 2015

Page 38: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

Operadores incrementales

38

• Pueden colocarse antes o después de la variable. Si está antes, entonces el valor de la variable se modificará antes de que sea utilizada en una expresión. Por el contrario, si está después, el valor será modificado después de que la variable sea utilizada. A continuación unos ejemplos:

a = 3; b = ++a; //El valor de a se modifica primero por lo que b toma el valor de 4 c = 2; d = c++; //El valor de c se modificará después, entonces d tendrá el valor de 2

Operador Significado

++ Incrementa en uno a la variable sobre

la que opera.

-- Decrementa en uno a la variable sobre

la que opera.

Andrés Hernández Balderas - 2015

Page 39: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

Operadores relacionales

39

• Ejemplos: (3 ==2 ) // el resultado es falso (6 < 8) // el resultado es verdadero (5 > 5) // el resultado es falso (3 <= 7) // el resultado es verdadero (8 >= 8) // el resultado es verdadero (6 != 5) // el resultado es verdadero

Operador Significado

== Igual a

< Menor que

> Mayor que

<= Menor o igual que

>= Mayor o igual que

!= Diferente a

Andrés Hernández Balderas - 2015

Page 40: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

Operadores lógicos

40

Operador Significado

&& Y

|| O

! Negación lógica

Se utilizan, junto con los operadores relacionales, para formar expresiones lógicas de mayor complejidad que son ciertas o falsas.

Andrés Hernández Balderas - 2015

Page 41: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

El operador && requiere dos operandos con valores lógicos y proporciona los siguientes resultados:

41

Operando A Operando B A && B

verdadero verdadero verdadero

verdadero falso falso

falso verdadero falso

falso falso falso

Andrés Hernández Balderas - 2015

Page 42: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

El operador || también requiere de dos operandos y proporciona los siguientes resultados:

42

Operando A Operando B A || B

verdadero verdadero verdadero

verdadero falso verdadero

falso verdadero verdadero

falso falso falso

Andrés Hernández Balderas - 2015

Page 43: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

El operador ! es unario y tiene como función el negar un valor lógico. Los resultados que genera son los siguientes:

43

Operando A !A

verdadero falso

falso verdadero

Andrés Hernández Balderas - 2015

Page 44: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

• Ejemplos que hacen uso de los operadores lógicos, y relacionales: (5 > 3) && (2 == 2) // el primer paréntesis da un valor verdadero, el

segundo también. Consultando la tabla del operador && se puede ver que verdadero Y verdadero da como resultado un verdadero.

5 || (3 <= 1) // el primer operando, 5, en el lenguaje C, se considera como un verdadero. El resultado del paréntesis es un falso. Consultando la tabla del operador || se ve que verdadero O falso es un verdadero.

!(2 > 3) // el resultado del paréntesis es falso por lo que al negarlo se obtiene un valor verdadero.

Es importante aclarar que, en el lenguaje C, el valor falso se representa con el valor numérico 0, mientras que el valor verdadero se puede representar con cualquier valor diferente a 0

44 Andrés Hernández Balderas - 2015

Page 45: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas Otros Operadores

45

Operador Significado

-

Operador unario que cambia el signo del valor del operando. No

confundir con el operador aritmético de la resta.

+

Operador unario que fue introducido como complemento al operador

unario – pero que no tiene efecto sobre el operando. No confundir con

el operador aritmético de la suma.

sizeof Devuelve la cantidad de bytes que utiliza el tipo de datos que recibe

como parámetro.

+= Es una simplificación de la expresión

variable = variable + expresión

-= Es una simplificación de la expresión

variable = variable - expresión

*= Es una simplificación de la expresión

variable = variable * expresión

/= Es una simplificación de la expresión

variable = variable / expresión

Andrés Hernández Balderas - 2015

Page 46: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

46

• Ejemplos: a = 7;

b = -a; // b toma el valor de 7 negativo.

c = +b; // en este caso el operador unario + no tiene ningún efecto por lo que c

también tendrá un valor 7 negativo.

Tamano = sizeof (float) // la variable Tamano tendrá la cantidad de bytes que el sistema reserva

para una variable de tipo float.

acumulador = 1;

acumulador += 3; // Al ser equivalente a acumulador = acumulador + 3 la variable queda con

un valor de 4

acumulador -= 1; // Al ser equivalente a acumulador = acumulador – 1 la variable queda con

un valor de 3

acumulador *= 4; // Al ser equivalente a acumulador = acumulador * 4 la variable queda con

un valor de 12

acumulador /= 2; // Al ser equivalente a acumulador = acumulador / 2 la variable queda con

un valor de 6

Andrés Hernández Balderas - 2015

Page 47: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

2. Expresiones

• Una expresión es la combinación de variables, constantes y operadores que da como resultado un valor que puede ser numérico o lógico. Pueden considerarse dos tipos de expresiones: aritméticas y lógicas, aunque no hay una restricción para combinar ambas.

47 Andrés Hernández Balderas - 2015

Page 48: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

48

Aritméticas • Como su nombre lo dice, es una expresión que

combina operadores aritméticos y tiene como resultado un valor numérico.

• Por ejemplo: resultado = -5 + 3 * 8 / 3 * 23.676543 – 1; operacion = a + b % 4 * 25;

Andrés Hernández Balderas - 2015

Page 49: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

49

Lógicas • Estas expresiones hacen uso de los operadores

lógicos y relacionales para generar resultados que también son lógicos.

• Por ejemplo: es_cierto = 25 || promedio && 34 <= maximo; mayor_edad = edad >= 18;

Andrés Hernández Balderas - 2015

Page 50: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

3. Orden de precedencia

• Es natural que en las expresiones haya confusión sobre cómo aplicar los operadores ya que puede haber muchos involucrados.

• Una manera en la que se logra obtener el resultado que se desea es haciendo uso de paréntesis, para indicar el orden de las operaciones.

50 Andrés Hernández Balderas - 2015

Page 51: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

• Los siguientes ejemplos hacen uso de las mismas variables, constantes y operadores, pero los paréntesis generan diferentes expresiones con diferentes resultados ya que siempre se ejecutarán primero las operaciones entre paréntesis.

resultado = (1 + 2) * (12 / 4) // el primer paréntesis tiene el valor de 3, el segundo también 3. Por lo tanto, el resultado completo es 9

resultado = 1 + (2 * 12) / 4 // el resultado del paréntesis es 24 por lo que la expresión se reduciría a 1 + 24 / 12. Ahora surge la pregunta ¿qué se hace primero, la suma o la división?

51 Andrés Hernández Balderas - 2015

Page 52: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

• La respuesta a la pregunta del segundo ejemplo depende de la prioridad o precedencia que se asigne a cada uno de los operadores, esto es, el orden de aplicación.

• A continuación se presenta la tabla de precedencias del lenguaje C.

• La tabla también indica las reglas de asociatividad, o sea, el orden de aplicación para para los operadores con la misma precedencia.

52 Andrés Hernández Balderas - 2015

Page 53: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

53

Precedencia Operadores Asociatividad

1 () izquierda a derecha

2 ++ --- ! sizeof

+ (unario) - (unario)

derecha a izquierda

3 * / % izquierda a derecha

4 + - izquierda a derecha

5 < <= > >= izquierda a derecha

6 == != izquierda a derecha

7 && izquierda a derecha

8 || izquierda a derecha

9 = += -= *= /= derecha a izquierda

Andrés Hernández Balderas - 2015

Page 54: Programación I - Tema 4. El lenguaje de programación C.pdf

4.6.3 Operadores y expresiones aritméticas, relacionales y lógicas

54

• Ejemplos: resultado = (1 + 2) * (12 / 4) // el primer paréntesis tiene

el valor de 3, el segundo también 3. Por lo tanto, el resultado completo es 9

resultado = 1 + (2 * 12) / 4 // el resultado del paréntesis es 24 por lo que la expresión se reduciría a 1 + 24 / 4. Dado que primero se aplica la división y luego la suma el resultado completo sería 7.

resultado = 1 + 2 * 1 / 4 //La multiplicación y la división se aplican antes de la suma y la resta. La regla de asociatividad indica que se aplican de izquierda a derecha. La expresión se reduce a 1 + 2 / 4. Después de aplicar la división 1 + 0.5. Al final el resultado total será de 1.5.

Andrés Hernández Balderas - 2015

Page 55: Programación I - Tema 4. El lenguaje de programación C.pdf

4.7 Entrada y salida estándar de datos (printf y scanf)

printf: Genera una salida a la pantalla • Sintaxis:

printf(“cadena formato salida”,valores);

• Cadena formato salida es el texto que será escrito

• Valores son los parámetros necesarios que requiere la cadena

• Ejemplos:

printf(“El sueldo máximo es %f”,SueldoMensual);

printf(“Articulos=%d,Precio= %f, iVA=%f”, arti,precio,iva);

55 Andrés Hernández Balderas - 2015

Page 56: Programación I - Tema 4. El lenguaje de programación C.pdf

4.7 Entrada y salida estándar de datos (printf y scanf)

scanf: Obtiene una entrada del teclado • Sintaxis:

scanf(“cadena formato entrada”, direcciones memoria);

• Cadena formato entrada es el texto que indica qué se desea obtener

• Direcciones memoria son las direcciones de memoria donde se almacenarán los valores leídos (&variable)

• Ejemplos:

scanf(“%f”, &SueldoMensual);

scanf(“%d”, &arti);

56 Andrés Hernández Balderas - 2015

Page 57: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static) • La declaración de variables se generaliza a:

clase tipo nombre; • El tipo determina el tipo de dato que almacena la

variable. • La clase determina la forma de almacenamiento de

la variable, que determina su visibilidad y su existencia. Existen cuatro formas de almacenamiento: – auto – extern – register – static

57 Andrés Hernández Balderas - 2015

Page 58: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

auto

• Variables locales a una función o a un bloque. Su existencia está ligada a éstos.

• La variable se crea en la pila del sistema, en la RAM, cuando se invoca la función o cuando se ejecuta el código dentro del bloque.

• Se destruye cuando acaba la función o bloque.

• Si no se especifica una clase al declarar una variable, ésta siempre es automática.

58 Andrés Hernández Balderas - 2015

Page 59: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

auto

59

int main() { auto int edad; int estatura; … }

Andrés Hernández Balderas - 2015

Page 60: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

extern

• Almacenamiento permanente durante la ejecución.

• Las funciones y bloques declarados después de ella podrán accesarla.

• Permite la transferencia de datos entre funciones (sobre todo entre archivos diferentes).

• Debe definirse como una variable ordinaria, fuera y antes de las funciones que acceden a ella.

• Debe ser declarada con extern. El nombre de la variable externa y su tipo tienen que coincidir con su correspondiente definición de variable externa que aparece en la función.

60 Andrés Hernández Balderas - 2015

Page 61: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

extern

61

int VariableGlobal; // definición int FuncionA (); // declaración externa implícita int main() { VariableGlobal= 1; FuncionA(); return 0; }

Archivo 1

extern int VariableGlobal; // declaración externa int FuncionA () { ++VariableGlobal; }

Archivo 2

Andrés Hernández Balderas - 2015

Page 62: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static) register

• Residen en uno de los registros de la CPU (memoria de alta velocidad y poca capacidad, integrada en el microprocesador).

• Las variables de tipo registro siempre son automáticas y , por tanto, locales a una función.

• Sólo se puede utilizar la clase registro con los tipos entero y carácter. Se suele usar para contadores.

• No siempre se pueden usar los registros CPU . 62 Andrés Hernández Balderas - 2015

Page 63: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

register

63

Int funcionA( register int p1) { register int x; … }

Andrés Hernández Balderas - 2015

Page 64: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

static

• Existen desde el comienzo hasta el final de la ejecución del programa.

• Puede ser global a todo el programa o local a una sola función.

• Todas las variables globales son estáticas.

• Una variable local a una función y de clase estática, conserva su valor de una llamada a otra.

64 Andrés Hernández Balderas - 2015

Page 65: Programación I - Tema 4. El lenguaje de programación C.pdf

4.8 Tipos de almacenamiento (auto, extern, register, static)

register

65

int main() { register cont; for(cont=1;cont <= 3; cont++) { printf("Iteración %d\t", cont); incrementa(); } } int incrementa(){ static int a=1; int b=1; printf("a=%d b=%d\n", a,b); a++; b++; }

Andrés Hernández Balderas - 2015

Page 66: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

• El lenguaje C dispone de varias sentencias para modificar el flujo secuencial de la ejecución (las bifurcaciones), que permiten elegir entre dos o más opciones según ciertas condiciones.

66 Andrés Hernández Balderas - 2015

Page 67: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

67

Operador condicional • Sintaxis:

expresion_1 ? expresion_2 : expresion_3;

• Se evalúa expresion_1. Si el resultado es verdadero, se ejecuta expresion_2; si el resultado es falso, se ejecuta expresion_3.

• Ejemplos:

Edad<18 ? Precio=40 : Precio=50;

Numero<0 ? printf(“Negativo”) : printf(“Positivo”);

Andrés Hernández Balderas - 2015

Page 68: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

68

Sentencia if • Sintaxis: if (expresion) { sentencias; } • Se evalúa expresion. Si el resultado es verdadero, se

ejecutan sentencias. Si es falso, no se hace nada. • Ejemplos:

if(estatura>180 && sexo==‘h’) categoria=2;

Andrés Hernández Balderas - 2015

Page 69: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

69

Sentencia if…else • Sintaxis: if (expresion) { sentencias_1; } else { sentencias_2; } • Se evalúa expresion. Si el resultado es verdadero, se ejecutan sentencias_1. Si es

falso, se ejecutan sentencias_2. • Ejemplos:

if(estatura>180 && sexo==‘h’) cateroria=2; else categoria=1;

Andrés Hernández Balderas - 2015

Page 70: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

70

Sentencia if…else múltiple • Sintaxis: if (expresion_1) sentencias_1; else if (expresion_2) sentencias_2; else if (expresion_3) sentencias_3; else if (...) ... [else sentencias_n;]

Andrés Hernández Balderas - 2015

Page 71: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

71

Sentencia if…else múltiple • Se evalúa expresion_1. Si verdadero, se ejecuta

sentencias_1; si es falso, se evalúa expresion_2. Si el resultado es verdadero, se ejecuta sentencias_2; si es falso se evalúa expresion_3 y así sucesivamente.

• Si ninguna de las expresiones o condiciones es verdadera se ejecuta sentencias_n que es la opción por defecto (puede ser vacía)

• Todas las sentencias pueden ser simples o compuestas.

Andrés Hernández Balderas - 2015

Page 72: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

72

Sentencia if…else múltiple • Ejemplo:

if (edad<18)

precio=40;

else if (edad<30)

precio=50;

else if (edad<60)

precio=55;

else

precio=30; Andrés Hernández Balderas - 2015

Page 73: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

73

Sentencia switch • Sintaxis: switch (expresion) { case expresion_cte_1: sentencia_1; case expresion_cte_2: sentencia_2; ... case expresion_cte_n: sentencia_n; [default: sentencia;] } Andrés Hernández Balderas - 2015

Page 74: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

74

Sentencia switch • Se evalúa expresion y se considera el resultado de dicha evaluación. Si

dicho resultado coincide con el valor constante expresion_cte_1, se ejecuta sentencia_1 seguida de sentencia_2, sentencia_3, ..., sentencia.

• Si el resultado coincide con el valor constante expresion_cte_2, se ejecuta sentencia_2 seguida de sentencia_3, ..., sentencia.

• En general, se ejecutan todas aquellas sentencias que están a continuación de la expresion_cte cuyo valor coincide con el resultado calculado al principio.

• Si ninguna expresion_cte coincide se ejecuta la sentencia que está a continuación de default.

• Si se desea ejecutar únicamente una sentencia_i (y no todo un conjunto de ellas), basta poner una sentencia break a continuación. El efecto de la

• sentencia break es dar por terminada la ejecución de la sentencia switch. • Existe también la posibilidad de ejecutar la misma sentencia_i para varios

valores del resultado de expresion, poniendo varios case expresion_cte seguidos.

Andrés Hernández Balderas - 2015

Page 75: Programación I - Tema 4. El lenguaje de programación C.pdf

4.9 Estructuras de control selectivas

75

Sentencia switch • Ejemplo:

switch (categoria) { case 1: hora_salida=6; break; case 2: case 3: hora_salida=7; break; default: hora_salida=8; }

Andrés Hernández Balderas - 2015

Page 76: Programación I - Tema 4. El lenguaje de programación C.pdf

4.10 Estructuras de control repetitivas

• En el lenguaje C existen varias sentencias que permiten repetir una serie de veces la ejecución de unas líneas de código.

• Esta repetición se realiza, o un número determinado de veces, o hasta que se cumpla una determinada condición de tipo lógico o aritmético.

• De modo genérico, a estas sentencias se les denomina bucles.

76 Andrés Hernández Balderas - 2015

Page 77: Programación I - Tema 4. El lenguaje de programación C.pdf

4.10 Estructuras de control repetitivas

77

Sentencia while • Sintaxis: while (expresion) sentencias; • Las sentencias se ejecuta repetidamente mientras

expresion sea verdadera y deja de ejecutarse cuando expresion se hace falsa.

• Es posible que sentencia no se llegue a ejecutar ni una sola vez.

• Ejemplos: while(contador<=100) contador++;

Andrés Hernández Balderas - 2015

Page 78: Programación I - Tema 4. El lenguaje de programación C.pdf

4.10 Estructuras de control repetitivas

78

Sentencia for • Sintaxis: for (inicializacion; expresion_control; actualizacion) sentencias; • Antes de iniciarse el bucle se ejecuta inicializacion, que es

una o más sentencias que asignan valores iniciales a ciertas variables o contadores.

• A continuación se evalúa expresion_control y si es falsa se prosigue en la sentencia siguiente a la construcción for; si es verdadera se ejecutan sentencias y actualizacion, y se vuelve a evaluar expresion_control.

• El proceso prosigue hasta que expresion_control sea falsa. • La parte de actualizacion sirve para actualizar variables o

incrementar contadores. Andrés Hernández Balderas - 2015

Page 79: Programación I - Tema 4. El lenguaje de programación C.pdf

4.10 Estructuras de control repetitivas

79

Sentencia for • Ejemplo:

for(numero=1;numero<=100;numero++)

{

printf(“\nEl número es: %d”,numero);

suma=suma+numero;

}

Andrés Hernández Balderas - 2015

Page 80: Programación I - Tema 4. El lenguaje de programación C.pdf

4.10 Estructuras de control repetitivas

80

Sentencia do…while

• Sintaxis:

do

{

sentencias;

} while(expresion_control);

• Es similar a while con la diferencia de que expresion_control se evalua al final de sentencias.

• Sentencias se ejecutan al menos una sola vez.

• Ejemplos:

do{

contador++;

suma=suma+contador;

}while(contador<=100) Andrés Hernández Balderas - 2015

Page 81: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

• Una función es una parte de código independiente del programa principal y de otras funciones.

• Puede ser llamada enviándole datos (parámetros) o nada.

• Realiza una determinada tarea y/o proporciona resultados.

• Son esenciales para cumplir con la modularidad.

81 Andrés Hernández Balderas - 2015

Page 82: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

82

• Definición: tipo_valor_retorno nombre (argumentos_formales)

{

variables_locales;

codigo;

return (expresion); // optativo

}

• tipo_valor_retorno: es el tipo del valor que va a devolver la función (si no devuelve nada el tipo puede ser void)

• argumentos_formales: datos de entrada requeridos

• variables_locales: variables necesarias en la función

• codigo: actividades o cálculos

• expresion: valor que devuelve la función

Andrés Hernández Balderas - 2015

Page 83: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

83

• Ejemplo:

double ValorAbsoluto(double x)

{

if (x < 0.0)

return -x;

else

return x;

}

Andrés Hernández Balderas - 2015

Page 84: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

84

• Así como es necesario declarar todas las variables, también las función debe ser declarada antes de ser utilizada en la función o programa que realiza la llamada.

• Mediante una definición previa de la función. Esta práctica es segura si la definición precede a la llamada, pero causa problemas si la definición se cambia de lugar.

• Mediante una declaración explícita, previa a la llamada. Esta es la práctica más. La declaración de la función se hace mediante el prototipo de la función. tipo_valor_retorno nombre(lista de tipos de argumentos);

Andrés Hernández Balderas - 2015

Page 85: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

85

• Definición previa de la función. int funcionB() { return 1; } int funcionA() { return funcionB()+1; } int main() { int a; a=funcionA(); printf("a=%d",a); getch(); }

Andrés Hernández Balderas - 2015

Page 86: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

86

• Declaración explícita, previa a la llamada. int funcionA(); int funcionB(); int main() { int a; a=funcionA(); printf("a=%d",a); getch(); } int funcionA() { return funcionB()+1; } int funcionB() { return 1; }

Andrés Hernández Balderas - 2015

Page 87: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

87

Paso de argumentos por valor y por referencia

• El paso de argumentos por valor indica que a la función se le pasa una copia como argumento por lo que el valor original no será alterado.

• El paso de argumento por referencia pasa como parámetro la dirección de memoria así que el valor original puede sufrir cambios

Andrés Hernández Balderas - 2015

Page 88: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

88

Paso de argumentos por valor (copia de las variables) • Si se desea intercambiar dos valores

void permutar(double x, double y) { double temp; temp = x; x = y; y = temp; } void main() { double a=1.0, b=2.0; printf(“antes: a = %f, b = %f\n", a, b); permutar(a, b); printf(“después: a = %f, b = %f\n", a, b); }

1.0 2.0

a b

&a &b

1.0 2.0

x y

&x &y

Las variables originales no cambian en main. No se hace el intercambio.

Andrés Hernández Balderas - 2015

Page 89: Programación I - Tema 4. El lenguaje de programación C.pdf

4.11 Funciones

89

Paso de argumentos por referencia (mismas variables) • Si se desea intercambiar dos valores

void permutar(double *x, double *y) { double temp; temp = *x; *x = *y; *y = temp; } void main() { double a=1.0, b=2.0; printf(“antes: a = %f, b = %f\n", a, b); permutar(&a, &b); printf(“después: a = %f, b = %f\n", a, b); }

1.0 2.0

a b

&a,*x &b,*y

Las variables originales sí cambian en main. Se hace el intercambio.

Andrés Hernández Balderas - 2015

Page 90: Programación I - Tema 4. El lenguaje de programación C.pdf

Recursividad

• Se dice que una función es recursiva cuando se define en términos de ella misma.

• Debe estar diseñada especialmente para comportarse de manera recursiva, de otro modo podrían conducir a bucles infinitos, o a que el programa termine de forma no adecuada.

4.11 Funciones

90 Andrés Hernández Balderas - 2015

Page 91: Programación I - Tema 4. El lenguaje de programación C.pdf

Recursividad

• El ejemplo clásico es el del cálculo del factorial.

• x! = (1)(2)(3)…(x-2)(x-1)(x)

• El factorial de x es igual a la multiplicación de todos los enteros menores o iguales a él.

• Por definición, el factorial de 0 es 1.

• No hay factoriales de números negativos.

4.11 Funciones

91 Andrés Hernández Balderas - 2015

Page 92: Programación I - Tema 4. El lenguaje de programación C.pdf

Recursividad

• El cálculo del factorial se puede ver también como:

• x! = (1)(2)(3)…(x-2)(x-1)(x)

4.11 Funciones

92

(x-1)!

• Por lo tanto

• x! = (x-1)!(x)

• Esta definición está planteada de una forma recursiva: el factorial está definido en términos de sí mismo.

Andrés Hernández Balderas - 2015

Page 93: Programación I - Tema 4. El lenguaje de programación C.pdf

Recursividad

• De manera natural, la función en C sería:

int factorial( int x )

{

return factorial( x-1 )*x;

}

• El problema es que esta función genera un bucle infinito. Es necesario establecer una condición de salida. Por lo general, esta condición está dada por un valor conocido de la función.

4.11 Funciones

93 Andrés Hernández Balderas - 2015

Page 94: Programación I - Tema 4. El lenguaje de programación C.pdf

Recursividad

• Incluyendo una condición de salida, la función en C sería:

int factorial( int x )

{

if(x==0)

return 1; //Se sabe que 0!=1

else

return factorial( x-1 )*x;

}

4.11 Funciones

94 Andrés Hernández Balderas - 2015

Page 95: Programación I - Tema 4. El lenguaje de programación C.pdf

Recursividad

• Para 3!, la ejecución de la función se vería así:

4.11 Funciones

95

3! = (2!)*3 2! = (1!)*2 1! = (0!)*1 0! = 1

= (2)*3 = 6 = (1)*2 = 2 = (1)*1 = 1

• Para cada resultado que se queda pendiente se crean variables locales. Por lo general, una función recursiva consume mucha memoria.

Andrés Hernández Balderas - 2015

Page 96: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales • Supóngase que se desea calcular el promedio de

cinco calificaciones: int main() { float c1, c2, c3, c4, c5, promedio; … promedio=(c1+c2+c3+c4+c5)/5; printf(“Promedio=%f”, promedio); }

• Como puede verse, se requiere una variable para cada calificación. Entonces, si se deseara el promedio de 100 calificaciones se tendrían que utilizar 100 variables.

96 Andrés Hernández Balderas - 2015

Page 97: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales • Un arreglo (array) es un modo de manejar una

gran cantidad de datos del mismo tipo bajo un mismo nombre o identificador. int main()

{

float c[100], promedio;

}

• Se reserva espacio para 100 variables float, todas llaman c y se accede a cada una de ellas por medio de un subíndice (su posición iniciando en la 0).

97 Andrés Hernández Balderas - 2015

Page 98: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales

• Un arreglo puede tener más de una dimensión. Por ejemplo, el siguiente arreglo se puede utilizar para representar a una matriz de 5x5:

int MatrizA[5][5];

• El siguiente ejemplo representa un cubo de 3x2x4:

float CuboX[3][2][4];

• Un hipercubo de 4x2x3x7x2:

double DatosAlumnos[4][2][3][7][2]; 98 Andrés Hernández Balderas - 2015

Page 99: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales

int Estaturas[5]={170,145,181,165,167};

99

170

145

181

165

167

Estaturas

Posición Contenido

0

1

2

3

4

A = Estaturas[0]; // A=170 C= Estaturas[3]+Estaturas[1]; // C=310 printf(“Valor=%d“, Estaturas[4]; // Escribe 167 scanf(“%d”, &Estaturas[2]) ; // Lee un entero y lo guarda en la posición 2

Andrés Hernández Balderas - 2015

Page 100: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales

• En general, un arreglo de declara así: • tipo nombre[tamaño1][tamaño2]…[tamañoN]={inicialización};

• Ejemplos:

• int A[4]={2,4,1,5};

• float VectorR[1000];

• int Matriz[3][2]={{7, 2}, {9, 4}, {2, 8}};

100 Andrés Hernández Balderas - 2015

Page 101: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales • Programa ejemplo:

#include <stdio.h>

#define TOTAL 5

int LecturaArreglo(float[TOTAL]);

float SumaArreglo(float[TOTAL]);

int main()

{

float matriz[TOTAL], suma;

LecturaArreglo(matriz);

printf("La suma es: %f", SumaArreglo(matriz));

getch();

}

int LecturaArreglo(float A[TOTAL])

{

int elemento;

for(elemento=0;elemento<TOTAL;elemento++)

{

printf("Elemento[%d] = ",elemento);

scanf("%f",&A[elemento]);

}

}

float SumaArreglo(float A[TOTAL])

{

float suma=0;

int elemento;

for(elemento=0;elemento<TOTAL;elemento++)

{

suma=suma+A[elemento];

}

return suma;

} 101 Andrés Hernández Balderas - 2015

Page 102: Programación I - Tema 4. El lenguaje de programación C.pdf

4.12 Arreglos unidimensionales y multidimensionales

Consideraciones:

• Una vez que se establecen, las dimensiones de los arreglos son FIJAS, no se pueden cambiar durante la ejecución del programa.

• El programa no verifica el tamaño de las dimensiones por lo que pueden ocurrir errores si se trata de usar posiciones no existentes.

• En las funciones, el paso de parámetro siempre es por REFERENCIA. A pesar de esto, no es necesario el uso de & en los parámetros actuales, sólo se usar el nombre del arreglo (el nombre es un apuntador al conjunto de variables).

102 Andrés Hernández Balderas - 2015

Page 103: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

• A diferencia de otros lenguajes, en C no existe un tipo para las cadenas de caracteres.

• En C, las cadenas se representan utilizando un arreglo de caracteres.

char nombre[20]=“José”;

• En este caso se está declarando una cadena de longitud 20 y la inicializa con “José”.

• Cabe mencionar que el tamaño debe considerar un espacio más para el caracter nulo ‘\0’ que marca el fin de la cadena.

103 Andrés Hernández Balderas - 2015

Page 104: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

104

char nombre[10]=“José”;

J o s é \0

0 1 2 3 4 6 5 8 7 9

• Entonces, si se desea guardar una cadena de N caracteres, se tiene que utilizar un arreglo de al menos N+1 espacios.

• Los espacios después de ‘\0’ se ignoran en las siguientes funciones (string.h).

Andrés Hernández Balderas - 2015

Page 105: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

105

Función printf • Sintaxis:

printf(“%s”,cadena);

• El modificador %s indica que se trata de una cadena de caracteres

• Ejemplos:

char nombre[30]=“Juan Pérez”;

printf(“Tu nombre es %s. Bienvenido.”, nombre);

Andrés Hernández Balderas - 2015

Page 106: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

106

Función scanf • Sintaxis:

scanf(“%s”,cadena);

• Esta función se usa si se va a leer una PALABRA y no una FRASE.

• No requiere del uso de & porque el nombre del arreglo ya indica la dirección de memoria.

• Ejemplos:

scanf ("%s", ApellidoPaterno); Andrés Hernández Balderas - 2015

Page 107: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

107

Función scanf • Hay que tener precaución cuando se leen cadenas con

espacios con scanf. Por ejemplo: int main()

{

char Nombre[20];

char ApellidoPaterno[30];

printf("¿Nombre? ");

scanf("%s",Nombre);

printf("¿Apellido Paterno? ");

scanf("%s",ApellidoPaterno);

printf("Nombre completo: %s %s",Nombre,ApellidoPaterno);

getch();

}

• Genera la siguiente salida ¿Nombre? Luis Miguel

¿Apellido Paterno? Nombre completo: Luis Miguel Andrés Hernández Balderas - 2015

Page 108: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

108

Función gets • Sintaxis:

gets(cadena);

• Esta función se usa si se va a leer una FRASE.

• Ejemplos:

char NombreCompleto[100];

gets (NombreCompleto);

Andrés Hernández Balderas - 2015

Page 109: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

109

Función strcpy • Sintaxis:

strcpy(CadenaDestino,CadenaOrigen);

• Copia el contenido de CadenaOrigen en CadenaDestino (El destino debe tener espacio suficiente).

• Ejemplos:

char Nombre[30]=“Juan Pérez”, NombreCopia[30];

strcpy(NombreCopia, Nombre); Andrés Hernández Balderas - 2015

Page 110: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

110

Función strcpy char Nombre[30];

Nombre=”Juan Pérez” //Incorrecto. Error.

strcpy(Nombre,”Juan Pérez”); //Asignación correcta

Andrés Hernández Balderas - 2015

Page 111: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

111

Función strlen • Sintaxis:

strlen(Cadena);

• Determina la longitud de una cadena.

• Ejemplos:

char Nombre[50]=“Juan Pérez”,

int Longitud;

Longitud=strlen(Nombre); //Longitud=10

Andrés Hernández Balderas - 2015

Page 112: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

112

Función strcat • Sintaxis:

strcat(Cadena1,Cadena2);

• Concatena (une) dos cadenas. El contenido de Cadena2 se une al final de Cadena1.

• Ejemplos:

char Nombre[50]=“Juan”, Apellido[50]= “Pérez”;

strcat(Nombre,Apellido); //Nombre=“JuanPérez”

Andrés Hernández Balderas - 2015

Page 113: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

113

Función sprintf • Sintaxis:

sprintf(CadenaDestino, “cadena formato”,valores);

• Funciona idéntico a printf con la diferencia de que la salida la envía a CadenaDestino y no a la pantalla.

• Ejemplos: char Nombre[50]=“Juan”, Cadena[100];

sprintf(Cadena, ”El nombre es %s” , Nombre); //Cadena=“El nombre es Juan”

Andrés Hernández Balderas - 2015

Page 114: Programación I - Tema 4. El lenguaje de programación C.pdf

4.13 Cadenas de caracteres (concatenación, comparación, copia, etc.)

114

Función strcmp • Sintaxis:

strcmp(Cadena1,Cadena2);

• Devuelve un negativo si Cadena1<Cadena2.

• Devuelve cero si Cadena1=Cadena2.

• Devuelve un positivo si Cadena1>Cadena2

• Ejemplos:

char Nombre1[50]=“Juan”, Nombre2[50]= “Luis”;

strcmp(Nombre1,Nombre2); //Devuelve negativo Andrés Hernández Balderas - 2015