Conceptos Fundamentales de Programación en C: Ejercicios Resueltos

Conceptos Fundamentales de Programación en C: Ejercicios Resueltos

Macros en C

Se utiliza #define para incluir una macro.

  • Ejemplo 1: #define PI 3.14 (Macro constante, donde PI es el nombre y 3.14 su valor).
  • Ejemplo 2: #define R(x,y) x*y (Macro con argumentos, donde R es el nombre, x e y los argumentos y x*y el valor).

Funciones en C

Una función se declara como:

int func(int *i) {
if (i == NULL)
return 0;
return *i;
}

Y se utiliza en un programa como:

int *i = malloc(sizeof(int));
*i = 1;
printf("%d", func(i));

Esta función retorna el número 1 ya que i no es nulo. La salida por pantalla es: 1.

Ejercicio 1: Macro para Calcular el Área de un Triángulo

Macro que se llame T para calcular el área de un triángulo:

#define T(x, y) (x * y) / 2

Ejercicio 2: Valor de la Variable ‘b’

Dado el siguiente código:

int a = 0, b = 10;
do {
b++;
} while (a > b);

El valor de b es: 11

Ejercicio 3: Valor de la Variable ‘n’

Si la variable entera div = 4 y n = 6, en la siguiente instrucción:

if (n % div != 0)
n = div++;

El valor de n es: 6, y el valor de div es 5.

Ejercicio 4: Valores de ‘i’ y ‘j’

Dado el siguiente código:

int *j = malloc(sizeof(int));
int i = *j;
main() {
*j = 20;
printf("%d %X", i, j);
}

Los valores de i y j son: 0 y la dirección de memoria asignada a j (por ejemplo, 0x5F).

Ejercicio 5: Almacenamiento en un Puntero ‘p’

En la variable p declarada como: short int *p = malloc(20);, podemos almacenar con seguridad 10 enteros cortos.

Ejercicio 6: Función para Determinar si un Número es Primo (Retorna 0 si es primo, 1 si no lo es)

int func(int p) {
int div = 2;
while (p % div != 0)
div++;
if (p != div)
return 1;
return 0;
}

Ejercicio 7: Indexación de Punteros

La indexación de punteros se refiere a: acceder a elementos de un array a través de un puntero.

Ejercicio 8: Salida de un ‘switch’

Salida del siguiente switch:

switch (4) {
case 1:
printf("2");
case 2:
printf("\n 1");
default:
printf("3");
}

Como el valor de entrada es 4, no se ejecutan los casos 1 ni 2, por tanto, por defecto imprime 3.

Ejercicio 9: Función para Determinar si un Número es Primo (Retorna 1 si es primo, 0 si no lo es)

int primo(int i) {
int j = 2;
while (i % j != 0)
j++;
return i == j ? 1 : 0;
}

Ejercicio 10: Salida de la Función ‘funcion1’

Dado el siguiente código:

int i[] = {5, 1, 4};
int *funcion1(int *i) {
int n = 3;
for (int j = 0; j < 3; j++)
i[j] = n - j;
return i;
}

La salida es: i[0] = 3; i[1] = 2; i[2] = 1;

Ejercicio 11: Valor de ‘j’

#include 
float r = 1.2;
main() {
int j = 10 * (int)r;
printf("%d", j);
}

El valor de j es: 10

Ejercicio 12: Memoria más Rápida

La memoria más rápida se encuentra en el microprocesador (registros).

Ejercicio 13: Macro para el Máximo de Dos Números

Macro para el máximo de dos números:

#define maximo(a, b) ((a) > (b) ? (a) : (b))

Ejercicio 14: Macro para el Área de un Rectángulo

Macro para el área de un rectángulo:

#define area(a, b) (a * b)

Ejercicio 15: Estructura en C

Una estructura se define como:

struct Ag {
char nombre[20];
char apellido[20];
char DNI[10];
} ag;

Para escribir el DNI:

scanf("%s", ag.DNI);

Ejercicio 16: Valor de ‘b’ en un Bucle ‘while’

Dado el siguiente código:

int a = 0, b = 10;
while (a > b)
b = a;

El valor de b es: 10

int a = 0, b = 10;
do {
b = a;
} while (a > b);

El valor de b es: 0

Ejercicio 17: Valor de ‘n’ en un Bucle ‘while’

Si la variable entera div = 2 y n = 11, en la siguiente instrucción:

while (n % div != 0)
n = ++div;

El valor de n es: 3

Ejercicio 18: Valores de ‘i’ y ‘j’ (2)

int *j = malloc(sizeof(int));
int i = *j;
main() {
int *j = &i;
printf("%d %x", i, j);
}

Los valores de i y j son: 0 y la dirección de memoria de i (por ejemplo, 0x12).

Ejercicio 19: Caracteres que se Pueden Escribir

Dado c = (int *)malloc(20 * sizeof(int));, se pueden escribir 40 caracteres (asumiendo que sizeof(int) es 4 y sizeof(char) es 1, y que se quiere escribir caracteres en un espacio reservado para enteros).

Ejercicio 20: Salida de ‘funcion1’

funcion1(int i) {
float r = 5;
}

La salida es: indefinida, ya que la función no tiene un valor de retorno especificado.

Ejercicio 21: Clasificación de Palabras

  • struct: Palabra clave (C)
  • fprintf: Función (F)
  • unsigned: Palabra clave (C)
  • stdio.h: Fichero de cabecera (FC)
  • stdin: Palabra clave (C)
  • return: Palabra clave (C)
  • for: Palabra clave (C)
  • while: Palabra clave (C)
  • string.h: Fichero de cabecera (FC)
  • scanf: Función (F)

Ejercicio 22: Valor de ‘j’ que se Imprime

#include 
int j = 7;
main() {
int j = 9;
printf("%x", &j);
}

El valor de j que se imprime es la dirección de memoria de la variable local j (por ejemplo, 0x23).

Ejercicio 23: Almacenamiento de un Programa en Ejecución

Si se dispone de memoria suficiente, un programa en ejecución se almacena en la memoria principal (RAM).

Ejercicio 24: Macro M(a,b)

Una macro es declarada como #define M(a,b) (a)?a:b. La función equivalente sería:

float M(float a, float b){
if(a>b){
return a;
} else {
return b;
}
}

Ejercicio 25: Completar el Código para Escribir Campos de una Estructura

struct Libro {
char *autor;
int paginas;
};
struct Libro *lib;
lib = (struct Libro *)malloc(sizeof(struct Libro));
lib->autor = (char *)malloc(20);
scanf("%s", lib->autor);
scanf("%d", &lib->paginas);

Ejercicio 26: Salida de un ‘switch’ (2)

switch (1) {
case 1:
printf("2");
case 2:
printf("\n 1");
default:
printf("3");
}

Salida: 2
1
3

Ejercicio 27: Diferencia entre Variable Global y Local

Una variable global se distingue de una local en:

  • b) Su ámbito
  • c) La variable global se inicializa a cero por defecto

Ejercicio 28: Salida de un Programa con ‘malloc’

main() {
unsigned *p = (unsigned *)malloc(sizeof(unsigned));
*p = 10;
printf("%X, %u", p, *p);
}

La salida es la dirección de memoria asignada a p (por ejemplo, 0x20) y el valor 10.

Ejercicio 29: Reescribir una Instrucción ‘while’ con ‘for’

Reescribir la siguiente instrucción utilizando un bucle for:

while (act++->sig);

Equivalente en for:

for (; act->sig != NULL; act++);

Ejercicio 30: Caracteres que se Pueden Escribir (2)

En la instrucción c = (char *)malloc(m * sizeof(char));, se pueden escribir m caracteres.

Ejercicio 31: Tamaño en Bits del Contenido de un Puntero

Si un entero ocupa 4 bytes, el tamaño en bits del contenido del puntero p = (int *)malloc(10 * sizeof(int)); es 32 bits (el tamaño de una dirección de memoria, no el bloque de memoria reservado).

Ejercicio 32: Programa para Convertir de Binario a Decimal

int n, decimal, i;
int bitBin[] = {1, 0, 0, 1, 1, 1};
n = sizeof(bitBin) / sizeof(int);
decimal = 0;
for (i = 0; i < n; i++) {
decimal = decimal * 2 + bitBin[i];
}
printf("%d", decimal);

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.