AnteriorPosterior

Ejercicios propuestos (59 por ahora)

  Curso: Fundamentos de programación en C, por Nacho Cabanes

Programación en C. Ejercicios propuestos.

Curso de C, Nacho Cabanes

(Nota: estos ejercicios no incluyen solución.
Están pensados para que los intentes en casa, con o sin ordenador,
y consultes a tu profesor las dudas que te puedan surgir)


Escribe un programa en C que...

1- Muestre en pantalla el mensaje "Bienvenido".

2- Muestre en pantalla el mensaje "C no tiene misterios".

3- Muestre en pantalla la suma de 100 y 120.

4- Muestre en pantalla el producto de 50 y 51.

5- Guarde en la variable x (entera) el número 23, en la variable y (entera) el número 24, en la variable z (entera) el número 25 y muestre en pantalla la suma de los valores de las tres variables.

6- Guarde en la variable x (entera) el número 10, en la variable y (entera) el número 11, en la variable z (entera) el número 12, calcule su producto y lo guarde en una variable llamada producto, y finalmente muestre en pantalla el valor de la variable producto.

7- Pida al usuario dos números enteros (que se guardarán en las variables a y b) y muestre su suma en pantalla.

8- Pida al usuario dos números enteros (que se guardarán en las variables n1 y n2) y muestre su producto en pantalla.

9- Pida al usuario dos números reales (que se guardarán en las variables dato1 y dato2) y muestre en pantalla el resultado de dividir dato1 entre dato2.

10- Pida al usuario dos números reales (que se guardarán en las variables dato1 y dato2).Si dato2 es cero,deberá mostrar un mensaje de error, y en caso contrario mostrará en pantalla el resultado de dividir dato1 entre dato2.

11- Pida al usuario dos números enteros (que se guardarán en las variables num1 y num2).Si num2 es cero,deberá mostrar un mensaje de error, y en caso contrario mostrará en pantalla el resto de la división de num1 entre num2.

12- Pida al usuario un número entero, diga si es par o impar,y repita todo lo anterior hasta que el número que se introduzca sea 0. (Nota: para saber si un número es par, se mira si el resto de su división entre 2 es 0).

13- Pida al usuario veinte números enteros y muestre su suma.

14- Pida al usuario veinte números reales y muestre cual es el mayor de ellos y cual el menor. Ambos deben aparecer con 2 cifras decimales y 5 cifras totales.

15- Pida al usuario un número indefinido de números (mientras se tecleen números que no sean negativos). Después de la introducción de cada número aparecerá en pantalla información sobre el número de datos introducidos y la suma hasta el momento, así­:
"Has introducido 5 números y su suma es 38"

16- Pida al usuario un número entero y muestre en pantalla sus divisores (exceptuando el 1 y el propio número). Por ejemplo, si se introduce 20, deberí­a aparecer
2 es divisor de 20
4 es divisor de 20
5 es divisor de 20
10 es divisor de 20

17- Mejora el ejercicio 16 para que avise si el número no tiene divisores, en vez de que la pantalla quede en blanco.

18- Pida al usuario un número entero y una letra, y muestre en pantalla la letra repetida tantas veces como indique el número. Por ejemplo, si el número es 10 y la letra es a, aparecerí­a
aaaaaaaaaa

19- Pida al usuario un número entero y muestre su tabla de multiplicar.

20- Pida al usuario un número real y diga cuantas cifras enteras tiene (pista: habrá que dividir varias veces entre 10).

21- Pida al usuario una letra (l) y un número (n), y dibuje un cuadrado hueco formado por la letra indicada y que tenga como tamaño de cada lado la longitud indicada. Por ejemplo, si se escoge la letra X y el número 5, el resultado sería

XXXXX
X X
X X
X X
XXXXX

22- Pida al usuario que teclee 20 números, que se almacenarán en una tabla. Después se debe mostrar en pantalla los 10 primeros, en la misma línea de pantalla, separados por espacios en blanco.

23- Pida al usuario que introduzca una palabra y la muestre al revés (por ejemplo: hola -> aloh).

24- Pida al usuario que teclee 10 números, que se almacenarán en una tabla. Después se debe mostrar en pantalla la suma de todos ellos, la media, el valor mínimo y el valor máximo.

25- Pida al usuario que introduzca una frase y cambie los espacios por guiones (por ejemplo: "como estas, juan" -> "como-estas,-juan").

26- Pida al usuario que teclee 10 números, que serán almacenados en una tabla. Después se deberán mostrar todos en la misma línea, separados por punto y coma, y decir si alguno está repetido.

27- Pida al usuario que introduzca un número y diga si es capicúa (si se lee igual de derecha a izquierda que de izquierda a derecha, como el 12321). (pista: será interesante leer el número como cadena de texto).

28- Pida al usuario que introduzca una contraseña. Si en un máximo de 3 intentos no escribe la contraseña correcta (por ejemplo, "hola"), recibirá como respuesta "Acceso denegado". Si acierta la contraseña en tres intentos o menos, se le dirá "Acceso permitido".

29- Pida al usuario que introduzca su nombre (que se guardará en una cadena de texto) y después su apellido (que se guardará en otra). El programa deberá crear una nueva cadena de texto formada por el el apellido y el nombre, separados por una coma, y luego mostrarla en pantalla, así:
Dime tu nombre: Bill
Dime tu apellido: Gates
Hola Sr. Gates, Bill

30- Calcule el factorial del número que introduzca el usuario. El factorial de un número se calcula multiplicando ese número por todos los menores que él, hasta llegar al uno:
3! = 3 * 2 * 1
6! = 6 * 5 * 4 * 3 * 2 * 1

31- Pida al usuario que teclee los datos de 10 personas (sólo el nombre y el número de teléfono). Después se deberá mostrar en pantalla los nombres y los teléfonos de aquellas personas cuyo número de teléfono comience por 6.

31- Sea capaz de almacenar datos de hasta 100 personas (sólo el nombre y el número de teléfono). Aparecerá un menú en pantalla que permita añadir una nueva persona, ver los nombres de todas las personas almacenadas, ver el teléfono de una cierta persona (a partir de sus nombre), corregir los datos de una persona o salir.

32- Sea capaz de almacenar los siguientes datos de hasta 1000 ficheros de imágenes: nombre del fichero, ancho (en píxeles), alto (en píxeles), tamaño (en KB), formato (una cadena corta, como GIF, JPG o BMP). Debe aparecer un menú en pantalla que permita añadir un nuevo registro, ver los nombres de todas las imágenes almacenadas, buscar las que sean de un cierto formato, buscar las que sean mayores de un cierto tamaño, corregir los datos de una imagen o salir.

33- Muestre la primera línea de un fichero de texto (que no esté vacío).

34- Muestre la primera línea de un fichero de texto sólo en caso de que no esté vacío (pero puede estarlo).

35- Muestre las 10 primeras línea de un fichero de texto sólo en caso de que no esté vacío (pero puede estarlo).

36- Pida al usuario el nombre de un fichero de texto y lo muestre en pantalla, paginado (haciendo una pausa tras mostrar cada 25 líneas leídas del fichero).

37- Almacene todo lo que el usuario teclee el un fichero llamado "bitacora.txt". Se terminará cuando la frase que teclee el usuario sea unicamente "fin".

38- Muestre en hexadecimal el valor de los 3 primeros bytes que contenga un fichero binario.

39- Diga si un fichero, cuyo nombre debe teclear el usuario, es una imagen en formato GIF, y de qué versión. Nota: Si es GIF, los 3 primeros bytes que contiene el fichero son las letras G, I, F y los 3 siguientes bytes son otras tres letras que indican el número de versión (por ejemplo, "89a").

40- Abra un fichero de imagen en formato BMP (cuyo nombre tecleará el usuario) y muestre en pantalla los siguientes datos: Nombre del fichero, ancho (en píxeles), alto (en píxeles), cantidad de colores, formato de compresión empleado (la información sobre el formato BMP deberás localizarla en Internet).

41- Crea un fichero de texto que contenga el listado detallado de ficheros existentes en una carpeta de un sistema Linux, haciendo "ls -l >listado". Después deberás crear un programa en C que abra ese fichero llamado "listado", y sume los tamaños de todos los ficheros que aparezcan en él.

42- Crea una función llamada "suma", que reciba como parámetros dos números enteros y devuelva como resultado otro número entero que sea la suma de ambos.

43- Crea una función llamada "division", que reciba como parámetros dos números enteros y devuelva como resultado un número real, que sea el resultado de dividir el primer número entre el segundo (con decimales).

44- Crea una función llamada "letraRepetida", que reciba como parámetros una letra y un número, y escriba en pantalla esa letra repetida en pantalla varias veces (tantas como indique el número), sin devolver ningún valor.

45- Crea una función llamada "rotulo", que tome como parámetro una cadena de texto, no devuelva ningún valor, y escriba en pantalla ese texto centrado (suponiendo una anchura de pantalla de 80 letras) y en la línea siguiente escriba guiones para que el rótulo parezca subrayado (tantos guiones como letras formen la palabra).

46- Crea una función "tamanyoFichero" que diga el tamaño en bytes de un fichero. Deberá tener como parámetro el nombre del fichero y devolver un valor "long" (que sera -1 si el fichero no existe).

47- Crea dos funciones "solucionRC1" y "solucionRC2" que devuelvan las dos raices de una ecuación de segundo grado. Además, deberás crear una función "existeSolucionRC", que devuelva un 1 si la raíz cuadrada tiene solución, o un 0, si no la tiene.

48- Crea una función "raizCubica", que calcule la raíz cúbica de un "float", y devuelva otro "float" (pista: puedes elevar a 1/3 para hallarla).

49- Crea una funcion "fgetint(FILE* f)", que devuelva un número entero (4 bytes) de un fichero, y otra "fgettwobytes(FILE* f)", que lea dos datos de 1 byte y los convierta en un entero de 2 bytes usando la codificación típica de Intel ("little endian": primer byte + 256 * segundo byte).

50- Crea una función "intentaAbrir" que intente abrir un fichero (cuyo nombre se indicará como parámetro, con un modo de apertura dado (también indicado como parámetro). Devolverá un valor de tipo FILE* (el mismo que la orden "fopen"). Si no se consigue abrir el fichero, abandonará el programa con el código de error 1.

51- Crea un fichero de texto que contenga varios números enteros, cada uno en una línea distinta. A continuación, crea un programa que lea ese fichero y muestre en pantalla el número más alto y el número más bajo que ha encontrado dentro del fichero. Un ejemplo de posible fichero sería éste:

25
-17
15
26


52- Crea un fichero de texto que almacene el nombre de una persona, su apellido, y su edad, de la siguiente forma:

"Juan","Lopez",18
"Julian","Lopez",19
"Justo","Lopez",24

A continuación crea un programa en C que lea esos datos uno por uno y los guarde en otro fichero, colocando primero el apellido (sin comillas), luego el nombre (sin comillas) y luego el año estimado de nacimiento, todos ellos separados por comas, y cada ficha en una línea nueva. Deberás usar un struct para almacenar cada ficha leida del fichero.


53- Crea un fichero de texto que almacene el nombre de una persona, su apellido, y su edad, de la siguiente forma:

"Juan","Lopez",18
"Julian","Lopez",19
"Justo","Lopez",24

A continuación crea un programa en C que lea todos esos datos, los guarde en memoria y los vuelva a escribir en otro fichero, con las siguientes condiciones:
- No se sabe cuantas líneas tiene el fichero, así que se deberá dar una primera pasada para contarlas.
- Cuando ya se sabe cuantas líneas tiene, se debe reservar memoria dinámicamente (usando un "struct" para cada ficha).
- Los datos se deberán ordenar alfabéticamente (por apellido, no importa quien quede delante si dos personas tienen el mismo apellido).
- Finalmente, los datos ordenados se deberán volcar a un nuevo fichero, colocando primero el apellido (sin comillas), luego el nombre (sin comillas) y luego la edad, separados por tabulaciones, y avanzando de línea tras cada ficha.


54- Crea un fichero de texto que almacene el nombre de una persona, su apellido, y su edad, de la siguiente forma:

"Juan","Lopez",18
"Julian","Lopez",19
"Justo","Lopez",24

A continuación crea un programa en C que lea todos esos datos, los guarde en memoria usando una lista enlazada ordenada (según el apellido, luego según el nombre si el apellido coincide, y según la edad si coinciden los otros 2) y finalmente muestre en pantalla los datos ordenados.


55- Crea un fichero de texto que almacene el nombre de una persona, su apellido, y su edad, de la siguiente forma:

"Juan","Lopez",18
"Julian","Lopez",19
"Justo","Lopez",24

A continuación crea un programa en C que lea todos esos datos, los guarde en memoria usando un árbol binario de búsqueda (según el apellido, luego según el nombre si el apellido coincide, y según la edad si coinciden los otros 2) y finalmente muestre en pantalla los datos ordenados.


56- Usando "curses.h", crea una aplicación en la que se vean rebotar tres figuras en pantalla. Cada figura debe ser una letra de un color distinto, y todas ellas deben moverse una vez cada segundo.


57- Usando "curses.h", crea una aplicación en la que se vean rebotar cuatro figuras en pantalla. Cada figura debe estar formada por dos letras de ancho y dos de alto, ser de un color distinto de las demás figuras, y todas ellas deben moverse una vez cada 3 décimas de segundo. Debe repetirse hasta que se pulse una tecla.


58- Usando "curses.h", crea una aplicación en la que se vean rebotar cinco figuras en pantalla. Cada figura debe estar formada por dos letras de ancho y dos de alto, ser de un color distinto de las demás figuras, y todas ellas deben moverse una vez cada 3 décimas de segundo. Pueden chocar con las paredes o entre ellas. El movimiento debe repetirse hasta que se pulse una tecla distinta de "p" (la tecla "p" hará una pausa, durante la que no se podrán mover las figuras).


59- Usando SDL, crea una aplicación en la que se vean rebotar tres pelotas en la pantalla. Las imágenes para los ladrillos, el fondo y las pelotas puedes crearlas tú mismo o buscar alguna por Internet que te guste, pero deben ser de un tamaño entre 32x32 y 64x64 píxeles (ambos incluidos). Terminará cuando se pulse una tecla.

Actualizado el: 30-07-2006 22:05

AnteriorPosterior