Professional Documents
Culture Documents
Conceptos bsicos
Profesor: Dr. Wilfrido Gmez Flores
Lenguaje C
C es un lenguaje de programacin creado en 1972 por Dennis M.
Ritchie en los Laboratorios Bell como evolucin del anterior
lenguaje B.
Es un lenguaje de nivel medio ya que dispone de las estructuras
tpicas de los lenguajes de alto nivel as como de construcciones
del lenguaje que permiten un control a muy bajo nivel.
Cualquier programa escrito slo en C estndar sin cdigo
dependiente de un hardware determinado funciona correctamente
en cualquier plataforma que disponga de una implementacin de C
compatible.
Caractersticas de C
Un ncleo del lenguaje simple de propsito general que opera con
bibliotecas (e.g., operaciones de entrada/salida).
Lenguaje flexible que soporta la programacin estructurada.
Separacin de programas en mdulos.
Acceso a memoria de bajo nivel mediante el uso de punteros.
Conjunto reducido de palabras clave: sentencias de control
sencillas y funciones.
Sin una programacin mtodica puede ser propenso a errores
difciles de encontrar.
Primer programa en C
/* PRIMER PROGRAMA EN C */
#include <stdio.h>
Cuerpo de la funcin
int main()
{
Comentario
Salto de lnea
Terminado de sentencia
Siempre se espera que la funcin devuelva un valor.
En este caso el valor 0 se interpreta que no hubo error.
Segundo programa en C
/* LEE DOS ENTEROS Y LOS SUMA*/
#include <stdio.h>
int main ()
{
int num1, num2, suma;
printf("Ingrese el primer numero: ");
scanf("%d", &num1);
printf("Ingrese el segundo numero: ");
scanf("%d", &num2);
suma = num1 + num2;
printf("La suma es %d \n", suma);
}
return 0;
Crear un programa C
Escribir el programa en un editor de texto y guardarlo en un
archivo con extensin .c
En GNU/Linux se compila desde la Terminal como:
gcc programa.c -o programa
y se ejecuta desde la Terminal como:
./programa
Elementos de un programa C
Bsicamente el lenguaje C est compuesto por los siguientes
elementos:
Comentarios
Identificadores
Palabras reservadas
Operadores
7
Comentarios
Sirven para incrementar la legibilidad de los programas.
No se pueden anidar. Dentro de un comentario no puede aparecer
el smbolo /*.
Hay dos formas de escribir comentarios:
1./* Este es un comentario que
ocupa ms de una lnea */
2.// Este comentario ocupa una sola lnea
Identificador
Un identificador es el nombre que se le asigna a los distintos
elementos del programa (variables, funciones, etc.).
Debe comenzar con una letra del alfabeto y el resto puede ser
cualquier letra del alfabeto, cualquier dgito numrico o guin bajo,
por ejemplo: numero, area_circulo, A, valor_1
El lenguaje C hace distincin entre maysculas y minsculas, por
ejemplo, VARIABLE, Variable y variable son todos
distintos.
Los identificadores pueden tener hasta 255 caracteres de longitud.
La legibilidad de un programa aumenta al utilizar identificadores
descriptivos.
9
Palabras reservadas
El lenguaje C reserva algunas palabras que no pueden ser utilizadas
ms que para su debido propsito.
do
if
struct
auto
double
int
switch
break
else
long
typedef
case
enum
register
union
char
extern
return
unsigned
const
float
short
void
continue
for
sizeof
volatile
default
goto
static
while
10
Archivos de cabecera
11
Tipos de datos
Tipo
Formato
Tamao en
bytes
Sin valor
void
Caracter
char
-128
127
%c
Entero
int
-32768
32767
%d
-3.41038
3.41038
%f
-1.710308
1.710308
%lf
Punto flotante
float
(simple precisin)
Punto flotante
double
(doble precisin)
12
Tipos de datos
Modificador
unsigned
char
signed
short
int
long
float
double
long
unsigned
signed
unsigned
signed
Rango*
Especificador Tamao en
de formato
bytes
Mnimo
Mximo
255
%c
-128
127
%c
65535
%u
-32768
32767
%d
4294967295
%lu
-2147483648 -2147483647
%ld
-3.41038
3.41038
%f
-1.710308
1.710308
%lf
-1.7104932
1.7104932
%Lf
*Los tamaos y rangos de int, short y long dependen del tipo de compilador. En cualquier caso, mediante el operador
sizeof(tipo de dato) se podr determinar el nmero de bytes ocupados.
13
Tipos de datos
/* MUESTRA EN PANTALLA EL TAMANO EN BYTES DE LOS TIPOS DE DATOS EXISTENTES EN C*/
#include <stdio.h>
int main()
{
printf("\n
printf("\n
printf("\n
printf("\n
return 0;
}
Tamano
Tamano
Tamano
Tamano
en
en
en
en
bytes
bytes
bytes
bytes
de
de
de
de
un
un
un
un
14
Declaracin de variables
int a;
unsigned int b;
long int c;
short int d;
unsigned short int e;
unsigned long int f;
char g;
unsigned char f;
float g;
double h;
15
Declaracin de variables
// PROGRAMA QUE SUMA DOS NUMEROS DE TIPO ENTERO
#include <stdio.h>
int main ()
{
int valor_1 = 5, valor_2 = 7, suma;
suma = valor_1 + valor_2;
printf("%d + %d = %d \n", valor_1, valor_2, suma);
}
return 0;
16
Constantes simblicas
Se definen constantes simblicas para evitar el uso de valores
constantes dentro del cdigo.
Se declaran antes de la funcin main utilizando la directriz
#define.
El tipo de una constante es el tipo de valor asignado.
Suelen escribirse el nombre de la constante en maysculas.
No se usa punto y coma despus de la declaracin.
#define
#define
#define
#define
#define
PI 3.141593
DIAS_SEMANA 7
CIERTO 1
FALSO 0
MENSAJE "Pulse una tecla para continuar"
17
Constantes simblicas
Valores enteros:
Notacin decimal: 987
Notacin hexadecimal: 0x25 0X25
Notacin octal: 034
Enteros sin signo: 485U
Valores reales:
Ejemplos: 12, 14.8, .34
Notacin exponencial: .2e+9, 1.04E-12
Valores negativos: -12, -2e+9
18
Constantes simblicas
// PROGRAMA QUE LEE EL RADIO DE UN CIRCULO Y CALCULA SU AREA
#include <stdio.h>
#define PI 3.141593
int main()
{
float radio;
float area;
printf("Introduzca el radio: ");
scanf("%f",&radio);
area = PI*radio*radio;
printf("El area del circulo es %.4f\n",area);
return 0;
}
19
Operadores
Los operadores son smbolos que indican la realizacin de
determinadas operaciones matemticas, lgicas y numricas.
Se aplican a variables u otros objetos denominados operandos.
Pueden ser unarios, binarios o ternarios.
Tipos de operadores
Operadores de asignacin
Operadores unitarios
Operadores aritmticos
Operadores lgicos
Operadores relacionales
Operador condicional
20
Operadores de asignacin
Probablemente el operador ms importante sea el de asignacin:
identificador=expresin;
Ejemplos: a=3; area=lado*lado;
Se pueden realizar asignaciones mltiples y se asignan de derecha a
izquierda, por ejemplo, en i=j=5 a j se le asigna 5 y a i se le
asigna el valor de j.
Si los dos operandos en una sentencia de asignacin son de tipos
distintos, entonces el operando de la derecha ser automticamente
convertido al tipo del operando de la izquierda.
Es importante utilizar de forma correcta la conversin de tipos.
21
Operadores de asignacin
Conversin de tipos: (tipo de dato) expresin
int x;
float y;
x = 5;
y = x/2;
int x;
float y;
x = 5;
y = (float)x/2;
int x;
float y;
x = 5;
y = (float)(x/2);
22
Operadores de asignacin
Existen diferentes operadores de asignacin:
Operador
x=y
Descripcin
Asignacin
Equivalente
x=y
x+=y
Suma y asignacin
x=x+y
x-=y
Resta y asignacin
x=x-y
x*=y
Multiplicacin y asignacin
x=x*y
x/=y
Divisin y asignacin
x=x/y
x%=y
Mdulo y asignacin
x=x%y
23
Operadores unitarios
Son operadores unarios de incremento (++) y decremento (--).
Si el operador est de prefijo, la operacin se efecta antes que la
operacin de asignacin.
Si el operador est de sufijo, la asignacin se efecta primero
seguido de la operacin.
Tipo
Sufijo
Prefijo
Expresin Equivalente
i++
i=i+1
i--
i=i-1
++i
i=i+1
--i
i=i-1
#include <stdio.h>
int main()
{
int n = 8;
printf("n++ =
printf("++n =
printf("n-- =
printf("--n =
return 0;
}
%d
%d
%d
%d
\n",
\n",
\n",
\n",
n++);
++n);
n--);
--n);
//
//
//
//
POSTINCREMENTO
PREINCREMENTO
POSTDECREMENTO
PREDECREMENTO
24
Operadores aritmticos
Operador
Operacin
Suma
Resta
Multiplicacin
Divisin
Mdulo
Descripcin
Ejemplo
5+2!7
5-2!3
5*2!10
5/2!2.5
5%2!1
25
Operadores lgicos
Actan sobre operandos que son a su vez expresiones lgicas que
se interpretan como:
VERDADERO, cualquier valor distinto de cero
Tabla de verdad
Tipo
Unario
Binario
Operador Operacin
!
NOT
&&
AND
||
OR
!a
a&&b a||b
26
Operadores relacionales
Se utilizan para formar expresiones lgicas.
El resultado es un valor entero que puede ser 1 para verdadero y
0 para falso.
Operador
>
>=
<
Operacin
Mayor que
Mayor o igual que
Menor que
<=
==
Igual que
!=
Diferente que
Ejemplo
a=1 y b=2
a>b!0
a>=b!0
a<b!1
(a+1)<=b!1
a==b!0
(a+b)!=3!0
27
Operador condicional
Es un operador ternario que se utiliza en expresiones
condicionales que tienen la siguiente forma:
operando1? operando2: operando3
La expresin del operando1 debe ser lgica. La ejecucin se
realiza de la siguiente manera:
Si el resultado de la evaluacin de operando1 es verdadero, el
resultado de la expresin condicional es operando2.
Si el resultado de la evaluacin de operando2 es falso, el
resultado de la expresin condicional es operando3.
28
Operador condicional
29
Precedencia y asociatividad
El resultado de una expresin depende del orden en el que se
evalen las operaciones.
3+4*2
*
+
3+4*2
+
*
3+(4*2)
(3+4)*2
Precedencia y asociatividad
Reglas de precedencia y asociatividad.
Nivel
Precedencia
Asociatividad
() [] -> .
izquierda a derecha
++ -- ! sizeof
derecha a izquierda
* / %
izquierda a derecha
+ -
izquierda a derecha
izquierda a derecha
== !=
izquierda a derecha
&&
izquierda a derecha
||
izquierda a derecha
?:
izquierda a derecha
10
= *= /= %= += -=
derecha a izquierda
31
printf("Hola mundo\n");
printf("Imprimir %c %d %f\n",'a',28,3.0e+8);
32
Numrico
Caracter
Puntero
%d
%i
%u
%o
%x
%X
%f
%e
%E
%g
%G
%c
%s
%%
%n
%p
Salida
(int) entero con signo base 10
(int) entero con signo base 10
(int) entero sin signo base 10
(int) entero sin signo base 8
(int) entero sin signo base 16 (0,1,,9,a,b,,f)
(int) entero sin signo base 16 (0,1,,9,A,B,,F)
(double) valor con signo de la forma [-]dddd.dddd
(double)valor con signo de la forma [-]d.dddde[]ddd
(double)valor con signo de la forma [-]d.ddddE[]ddd
(double)valor con signo en formato f e (el que sea ms compacto)
(double)igual que g, pero introduce E en vez de e
caracter simple
cadena de caracteres
imprime el caracter de porcentaje %
Usados para punteros
33
Descripcin
\n
\r
\t
\a
\b
\f
\v
Tabulacin vertical
\\
\"
\'
\?
35
num5;
num1);
num2);
num3);
num4);
num5);
36
Por ejemplo, %10.3d asegura que la longitud del ancho mnimo del
campo sea de 10 caracteres con 3 posiciones decimales.
// USO DE ESPECIFICADORES DE PRECISION
#include <stdio.h>
int main()
{
int num1;
double num2;
num1 = 123;
num2 = 123.456789;
printf("Formato de entero prederminado: %d\n",num1);
printf("Con especificador de precision: %2.8d\n",num1);
printf("Formato de punto flotante prederminado: %f\n",num2);
printf("Con especificador de precision: %-10.2f\n",num2);
return 0;
}
37
scanf("%f",&real);
scanf("%c\n",&caracter);
scanf("%f %d %c",&real,&entero,&caracter);
scanf("ld",&entero_largo);
38
return 0;
39
Funciones
Una funcin es un fragmento de cdigo que realiza una tarea bien
definida.
Las funciones permiten modularizar un programa. Se divide el
programa en componentes ms pequeos: reutilizacin.
Todas las variables declaradas en las definiciones de funcin son
variables locales.
Declaracin de una funcin:
tipo nombre_func(tipo1 arg1,...,tipoN argN)
{
/* CUERPO DE LA FUNCIN */
}
40
Funciones
Para llamar a una funcin se especifica su nombre y lista de
argumentos sin poner el tipo de dato:
nombre_func(var1,...,varN);
Argumentos formales: parmetros que aparecen en la deficin de
la funcin.
Argumentos reales: parmetros que aparecen en la llamada a la
funcin.
En una llamada habr un argumento real por cada argumento
formal, respetando el orden de la declaracin, y deben ser del
mismo tipo de dato que el argumento formal correspondiente.
Una funcin en C slo puede devolver un valor utilizando la
instruccin return expresion, y el valor de expresion
debe coincidir con el tipo de dato declarado en la funcin.
41
Funciones
Una funcin puede devolver mltiples valores haciendo llamadas
por referencia o utilizando estructuras.
Es conveniente incluir prototipos de funcin (antes de la funcin
main) que son utilizados por el compilador para la comprobacin
de errores entre las llamadas a una funcin y la definicin de la
funcin correspondiente:
tipo nombre_func(tipo1,...,tipoN);
No es necesario especificar nombres de parmetros en los
prototipos de funcin, pero se pueden especificar para mejorar la
comprensin del cdigo fuente.
Si no se incluyen los prototipos, las funciones deben estar
declaradas antes de la funcin main.
42
Funciones
// CALCULAR EL CUADRADO DE UN ENTERO
#include <stdio.h>
int cuadrado(int);
Prototipo de la funcin
int main()
Funcin principal
{
int a, b;
printf("Ingrese un numero entero: ");
scanf("%d", &a);
b = cuadrado(a);
Llamada a la funcin
printf("El cuadrado de %d es %d\n",a,b);
return 0;
}
int cuadrado(int x)
Declaracin de la
{
return x*x;
Regresa el resultado
}
funcin
43
Funciones
void mensaje(void)
{
printf("Este programa dice si un numero \n");
printf("es cuadrado perfecto \n");
printf("Introduzca un numero: ");
}
int es_cuadperf(int x)
{
int raiz;
raiz = (int) sqrt(x);
if (x==raiz*raiz)
return TRUE;
else
return FALSE;
}
44
Esto quiere decir que cuando el control pasa a la funcin, los valores de
los parmetros en la llamada se copian a variables locales de la funcin,
de modo que al regresar a la funcin main los parmetros conservan sus
valores originales.
Llamada a la funcin
a toma el valor de x
b toma el valor de 2*y
int main()
{
int x, y, max;
x = 2;
y = 4;
max = maximo(x,2*y);
.
.
}
Llamada a la funcin:
nombre_func(&arg1,...,&argN);
46
47
48
Estructuras selectivas
Las estructuras de seleccin (o bifurcacin) se utilizan para elegir
entre diversos cursos de accin.
En lenguaje C existen tres tipos de estructuras de seleccin:
Seleccin simple: if
if (expresion)
sentencia;
if (expresion)
{
sentencia1;
sentencia2;
..
sentenciaN;
}
50
Estructuras selectivas
Seleccin if-else:
if (expresion)
sentencia;
else
sentencia;
if (expresion)
{
sentencia1;
sentencia2;
..
sentenciaN;
}
else
{
sentencia1;
sentencia2;
..
sentenciaN;
}
51
Estructuras selectivas
if (expresion)
{
sentencia1;
sentencia2;
}
else if(expresion)
{
sentencia1;
sentencia2;
}
else
{
sentencia1;
sentencia2;
}
52
Estructuras selectivas
// INDICA SI UN NUMERO ES PAR O IMPAR
#include <stdio.h>
int main()
{
int n;
printf("Introduzca un numero: ");
scanf("%d",&n);
if ((n%2)==0)
printf("El numero %d es par.\n",n);
else
printf("El numero %d es impar.\n",n);
return 0;
}
53
Estructuras selectivas
Seleccin switch-case:
switch (expresion)
{
case 1: sentencias;
break;
case 2: sentencias;
break;
...
case N: sentencias;
break;
default: sentencias;
break;
}
54
Estructuras iterativas
Las estructuras iterativas permiten repetir una serie de veces la
ejecucin de unas lneas de cdigo.
Las iteraciones se realizan durante un nmero determinado de
veces o hasta que se cumpla una determinada condicin de tipo
lgico o aritmtico.
Se pueden anidar, aunque hay que estructurarlos de forma correcta.
En lenguaje C existen tres tipos de estructuras iterativas: for,
while, y do-while.
La sentencia for permite definir ciclos controlados por contador:
for(inicializacion;condicion;incremento)
{
sentencias;
}
55
Estructuras iterativas
Inicializacin: se inicializa algn parmetro que controla la
repeticin del ciclo.
Condicin: es una condicin que debe ser cierta para que se
ejecuten las sentencias.
Incremento: se utiliza para modificar el valor del parmetro.
// PROGRAMA QUE IMPRIME 100 NUMEROS
#include <stdio.h>
int main()
{
int n;
for (n=0;n<100;n++)
printf("%3d\n",n);
return 0;
}
56
Estructuras iterativas
La sentencia while se ejecutar mientras el valor de
condicion sea verdadero (distinto de 0).
La condicion se evala primero.
Se debe incluir algn elemento que altere el valor de condicion,
proporcionando la condicin de salida del ciclo.
El ciclo puede ejecutarse 0 veces si la condicin no se cumple.
La sintaxis del ciclo while es:
while(condicion)
{
sentencias;
}
57
Estructuras iterativas
// LEE UN NUMERO N Y CALCULA 1+2+...+N
#include <stdio.h>
int main()
{
int N;
int suma = 0;
printf("Introduce un numero entero: ");
scanf("%d",&N);
while (N>0)
{
suma=suma+N;
N--;
}
printf("1 + 2 + ... + N = %d\n",suma);
return 0;
}
58
Estructuras iterativas
El ciclo do-while es
s i m i l a r a l c i c l o while
excepto que la condicin se
realiza al final del ciclo, esto
fuerza a que se ejecute el ciclo
por lo menos una vez.
La sintaxis del ciclo dowhile es:
do {
sentencias;
}while(condicion);
#include <stdio.h>
int main () {
int a = 2;
do {
printf("%d\n", a);
a++;
}while(a < 20);
return 0;
}
59
Sentencias de salto
En C hay sentencias para evitar la ejecucin estrictamente
secuencial del programa:
return: Se usa para devolver el control del flujo de ejecucin
desde una funcin.
break: Se usa para romper el flujo de un ciclo (for, while,
do-while).
continue: Se puede usar en un bloque iterativo (for,
while, do-while) para forzar una nueva iteracin del ciclo
ignorando las sentencias que estn a partir de continue y
hasta el fin del ciclo.
goto: Permite efectuar un salto incondicional hasta otro punto
del programa, indicado por una etiqueta (evitarlo ya que su uso
es considerado como un estilo de programacin pobre).
60
Manejo de archivos
Descripcin
Abre un archivo slo para lectura. Si el archivo no existe se devuelve un puntero nulo y se genera
un error.
Crea un archivo para escritura. Si ya existe un archivo con este nombre, se sobreescribe,
perdindose el contenido anterior.
Abre o crea un archivo para aadir. Si el archivo existe, se abre apuntando al final del mismo. Si no
existe se crea uno nuevo.
r+
Abre un archivo para leer y escribir. Si el archivo no existe se devuelve NULL y se genera un
error. Si existe, pueden realizarse sobre l operaciones de lectura y de escritura.
w+
Crea un nuevo archivo para leer y escribir. Si ya existe un archivo con este nombre, se
sobreescribe, perdindose el contenido anterior.
a+
Abre o crea un archivo para leer y aadir. Si el archivo existe, se abre apuntando al final del mismo.
Si no existe se crea uno nuevo.
62
63
64
66
67
Ejercicios
1. Un vendedor recibe un sueldo base ms un 15% extra por comisin de sus
ventas. El vendedor desea saber la cantidad de dinero obtendr por concepto
de comisiones por las tres ventas que realiz en el mes y el total que recibir
tomado en cuenta su sueldo base y comisiones.
2. Un alumno desea saber su calificacin final (en el rango 0 a 10) en la materia de
programacin. La calificacin final est compuesta de los siguientes
porcentajes: 55% del promedio de sus tres tareas, 30% de la calificacin del
examen final y 15% de la calificacin de un trabajo final.
3. Una persona invierte $1000.00 en una cuenta de ahorros con un 5% de inters.
Se asume que todo el inters se deja en depsito dentro de la cuenta. Calcule y
despliegue el monto acumulado de la cuenta al final de cada ao durante 10
aos. Tambin guardar en un archivo de texto esta informacin. Utilice la
siguiente frmula para determinar el monto anual:
a = p(1+r)n
donde p es el monto de la inversin original, r es la tasa de inters anual, n es el
nmero de aos y a es el monto del depsito al final del ao n.
68
Ejercicios
4. Crear un programa que lea un nmero entero y a partir de l genere un
cuadrado de asteriscos con ese tamao. Los asteriscos slo se vern en el borde
del cuadrado, no en el interior.
5. Realice un programa que simule el lanzamiento de un dado para un nmero
determinado de tiros y que cuente las veces que apareci cada cara del dado. Se
debe pedir el nmero de lanzamientos. Se debe mostrar en pantalla la
frecuencia con la que apareci cada cara del dado.
6. Un histograma es una representacin grfica de una variable en forma de
barras, donde el tamao de cada barra es proporcional a la frecuencia de los
valores representados. Realizar un programa que lea un archivo de texto en
donde estn almacenados 300 valores enteros positivos en el rango [1, 20] e
imprima en pantalla el histograma de frecuencias de los valores almacenados.
Tambin debe guardarse el resultado en un archivo de texto.
69