You are on page 1of 11

Programacin en C. Ejercicios propuestos.

Curso de C, Nacho Cabanes

(Nota: estos ejercicios no incluyen solucin. Estn 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 nmero 23, en la variable y (entera) el nmero 24, en la variable z (entera) el nmero 25 y muestre en pantalla la suma de los valores de las tres variables. 6- Guarde en la variable x (entera) el nmero 10, en la variable y (entera) el nmero 11, en la variable z (entera) el nmero 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 nmeros enteros (que se guardarn en las variables a y b) y muestre su suma en pantalla. 8- Pida al usuario dos nmeros enteros (que se guardarn en las variables n1 y n2) y muestre su producto en pantalla.

9- Pida al usuario dos nmeros reales (que se guardarn en las variables dato1 y dato2) y muestre en pantalla el resultado de dividir dato1 entre dato2. 10- Pida al usuario dos nmeros reales (que se guardarn 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 nmeros enteros (que se guardarn 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 divisin de num1 entre num2. 12- Pida al usuario un nmero entero, diga si es par o impar,y repita todo lo anterior hasta que el nmero que se introduzca sea 0. (Nota: para saber si un nmero es par, se mira si el resto de su divisin entre 2 es 0). 13- Pida al usuario veinte nmeros enteros y muestre su suma. 14- Pida al usuario veinte nmeros 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 nmero indefinido de nmeros (mientras se tecleen nmeros que no sean negativos). Despus de la introduccin de cada nmero aparecer en pantalla informacin sobre el nmero de datos introducidos y la suma hasta el momento, as: "Has introducido 5 nmeros y su suma es 38"

16- Pida al usuario un nmero entero y muestre en pantalla sus divisores (exceptuando el 1 y el propio nmero). Por ejemplo, si se introduce 20, debera 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 nmero no tiene divisores, en vez de que la pantalla quede en blanco. 18- Pida al usuario un nmero entero y una letra, y muestre en pantalla la letra repetida tantas veces como indique el nmero. Por ejemplo, si el nmero es 10 y la letra es a, aparecera aaaaaaaaaa 19- Pida al usuario un nmero entero y muestre su tabla de multiplicar. 20- Pida al usuario un nmero real y diga cuantas cifras enteras tiene (pista: habr que dividir varias veces entre 10). 21- Pida al usuario una letra (l) y un nmero , y dibuje un cuadrado hueco formado por la letra indicada y que tenga como tamao de cada lado la longitud indicada. Por ejemplo, si se escoge la letra X y el nmero 5, el resultado sera
XXXXX X X X X X X XXXXX

22- Pida al usuario que teclee 20 nmeros, que se

almacenarn en una tabla. Despus se debe mostrar en pantalla los 10 primeros, en la misma lnea de pantalla, separados por espacios en blanco. 23- Pida al usuario que introduzca una palabra y la muestre al revs (por ejemplo: hola -> aloh). 24- Pida al usuario que teclee 10 nmeros, que se almacenarn en una tabla. Despus se debe mostrar en pantalla la suma de todos ellos, la media, el valor mnimo y el valor mximo. 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 nmeros, que sern almacenados en una tabla. Despus se debern mostrar todos en la misma lnea, separados por punto y coma, y decir si alguno est repetido. 27- Pida al usuario que introduzca un nmero y diga si es capica (si se lee igual de derecha a izquierda que de izquierda a derecha, como el 12321). (pista: ser interesante leer el nmero como cadena de texto). 28- Pida al usuario que introduzca una contrasea. Si en un mximo de 3 intentos no escribe la contrasea correcta (por ejemplo, "hola"), recibir como respuesta "Acceso denegado". Si acierta la contrasea 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 despus 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 nmero que introduzca el usuario. El factorial de un nmero se calcula multiplicando ese nmero 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 (slo el nombre y el nmero de telfono). Despus se deber mostrar en pantalla los nombres y los telfonos de aquellas personas cuyo nmero de telfono comience por 6. 31- Sea capaz de almacenar datos de hasta 100 personas (slo el nombre y el nmero de telfono). Aparecer un men en pantalla que permita aadir una nueva persona, ver los nombres de todas las personas almacenadas, ver el telfono 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 imgenes: nombre del fichero, ancho (en pxeles), alto (en pxeles), tamao (en KB), formato (una cadena corta, como GIF, JPG o BMP). Debe aparecer un men en pantalla que permita aadir un nuevo registro, ver los nombres de todas las imgenes almacenadas, buscar las que sean de un cierto formato, buscar las que sean mayores de un cierto tamao, corregir los datos de una imagen o salir.

33- Muestre la primera lnea de un fichero de texto (que no est vaco). 34- Muestre la primera lnea de un fichero de texto slo en caso de que no est vaco (pero puede estarlo). 35- Muestre las 10 primeras lnea de un fichero de texto slo en caso de que no est vaco (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 lneas ledas 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 versin. 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 nmero de versin (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 pxeles), alto (en pxeles), cantidad de colores, formato de compresin empleado (la informacin sobre el formato BMP debers 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". Despus debers crear un programa en C que abra ese fichero llamado "listado", y sume los tamaos de todos los ficheros que aparezcan en l. 42- Crea una funcin llamada "suma", que reciba como parmetros dos nmeros enteros y devuelva como resultado otro nmero entero que sea la suma de ambos. 43- Crea una funcin llamada "division", que reciba como parmetros dos nmeros enteros y devuelva como resultado un nmero real, que sea el resultado de dividir el primer nmero entre el segundo (con decimales). 44- Crea una funcin llamada "letraRepetida", que reciba como parmetros una letra y un nmero, y escriba en pantalla esa letra repetida en pantalla varias veces (tantas como indique el nmero), sin devolver ningn valor. 45- Crea una funcin llamada "rotulo", que tome como parmetro una cadena de texto, no devuelva ningn valor, y escriba en pantalla ese texto centrado (suponiendo una anchura de pantalla de 80 letras) y en la lnea siguiente escriba guiones para que el rtulo parezca subrayado (tantos guiones como letras formen la palabra). 46- Crea una funcin "tamanyoFichero" que diga el tamao en bytes de un fichero. Deber tener como parmetro 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 ecuacin de segundo grado. Adems, debers crear una funcin "existeSolucionRC", que

devuelva un 1 si la raz cuadrada tiene solucin, o un 0, si no la tiene. 48- Crea una funcin "raizCubica", que calcule la raz cbica 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 nmero 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 codificacin tpica de Intel ("little endian": primer byte + 256 * segundo byte). 50- Crea una funcin "intentaAbrir" que intente abrir un fichero (cuyo nombre se indicar como parmetro, con un modo de apertura dado (tambin indicado como parmetro). Devolver un valor de tipo FILE* (el mismo que la orden "fopen"). Si no se consigue abrir el fichero, abandonar el programa con el cdigo de error 1. 51- Crea un fichero de texto que contenga varios nmeros enteros, cada uno en una lnea distinta. A continuacin, crea un programa que lea ese fichero y muestre en pantalla el nmero ms alto y el nmero ms bajo que ha encontrado dentro del fichero. Un ejemplo de posible fichero sera 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 continuacin 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 ao estimado de nacimiento, todos ellos separados por comas, y cada ficha en una lnea nueva. Debers 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 continuacin 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 lneas tiene el fichero, as que se deber dar una primera pasada para contarlas. - Cuando ya se sabe cuantas lneas tiene, se debe reservar memoria dinmicamente (usando un "struct" para cada ficha). - Los datos se debern ordenar alfabticamente (por apellido, no importa quien quede delante si dos personas tienen el mismo apellido). - Finalmente, los datos ordenados se debern 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 lnea 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 continuacin crea un programa en C que lea todos esos datos, los guarde en memoria usando una lista enlazada ordenada (segn el apellido, luego segn el nombre si el apellido coincide, y segn 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 continuacin crea un programa en C que lea todos esos datos, los guarde en memoria usando un rbol binario de bsqueda (segn el apellido, luego segn el nombre si el apellido coincide, y segn la edad si coinciden los otros 2) y finalmente muestre en pantalla los datos ordenados.

56- Usando "curses.h", crea una aplicacin 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 aplicacin 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 dems figuras, y todas ellas deben moverse una vez cada 3 dcimas de segundo. Debe repetirse hasta que se pulse una tecla.

58- Usando "curses.h", crea una aplicacin 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 dems figuras, y todas ellas deben moverse una vez cada 3 dcimas 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 podrn mover las figuras).

59- Usando SDL, crea una aplicacin en la que se vean rebotar tres pelotas en la pantalla. Las imgenes 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 tamao entre 32x32 y 64x64 pxeles (ambos incluidos). Terminar cuando se pulse una tecla.

You might also like