Clase1 c

1,086 views
990 views

Published on

Curso de Fundamentos de Programación en C (I Parte)

Published in: Education, Travel, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,086
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
75
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Clase1 c

  1. 1. Fundamentos de Programación en C (I Parte) Prof. Mariela J. Curiel Universidad Simón Bolívar Caracas, Venezuela •05/06/2011 •1Copyright, 1996 © Universidad Sim‟on Bol‟ivar
  2. 2.  Características del Lenguaje  Estructura de un programa en C.  Conceptos Básicos: tipos básicos de datos, expresiones, operadores  Estructuras de Control  Arreglos  Otros tipos de datos derivadosContenido •05/06/2011 •2
  3. 3.  Funciones  Apuntadores  Asignación de memoria dinámica y estructuras de datos  Entrada/Salida  Desarrollo de programas en varios módulos.Contenido •05/06/2011 •3
  4. 4.  Es un lenguaje pequeño con pocas palabras reservadas.  Es portable.  Tiene un conjunto muy poderoso de operadores.  Soporta la modularidad pero no obliga a programar modularmente.Características del lenguaje •05/06/2011 •4
  5. 5. Estructura de un programa enC  Los programas C consisten de módulos o piezas que se denominan funciones.  Los programadores aprovechan una gran cantidad de funciones existentes, que se conoce como Librería Estándar de C.  Una función llamada main es el punto donde comienza la ejecución del programa. •05/06/2011 •5
  6. 6. #include <stdio.h> Librería estándar de C#include “estructuras.h" Función main, punto donde comienza el programa int main() { emple miemp[MAXEMP];void imprimir(emple *emp, int cuantos) char line[MAXLIN], nom[MAXNOMBRE];{ FILE *fp; int i, edad=0, tiempo=0; int i; for(i=0; i < cuantos; i++) fp = fopen(argv[1], "r"); printf("%d %d %sn", i = 0;emp[i].edad, emp[i].ttrabajo, emp[i].nombre); while (getline(line, sizeof(line), fp) > 0) { sscanf(line, "%d %d %s", &miemp[i].edad, &miemp[i].ttrabajo,miemp[i].nombre);} i++; } imprimir(miemp, i); Función realizada por fclose(fp); El usuario } •05/06/2011 •6
  7. 7. Conceptos Básicos (Variables, Constantes, Declaraciones) Variables ◦ Dan nombres únicos a varios objetos dentro del programa. Representan una localidad en la memoria del computador. ◦ Sus nombres pueden estar formados por letras, dígitos y ´´_´´ (underscores), pero no pueden comenzar con dígitos. Según el estándar ANSI sólo se reconocerán los primeros 31 caracteres. •05/06/2011 •7
  8. 8. Conceptos Básicos(Variables, Constantes,Declaraciones)  Las variables deben declararse antes de utilizarse con un nombre y un tipo de datos. ◦ En una misma línea se pueden declarar varias variables del mismo tipo. int a,b,c; ◦ C es case-sensitive: hace distinción de las minúsculas y mayúsculas. ◦ Las declaraciones sirven para dos propósitos:  le dicen al compilador qué cantidad de espacio debe reservar.  le permiten al compilador instruir a la máquina para efectuar las instrucciones correctamente. ◦ Las palabras reservadas van en minúsculas •05/06/2011 •8
  9. 9. Conceptos Básicos(Variables, Constantes,Declaraciones) int main() { int integer1 = 2, integer2, sum; /* declaración */ integer2 = 20; sum = integer1 + integer2; printf(“La suma de %d y %d es %d”, integer1, integer2, sum ); return 0; /* indica que el programa terminó con éxito */ } •05/06/2011 •9
  10. 10.  Los tipos base se dividen en tres grandes clases: ◦ Los enteros: int, short int (16 bits), long int (32 bits), unsigned int. ◦ Números de coma flotante: float, double o long double ◦ Caracteres: char.Conceptos Básicos(Tipos de Datos Fundamentales) •05/06/2011 •10
  11. 11. Tipos enteros ◦ signed: el bit más significativo se utiliza para representar el signo y el valor absoluto del número se codifica en los bits restantes (15 o 31). ◦ unsigned: sólo se representan números positivos o (nulos), utilizando todos los bits disponibles.Conceptos Básicos(Tipos de Datos Fundamentales) •05/06/2011 •11
  12. 12. Tipos coma flotante La zona utilizada para el número se descompone en tres partes: ◦ un bit reservado para el signo ◦ un espacio para el exponente: 8 bits en el float, 11 bits en el double, 14 en el long double. ◦ el resto para la mantisa: 23 bits en el float, 52 bits en el double, 64 en el long double.Conceptos Básicos(Tipos de Datos Fundamentales) •05/06/2011 •12
  13. 13. int edad i, j = 3; signed long a,x; float z, temperatura; char c1, c2;Ejemplos (declaraciones) •05/06/2011 •13
  14. 14.  C manipula varias clases de valores enteros (29, 1234, etc), reales (3.14, 1.0e-5) que son ejemplos de constantes.  ´a’, ´b’, etc, son constantes tipo caracter.  Una secuencia de 0 o más caracteres encerrados entre comillas (“Yo estoy aquí”) es una constante de cadena o cadena literal.Conceptos Básicos (Constantes) •05/06/2011 •14
  15. 15. Las líneas: #define SIZE 10 #define PI 3.14159 definen constantes simbólicas. Una constante simbólica es un identificador que es reemplazado por el prepocesador, antes que el programa sea compilado.Conceptos Básicos(constantes) •05/06/2011 •15
  16. 16.  El uso de constantes hace el programa más comprensible.  Si una constante se ha definido a través de #define y se usa en todo el programa, es mas fácil cambiar su valor posteriormente.Conceptos Básicos(constantes) •05/06/2011 •16
  17. 17.  Escritura de constantes en coma flotante ◦ Decimal: 12.43 -0.38 -.38 4. ◦ Exponencial: 4.24E4 48e13 542.7E-33 -3e13 Por defecto, todas las constantes de coma flotante son creadas por el compilador del tipo double. Sin embargo es posible imponerle el tipo: 1.25E03f (float) 1.0L (long double)Conceptos Básicos(Constantes) •05/06/2011 •18
  18. 18.  Escritura de constantes tipo caracter: ◦ Los caracteres imprimibles se escriben entre apóstrofes:´a’, ´y’ ´¿’ ´$’. ◦ Los no imprimibles se imprimen usando el caracter “”. Ejemplos: n LF (Line Feed) Salto de Línea t HT (Horizontal Tab) Tabulación Horizontal v VT (Vertical Tab) Tabulación Vertical f FF (Form Feed) Salto de PáginaConceptos Básicos(Constantes) •05/06/2011 •19
  19. 19.  Los operadores aritméticos son: +, -, *, /, %  Son todos operadores binarios.  El cociente entre 2 enteros devuelve un entero, pero el cociente de dos números en coma flotante es un número en coma flotante. 5/2 = 2, pero 5./2. = 2.5Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) •05/06/2011 •20
  20. 20.  Reglas de precedencia (consultar bibliografía) Ejemplosm=a+b+c+d+e (álgebra) 5m = (a + b + c + e)/5 (Lenguaje C)Si se omiten los paréntesis, la expresión se calcula como: m = a + b + c + e/5Conceptos Básicos (Operadores •05/06/2011 •21aritméticos, relacionales, etc.)
  21. 21. EXPRESIONES, INSTRUCCIONES Y ASIGNACION- Las expresiones son combinaciones de constantes,variables, operadores y llamadas a funciones. Ejm: a + b 3.0 * x - 9.66553 3+ sum(x,y)- La mayoría de las expresiones tienen un valor.- Si al final de una expresión se coloca un ´´;´´ laexpresión se convierte en una proposición: I = 7; z = 3+ sum(x,y);Conceptos Básicos (Operadores-aritméticos, relacionales, etc.) •05/06/2011 •22
  22. 22. Conceptos Básicos (Operadores aritméticos, relacionales, etc.)EXPRESIONES, INSTRUCCIONES Y ASIGNACION• Las { } se emplean para agrupar declaraciones oproposiciones en una declaración compuesta o bloque. while (x == 1) { ....}• El operador de asignación es el signo ´´=´´ I = 7; la expresión como un todo toma el valor 7• El operador ´´=´´ se asocia de derecha a izquierda,de modo que: x = y = z = 0 se resuelve x = (y = (z = 0)); •05/06/2011 •23
  23. 23. int b = 5;a = b; int b = 5;if (a = 1) { a= b; .... if (a == 1) {} .... }Conceptos Básicos (Operadores •05/06/2011aritméticos, relacionales, etc.) •24
  24. 24. Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) Operadores de Incremento y Decremento -Son operadores unarios. -Pueden aplicarse a variables, pero no a constantes o expresiones. -Pueden usarse como -prefijos: ++a (preincremento), --a (predecremento) -sufijos: a++ (postincremento), a-- (postdecremento). •05/06/2011 •25
  25. 25. int n = 5; x = n++; /* asigna 5 a x y el valor final de n = 6 */ x = ++n; /* asigna 6 a x n = 6 */Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) •05/06/2011 •26
  26. 26. Operadores RELACIONALES y de IGUALDAD  Son operadores binarios. Toman dos expresiones como operandos y producen el valor entero 0 ó 1.Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) •05/06/2011 •27
  27. 27.  Los operadores relacionales tienen el mismo nivel de precedencia y se asocian de izquierda a derecha.  Los operadores de igualdad tienen un nivel de precedencia menor que los operadores relacionales. También se asocian de izquierda a derecha. a < b == c < d se interpreta como: (a < b) == (c < d)Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) •05/06/2011 •28
  28. 28. Precedencia de operadores aritméticos y relacionales (consultar material de apoyo) x + y < a + 2 es equivalente a: (x+y) < (a + 2)Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) •05/06/2011 •29
  29. 29. Operadores Lógicos  && || y !: cuando se aplican a las expresiones producen los valores enteros 0 ó 1.  La negación lógica puede aplicarse a una expresión arbitraria.  Si una expresión tiene el valor 0 o 0.0, su negación producirá el valor entero 1. Si la expresión tiene un valor distinto de 0 su negación producirá el valor entero 0.Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) •05/06/2011 •30
  30. 30. Conceptos Básicos(Operadores aritméticos,relacionales, etc.) Ejemplo !(2*(x+a)-3 - ’z’) Existen la tablas de la verdad para los operadores && y ||. En la evaluación de las expresiones que contienen && y ||, el proceso de la evaluación termina tan pronto se conoce el valor de la expresión •05/06/2011 •31
  31. 31. Conceptos Básicos(Operadores aritméticos,relacionales, etc.) Ejemplo: while (a < b && c > 0) /* hacer algo */ Reglas de precedencia (MA). a < b && c < dequivale a (a < b) && (c < d) •05/06/2011 •32
  32. 32. Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) Operador de asignación ampliada:La operación:c = c + 3puede escribirse de forma abreviadautilizando el operador de asignación ampliada,como: c += 3 •05/06/2011 •33
  33. 33. Conceptos Básicos (Operadoresaritméticos, relacionales, etc.) En general, cualquier enunciado de la formavariable = variable operador (expresion) puede escribirse de la forma:variable operador = expresion •05/06/2011 •34
  34. 34. Conceptos Básicos (Operadores aritméticos, relacionales, etc.) Operador de asignación ampliada: k *= 3 + xEs equivalente a: k = k * (3 + x)y no a: k = k * 3 + x •05/06/2011 •35
  35. 35.  Ejemplo: en qué orden se calcula la siguiente expresión:a * b + c/d – e1. a*b -> x2. c/d -> y3. x + y -> z4. z-ePrecedencia de Operadores •05/06/2011 •36
  36. 36. Estructuras de Control •05/06/2011 •37
  37. 37.  La estructura de selección if Ejecuta la acción indicada sólo cuando la condición es verdadera, de lo contrario la acción es pasada por alto. if (nota >= 10) { printf (“Aprobo el curso”); aprobados++; }Estructuras de Control(Condicionales)
  38. 38. Estructuras de Control(Condicionales)if (Condición) Acción;o en caso de un cuerpo compuestoif(Condición){ Acción1; Acción2; ...}
  39. 39.  La estructura de selección if/else permite que el programador especifique acciones distintas cuando la condición es verdadera o falsa. if (nota >= 10) { printf (“Aprobo el curso”); aprobados++; } else reprobados++;Estructuras de Control(Condicionales)
  40. 40. #include <stdio.h>int main(){ Ejemplo int N; printf("Ingrese el valor N: "); scanf("%d", &N); if((N % 2) == 1) printf("El numero %d es IMPARn", N); else printf("El numero %d es PARn", N); return 0;}
  41. 41. if (nota >= 85) nota_5 = 5; if (nota >= 85)else nota_5 = 5; else if (nota >= 70) if (nota >= 70) nota_5 = 4: nota_5 = 4; else if (nota >= 50) else nota_5 = 3; else nota_5 = 2; if (nota >= 50) nota_5 = 3; else nota_5 = 2;Estructuras de Control(Condicionales)
  42. 42.  El operador condicional “?” es el único operador ternario Expre1 ? Expr2 : Expr3nota >= 50 ? printf(“aprobado”): printf(“reprobado”) I operando II operando III operando Se evalúa Expre1, si es verdadera se evalúa Expre2 y éste es el resultado de la expresión, de lo contrario se evalúa Expre3 Estructuras de Control (Condicionales)
  43. 43. La estructura de selección múltiple switch switch(expresion) { Expresión entera case constante_1: [serie de instr.1] case constante_2: [serie de instr.2] .... Expresión const. tipo entero case constante_n: [serie de instr. n] default: [serie de instr.] }Estructuras de Control(Condicionales)
  44. 44. Estructuras de Control (Condicionales)La instrucción switch Es una forma de tomar decisiones múltiples demanera bien estructurada, sólo puede usarse enciertos casos:-Cuando se chequea una sola variable; todas lasposibilidades deben depender del valor de esta variable.La variable debe ser de tipo entero (int, long, short, char).-Cada posible valor de la variable puede controlar una únicarama (u opción). Una rama por defecto „default‟ puedecapturar los todos los casos no especificados.
  45. 45. #include <stdio.h>int main() /* Escribe el día de la semana */{ int dia; printf("Introduce el día: "); Ejemplo scanf("%d",&dia); switch(dia){ Impide que se ejecuten case 1: printf("Lunes"); break; case 2: printf("Martes"); break; el resto de instrucciones case 3: printf("Miércoles"); break; del switch case 4: printf("Jueves"); break; case 5: printf("Viernes"); break; case 6: printf("Sábado"); break; case 7: printf("Domingo"); break; }}
  46. 46. main() { Entrada del int n; usuario printf (“introduzca un entero”); 1 scanf(“%d”, &n); switch(n) { pequeño case 0: printf(“nuln”); mediano break; case 1: 4 case 2: printf(“pequeño”); mediano case 3: case 4: 25 case 5: printf(“mediano”); grande break; default: printf(“grande”); } Salida del programa
  47. 47.  La estructura de repetición WHILE ◦ Permite al programador especificar que se repita una acción, en tanto cierta condición se mantenga verdadera. ◦ La instrucción puede ejecutarse cero o más veces. while(condición) Acción; while(condición){ Acción1; Acción2; }Estructuras de Control (Ciclos)
  48. 48.  La estructura de repetición WHILE (ejemplo) product = 2; while (product <= 1000) product = 2 * product;Estructuras de Control (Ciclos)
  49. 49. int total, counter, average; total = 0; counter = 1; Ejemplo while (counter <= 10) { printf(“Introduzca la nota: ”); scanf(“%d”, &nota); total = total + nota; counter += 1; } average = total /10; printf(“El promedio es: %dn”, average);Estructuras de Control (Ciclos)
  50. 50. La estructura de repetición FOR: Maneja de forma automática los detalles de la repetición controlada por un contador. int counter; for (counter = 1; counter <= 10; counter++) printf(“%dn”, counter); int counter = 1;Son while(counter <= 10){equivalen printf(“%dn”, counter);tes ++counter; }Estructuras de Control (Ciclos)
  51. 51.  La estructura de repetición FOR: Valor final de la v. de Variable de control controlfor (counter = 1; counter <= 10; counter++) Valor inicial de Incremento de la variable la v. de controlEstructuras de Control (Ciclos)
  52. 52. Ejemploint counter,total, average;for(counter = 1; counter <= 10; counter++) { printf(“Introduzca la nota: ”); scanf(“%d”, &nota); total = total + nota;}average = total /10;printf(“class average is %dn”, average);Estructuras de Control (Ciclos)
  53. 53. Ejemplo: ciclo decrecienteint counter,total, average;for(counter = 10; counter >= 1; counter--) { printf(“Introduzca la nota: ”); scanf(“%d”, &nota); total = total + nota;}average = total /10;printf(“class average is %dn”, average);Estructuras de Control (Ciclos)
  54. 54.  La estructura de repetición do-while: main() { int counter = 1; do do { proposición printf(“%d ”, counter ); while (expresión); } while(++counter <= 10); return 0;Estructuras de Control (Ciclos) }
  55. 55. Ejemplo de uso del do-while#include <stdio.h> int main() { int n, error; do { printf("Ingrese un número entero entre 1 y 10: "); scanf("%d", &n); if (error = (n < 1 || n > 10)) printf("nERROR: Intentelo nuevamente!!nn"); } while(error);/* ahora puedo procesarel valor ingresado sabiendo que es correcto. */… return 0; } /* fin del main */
  56. 56. Estructuras de Control (Ciclos)  break: ◦ Sirve para interrumpir el desarrollo de un bucle. ◦ En el caso de bucles anidados, break sale del bucle más interno.int x;for (x=1; x <= 10; x++){ if (x == 5) Imprime: break; 1234 printf(“%dn”, x);}
  57. 57. Estructuras de Control (Ciclos)  continue: Permite pasar prematuramente a la siguiente iteración del bucleint x;for (x=1; x <= 10; x++){ if (x == 5) Imprime: continue; printf(“%dn”, x); 1 2 3 4 6 7 8 9 10}
  58. 58. Arreglos•05/06/2011
  59. 59.  Un arreglo es un grupo de posiciones de memoria relacionadas entre sí: todas tienen el mismo nombre y son del mismo tipo. Declaración: tipo nombre[num_elementos]Arreglos
  60. 60. int c [12]; /* Reserva espacio para 12 elementos del tipo int */ nombre c[0] 4 c[1] 5 c[2] - 15 Posición o índice Arreglos c[11] 78
  61. 61.  Un índice puede tomar la forma de cualquier expresión aritmética de tipo entero: t[n-3], t[3*p-2*k]  La dimensión de un arreglo sólo puede ser una constante o una expresión constante #define N 50 int t[N]; float h[2*N-1];Arreglos
  62. 62. La declaración de un arreglo se realiza segúnla siguiente sintáxis : tipo_variable nombre[numero_elementos]; ejemplo : int var1[10]; // arreglo de 10 enteros char nombre[50]; //se reserva espacio // para 50 caracteres float numeros[200]; // 200 floats. long double cantidades[25]; Arreglos
  63. 63. ArreglosLa inicialización de un arreglo local, puede realizarse en su declaración:int numero[8] = {4,7,0,0,0,9,8,7};Otra posibilidad, que sólo es válida cuando se inicializan todos los elementos del arreglo, es:int numero[]={0,1,2,3,4,5,6,7,8,9};El arreglo contendrá 10 elementos.También se pueden inicializar parcialmente:int numero[10] = {1,1,1};
  64. 64. ArreglosCONJUNTO ORDENADO DE CARACTERES(STRINGS) Los strings son arreglos de caracteres que culminan conel caracter NULL ( ASCII == 0 , simbolizado por lasecuencia de escape 0 ) .Se puede generar un string , declarando :char car_str[] = {A,B,C,D,0};char car_str[] = {A,B,C,D,0};Hay una forma más compacta de declararlos :char car_str[] = "ABCD";char car_str[5] = "ABCD";
  65. 65. Arreglos C no posee facilidades para el manejo de “strings”, de modo que las siguientes instrucciones son ilegales: char firstname[50],lastname[50]; firstname = "Arnold"; /* Ilegal */ lastname = "Schwarznegger"; /* Ilegal */ char firstname[] = “Arnold”; /* Ok */ Para imprimir un string se usa printf con el carácter de control %s : printf(``%s,name);
  66. 66. Arregloschar firstname[50],lastname[50];char tempname[50];strcpy(tempname, firstname);Otras funciones de la librería standard de C para el manejo de strings (string.h)son:strlen(), strcmp(), strcat(), etc.
  67. 67. int main(){ int square[100]; int i; /* índice del ciclo*/; int k; /* El entero a elevar al cuadrado*/ /* Calcular los cuadrados */ for (i = 0; i < 100; i++) { k = i + 1; /* i va de 0 a 99 */ /* k va de 1 a 100 */ square[i] = k*k; printf(“El cuadrado de %d es %dn",k,square[i]); } return 0;}
  68. 68. int main(){ Arreglos de caracteres char nombre[15], apellidos[30]; int edad; printf("Introduce tu nombre: "); scanf("%s",nombre); printf("Introduce tus apellidos: "); scanf("%s",apellidos); printf("Introduce tu edad: "); scanf("%d", &edad); printf("Usted es %s %sn",nombre,apellidos);}
  69. 69.  Los arreglos pueden tener más de una dimensión, por ejemplo : int matriz[num_fil][num_col]; En C, un arreglo de dos dimensiones es en realidad un arreglo unidimensional, cada uno de cuyos elementos es un arreglo. Los elementos se almacenan por filas.Arreglos Multidimensionales
  70. 70. Inicialización: char dia_de_la_semana[7][8] = { "lunes","martes","miercoles" , "jueves","viernes","sábado", "domingo" }; El elemento [0][0] será la "l" de lunes , el [2][3] la "r" de miercoles , etc. Los elementos [0][5] , [1][6] ,etc estan inicializados con NULL; y [0][6] y [0][7], etc no han sido inicializados.Arreglos Multidimensionales
  71. 71. int main() {int array[2][3], i,j;for (i = 0; i <= 1; i++) int main() { for (j=0; j <= 2; j++) a[i][j] = i + j; int array[2][3], i,j; for (i = 0; i <= 1; i++) for (j=0; j <= 2; j++) { Ejemplos printf(“%d”, a[i][j]); printf(“n”); } }
  72. 72. Nuevos tipos de Datos •05/06/2011 •74
  73. 73.  C proporciona un facilidad llamada typedef para crear nuevos tipos de datos. Tipo base Nuevo nombre tipotypedef int Longitud;Longitud len, maxlen;typedef int vector[3];int a[3],b[3];vector a, b; Son equivalentesDefinición de Nuevos Tipos
  74. 74. Tipos de Datos Derivados (Estructuras) Existe en C un tipo de variable compuesta, llamada ESTRUCTURA que puede contener variables de distinto tipo. Ejemplo : struct empleado { int edad; char nombre[50]; float sueldo; }; struct empleado vendedores, oficinistas;
  75. 75. Tipos de Datos Derivados (Estructuras) Las dos instrucciones pueden combinarse en una sola: struct empleado { int edad; char nombre[50]; float sueldo; } vendedor , programador; Si no fueran a realizarse más declaraciones de variables de éste tipo, podría obviarse el nombre de la estructura (empleado).
  76. 76. REGLAS PARA EL USO DE ESTRUCTURAS Para dirigirnos a un miembro particular de una estructura existe un operador que relaciona al nombre de ella con el de cada miembro; es el operador ( . ). nombre_estructura.nombre_del_miembroTipos de Datos Derivados(Estructuras)
  77. 77. struct posicion_de { float eje_x; float eje_y; float eje_z; }fin_recta,inicio_recta = {1.0,2.0,3.0}; fin_recta.eje_x = 10.0; fin_recta.eje_y = 50.0; fin_recta.eje_z = 90.0; if(fin_recta.eje_x == inicio_recta.eje_x)Tipos de Datos Derivados(Estructuras)
  78. 78. Tipos de Datos Derivados(Estructuras)Dos estructuras del mismo tipo pueden ser asignadas o comparadas en forma directa.fin_recta = inicio_recta;o también,fin_recta.eje_x = inicio_recta.eje_x;fin_recta.eje_y = inicio_recta.eje_y;fin_recta.eje_z = inicio_recta.eje_z;
  79. 79. Tipos de Datos Derivados(Estructuras) Las estructuras pueden anidarse. Las estructuras también pueden ser pasadas a las funciones como parámetros, y ser retornadas por éstas, como resultado.
  80. 80. Tipos de Datos Derivados(Estructuras)Las estructuras se pueden agrupar de forma ordenada como elementos de un arreglo. typedef struct { char material[50]; int existencia; double costo_unitario; }item;item almacen[100];almacen[50].existencia =1000;costo_tornillo = almacen[0].costo_unitario;
  81. 81. Tipos de Datos Derivados(Estructuras)Los arreglos de estructuras pueden inicializarse de la forma habitual: item almacen2[] = {item almacen1[100] ={ { i,t,e,m,1,0 } ,10,1.5,"tornillos" , 120 , .15 ,"tuercas" , 200 , .09 , { i,t,e,m,2,0 },20,1.0,”clavos" , 90 , .01 { i,t,e,m,3,0 },60,2.5,}; { i,t,e,m,4,0 },40,4.6, { i,t,e,m,5,0 },10,1.2 , };
  82. 82.  Se puede aplicar el operador sizeof, de la siguiente forma:tam_base_datos = sizeof(almacen1);tam_de_item = sizeof(item) ;num_datos = sizeof(almacen1)/sizeof(item);Tipos de Datos Derivados(Estructuras)
  83. 83. #define NUM_INTER 100struct Intervalo { double Lower, /* Límite inferior del intervalo */ Upper; /* Límite superior del intervalo */ int Counter; /* Cantidad de puntos dentro */};int main() { Ejemplo. struct Intervalo Inter[NUM_INTER]; int i, j; double Delta = RAND_MAX/NUM_INTER;/* Inicialización del vector de estructuras */ for (i=0; i<NUM_INTER; i ++) { Inter[i].Counter = 0; Inter[i].Lower = Delta*i; Inter[i].Upper = Delta*(i+1); }}
  84. 84. Tipos de Datos Derivados(Uniones) Una “union” es una variable que puede almacenar (en momentos diferentes) objetos de diferentes tamaños y tipos. Para este tipo de variables se usa la instrucción union: union numero { short tiposhort; long tipolong; double tipofloat; } minumero printf("%f",minumero.tipofloat);
  85. 85. struct { char *name; int flags; int utype; if (symtab[i].utype == INT) union { printf(“%dn”, int ival; symtab[i].u.ival);) float fval; char *sval; }u;} symtab[NSYM];Tipos de Datos Derivados(Uniones)
  86. 86. typedef struct { typedef union { int carnet; profesor prof_id; }estudiante; estudiante est_id; typedef struct { prof_invitado pin_id; int cedula; } tipo_id; } profesor; typedef struct { typedef struct { char pasaporte[30]; int clase_personal; } prof_invitado; int edad; tipo_id identif;personal p; } personal;if (p.clase_personal == 3) printf(“%s” , p.identif.pin_id.pasaporte);
  87. 87. CastingC es uno de los pocos lenguajes que permiteforzar una variable de uno tipo para que seade otro tipo (coercion). Esto se logra a través deloperador cast ( ).int num_entero;float num_real=9.87;num_entero=(int)num_real; /* asigna 9 a num_entero */int num_entero=10;float floatnumber;floatnumber=(float)num_entero; /*floatnumber =10.0. */
  88. 88. Casting• Puede usarse con cualquiera de los tipos dedatos simples: int num_entero; char letra=A; num_entero=(int)letra; /* asigna 65 (El códigoASCII de `A) a num_entero*/• Algunas veces se realiza en forma automática.• Una buena regla es: si tiene duda, coloque elcast.
  89. 89. CastingOtro uso del cast es cuando se quiere estar seguro deque la división retorna el resultado que se desea:int num_entero, otro_entero;....num_real = (float) num_entero/(float) otro_entero;/* Asegura que el resultado es real */
  90. 90. Los tipos de datos enumerados contienen una lista de constantes que pueden ser direccionadas como valores enteros. enum dias {lunes, martes, ..., domingo} semana; enum dias semana1, semana2;Tipos de datos enumerados
  91. 91.  Se pueden definir otros valores:enum escapes { bell = `a,backspace = `b, tab = `t, newline = `n, vtab = `v, return = `r}; ... O forzar que el valor inicial no sea el 0 :enum meses {ene = 1, feb, mar, ..., dic}; Está implícito que feb = 2 etc.Tipos de datos enumerados
  92. 92. Ejemplo:enum day {dom, lun, mar, mier, jue, vier, sab} d1, d2; d1 = vier; .... if (d1 == d2) ....Tipos de datos enumerados
  93. 93.  Brian Kernighan y Dennis Ritchie. El Lenguaje de Programación C. Prentice Hall. http://www.its.strath.ac.uk/cources/cBibliografía •05/06/2011 •95

×