1/222
Conjunto de tarjetas estilo pregunta-respuesta que abordan los conceptos esenciales de Programación I: algoritmos, estructuras de control, tipos de datos, programación en C, vectores, matrices, registros, punteros, archivos, recursividad y listas enlazadas.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No study sessions yet.
¿Qué es un algoritmo?
Una secuencia finita y ordenada de pasos lógicos que permiten resolver un problema.
Menciona los tres pasos básicos para construir un algoritmo.
1) Análisis del problema, 2) Diseño del algoritmo, 3) Verificación/Pruebas.
Cita dos características fundamentales que debe cumplir todo algoritmo.
Debe ser preciso y finito (tener inicio y fin definidos).
¿Qué tipos de lenguajes de programación existen según su nivel?
Lenguaje binario (máquina), lenguaje ensamblador (bajo nivel) y lenguajes de alto nivel.
Ventaja principal de un lenguaje de alto nivel sobre uno ensamblador.
Son independientes del hardware y más cercanos al lenguaje humano, facilitando la programación.
¿Qué es un programa?
Conjunto de instrucciones que, ejecutadas en orden, solucionan un problema.
¿Qué etapas recorre un programa en C desde que se escribe hasta que se ejecuta?
Edición, compilación, linkeo, posible depuración y ejecución.
Define dato e indica sus tres características.
Un dato es un valor manipulable por el programa; posee nombre, tipo y valor.
¿Cuál es la diferencia entre tipo de dato estándar y definido por el usuario?
El estándar viene predefinido en el lenguaje; el definido por el usuario lo crea el programador a partir de tipos básicos.
Diferencia entre constante y variable.
La constante mantiene su valor durante toda la ejecución; la variable puede cambiarlo.
¿Qué operador se usa para la asignación en C?
El signo igual (=).
¿Para qué sirve la función scanf?
Para leer datos desde la entrada estándar y almacenarlos en variables.
¿Para qué sirve printf?
Para mostrar datos o mensajes en la salida estándar.
Explica la estructura selectiva "if" simple.
Evalúa una condición y ejecuta un bloque de instrucciones solo si la condición es verdadera.
¿Qué es el operador condicional "? :"?
Operador ternario que permite decidir entre dos expresiones en una sola línea.
Nombra tres estructuras de repetición básicas en C.
for, while y do-while.
¿Qué diferencia existe entre while y do-while?
while evalúa la condición antes de entrar al bucle; do-while la evalúa al final, garantizando al menos una iteración.
¿Para qué sirve la sentencia switch/case?
Para seleccionar una entre múltiples alternativas según el valor de una variable entera o carácter.
¿Qué realiza la sentencia break dentro de un switch?
Termina la ejecución del case actual y sale de la estructura switch.
Define diagrama de flujo.
Representación gráfica de un algoritmo usando símbolos conectados por líneas de flujo.
¿Qué es el seudocódigo?
Notación descriptiva intermedia entre lenguaje natural y lenguaje de programación que especifica algoritmos.
Partes principales de un programa en C.
Directivas #include, declaración de constantes/tipos/variables y función main con el cuerpo del programa.
¿Qué simboliza el operador & en C?
Devuelve la dirección de memoria de una variable (operador "dirección de").
¿Y el operador * aplicado a un puntero?
Indirecciona: accede al contenido de la dirección almacenada en el puntero.
Define puntero.
Variable que contiene la dirección de memoria de otra variable.
Explica cómo se pasa un argumento por referencia en C.
Enviando a la función la dirección (&var) y recibiéndola como puntero (*ptr); así la función puede modificar la variable original.
¿Qué relación existe entre arreglos y punteros?
El nombre de un arreglo se comporta como un puntero al primer elemento; arr[i] equivale a *(arr+i).
Sintaxis para declarar un vector de 50 enteros llamado v.
int v[50];
¿Cómo se declara una matriz de 3 filas y 4 columnas de float?
float m[3][4];
¿Qué es un struct en C?
Tipo de dato compuesto que agrupa variables de distintos tipos en un mismo registro.
Ventaja de usar registros (struct).
Permiten modelar objetos reales agrupando múltiples datos relacionados bajo un solo nombre.
¿Para qué sirve typedef con estructuras?
Para asignar un nombre personalizado al tipo struct y simplificar futuras declaraciones.
Concepto de recursividad.
Técnica donde una función se llama a sí misma para resolver un problema dividiéndolo en subproblemas más simples.
Elementos imprescindibles de una función recursiva.
Caso base (condición de parada) y paso recursivo (llamada a sí misma con datos más simples).
Define archivo (file) en programación.
Estructura dinámica almacenada en disco que contiene registros datos y puede crecer o reducirse durante la ejecución.
Función para abrir un archivo y sus parámetros principales.
fopen(nombre, modo) donde modo puede ser "r", "w", "a", "r+", etc.
¿Para qué sirven fprintf y fscanf?
Para escribir y leer texto formateado en/desde archivos usando un descriptor FILE*.
¿Qué representan stdin y stdout?
Flujos estándar de entrada y salida (teclado y pantalla por defecto).
Explica una lista simplemente enlazada.
Estructura dinámica donde cada nodo contiene datos y un puntero al siguiente nodo.
¿Cómo difiere una lista doblemente enlazada?
Cada nodo posee dos punteros: uno al siguiente y otro al nodo anterior, permitiendo recorrer la lista en ambos sentidos.
¿Qué es malloc?
Función que reserva dinámicamente un bloque de memoria y devuelve un puntero al inicio del bloque.
¿Por qué es importante liberar memoria dinámica?
Para evitar fugas (memory leaks) y devolver la memoria al sistema; se usa free(ptr).
Operadores lógicos básicos en C.
&& (AND), || (OR) y ! (NOT).
¿Qué indica la precedencia de operadores?
El orden en que se evalúan los operadores dentro de una expresión; ^ o (), * / %, + -, etc.
¿Qué hace la función sizeof?
Devuelve (en bytes) el tamaño ocupado en memoria por una variable o tipo de dato.
¿Para qué sirve el cast (tipo)expr en C?
Convierte explícitamente el valor de una expresión a otro tipo de dato.
Diferencia entre memoria estática y dinámica.
La estática se reserva en tiempo de compilación (globals, arrays fijos); la dinámica se reserva y libera en tiempo de ejecución (malloc/free).
¿Qué es un buffer?
Zona temporal de memoria usada para almacenar datos mientras se transfieren entre el programa y un dispositivo o archivo.
Explica la sentencia continue dentro de un bucle.
Salta el resto de las instrucciones del ciclo actual y pasa directamente a la próxima iteración.
¿Qué es un algoritmo?
Una secuencia finita y ordenada de pasos lógicos que permiten resolver un problema.
Menciona los tres pasos básicos para construir un algoritmo.
1) Análisis del problema, 2) Diseño del algoritmo, 3) Verificación/Pruebas.
Cita dos características fundamentales que debe cumplir todo algoritmo.
Debe ser preciso y finito (tener inicio y fin definidos).
¿Qué tipos de lenguajes de programación existen según su nivel?
Lenguaje binario (máquina), lenguaje ensamblador (bajo nivel) y lenguajes de alto nivel.
Ventaja principal de un lenguaje de alto nivel sobre uno ensamblador.
Son independientes del hardware y más cercanos al lenguaje humano, facilitando la programación.
¿Qué es un programa?
Conjunto de instrucciones que, ejecutadas en orden, solucionan un problema.
¿Qué etapas recorre un programa en C desde que se escribe hasta que se ejecuta?
Edición (escribir el código), compilación (traducir a lenguaje de máquina), linkeo (unir partes), posible depuración (encontrar errores) y ejecución (correr el programa).
Define dato e indica sus tres características.
Un dato es un valor manipulable por el programa; posee nombre (cómo lo llamas), tipo (qué clase de dato es, ej. número, texto) y valor (el contenido actual).
¿Cuál es la diferencia entre tipo de dato estándar y definido por el usuario?
El estándar viene predefinido en el lenguaje (como int para números enteros); el definido por el usuario lo crea el programador a partir de tipos básicos para organizar mejor la información (como un struct para agrupar datos de una persona).
Diferencia entre constante y variable.
La constante mantiene su valor fijo durante toda la ejecución del programa (ej. PI 3.14159); la variable puede cambiar su valor en cualquier momento durante la ejecución (ej. la edad de una persona que se actualiza).
¿Qué operador se usa para la asignación en C?
El signo igual (=). Por ejemplo, x = 10; significa que a la variable x se le asigna el valor 10.
¿Para qué sirve la función scanf?
Para leer datos que el usuario introduce desde la entrada estándar (normalmente el teclado) y guardarlos en variables dentro del programa.
¿Para qué sirve printf?
Para mostrar datos o mensajes en la salida estándar (normalmente la pantalla de la consola).
Explica la estructura selectiva "if" simple.
Evalúa una condición. Si esa condición es verdadera, ejecuta un bloque de instrucciones; si es falsa, simplemente salta ese bloque y continúa con el resto del programa.
¿Qué es el operador condicional "? :"?
Es un operador especial que permite decidir rápidamente entre dos valores o expresiones basándose en una condición, todo en una sola línea. Su sintaxis es condicion ? expresion1 : expresion2;.
Nombra tres estructuras de repetición básicas en C.
for, while y do-while. Se usan para repetir un bloque de código varias veces.
¿Qué diferencia existe entre while y do-while?
while evalúa la condición antes de entrar al bucle, por lo que podría no ejecutarse ninguna vez si la condición es falsa desde el principio. do-while evalúa la condición después de ejecutar el bucle por primera vez, garantizando que el bloque de código se ejecute al menos una vez.
¿Para qué sirve la sentencia switch/case?
Para seleccionar de forma limpia y eficiente una entre múltiples alternativas posibles, basándose en el valor de una variable entera o de tipo carácter. Evita muchos if-else if anidados.
¿Qué realiza la sentencia break dentro de un switch?
Termina inmediatamente la ejecución del case actual y saca el control del programa fuera de la estructura switch. Es crucial para evitar que se ejecuten los siguientes case de forma indeseada.
Define diagrama de flujo.
Representación gráfica de un algoritmo usando símbolos estandarizados (cuadrados, rombos, círculos, etc.) conectados por líneas (flechas) que indican el flujo de ejecución. Es útil para visualizar la lógica.
¿Qué es el seudocódigo?
Es una forma de escribir algoritmos que está a medio camino entre el lenguaje natural (como el español) y un lenguaje de programación real. Usa palabras clave comunes (Inicio, Fin, Leer, Escribir, Si...Entonces...FinSi) para describir los pasos de una manera estructurada y fácil de entender.
Partes principales de un programa en C.
# (ej. #include <stdio.h> para incluir librerías).main(): Es el corazón del programa, donde empieza la ejecución y se escriben las instrucciones principales.¿Qué simboliza el operador & en C?
Devuelve la dirección de memoria donde está almacenada una variable. Es decir, te dice "dónde vive" la variable en la RAM. (Es el operador "dirección de").
¿Y el operador * aplicado a un puntero?
Cuando se aplica a un puntero, "indirecciona": accede al contenido que está guardado en la dirección de memoria a la que apunta el puntero. Es decir, te permite ver o modificar el dato "que vive en esa dirección".
Define puntero.
Una variable especial cuyo valor no es un dato directamente (como un número o una letra), sino una dirección de memoria. Guarda el "domicilio" de otra variable, permitiendo acceder a ella de forma indirecta.
Explica cómo se pasa un argumento por referencia en C.
En lugar de enviar el valor de una variable a una función, se envía su dirección de memoria (usando &var). La función recibe esta dirección con un puntero (tipo *nombre_ptr). Así, los cambios que la función haga a través del puntero (*nombre_ptr = ...;) afectan directamente a la variable original, no a una copia.
¿Qué relación existe entre arreglos y punteros?
El nombre de un arreglo (vector o matriz) se comporta como un puntero constante al primer elemento de ese arreglo. Puedes acceder a los elementos usando arr[i] o, de forma equivalente, *(arr + i) (desplazamiento de punteros).
Sintaxis para declarar un vector de 50 enteros llamado v.
int v[50];
¿Cómo se declara una matriz de 3 filas y 4 columnas de float?
float m[3][4];
¿Qué es un struct en C?
Es un tipo de dato que te permite agrupar variables de diferentes tipos (como un nombre de texto, una edad entera, una altura decimal) bajo un único nombre para formar un "registro" o "ficha" más complejo. Es útil para modelar objetos reales.
Ventaja de usar registros (struct).
Permiten modelar objetos complejos del mundo real (como un alumno con nombre, edad, y calificación) agrupando múltiples datos relacionados, incluso de distintos tipos, bajo un solo nombre. Esto hace que el código sea más organizado, legible y fácil de manejar.
¿Para qué sirve typedef con estructuras?
Es una palabra clave que sirve para crear un "alias" o un "apodo" para un tipo de dato existente. Con estructuras (struct), se usa para dar un nombre más corto y legible al struct, simplificando las futuras declaraciones de variables de ese tipo.
Ejemplo: typedef struct Persona { ... } DatosPersona; permite luego hacer DatosPersona miPersona; en lugar de struct Persona miPersona;.
Concepto de recursividad.
Una técnica de programación donde una función se llama a sí misma para resolver un problema, dividiéndolo en versiones más pequeñas y simples del mismo problema. Imagina resolver una tarea grande dividiéndola en tareas idénticas pero más manejables, hasta llegar a la más simple que ya sabes cómo resolver.
Elementos imprescindibles de una función recursiva.
Define archivo (file) en programación.
En programación, un archivo es una estructura dinámica de datos almacenada en un disco (no en la memoria RAM, que se borra al apagar el programa). Contiene registros o datos que el programa puede leer o escribir, y puede crecer o reducirse de tamaño durante la ejecución del programa.
Función para abrir un archivo y sus parámetros principales.
fopen(nombre_del_archivo, modo_de_apertura).
nombre_del_archivo: Cadena de texto con la ruta y el nombre del archivo (ej. "datos.txt").modo_de_apertura: Cadena que indica cómo quieres abrir el archivo:"r": para leer (read)."w": para escribir (write), crea el archivo si no existe o lo sobrescribe si ya existe."a": para añadir (append), escribe al final del archivo."r+": para leer y escribir (el archivo debe existir)."rb", "wb", etc.: para modos binarios (archivos de bytes crudos).¿Para qué sirven fprintf y fscanf?
Ambas son versiones de printf y scanf pero para archivos:
fprintf: Se usa para escribir datos o texto formateado en un archivo (en lugar de la pantalla), usando un descriptor FILE* que representa el archivo abierto.fscanf: Se usa para leer datos o texto formateado desde un archivo (en lugar del teclado), también usando un descriptor FILE*.¿Qué representan stdin y stdout?
stdin (Standard Input) representa el flujo de entrada estándar, que por defecto es el teclado desde donde el usuario introduce datos.stdout (Standard Output) representa el flujo de salida estándar, que por defecto es la pantalla de la consola donde el programa muestra sus resultados.
También existe stderr (Standard Error), para mensajes de error.
Explica una lista simplemente enlazada.
Es una estructura de datos dinámica donde los elementos (llamados "nodos") están enlazados uno tras otro. Cada nodo contiene los datos que queremos guardar y un puntero (una dirección de memoria) que "apunta" al siguiente nodo en la lista. El último nodo apunta a NULL.
¿Cómo difiere una lista doblemente enlazada?
A diferencia de la lista simplemente enlazada, donde cada nodo solo tiene un puntero al siguiente, en una lista doblemente enlazada, cada nodo tiene dos punteros: uno que apunta al siguiente nodo y otro que apunta al nodo anterior. Esto permite recorrer la lista en ambos sentidos (hacia adelante y hacia atrás).
¿Qué es malloc?
Es una función de C que se usa para reservar dinámicamente un bloque de memoria en el "heap" (una zona de memoria disponible). Devuelve un puntero al inicio de ese bloque de memoria. Se usa para asignar memoria en tiempo de ejecución, es decir, mientras el programa se está ejecutando, y no antes.
¿Por qué es importante liberar memoria dinámica?
Porque la memoria que se reserva dinámicamente con malloc (u otras funciones similares) no se libera automáticamente al terminar una función o al salir de un bloque de código. Si no liberas esta memoria con free(ptr) cuando ya no la necesitas, se produce una "fuga de memoria" (memory leak): esa memoria permanece ocupada por tu programa y no puede ser utilizada por otros programas ni por el sistema operativo, lo que puede causar problemas de rendimiento o bloqueos a largo plazo.
Operadores lógicos básicos en C.
&& (AND lógico): Devuelve verdadero (1) si ambas condiciones son verdaderas.|| (OR lógico): Devuelve verdadero (1) si al menos una de las condiciones es verdadera.! (NOT lógico): Invierte el valor de verdad de una condición (verdadero se vuelve falso, y falso se vuelve verdadero).
¿Qué indica la precedencia de operadores?
Es el orden en que se aplican los operadores en una expresión matemática o lógica. Por ejemplo, la multiplicación (*) y la división (/) tienen mayor precedencia que la suma (+) y la resta (-), lo que significa que se calculan primero. Los paréntesis () siempre tienen la mayor precedencia y fuerzan el orden de evaluación.
¿Qué hace la función sizeof?
Devuelve el tamaño en bytes que ocupa en memoria una variable o un tipo de dato. Es útil para la asignación dinámica de memoria o para saber cuánta memoria utiliza una estructura.
¿Para qué sirve el cast (tipo)expr en C?
Sirve para convertir explícitamente el valor de una expresión de un tipo de dato a otro. Se hace colocando el nuevo tipo de dato entre paréntesis delante de la expresión que se quiere convertir.
Ejemplo: (float)numero_entero / 2;
Diferencia entre memoria estática y dinámica.
malloc y free). Su tamaño puede variar y el programador es responsable de gestionarla explícitamente.¿Qué es un buffer?
Una zona temporal de memoria que se usa para almacenar datos mientras se transfieren entre el programa y un dispositivo (como el teclado, la pantalla, un disco duro) o un archivo. Actúa como un intermediario para optimizar la velocidad de las operaciones de entrada/salida.
Explica la sentencia continue dentro de un bucle.
Cuando se encuentra dentro de un bucle (for, while, do-while), continue salta el resto de las instrucciones del ciclo actual y pasa directamente a la próxima iteración del bucle. Es útil para omitir ciertos pasos bajo una condición específica.
¿Qué es un compilador?
Un programa que traduce el "código fuente" (el que escribes en un lenguaje como C) a "código máquina" (instrucciones que la computadora puede entender y ejecutar directamente).
¿Qué es el código fuente?
Es el texto legible del programa que escribes usando un lenguaje de programación (como C). Este texto es el que luego el compilador traduce a código máquina.