Clase1 c
-
Upload
marielacuriel -
Category
Education
-
view
1.083 -
download
0
description
Transcript of Clase1 c
Fundamentos de Programación en C
(I Parte)
•05/06/2011 •1
Copyright, 1996 © Universidad Sim‟on Bol‟ivar
Prof. Mariela J. Curiel
Universidad Simón Bolívar
Caracas, Venezuela
Contenido
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 derivados
•05/06/2011 •2
Contenido
Funciones Apuntadores Asignación de memoria dinámica y estructuras de datos
Entrada/SalidaDesarrollo de programas en varios módulos.
•05/06/2011 •3
Características del lenguaje
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.
•05/06/2011 •4
Estructura de un programa en C
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
•05/06/2011 •6
#include <stdio.h>
#include “estructuras.h"
void imprimir(emple *emp, int cuantos)
{
int i;
for(i=0; i < cuantos; i++)
printf("%d %d %s\n", emp[i].edad, emp[i].ttrabajo, emp[i].nombre);
}
int main() {
emple miemp[MAXEMP];
char line[MAXLIN], nom[MAXNOMBRE];
FILE *fp;
int i, edad=0, tiempo=0;
fp = fopen(argv[1], "r");
i = 0;
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);
fclose(fp);
}
Librería estándar de C
Función realizada por
El usuario
Función main,
punto donde comienza el programa
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
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
Conceptos Básicos(Variables, Constantes, Declaraciones)
•05/06/2011 •9
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 */
}
Conceptos Básicos (Tipos de Datos Fundamentales)
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.
•05/06/2011 •10
Conceptos Básicos (Tipos de Datos Fundamentales)
Tipos enteros◦ signed: el bit más significativo se utilizapara 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úmerospositivos o (nulos), utilizando todos los bits disponibles.
•05/06/2011 •11
Conceptos Básicos (Tipos de Datos Fundamentales)
Tipos coma flotanteLa 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 longdouble.
◦ el resto para la mantisa: 23 bits en el float, 52 bits en el double, 64 en el long double.
•05/06/2011 •12
Ejemplos (declaraciones)•05/06/2011 •13
int edad i, j = 3;
signed long a,x;
float z, temperatura;
char c1, c2;
Conceptos Básicos (Constantes)
C manipula varias clases de valoresenteros (29, 1234, etc), reales (3.14,1.0e-5) que son ejemplos deconstantes.
´a’, ´b’, etc, son constantes tipocaracter.
Una secuencia de 0 o más caracteresencerrados entre comillas (“Yo estoyaquí”) es una constante de cadena ocadena literal.
•05/06/2011 •14
Conceptos Básicos(constantes)
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.
•05/06/2011 •15
Conceptos Básicos(constantes)
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.
•05/06/2011 •16
Conceptos Básicos(Constantes)
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)
•05/06/2011 •18
Conceptos Básicos(Constantes)
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ágina
•05/06/2011 •19
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Los operadores aritméticos son: +, -, *,/, %
Son todos operadores binarios. El cociente entre 2 enteros devuelve un
entero, pero el cociente de dos númerosen coma flotante es un número en comaflotante.
5/2 = 2, pero 5./2. = 2.5
•05/06/2011 •20
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
•05/06/2011 •21
Reglas de precedencia (consultar bibliografía)
Ejemplos
m = a + b + c + d + e (álgebra)
5
m = (a + b + c + e)/5 (Lenguaje C)
Si se omiten los paréntesis, la expresión se calcula como:
m = a + b + c + e/5
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
•05/06/2011 •22
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 ´´;´´ la expresió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 •23
• Las { } se emplean para agrupar declaraciones o proposiciones 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));
EXPRESIONES, INSTRUCCIONES Y ASIGNACION
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
int b = 5;
a = b;
if (a = 1) {
....
}
int b = 5;
a= b;
if (a == 1) {
....
}
•05/06/2011
•24
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Operadores de Incremento yDecremento
-Son operadores unarios.-Pueden aplicarse a variables, perono a constantes o expresiones.
-Pueden usarse como-prefijos: ++a (preincremento), --a(predecremento)
-sufijos: a++ (postincremento), a--(postdecremento).
•05/06/2011 •25
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
•05/06/2011 •26
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 (Operadores aritméticos, relacionales, etc.)
Operadores RELACIONALES y deIGUALDAD
Son operadores binarios. Toman dosexpresiones como operandos yproducen el valor entero 0 ó 1.
•05/06/2011 •27
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
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)
•05/06/2011 •28
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Precedencia de operadores aritméticos y relacionales (consultar material de apoyo)
x + y < a + 2
es equivalente a:
(x+y) < (a + 2)
•05/06/2011 •29
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Operadores Lógicos && || y !: cuando se aplican a las
expresiones producen los valores enteros0 ó 1.
La negación lógica puede aplicarse a unaexpresión arbitraria.
Si una expresión tiene el valor 0 o 0.0, sunegación producirá el valor entero 1. Si laexpresión tiene un valor distinto de 0 sunegación producirá el valor entero 0.
•05/06/2011 •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
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Ejemplo:
while (a < b && c > 0)
/* hacer algo */
Reglas de precedencia (MA).
a < b && c < d
equivale a
(a < b) && (c < d)
•05/06/2011 •32
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Operador de asignación ampliada:
•05/06/2011 •33
La operación:
c = c + 3
puede escribirse de forma abreviada
utilizando el operador de asignación ampliada,
como:
c += 3
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
•05/06/2011 •34
En general, cualquier enunciado de la forma
variable = variable operador (expresion)
puede escribirse de la forma:
variable operador = expresion
Conceptos Básicos (Operadores aritméticos, relacionales, etc.)
Operador de asignación ampliada:
•05/06/2011 •35
k *= 3 + x
Es equivalente a:
k = k * (3 + x)
y no a:
k = k * 3 + x
Precedencia de Operadores
Ejemplo: en qué orden se calcula la siguiente expresión:
a * b + c/d – e
1. a*b -> x2. c/d -> y3. x + y -> z4. z - e
•05/06/2011 •36
Estructuras de Control
•05/06/2011 •37
Estructuras de Control (Condicionales)
La estructura de selección if
Ejecuta la acción indicada sólocuando la condición es verdadera,de lo contrario la acción espasada por alto.
if (nota >= 10) {printf (“Aprobo el curso”);aprobados++;
}
Estructuras de Control (Condicionales)
if (Condición)Acción;
o en caso de un cuerpo compuesto
if(Condición){
Acción1;Acción2;
...}
Estructuras de Control (Condicionales)
La estructura de selección if/elsepermite que el programador especifique acciones distintas cuando la condición es verdadera o falsa.
if (nota >= 10) {printf (“Aprobo el curso”);aprobados++;
} elsereprobados++;
#include <stdio.h>
int main()
{
int N;
printf("Ingrese el valor N: ");
scanf("%d", &N);
if((N % 2) == 1)
printf("El numero %d es IMPAR\n", N);
else
printf("El numero %d es PAR\n", N);
return 0;
}
Ejemplo
Estructuras de Control (Condicionales)
if (nota >= 85)
nota_5 = 5;
else if (nota >= 70) nota_5 = 4;
else
if (nota >= 50)
nota_5 = 3;
else nota_5 = 2;
if (nota >= 85) nota_5 = 5;else if (nota >= 70)
nota_5 = 4:else if (nota >= 50)
nota_5 = 3;else nota_5 = 2;
Estructuras de Control (Condicionales)
El operador condicional “?” es el únicooperador ternario
Expre1 ? Expr2 : Expr3
nota >= 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)
La estructura de selección múltiple switch
switch(expresion)
{
case constante_1: [serie de instr.1]
case constante_2: [serie de instr.2]
....
case constante_n: [serie de instr. n]
default: [serie de instr.]
}
Expresión entera
Expresión const. tipo entero
Estructuras de Control (Condicionales)
La instrucción switch
Es una forma de tomar decisiones múltiples de
manera bien estructurada, sólo puede usarse en
ciertos casos:-Cuando se chequea una sola variable; todas las
posibilidades 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 única
rama (u opción). Una rama por defecto „default‟ puede
capturar los todos los casos no especificados.
#include <stdio.h>
int main() /* Escribe el día de la semana */{
int dia;
printf("Introduce el día: ");
scanf("%d",&dia);
switch(dia){
case 1: printf("Lunes"); break;
case 2: printf("Martes"); break;
case 3: printf("Miércoles"); break;
case 4: printf("Jueves"); break;
case 5: printf("Viernes"); break;
case 6: printf("Sábado"); break;
case 7: printf("Domingo"); break;
}
}
Ejemplo
Impide que se ejecuten
el resto de instrucciones
del switch
main() {
int n;
printf (“introduzca un entero”);
scanf(“%d”, &n);
switch(n) {
case 0: printf(“nul\n”);
break;
case 1:
case 2: printf(“pequeño”);
case 3:
case 4:
case 5: printf(“mediano”);
break;
default: printf(“grande”);
}
1
pequeño
mediano
4
mediano
25
grande
Entrada del usuario
Salida del programa
Estructuras de Control (Ciclos)
La estructura de repetición WHILE◦ Permite al programador especificar que serepita una acción, en tanto cierta condiciónse mantenga verdadera.
◦ La instrucción puede ejecutarse cero o másveces.
while(condición)Acción;
while(condición){Acción1;Acción2;
}
Estructuras de Control (Ciclos)
La estructura de repetición WHILE (ejemplo)
product = 2;
while (product <= 1000)
product = 2 * product;
Estructuras de Control (Ciclos)
int total, counter, average;
total = 0;
counter = 1;
while (counter <= 10) {
printf(“Introduzca la nota: ”);
scanf(“%d”, ¬a);
total = total + nota;
counter += 1;
}
average = total /10;
printf(“El promedio es: %d\n”, average);
Ejemplo
Estructuras de Control (Ciclos)
La estructura de repetición FOR: Manejade forma automática los detalles de la repetición controlada por un contador.
int counter;
for (counter = 1; counter <= 10; counter++)
printf(“%d\n”, counter);
int counter = 1;
while(counter <= 10){
printf(“%d\n”, counter);
++counter;
}
Son
equivalentes
Estructuras de Control (Ciclos)
La estructura de repetición FOR:
for (counter = 1; counter <= 10; counter++)
Variable de control
Valor final de la v. de control
Valor inicial de
la variableIncremento de
la v. de control
Estructuras de Control (Ciclos)
int counter,total, average;
for(counter = 1; counter <= 10; counter++) {
printf(“Introduzca la nota: ”);
scanf(“%d”, ¬a);
total = total + nota;
}
average = total /10;
printf(“class average is %d\n”, average);
Ejemplo
Estructuras de Control (Ciclos)
int counter,total, average;
for(counter = 10; counter >= 1; counter--) {
printf(“Introduzca la nota: ”);
scanf(“%d”, ¬a);
total = total + nota;
}
average = total /10;
printf(“class average is %d\n”, average);
Ejemplo: ciclo decreciente
Estructuras de Control (Ciclos)
La estructura de repetición do-while:
do
proposición
while (expresión);
main() {
int counter = 1;
do {
printf(“%d ”, counter );
} while(++counter <= 10);
return 0;
}
#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!!\n\n"); } while(error);/* ahora puedo procesar el valor ingresado sabiendo que es correcto. */…return 0;} /* fin del main */
Ejemplo de uso del do-while
Estructuras de Control (Ciclos) break:
◦ Sirve para interrumpir el desarrollo de un bucle.
◦ En el caso de bucles anidados, breaksale del bucle más interno.
int x;
for (x=1; x <= 10; x++){
if (x == 5)
break;
printf(“%d\n”, x);
}
Imprime:
1 2 3 4
Estructuras de Control (Ciclos)
continue: Permite pasarprematuramente a la siguienteiteración del bucle
int x;
for (x=1; x <= 10; x++){
if (x == 5)
continue;
printf(“%d\n”, x);
}
Imprime:
1 2 3 4 6 7 8 9 10
Arreglos
•05/06/2011
Arreglos
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
int c [12]; /* Reserva espacio para 12 elementos
del tipo int */
4
5
- 15
78
c[0]
c[1]
c[2]
c[11]
nombre
Posición
o índice
Arreglos
Un índice puede tomar la forma de cualquier expresión aritmética de tipoentero: t[n-3], t[3*p-2*k]
La dimensión de un arreglo sólo puedeser una constante o una expresiónconstante
#define N 50
int t[N];
float h[2*N-1];
Arreglos
La declaración de un arreglo se realiza según
la 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
La inicialización de un arreglo local, puederealizarse 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};
Arreglos
CONJUNTO ORDENADO DE CARACTERES
(STRINGS)
Los strings son arreglos de caracteres que culminan con
el caracter NULL ( ASCII == 0 , simbolizado por la
secuencia 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";
Arreglos C no posee facilidades para el manejo de
“strings”, de modo que las siguientesinstrucciones 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);
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.
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 %d\n",k,square[i]);
}
return 0;}
int main()
{
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 %s\n",nombre,apellidos);
}
Arreglos de caracteres
Arreglos Multidimensionales
Los arreglos pueden tener más de unadimensión, por ejemplo :
int matriz[num_fil][num_col];
En C, un arreglo de dos dimensiones esen realidad un arreglo unidimensional, cada uno de cuyos elementos es un arreglo.
Los elementos se almacenan por filas.
Arreglos Multidimensionales
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 estaninicializados con NULL; y [0][6] y [0][7], etc no han sido inicializados.
int main() {
int array[2][3], i,j;
for (i = 0; i <= 1; i++)
for (j=0; j <= 2; j++)
a[i][j] = i + j;
int main() {
int array[2][3], i,j;
for (i = 0; i <= 1; i++)
for (j=0; j <= 2; j++) {
printf(“%d”, a[i][j]);
printf(“\n”);
}
}
Ejemplos
Nuevos tipos de Datos
•05/06/2011 •74
Definición de Nuevos Tipos
C proporciona un facilidad llamadatypedef para crear nuevos tipos de datos.
typedef int Longitud;
Longitud len, maxlen;
typedef int vector[3];
int a[3],b[3];
vector a, b; Son equivalentes
Tipo base Nuevo nombre tipo
Tipos de Datos Derivados(Estructuras)
Existe en C un tipo de variable compuesta,llamada ESTRUCTURA que puede contenervariables de distinto tipo. Ejemplo :
struct empleado {
int edad;
char nombre[50];
float sueldo;
};
struct empleado vendedores, oficinistas;
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 declaracionesde variables de éste tipo, podría obviarse el nombre de la estructura (empleado).
Tipos de Datos Derivados (Estructuras)
REGLAS PARA EL USO DE ESTRUCTURAS
Para dirigirnos a un miembro particular de una estructura existe un operador querelaciona al nombre de ella con el de cadamiembro; es el operador ( . ).
nombre_estructura.nombre_del_miembro
Tipos de Datos Derivados (Estructuras)
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)
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;
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.
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;
Tipos de Datos Derivados (Estructuras)
Los arreglos de estructuras pueden inicializarsede la forma habitual:
item almacen1[100] ={
"tornillos" , 120 , .15 ,
"tuercas" , 200 , .09 ,
”clavos" , 90 , .01
} ;
item almacen2[] = {
{ 'i','t','e','m','1','\0' } ,10,1.5,
{ 'i','t','e','m','2','\0' },20,1.0,
{ '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 ,
} ;
Tipos de Datos Derivados (Estructuras)
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);
#define NUM_INTER 100
struct Intervalo {
double Lower, /* Límite inferior del intervalo */
Upper; /* Límite superior del intervalo */
int Counter; /* Cantidad de puntos dentro */
};
int main() {
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);
}}
Ejemplo.
Tipos de Datos Derivados (Uniones)
Una “union” es una variable que puedealmacenar (en momentos diferentes) objetosde diferentes tamaños y tipos.
Para este tipo de variables se usa la instrucciónunion:
union numero {
short tiposhort;
long tipolong;
double tipofloat;
} minumero
printf("%f",minumero.tipofloat);
Tipos de Datos Derivados (Uniones)
struct {
char *name;
int flags;
int utype;
union {
int ival;
float fval;
char *sval;
}u;
} symtab[NSYM];
if (symtab[i].utype == INT)
printf(“%d\n”,
symtab[i].u.ival);)
typedef struct {
int carnet;
}estudiante;
typedef struct {
int cedula;
} profesor;
typedef struct {
char pasaporte[30];
} prof_invitado;
typedef struct {
int clase_personal;
int edad;
tipo_id identif;
} personal;
typedef union {
profesor prof_id;
estudiante est_id;
prof_invitado pin_id;
} tipo_id;
printf(“%s” , p.identif.pin_id.pasaporte);
personal p;
if (p.clase_personal == 3)
CastingC es uno de los pocos lenguajes que permite
forzar una variable de uno tipo para que sea
de otro tipo (coercion). Esto se logra a través del
operador 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. */
Casting• Puede usarse con cualquiera de los tipos de
datos simples:
int num_entero;
char letra='A';
num_entero=(int)letra; /* asigna 65 (El código
ASCII de `A') a num_entero*/
• Algunas veces se realiza en forma automática.
• Una buena regla es: si tiene duda, coloque el
cast.
CastingOtro uso del cast es cuando se quiere estar seguro de
que 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 */
Tipos de datos enumerados
Los tipos de datos enumeradoscontienen una lista de constantes quepueden ser direccionadas comovalores enteros.
enum dias {lunes, martes, ...,
domingo} semana;
enum dias semana1, semana2;
Tipos de datos enumerados
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
Ejemplo:
enum day {dom, lun, mar, mier, jue, vier, sab} d1, d2;
d1 = vier;
....
if (d1 == d2) ....
Bibliografía
Brian Kernighan y Dennis Ritchie. El Lenguaje de Programación C. PrenticeHall.
http://www.its.strath.ac.uk/cources/c
•05/06/2011 •95