Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen Bianca
Resumen Bianca
RESUMEN
CODIGO: 216706604
Alumno:
Propósito general asociado de modo universal, al sistema operativo UNIX. Sin embargo, la
popularidad, eficacia y potencia de c, se ha producido porque este lenguaje no está
prácticamente asociado a ningún sistema operativo, ni a ninguna máquina, en especial. Esta
es la razón fundamental por la cual c, es conocido como el lenguaje de programación de
sistemas, por excelencia.
Se pude utilizar para desarrollar sistemas operativos, compiladores, sistemas de tiempo real
y aplicaciones de comunicaciones.
Puede ser escrito para un tipo de computadora y trasladarse a otra computadora con pocas o
ninguna modificación.
Estructura General de un Programa C y Cómo Insertar Comentarios
Para insertar comentarios solo se necesitan estas dos diagonales “//” cabe mencionar que no
se va imprimir en el programa.
Otra forma más práctica que se utiliza para insertar muchos comentarios es el “/*” este nos
evita estar insertando en cada comentario las diagonales. Se pone en el principal comentario
y se cierra en el último.
Palabras reservadas:
Estas palabras sirven para indicar al computador que realice una tarea muy determinada
(desde evaluar una comparación, hasta definir el tipo de una variable) y tienen un especial
significado para el compilador.
Existen dos tipos de identificadores; predefinidos (que forman parte del lenguaje c) y
definidos (que son por parte del programador).
Tipos de
Descripción Memoria
Datos
El tipo de la variable nos indica el conjunto de valores que puede tomar y las
operaciones que pueden realizarse con ella. Existen cinco tipos de datos básicos en C:
unsigned long int = unsigned long 4 bytes 0 a 4.294.967.295 (El mayor entero permitido en
'C')
Variables:
Una variable es una zona de memoria en la que el compilador puede almacenar datos. El
tamaño de esta zona de memoria viene determinado por el tipo del que declaramos la
variable.
Al declarar una variable lo que hacemos es dar orden al compilador para que reserve una
zona de memoria del tamaño adecuado (según el tipo), dando un nombre en dicha zona.
Opcional
Es posible inicializarlo y declarar más de una variable del mismo tipo en la misma sentencia:
Las variables pueden ser de dos tipos según el lugar donde se declaren: globales o locales.
Los globales se declaran fuera de las funciones. Pueden ser utilizadas en cualquier parte del
programa, desde su declaración y hasta el final de éste.
Las locales se declaran dentro de una función (se declaran antes de la primea instrucción del
bloque en que son declaradas {}).
Un ejemplo seria; PI=3.1416 (Lo podemos declarar como una constante y durante el
programa no se va modificar ya que está definido)
Las constantes definidas con #define se denominan constantes simbólicas, y algunas de ellas
existen de forma predeterminada en el lenguaje.
Ejemplo:
Para indicar al compilador que vamos a incluir ficheros externos podemos hacerlo de dos
maneras (siempre antes de las declaraciones).
1. Indicándole al compilador la ruta donde se encuentra el fichero.
o #include "misfunc.h"
o #include "c:\includes\misfunc.h"
o #include <misfunc.h>
Son aquellos que permiten realizar cálculos con valores numéricos para obtener un
resultado. Los operadores aritméticos más habituales son la suma, resta, multiplicación y
división.
Ejemplo:
Printf y Scanf:
printf() y scanf() son funciones que nos permitirán imprimir datos en pantalla o por el
contrario, obtener datos a través del teclado.
Ejemplo:
scanf:
Permite leer varios tipos de datos de una sola vez, tales como enteros, números decimales o
cadenas de caracteres.
scanf(variable_en_la_que_se_introduzca_en_el_teclado);
Operadores relacionales o de comparación <, >, ==, !=
Se llaman operadores relacionales o de comparación a aquellos que permiten comparar dos
valores evaluando si se relacionan cumpliendo el ser menor uno que otro, mayor uno que
otro, igual uno que otro, etc.
Operador Significado
Operador == Igual a
OPERADORES LÓGICOS EN C
Operador Y (&&)-AND lógico (operador binario que devuelve 0 (falso) si alguno de los
operadores es falso(0), y devuelve 1 (verdadero) en caso contrario.
Operador 0 (ll)- OR lógico (operador binario que devuelve 0 si los dos operadores se evalúan
a falso, y devuelve 1 en caso contrario).
Operador (!)-NOT lógico (operador unario que devuelve 1 si el operador se evalúa a falso(0),
y devuelve 0 (falso) en caso contrario.
Ejemplo:
if (condición) sentencia1;
else if (condición) sentencia2;
else if (condición) sentencia3;
else sentencia4;
Switch:
Los condicionales Switch, son una estructura de control condicional, que permite definir
múltiples casos que puede llegar a cumplir una variable cualquiera, y qué acción tomar en
cualquiera de estas situaciones, incluso es posible determinar qué acción llevar a cabo en
caso de no cumplir ninguna de las condiciones dadas.
Cada case puede incluir una o más sentencias sin necesidad de ir entre llaves, ya que se
ejecutan todas hasta que se encuentra la sentencia BREAK. La variable evaluada sólo puede
ser de tipo entero o carácter. Default ejecutará las sentencias que incluya, en caso de que la
opción escogida no exista.
x y resultado x y resultado
true true true true true true
true false false true false true
false true false false true true
false false false false false false
x resultado
true false
false true
Son estructuras de repetición que permiten realizar tareas recurrentes y se usan para el
control de flujo de un proceso un número determinado de veces.
Bucle While
Su sintaxis es:
while (condición) sentencia;
Con esta sentencia se controla la condición antes de entrar en el bucle. Si ésta no se cumple,
el programa no entrará en el bucle.
Naturalmente, si en el interior del bucle hay más de una sentencia, éstas deberán ir entre
llaves para que se ejecuten como un bloque.
Do While:
La única diferencia entre las sentencias while y do...while es que con la segunda el cuerpo del
bucle se ejecutará por lo menos una vez.
Bucle For:
Su sintaxis es:
for (inicialización;condición;incremento) {
sentencia1;
sentencia2;
}
La inicialización indica una variable (variable de control) que condiciona la repetición del
bucle. Si hay más, van separadas por comas:
Esta sentencia se utiliza para terminar la ejecución de un bucle o salir de una sentencia
SWITCH.
Sentencia Continue
La sentencia continue provoca un salto hasta el final del cuerpo del bucle (puede que sólo
aparezca dentro del cuerpo del bucle de los bucles for, while, y do-while).
Los globales se declaran fuera de las funciones. Pueden ser utilizadas en cualquier
parte del programa, desde su declaración y hasta el final de éste.
Las locales se declaran dentro de una función (se declaran antes de la primea
instrucción del bloque en que son declaradas {}).
Funciones:
TIPO FUNCIÓN:
Puede ser de cualquier tipo de los que conocemos. El valor devuelto por la función será de
este tipo. Por defecto, es decir, si no indicamos el tipo, la función devolverá un valor de tipo
entero ( int ). Si no queremos que retorne ningún valor deberemos indicar el tipo vacío
( void ).
Los prototipos de las funciones pueden escribirse antes de la función main o bién en otro
fichero. En este último caso se lo indicaremos al compilador mediante la directiva #include.
Arrays, arreglos, cadenas o vectores:
Los arrays son variables estructuradas como cadena de caracteres, donde cada elemento se
almacena de forma consecutiva en un número de notaciones.
Tamaño: tamaño indica el número de elementos del vector (se debe indicar entre
corchetes [ ] ).
For: el primer for sirve para rellenar el vector y el segundo para visualizarlo. Las posiciones
van de 0 a 9 ( total 10 elementos).
Cadenas de caracteres: es un conjunto de caracteres valores de tipo “char”,
terminados en carácter nulo. Internamente se almacena en posiciones consecutivas de
memoria. Se declara;
Nota: Al declarar una cadena deberemos reservar una posición más que la longitud
que queremos que tenga dicha cadena
Matriz tridimensional: se utiliza, por ejemplo, para trabajos gráficos con objetos 3D.
La siguiente declaración crea una matriz de enteros tridimensional (5 x 10 x 4):
int arr[5][10][4];
Arrays bidimensionales
Una matriz bidimensional es, en esencia, una lista de matrices unidimensionales. Para
declarar una matriz entera bidimensional de dimensiones mxn, podemos escribir de la
siguiente manera:
type arrayName[m][n];
Donde type puede ser cualquier tipo de datos de C válido ( int , float , etc.) y
arrayName puede ser cualquier identificador de C válido. Una matriz bidimensional se puede
visualizar como una tabla con m filas n columnas. El orden sí importa en C. Una matriz
bidimensional a, que contiene tres filas y cuatro columnas se puede mostrar de la siguiente
manera:
Por lo tanto, cada elemento de la matriz a se identifica por un nombre de elemento
de la forma a[i] [j] , donde a es el nombre de la matriz, i representa qué fila y j representa qué
columna.
Punteros:
Un puntero es una variable que contiene la dirección de memoria de otra variable. Se usan
para pasar información entre una función y puntos de llamada.
Su sintaxis es la siguiente:
tipo *nombre;
Donde nombre es el nombre de la variable, y tipo es el tipo del elemento cuya dirección
almacena el puntero.
Asignación
Los punteros se asignan igual que el resto de las variables. Es posible desplazar un puntero
recorriendo posiciones de memoria. Para ello podemos usar los operadores de suma, resta,
incremento y decremento (+, -, ++, - -).
Estructuras y Uniones
El formato general de una declaración struct es:
struct [nombre_estructura] {
campo_1;
campo_2;
} [variable_estructura];
El formato general de una declaración union es:
union [nombre_union] {
campo_1;
campo_2;
} [variable_union];
La diferencia entre una variable tipo union y un registro struct es que la primera implica que
todos los campos ocupan la misma posición de memoria (que será del tamaño del mayor de
ellos). Se utiliza cuando se quiere que una misma variable pueda contener datos de distinto
tipo, o cuando se quiere utilizar una misma variable desde distintos puntos de vista.
Typedef
:
Ficheros - Abrir, cerrar, leer y agregar archivos de texto:
Antes de abrir un fichero se declara un puntero de tipo FILE, para abrir el fichero utilizaremos
la función fopen( ).
Su sintaxis es:
FILE *puntero;
puntero = fopen ( nombre del fichero, "modo de apertura" );
Para cerrar los ficheros utilizaremos la función fclose( ); Esta función cierra el fichero, cuyo
puntero le indicamos como parámetro. Si el fichero se cierra con éxito devuelve 0.
fwrite() se usa para escribir datos binarios en un archivo, recibe tres parámetros, el
primero es la variable a guardar, el segundo el tamaño de la variable a guardar, el tercero
cuantas veces se va a guardar y por último la variable de archivo.
fread() se usa para leer datos binarios de un archivo, recibe tres parámetros, el
primero es la variable donde se van a guardar los datos, el segundo el tamaño de la
variable a leer, el tercero cuantas veces se va a leer y por último la variable de archivo.
Malloc: reserva en memoria una zona de tamaño bytes, y devuelve un puntero al inicio de
esa zona.
free( puntero );
Esta función libera de la memoria la zona que habíamos reservado anteriormente con la
función malloc.
Pilas
Colas
Listas
Pilas
Este tipo de estructuras se caracteriza porque todas las operaciones se realizan en el mismo
lado.
Colas
Se caracteriza porque insertamos los elementos por un lado y los extraemos por el otro lado.
El primer elemento en entrar es el primero en salir. Para gestionar la cola utilizaremos 3
punteros (para la pila solo eran necesarios 2).
La estructura:
Este tipo de estructuras se caracteriza porque los elementos están enlazados entre sí, de
manera que además de las acciones habituales de insertar, extraer y visualizar también
podremos buscar un elemento.
struct lista
{
tipo variables;
struct lista *sig;
}*CAB=NULL,*AUX=NULL,*F=NULL,*P=NULL;
Recursividad:
Se llama recursividad a un proceso mediante el que una función se llama a sí misma de forma
repetida, hasta que se satisface alguna determinada condición
Búsqueda Lineal: compara los elementos del array con la clave de búsqueda hasta que
encuentra el elemento o bien hasta que se determina que no se encuentra.
Ordenamiento Burbuja: funciona revisando cada elemento de la lista que va a ser ordenada
con el siguiente, intercambiándolos de posición si están en el orden equivocado.
Consiste en encontrar el menor de todos los elementos del arreglo o vector e intercambiarlo
con el que está en la primera posición. Luego el segundo más pequeño, y así sucesivamente
hasta ordenarlo todo. Su implementación requiere O(n2) comparaciones e intercambios para
ordenar una secuencia de elementos.
Cadenas:
char texto[20];
– Organización secuencial
Los archivos organizados secuencialmente contienen un registro particular –el último- que
contiene una marca fin de archivo detectable mediante las funciones
– Los registros deben contener un campo específico denominado clave que identifica a cada
registro como único, es decir, dos registros no pueden tener el mismo valor clave.
– Existencia de una correspondencia entre los posibles valores de la clave y las direcciones
posibles sobre el soporte.
– Los registros están situados en un soporte direccionable por el orden de los valores
indicados por la clave.
– Existe un índice con cada una de las posiciones direccionables, que almacena la dirección
de la posición y el valor de la clave; en esencia, el índice contiene la clave del último registro
y la dirección de acceso al primer registro del bloque.
Listas enlazadas:
Es una estructura dinámica de datos. Cada objeto de la estructura está formado por los datos
junto con un puntero al siguiente objeto. Al manejar punteros, los datos no tienen por qué estar
situados en posiciones consecutivas de la memoria, y lo más normal, es que estén dispersos.
Pilas Y Colas:
Son estructuras de datos que se utilizan generalmente para simplificar ciertas operaciones.
Una pila es una colecciona ordenada de elementos en la cual los datos se insertan o se
retiran por el mismo extremo llamado “parte superior” de la pila.
Las operaciones básicas de una cola son “enqueue” (meter) y “dequeue” (sacar)