0% encontró este documento útil (0 votos)
11 vistas6 páginas

Ejercicios de Programación en C

El documento presenta una serie de ejercicios de programación en C diseñados para ayudar a los estudiantes a recordar y practicar sus habilidades en este lenguaje. Incluye problemas de diversa complejidad, desde la creación de programas simples hasta la manipulación de cadenas y caracteres. Además, se proporcionan referencias a lecturas importantes sobre el lenguaje C.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
11 vistas6 páginas

Ejercicios de Programación en C

El documento presenta una serie de ejercicios de programación en C diseñados para ayudar a los estudiantes a recordar y practicar sus habilidades en este lenguaje. Incluye problemas de diversa complejidad, desde la creación de programas simples hasta la manipulación de cadenas y caracteres. Además, se proporcionan referencias a lecturas importantes sobre el lenguaje C.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

Ejercicios de programación en C

Doctor Alun Moon

Enero de 2007

Abstracto

Instrucciones: Realice los ejercicios. La primera sección es un conjunto general de problemas para ayudarte a recordar lo que
sabes sobre programación. Las secciones posteriores detallan partes de C. Si te quedas atascado en una sección, inténtalo de nuevo,
luego pasa a la siguiente sección y vuelve más tarde.
Las lecturas importantes incluyen (McGrath 2006) una buena introducción a C. (Kernighan y Ritchie 1988) es el libro para el
estándar C89 para ANSI C. (Holmes 1995) es un muy buen tutorial y referencia en Internet.

1 Ejemplos generales
Se trata de ejercicios generales de diversa complejidad. Una buena manera de refrescar la memoria de C y desarrollar habilidades
para resolver problemas.

Ejercicio. 1.1 Escribe y ejecuta el programa “¡Hola, mundo!”. Experimente con diferentes formatos de salida insertando nuevas líneas
y tabulaciones en la cadena de control.

Ejercicio. 1.2 Escriba un programa para generar un número entero en formato decimal y un número de punto flotante en formato
float. Experimente con la salida de un número entero en formato flotante y viceversa. Imprime un carácter en formato decimal
(imprime el código del carácter, por ejemplo, ascii). Solucione cualquier problema utilizando una conversión o conversión de tipo
explícita.

Ejercicio. 1.3 Escriba un programa para determinar, mediante prueba y error, el valor mínimo de 196/n + n donde n es un entero. No
utilice un bucle, pruebe diferentes valores de n. Tenga en cuenta que, en general, 196/n + n será una cantidad flotante.

Ejercicio. 1.4 Escriba un programa para comprobar que el volumen y el área superficial de una esfera de radio 0,1234567789e2 son
aproximadamente 7881,948508 y 1915,313445 respectivamente. El volumen de una esfera es cuatro tercios de Pi por el radio al
cubo y el área es cuatro Pi por el radio al cuadrado. Considere Pi como 3,14159265.

Ejercicio. 1.5 Un número es especial si es divisible (sin resto) por 15. Un número es grande si es mayor que 999. Un número es
extraño si es divisible por 5 y 6 pero no por 18. Un número da miedo si es grande o extraño.
Escriba un programa para comprobar cuáles de los siguientes, 450, 540, 600 y 675, son especiales pero no dan miedo.
Declare cuatro variables llamadas especial, grande, extraña y aterradora y realice asignaciones adecuadas a estas variables a
medida que se prueba un número.

Ejercicio. 1.6 Escriba un programa para expresar un número dado de segundos (que puede ser un literal en el programa) en términos
de horas, minutos y segundos y generar el resultado. Utilice variables distintas para cantidades distintas. Por ejemplo, para
representar el número total de segundos, que puede ser mayor que 59, y la parte de segundos de la salida, que nunca puede ser
mayor que 59.

Ejercicio. 1.7 Escriba un programa para almacenar y extraer independientemente dos enteros cortos de 16 bits (llamados car y cdr)
en un entero de 32 bits (llamado cell). Todos los números enteros son positivos.

celúla

auto comandante
El almacenamiento o acceso a un número no debe afectar al otro. Por ejemplo, si la celda contiene un valor de automóvil de 2 y
un valor de cdr de 3, entonces el valor de la celda es 131075 (hexadecimal 00020003). Si posteriormente se almacena el valor del
automóvil en la celda, el valor de la celda pasa a ser 65539 (hexadecimal 00010003).
Comience declarando números enteros adecuados e inicializándolos. Escriba funciones para establecer y extraer los valores de
car y cdr.
Escriba una versión del programa anterior utilizando una estructura con los campos car y cdr.
Pruebe ambos con varios ejemplos de coche y cdr.

1
Ejercicio. 1.8 Escribir funciones, utilizando expresiones condicionales,

1. abs, que devuelve el valor absoluto de un entero, p. ej. 3 7→ 3 y -3 7→ 3

2. zeroCut, que devuelve el máximo de un entero y cero, p. ej. 3 7→ 3 y -3 7→ 0

3. absDiff, que devuelve la diferencia absoluta de dos números enteros

2 Cadenas y E/S
Ejercicio. 2.1 Considere el programa

#incluir<st dio . h>


char palabra [ ] = ” fuego ” ;
principal ()
{
palabra [ 0 ] = ' h ' ;
printf (”%s\n” , palabra );
}

Ejecútelo con las siguientes sustituciones agregadas antes de printf,

• palabra[1]='e' ;

• palabra[3]='d';

• palabra[4]='\n';

¿Qué pasa en el último caso?

Ejercicio 2.2 Escriba un programa para escribir los argumentos de cadena de main en orden inverso.

Ejercicio 2.3 Un argumento de main es una opción o una palabra. Una opción comienza con un guión '-', la parte restante es el
nombre de la opción.
Escriba un programa para examinar cada argumento e imprimir si es una opción o una palabra, junto con el nombre de la opción
o el valor de la palabra. A continuación se muestra un ejemplo de salida.

Opción: versión
palabra: 1.5.a

Ejercicio 2.4 scanf divide naturalmente su entrada en espacios en blanco (ver la página del manual). Usando este hecho, escriba un
programa que cuente las palabras leídas desde la entrada estándar. Sugerencia: lea la página del manual de scanf, consulte la
sección “VALOR DE RETORNO” para obtener una pista sobre cómo finalizar el bucle.

“¿Qué bucle?” – ¡Piénsalo!

2
3 Caracteres y cadenas
Las computadoras representan caracteres con números, y cada número representa una letra del alfabeto. El sistema más común es
ascii, en el que 'A' es 65, 'B' es 66, 'C' es... Las letras mayúsculas están en el rango 65...90, y las minúsculas están en el rango
32...97, 122. En C, un individuo se puede almacenar en un tipo de datos char. Los valores se pueden escribir como la letra entre
comillas simples 'A'. Alternativamente, se puede escribir el número, en cuyo caso el valor debe convertirse en un tipo char.
Las siguientes afirmaciones son equivalentes

c = 'A' ; c = ( carácter ) 65 ;

La aritmética se puede realizar con caracteres.


c = 'A'+5;
b = 'Z'-'A';

Además de los caracteres imprimibles, existen códigos ASCII para caracteres “especiales”, algunos de los cuales son 0 '\
norte'carácter nulo (terminador de cadena)
7 '\a'campana (pitido)
9 '_t'pestaña horizontal
13 '\r'devolver

3.1 Personajes
Ejercicio. 3.1 El siguiente programa imprime el alfabeto de la A a la Z. Copie, compile y ejecute el programa.
#incluir < st di o . h>principal()
{
carácter i;
para ( i='A' ; i<='Z ' ; ++i ) putchar ( i );

Modificar el programa para imprimir sólo las primeras 10 letras del alfabeto.

Ejercicio. 3.2 Copie, compile y ejecute el siguiente programa. Toma su entrada de la misma manera que lo hace cat (excepto que no
lee archivos). Si se lee desde el teclado, se necesita al menos un retorno de carro y Control-D para finalizar la entrada. Esto se debe
a la forma en que el núcleo almacena en buffer la entrada, no a la forma en que el programa lee los datos.
#incluir<st dio . h>
principal ()
{
carácter c;
c = obtenerchar();
mientras ( c != EOF ) {
si ( 'A ' <= c && c <= ' Z ' )

c = c + 32;
ponerchar(c); c =
getchar();

¿Qué hace el programa?

Ejercicio. 3.3 Compare el último programa con el siguiente

#incluir<st dio . h>


#incluir<ctype . h>
principal ()
{
carácter c;
mientras ( ( c=obtener char ( ) ) != EOF) {
si ( es superior (c))
c = toupper ( c) ;
putchar(c);

3
}
}

3.2 Instrumentos de cuerda


Las cadenas en C se almacenan como una secuencia de códigos ASCII (matriz de caracteres) terminada por un carácter nulo \0. La
cadena “hola-mundo” tiene 11 caracteres visibles, pero necesita 12 ubicaciones de almacenamiento para los 11 caracteres y el
carácter nulo.

Ejercicio 3.4 Copia y prueba este programa

#incluir<st dio . h>


principal ()
{
carácter a [ 2 7 ] ;
entero yo;
para ( i = 65 ; i < 91 ; ++i ) a[i-'A'] = i ;

a[26] = '\0';
imprimirf(a);
}

Ahora elimine la línea a [26] = '\0' ; , ¿cuál es el efecto?

El programa seguirá intentando imprimir las letras 'A'... 'Z'. Con el cero la salida se detiene. Sin el cero, el programa continúa
imprimiendo todo lo que haya en la memoria (caracteres aleatorios) hasta llegar a un byte cero.
En un programa C, un valor de cadena se puede escribir usando comillas dobles ", el compilador asignará la memoria y
agregará el byte cero. Las funciones de entrada fgets y el campo %s en scanf también agregan el byte cero. Hay una serie de
funciones para proporcionar información o manipular cadenas. Para utilizarlos se necesita el archivo de encabezado string.h.

• strlen(char s) devuelve la longitud de la cadena (sin incluir el byte cero).

• strcat(char s,char cs) copiará los caracteres de la segunda cadena al final de la primera. Si la primera cadena no tiene
suficiente espacio, strcat continuará sobrescribiendo todo lo que esté en la memoria.

Ejercicio. 3.5 ¿Qué hace lo siguiente?


#incluir<st dio . h>

principal ()
{
enumeración { BUFSIZE = 1 00 } ;
char buf[TAMAÑOBUFS];
entero yo;
fgets(buf, BUFSIZE, entrada estándar);
buf [ strlen ( buf)-1]= ' \0 ' ; /∗ eliminar el for ( i = 0 ; buf [ i ] ; carácter de nueva línea ∗/
++i )
si ( es más bajo (buf[ i ]))
imprimir(”%c1___1 es 1________1 inferior 1 buf[i]);
____________________1case\n” , de lo contrario si (
esupperprintf
(buf(“%c1—1
[ i ] )) es 1—1 mayúscula 1— buf[i]);
1mayúscula\n” , de lo contrario
imprimirf(”'%c '1_____1 es 1 1ni \n” , buf[i]);

}
¿Cómo se puede mejorar el programa (para mayor claridad) incluyendo más llaves y

Ejercicio. 3.6 El siguiente programa leerá palabras de la entrada estándar y las concatenará entre sí. Se detiene cuando se llega al
final del archivo (control-D) o el buffer está lleno. La función scanf devuelve un valor EOF si intenta leer más allá del final de un
archivo.
#incluir<st dio . h>
#include < cadena . h>
principal ()

4
{
enumeración { TAMAÑOBUFS = 1000, TAMAÑOENTRADA = 100};
const char SEP [ ] = ” Yo__________I";
carácter s [ BUFSIZE] ;
char cs [ TAMAÑO DE ENTRADA ] ;
∗s = '\0';
mientras ( scanf(”%s” , cs)!=EOF && strlen (s) < (BUFSIZE - INPUTSIZE)) { strcat ( s , SEP );
strcat(s, cs);
}
printf(”%s” ,s );
}

• Experimente cambiando la cadena SEP. Prueba con "," o "\t".

Ejercicio. 3.7 3. Escriba un programa que lea el nombre y apellido de un usuario, en líneas separadas (sugerencia: use fgets; se
detiene al final de una línea; scanf("%s") se detiene en un espacio). La salida son los dos nombres como una sola cadena, por
ejemplo, “smith, john” manteniendo el formato de la entrada.

Ejercicio. 3.8 Escriba un programa similar que muestre el nombre en el formato “SMITH,John”, esta vez utilice el caso en la cadena
de ejemplo.

5
Referencias
Echeverría, A. (2000). Pensando en C++, Volumen 1: Introducción a C++ estándar (2.ª edición), Prentice Hall.
http://mindview.net/Books/TICPP/ThinkingInCPP2e.html

Hanly, JR, Koffman, EB y Horvath, JC (1997). Diseño de programas C para ingenieros, Addison-Wesley. classmark 518.567.5 HAN.

(1995). Programación en C, tutorial de Internet, Centro de Computación de la Universidad de Strathclyde.


http://www.its.strath.ac.uk/courses/c/

Hunt, A. y Thomas, D. (1999). El programador pragmático, Addison-Wesley.

Kernighan, BW y Ritchie, D. (1988). Lenguaje de programación C (2.a edición), Prentice Hall PTR.

Knuth, DE (1984). TeXbook, Addison-Wesley Profesional.

Knuth, DE (1999). El arte de la programación informática, volúmenes 1-3, paquete en caja, Addison-Wesley Professional.

Revista de Ciencias Sociales, 2006. Programación en C, en sencillos pasos, paso a paso por computadora.
http://www.ineasysteps.com/

Pike, R. (sin fecha). Notas sobre programación en c.


http://www.lysator.liu.se/c/pikestyle.html

Pozo, R. y Remington, K. (sin fecha). Programación en C++ para científicos, NIST.


http://math.nist.gov/~RPozo/c++class/

Raymond, ES (1999). La Catedral y el Bazar: Reflexiones sobre Linux y código abierto por un revolucionario accidental (O'Reilly
Linux), O'Reilly.

Raymond, ES (2004). El arte de la programación Unix, Serie de Computación Profesional, Addison-Wesley.


http://catb.org/esr/writings/taoup/html/.

van der Linden, P. (1994). Programación experta en C: secretos profundos de C, Prentice Hall.

También podría gustarte