ESTRUCTURA DE UN PROGRAMA
Todo programa en C se construye básicamente mediante tres tipos de
objetos:
Funciones.
Variables.
Tipos de datos.
2
ESTRUCTURA DE UN PROGRAMA
3
< comandos del preprocesador>
<definición de tipos>
<prototipos de funciones>
<variables>
<funciones>
Las funciones a la vez tienen la siguiente estructura:
<tipo>nombre_de_la_función(<declaración de parámetros>)
{
<declaraciones locales>
<sentencias>
}
De todas las funciones que se declare, una debe ser llamada main, éste es
El cuerpo principal del programa, desde aquí se pueden llamar a otras
Funciones.
ENCABEZADO
CUERPO
ESTRUCTURA DE UN PROGRAMA
4
/*Variantes de Definición*/
#include<nombre_de_la_biblioteca>
#define nombre_de_la_constante
//Función principal
void main()
{
definición de variables locales;
instrucciones del programa;
}
#include <biblioteca1.h>
#include <biblioteca2.h>
... declaraciones de funciones ...
... definiciones (cuerpos de funciones) ...
... declaraciones de variables globales ...
main()
{
... cuerpo del main ...
}
... otras definiciones de funciones ...
Definición de
Cabecera y/o
Ficheros
Declaración
de Datos
Función Principal
Otras Funciones
y/o
Procedimientos
ESTRUCTURA DE UN PROGRAMA
El inicio del programa debe llevar:
El símbolo de numeral (#) la sentencia “include”, y entre signos de
mayor y menor que (<>) el nombre de la librería o fichero.
Seguidas de las librerías, para que “Incluya” en el programa la directiva
la cual contiene las funciones para procesar datos.
#include <fichero>
5
ESTRUCTURA DE UN PROGRAMA
#include <stdio.h>.- Contiene las funciones de entrada y
salida de datos.
#include <conio.h>.- Declara varias funciones usadas
llamando la consola del sistema operativo.
#include <string.h>.- Manejo de cadenas.
#include <stdlib.h >.- Memoria dinámica.
#include <math.h >.- Rutinas matemáticas.
6
TIPOS DE DATOS
8
TIPO TAMAÑO EN
BITS
RANGO MINIMO
CARÁCTER
char 8 -128 a 127
unsigned char 8 0 a 255
signed char 8 -128 a 127
E
N
T
E
R
O
int 16 -32768 a 32767
unsigned int 16 0 a 65535
signed int 16 Igual que int
short int 16 Igual que int
unsigned short int 16 0 a 65535
signed shor int 16 Igual que short int
long int 32 -2147483648 a 2147483647
signed long int 32 Igual que long int
unsigned long int 32 0 a 42949667295
TIPOS DE DATOS
9
TIPO TAMAÑO EN
BITS
RANGO MINIMO
PUNTO
FLOTANTE
float 32 ±(3.4e-38 a 3.4e+38)
6 dígitos de precisión
double 64 ±(1.7e-308 a 1.7e+308 )
10 dígitos de precisión
long double 80 ±(3.4e-4932 a 3.4e+4932)
10 dígitos de precisión
SIN TIPO void 0 Sin valor
Conversiones de Tipos de
Datos
• Cuando en una
expresión se mezclan
constantes y
variables de distintos
tipos de datos, todas
ellas se convierten a
1 solo tipo.
Tipos de
conversion
Automática
Moldes
(casting)
Conversión Automática
• Se realiza la
conversión
automática de todos
los operadores al
mismo tiempo
La categoria de los tipos esta dado por
su tamaño en bytes el de mayor valor
tiene mayor categoría
Long double
louble
float
unsigned long int
long int
unsigned int
int
unsigned char
char
Conversión Automática
• El operador de
menor categoría se
convierte al de mayor
categoría. Este
proceso se llama
promoción de tipo
Conversión Automática
• El resultado de una
sentencia de
asignación se
convierte al tipo de la
variable a la que se
asigna el valor de la
expresión.
Promoción de Tipo
int i;
char ch;
ch=i;
i se convierte
en char
Pérdida de rango
int i;
float f;
f=i;
i se convierte
en punto
flotante
Conversión Automática
Tipo Destino Tipo Expresión Posible perdida información
signed char char Si valor >127, destino negativo
char short int 8 bits mas significativos
char int 8 bits mas significativos
char long int 24 bits mas significativos
int long int 16 bits mas significativos
float double Precisión, resultado redondeado
double long double Precisión, resultado redondeado
Moldes (Casting)
• Se puede especificar por concreto la conversión a la que se
desee.
• La forma general del molde es:
(tipo) expresion
• Por ejemplo:
(float) i/j;
Donde i y j son enteros.
CONSTANTES
16
Son valores fijos que no pueden ser alterados por el programa.
Constantes Carácter (char)
Pueden representar un único carácter (código ASCII) y van encerradas entre
apóstrofes. Ejemplo: ‘b’, ‘*’.
Constante Cadena
Es una secuencia de caracteres encerrada entre comillas.
“Ejemplo de una cadena”
“a” es una cadena
‘a’ es un caracter
CONSTANTES
17
Constantes Enteras
Especifica números enteros, es decir sin parte fraccionaria. 10, -100
Octal: Una constante octal comienza por el carácter 0, Ejm:
020 (16 en decimal)
Hexadecimal: Una constante hexadecimal comienza por los caracteres 0x, Ejm:
0x20 (32 en hexadecimal)
Usando un sufijo se puede especificar de forma precisa el tipo de una constante
entera:
SUFIJO TIPO DE DATO CONSTANTE
U Unsigned int 34500U
L Long int 34500L
F Float -123F
L Long double 1550.1L
IDENTIFICADORES
18
Son los nombres utilizados para referencia las constantes, variables, funciones,
etiquetas y otros objetos definidos por el usuario.
• La longitud de un identificador puede variar entre uno y varios caracteres
• El primer caracter debe ser siempre una letra o el caracter de subrayado,
los restantes pueden ser números, letras o el subrayado.
• Las letras minúsculas y mayúsculas se tratan como distintas.
DECLARACION DE VARIABLES
Las variables deben ser declaradas antes de poder ser usadas:
tipo lista_variables;
tipo: tipo de dato válido con cualquier modificador
Lista_variables: Nombres de identificadores separados por comas
; , la sentencia de declaración siempre finaliza con ;
Ejm: int, a,b,c;
float contador, valido, calculo;
char nombre, curso;
CONSTANTES SIMBOLICAS
19
Existen dos formas de definir constantes simbólicas:
• Preprocesador #define
Esta comienza por #, se sitúa normalmente fuera de las funciones, al inicio,
estas no terminan con punto y coma, siempre va una sentencia por línea.
Ejm: #define PI 3.141516
• El modificador const
Se declara utilizando la palabra const antes de las palabras claves para
identificar el tipo: int, float, double, además como no puede ser cambiada se
debe inicializar su declaración.
Ejm: const float PI = 3.141516;
const int MAX =100, MIN = 1;
CONSTANTES SIMBOLICAS
20
Para definir las constantes de tipo carácter
asociadas a caracteres especiales se usan
secuencias de escape:
▪ ‘b’: Retroceso (back space).
▪ ‘f’ : Salto de página
▪ ‘n’: Salto de línea
▪ ‘r’ : Retorno de carro
▪ ‘t’ : Tabulación horizontal
▪ ‘v’: Tabulación vertical
▪ ” : Comillas
▪ ’ : Apóstrofe
▪ : Barra invertida
▪ 0 : Nulo
▪ a : Alerta
COMENTARIOS
21
Los comentarios en C pueden ocupar varias
líneas y se encuentran delimitados entre /* y
*/.
int main()
{
/* Esto es un comentario de varias
lineas.*/
return(0);
}
OPERADORES ARITMETICOS
22
El operador de asignación es el igual (=).
Los operadores aritméticos son:
Suma (+)
Resta (-)
Multiplicación (*)
División (/)
Módulo o resto (%)
Incremento (++)
Decremento (--)
OPERADORES ARITMETICOS
23
División entera vs división real:
Depende de los operandos:
4 / 3 --> 1 entero
4.0 / 3 --> 1.333 real
4 / 3.0 --> 1.333 real
4.0 / 3.0 --> 1.333 real
Pre/post incrementos
24
Los operadores unarios (++) y (--) representan
operaciones de incremento y decremento,
respectivamente.
a++; /* similar a a=a+1 */
Ejemplos:
a=3; b=a++; /* a=4, b=3 */
a=3; b=++a; /* a=4, b=4 */
a=3; b=a--; /* a=2, b=3 */
OPERADORES DE ASIGNACION
25
El operador de asignación en C++ es el igual(=)
a=b+3;
Existen otras variantes de asignación:
a+=3; /* Equivalente a a=a+3 */
a*=c+d; /* Equivalente a a=a*(c+d) */
a/=a+1; /* Equivalente a a=a/(a+1) */
Para las asignaciones entre variables o
expresiones de tipos diferentes se recomienda
hacer casting:
a=(int)(x/2.34);
OPERADORES RELACIONALES
26
Los operadores de relación son:
Igual (==)
Distinto (!=)
Mayor (>) y Mayor o igual (>=)
Menor (<) y Menor o igual (<=)
El resultado de un operador de comparación es
un valor entero (0 es falso) y (distinto de 0
verdadero).
a=3>7 /* a vale 0 (falso) */
OPERADORES LOGICOS
27
Sobre expresiones booleanas (enteros) se definen
los siguientes operadores lógicos:
And lógico (&&)
Or lógico (||)
Negación lógica (!)
Ejemplo
a=(3>2 || 5==4) && !1 /* Falso */
ENTRADA Y SALIDA DE DATOS
Se utiliza las funciones de biblioteca:
“scanf” para la entrada de valores.
Sintaxis es la siguiente:
Lee el valor y lo guarda en una variable.
“printf” para la salida de información.
Sintaxis es la siguiente:
Imprime en pantalla el texto y el valor 28
scanf ("%d", &variable);
printf ("El valor es %d", variable);
Entrada scanf()
Codigo Formato
%c Leer Carácter
%d Leer un Entero Decimal con signo
%i Leer Entero Decimal con signo
%e Leer un número Punto flotante
%f Leer un número Punto flotante
%g Leer un número Punto flotante
%o Leer un numero octal
%s Leer una Cadena
%u Leer Entero decimal sin signo
%x Leer número hexadecimal
%p Leer un puntero
%n Recibe un valor entero igual al numero de caracteres leidos.
%[] Juego de inspección, define un conjunto de caracteres que pueden leerse
utilizando scanf(
• Para leer 2 o mas variables al mismo tiempo se escribe:
scanf(¨%d%f¨, &numero, &promedio);
Entrada scanf()
Modificadores de
formato
Longitud de
campo
scanf(«%20s»,cad)
scanf(«%2d»,&i);
Lectura de
enteros
Se aplican a formatos d, i, o, x.
Leer entero largo ld
Leer entero corto hd
Lectura en punto
flotante
Se aplica a formatos f, e, g.
´l´ asigna los datos a una variable
double
´L´ asigna los datos a una variable long
double
CODIGO FORMATO
%c Carácter
%d Entero Decimal con signo
%i Entero Decimal con signo
%e Punto flotante en notación científica (imprime e)
%E Punto flotante en notación científica (imprime E)
%f Punto flotante en notacion decimal
%g Usa %e o %f, el mas corto (imprime e)
%G Usa %E o %f, el mas corto (imprime E)
%o Entero octal con sin signo
%s Cadena de caracteres
%u Entero decimal sin signo
%x Entero hexadecimal sin signo (imprime minusculas)
%X Entero hexadecimal sin signo (imprime mayusculas)
%p Mostrar un puntero
%n El argumento asociado es un puntero a entero al que se asigna el numero
de caracteres escritos hasta que aparezca %n.
%% Imprime el carácter %
Salida printf()
Modificadores de formato
Modifican la salida de los especificadores. Se
colocan entre el símbolo % y el codigo de
formato.
Especificador de longitud
mínima de campo
printf(‟%12”,567)
printf(‟%012”,56
7)
Especificador de
precisión
Punto flotante
printf(‟%10,4”,7,9645)
Carácter
printf(‟%8,12”,‟Texto sencillo
para imprimir)
Ajuste a la
Salida
printf("%10,2fn",
341,566);
Salida printf()
Modificador l y h
Se aplican a especificadores de formato
d, i, o, u, x
%lh, imprime entero largo
%hd, imprime entero corto
%hud, imprime un entero corto sin
signo
ENTRADA Y SALIDA DE DATOS
ENTRADA DE TIPO CARÁCTER.
Se declara una variable de tipo carácter y se guarda en:
getch() o getche().
La diferencia es que getche() muestra en pantalla el
carácter introducido.
getch() lo mantiene oculto.
Sintaxis:
char opc;
opc=getch();
opc=getche(); 35
Programa que calcula el área y perímetro de un
circulo.
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
double r, a, p;
printf ("Programa que calcula el área y perímetro de un circulo");
printf ("nIntroduce el radio: ");
scanf ("%lf", &r);
a = M_PI * pow(r,2);
p = M_PI * (r+r);
printf ("nEl área es: %5.2lf", a);
printf ("nEl perímetro es: %lf", p);
getch();
} 36
MULTIPLICACIÓN
/* Programa para multiplicar dos números */
#include <stdio.h>
/* Esta funcion devuelve la suma de los enteros a y b */
int sumar(int a, int b)
{
return a + b;
}
/* Linea principal del programa */
int main(void)
{
int a, b;
printf("Introduce dos numeros enteros y pulsa enter: ");
scanf("%d %d", &a, &b);
printf("La suma de %d y %d es %dn", a, b, sumar(a,b));
return 0;
} 37
FORMATOS DE LECTURA O IMPRESIÓN
38
%d Si el dato que se imprimirá o leerá será un número
entero.
%f Si el dato que se imprimirá o leerá será un número
real.
%c Si el dato que se imprimirá o leerá será un carácter.
%s Si el dato que se imprimirá o leerá será una cadena.
EJERCICIOS
1. Haciendo uso de las funciones gets y puts, diseñe un programa en C, que se lea el nombre del usuario y
lo muestre en pantalla junto con un saludo.
2. Diseñe un programa en C, que lea y muestre en pantalla el valor de tres variables de tipo Entero.
3. Diseñe un programa que muestre, los diferentes tipos de datos, usados en C. Primero, debe indicársele
al usuario que introduzca un valor, de un tipo dado; luego y después de haber introducido valores en
todas las variables, debe imprimirse el contenido de ellas, junto con un mensaje que indique, el tipo de
dato.
4. Diseñe un programa, en el cual se introduzcan el nombre y el peso y de un alumno, y luego la muestre
en pantalla. El Nombre debe incluir el apellido, y en el campo del peso, solo deben incluir valores
numéricos.
5. Diseñe un programe en C, en el cual después de haber introducido, una tabla de multiplicación
cualquiera, imprima ésta en forma de tabla: 2x2=4;2x3=6;2x4=8;…;2x10=20 39
ESTRUCTURA DE DECISIÓN
Estructura de decisión If-Else
Esta estructura de decisión evalúa una expresión condicional y si se cumple, se
ejecuta la sentencia s; si no, se ejecuta la sentencia t. La segunda parte de la
condición, else <t>, es opcional.
SINTAXIS
if (condición)
Instrucciones a ejecutar cuando la condición es verdadera;
Si se trata de dos o más instrucciones, estas van entre llaves { }
else
Instrucciones a ejecutar cuando la condición es falsa;
41
Programa para determinar si un
año es bisiesto.
#include <stdio.h>
#include <conio.h>
void main()
{
int year;
clrscr(); //Limpia la pantalla
printf ("Programa para determinar si un año es bisiesto");
printf ("nIntroduce un numero de añon");
scanf ("%i", &year);
if (year%4 == 0 && year%100 != 0 || year%400 == 0)
printf ("aanEl año %i si es bisiesto", year);
else
printf ("anEl año %i no es bisiesto", year);
getch();
}
42
CONDICIONES ANIDADAS
IF ANIDADAS
if (condición)
if (condición)
Instrucciones a ejecutar cuando la condición es verdadera;
else
Instrucciones a ejecutar cuando la condición es falsa;
else
Instrucciones a ejecutar cuando la condición es falsa;
43
EJEMPLO
#include <stdio.h>
#include <conio.h>
void main()
{
int a, b, c, d, mayor;
clrscr ();
printf ("Programa que indica cual de 4 numeros es el mayorn");
printf ("Introduce 4 numeros enteros:n");
scanf ("%i%i%i%i", &a, &b, &c, &d);
if (a > b)
if (a > c)
if (a > d)
mayor = a;
else
mayor = d;
else
if (c > d)
mayor = c;
else
mayor = d;
else
if (b > c)
if (b > d)
mayor = b;
else
mayor = a;
else
if (c > d)
mayor = c;
else
mayor = d;
printf ("El mayor es %i", mayor);
getch();
}
44
ESTRUCTURA SWITCH
Evalúa una expresión que puede tomar n valores distintos, según con cual
de estos valores coincida, se ejecutaran ciertas acciones.
SINTAXIS
switch (valor)
{
case valor1: <sentencias>
case valor2: <sentencias>
...
default: <sentencias>
}
45
#include<stdio.h>
void main() {
int dia;
printf("ingrese un número entre 1 y 7........ ");
scanf("%d",&dia);
switch(dia)
{
case 1:
printf(" LUNES n");
break;
case 2:
printf(" MARTES n");
break;
case 3:
printf(" MIERCOLESn");
break;
case 4:
printf(" JUEVESn");
break;
case 5:
printf(" VIERNESn");
break;
case 6:
printf(" SABADOn");
break;
case 7:
printf(" DOMINGOn");
break;
default:
printf(" SOLO NÚMEROS ENTRE 1 Y 7........ ");
}
}
46
ESTRUCTURAS DE CONTROL
WHILE
La estructura while ejecuta la condición de continuación del ciclo al
principio de este, antes de ejecutar las condiciones del bucle.
SINTAXIS
while (condición)
{ Instrucciones que se repetirán mientras la condición sea
verdadera;
Instrucciones adicionales;
}
47
EJEMPLO
Las sentencias se ejecutan si la expresión es verdadera. La comprobación es al inicio del bucle.
#include<stdio.h>
int a;
main()
{
a=3;
while(a<10)
{
scanf(“%d”,&a);
a=a+1;
printf("%d",a);
}
}
48
EJEMPLO
Leer números desde el teclado hasta que uno de ellos es menor que o igual a 100:
main()
{
int num;
do
{
scanf("%d", &num);
} while ( num>100 );
}
Do-While puede ser útil en el desarrollo de programas con menús.
50
SENTENCIA FOR
Permite inicializar los controles del bucle.
SINTAXIS
for(indice=inicio bucle; indice=fin bucle; indice
incrementa++)
{
sentencias dentro del bucle
} 51
¿Arreglos o arrays?
Un arreglo (array) es una colección de datos del mismo tipo, que
se almacenan en posiciones consecutivas de memoria y reciben
un nombre común.
Arreglos
Para referirse a un determinado elemento de un array se deberá
utilizar un índice, que especifique su posición relativa en el array.
Un arreglo es una colección finita, homogénea y ordenada de
elementos.
ARREGLOS
•Finita:Todo arreglo tiene un límite; es decir,debe determinarse
cuál será el número máximo de elementos que podrán formar
parte del arreglo.
•Homogénea: Todos los elementos del arreglo deben ser del
mismo tipo.
•Ordenada: Se puede determinar cuál es el primer elemento, el
segundo, el tercero,.... y el n-ésimo elmento.
ARREGLOS
Los arreglos se clasifican de acuerdo con el número de
dimensiones que tienen. Así se tienen los:
•Unidimensionales (vectores)
•Bidimensionales (tablas o matrices)
•Multidimensionales (tres o más dimensiones)
ARREGLOS O ARRAY
VECTORES
Es un array unidimensional, es decir, solo usa un índice para
referenciar a cada uno de los elementos.
Se declara:
tipo nombre [tamaño];
60
EJEMPLO
int num[100]; /*Arreglo de tipo entero compuesto de
100 posiciones*/
char nom[80]; /*Texto de 80 caracteres*/
float x[12]; /*arreglo de 12 elementos punto flotantes
*/
61
EJERCICIO
Lea un vector de 10 posiciones, luego determine si la quinta posición es
positiva, si la primera posición es negativa y si la ultima posición es cero.
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#define N 10
using namespace std;
int main(int argc, char *argv[])
{
float x[N];
int i;
for(i=0; i<N; i++)
{
printf("Ingrese el valor %d:n", i);
scanf("%f", &x[i]);
}
if(x[4]>0) printf("La quinta Posici¢n es Positivann");
if(x[0]<0)printf("La 1era Posici¢n es Negativonn");
if(x[N-1]==0) printf("La última posición es cero");
getch();
system("PAUSE");
return EXIT_SUCCESS;
}
62
MATRICES
Son arreglos bidimensionales y deben ser declarados con
corchetes independientes para cada subíndice.
SINTAXIS
tipo nombre[numero_filas][numero_columnas];
64
Programa que lee una matriz de 3*3 y determina la suma de cada
unadelasfilasyalmacenaenunvectorllamadosuma.
#include <stdio.h>
#include <conio.h>
#define F 6
#define C 6
Void main()
{
int matriz[F][C], i,j, vector [F]={0,0,0,0,0,0};
for(i=0; i<F; i++)
for(j=0; j<C; j++)
{ printf("Ingrese el elemento F=%d y Columna=%d de la matriz:n", i,j);
scanf("%d", &matriz[i][j]);
vector[i]=vector[i]+matriz[i][j];
}
printf("La Matriz generada es:nn");
for(i=0; i<F; i++)
{
for(j=0; j<C; j++)
{
printf("*%d*", matriz[i][j]);
}
printf("n");
}
printf("Y el vector suma de las filas es:nn");
for(i=0; i<F; i++)
printf("%dt", vector[i]);
getch();
}
65
Programa que intercambia los
valores de dos variables.
#include<stdio.h>
void intercambio(int x,int y);
int temp,a,b;
main(void)
{ printf("ingrese a: ");
scanf("%d",&a);
printf("ingrese a: ");
scanf("%d",&b);
intercambio(a,b);
}
void intercambio(int x, int y)
{
temp=x;
x=y;
y=temp;
printf("nuevos avlores de a:=%d y b:=%d",x,y);
}
66