480 likes | 626 Views
Introducción a la Programación. Práctica P5: Fundamentos y Estructuras de Control. Profesorado: Antonio Carlos Domínguez Brito Oscar Déniz Suárez. Lenguaje C: Estructura de un Programa. #include <stdio.h> #include <stdlib.h> # … # … … /* Otras definiciones */
E N D
Introducción a la Programación Práctica P5: Fundamentos y Estructuras de Control Profesorado: Antonio Carlos Domínguez Brito Oscar Déniz Suárez
Lenguaje C: Estructura de un Programa #include <stdio.h> #include <stdlib.h> # … # … … /* Otras definiciones */ int main(int argc, char *argv[]) { … /* Zona de */ … /* declaración */ … /* de variables */ … /* Zona de */ … /* instrucciones del */ … /* programa principal */ system("PAUSE"); return 0; } Cabecera de Programa: ficheros cabecera y otras definiciones Función main: cuerpo principal del programa NORMALMENTE LA FUNCIÓN MAIN SE ENCUENTRA EN UN FICHERO LLAMADO “main.c”
Lenguaje C: Características • Algunas características son: • El Lenguaje C es sensible al uso de mayúsculas y minúsculas. • Las sentencias (instrucciones) terminan con el símbolo punto y coma ‘;’ y se componen de palabras reservadas o palabras clave, identificadores, constantes, operadores y separadores. • Se pueden establecer bloques de instrucciones mediante el uso de llaves: los símbolos abre-llave ‘{’ y cierra-llave ‘}’. • Los programas se componen de: • Palabras reservadas o palabras clave. • Variables y funciones de la librería estándar. • Variables y funciones definidas por el programador.
Lenguaje C: Características • Palabras reservadas o palabras clave
Lenguaje C: Identificadores • Un identificador permite identificar (nombrar) una variable o una función dentro de un programa. Siguen las siguientes reglas: • Se forma de una secuencia de símbolos pertenecientes SÓLO al conjunto de símbolos: • {‘a’, …, ‘n’, ‘o’, …, ‘z’, ‘A’, …, ‘N’, ‘O’, …, ‘Z’, ‘0’, …, ‘9’, ‘_’}. • El primer carácter o símbolo del identificador NO PUEDE SER un dígito numérico. • Se distinguen las letras mayúsculas de las minúsculas, así, el identificador “suma” de los identificadores “SUMA”, “Suma”, “sUMa”, etc. • Se pueden definir identificadores de hasta 31 símbolos de longitud.
Lenguaje C: Identificadores • Ejemplos de identificadores válidos son: • tiempo, modulo, distancia_total, suma10,_el_producto_, Tiempo, Modulo, Distancia_Total, laSumaDeTodo, elProducto,miVariable, Tu_Variable, estaFuncion, _el_Identificador_ • Ejemplos de identificadores no válidos son: • 10_segundos, el-modulo, la distancia total, $dolares, %porciento,6seis6, • este-no-es-un-identificador-valido, módulo, estaFunción
Lenguaje C: Constantes • Las constantes en C pueden ser de los siguientes tipos: • Constantes numéricas: son valores numéricos, o bien, enteros o en notación científica (punto flotante). • Constantes carácter: cualquier símbolo o carácter alfanumérico encerrado entre apóstrofos (Ejs.: ‘a’, ‘:’, ‘Z’, ‘+’, …). • Cadenas de caracteres: cualquier secuencia de símbolo o caracteres encerrado entre comillas (Ejs.: “esto es una cadena de caracteres”, “Hola Mundo!\n”, …). • Constantes simbólicas: son constantes que se identifican con un identificador.
Lenguaje C: Operadores • Los operadores son símbolos que indican operaciones cuyos operandos son normalmente variables, y/o constantes, así como también funciones. En C hay diferentes tipos de operadores: • Aritméticos: { +, -, /, *, %, ++, --}. • De asignación: { =, +=, -=, *=, /= }. • Relacionales: { ==, <, >, <=, >=, !=}. • Lógicos: { &&, ||, ! }. • Otros: { &, |, ^, <<, >>, …}
Lenguaje C: Separadores y Comentarios • Los separadores permiten que los programas sean legibles al permitir separar los diferentes elementos que aparecen en el programas (identificadores, sentencias, …). Los separadores son los llamados símbolos de formato: el espacio en blanco, el tabulador, y el salto de línea. • En el código fuente de un programa el programador puede introducir comentarios para dar mayor legibilidad al mismo. Los comentarios en Lenguaje C deben estar entre los dos pares de símbolos siguientes: • /*: indica comienzo de comentario • */: indica final de comentario • //: indica que el resto de la línea es un comentario • Ejemplos: • a=b+c; /* aquí se calcula la suma */ • printf(“a=%d\n”,a); // aquí se imprime la suma
Lenguaje C: Variables • Tipos de datos fundamentales en C
Lenguaje C: Variables • Variables Tipo Carácter • Ejemplos: • char identificador1 = ‘c’; • char identificador2, identificador3; • Contienen un único símbolo o carácter ASCII. • Almacenan un byte de información. • 1 byte = 8 bits 28=256 números binarios diferentes
Lenguaje C: Variables • Variables Tipo Entero • Ejemplos: • short identificador1 = 345; • int identificador2 = -2345; • long identificador3= -4352359; • Almacenan números enteros. • Tienen diferentes tamaños: • Entero corto short (<=4 bytes) • Entero normal int (>=4 bytes) • Entero largo long (>= 4 bytes) • Pueden aceptar los siguientes modificadores: • Entero con signo signed • Entero sin signo unsigned
Lenguaje C: Variables • Variables Tipo Real • Ejemplos: • float identificador1 = -4.4567; • double identificador2,identificador3; • long double identificador4= 6.19e+23; • Almacenan números reales. • Tienen diferentes tamaños: • Simple precisión float (4 bytes) • Doble precisión double (8 bytes) • Cuadruple precisión long double (16 bytes)
Lenguaje C: Constantes • Constantes Enteras • Ejemplos: • 8797 // constante int o short • 0x3ae5 // constante int o short • 06573 // constante int o short • 7890L // constante long • 97987UL // constante unsigned long • Constantes Reales • Ejemplos: • 1.23 // constante float o double • 3.87e-3 // constante float o double • -9.005768e-12 // constante float o double
Lenguaje C: Constantes • Constantes Carácter • Ejemplos: • ‘a’ // constante char • ‘g’ // constante char • ‘A’ // constante char • ‘\n’ // constante char (salto de línea) • ‘\0’ // constante char (carácter nulo) • ‘\t’ // constante char (tabulador horizontal) • Constantes Cadena de Carácteres • Ejemplos: • “Informática” // constante cadena (string) • “Hola Mundo!\n” // constante cadena (string) • “Esto es una frase” // constante cadena (string)
Lenguaje C: Constantes • Constantes Enumeración • Ejemplos: • enum Dia {lunes, martes, miercoles, jueves, • viernes, sabado, domingo}; • enum Mes {enero=1, febrero, marzo, abril, mayo, • junio, julio, agosto, septiembre, • octubre, noviembre, diciembre}; • … • Dia diaCita=martes; • Mes mesCita=abril;
Lenguaje C: Constantes • Variables constante • Ejemplos: • const int i=50; • const long double pi= 3,141592653589; • const char unaLetra=‘a’; • const char unaCadena[]=“Esto es una cadena”; • Se forman utilizando el cualificador const
Lenguaje C: Operadores • Operadores Aritméticos • Suma: + • Resta: - • Multiplicación: * • División: / • Módulo (Resto de División Entera): % • Ejemplos: • y=a*x*x+b*x+c; • b=50%12; // el resultado es 2 • z=k*x+(r-909)/((456.78-q)*s); • l=2*pi*radio; • x1=(-b+sqrt(b*b-4*a*c))/(2*a); • x2=(-b-sqrt(b*b-4*a*c))/(2*a);
Lenguaje C: Operadores • Operadores Asignación • Asignación: = • Suma y asignación: += • Resta y asignación: -= • Multiplicación y asignación: *= • División y asignación: /= • Ejemplos: • t=a*s*s+b*s+c; • b+=1; // equivalente a b=b+1; • c-=1; // equivalente a c=c-1; • d*=k; // equivalente a d=d*k; • e/=m; // equivalente a e=e/m;
Lenguaje C: Operadores • Operadores Incrementales • Incremento: ++ • Decremento: -- • Sólo se pueden utilizar con variables de tipo entero o puntero. • Ejemplos: • i++; // equivalente a i=i+1; o a i+=1; • j--; // equivalente a j=j-1; o a j-=1; • a= (i++) + k; // operador de post-incremento • b= (++i) + k; // operador de pre-incremento
Lenguaje C: Operadores • Operadores Relacionales: expresan condiciones lógicas • Igual que: == • Menor que: < • Mayor que: > • Menor o igual que: <= • Mayor o igual que: => • Distinto que: != • Ejemplos: • (a<b) // ¿a es menor que b? Depende de a y b • (r!=8) // ¿r es diferente de 8? Depende de r • SI LA CONDICIÓN ES VERDADERA SE EVALÚA COMO 1, SI ES FALSA SE EVALÚA COMO 0.
Lenguaje C: Operadores • Operadores Lógicos: expresan condiciones lógicas compuestas • Y lógico: && • O lógico: || • NO lógico: ! • Ejemplos: • (a<b) && (k!=l) // ¿a es menor que b Y • // k es diferente de 1? • // Depende de a, b, k y l • (m>=n) || !(q==j) // ¿m es mayor o igual que n O • // q no es igual a j? Depende de • // m, n, q y j • SI LA CONDICIÓN COMPUESTA ES VERDADERA SE EVALÚA COMO 1, SI ES FALSA SE EVALÚA COMO 0.
Lenguaje C: Operadores • Otros operadores: • Más unario: + (indica que una variable es positiva) • Menos unario: - (cambia el signo a una variable numérica) • sizeof (indica el tamaño en bytes de una variable) • Operador coma: ,(permite realizar varias sentencias en una sóla línea) • Operador Dirección: & (permite obtener la dirección de memoria donde se almacena una variable) • Operador Indirección: * (permite acceder a la memoria apuntada por una dirección de memoria) • Ejemplos: • a=-b; • r=sizeof(k);
Lenguaje C: Expresiones • Ejemplos: • x1=(-b+sqrt(b*b-4*a*c))/(2*a); • x2=(-b-sqrt(b*b-4*a*c))/(2*a); • a=b=c=d=e=f=1; // multi-asignación • a=((b>c)&&(c>d))||((c==e)||(e==b)); // condición • // compuesta • zmas=sqrt(r*r-x*x-y*y) // semiesfera positiva • zmenos=sqrt(r*r-x*x-y*y) // semiesfera negativa
Lenguaje C: Sentencias • Una sentencia de un programa en Lenguaje C es una instrucción de un programa. Hay tres tipos de sentencias: • Sentencias Generales • float espacio,espacio_inicial,tiempo,velocidad; • … • espacio=espacio_inicial+velocidad*tiempo; • printf(“Espacio recorrido =%f\n”,espacio); • Sentencia Vacía o Nula • ; // sentencia vacía o nula • Sentencias Compuestas o Bloques • … • { • int i,j,k,m; • … • i=j+k*m • } • …
Lenguaje C: Estructuras de Control • Las estructuras o sentencias de control de flujo en C son las siguientes: • Sentencias Condicionales • if, if-else • switch-case • Operador Condicional ? • Sentencias Iterativas o Bucles • while • do-while • for • Sentencias de Salto Incondicional • continue • break • goto
Lenguaje C: Sentencias Condicionales • Sentencia Condicional if: • … • if(expresion_logica) • sentencia; • … • Si expresion_logica se evalúa como verdadera (1) entonces se ejecuta sentencia. Si expresion_logica se evalúa como falsa (0) entonces sentencia no se ejecuta y el programa continua ejecutándose en la siguiente línea. • Ejemplos:
Lenguaje C: Sentencias Condicionales • Sentencia Condicional if-else: • … • if(expresion_logica) • sentencia_1; • else • sentencia_2; • … • Si expresion_logica se evalúa como verdadera (1) entonces se ejecuta sentencia_1. Si expresion_logica se evalúa como falsa (0) entonces se ejecuta sentencia_2. • Ejemplos:
Lenguaje C: Sentencias Condicionales • Sentencia Condicional if-else: • Ejemplos:
Lenguaje C: Sentencias Condicionales • Sentencia Condicional switch: • … • switch(expresion_entera) • { • case expresion_cte_1: • sentencia_1; • [break;] • case expresion_cte_2: • sentencia_2; • [break;] • … • case expresion_cte_n: • sentencia_3; • [break;] • [default: • sentencia_default;] • } • … • Si expresion_entera es igual a alguna de la expresiones constantes {expresion_cte_1, …, expresion_cte_n} entonces se ejecuta la sentencia correspondiente de entre las sentencias {sentencia_1, …, sentencia_n}. • Si expresión_entera no coincide con ninguna de las expresiones constantes {expresion_cte_1, …, expresion_cte_n} se ejecuta la sentencia sentencia_default asociada con la sentencia default. • Las sentencias break saltan el resto de la sentencia condicional switch.
Lenguaje C: Sentencias Condicionales • Sentencia Condicional switch: • Ejemplo:
Lenguaje C: Sentencias Condicionales • Operador condicional ?: • … • (expresion_logica)? expresion_1: expresion_2; • … • Si expresion_logica se evalúa como verdadera (1) entonces se evalua expresion_1. Si expresion_logica se evalúa como falsa (0) entonces se evalúa expresion_2. • Ejemplo:
Lenguaje C: Sentencias Iterativas o Bucles • Sentencia iterativa while: • … • while(expresion_logica) • sentencia; • … • Mientras expresion_logica se evalúe como verdadera (1) se ejecuta sentencia repetidamente. Cuando expresion_logica se evalúe como falsa (0) entonces la ejecución continua en la siguiente sentencia de programa. • Ejemplos:
Lenguaje C: Sentencias Iterativas o Bucles • Sentencia iterativa do-while: • … • do • sentencia; • while(expresion_logica); • … • Inicialmente se ejecuta sentencia una vez.Luego mientras expresion_logica se evalúe como verdadera (1) sentencia se ejecuta repetidamente. Cuando expresion_logica se evalúe como falsa (0) entonces la ejecución continua en la siguiente sentencia de programa. • Ejemplos:
Lenguaje C: Sentencias Iterativas o Bucles • Sentencia iterativa for: • … • for(sentencia_inicializacion; • expresion_logica; • sentencia_actualizacion) • sentencia; • … • Inicialmente se ejecuta sentencia_inicializacion. A continuación se evalúa expresion_logica. Si se evalúa como verdadera (1) se ejecuta sentencia, y luego sentencia_actualizacion. Luego se vuelve a evaluar expresion_logica y si es verdadera se vuelve a ejecutar sentencia, y luego sentencia_actualizacio. Esto se hará repetidamente hasta que expresion_logica se evalúe como falsa (0), en ese punto el bucle finaliza y la ejecución continua en la siguiente sentencia de programa.
Lenguaje C: Sentencias Iterativas o Bucles • Sentencia iterativa for: • Ejemplo:
Lenguaje C: Sentencias de Salto Incondicional • Sentencia continue: • … • continue; • … • Se utiliza dentro de sentencias repetitivas o bucles para obligar a la finalización de la iteración actual y reevaluación de la expresión lógica que controla la duración del bucle. • Ejemplo:
Lenguaje C: Sentencias de Salto Incondicional • Sentencia break: • … • break; • … • Se utiliza dentro de la sentencia condicional switch, así como en sentencias repetitivas o bucles para obligar a la finalización de la sentencia y continuación del programa en la siguiente sentencia de programa. • Ejemplo:
Lenguaje C: Sentencias de Salto Incondicional • Sentencia goto: • … • goto etiqueta; • … • etiqueta: sentencia; • … • La instrucción goto hace saltar la ejecución del programa a la sentencia sentencia etiquetada con la etiqueta etiqueta. • Ejemplo:
Lenguaje C: Entrada/Salida Básica • Función printf: • … • printf(“cadena_formato”,expresion1,expresion2,…); • … • La función printf permite escribir texto por pantalla. La cadena_formato indica qué es lo que se va a escribir por pantalla en cada utilización de printf. Es posible incluir en cadena_formato referencias a expresiones que tras ser evaluadas deben incluirse en el texto que se imprimirá por pantalla. • Ejemplo: … int a=3; float x=23.0; char c=‘A’; printf(“Hola mundo!!\n”); printf(“Un entero %d\n”,a); printf(“Un real %f \ny un char %c\n”,x,c); …
Lenguaje C: Entrada/Salida Básica • Función printf: Formato
Lenguaje C: Entrada/Salida Básica • Función scanf: • … • scanf(“cadena_formato”,expresion1,expresion2,…); • … • La función scanf permite leer texto desde teclado. La cadena_formato indica qué es lo que se va a leer por teclado en cada utilización de scanf. Es posible incluir en cadena_formato referencias a expresiones que tras ser evaluadas deben incluirse en el texto que se imprimirá por pantalla. • Ejemplo: … int a; float x; char c; scanf(“%d”,&a); /* Lee un entero y lo almacena en a */ scanf(“%f %c”,&x,&c); /* Lee x y c */ …
Lenguaje C: Entrada/Salida Básica • Función scanf: Formato
Lenguaje C: Operaciones Básicas con Bucles • Generación de sucesiones numéricas: • Dada una sucesión x0, x1, ... xn de números reales tal que xi = f(i , xi-1), dicha sucesión se puede calcular mediante el siguiente algoritmo: • // Algoritmo sucesión • int main(int argc, char *argv[]) • { • double x; • int i,n; • … // se lee n • i=0; • x=x0; // x0 es el valor inicial de la sucesión • while(i<=n) • { • printf(“x%d=%f\n”,i,x); • i++; • x=f(i,x); // aquí se escribe la expresión de f(i,x) • } • printf(“x%d=%f\n”,i,x); • return 0; • }
Lenguaje C: Operaciones Básicas con Bucles • Cálculo sumatorios de sucesiones numéricas: • Dada una sucesión x0, x1, ... xn de números reales tal que xi = f(i , xi-1), la suma se puede calcular mediante el siguiente algoritmo: • // Algoritmo sumatorio sucesión • int main(int argc, char *argv[]) • { • double x,suma; • int i,n; • … // se lee n • i=0; • x=x0; // x0 es el valor inicial de la sucesión • suma=x; • while(i<=n) • { • printf(“suma[%d elementos]=%f\n”,i,suma); • i++; • x=f(i,x); // aquí se escribe la expresión de f(i,x) • suma=suma+x; • } • printf(“suma[%d elementos]=%f\n”,i,suma); • return 0; • }
Lenguaje C: Operaciones Básicas con Bucles • Cálculo de productos de sucesiones numéricas: • Dada una sucesión x0, x1, ... xn de números reales tal que xi = f(i , xi-1), la suma se puede calcular mediante el siguiente algoritmo: • // Algoritmo producto sucesión • int main(int argc, char *argv[]) • { • double x,producto; • int i,n; • … // se lee n • i=0; • x=x0; // x0 es el valor inicial de la sucesión • producto=x; • while(i<=n) • { • printf(“producto[%d elementos]=%f\n”,i,producto); • i++; • x=f(i,x); // aquí se escribe la expresión de f(i,x) • producto=producto*x; • } • printf(“producto[%d elementos]=%f\n”,i,producto); • return 0; • }
Lenguaje C: Ejercicios Propuestos • [Segundo Grado] Realice un algoritmo en Lenguaje C que calcule las soluciones a una ecuación de segundo grado ax2+bx+c=0, teniendo en cuenta tanto las soluciones reales como las complejas. • [Pares] Realice un algoritmo en Lenguaje C que calcule la siguiente sucesión x0=0, x1=2, x2=4, …, xn=2n tal que n es un número entero. • [Impares] Realice un algoritmo en Lenguaje C que calcule la siguiente sucesión x0=1, x1=3, x2=5, …, xn=2n+1 tal que n es un número entero. • [Factorial] Realice un algoritmo en Lenguaje C que calcule la siguiente sucesión x1=1!, x2=2!, x3=3!, x4=4!, … xn=n!, tal que n es un número entero. • [Fibonacci] Realice un algoritmo en Lenguaje C que calcule la sucesión de Fibonacci f1=1, f2=1, f3, f4, f5, … fn tal que fi=fi-2+fi-1 y siendo n un número entero.