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 Archivo fuente Con errores Prueba Errores de sintaxis Compilación Sin errores A usar el programa! Sin errores Archivo ejecutable Archivo objeto
Lenguajes de programación Código fuente if(x>0) Y=10; compilador Código Objeto 0011001 linker Sintaxis gramática Código Ejecutable 0011001
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 Compilación Código objeto bibliotecas Enlace Código ejecutable Ejecución
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) Inicio instrucciones 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
Declaraciones previas Código fuente Cabeceras de bibliotecas Pre procesamiento Código fuente procesado Compilación Código objeto bibliotecas Enlace IWI-131 - Tema 2
Definición de una función en C
Funcion main ANATOMIA DE UN PROGRAMA EN C Librerías (uso de directivas del preprocesador) #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; 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
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. 0 1 Byte: Unidad de memoria equivalente a 8 bits. 10010010
SISTEMAS NUMERICOS Relación entre las bases mas comunes 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 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) float 10.5 4 3.4E-38,.,3.4E38 double 1e-8 8 1.7E-308,,1.7E308-32768,,32767 (si el tamaño en bytes es 2) 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 %lo %lx Permite imprimir variables tipo long Imprime variables tipo long en formato octal 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); scanf ( %d %c \n, &ent3, &c ); /* lee un entero, ent3, y un carácter, c, */.. } /* ha leido dos enteros*/
#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); Suma=0 Ingrese a y b a,b Suma=a +b a,b,suma
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 and Operador lógico en C Ejemplo de uso && i!= 0 && j > 1 Significado i distinto de 0 y j mayor que 1 or not c == a n == 0!!encontrado c igual al carácter a o n igual a 0 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) a++; if (a==1 && b){ 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 constanteentera 1 : sentencias; case constanteentera 1 : sentencias; case constanteentera 1 : 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
while (expresión) sentencia; Iteración while 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);
do sentencia; while (expresión); Iteración do/while Ejemplo: do { printf( Ingrese un numero natural scanf( %d, &n); } while (n < 0); mayor o igual a cero: );