programación i - tema 4. el lenguaje de programación c.pdf
TRANSCRIPT
Programación I
Matemáticas Aplicadas y Computación Andrés Hernández Balderas
2015
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
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
• 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
• 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
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
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
• 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
• 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
• 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
4.8 Tipos de almacenamiento (auto, extern, register, static)
auto
59
int main() { auto int edad; int estatura; … }
Andrés Hernández Balderas - 2015
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
4.11 Funciones
83
• Ejemplo:
double ValorAbsoluto(double x)
{
if (x < 0.0)
return -x;
else
return x;
}
Andrés Hernández Balderas - 2015
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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