You are on page 1of 11

Estructura De Un Programa

Curso Introductorio Al
Lenguaje De Programacin
En C

1. Directivas del preprocesador


2. Definiciones de tipos de datos
3. Declaraciones de funciones.

Entre ellas el programa principal

Enteros

Variables
Objeto abstracto donde se almacena un valor.
Declaracin
1. Asociar un identificador
2. Reservar espacio en memoria
3. Opcionalmente, asignar un valor (inicializacin)

Tipo
int
unsigned int
short int
unsigned short int
long int

Sintaxis
A.

tipo_de_datos nombre_de_variable;

B.

tipo_de_datos nombre_de_variable, nombre_de_variable, ... ;

C.

tipo_de_datos nombre_de_variable = valor_inicial;

unsigned long int

Rango
[-32,768 , 32,767]
[0, 65,535]
[-32768, 32767]
[0, 65535]
[-2,147,483,648,
2,147,483,647]
[0, 4,294,967,295]

Tamao

Formato

16 bits
16 bits
16 bits
16 bits
32 bits

%d
%u
%d
%u
%ld

32 bits

%lu

Reales
Tipo

Rango

Caracter
Tamao

Formato

float

3.4 * (10**-38) a
3.4 * (10**+38)

4 bytes

%f,%e,%g

double

1.7 * (10**-308) a
1.7 * (10**+308)

8 bytes

%f,%e,%g

3.4 * (10**-4932) a
1.1 * (10**+4932)

16 bytes

long double

Operadores:
Dos
Operandos

0 <= X <= 255

1 byte
1 byte

-128 <= X <= 127

Expresiones Relacionales

Condiciones bsicas en sentencias condicionales e iterativas

variable=expresion
Un
Operando

unsigned char

Tamao

%f,%e,%g

Frmula matemtica que especifica un valor


Asignacin:

Rango

char

Expresiones Aritmticas

Tipo

Cambio de signo
Incremento
Decremento

++
--

Suma
Resta
Multiplicacin
Divisin
Mdulo

+
*
/
%

Forma pre-fija y post-fija de ++ y -- . Ejemplo:


z++;
x = ((++z) - (w--)) % 100;
x = (z - w) % 100;
w--;
Operacin y asignacin de forma compacta.
i = i + 5;
i += 5;
x = x * (y + 2);
x*=(y+2)

Menor que
Mayor que
Menor o igual que
Mayor o igual que
Igual que
Distinto que

<
>
<=
>=
==
!=

Operadores:

Resultado lgico:
falso cero
cierto distinto de cero
Ejemplos:
4 > 8 falso
3 <= 24 cierto
23 == 22 falso
4 != 5 cierto
No confundir asignacin (=) con comparacin (==)
x = 3 es tambin una expresin, no cero cierto

Expresiones Lgicas

Expresiones condicionales

Operadores:

Tabla de verdad

Conjuncin Y lgico
Disyuncin O lgico
Negacin NO lgico

&&
||
!

!A

A&&B

A||B

cierto
cierto
falso
falso

cierto
falso
cierto
falso

falso
falso
cierto
cierto

cierto
falso
falso
falso

cierto
cierto
cierto
falso

Ejemplos:
3 && 0
!(7 > 1)
(x < x - 8) || 1
(5 <= 0) || !(x > x -1)
2 && (4 > 9)
(8 == 4 * 2) && (5 > 2)

Prioridad De
Operadores

falso
falso
cierto
falso
falso
cierto

Ejercicios
1. Realizar un programa que obtenga el volumen de un
cubo.
2. Realizar un programa que obtenga el rea de una
circunferencia y el volumen de una esfera de la
misma longitud de radio.
3. Realizar un programa que obtenga el permetro de un
tringulo escaleno.
4. A partir de una cantidad en segundos, proporcionar a
cuantas horas, minutos y segundos es equivalente.

Operador
Parntesis
Negacin Lgica
Ms Unario
Menos Unario
Incremento
Decremento
Multiplicacin
Divisin
Mdulo
Suma
Resta
Menor que
Menor o igual que
Mayor que
Mayor o igual que
Igual a
Diferente a
Y lgico
O lgico
Asignacin

Smbolo
()
!
+
++
-*
/
%
+
<
<=
>
>=
==
!=
&&
||
= ,*=, /=, %=,
+= ,-=,&=, |=

Asociatividad
Izq. A Der.

Der. A Izq.

Izq. A Der.
Izq. A Der.

Izq. A Der.

Izq. A Der.
Izq. A Der

Der. A Izq.

Estructuras Condicionales
Estructuras:
A. if
B. Switch
En las expresiones relacionales:
a) Falso : valor 0
b) Cierto : cualquier valor distinto de 0

Instruccin if

Ejemplo if- else

if (condicin) {
grupo_de_sentencias_1;
}
else {
grupo_de_sentencias_2;
}

Ejemplos:
...
if (n > 0)
if (a > b)
z = a;
else
z = b;
...

Evalua la condicin (expresin entera)


Si la expresin o condicin es cierta, entonces se
ejecuta la primer sentencia o grupo de sentencias
Si la expresin es falsa, se ejecuta la sentencia o
grupo de sentencias despus del else, si es que
este fue definido.
En ambos casos se continua con la siguiente
instruccin en orden secuencial

switch ( expresin )
{
case constante_1:
{
grupo_de_sentencias_1;
break;
}
case constante_2:
{
grupo_de_sentencias_2;
break;
}
...
case constante_n:
{
grupo_de_sentencias_n;
break;
}
default:
{
grupo_de_sentencias_por_defecto;
break;
}
}

if (condicin_1) {
grupo_de_sentencias_1;
}
else if (condicin_2) {
grupo_de_sentencias_2;
}
...
else if (condicin_N) {
grupo_de_sentencias_N;
}
else {
grupo_de_sentencias_por_defecto;
}

Evaluacin secuencial de arriba hacia abajo


Si ninguna condicin es cierta se realizan el grupo de sentencias por
defecto
El ltimo else es opcional
De acuerdo a { } y sangrado/indentacin para mejor legibilidad

...
if (n > 0)
{
if (a > b)
z = a;
}
else
z = b;
...

Estructura switch

Alternativa mltiple: if-else-if

else asociado a if ms cercano.


{ } para romper ambigedad.

Alternativa mltiple de forma compacta y legible,


expresin y constantes: tipo entero o caracter,
break finaliza forzadamente la ejecucin de un bloque de
cdigo,
default es opcional.

Ejemplo Estructura switch

Ejercicios

#include <stdio.h>
void main()
{
// capturar un nmero
switch ( num )
{
case 1 : {
printf("Uno.\n");
break;

Realizar un programa que de tres nmeros capturados indique cual


es el mayor de ellos.

Escribir un programa que a partir de un valor entero determine si el


nmero ledo es mltiplo de 3 y 6, si es multiplo solo de 3, o
ninguna de las anteriores.

Escribir un programa que con un nmero y un par de valores para


un lmite cerrado; muestre una leyenda en pantalla para describir si
el nmero se encuentra dentro de los lmites o fuera de ellos.

}
case 2 : {
printf("Dos.\n");
break;
}
...
case 5 : {
printf("Cinco.\n");
break;
}
default : {
printf("No esperado.\n");
break;
}
}
}

Ejercicios

Escribir que a partir de un caracter indique si el caracter


tecleado es un dgito, una letra mayscula o una letra
minscula.

Escribir un programa que dados dos operandos y un operador


muestre el resultado de aplicar dicho operador a ambas
entradas nmericas. Los operadores pueden ser: +,-,*,/,%,&&,||.

Estructuras Iteractivas
Ejecucin repetida de un grupo de sentencias:

A partir de un caracter, desplegar la palabra correspondiente


como se indica en la tabla:
f
o
c
e
d
p
i

file
open
close
edit
delete
paste
insert

De acuerdo a ciertas condiciones, o


un nmero prefijado de veces
Estructuras:
while
do-while
for

Estructura while
while (expresin_condicional)
sentencia;
while (expresin_condicional)
{
grupo_de_sentencias;
}
La sentencia o grupo de sentencias se repite hasta que
el valor de la expresin condicional alcance un valor de
falso, o mientras que al evaluar la expresin condicional
de un resultado de verdadero

Estructura do ... while


do
sentencia;
while (condicin);

do {
grupo_de_sentencias;
} while (condicin);

Similar a while
Primero se ejecuta el conjunto de instrucciones y
despus se verifica la condicin
El grupo de instrucciones se ejecuta entre 1 y N veces
Tanto while como do-while suelen usarse cuando el
nmero de iteraciones no se desconoce a priori

Estructura for

Ejemplo

for

i=13

Ejemplo:
for (sentencia_inicial; condicin; incr/decr)
sentencia;

for (sentencia_inicial; condicin; incr/decr)


{
grupo_de_sentencias;
}

i=0

(i3-i2)

#include <stdio.h>
void main()
{
int i;
float cuad,cubo,suma;
suma = 0;
for (i = 1 ; i <= 13 ; i++) {
cuad = i*i;
cubo = cuad * i;
suma += cubo - cuad;
}
// imprimir el resultado de suma
}

Equivalencia for-while
for (sentencia_inicial; condicin; incr/decr)
{
grupo_de_sentencias;
}

Ejercicios I
Estructuras Iteractivas
1. Escribir un programa que con nmeros capturados indefinidamente
calcule la suma de los 20 primeros nmeros mltiplos de 5 o de 7 y
al cumplirse esta condicin termine.
2. Crear un programa que calcule la potencia de un nmero entero,
solicitando su valor y el del exponente.

sentencia_inicial;
while (condicin) {
grupo_de_sentencias;
incremento/decremento;
}

3. Escribir un programa que lea N nmeros enteros y muestre el


mayor y el menor de todos ellos.
4. Realizar un programa que escriba la tabla de multiplicar de un
nmero entero ledo por teclado.

Ejercicios II
Estructuras Iteractivas
5. Escribir un programa que determine si un nmero entero dado es
primo o no lo es.
6. Desarrollar un programa que calcule el factorial de un nmero
entero ledo por teclado.

Tipos de datos
Estructurados: Tablas

7. Escribir un programa que calcule la suma de todos los nmeros


mltiplos de 5 comprendidos entre dos enteros ledos por teclado.

Introduccin
Creacin de tipos de datos complejos: vectores, matrices,
tablas multidimensionales y cadenas de caracteres
Coleccin de datos del mismo tipo bsico
Referenciados mediante un mismo nombre

Vectores - Una dimensin


tipo_de_datos nombre_tabla[tamao];
tipo_de_datos: tipo de los elementos del vector
nombre_tabla: identificador para el vector y sus
elementos
tamao: expresin constante que indica el nmero de
elementos del vector

Almacenados en posiciones de memoria contiguas:

Direccin de memoria ms baja primer elemento, y


Direccin de memoria ms alta ltimo elemento
primer elemento
del vector

Acceso a un elemento
nombre_vector[ndice];
Indice entre 0 y N-1 !!!
Ejemplos:
int contador[10];
int i, j, x;

#define TAM 100


void main ()
{

...

int vector[TAM], i;

x = contador[1];

for (i=0; i<TAM; i++)

x = contador[i];
contador[i*2+j] = 24;
...

vector[i] = 0;
}

ltimo elemento
del vector

Ejemplo de Vectores
Normalizar un conjunto de nmeros reales
#include <math.h>
define MAX 100
void main ()
{
float v[MAX], modulo;
int i;
/* Lectura del vector */
for (i=0; i<MAX; i++)
scanf("%f", &v[i]);
/* Calcular el mdulo */
modulo = 0.0;
for (i=0; i<MAX; i++)
modulo += (v[i]*v[i]);
modulo = sqrt(modulo);
/* Normalizacin */
for (i=0; i<MAX; i++)
v[i] /= modulo;
/* Escritura del vector */
for (i=0; i<MAX; i++)
printf("v[%d]=%f\n", i, v[i]);
}

Matrices - Dos dimensiones


tipo_de_datos nombre_tabla[tamao1][tamao2];
tamao1 : nmero de filas
tamao2 : nmero de columnas
almacenamiento por filas: (0,0), (0,1), ..., (0,M-1), (1,0),
etc.

Ejemplo de Matrices

Traspuesta de una matriz de enteros:

#define MAX 20
#include <stdio.h>
void main ()
{
int m[MAX][MAX], mt[MAX][MAX];
int fil, col, i, j;
/* Lectura de la matriz */
// capturar cantidad de fila de matriz en variable fil
// capturar cantidad de columnas de matriz en variable col
for (i=0; i<fil; i++)
for (j=0; j<col; j++)
{
// capturar los elementos m[i][j]
}
/* Traspuesta */
for (i=0; i<fil; i++)
for (j=0; j<col; j++)
mt[j][i] = m[i][j];
/* Escritura de la matriz */
for (i=0; i<fil; i++)
for (j=0; j<col; j++)
// imprimir elementos mt[i][j]
}

Tablas
multidimensionales

Tablas
multidimensionales

Declaracin:
tipo_de_datos nombre_tabla[tam1][tam2]...[tamN];

Acceso
nombre_tabla[ndice1][ndice2]...[ndiceN]

Almacenadas por orden de dimensin: filas, columnas, etc.


Rara vez se usan tablas de ms de tres dimensiones

Inicializacin de Cadenas

Cadenas de caracteres
Vectores de tipo caracter (char) con un tratamiento
especial
El ltimo elemento til del vector debe ser el caracter nulo
(cdigo ASCII 0) \0
Cadena de N caracteres declarar un vector con N+1
elementos
Ejemplo: char cadena[6]; reserva suficiente espacio para
almacenar una cadena de hasta 5 caracteres:

Consulta: igual que en los vectores


Asignacin, diferentes maneras:
char cadena[10];
...
cadena[0] = h;
cadena[1] = o;
cadena[2] = l;
cadena[3] = a;
cadena[4] = \0;

char nombre[10] = {J,E,S,U,S,\0};


char nombre[10] = JESUS";
char nombre[] = JESUS";

Cadena vaca:
char cadena[12] = "Una frase";
...
cadena = \0; /* Ahora es una cadena vacia */

Definicin de constantes mediante comillas:

Funciones para uso de


Cadenas de caracteres
Funciones de manipulacin en string.h:

strlen: longitud de una cadena,

strcpy: copiar una cadena en otra,

strcat: concatenar dos cadenas,

strcmp: comparar dos cadenas, etc.

Entrada y salida (stdio.h):

Funciones gets y puts

Ejemplo de Cadenas de caracteres

Leer dos cadenas, concatenarlas, convertir minsculas en


maysculas y viceversa:
#include <stdio.h>
#include <string.h>
void main ()
{
char cad1[80], cad2[80], cad3[160];
int i, delta;
printf("\nCadena 1: ");
gets(cad1);
printf("\nCadena 2: ");
gets(cad2); /* cad3 = cad1 + cad2 */
strcpy(cad3, cad1);
strcat(cad3, cad2);
i = 0;
delta = a - A;
while (cad3[i] != \0)
{
if ((cad3[i]>=a) && (cad3[i]<=z))
cad3[i]-=delta; /* Convierte en mayscula */
else if ((cad3[i]>=A) && (cad3[i]<=Z))
cad3[i]+=delta; /* Convierte en minscula */
i++;
}
printf("La cadena resultante es: %s\n", cad3);
}

10

Ejercicios I de Arreglos

Dnde est el error en el siguiente programa?


void main ()
{
int vector[10];
int x = 1;
for (x=1; x<=10; x++)
vector[x]=23;
}
Escribir un programa que lea del teclado un vector de 10 nmeros
enteros, lo invierta, y finalmente lo muestre de nuevo.
Escribir un programa que cuente el nmero de palabras separadas por
espacio en una frase. La frase se almacena en forma de vector y el
ltimo elemento es el caracter ..
Escribir un programa que lea del teclado dos nmeros enteros de hasta
20 dgitos y los sume. Usar vectores para almacenar los dgitos.
Escribir un programa que calcule la moda de un conjunto de nmeros
enteros almacenados en un vector.

Ejercicios II de Arreglos

Dnde est el error en el siguiente programa?


void main ()
{
int matriz[10][3];
int x, y;
for (x=0; x<3; x++)
for (y=0; y<10; y++)
matriz[x][y]=0;
}
Escribir un programa que inicialice cada elemento de una matriz de
enteros con el valor de la suma de su nmero de fila y columna.
Escribir un programa que calcule la suma de dos matrices.
Escribir un programa que calcule los puntos de silla de una matriz de
enteros. Un elemento de la matriz es un punto de silla si es el mnimo
de su fila y el mximo de su columna.
Escribir un programa que determine si una matriz es simtrica.
Escribir un programa que multiplique dos matrices.

Ejercicios III de Arreglos

Escribir un programa que dada una cadena de caracteres y un


entero correspondiente a una posicin vlida dentro de ella, genere
una nueva cadena de caracteres que contenga todos los caracteres
a la izquierda de dicha posicin, pero en orden inverso.

Escribir un programa que dada una cadena de caracteres, le quite


los caracteres de espacios en blanco blancos. Escribir dos
versiones, una utilizando una cadena auxiliar y otra versin que
realice los cambios sobre la misma cadena.
Escribir un programa que lea dos cadenas de caracteres, las
compare e informe de si son iguales o diferentes.

Escribir un programa que convierta un nmero entero positivo,


capturado en una cadena de caracteres, de cualquier base menor o
igual a base 16 a un nmero en base decimal.
Escribir un programa que convierta un nmero en base decimal,
capturado en una cadena, a un nmero en cualquier base menor o
igual a 16.

11

You might also like