View
220
Download
0
Category
Preview:
Citation preview
Lenguajes de programación
Un computador solo entiende lenguaje binario
Un procesador tiene un conjunto finito de operaciones binarias
Un programa de computador es una secuencia de estas instrucciones
Etapas en la construcción de un programa
¿Problema? Resolución
Codificación y
Edición
Prueba Compilación
Sin
errores
¡A usar el
programa!
Con errores
Sin errores
Errores de sintaxis
Archivo fuente
Archivo objeto
Archivo
ejecutable
Lenguajes de programación
compilador
Código fuente
if(x>0)
Y=10;
Código Objeto 0011001
Sintaxis
gramática
Código Ejecutable 0011001
linker
Lenguajes de programación
• Proceso de creación de un programa
– Generación de código fuente
– Compilación • Se analiza la sintaxis del programa
• Se analiza la gramática del programa
• Se genera código objeto
– Enlace • Se combina el código objeto con bibliotecas del sistema
• Se genera programa ejecutable
– Ejecución
Lenguajes de programación
Código fuente
Código objeto
Código ejecutable
bibliotecas
Compilación
Ejecución
Enlace
Estructura general de un programa C
Todo programa C
Está formado por un conjunto de funciones
En particular, una función que no puede faltar es la función main (programa principal).
Llama a otras funciones:
Definidas por nosotros en el programa
Predefinidas, en bibliotecas.
Programa en C
Declaraciones previas (opcional)
instrucciones
Inicio
Fin
Las funciones en C 1. Funciones pre-definidas agrupadas en
bibliotecas – Ejemplos:
• #include <string.h >
• Incluye funciones de Manejo de strings
• #include <stdio.h >
• Incluye funciones de I/O
• #include <math.h >
• Incluye funciones matematicas • …
2. Funciones definidas por el usuario
IWI-131 - Tema 2
Declaraciones previas
Código fuente
Código objeto bibliotecas
Compilación
Enlace
Cabeceras de bibliotecas
Pre procesamiento
Código fuente procesado
Definición de una función en C
Funcion main
#include<stdio.h>
int main(){
int a, b, c = 0;
printf(“Digite el primer numero: ”);
scanf(“%d”,&a);
printf(“Digite el segundo numero: ”);
scanf(“%d”,&b);
c = a + b;
printf(“El resultado de la suma es: %d\n”,c);
return 0;
}
Librerías (uso de directivas del preprocesador)
Declaración de variables (las variables son locales en este caso).
Instrucciones (Expresiones aritméticas y lógicas, condicionales (IF), ciclos (while, do… while, for).
Programa principal
ANATOMIA DE UN PROGRAMA EN C
Primer programa en C
/* Mi primer programa C */
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf(“Hola mundo!\n”);
system("pause");
return 0;
}
Definición de una función en C
Valor retornado en el cuerpo de la función
• Se usa sentencia return para devolver valor del tipo de retorno de la función.
• Puede no devolver nada (la función retorna tipo void).
– return;
– Sin sentencia return, retorna cuando encuentra }
Definición de una función en C
Tipo del Valor de Retorno • Cuando la función no retorna nada se coloca void
void imprimeNumerosDesdeHasta(int x, int y){
for (int i = x; i <= y; i++)
printf(“%d\n”, i);
}
• Si retorna valor se coloca return
int potencia(int n, int m){
int i, p;
p = 1;
for (i = 1; i <= m; i++) p = p * n;
return p;
}
Definición de una función en C Lista de parámetros formales
(opcionales)
• Si la función no tiene parámetros formales se coloca void
int flip(void){
/* genera un número ramdom */
int valor;
…
return valor;
}
/* Función que eleva la base n a la
potencia m (m >= 0)*/
int potencia(int n, int m)
{
int i, p;
p = 1;
for (i = 0; i < m; i++)
p = p * n;
return p;
}
Instrucciones
• Las instrucciones se escriben en el cuerpo del programa.
• Pueden ser
– Declaraciones de variables
– Asignaciones
– Estructuras de control
– Llamadas a funciones
• Por lo general, terminan con un punto y coma (“;”)
Primer programa C
/* Mi primer programa C */
#include <stdio.h>
#include <stdlib.h>
Int main()
{
printf(“Hola mundo!\n”);
system("pause");
}
Principales Secuencias de Escape en C Secuencia de
escape Descripción
\a Carácter de alarma (campana del sistema).
\n New line (Nueva línea). Posiciona el cursor de la pantalla al comienzo
de la próxima línea.
\r Carriage return (Retroceso de carro). Posiciona el cursor al comienzo
de la línea corriente sin avanzar a la próxima.
\t Tabulador horizontal. Mueve el cursor hasta la próxima marca de
tabulación.
\\ Backslash. Usado para imprimir el carácter backslash.
\” Comilla. Usado para imprimir la comilla.
\‟ Apóstrofo. Usado para imprimir el apóstrofo.
\? Signo de interrogación. Usado para imprimir el signo de interrogación.
Constantes y Variables • Constantes o literales
– Ejemplos en C: 12, ‘a’, “hola”, 23.5
• Variables
– Nombre (Identificador)
• En C, letras, números y el carácter de subrayado (_), no pueden comenzar con un número.
• Cualquier longitud, reconoce hasta 31 caracteres.
• Case sensitive.
• No acepta palabras claves.
Bit, Byte, Word
Definición: Unidades usadas para describir unidades de datos o memoria en el computador
Bit: Unidad mas pequeña de memoria usada para mantener uno de dos posibles valores, ‘1’ o ‘0’.
Byte: Unidad de memoria equivalente a 8 bits.
1
0
10010010
SISTEMAS NUMERICOS
BASE 16 BASE 10 BASE 8 BASE 2
0 0 0 0000
1 1 1 0001
2 2 2 0010
3 3 3 0011
4 4 4 0100
5 5 5 0101
6 6 6 0110
7 7 7 0111
8 8 10 1000
9 9 11 1001
A 10 12 1010
B 11 13 1011
C 12 14 1100
D 13 15 1101
E 14 16 1110
F 15 17 1111
Relación entre las bases mas comunes
Realizar algunos ejercicios de conversión de bases
BASE 16 BASE 10 BASE 8 BASE 2
? 234 ? ?
? ? 417 ?
? ? ? 11100101
4AF ? ? ?
Tipos de datos
• void
– 0 bytes.
Tipos de datos numéricos
• int
– Tipo de dato entero
– Valores positivos y negativos
– Se almacena en 2 o 4 bytes
• int (16 bits): -32.768 a 32.768
• long int (32 bits): -2.147.483.648 a 2.147.483.648
• unsigned int (32 bits): 0 a 4.294.967.296 – Se puede abreviar como “unsigned”
Modificadores
• Para modificar el tamaño de almacenamiento se utilizan tipos de datos modificados
• Modificadores – signed: reserva un bit para el signo
– unsigned: define solo valores positivos
– long: utiliza el mayor tamaño disponible
– short: utiliza el menor tamaño disponible
Tipos de datos numéricos
• float – Tipo de dato real
– Precisión simple
– Valores positivos y negativos
– Se almacena en 4 bytes • 37 dígitos para parte entera
• 6 dígitos para parte decimal
• Rango: [3.4e-38 , 3.4e38]
– No acepta modificadores
Tipos de datos numéricos
• double
– Tipo de dato real
– Precisión doble
– Valores positivos y negativos
– Se almacena en 8 bytes
• 37 dígitos para parte entera
• 10 dígitos para parte decimal
• Rango: [1.7e-308 , 1.7e308]
– long double (10 bytes)
Tipos de datos numéricos
int main(){
int a = -10;
unsigned int b = 10;
float c = 10.1;
double d = 0.000000001;
}
Tipos de datos alfabéticos
• char – Almacena cualquier carácter
– Ocupa un byte • Permite diferenciar 256 caracteres.
• signed char: -127 a 127
• unsigned char: 0 a 256
– El valor almacenado es el código ASCII que representa el carácter • Ej: @ = 64 , \ = 92 , A = 65
TIPOS DE DATOS • Cuando declaro una variable la elección del tipo de dato depende del propósito para el cual voy a usar la variable.
Tipo Ejemplo Tamaño en bytes Rango (minimo-maximo)
char ´c´ 1 0,…,255
int 1024 2 (o 4, depende de la arquitectura)
-32768,…,32767 (si el tamaño en bytes es 2)
float 10.5 4 3.4E-38 ,….,3.4E38
double 1e-8 8 1.7E-308,…,1.7E308
tipo nom_var1 = valor_inicial, nom_varN;
Cast
• Se puede forzar al compilador para hacer una conversión de tipos.
• Se vera su utilidad al estudiar los operadores. void main(){
double d1=4.7, d2=2.4;
int i = ((int)d1)/((int)d2);
printf("%d\n", i);
}
Entrada/Salida
– Entrada estándar: teclado
• getchar: lee un caracter
• scanf: lee entradas con formato
– Salida estándar: pantalla
• printf: imprime datos con formato
• Existen otras formas …
32
Salida formateada con printf • Cada especificador de conversión:
– Empieza con %
– Termina con un carácter de conversión.
33
IMPRIMIENDO VARIABLES EN PANTALLA - ASPECTOS BASICOS
Para imprimir variables en pantalla usando la función printf, cada tipo de dato tiene su especificador de control, la siguiente tabla muestra los especificadores basicos
Especificador Significado
%d Usado para imprimir un valor entero en decimal
%o Usado para imprimir datos enteros en notación octal
%x (%X) Usado para imprimir variables enteras en notación hexadecimal
%f Permite imprimir variables reales
%u Permite imprimir valores enteros sin signo
%ld Permite imprimir variables tipo long
%lo Imprime variables tipo long en formato octal
%lx Imprime variables tipo long en formato hexadecimal
IMPRIMIENDO VARIABLES EN PANTALLA - ASPECTOS BASICOS
Especificador Significado
%h Permite imprimir variables tipo short
%hd Imprime variables tipo short en formato decimal
%hx Imprime variables tipo short en formato decimal
%lu Imprime variables tipo unsigned long
%lld Permite imprimir variables tipo long
%llu Permite imprimir variables tipo long sin signo
%c Usado para imprimir caracteres sencillos
%s Usado para imprimir cadenas de caracteres
Salida de datos #include <stdio.h>
#include<stdlib.h>
int main(){
char c='A';
int i=126;
double d=12.0346;
printf("La letra %c es el numero %d\n", c,c);
printf("El numero decimal %d es el %x en hexadecimal \n",i,i);
printf("El numero %f se redondea a %010.3f \n",d,d);
printf("Inserte aqui su mensaje: < %s > \n","este es mi mensaje");
system("pause"); return (0);
}
La letra A es el numero 65 El numero decimal 126 es el 7e en hexadecimal El numero 12.034600 se redondea a 000012.035 Inserte aqui su mensaje: < este es mi mensaje >
Ingreso de datos
#include <stdio.h>
#include<stdlib.h>
int main()
{
int entero,entero1,entero2 ;
char c;
scanf (“%d”, &entero); /* lee un entero */
scanf (“%d, %d”, &entero1, &entero2); /* ha leido dos enteros*/
scanf (“%d %c \n”, &ent3, &c );
/* lee un entero, ent3, y un carácter, c, */
…..
}
Suma=0
Ingrese a y b
a,b
Suma=a +b
a,b,Suma
#include <stdio.h> #include<stdlib.h> int main() { int a,b,Suma=0 ; printf(“ ingrese a y b\n”); scanf(“%d%d",&a,&b); Suma= a +b; printf(“La suma de %d + %d es = a %d\n“,a,b,Suma); system("pause"); return (0); }
Operadores y expresiones aritméticas en C Operador
aritmetico
en C
Operadores
relacionales
en C
+ ==
!=
- <=
* >=
/ >
% <
Operadores y expresiones lógicas en C
• No hay tipo booleano o lógico
– 0 representa falso
– 1 representa verdadero
• 1 == 1 1 (verdadero)
• 10 <= 5 0 (falso)
Operadores y Expresiones Lógicas en C Operador
lógico
Operador
lógico en
C
Ejemplo de uso Significado
and && i != 0 && j > 1
i distinto de 0 y j mayor
que 1
or || c == „a‟ || n == 0
c igual al carácter „a‟ o n
igual a 0
not
! !encontrado
la variable encontrado
no es verdadera
(encontrado igual 0)
Orden de evaluación: 0 && _ 0
1 || _ 1
Operadores de asignación aritméticos
Operador
de
asignación
aritmético
Ejemplo Versión
descomprimida
Resultado asignado a
variable a asumiendo
la declaración
int a = 3;
+= a+=4 a = a + 4 7
-= a-=4 a = a - 4 -1
*= a*=4 a = a * 4 12
/= a/=4 a = a / 4 0
Operadores de incremento y decremento en C
Operador Explicación Ejemplo de uso Efecto
a++
Devuelve el valor de a
y luego lo incrementa
en 1.
i = a++;
Asigna el valor de a a la variable i y luego
incrementa a en 1. Es equivalente a
i = a; a = a + 1;
++a Incrementa el valor de a en 1 y devuelve ese
valor.
i = ++a; Incrementa en 1 la variable a y ese valor lo
asigna a la variable i. Es equivalente a
a = a + 1; i = a;
a--
Devuelve el valor de a
y luego lo decrementa
en 1.
printf(“%d”, a--);
Imprime el valor de a y luego decrementa
en 1 su valor. Es equivalente a
printf(“%d”, a); a = a - 1;
--a Decrementa el valor de a en 1 y devuelve ese
valor.
printf(“%d”, --a); Decrementa en 1 la variable a y luego
muestra su valor por pantalla. Equivalente a
a = a – 1; printf(“%d”, a);
Conversiones Implícitas de Tipos en C
int i = 5;
float f = 3.0;
float y;
f = i;
y = f + i;
Conversiones Explícitas de Tipos en C Operador cast
• Forma general: (nombre-de-tipo) expresión • Ejemplos:
float resultado;
int i = 9;
int j = 5;
resultado = i / j;
resultado = (float)i / j;
resultado = i / (float)j;
resultado = (float)(i / j);
resultado = (float)i / (float) j;
Programación Estructurada
• Metodología de programación
• C. Böhm y G. Jacopini, 1966
• Edsger W. Dijkstra, 1968
• Estructuras de Control
– Secuencia
– Selección
– Iteración
Secuencia en C • ; es un finalizador de sentencia:
– y = 4 y j++ y scanf(…) son expresiones en C
– y = 4; j++; scanf(…); son sentencias en C
• { } para crear sentencias compuestas o bloques:
– Agrupan declaraciones y sentencias.
– Ejemplo: llaves en declaración de función main.
Selección • Selección de rama vacía o simple
if (cond)
sentencia;
• Ejemplos:
if (a==1 && b) if (a==1 && b){
a++; a++;
b+=5;
}
Selección • Selección de dos ramas
if (cond)
sentencia;
else
sentencia;
• Si hay if anidados ambiguos, asocia else al if mas interno:
if (a==1 && b) if (a==1 && b){
if (b < 0) if (b < 0)
b = 0; b = 0;
else }
a++; else
a++;
Selección • Selección múltiple en C
switch (expresión) {
case constanteEntera1: sentencias;
case constanteEntera1 : sentencias;
…
case constanteEntera1 : sentencias;
default: sentencias;
}
• Ejemplo 1: switch (i) {
case 1: printf(“uno\n”);
case 2: printf(“dos\n”);
case 3: printf(“tres\n”);
}
Selección • Ejemplo 2: switch (i) {
case 1: printf(“uno\n”); break;
case 2: printf(“dos\n”); break;
case 3: printf(“tres\n”); break;
default: printf(“distinto de 1, 2 y 3\n”);
}
• Ejemplo 3: switch (ch) {
case „,‟:
case „;‟:
case „.‟: printf(“signo de puntuacion\n”); break;
default: printf(“no es un signo de puntuacion\n”);
}
Iteración
• while
• do/while
• for
Iteración while while (expresión)
sentencia;
Ejemplo:
int i = 0;
while (i < 10) {
printf(“i = %d”, i);
i++;
}
Iteración for for (expresión1; expresión2; expresión3)
sentencia;
Ejemplos:
int suma = 0;
for (i = 0; i <= n; i++)
suma = suma + i;
int suma;
for (i=0, suma=0; i <= n; i++, suma+= i);
Iteración do/while do
sentencia;
while (expresión);
Ejemplo: do {
printf(“Ingrese un numero natural”
“mayor o igual a cero: ”);
scanf(“%d”, &n);
} while (n < 0);
Recommended