Webcd

3,040 views

Published on

Published in: Business, Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,040
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
108
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Webcd

  1. 1. c++
  2. 2. Lenguaje C <ul><li>Características: </li></ul><ul><li>Lenguaje de Alto Nivel </li></ul><ul><li>Compilado </li></ul><ul><li>Estructurado </li></ul><ul><li>Es case sensitive </li></ul><ul><li>Hace uso del concepto de función </li></ul><ul><li>Portabilidad de los archivos fuente </li></ul>
  3. 3. Lenguaje C <ul><li>Características: </li></ul><ul><li>C está constituido por tres elementos: </li></ul><ul><ul><li>Compilador: Traduce código fuente a código máquina </li></ul></ul><ul><ul><li>Preprocesador: Facilita la tarea del compilador, permite sustituir constantes simbólicas e incluir archivos </li></ul></ul><ul><ul><li>Librería Estándar: Funciones preprogramadas agrupadas en un conjunto de librerías de código objeto </li></ul></ul>
  4. 4. Lenguaje C .c Fichero Fuente Preprocesamiento .c Paso a Ensamblador .s .o Ensamblar Compilación .o .o .o .o EXE Enlazado .a Librerías Fichero Ejecutable
  5. 5. Lenguaje C <ul><li>Estructura básica de un programa: </li></ul><ul><li>Inclusión de librerías </li></ul><ul><li>Declaraciones globales </li></ul><ul><li>main ( ) { </li></ul><ul><li>variables locales </li></ul><ul><li>bloque de instrucciones </li></ul><ul><li>} </li></ul><ul><li>funcion1 ( ) { </li></ul><ul><li>variables locales </li></ul><ul><li>bloque de instrucciones </li></ul><ul><li>} </li></ul>Un programa es un conjunto de instrucciones que -generalmente- se ejecutan de manera secuencial Una función es un subprograma, que es llamado por el programa principal
  6. 6. Lenguaje C <ul><li>Comentarios: </li></ul><ul><li>Para poner comentarios en un programa escrito en C se usan los símbolos: /* y */ o // </li></ul><ul><li>/* Este es un ejemplo de comentario */ </li></ul><ul><li>/* Un comentario también puede </li></ul><ul><li>estar escrito en varias líneas */ </li></ul><ul><li>variable_1 = variable_2; // En esta línea se asigna a </li></ul><ul><li>// variable_1 el valor </li></ul><ul><li>// contenido en variable_2 </li></ul>
  7. 7. Lenguaje C <ul><li>Palabras Claves: </li></ul><ul><li>Representan un conjunto de identificadores reservados </li></ul><ul><li>auto double int struct </li></ul><ul><li>break else long switch </li></ul><ul><li>case enum register typedef </li></ul><ul><li>char extern return union </li></ul><ul><li>const float short unsigned </li></ul><ul><li>continue for signed void </li></ul><ul><li>default goto sizeof volatile </li></ul><ul><li>do if static while </li></ul>
  8. 8. Lenguaje C <ul><li>Identificadores: </li></ul><ul><li>Nombre dado a las variables o funciones. </li></ul><ul><li>Un identificador se forma con una secuencia de letras (minúsculas de la a a la z; mayúsculas de la A a la Z; y dígitos del 0 al 9) </li></ul><ul><li>El carácter subrayado o underscore (_) se considera como una letra más </li></ul><ul><li>Un identificador no puede contener espacios en blanco, ni otros caracteres distintos de los citados (*, ; . : - +) </li></ul>
  9. 9. Lenguaje C <ul><li>Identificadores: </li></ul><ul><li>El primer carácter de un identificador debe ser siempre una letra o un (_) </li></ul><ul><li>Se hace distinción entre letras mayúsculas y minúsculas </li></ul><ul><li>ANSI C permite definir identificadores de hasta 31 caracteres de longitud </li></ul>
  10. 10. Lenguaje C <ul><li>Identificadores </li></ul><ul><li>Ejemplo: </li></ul><ul><li>CI_v velocidad_de_la_luz </li></ul><ul><li>Distancia1 un_valor </li></ul><ul><li>caso_A PI </li></ul><ul><li>_num Tiempo </li></ul>Es aconsejable elegir los nombres de las funciones y variables de acuerdo a lo que representan
  11. 11. Lenguaje C <ul><li>Constantes: </li></ul><ul><li>Mantienen su valor a lo largo de todo el programa </li></ul><ul><li>Constantes numéricas . Son valores numéricos, enteros o de punto flotante. Se permiten también constantes octales y hexadecimales </li></ul><ul><li>Constantes carácter . Cualquier carácter individual encerrado entre apóstrofos ('a' 'Y' ')' '+') </li></ul><ul><li>Cadenas de caracteres . Un conjunto de caracteres alfanuméricos encerrados entre comillas </li></ul>
  12. 12. Lenguaje C <ul><li>Constantes: </li></ul><ul><li>Constantes simbólicas . Poseen un identificador y se definen mediante la palabra clave const </li></ul><ul><li>23484 Constante tipo int </li></ul><ul><li>011 Constante octal (9 en base 10) </li></ul><ul><li>1.23 Constante tipo double </li></ul><ul><li>23.963f Constante tipo float </li></ul><ul><li>'7' Constante carácter. Valor ASCII 55 </li></ul><ul><li>&quot;Informática I&quot; Constante de carácteres </li></ul><ul><li>const int i = 10; Constante simbólica </li></ul>
  13. 13. Lenguaje C <ul><li>Constantes: </li></ul><ul><li>Para indicar al compilador que se trata de una constante, se usa la directiva #define : </li></ul><ul><li>#define <identificador> <valor> </li></ul>
  14. 14. Lenguaje C <ul><li>Constantes de Tipo Enumeración </li></ul><ul><li>Define los posibles valores de un identificador o variable. </li></ul><ul><li>Ejemplo: </li></ul><ul><li>enum dia = { lunes, martes, miercoles, jueves , viernes, sabado, domindo}; </li></ul><ul><li>enum dia dia1, dia2; </li></ul><ul><li>dia1 = martes; </li></ul><ul><li>enum cartas {oros, copas, espadas, bastos} carta1, carta2; </li></ul>Estos valores representan constantes de tipo int: lunes es 0 , martes es 1 , miercoles e 2 , y así sucesivamente
  15. 15. Lenguaje C <ul><li>Tipos de Datos: </li></ul>Tipo Tama ñ o Rango de valores char 1 byte -128 a 127 int 2 bytes -32768 a 32767 float 4 bytes 3.4 E-38 a 3.4 E+38 double 8 bytes 1.7 E-308 a 1.7 E+308
  16. 16. Lenguaje C <ul><li>Calificadores de Tipo: </li></ul><ul><li>Modifican el rango de valores de un determinado tipo </li></ul><ul><li>Signed: La variable lleva signo </li></ul>Tama ñ o Rango de valores signed char 1 byte -128 a 127 signed int 2 bytes -32768 a 32767
  17. 17. Lenguaje C <ul><li>Calificadores de Tipo: </li></ul><ul><li>Unsigned: La variable no lleva signo </li></ul><ul><li>Short: Rango de valores en formato corto </li></ul>Tamaño Rango de valores unsigned char 1 byte 0 a 255 unsigned int 2 bytes 0 a 65535 Tamaño Rango de valores short char 1 byte -128 a 127 short int 2 bytes -32768 a 32767
  18. 18. Lenguaje C <ul><li>Calificadores de Tipo: </li></ul><ul><li>Long: Rango de valores en formato largo </li></ul><ul><li>También es posible combinar calificadores entre sí: </li></ul><ul><li>signed long int = long int = long </li></ul><ul><li>unsigned long int = unsigned long </li></ul><ul><li>4 bytes 0 a 4.294.967.295 (El mayor entero de C) </li></ul>Tamaño Rango de valores long char 4 bytes -2.147.483.648 a 2.147.483.647 long int 10 bytes -3.36 E-4932 a 1.18 E+4932
  19. 19. Lenguaje C <ul><li>Variables: </li></ul><ul><li>Una variable es una posición de memoria referenciada por un identificador. Su valor puede cambiar durante la ejecución del programa. </li></ul><ul><li>Declaración e Inicialización: </li></ul><ul><li><tipo> <identificador> = valor; </li></ul><ul><li><tipo> <identificador1>, <identificador2>, <identificador3>; </li></ul>Toda variable debe ser declarada antes de utilizarse en el programa
  20. 20. Lenguaje C <ul><li>Variables - Ejemplo: </li></ul><ul><li>/* Uso de las variables para la suma de dos valores */ </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int num1 = 4, num2 = 6, num3; </li></ul><ul><li>num3 = num1 + num2; </li></ul><ul><li>} </li></ul>
  21. 21. Lenguaje C <ul><li>Variables - ¿Dónde se declaran? </li></ul><ul><li>Pueden ser declaradas antes de la función principal: Variables Globales </li></ul><ul><li>Pueden ser declaradas dentro de una función: Variables Locales </li></ul><ul><li>int a; /* variable global */ </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int b = 4; /* variable local */ </li></ul><ul><li>} </li></ul>Pueden ser utilizadas en cualquier parte del programa y viven durante toda la ejecución del mismo. Sólo pueden ser utilizadas por la función que la declara. Se crean cuando se llama a la función y se destruye cuando ésta finaliza.
  22. 22. Lenguaje C <ul><li>Variables - Duración y Visibilidad: </li></ul><ul><li>Se refiere al modo de almacenamiento, el cual determina cuándo se crea una variable , cuándo deja de existir y desde dónde se puede acceder a ella </li></ul><ul><li>auto: Son variables locales. Sólo son visibles en el bloque donde están declaradas, se crean cuando comienza a ejecutarse el bloque y se destruyen cuando éste finaliza su ejecución. No son inicializadas por defecto. </li></ul>
  23. 23. Lenguaje C <ul><li>Variables Auto - Ejemplo: </li></ul><ul><li>{ </li></ul><ul><li>int i = 1, j = 2; //se declaran e inicializan i y j </li></ul><ul><li>... </li></ul><ul><li>{ </li></ul><ul><li>float a = 7, j = 3; // se declara una nueva variable j </li></ul><ul><li>... </li></ul><ul><li>j = j + a; // aquí j es float </li></ul><ul><li>... // la variable int j es invisible </li></ul><ul><li>... // la variable i es visible </li></ul><ul><li>} </li></ul><ul><li>... // fuera del bloque, a ya no existe </li></ul><ul><li>... // la variable j = 2 existe y es entera </li></ul><ul><li>} </li></ul>
  24. 24. Lenguaje C <ul><li>Variables - Duración y Visibilidad: </li></ul><ul><li>extern: Son variables globales. Son visibles por todas las funciones que están entre la definición y el fin del fichero. Existen durante toda la ejecución del programa. </li></ul>
  25. 25. Lenguaje C <ul><li>Variables Extern - Ejemplo: </li></ul><ul><li>int i = 1, j, k; // se declaran antes de main() </li></ul><ul><li>int func1(int, int); </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int i = 3; // i = 1 se hace invisible </li></ul><ul><li>... // j, k son visibles </li></ul><ul><li>} </li></ul><ul><li>int func1(int i, int m) </li></ul><ul><li>{ </li></ul><ul><li>int k = 3; // k = 0 se hace invisible </li></ul><ul><li>... // i = 1 es invisible </li></ul><ul><li>} </li></ul>
  26. 26. Lenguaje C <ul><li>Variables - Duración y Visibilidad: </li></ul><ul><li>static: Las variables declaradas static dentro de un bloque conservan su valor en las llamadas sucesivas a dicho bloque. La inicialización sólo se realiza la primera vez. </li></ul>
  27. 27. Lenguaje C <ul><li>Variables Static - Ejemplo: </li></ul><ul><li>int Series() </li></ul><ul><li>{ </li></ul><ul><li>static int contador; </li></ul><ul><li>contador = contador +10; </li></ul><ul><li>return contador; </li></ul><ul><li>} </li></ul>
  28. 28. Lenguaje C <ul><li>Variables - Conversiones </li></ul><ul><li>Casting (Conversión Explicita): Mecanismo usado para cambiar de tipo expresiones y variables. </li></ul><ul><li>int a; </li></ul><ul><li>float b; </li></ul><ul><li>char c; </li></ul><ul><li>b = 65.0; </li></ul><ul><li>a = (int)b; /*a vale 65 */ </li></ul><ul><li>c = (char)a; /* c vale 65 (Código ASCII de ‘A’) */ </li></ul>
  29. 29. Lenguaje C <ul><li>Variables - Conversiones </li></ul><ul><li>Conversión Implícita: Ocurre cuando en una expresión se combinan variables de diferentes tipos. </li></ul><ul><li>int a; </li></ul><ul><li>float b; </li></ul><ul><li>long double > double > float > unsigned long > long </li></ul><ul><li>> unsigned int > int > char </li></ul><ul><li>int x; </li></ul><ul><li>double i = 2.5, j = 5.3; </li></ul><ul><li>x = ((i * j) – j) + 1; </li></ul>a + b Ocurre una promoción : a es promovida al tipo de b Conversión por asignación
  30. 30. Lenguaje C <ul><li>Sentencias de Escape: </li></ul><ul><li>Para definir las constantes de tipo carácter asociadas a caracteres especiales se usan secuencias de escape: </li></ul>
  31. 31. Lenguaje C <ul><li>Inclusión de Archivos: </li></ul><ul><li>La directiva #include permite añadir librerías o funciones que se encuentran en otros archivos. </li></ul><ul><ul><li>Indicando al compilador la ruta donde se encuentra el archivo </li></ul></ul><ul><ul><li>#include &quot;C:includesfuncion.h&quot; </li></ul></ul><ul><ul><li>Indicando que se encuentran en el directorio por defecto del compilador </li></ul></ul><ul><ul><li>#include <funcion.h> </li></ul></ul>
  32. 32. Lenguaje C - Operadores <ul><li>Operadores: </li></ul><ul><li>Son signos especiales que asocian variables y/o constantes para realizar una determinada operación </li></ul><ul><li>Operadores Aritméticos (+, -, *, /, %) </li></ul><ul><li>Operadores de Asignación (=, +=, -=, *=, /=) </li></ul><ul><li>Operadores Relacionales (==, <, >,<=, >=, !=) </li></ul><ul><li>Operadores Lógicos (&&, ||, !) </li></ul><ul><li>espacio = espacio_inicial + 0.5 * aceleracion * tiempo; </li></ul>
  33. 33. Lenguaje C - Operadores <ul><li>Operadores Aritméticos: </li></ul><ul><li>En C se utilizan cinco operadores aritméticos: </li></ul><ul><li>Suma: + </li></ul><ul><li>Resta: - </li></ul><ul><li>Multiplicación: * </li></ul><ul><li>División: / </li></ul><ul><li>Resto: % </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li><variable1> <operador> <variable2> </li></ul>Estos operadores se consideran binarios % (resto de la división entera) sólo se aplica a variables enteras
  34. 34. Lenguaje C - Operadores <ul><li>Operadores Aritméticos: </li></ul><ul><li>Incremento: ++ </li></ul><ul><li>Decremento: -- </li></ul><ul><li>Cambio de signo: - </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li><variable> <operador> </li></ul><ul><li><operador> <variable> </li></ul>Estos operadores se consideran unarios
  35. 35. Lenguaje C - Operadores <ul><li>Aritméticos - Ejemplo: </li></ul><ul><li>/* Uso de los operadores aritméticos */ </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int a = 1, b = 2, c = 3, r1, r2; </li></ul><ul><li>r1 = a + b; </li></ul><ul><li>r2 = c - a; </li></ul><ul><li>b++; </li></ul><ul><li>} </li></ul>
  36. 36. Lenguaje C - Operadores <ul><li>Aritméticos - Ejemplo: </li></ul><ul><li>int i = 2, k = 4, m, n; </li></ul><ul><li>m = i++; // después de ejecutarse esta </li></ul><ul><li> // sentencia m = 2 e i = 3 </li></ul><ul><li>n = ++k; // después de ejecutarse esta </li></ul><ul><li>// sentencia n = 5 y k = 5 </li></ul>
  37. 37. Lenguaje C - Operadores <ul><li>Operadores de Asignación </li></ul><ul><li>Atribuyen a una variable -depositan en la zona de memoria correspondiente a dicha variable- el resultado de una expresión o el valor de otra variable </li></ul><ul><li>Operador de Igualdad: </li></ul><ul><li>nombre_variable = expresión; </li></ul><ul><li>a + b = c; // Esta asignación es incorrecto </li></ul>Se evalúa expresión y el resultado se copia en nombre_variable
  38. 38. Lenguaje C - Operadores <ul><li>Otros Operadores de Asignación: </li></ul><ul><li>variable op= expresion; // op = +, -, *, /, % </li></ul><ul><li>variable = variable op expresión; </li></ul>+= Suma -= Resta *= Multiplicación /= División %= Resto (Módulo)
  39. 39. Lenguaje C - Operadores <ul><li>De Asignación - Ejemplo: </li></ul><ul><li>/* Uso de los operadores de asignación */ </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int a = 1, b = 2, c = 3; </li></ul><ul><li>float x = 1.3; </li></ul><ul><li>a += 5; </li></ul><ul><li>c -= 1; </li></ul><ul><li>b *= 3; </li></ul><ul><li>x *= 3.0 * b - 1.0; </li></ul><ul><li>} </li></ul>
  40. 40. Lenguaje C - Operadores <ul><li>Operadores Relacionales: </li></ul><ul><li>Permiten estudiar si se cumplen una o más condiciones. </li></ul><ul><li>Sintaxis: </li></ul><ul><li>expresion1 op expresion2 </li></ul>Son operadores binarios Se evalúan expresion1 y expresion2 , y se comparan los valores resultantes. Si la condición representada por el operador relacional se cumple, el resultado es 1 ; en caso contrario será 0 > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que == Igual que != Distinto que
  41. 41. Lenguaje C - Operadores <ul><li>Operadores Relacionales: </li></ul><ul><li>En el lenguaje natural, existen varias palabras o formas de indicar si se cumple o no una determinada condición: </li></ul><ul><li>(yes o no), (on off), (true, false) </li></ul><ul><li>E C 0 representa la condición false , y cualquier número distinto de 0 equivale a la condición true (por defecto 1 ) </li></ul>
  42. 42. Lenguaje C - Operadores <ul><li>Relacionales - Ejemplo: </li></ul><ul><li>(2 == 1) // resultado = 0 porque la condición no se cumple </li></ul><ul><li>(3 <= 3) // resultado = 1 porque la condición se cumple </li></ul><ul><li>(3 < 3) // resultado = 0 porque la condición no se cumple </li></ul><ul><li>(1 != 1) // resultado = 0 porque la condición no se cumple </li></ul>
  43. 43. Lenguaje C - Operadores <ul><li>Operadores Lógicos: </li></ul><ul><li>Permiten combinar los resultados de los operadores relacionales, comprobando que se cumplen simultáneamente varias condiciones, </li></ul><ul><li> expresion1 op expresion2 </li></ul>Son operadores binarios && AND || OR ! NOT
  44. 44. Lenguaje C - Operadores <ul><li>Lógicos - Ejemplo: </li></ul><ul><li>(2 == 1) || (-1 == -1) </li></ul><ul><li>(2 == 2) && (3 == -1) </li></ul><ul><li>((2 == 2) && (3 == 3)) || (4 == 0) </li></ul><ul><li>((6 == 6) || (8 == 0)) && ((5 == 5) && (3 == 2)) </li></ul>
  45. 45. Lenguaje C - Operadores <ul><li>Jerarquía de Operadores </li></ul>Las operaciones con mayor precedencia se realizan antes que las de menor precedencia. Si en una operación encontramos signos del mismo nivel de precedencia, dicha operación se realiza de izquierda a derecha ( ) Mayor precedencia ++ -- * / % + - Menor precedencia
  46. 46. Lenguaje C - Operadores <ul><li>Jerarquía de Operadores </li></ul>Precedencia Asociatividad ( ) [ ] izda dcha ++ -- ! +(unario) -(unario) dcha a izda * / % izda dcha + - izda dcha < <= > >= izda dcha == != izda dcha && izda dcha || izda dcha = += -= *= /= dcha a izda
  47. 47. Lenguaje C - Expresiones <ul><li>Una expresión es una combinación de variables (constantes) y operadores. </li></ul><ul><li>Una expresión es equivalente al resultado que proporciona el aplicar sus operadores a sus operandos </li></ul><ul><li>Una expresión puede estar formada por otras expresiones más sencillas , y puede contener paréntesis de varios niveles agrupando distintos términos </li></ul>
  48. 48. Lenguaje C - Expresiones Expresiones - Ejemplo:
  49. 49. Salida y Entrada por Consola <ul><li>Salida por Consola: </li></ul><ul><li>Función printf( ) </li></ul><ul><li>Imprime en pantalla valores numéricos, constantes, caracteres o cadenas de texto. Su prototipo es: </li></ul><ul><li>int printf(&quot;cadena_de_control&quot;, arg1, arg2, ...) </li></ul><ul><li>int i = 1; </li></ul><ul><li>double tiempo = 20; </li></ul><ul><li>float masa = 25.67; </li></ul><ul><li>printf(&quot;Resultado %d: tiempo= %lf - Masa = %f &quot;, i, tiempo, masa); </li></ul>imprime el texto contenido en cadena_de_control junto con el valor de los otros argumentos, de acuerdo con los formatos incluidos en cadena_de_control . arg1 comienza con % y termina con el carácter de conversión
  50. 50. Salida y Entrada por Consola <ul><li>Salida por Consola: </li></ul><ul><li>Función printf( ): Caracteres de Conversión </li></ul>%c Un ú nico car á cter %d, i% Un entero con signo, en base decimal %u Un entero sin signo, en base decimal %o Un entero en base octal %x, %X Un entero en base hexadecimal %e, %g Un n ú mero real en coma flotante, con exponente %f Un n ú mero real en coma flotante, sin exponente %s Una cadena de caracteres %p Un puntero o direcci ó n de memoria
  51. 51. Salida y Entrada por Consola <ul><li>Función printf( ): </li></ul><ul><li>Entre el signo de % y el carácter de conversión pueden haber uno o más elementos: </li></ul><ul><li>% [signo] [longitud] [.precisión] [l/L] conversión </li></ul><ul><ul><li>Un signo (-), que indica alineamiento por la izquierda </li></ul></ul><ul><ul><li>Un número entero positivo, que indica la anchura mínima del campo en caracteres </li></ul></ul>
  52. 52. Salida y Entrada por Consola <ul><li>Función printf( ): </li></ul><ul><li>% [signo] [longitud] [.precisión] [l/L] conversión </li></ul><ul><ul><li>Un punto (.), que separa la anchura de la precisión </li></ul></ul><ul><ul><li>Un número entero positivo, la precisión , nº máximo de caracteres a imprimir en una cadena, el nº de decimales de un float o double </li></ul></ul><ul><ul><li>Un cualificador : una (h) para short o una (l) para long y double. </li></ul></ul>
  53. 53. Entrada y Salida por Consola <ul><li>Entrada por Consola: </li></ul><ul><li>Función scanf( ) </li></ul><ul><li>Permite leer datos de la entrada estándar (teclado). Su prototipo es: </li></ul><ul><li>int scanf(“cadena_de_control&quot;, &arg1, &arg2, ...); </li></ul><ul><li>int n; </li></ul><ul><li>double distancia; </li></ul><ul><li>char nombre[20]; </li></ul><ul><li>scanf(&quot;%d%lf%s&quot;, &n, &distancia, nombre); </li></ul>Caracteres de conversión &arg1: representa la posición de memoria en la que se encuentra la variable arg
  54. 54. Salida y Entrada por Consola <ul><li>Entrada por Consola: </li></ul><ul><li>Función scanf( ): Caracteres de Conversión </li></ul>%c Un ú nico car á cter %d, i% Un entero con signo, en base decimal %u Un entero sin signo, en base decimal %o Un entero en base octal %x, %X Un entero en base hexadecimal %e, %E, %f, %g, %G Un n ú mero real en coma flotante, con exponente %s Una cadena de caracteres h, l Para short, long y double L Para long double
  55. 55. Salida y Entrada por Consola <ul><li>Función scanf( ) - Ejemplo: </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>char nombre[15]; </li></ul><ul><li>int edad; </li></ul><ul><li>printf(&quot;Introduce tu nombre: &quot;); </li></ul><ul><li>scanf(&quot;%s&quot;,nombre); </li></ul><ul><li>printf(&quot;Introduce tu edad: &quot;); </li></ul><ul><li>scanf(&quot;%d&quot;,&edad); </li></ul><ul><li>} </li></ul>
  56. 56. Salida y Entrada por Consola <ul><li>Entrada por Consola: </li></ul><ul><li>Función scanf( ) </li></ul><ul><li>En la cadena de control de scanf() pueden introducirse corchetes [] para detectar ciertos caracteres </li></ul><ul><li>char s[30]; </li></ul><ul><li>scanf(&quot;%[AB ]&quot;, s); /* Lee sólo los caracteres indicados */ </li></ul><ul><li>scanf(&quot; %[^ ]&quot;, s); /* Lee todos los caracteres distintos a */ </li></ul>
  57. 57. Salida y Entrada por Consola <ul><li>Funciones putchar( ) y getchar( ) </li></ul><ul><li>Permiten respectivamente imprimir y leer un sólo carácter cada vez, en la salida o entrada estándar </li></ul><ul><li>Prototipos: </li></ul><ul><li>int putchar(int ch); </li></ul><ul><li>int getchar(void); </li></ul><ul><li>putchar( 'a' ); /* Escribe el carácter a . Equivale a printf(&quot;a&quot;); */ </li></ul><ul><li>char c = getchar(); /* Lee un carácter y lo asigna a c . </li></ul><ul><li> Equivale a scanf(&quot;%c&quot;, &c); */ </li></ul>Lo convierte en unsigned int Lee como unsigned int
  58. 58. Salida y Entrada por Consola <ul><li>Funciones putchar( ) y getchar( ) - Ejemplo: </li></ul><ul><ul><li>main( ) main( ) </li></ul></ul><ul><ul><li>{ { </li></ul></ul><ul><ul><li>char ch; putchar( 'A' ); </li></ul></ul><ul><ul><li>do putchar( ' ' ); </li></ul></ul><ul><ul><li>{ putchar( 'B' ); </li></ul></ul><ul><ul><li> ch = getchar( ); } </li></ul></ul><ul><ul><li> putchar( '-' ); </li></ul></ul><ul><ul><li>}while(ch != ' ' ) </li></ul></ul><ul><ul><li>} </li></ul></ul>
  59. 59. Salida y Entrada por Consola <ul><li>Funciones getche( ) y getch( ): </li></ul><ul><li>Proporciona entrada interactiva de caracteres </li></ul><ul><li>Prototipos: int getche(void); </li></ul><ul><li>int getch(void); </li></ul><ul><li>Funciones gets( ) y puts( ): </li></ul><ul><li>char *gets(char *str); /* Lee caracteres de la entrada estándar hasta que se introduce retorno de carro */ </li></ul><ul><li>int puts(char*str); /* Muestra en pantalla la cadena a la </li></ul><ul><li> que apunta str */ </li></ul>Lee como unsigned int y lo transforma en int Utilizan el archivo de cabecera conio.h
  60. 60. Salida y Entrada por Consola <ul><li>Funciones getche( ) y getch( ) - Ejemplo: </li></ul><ul><ul><ul><ul><li>#include <stdio.h> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>#include <conio.h> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>#include <ctype.h> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>void main() </li></ul></ul></ul></ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>char ch; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>do </li></ul></ul></ul></ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>ch = getch( ); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>putchar(toupper(ch)); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>}while(ch != 'q' ); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul>
  61. 61. Salida y Entrada por Consola <ul><li>Funciones gets( ) y puts( ) - Ejemplo: </li></ul><ul><li>#include <stdio.h> #include <stdio.h> </li></ul><ul><li>void main( ) void main( ) </li></ul><ul><li>{ { </li></ul><ul><li>char *p, str[80]; puts(“uno”); </li></ul><ul><li>printf(“Introduzca una cadena: ”); puts(“dos”); </li></ul><ul><li>p = gets(str); puts(“tres”); </li></ul><ul><li>if(p) /* si no es nulo*/ } </li></ul><ul><li> printf(“p: %s cadena: %s”, p, str); </li></ul><ul><li>} </li></ul>
  62. 62. Estructuras Condicionales <ul><li>Permiten variar el flujo del programa de acuerdo a la evaluación de ciertas condiciones </li></ul><ul><li>Estructura IF </li></ul><ul><li>if (condición) </li></ul><ul><li> sentencia; </li></ul><ul><li>Estructura IF … ELSE </li></ul><ul><li>if (condición) </li></ul><ul><li> sentencia1; </li></ul><ul><li>else </li></ul><ul><li> sentencia2; </li></ul>La sentencia se ejecuta sólo si se cumple la condición Si se cumple la condición se ejecuta sentencia1 , en caso contrario se ejecuta sentencia2
  63. 63. Estructuras Condicionales <ul><li>Estructura IF … ELSE - Ejemplo: </li></ul><ul><ul><ul><li>#include <stdio.h> </li></ul></ul></ul><ul><ul><ul><li>main() </li></ul></ul></ul><ul><ul><ul><li>{ </li></ul></ul></ul><ul><ul><ul><li>int usuario, clave = 18276; </li></ul></ul></ul><ul><ul><ul><li>printf(&quot;Introduce tu clave: &quot;); </li></ul></ul></ul><ul><ul><ul><li>scanf(&quot;%d&quot;,&usuario); </li></ul></ul></ul><ul><ul><ul><li>if (usuario == clave) </li></ul></ul></ul><ul><ul><ul><li> printf(&quot;Acceso permitido&quot;); </li></ul></ul></ul><ul><ul><ul><li>else </li></ul></ul></ul><ul><ul><ul><li> printf(&quot;Acceso denegado&quot;); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  64. 64. Estructuras Condicionales <ul><li>Estructura IF … ELSE - Múltiples: </li></ul><ul><ul><ul><li>if (condición) </li></ul></ul></ul><ul><ul><ul><li> sentencia1; </li></ul></ul></ul><ul><ul><ul><li>else if (condición) </li></ul></ul></ul><ul><ul><ul><li> sentencia2; </li></ul></ul></ul><ul><ul><ul><li>else if (condición) </li></ul></ul></ul><ul><ul><ul><li> sentencia3; </li></ul></ul></ul><ul><ul><ul><li>else </li></ul></ul></ul><ul><ul><ul><li> sentencia4; </li></ul></ul></ul>Si una condición se cumple, se ejecuta la sentencia correspondiente y salta hasta el final de la estructura para continuar con el programa Es posible utilizar llaves para ejecutar más de una sentencia si se cumple una condición Realiza una ramificación múltiple, ejecutando una entre varias partes del programa según se cumpla una entre n condiciones
  65. 65. Estructuras Condicionales <ul><li>Estructura IF … ELSE - Múltiples - Ejemplo: </li></ul><ul><ul><ul><li>main( ) </li></ul></ul></ul><ul><ul><ul><li>{ </li></ul></ul></ul><ul><ul><ul><li>float monto; </li></ul></ul></ul><ul><ul><ul><li>printf(“Indique el monto total de la compra: &quot;); </li></ul></ul></ul><ul><ul><ul><li>scanf(&quot;%f&quot;, &monto); </li></ul></ul></ul><ul><ul><ul><li>if (monto < 10000) </li></ul></ul></ul><ul><ul><ul><li> printf(&quot;Lo siento, no tiene descuento.&quot;); </li></ul></ul></ul><ul><ul><ul><li>else if (monto < 20000) </li></ul></ul></ul><ul><ul><ul><li> printf(“ Descuento de 5%&quot;); </li></ul></ul></ul><ul><ul><ul><li>else if (monto < 30000) </li></ul></ul></ul><ul><ul><ul><li> printf(“Descuento de 10%&quot;); </li></ul></ul></ul><ul><ul><ul><li>else </li></ul></ul></ul><ul><ul><ul><li> printf(“Descuento de 20%&quot;); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  66. 66. Estructuras Condicionales <ul><li>Estructura IF Anidadas: </li></ul><ul><li>Una sentencia if puede incluir otros if dentro de la parte correspondiente a su sentencia , A estas sentencias se les llama sentencias anidadas </li></ul><ul><ul><ul><ul><li>if (a >= b) if (a >= b) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>if (b != 0.0) if (b != 0.0) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>c = a/b; c = a/b; </li></ul></ul></ul></ul><ul><ul><ul><ul><li> else </li></ul></ul></ul></ul><ul><ul><ul><ul><li> c = 0.0; </li></ul></ul></ul></ul>Regla: Un else pertenece al if más cercano if (a >= b) { if (b != 0.0) c = a/b; } else c = 0.0;
  67. 67. Estructuras Condicionales <ul><li>Sentencia SWITCH </li></ul><ul><li>switch (expresion) </li></ul><ul><li>{ </li></ul><ul><li> case expresion_cte_1: </li></ul><ul><li>sentencias; </li></ul><ul><li>break; </li></ul><ul><li> case expresion_cte_2: </li></ul><ul><li>sentencias; </li></ul><ul><li>break; </li></ul><ul><li> default: </li></ul><ul><li>sentencias; </li></ul><ul><li>} </li></ul>Cada case puede incluir una o más sentencias sin necesidad de ir entre llaves, se ejecutan todas hasta que se encuentra la sentencia break La constante evaluada sólo puede ser de tipo entero o carácter default ejecutará sus sentencias en caso de que la opción seleccionada no corresponda a ningún case
  68. 68. Expresiones Condicionales <ul><li>Sentencia SWITCH - Variaciones: </li></ul><ul><li>switch (expresion) { </li></ul><ul><li>case expresion_cte_1: </li></ul><ul><li>sentencia_1; </li></ul><ul><li>break; </li></ul><ul><li>case expresion_cte_2: case expresion_cte_3: </li></ul><ul><li>sentencia_2; </li></ul><ul><li>break; </li></ul><ul><li>default: </li></ul><ul><li>sentencia_3; </li></ul><ul><li>} </li></ul><ul><li>Sentencia SWITCH - Variaciones: </li></ul><ul><li>switch (expresion) </li></ul><ul><li>{ </li></ul><ul><li>case expresion_cte_1: </li></ul><ul><li> sentencia_1; </li></ul><ul><li>case expresion_cte_2: </li></ul><ul><li> sentencia_2; </li></ul><ul><li>... </li></ul><ul><li>case expresion_cte_n: </li></ul><ul><li> sentencia_n; </li></ul><ul><li>default: </li></ul><ul><li>sentencia; </li></ul><ul><li>} </li></ul>
  69. 69. Estructuras Condicionales <ul><li>Sentecia SWITCH - Ejemplo: </li></ul><ul><ul><ul><ul><li>#include <stdio.h> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>main( ) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>int dia; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>printf(&quot;Introduce el día: &quot;); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>scanf(&quot;%d&quot;, &dia); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>switch(dia) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>case 1: printf(&quot; Lunes &quot;); break; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>case 2: printf(&quot; Martes &quot;); break; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>… </li></ul></ul></ul></ul><ul><ul><ul><ul><li>case 6: printf(&quot; Sábado &quot;); break; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>case 7: printf(&quot;Domingo&quot;); break; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>default: printf(“Día incorrecto ”); break; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul>
  70. 70. Estructuras Cíclicas <ul><li>Estructura WHILE </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li>while (condición) </li></ul><ul><li>sentencia; </li></ul><ul><li>Con esta sentencia se controla la condición antes de entrar en el bucle </li></ul>Si en el interior del bucle hay más de una sentencia, deberán ir entre llaves para que se ejecuten como un bloque Si la condición se cumple entra al ciclo
  71. 71. Estructura Cíclicas <ul><li>Estructura WHILE - Ejemplo: </li></ul><ul><ul><ul><ul><ul><li>#include <stdio.h> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>main() </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> int numero = 1; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> while(numero<=10) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> printf(&quot;%d &quot;,numero); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> numero++; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> } </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul>
  72. 72. Estructuras Cíclicas <ul><li>Estructura DO … WHILE </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li> do{ </li></ul><ul><li> sentencia1; </li></ul><ul><li> sentencia2; </li></ul><ul><li> }while (condición); </li></ul><ul><li>Con esta sentencia se controla la condición al final del bucle  </li></ul>Si la condición se cumple, el programa vuelve a ejecutar las sentencias del bucle DO … WHILE ejecutará el bucle por lo menos una vez
  73. 73. Estructuras Cíclicas <ul><li>Estructura FOR </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li> for (inicialización; condición; actualización) </li></ul><ul><li> { </li></ul><ul><li> sentencia1; </li></ul><ul><li> sentencia2; </li></ul><ul><li> } </li></ul><ul><li>for (a=1, b=100; a!=b; a++, b- -) </li></ul>La inicialización indica una variable que condiciona la repetición del bucle Si existe más de una variable de inicialización, se separan por comas incremento decremento
  74. 74. Estructuras Cíclicas <ul><li>Estructura FOR </li></ul><ul><li>El flujo del bucle FOR transcurre de la siguiente forma: </li></ul>
  75. 75. Estructuras Cíclicas <ul><li>Estructura FOR </li></ul><ul><li>La construcción WHILE equivalente al FOR es: </li></ul><ul><ul><ul><ul><ul><li>inicialización; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>while (condición) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>sentencia; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>actualización; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul>
  76. 76. Estructuras Cíclicas <ul><li>Estructura FOR </li></ul><ul><li>Es posible dejar una expresión vacía en el bucle FOR: </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int i; </li></ul><ul><li>printf(“Introduzca un entero: ”); </li></ul><ul><li>scanf(“%d”, &i); </li></ul><ul><li>for(; i; i--) </li></ul><ul><li> printf(“%d”, i); </li></ul><ul><li>} </li></ul>
  77. 77. Estructuras Cíclicas <ul><li>Estructura FOR </li></ul><ul><li>C permite sentencias nulas: </li></ul><ul><ul><ul><ul><ul><li>#include<stdio.h> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>#include<conio.h> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>main() </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> char ch; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> for (ch = getche(); ch != ‘q’; ch = getche()); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> printf (“ Encontrada la q ”); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul>El objetivo del for está vacío
  78. 78. Estructuras Cíclicas <ul><li>Estructura FOR </li></ul><ul><li>Es posible alterar el valor de la variable de control del ciclo FOR fuera de la sección de actualización: </li></ul><ul><ul><ul><ul><ul><li>int i; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>for (i = 0; i<10;) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> printf(“%d”, i); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li> i++; </li></ul></ul></ul></ul></ul><ul><li>} </li></ul><ul><li>Utilizando FOR es posible crear un ciclo infinito: </li></ul><ul><li>for ( ; ;) </li></ul>
  79. 79. Estructuras Cíclicas <ul><li>Estructura FOR - Ejemplo: </li></ul><ul><ul><ul><li>#include <stdio.h> </li></ul></ul></ul><ul><ul><ul><li>main() </li></ul></ul></ul><ul><ul><ul><li>{ </li></ul></ul></ul><ul><ul><ul><li>int num, x, result; </li></ul></ul></ul><ul><ul><ul><li>printf(&quot;Introduce un número entero: &quot;); scanf(&quot;%d&quot;,&num); </li></ul></ul></ul><ul><ul><ul><li>for (x=0; x<=10; x++) </li></ul></ul></ul><ul><ul><ul><li>{ </li></ul></ul></ul><ul><ul><ul><li>result=num*x; </li></ul></ul></ul><ul><ul><ul><li>printf(&quot; %d por %d = %d &quot;, num, x, result); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  80. 80. Arreglos <ul><li>Un arreglo es un identificador que referencia un conjunto de datos del mismo tipo </li></ul><ul><li>. . . </li></ul><ul><li>0 1 2 n-2 n-1 n </li></ul><ul><li>En C los arreglos comienzan por la posición 0 </li></ul><ul><li>El acceso es directo, a través de un índice, que representa un valor entero y positivo </li></ul>
  81. 81. Arreglos Unidimensionales <ul><li>Vectores: Sólo utilizan un índice para referenciar cada uno de los elementos </li></ul><ul><li>Su declaración se realiza así: </li></ul><ul><li>tipo nombre [tamaño]; </li></ul>Indica la cantidad de elementos del vector Cualquiera de los tipos primitivos, o un tipo definido por el usuario
  82. 82. Arreglos Unidimensionales <ul><li>Vectores - Ejemplo: </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li> int vector[10], i; </li></ul><ul><li> for (i=0; i<10; i++) </li></ul><ul><li> vector[i] = i*i; </li></ul><ul><li> for (i=0; i<10; i++) </li></ul><ul><li> printf(&quot; %d&quot;, vector[i]); </li></ul><ul><li>} </li></ul>
  83. 83. Arreglos Unidimensionales <ul><li>Un vector puede inicializarse al momento de su declaración: </li></ul><ul><li>tipo nombre[ ] = { valor1, valor2, ... } </li></ul><ul><li>Ejemplos: </li></ul><ul><li>int vector[ ] = {1, 2, 3, 4, 5, 6, 7, 8}; </li></ul><ul><li>char vector[ ] = &quot;programador&quot;; </li></ul><ul><li>char vector[ ] = {'p', 'r', 'o', 'g', 'r', 'a', 'm', 'a', 'd', 'o', 'r'}; </li></ul>No es necesario especificar el tamaño
  84. 84. Arreglos Unidimensionales <ul><li>Vectores: </li></ul><ul><li>C no realiza ninguna comprobación de los límites de los arreglos </li></ul><ul><li>Ejemplo: </li></ul><ul><li>int A[5]; /* A[0], A[1], …, A[4] elemento válidos*/ </li></ul><ul><li>A[8] = 25; /* A[8] elemento inexistente*/ </li></ul>
  85. 85. Arreglos Unidimensionales <ul><li>Vectores: </li></ul><ul><li>En C no se puede asignar un arreglo completo a otro en una sola sentencia. </li></ul><ul><li>char A[10], B[10]; </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>B = A; /* Esto no se puede hacer */ </li></ul>Para hacerlo correctamente debe copiarse elemento por elemento, cada uno por separado
  86. 86. Arreglos Unidimensionales <ul><li>Cadenas: </li></ul><ul><li>Una cadena se define como un arreglo unidimensional de caracteres, con un carácter de terminación nulo ‘’ </li></ul><ul><li>char cad[80]; </li></ul><ul><li>int i; </li></ul><ul><li>printf(“Introduzca una cadena: ”); </li></ul><ul><li>gets(cad); </li></ul><ul><li>for(i=0; cad[i]; i++) </li></ul><ul><li> printf(“%c”, cad[i]); </li></ul>
  87. 87. Arreglos Unidimensionales <ul><li>Cadenas: </li></ul><ul><li>La biblioteca estándar de C suministra funciones para el manejo de cadenas. Entre las más importantes están: </li></ul><ul><li>strcpy(), strcat(), strcmp() y strlen() </li></ul>Estas funciones requieren el archivo de cabecera string.h
  88. 88. Arreglos Unidimensionales <ul><li>Cadenas: </li></ul><ul><li>strcpy(destino, origen); </li></ul><ul><li>Copia la cadena origen en destino </li></ul><ul><li>char str[20]; </li></ul><ul><li>strcpy(str, “hola”); </li></ul><ul><li>printf(str); </li></ul>Copia la cadena “hola” en str strcpy() no realiza comprobación de límites
  89. 89. Arreglos Unidimensionales <ul><li>Cadenas: </li></ul><ul><li>strcat(uno, dos); </li></ul><ul><li>Concatena la cadena dos a uno. </li></ul><ul><li>char str[20]; </li></ul><ul><li>strcpy(str, “Buenos”); </li></ul><ul><li>strcat(str, “Dias”); </li></ul><ul><li>printf(str); </li></ul>No realiza comprobación de límites
  90. 90. Arreglos Unidimensionales <ul><li>Cadenas: </li></ul><ul><li>strcmp(cad1, cad2); </li></ul><ul><li>Compara las cadenas cad1 y cad2 . </li></ul><ul><li>Devuelve un valor negativo si cad1 es menor que cad2, y un valor positivo si cad1 es mayor que cad2. </li></ul>Devuelve cero si las cadenas son iguales Las cadenas se comparan por orden lexicográfico
  91. 91. Arreglos Unidimensionales <ul><li>Cadenas: </li></ul><ul><li>strlen(str); </li></ul><ul><li>Devuelve la longitud en caracteres de la cadena str </li></ul><ul><li>char cadena[] = “programador”; </li></ul><ul><li>int longi = strlen(cadena); </li></ul><ul><li>printf(“%d”, longi); </li></ul>No toma en cuenta el carácter de terminación nulo
  92. 92. Arreglos Multidimensionales <ul><li>Matrices: Representan un arreglo de dos o más dimensiones. </li></ul><ul><li>Su declaración se realiza así: </li></ul><ul><li>tipo nombre [tamaño 1][tamaño 2] ... ; </li></ul><ul><li>Una matriz bidimensional, se podría representar gráficamente como una tabla con filas y columnas </li></ul>
  93. 93. Arreglos Multidimensionales <ul><li>Matrices </li></ul><ul><li>Una matriz también puede ser inicializada al momento de su declaración </li></ul><ul><li>int numeros[4][3]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; </li></ul><ul><li>numeros[0][0]=1 numeros[0][1]=2 numeros[0][2]=3 </li></ul><ul><li>numeros[1][0]=4 numeros[1][1]=5 numeros[1][2]=6 numeros[2][0]=7 numeros[2][1]=8 numeros[2][2]=9 </li></ul><ul><li>numeros[3][0]=10 numeros[3][1]=11 numeros[3][2]=12 </li></ul>
  94. 94. Arreglos Multidimensionales <ul><li>Matrices: </li></ul><ul><li>También se pueden inicializar cadenas de texto: </li></ul><ul><li>char dias[7][10] = { &quot;lunes&quot;, &quot;martes&quot;, …, &quot;viernes&quot;, </li></ul><ul><li> &quot;sábado&quot;, &quot;domingo&quot; }; </li></ul><ul><li>Para referenciar cada palabra basta con el primer índice: </li></ul><ul><li>printf(&quot;%s&quot;, dias[i]); </li></ul>
  95. 95. Arreglos Multidimensionales <ul><li>Cadenas: </li></ul><ul><li>C permite crear una tabla de cadenas bidimensional </li></ul><ul><li>char nombres[10][40]; </li></ul><ul><li>gets(nombres[2]); /* Para leer una cadena */ </li></ul><ul><li>printf(nombres[4]); /* Para mostrar una cadena */ </li></ul>Especifica una tabla que puede contener 10 cadenas , cada una de hasta 40 caracteres Para acceder a una cadena sólo debe especificarse el primer índice
  96. 96. Registros <ul><li>Un registro es un conjunto de una o más variables, del mismo tipo de dato o diferente, agrupadas bajo un mismo nombre </li></ul><ul><li>La sintaxis de su declaración es la siguiente: </li></ul><ul><li>struct tipo_estructura </li></ul><ul><li>{ </li></ul><ul><li>tipo variable1; </li></ul><ul><li>tipo variable2; </li></ul><ul><li>tipo variable3; </li></ul><ul><li>}; </li></ul>Nombre del nuevo tipo Variables del registro
  97. 97. Registros <ul><li>Definición de variables tipo registro: </li></ul><ul><li>struct trabajador </li></ul><ul><li>{ </li></ul><ul><li>char nombre[20]; </li></ul><ul><li>char apellidos[40]; </li></ul><ul><li>int edad; </li></ul><ul><li>char puesto[10]; </li></ul><ul><li>}; </li></ul><ul><li>struct trabajador fijo, temporal; </li></ul>Definición de las variables fijo y temporal
  98. 98. Registros <ul><li>Definición de variables tipo registro: </li></ul><ul><li>struct trabajador </li></ul><ul><li>{ </li></ul><ul><li>char nombre[20]; </li></ul><ul><li>char apellidos[40]; </li></ul><ul><li>int edad; </li></ul><ul><li>char puesto[10]; </li></ul><ul><li>} fijo, temporal; </li></ul>Definición de las variables fijo y temporal
  99. 99. Registros <ul><li>Declaración e inicialización de registros: </li></ul><ul><li>struct estudiante </li></ul><ul><li>{ </li></ul><ul><li>char nombre[20]; </li></ul><ul><li>int edad; </li></ul><ul><li>}; </li></ul><ul><li>struct estudiante est1; </li></ul><ul><li>est1.nombre = “Victor”; </li></ul><ul><li>est1.edad = 24; </li></ul>Los registros deben declararse antes de la función principal Inicialización de registros
  100. 100. Registros <ul><li>Inicialización de registros: </li></ul><ul><li>struct trabajador fijo = {&quot;Pedro&quot;, &quot;Hernández Suárez&quot;, 32, &quot;gerente&quot;}; </li></ul><ul><li>struct notas </li></ul><ul><li>{ </li></ul><ul><li>char nombre[30]; </li></ul><ul><li>int notas[3]; </li></ul><ul><li>}; </li></ul><ul><li>struct notas alumno = {&quot;Carlos Pérez&quot;, {9, 6, 10} }; </li></ul>Si uno de los campos es un arreglo de números, los valores de la inicialización deberán ir entre llaves
  101. 101. Arreglos de Registros <ul><li>Es posible agrupar un conjunto de elementos de tipo registro en un arreglo: </li></ul><ul><li>struct trabajador </li></ul><ul><li>{ </li></ul><ul><li> char nombre[20]; </li></ul><ul><li> char apellidos[40]; </li></ul><ul><li> int edad; </li></ul><ul><li>}; </li></ul><ul><li>struct trabajador fijo[20]; </li></ul>Aquí podremos almacenar los datos de hasta 20 trabajadores
  102. 102. Arreglo de Registros <ul><li>Acceso a los campos: </li></ul><ul><li>struct trabajador fijo[20]; </li></ul><ul><li>fijo[3].nombre = “Maria”; </li></ul><ul><li>printf(“%s”, fijo[3].nombre); </li></ul><ul><li>struct trabajador fijo[20] = { {&quot;José&quot;, &quot;Herrero </li></ul><ul><li>Martínez&quot;, 29}, {&quot;Luis&quot;, &quot;García Sánchez&quot;, 46} }; </li></ul>Declaración e inicialización
  103. 103. Definición de Tipos <ul><li>C dispone de una declaración llamada typedef que permite la creación de nuevos tipos de datos </li></ul><ul><li>typedef int entero; </li></ul><ul><li>entero a, b = 3; </li></ul><ul><li>struct trabajador </li></ul><ul><li>{ </li></ul><ul><li>char nombre[20]; </li></ul><ul><li>int edad; </li></ul><ul><li>}; </li></ul><ul><li>typedef struct trabajador datos; </li></ul><ul><li>datos fijo, temporal; </li></ul>Creación del tipo de dato entero Creación del tipo de dato datos
  104. 104. Funciones <ul><li>Las funciones son bloques de código utilizados para dividir un programa en partes más pequeñas, cada una con una tarea determinada </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li>tipo nombre_función (lista_de_parámetros) </li></ul><ul><li>{ </li></ul><ul><li> bloque de sentencias </li></ul><ul><li>} </li></ul>tipo especifica el tipo de valor que devuelve la función conjunto de sentencias que serán ejecutadas cuando se realice la llamada a la función
  105. 105. Funciones <ul><li>Tipo de una Función: </li></ul><ul><li>Una función puede devolver cualquier tipo de datos, excepto un array </li></ul><ul><li>El tipo de dato por defecto de un función es int </li></ul><ul><li>Si una función no devuelve ningún valor puede declararse void </li></ul><ul><li>double volumen (double s1, double s2, double s3) </li></ul><ul><li>{ </li></ul><ul><li>return s1 * s2 * s3; </li></ul><ul><li>} </li></ul>
  106. 106. Funciones <ul><li>Funciones - Ejemplo: </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>#include<math.h> </li></ul><ul><li>void main() </li></ul><ul><li>{ </li></ul><ul><li>float answer, numero: </li></ul><ul><li>printf(“Introduzca un numero real: ”); </li></ul><ul><li>scanf(“%f”, &numero); </li></ul><ul><li>answer = sqrt(numero); </li></ul><ul><li>printf(“La raiz cuadrada de %.2f es: %.2f”, numero, answer); </li></ul><ul><li>} </li></ul>
  107. 107. Funciones <ul><li>Lista de Parámetros de una Función: </li></ul><ul><li>Parámetros Formales: Lista de declaraciones de variables, con su tipo correspondiente, que aparece en la declaración de la función </li></ul><ul><li>Parámetros Actuales: Lista de variables que recibe la función al momento de su llamada (se corresponden a los parámetros formales) </li></ul>Existen funciones que no reciben argumentos
  108. 108. Funciones <ul><li>Prototipos de una Función: </li></ul><ul><li>Para informar al compilador sobre el valor de retorno de una función, ésta debe declararse utilizando un prototipo </li></ul><ul><li>La forma general de definición de un prototipo es: </li></ul><ul><li>tipo nombre_función (tipo param1, tipo param2, …, tipo nombre_paramN) </li></ul>Un prototipo permite al compilador validar la cantidad de parámetros y la correspondencia de tipos en los argumentos
  109. 109. Funciones <ul><li>Prototipos - Ejemplo: </li></ul><ul><li>double volumen (double s1, double s2, double s3) </li></ul><ul><li>int obtenerNumero(void); </li></ul>Prototipo de una función sin parámetros Prototipo de una función con parámetros La declaración de los prototipos suele hacerse al comienzo del fichero, después de los #include y #define
  110. 110. Funciones <ul><li>Llamada a una Función: </li></ul><ul><li>Es llamada incluyendo su nombre seguido de los argumentos actuales en una expresión aritmética o de otro tipo </li></ul><ul><li>a = d * sin(alpha) / 2.0; </li></ul><ul><li>Es llamada mediante una sentencia que contiene el nombre de la función seguido por los argumentos actuales entre paréntesis, finaliza con un carácter (;) </li></ul><ul><li>productoMatriz(n, A, B, C); </li></ul>La función calcula un valor de retorno a partir de uno o más argumentos No existe valor de retorno
  111. 111. Funciones <ul><li>Paso de Parámetros a una Función: </li></ul><ul><li>Llamada por Valor </li></ul><ul><li>Copia el valor de un argumento en el parámetro formal de la función </li></ul><ul><li>Los cambios hechos en los parámetros de la función no tienen efecto sobre que se utilizan para llamarla </li></ul>C utiliza por defecto la llamada por valor para pasar argumentos
  112. 112. Funciones <ul><li>Paso de Parámetros a una Función: </li></ul><ul><li>Llamada por Referencia: </li></ul><ul><li>Se copia la dirección de un argumento en el parámetro formal de la función </li></ul><ul><li>Los cambios hechos en el parámetro afectarán a la variable utilizada para llamara a la función </li></ul>Para hacer esta llamada debe pasarse un puntero a un argumento
  113. 113. Funciones <ul><li>Llamada por Referencia - Ejemplo: </li></ul><ul><li>void intercambia (int *x, int *y) </li></ul><ul><li>{ </li></ul><ul><li>int temp; </li></ul><ul><li>temp = *x; </li></ul><ul><li>*x = *y; </li></ul><ul><li>*y = temp; </li></ul><ul><li>} </li></ul>
  114. 114. Funciones <ul><li>Llamada por referencia - Ejemplo: </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>void intercambia (int *x, int *y) </li></ul><ul><li>………… .. </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int num1, num2; </li></ul><ul><li>num1 = 100; </li></ul><ul><li>num2 = 200; </li></ul><ul><li>printf(“num1 es: %d y num2 es: %d ”, num1, num2); </li></ul><ul><li>intercambia(&num1, &num2); </li></ul><ul><li>printf(“num1 es: %d y num2 es: %d ”, num1, num2); </li></ul><ul><li>} </li></ul>
  115. 115. Definición de Archivos <ul><li>Definición de Archivo: </li></ul><ul><li>Un archivo o fichero informático es una entidad lógica compuesta por una secuencia finita de bytes, almacenada en un sistema de archivos ubicada en la memoria secundaria del computador e identificados por un nombre único </li></ul>
  116. 116. Manejo de Archivos <ul><li>Definición de Archivo: </li></ul><ul><li>Un archivo es un conjunto de datos estructurados en una colección de entidades elementales denominadas registros que son de igual tipo y constan a su vez de diferentes entidades de nivel más bajo denominadas campos </li></ul>Colecciones de datos almacenados en memoria secundaria
  117. 117. Manejo de Archivos <ul><li>Tipos de Archivo: </li></ul><ul><li>De Texto: Secuencia de caracteres organizadas en líneas terminadas por un carácter de nueva línea. Se caracterizan por ser planos, es decir, todas las letras tienen el mismo formato y no hay palabras subrayadas, en negrita, o letras de distinto tamaño o ancho </li></ul><ul><li>En estos archivos se pueden almacenar canciones, fuentes de programas, base de datos simples </li></ul>
  118. 118. Manejo de Archivos <ul><li>Tipos de Archivo: </li></ul><ul><li>Binarios: Secuencia de bytes que tienen una correspondencia uno a uno con un dispositivo externo. El número de bytes escritos (leídos) será el mismo que los encontrados en el dispositivo externo </li></ul><ul><li>Ejemplo de estos archivos son fotografías, imágenes, texto con formatos y archivos ejecutables (aplicaciones) </li></ul>
  119. 119. Manejo de Archivos <ul><li>Apertura de Archivos: </li></ul><ul><li>Antes de abrir un fichero es necesario declarar un puntero de tipo FILE </li></ul><ul><li>Para abrir el fichero se utiliza la función fopen( ) </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li>FILE *p; </li></ul><ul><li>p = fopen (nombre-fichero,&quot;modo-apertura&quot;); </li></ul>Debe ir entre comillas. Es posible especificar la ruta del archivo
  120. 120. Manejo de Archivos <ul><li>Modo Texto </li></ul><ul><li>w Crea un archivo de escritura. </li></ul><ul><li>Si ya existe lo crea de nuevo. </li></ul><ul><li>w+ Crea un archivo de lectura y escritura. </li></ul><ul><li>Si ya existe lo crea de nuevo. </li></ul><ul><li>a Abre o crea un archivo para añadir datos al final del mismo. </li></ul><ul><li>a+ Abre o crea un archivo para leer y añadir datos al final del mismo. </li></ul><ul><li>r Abre un archivo de lectura. </li></ul><ul><li>r+ Abre un archivo de lectura y escritura. </li></ul>Un archivo puede ser abierto en dos modos diferentes: modo texto o modo binario
  121. 121. Manejo de Archivos <ul><li>Modo Binario </li></ul><ul><li>wb Crea un archivo de escritura. </li></ul><ul><li>Si ya existe lo crea de nuevo. </li></ul><ul><li>w+b Crea un archivo de lectura y escritura. </li></ul><ul><li>Si ya existe lo crea de nuevo. </li></ul><ul><li>ab Abre o crea un archivo para añadir datos al final del mismo. </li></ul><ul><li>a+b Abre o crea un archivo para leer y añadir datos al final del mismo. </li></ul><ul><li>rb Abre un archivo de lectura. </li></ul><ul><li>r+b Abre un archivo de lectura y escritura. </li></ul>Un archivo puede ser abierto en dos modos diferentes: modo texto o modo binario
  122. 122. Manejo de Archivos <ul><li>Apertura de Archivos - Ejemplo: </li></ul><ul><li>FILE *puntero; </li></ul><ul><li>puntero = fopen(“datos.in&quot;,&quot;r&quot;); </li></ul><ul><li>puntero = fopen(&quot;C:rchivossaludo.txt&quot;,&quot;w&quot;); </li></ul>Abre el archivo en modo lectura Abre el archivo en modo escritura
  123. 123. Manejo de Archivos <ul><li>Apertura de Archivos: </li></ul><ul><li>Si se produce un error al intentar abrir un archivo la función fopen devolverá NULL </li></ul><ul><li>FILE *pf; </li></ul><ul><li>pf = fopen(&quot;datos.txt&quot;,&quot;r&quot;); </li></ul><ul><li>if (pf == NULL) </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul>Es importante validar la apertura de archivos
  124. 124. Manejo de Archivos <ul><li>Función freopen( ) </li></ul><ul><li>Cierra el archivo apuntado por el puntero y reasigna este puntero a un nuevo archivo que será abierto </li></ul><ul><li>Su sintaxis es: </li></ul><ul><li>freopen (nombre-archivo,&quot;modo-apertura&quot;, puntero); </li></ul>Puntero que será reasignado Puntero que será reasignado
  125. 125. Manejo de Archivos <ul><li>Cierre de Archivos: </li></ul><ul><li>Para cerrar un archivo se utiliza la función fclose( ) </li></ul><ul><li>FILE *pf; </li></ul><ul><li>pf = fopen(“Alumnos.txt&quot;,&quot;r&quot;); </li></ul><ul><li>if ( pf == NULL ) </li></ul><ul><li>printf (&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>else </li></ul><ul><li>fclose(pf); </li></ul>el número de archivos que pueden estar abiertos es limitado Cierra el archivo asociado al puntero pf Si el archivo se cierra con éxito devuelve 0
  126. 126. Escritura y Lectura de Archivos <ul><li>fputc (variable-caracter, puntero-archivo); </li></ul><ul><li>FILE *pf; </li></ul><ul><li>char letra = ‘a’; </li></ul><ul><li>If ((pf = fopen(&quot;datos.txt&quot;,&quot;w&quot;)) == NULL) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>fputc(letra,pf); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>Escribe el carácter letra en el archivo asociado al puntero pf
  127. 127. Escritura y Lectura de Archivos <ul><li>fgetc (puntero-archivo); </li></ul><ul><li>FILE *pf; </li></ul><ul><li>char letra; </li></ul><ul><li>if ((pf = fopen(&quot;datos.txt&quot;,&quot;r&quot;)) == NULL) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>letra = fgetc(pf); </li></ul><ul><li>printf(&quot;%c&quot;,letra); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>Lee un carácter del archivo asociado al puntero pf y lo copia el letra
  128. 128. Escritura y Lectura de Archivos <ul><li>putw (variable-entera, puntero-archivo); </li></ul><ul><li>Escribe un número entero en formato binario en el archivo </li></ul><ul><li>getw (puntero-archivo); </li></ul><ul><li>Lee un número entero de un archivo, avanzando dos bytes después de cada lectura </li></ul>
  129. 129. Escritura y Lectura de Archivos <ul><li>putw( ) - Ejemplo: </li></ul><ul><li>FILE *pf; </li></ul><ul><li>int num=3; </li></ul><ul><li>if ((pf = fopen(&quot;datos.txt&quot;,&quot;wb&quot;)) == NULL) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>putw(num,pf); /* Equivalente a putw(3,pf); */ </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>
  130. 130. Escritura y Lectura de Archivos <ul><li>getw( ) - Ejemplo: </li></ul><ul><li>FILE *pf; </li></ul><ul><li>int num; </li></ul><ul><li>if ((pf = fopen(&quot;datos.txt&quot;,&quot;rb&quot;)) == NULL) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>num = getw(pf); </li></ul><ul><li>printf(&quot;%d&quot;,num); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>
  131. 131. Escritura y Lectura de Archivos <ul><li>char *fputs (char *str, FILE *f); </li></ul><ul><ul><li>Escribe la cadena str en el archivo asociado al puntero f </li></ul></ul><ul><li>char *fgets (char *str, int long, FILE *f); </li></ul><ul><ul><li>Lee una cadena desde el archivo asociado al puntero f hasta que lee un carácter de nueva línea o long-1 caracteres. </li></ul></ul>
  132. 132. Escritura y Lectura de Archivos <ul><li>fputs( ) - Ejemplo: </li></ul><ul><li>FILE *pf; </li></ul><ul><li>char cad []= “Aprendemos manejo de archivos en C&quot;; </li></ul><ul><li>if ((pf = fopen(&quot;datos.txt&quot;,&quot;w&quot;)) == NULL) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>fputs(cad,pf); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>Escribe la cadena cad en el archivo asociado al puntero pf
  133. 133. Escritura y Lectura de Archivo <ul><li>fgets - Ejemplo: </li></ul><ul><li>FILE *pf; </li></ul><ul><li>char cad[80]; </li></ul><ul><li>if ((pf = fopen(&quot;datos.txt&quot;,&quot;r&quot;)) == NULL) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>fgets(cad,80,pf); </li></ul><ul><li>printf(&quot;%s&quot;,cad); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>Lee del archivo asociado a pf una cadena de longitud max 80-1 caracteres y la copia en cad
  134. 134. Escritura y Lectura de Archivos <ul><li>fprintf (puntero-archivo,formato, argumentos); </li></ul><ul><li>Escribe los argumentos en un archivo </li></ul><ul><li>fscanf (puntero-archivo, formato, argumentos); </li></ul><ul><li>Lee los argumentos desde un archivo. Al igual que un scanf( ) , es necesario indicar la dirección de memoria de los argumentos con el símbolo & </li></ul>
  135. 135. Escritura y Lectura de Archivos <ul><li>fprintf( ) - Ejemplo: </li></ul><ul><li>FILE *pf; </li></ul><ul><li>char nombre[20] = “Xiomara&quot;; </li></ul><ul><li>int edad = 49; </li></ul><ul><li>if (!(pf = fopen(&quot;datos.txt&quot;,&quot;w&quot;))) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>fprintf(pf,“Nombre: %20s, Edad: %2d &quot;,nombre,edad); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>
  136. 136. Escritura y Lectura de Archivos <ul><li>fscanf( ) - Ejemplo: </li></ul><ul><li>FILE *pf; </li></ul><ul><li>char nombre[20]; </li></ul><ul><li>int edad; </li></ul><ul><li>if (!(pf = fopen(&quot;datos.txt&quot;,&quot;r&quot;))) { </li></ul><ul><li>printf(&quot;Error al abrir el archivo&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>fscanf(pf,“%20s%2d&quot;,nombre,&edad); </li></ul><ul><li>printf(&quot;Nombre: %s, Edad: %d&quot;, nombre, edad); </li></ul><ul><li>fclose(pf); </li></ul><ul><li>} </li></ul>
  137. 137. Manejo de Archivos <ul><li>rewind( ) </li></ul><ul><li>Inicializa el indicador de posición, al principio del archivo. Su prototipo es: void rewind (FILE *F); </li></ul><ul><li>ferror() </li></ul><ul><li>Determina si se ha producido en error en una operación sobre un archivo. Su prototipo es: int ferror(FILE *F); </li></ul><ul><li>Devuelve cierto si se ha producido un error durante la ultima operación sobre el archivo. En caso contrario, devuelve falso </li></ul>
  138. 138. Manejo de Archivos <ul><li>remove( ) </li></ul><ul><li>Borra el archivo especificado. Su prototipo es: </li></ul><ul><li>int remove(char *nombre-archivo); </li></ul><ul><li>Devuelve cero si tiene éxito. Si no un valor distinto de cero. </li></ul>

×