Sunteți pe pagina 1din 114

Programacin I

Matemticas Aplicadas y
Computacin
Andrs Hernndez Balderas

2015

4 EL LENGUAJE DE PROGRAMACIN C
# include <stdio.h>
int main()
{
printf("Hola Mundo\n");
return 0;
}
Andrs Hernndez 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 evolucin 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 despus
fue reescrito en C.
Andrs Hernndez Balderas - 2015

4.1 Conceptos elementales del lenguaje C


La potencia y sencillez del lenguaje hicieron que
rpidamente cobrara popularidad entre los
programadores superando a Basic, que durante
aos haba 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.
Andrs Hernndez Balderas - 2015

4.1 Conceptos elementales del lenguaje C


Dado que, desde su surgimiento, la nica
definicin del lenguaje con la que se contaba era
el manual de referencia de la primera edicin del
libro El lenguaje de programacin C de Ritchie y
Kernighan, se hizo indispensable una
estandarizacin que facilitara la portabilidad del
cdigo.
Originalmente esta tarea corri a cargo del
American National Standards Institute (ANSI) y
posteriormente por la International Organization
for Standardization (ISO).
Andrs Hernndez Balderas - 2015

4.1 Conceptos elementales del lenguaje C


Estandarizaciones existentes:
1. ANSI X3.159-1989 tambin conocida como C89
2. ISO/IEC 9899:1990 la cul fue la adopcin por parte
de ISO del estndar C89 de ANSI. Se conoce como
C90.
3. ISO/IEC 9899:1999 el cul fue adoptada como
estndar por ISO en el ao 2000. Comnmente se
le conoce como C99.
4. ISO/IEC 9899:2011 o C11 es la ltima
estandarizacin la cual termin de revisarse en el
2011
Andrs Hernndez Balderas - 2015

4.1 Conceptos elementales del lenguaje C


Algunas de las caractersticas que volvieron popular a C:
Es un lenguaje de propsito general.
Tamao pequeo.
No est ligado a ningn 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 estructuracin en bloques.
Permite el uso de funciones independientes.
No tiene una comprobacin rgida de tipos de datos, lo cual permite
combinarlos.
Andrs Hernndez Balderas - 2015

4.2 Estructura general de un programa en C


La estructura que debe seguir un programa en C puede
variar de acuerdo al estndar que siga el compilador
utilizado, pero en general:
Sentencias para el preprocesador

Declaracin de variables globales


Definicin de funciones
Definicin de la funcin main
Andrs Hernndez Balderas - 2015

4.2 Estructura general de un programa en C


Sentencias para el preprocesador. Son
indicaciones que se ejecutan antes del proceso
de compilacin, por ejemplo la inclusin de
bibliotecas.
Declaracin de variables globales. Las variables
globales son reconocidas en todas las funciones
del programa por lo que son declaradas fuera de
ellas.

Andrs Hernndez Balderas - 2015

4.2 Estructura general de un programa en C


Definicin de funciones. Las funciones se consideran
subprogramas que tienen un objetivo muy especfico.
El programa puede contener muchas de ellas. Una
funcin puede contener parmetros de entrada que
son procesados para generar una salida. La salida es de
un tipo especfico que es indicado en la definicin de la
funcin. Para poder transformar las entradas en salidas,
es posible que la funcin requiera del uso de variables
locales.
Definicin de la funcin main. La funcin main tiene la
particularidad de que es la primera que se ejecuta por
la que su existencia es obligatoria.
Andrs Hernndez Balderas - 2015

10

4.2 Estructura general de un programa en C


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

char respuesta;

En este caso las sentencias para


el preprocesador son de dos
tipos: para incluir bibliotecas
(stdio y math) y para definir una
constante simblica (PI)
En este ejemplo, la variable
global respuesta podr ser
utilizada en todas las funciones
del programa, incluyendo a main.
Andrs Hernndez Balderas - 2015

11

4.2 Estructura general de un programa en C

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

La funcin areaCirculo tiene


como objetivo el clculo del rea
de un crculo. Para lograr este
propsito, recibe como entrada
el valor r y genera una salida de
tipo float. Es importante
observar que esta funcin tiene
su propia seccin de definicin
de variables locales.

Andrs Hernndez Balderas - 2015

12

4.2 Estructura general de un programa en C


int main()
{
float radio;
float area;

do{
printf("\nPropocione el radio: ");
scanf("%f",&radio);
area=areaCirculo(radio);
printf("El rea del crculo es %f",area);
printf("\nDesea continuar (S/N)? ");
respuesta=getche();
}while(respuesta=='S');

La ms importante de las
funciones, y la nica
obligatoria, es main. Esta
funcin es la primera
que se ejecuta y puede
hacer uso de las otras
funciones.

return 0;

}
Andrs Hernndez Balderas - 2015

13

4.3 Preparacin y ejecucin de un


programa en C en la lnea 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 convencin la extensin del archivo que
guarda el programa debe ser .c
Una vez guardado, el programa debe ser
compilado antes de su ejecucin.
Andrs Hernndez Balderas - 2015

14

4.3 Preparacin y ejecucin de un


programa en C en la lnea de comandos
La compilacin depender de la plataforma de
trabajo y del compilador que se usa. Para hacerlo
de manera correcta es importante leer la
documentacin del compilador.
Aqu se presenta un ejemplo con uno de los
compilador ms 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/
Andrs Hernndez Balderas - 2015

15

4.3 Preparacin y ejecucin de un


programa en C en la lnea de comandos
Con GCC se compila de la siguiente manera:
gcc -o NombreEjecutable NombrePrograma.c
GCC traducir el cdigo guardado en
NombrePrograma.c y generar un archivo
ejecutable de nombre NombreEjecutable.
Si no se utiliza el parmetro o con el nombre del
ejecutable deseado, se generar uno con el
nombre a en el directorio donde se localiza gcc
Andrs Hernndez Balderas - 2015

16

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 especfico: 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 bsqueda, instalacin
y configuracin.
Una alternativa es el uso de entornos de
desarrollo o IDE (Integrated Development
Environment).
Andrs Hernndez Balderas - 2015

17

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
Andrs Hernndez Balderas - 2015

18

4.5 Variables y constantes


Variables
El uso de variables en C es similar al que se le da
en Matemticas: representan valores
desconocidos o que pueden cambiar.
En el ambiente de la programacin, el valor de
las variables se puede establecer con una
entrada dada por un usuario o con el resultado
de una operacin.
En C, es importante que las variables sean
declaradas antes de su uso para evitar errores
durante la compilacin.
Andrs Hernndez Balderas - 2015

19

4.5 Variables y constantes


Cada variable tiene un identificador (o nombre) que representa una
posicin de memoria donde ser guardado su valor. Cumple con:
Se puede formar con una combinacin de letras (maysculas y
minsculas) y nmeros
Puede contener el guion bajo ( _ ).
No debe contener espacios en blanco, ni otros caracteres
distintos a los mencionados arriba ($, &, (, {, etc.).
El primer carcter siempre debe ser una letra o un guion bajo.
Se hace distincin entre letras maysculas y minsculas.
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.
Andrs Hernndez Balderas - 2015

20

4.5 Variables y constantes


La declaracin 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;

Andrs Hernndez Balderas - 2015

21

4.5 Variables y constantes


Constantes
A diferencia de las variables, las constantes no
cambian su valor durante la ejecucin del
programa. Por ejemplo, en la siguiente expresin
que calcula el rea de un crculo, el 2 y 3.1416
son constantes, mientras que area y r son
variables:
area = 3.1416 * r 2

Andrs Hernndez Balderas - 2015

22

4.5 Variables y constantes


Existen varios tipos de constantes:
Numricas. 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 smbolos especiales. En general se
considera parte de este tipo a cualquier caracter
que est entre apstrofos (aunque sean
nmeros). Ejemplo: a, 5, Z, #.
Andrs Hernndez Balderas - 2015

23

4.5 Variables y constantes


Cadenas de caracteres. Estn formadas por un
conjunto de caracteres agrupados entre comillas.
Por ejemplo, Hola, mundo, 5, Juan Prez.
Constantes Simblicas. Se establecen en una
instruccin para el preproceso de la siguiente forma:
#define nombre valor. Este nombre puede utilizarse
en mltiples instrucciones a lo largo del programa
en lugar del valor. Si en algn momento se requiere
cambiar el valor, slo es necesario hacerlo en la
definicin y el resto del cdigo no es alterado.
Ejemplo: #define PI 3.1415167
Andrs Hernndez Balderas - 2015

24

4.5 Variables y constantes


Vale la pena aclarar que las constantes 5, 5 y
5 son diferentes. La constante 5 es numrica,
en especfico un entero. La constante 5 es un
caracter, en realidad es 53 que corresponde a su
cdigo ASCII. Por ltimo, 5 es una constante de
cadena de caracteres (aunque slo tenga uno) y
para ella se construye toda una estructura para
su manejo.
Andrs Hernndez Balderas - 2015

25

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;

Andrs Hernndez Balderas - 2015

26

4.6.1 Tipos de datos simples (char, int,


float, double)

Tipos enteros

Tipos reales

char
int

float
double

Andrs Hernndez Balderas - 2015

27

4.6.1 Tipos de datos simples (char, int,


float, double)
char
Es de los tipos ms simples. Generalmente se utiliza
para representar un caracter como a. Internamente
almacena el cdigo ASCII correspondiente.
Otro de los usos que se le da es para almacenar
valores enteros pequeos. Por ejemplo, podra
utilizarse para guardar la edad de una persona.
Segn 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].
Andrs Hernndez Balderas - 2015

28

4.6.1 Tipos de datos simples (char, int,


float, double)
int
El tipo int se utiliza para aquellas variables enteras que
requieran de valores ms grandes que los
proporcionados por char.
Por lo general este tipo utiliza 4 bytes y sus valores
estn en el rango [-2,147,483,647, 2,147,483,648].

Andrs Hernndez Balderas - 2015

29

4.6.1 Tipos de datos simples (char, int,


float, double)
float
El tipo float es un tipo real de precisin simple de
punto flotante.
Este tipo puede representar nmeros muy grandes o
muy pequeos (positivos y negativos).
La precisin depende de cuntos 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].

Andrs Hernndez Balderas - 2015

30

4.6.1 Tipos de datos simples (char, int,


float, double)
double
Es posible que la precisin proporcionada por float no
sea suficiente y ser necesario utilizar el tipo double.
Es comn que este tipo utilice 8 bytes en memoria, el
doble de una precisin simple, y que permita los
siguientes rangos de valores [-1.7E+308, -1.7E-308],
[0] y [1.7E-308, 1.7E+308]

Andrs Hernndez Balderas - 2015

31

4.6.1 Tipos de datos simples (char, int,


float, double)
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));

Andrs Hernndez Balderas - 2015

32

4.6.2 Modificadores (long, short, signed,


unsigned)
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 ms bytes, generalmente el doble.

short

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

signed

Indica que el nmero 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


podrn utilizar nmeros positivos. La ventaja de este modificador es
que se podr representar el doble de cantidad de nmeros ya se
hace uso del bit que originalmente estaba destinado al signo.
Andrs Hernndez Balderas - 2015

33

4.6.2 Modificadores (long, short, signed,


unsigned)
Con la incorporacin de estos modificadores, que no aplican en
todos los casos, la cantidad de bytes utilizados y los rangos de
nmeros que se pueden representar se resumen en:
Tipo
signed char / char
unsigned char
signed int / int
unsigned int
signed short int / short int
unsigned short int
signed long int / long int
unsigned long int
float

Bytes

1
1
4
4
2
2
4
4
4

double

long double

16

Rango de valores

[-128, 127]
[0, 255]
[-2,147,483,647, 2,147,483,648]
[0, 4,294,967,295]
[-32,768, 3,2767]
[0, 65,535]
[-2,147,483,647, 2,147,483,648]
[0, 4,294,967,295]
[-3.4E+38, -3.4E-38], [0 ],
[3.4E-38, 3.4E+38]
[-1.7E+308, -1.7E-308], [0] ,
[1.7E-308, 1.7E+308]
[-3.4E-4932, -1.1E+4932], [0 ],
[3.4E-4932, 1.1E+4932]
Andrs Hernndez Balderas - 2015

34

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
1. Operadores
Un operador es un smbolo que acta sobre
variables y constantes para realizar una
operacin.
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.

Andrs Hernndez Balderas - 2015

35

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Operadores de asignacin
Operador
=

Significado
Asigna el resultado de una
expresin a una variable.

La funcin de este operador es la de guardar, en el espacio reservado a una


variable, el resultado de una operacin, el valor de una variable o de una
constante.
variable = expresin
Es importante respetar el orden de los operandos. En el lado izquierdo se
coloca la variable que guardar el resultado de la expresin de la derecha.
A continuacin algunos ejemplos:
suma = valor1 + valor2;
a = 2;
b = x;
Andrs Hernndez Balderas - 2015

36

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Operadores aritmticos
Operador
+
*
/
%

Significado
Suma
Resta
Multiplicacin
Divisin
Residuo de la divisin

Ejemplos:
resultado = dato1 + datos2;
resultado = valor numero1;
resultado = 5 * radio;
promedio = (dato1 + dato2) / 2;
residuo = 25 % 5;
Andrs Hernndez Balderas - 2015

37

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Operadores incrementales
Operador
++
--

Significado
Incrementa en uno a la variable sobre
la que opera.
Decrementa en uno a la variable sobre
la que opera.

Pueden colocarse antes o despus de la variable. Si est antes, entonces el


valor de la variable se modificar antes de que sea utilizada en una
expresin. Por el contrario, si est despus, el valor ser modificado
despus de que la variable sea utilizada. A continuacin 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 despus, entonces d tendr el valor de 2
Andrs Hernndez Balderas - 2015

38

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Operadores relacionales
Operador
==
<
>
<=
>=
!=

Significado
Igual a
Menor que
Mayor que
Menor o igual que
Mayor o igual que
Diferente a

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
Andrs Hernndez Balderas - 2015

39

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Operadores lgicos
Operador
&&
||
!

Significado
Y
O
Negacin lgica

Se utilizan, junto con los operadores relacionales, para


formar expresiones lgicas de mayor complejidad que son
ciertas o falsas.

Andrs Hernndez Balderas - 2015

40

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
El operador && requiere dos operandos con valores
lgicos y proporciona los siguientes resultados:
Operando A
verdadero
verdadero
falso
falso

Operando B
verdadero
falso
verdadero
falso

Andrs Hernndez Balderas - 2015

A && B
verdadero
falso
falso
falso

41

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
El operador || tambin requiere de dos operandos y
proporciona los siguientes resultados:
Operando A

Operando B

A || B

verdadero

verdadero

verdadero

verdadero

falso

verdadero

falso

verdadero

verdadero

falso

falso

falso

Andrs Hernndez Balderas - 2015

42

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
El operador ! es unario y tiene como funcin el
negar un valor lgico. Los resultados que genera son
los siguientes:
Operando A

!A

verdadero

falso

falso

verdadero

Andrs Hernndez Balderas - 2015

43

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Ejemplos que hacen uso de los operadores lgicos, y relacionales:
(5 > 3) && (2 == 2) // el primer parntesis da un valor verdadero, el
segundo tambin. 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
parntesis es un falso. Consultando la tabla del
operador || se ve que verdadero O falso es un
verdadero.
!(2 > 3)
// el resultado del parntesis 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 numrico 0, mientras que el valor verdadero se puede representar
con cualquier valor diferente a 0
Andrs Hernndez Balderas - 2015

44

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Otros Operadores
Operador

Significado
Operador unario que cambia el signo del valor del operando. No
confundir con el operador aritmtico 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 aritmtico de la suma.

sizeof
+=
-=
*=
/=

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


como parmetro.
Es una simplificacin de la expresin
variable = variable + expresin
Es una simplificacin de la expresin
variable = variable - expresin
Es una simplificacin de la expresin
variable = variable * expresin
Es una simplificacin de la expresin
variable = variable / expresin
Andrs Hernndez Balderas - 2015

45

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Ejemplos:
a = 7;
b = -a;
c = +b;
Tamano = sizeof (float)

// b toma el valor de 7 negativo.


// en este caso el operador unario + no tiene ningn efecto por lo que c
tambin tendr un valor 7 negativo.
// 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
Andrs Hernndez Balderas - 2015

46

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
2. Expresiones
Una expresin es la combinacin de variables,
constantes y operadores que da como resultado
un valor que puede ser numrico o lgico.
Pueden considerarse dos tipos de expresiones:
aritmticas y lgicas, aunque no hay una
restriccin para combinar ambas.

Andrs Hernndez Balderas - 2015

47

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Aritmticas
Como su nombre lo dice, es una expresin que
combina operadores aritmticos y tiene como
resultado un valor numrico.
Por ejemplo:
resultado = -5 + 3 * 8 / 3 * 23.676543 1;
operacion = a + b % 4 * 25;

Andrs Hernndez Balderas - 2015

48

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Lgicas
Estas expresiones hacen uso de los operadores
lgicos y relacionales para generar resultados que
tambin son lgicos.
Por ejemplo:
es_cierto = 25 || promedio && 34 <= maximo;
mayor_edad = edad >= 18;

Andrs Hernndez Balderas - 2015

49

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
3. Orden de precedencia
Es natural que en las expresiones haya confusin
sobre cmo 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
parntesis, para indicar el orden de las
operaciones.

Andrs Hernndez Balderas - 2015

50

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Los siguientes ejemplos hacen uso de las mismas variables,
constantes y operadores, pero los parntesis generan diferentes
expresiones con diferentes resultados ya que siempre se
ejecutarn primero las operaciones entre parntesis.
resultado = (1 + 2) * (12 / 4) // el primer parntesis tiene el valor de
3, el segundo tambin 3. Por lo tanto, el
resultado completo es 9
resultado = 1 + (2 * 12) / 4 // el resultado del parntesis es 24 por
lo que la expresin se reducira a 1 + 24 /
12. Ahora surge la pregunta qu se hace
primero, la suma o la divisin?
Andrs Hernndez Balderas - 2015

51

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
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 aplicacin.
A continuacin se presenta la tabla de
precedencias del lenguaje C.
La tabla tambin indica las reglas de
asociatividad, o sea, el orden de aplicacin para
para los operadores con la misma precedencia.
Andrs Hernndez Balderas - 2015

52

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Precedencia

Operadores

Asociatividad

()

izquierda a derecha

++ --- ! sizeof
+ (unario) - (unario)

derecha a izquierda

4
5

<

<=

>

==

!=

izquierda a derecha

izquierda a derecha
>=

izquierda a derecha
izquierda a derecha

&&

izquierda a derecha

||

izquierda a derecha

+=

-=

*=

/=

Andrs Hernndez Balderas - 2015

derecha a izquierda
53

4.6.3 Operadores y expresiones


aritmticas, relacionales y lgicas
Ejemplos:
resultado = (1 + 2) * (12 / 4)
// el primer parntesis tiene
el valor de 3, el segundo tambin 3. Por lo tanto, el
resultado completo es 9
resultado = 1 + (2 * 12) / 4 // el resultado del parntesis es 24
por lo que la expresin se reducira a 1 + 24 / 4. Dado que
primero se aplica la divisin y luego la suma el resultado
completo sera 7.
resultado = 1 + 2 * 1 / 4
//La multiplicacin y la divisin se
aplican antes de la suma y la resta. La regla de
asociatividad indica que se aplican de izquierda a derecha.
La expresin se reduce a 1 + 2 / 4. Despus de aplicar la
divisin 1 + 0.5. Al final el resultado total ser de 1.5.
Andrs Hernndez Balderas - 2015

54

4.7 Entrada y salida estndar 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 parmetros necesarios que requiere la
cadena
Ejemplos:
printf(El sueldo mximo es %f,SueldoMensual);
printf(Articulos=%d,Precio= %f, iVA=%f, arti,precio,iva);
Andrs Hernndez Balderas - 2015

55

4.7 Entrada y salida estndar 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 almacenarn los valores ledos (&variable)
Ejemplos:
scanf(%f, &SueldoMensual);
scanf(%d, &arti);
Andrs Hernndez Balderas - 2015

56

4.8 Tipos de almacenamiento (auto,


extern, register, static)
La declaracin 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
Andrs Hernndez Balderas - 2015

57

4.8 Tipos de almacenamiento (auto,


extern, register, static)
auto
Variables locales a una funcin 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 funcin o cuando se
ejecuta el cdigo dentro del bloque.
Se destruye cuando acaba la funcin o bloque.
Si no se especifica una clase al declarar una
variable, sta siempre es automtica.
Andrs Hernndez Balderas - 2015

58

4.8 Tipos de almacenamiento (auto,


extern, register, static)
auto
int main()
{
auto int edad;
int estatura;

Andrs Hernndez Balderas - 2015

59

4.8 Tipos de almacenamiento (auto,


extern, register, static)
extern
Almacenamiento permanente durante la ejecucin.
Las funciones y bloques declarados despus de ella podrn
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 definicin de variable externa que aparece
en la funcin.
Andrs Hernndez Balderas - 2015

60

4.8 Tipos de almacenamiento (auto,


extern, register, static)
extern
int VariableGlobal; // definicin
int FuncionA (); // declaracin externa implcita

Archivo 1

int main() {
VariableGlobal= 1;
FuncionA();
return 0;
}
extern int VariableGlobal; // declaracin externa

Archivo 2

int FuncionA () {
++VariableGlobal;
}
Andrs Hernndez Balderas - 2015

61

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
automticas y , por tanto, locales a una funcin.
Slo se puede utilizar la clase registro con los
tipos entero y carcter. Se suele usar para
contadores.
No siempre se pueden usar los registros CPU .
Andrs Hernndez Balderas - 2015

62

4.8 Tipos de almacenamiento (auto,


extern, register, static)
register
Int funcionA( register int p1)
{
register int x;

Andrs Hernndez Balderas - 2015

63

4.8 Tipos de almacenamiento (auto,


extern, register, static)
static
Existen desde el comienzo hasta el final de la
ejecucin del programa.
Puede ser global a todo el programa o local a
una sola funcin.
Todas las variables globales son estticas.
Una variable local a una funcin y de clase
esttica, conserva su valor de una llamada a otra.
Andrs Hernndez Balderas - 2015

64

4.8 Tipos de almacenamiento (auto,


extern, register, static)
register
int main()
{
register cont;
for(cont=1;cont <= 3; cont++) {
printf("Iteracin %d\t", cont);
incrementa();
}
}
int incrementa(){
static int a=1;
int b=1;
printf("a=%d b=%d\n", a,b);
a++;
b++;
}
Andrs Hernndez Balderas - 2015

65

4.9 Estructuras de control selectivas


El lenguaje C dispone de varias sentencias para
modificar el flujo secuencial de la ejecucin (las
bifurcaciones), que permiten elegir entre dos o
ms opciones segn ciertas condiciones.

Andrs Hernndez Balderas - 2015

66

4.9 Estructuras de control selectivas


Operador condicional
Sintaxis:
expresion_1 ? expresion_2 : expresion_3;
Se evala 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);
Andrs Hernndez Balderas - 2015

67

4.9 Estructuras de control selectivas


Sentencia if
Sintaxis:
if (expresion)
{
sentencias;
}
Se evala expresion. Si el resultado es verdadero, se
ejecutan sentencias. Si es falso, no se hace nada.
Ejemplos:
if(estatura>180 && sexo==h)
categoria=2;
Andrs Hernndez Balderas - 2015

68

4.9 Estructuras de control selectivas


Sentencia ifelse
Sintaxis:
if (expresion)
{
sentencias_1;
}
else
{
sentencias_2;
}
Se evala 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;
Andrs Hernndez Balderas - 2015

69

4.9 Estructuras de control selectivas


Sentencia ifelse mltiple
Sintaxis:
if (expresion_1)
sentencias_1;
else if (expresion_2)
sentencias_2;
else if (expresion_3)
sentencias_3;
else if (...)
...
[else
sentencias_n;]
Andrs Hernndez Balderas - 2015

70

4.9 Estructuras de control selectivas


Sentencia ifelse mltiple
Se evala expresion_1. Si verdadero, se ejecuta
sentencias_1; si es falso, se evala expresion_2. Si
el resultado es verdadero, se ejecuta sentencias_2;
si es falso se evala expresion_3 y as
sucesivamente.
Si ninguna de las expresiones o condiciones es
verdadera se ejecuta sentencias_n que es la
opcin por defecto (puede ser vaca)
Todas las sentencias pueden ser simples o
compuestas.
Andrs Hernndez Balderas - 2015

71

4.9 Estructuras de control selectivas


Sentencia ifelse mltiple
Ejemplo:
if (edad<18)
precio=40;
else if (edad<30)
precio=50;
else if (edad<60)
precio=55;
else
precio=30;
Andrs Hernndez Balderas - 2015

72

4.9 Estructuras de control selectivas


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;]
Andrs Hernndez Balderas - 2015
}

73

4.9 Estructuras de control selectivas


Sentencia switch
Se evala expresion y se considera el resultado de dicha evaluacin. 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 estn a
continuacin 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
continuacin de default.
Si se desea ejecutar nicamente una sentencia_i (y no todo un conjunto
de ellas), basta poner una sentencia break a continuacin. El efecto de la
sentencia break es dar por terminada la ejecucin de la sentencia switch.
Existe tambin la posibilidad de ejecutar la misma sentencia_i para varios
valores del resultado de expresion, poniendo varios case expresion_cte
seguidos.
Andrs Hernndez Balderas - 2015

74

4.9 Estructuras de control selectivas


Sentencia switch
Ejemplo:
switch (categoria) {
case 1:
hora_salida=6;
break;
case 2: case 3:
hora_salida=7;
break;
default:
hora_salida=8;
}
Andrs Hernndez Balderas - 2015

75

4.10 Estructuras de control repetitivas


En el lenguaje C existen varias sentencias que
permiten repetir una serie de veces la ejecucin
de unas lneas de cdigo.
Esta repeticin se realiza, o un nmero
determinado de veces, o hasta que se cumpla
una determinada condicin de tipo lgico o
aritmtico.
De modo genrico, a estas sentencias se les
denomina bucles.
Andrs Hernndez Balderas - 2015

76

4.10 Estructuras de control repetitivas


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++;
Andrs Hernndez Balderas - 2015

77

4.10 Estructuras de control repetitivas


Sentencia for
Sintaxis:
for (inicializacion; expresion_control; actualizacion)
sentencias;
Antes de iniciarse el bucle se ejecuta inicializacion, que es
una o ms sentencias que asignan valores iniciales a ciertas
variables o contadores.
A continuacin se evala expresion_control y si es falsa se
prosigue en la sentencia siguiente a la construccin 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.
Andrs Hernndez Balderas - 2015
78

4.10 Estructuras de control repetitivas


Sentencia for
Ejemplo:
for(numero=1;numero<=100;numero++)
{
printf(\nEl nmero es: %d,numero);
suma=suma+numero;
}

Andrs Hernndez Balderas - 2015

79

4.10 Estructuras de control repetitivas


Sentencia dowhile
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;
80
}while(contador<=100) Andrs Hernndez Balderas - 2015

4.11 Funciones
Una funcin es una parte de cdigo
independiente del programa principal y de otras
funciones.
Puede ser llamada envindole datos
(parmetros) o nada.
Realiza una determinada tarea y/o proporciona
resultados.
Son esenciales para cumplir con la modularidad.
Andrs Hernndez Balderas - 2015

81

4.11 Funciones
Definicin:
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


funcin (si no devuelve nada el tipo puede ser void)
argumentos_formales: datos de entrada requeridos
variables_locales: variables necesarias en la funcin
codigo: actividades o clculos
expresion: valor que devuelve la funcin
Andrs Hernndez Balderas - 2015

82

4.11 Funciones
Ejemplo:
double ValorAbsoluto(double x)
{
if (x < 0.0)
return -x;
else
return x;
}
Andrs Hernndez Balderas - 2015

83

4.11 Funciones
As como es necesario declarar todas las variables,
tambin las funcin debe ser declarada antes de ser
utilizada en la funcin o programa que realiza la
llamada.
Mediante una definicin previa de la funcin. Esta
prctica es segura si la definicin precede a la
llamada, pero causa problemas si la definicin se
cambia de lugar.
Mediante una declaracin explcita, previa a la
llamada. Esta es la prctica ms. La declaracin de la
funcin se hace mediante el prototipo de la funcin.
tipo_valor_retorno nombre(lista de tipos de argumentos);
Andrs Hernndez Balderas - 2015

84

4.11 Funciones
Definicin previa de la funcin.
int funcionB()
{
return 1;
}
int funcionA()
{
return funcionB()+1;
}
int main()
{
int a;
a=funcionA();
printf("a=%d",a);
getch();
}
Andrs Hernndez Balderas - 2015

85

4.11 Funciones
Declaracin explcita, 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;
}
Andrs Hernndez Balderas - 2015

86

4.11 Funciones
Paso de argumentos por valor y por referencia
El paso de argumentos por valor indica que a la
funcin se le pasa una copia como argumento
por lo que el valor original no ser alterado.
El paso de argumento por referencia pasa como
parmetro la direccin de memoria as que el
valor original puede sufrir cambios

Andrs Hernndez Balderas - 2015

87

4.11 Funciones
Paso de argumentos por valor (copia de las variables)
Si se desea intercambiar dos valores
x
1.0

y
2.0

&x

&y

a
1.0

b
2.0

&a

&b

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(despus: a = %f, b = %f\n", a, b);
}

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


Andrs Hernndez Balderas - 2015

88

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

a
1.0

b
2.0

&a,*x

&b,*y

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(despus: a = %f, b = %f\n", a, b);
}

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


Andrs Hernndez Balderas - 2015

89

4.11 Funciones
Recursividad
Se dice que una funcin es recursiva cuando se
define en trminos de ella misma.
Debe estar diseada especialmente para
comportarse de manera recursiva, de otro modo
podran conducir a bucles infinitos, o a que el
programa termine de forma no adecuada.

Andrs Hernndez Balderas - 2015

90

4.11 Funciones
Recursividad
El ejemplo clsico es el del clculo del factorial.
x! = (1)(2)(3)(x-2)(x-1)(x)
El factorial de x es igual a la multiplicacin de
todos los enteros menores o iguales a l.
Por definicin, el factorial de 0 es 1.
No hay factoriales de nmeros negativos.

Andrs Hernndez Balderas - 2015

91

4.11 Funciones
Recursividad
El clculo del factorial se puede ver tambin
como:
x! = (1)(2)(3)(x-2)(x-1)(x)
(x-1)!

Por lo tanto
x! = (x-1)!(x)
Esta definicin est planteada de una forma
recursiva: el factorial est definido en trminos
de s mismo.
Andrs Hernndez Balderas - 2015

92

4.11 Funciones
Recursividad
De manera natural, la funcin en C sera:
int factorial( int x )
{
return factorial( x-1 )*x;
}

El problema es que esta funcin genera un bucle


infinito. Es necesario establecer una condicin de
salida. Por lo general, esta condicin est dada
por un valor conocido de la funcin.
Andrs Hernndez Balderas - 2015

93

4.11 Funciones
Recursividad
Incluyendo una condicin de salida, la funcin en
C sera:
int factorial( int x )
{
if(x==0)
return 1; //Se sabe que 0!=1
else
return factorial( x-1 )*x;
}
Andrs Hernndez Balderas - 2015

94

4.11 Funciones
Recursividad
Para 3!, la ejecucin de la funcin se vera as:

3! = (2!)*3

= (2)*3 = 6

2! = (1!)*2
= (1)*2 = 2

1! = (0!)*1

0! = 1

= (1)*1 = 1

Para cada resultado que se queda pendiente se crean


variables locales. Por lo general, una funcin recursiva
consume mucha memoria.
Andrs Hernndez Balderas - 2015

95

4.12 Arreglos unidimensionales y


multidimensionales
Supngase 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 calificacin. Entonces, si se deseara el
promedio de 100 calificaciones se tendran que
utilizar 100 variables.
Andrs Hernndez Balderas - 2015

96

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 subndice (su posicin iniciando en
la 0).
Andrs Hernndez Balderas - 2015

97

4.12 Arreglos unidimensionales y


multidimensionales
Un arreglo puede tener ms de una dimensin.
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];
Andrs Hernndez Balderas - 2015

98

4.12 Arreglos unidimensionales y


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

Estaturas

145

181

165

167

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
posicin 2

Andrs Hernndez Balderas - 2015

99

4.12 Arreglos unidimensionales y


multidimensionales
En general, un arreglo de declara as:
tipo nombre[tamao1][tamao2][tamaoN]={inicializacin};

Ejemplos:
int A[4]={2,4,1,5};
float VectorR[1000];
int Matriz[3][2]={{7, 2}, {9, 4}, {2, 8}};

Andrs Hernndez Balderas - 2015

100

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;
}
Andrs Hernndez Balderas -

2015

101

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
ejecucin del programa.
El programa no verifica el tamao de las
dimensiones por lo que pueden ocurrir errores si se
trata de usar posiciones no existentes.
En las funciones, el paso de parmetro siempre es
por REFERENCIA. A pesar de esto, no es necesario el
uso de & en los parmetros actuales, slo se usar el
nombre del arreglo (el nombre es un apuntador al
conjunto de variables).
Andrs Hernndez Balderas - 2015

102

4.13 Cadenas de caracteres (concatenacin,


comparacin, 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 tamao debe considerar
un espacio ms para el caracter nulo \0 que
marca el fin de la cadena.
Andrs Hernndez Balderas - 2015

103

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)
char nombre[10]=Jos;
0

\0

Entonces, si se desea guardar una cadena de N


caracteres, se tiene que utilizar un arreglo de al
menos N+1 espacios.
Los espacios despus de \0 se ignoran en las
siguientes funciones (string.h).
Andrs Hernndez Balderas - 2015

104

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin printf
Sintaxis:
printf(%s,cadena);
El modificador %s indica que se trata de una
cadena de caracteres
Ejemplos:
char nombre[30]=Juan Prez;
printf(Tu nombre es %s. Bienvenido., nombre);
Andrs Hernndez Balderas - 2015

105

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin scanf
Sintaxis:
scanf(%s,cadena);
Esta funcin 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 direccin de memoria.
Ejemplos:
scanf ("%s", ApellidoPaterno);
Andrs Hernndez Balderas - 2015

106

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)
Funcin scanf
Hay que tener precaucin 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
Andrs Hernndez Balderas - 2015

107

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin gets
Sintaxis:
gets(cadena);
Esta funcin se usa si se va a leer una FRASE.
Ejemplos:
char NombreCompleto[100];
gets (NombreCompleto);

Andrs Hernndez Balderas - 2015

108

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin strcpy
Sintaxis:
strcpy(CadenaDestino,CadenaOrigen);
Copia el contenido de CadenaOrigen en
CadenaDestino (El destino debe tener espacio
suficiente).
Ejemplos:
char Nombre[30]=Juan Prez, NombreCopia[30];
strcpy(NombreCopia, Nombre);
Andrs Hernndez Balderas - 2015

109

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin strcpy
char Nombre[30];
Nombre=Juan Prez //Incorrecto. Error.
strcpy(Nombre,Juan Prez); //Asignacin correcta

Andrs Hernndez Balderas - 2015

110

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin strlen
Sintaxis:
strlen(Cadena);
Determina la longitud de una cadena.
Ejemplos:
char Nombre[50]=Juan Prez,
int Longitud;
Longitud=strlen(Nombre); //Longitud=10
Andrs Hernndez Balderas - 2015

111

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin 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]= Prez;
strcat(Nombre,Apellido); //Nombre=JuanPrez
Andrs Hernndez Balderas - 2015

112

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin sprintf
Sintaxis:
sprintf(CadenaDestino, cadena formato,valores);
Funciona idntico a printf con la diferencia de que
la salida la enva 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
Andrs Hernndez Balderas - 2015

113

4.13 Cadenas de caracteres (concatenacin,


comparacin, copia, etc.)

Funcin 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
Andrs Hernndez Balderas - 2015

114

S-ar putea să vă placă și