1. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
EJERCICIOS de C
BLOQUE 1
1.- Leer dos números enteros y escribir el mayor de los dos o un mensaje si
son iguales. (Solución).
2.- Leer un carácter y dos números enteros. Si el carácter leído es un
operador aritmético calcular la operación correspondiente, si es cualquier
otro mostrar error. Hacer el programa utilizando if-else.
3.- Hacer el mismo programa usando la instrucción switch(). (Solución)
4.- Leer un número entero y visualizar su tabla de multiplicar. (Solución)
5.- Generar enteros de 3 en 3 comenzando por el 2 hasta el valor máximo
menor que 30. Calcular la suma de los enteros generados que sean divisibles
por 5.
6.- Media de una serie de números que finaliza al introducir el 999. El 999
no debe ser tenido en cuenta para la media. (Solución)
7.- Leer un número entero positivo y averiguar si es perfecto. Un nº es
perfecto cuando es igual a la suma de sus divisores excepto el mismo.
(Solución)
8.- Leer dos números enteros a y b mayores o iguales que cero y calcular su
producto mediante sumas. (Solución)
9.- Leer un número entero y averiguar si es o no múltiplo de 9. Un número es
múltiplo de 9 si la suma de sus cifras es 9 o múltiplo de 9. (Solución)
Profesor: Angel Delgado Herrador 1
2. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
10.- Generar los N primeros términos de la serie de Fibonacci. El valor de N
(entero y positivo) deberá ser leído por teclado. En esta serie los dos
primeros números son 1, y el resto se obtiene sumando los dos anteriores:
1,1,2,3,5,8,13,21,... (Solución)
11.- Presentar en la función main() el siguiente menú de opciones:
1.- Tabla de multiplicar (leer en main() un número y en una función
mostrar su tabla de multiplicar).
2.- Producto por sumas (en main() leer dos números enteros mayores
que 0 y en una función calcular su producto mediante sumas
sucesivas).
3.- Mostrar números comprendidos (leer dos números enteros
cualesquiera y en función mostrar los números comprendidos entre
ambos, no se incluyen). (Solución)
12.- Leer por teclado un numero entero N. Escribir los números primos
comprendidos entre 1 y N. Diseñar una función que permita averiguar si un
número es o no primo. (Solución)
13.- Leer una fecha en formato dia-mes-año, averiguar si es correcta e
indicar el día siguiente. (Solución)
14.- Implementar un programa que sea capaz de calcular el resultado de
aplicar la fórmula siguiente (n i)= n! /( i! * (n-i)!).
Para ello se dispone de dos funciones, una de ellas lee un número por teclado
que debe ser mayor o igual que cero. Teniendo en cuenta además que n
tiene que ser necesariamente mayor que i. La otra función calcula el
factorial de un número. (Solución)
15.-Mostrar los datos de un fichero de texto usando el símbolo de
redirección del sistema operativo MS-DOS.
Ejecutar: programa<fich.txt (Solución)
BLOQUE 2
1.- Cargar una tabla de p filas y q columnas, escribir la tabla en forma de
matriz y escribir la suma de las filas y las columnas.
Profesor: Angel Delgado Herrador 2
3. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
2.- Cargar un array de m números enteros decir cual es el mayor y donde
esta.
3.- Cargar un array de n enteros y calcular la media de los que estén en
posiciones pares.(Solución)
4.- Programa: Leer en la función main() un número entero "n" mayor que 2 y
menor o igual que 20.
Cargar, en una función, un array de "n" números enteros. Mostrar el vector,
en una sola línea, en otra función.
En main() leer otro número entero y en una función contar las veces que
aparece dicho número en el array, el resultado debe indicarse en main().
(Solución)
5.- Leer, en main(), una cadena de caracteres y llamar a un función que la
modifique. En la función se deben cambiar mayúsculas por minúsculas,
minúsculas por mayúsculas y dígitos por puntos. El resultado se escribe en la
función main(). (Solución)
6.- Leer una cadena de caracteres y cortarla en palabras escribiendo cada
palabra en una línea. Se supone que las palabras se separan sólo por blancos.
(Solución)
7.- Leer un numero n y pedir n veces tres números enteros e imprimirlos
cada vez ordenados de menor a mayor. Utilizar una función que, con ayuda
de punteros, permita ordenar dos números.(Solución)
8.- Convertir una cadena de caracteres a un valor entero mediante una
función que reciba la dirección de la cadena y la dirección de la variable que
almacenará el resultado. (Se supone que hay números el la cadena).
-Buscar el comienzo del número distinto de blanco, supondremos + o -.
-Averiguar el signo, si no es un carácter valido devuelve un error.
-Si el carácter es un digito se pasa a decimal ((ascii)numero-48)*10.
-Si la función finaliza de forma correcta devuelve un uno. (Solución)
9.- Generar los N primeros términos de la serie de Fibonacci, utilizando
para ello una función en las que se trabaja con variables estáticas.
(Solución)
10.- Cargar un array bidimensional de p*q y devolver un puntero apuntando a
la fila que mas suma. (Solución)
Profesor: Angel Delgado Herrador 3
4. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
11.- Leer por teclado un número entero largo e indicar si el número leído es
o no capicúa. Para ello debe utilizarse un array unidimensional donde
almacenaremos cada una de las cifras del número leído.
Se implementarán dos funciones, una para descomponer el número en cifras
y cargar el array, y otra para comparar las posiciones del array y
determinar si el número es capicúa. (Solución)
12.- Introducir una cadena de caracteres, e indicar si la cadena leída es o no
un palíndromo (se lee igual de izquierda a derecha, que de derecha a
izquierda). Ej: Dabale arroz a la zorra el abad (Solución)
13.- Leer por teclado un número entero mayor que 0 y menor o igual que 10
para determinar el rango de una matriz de enteros.
Leer un segundo número entero, que servirá para indicar el valor de
comienzo.
Cargar, recorriendo en espiral, una matriz de enteros, a partir del segundo
valor leído, y con el rango indicado. (Solución)
Profesor: Angel Delgado Herrador 4
5. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
SOLUCIONES EJERCICIOS de C
BLOQUE 1
1.- Leer dos números enteros y escribir el mayor de los dos o un mensaje si
son iguales.
Solución: .
/*Leer dos números enteros y escribir el mayor de ambos o un mensaje si son
iguales.*/
#include <stdio.h>
void main()
{
int a,b;
printf("Dame dos numeros... ");
scanf("%d%d",&a,&b);
if (a>b)
printf("El mayor numero es... %d",a);
else
if (b>a)
printf("El numero mayor es.... %d",b);
else
printf("Los numeros son iguales");
}
2.- Leer un carácter y dos números enteros. Si el carácter leído es un
operador aritmético calcular la operación correspondiente, si es cualquier
otro mostrar error. Hacer el programa utilizando if-else.
3.- Hacer el mismo programa usando la instrucción switch().
Solución:
/* Leer un carácter y dos números enteros. Si el carácter leído es un operador
aritmético calcular la operación correspondiente, si es cualquier otro mostrar
error. Hacer el programa utilizando la instrucción switch() */
Profesor: Angel Delgado Herrador 5
6. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
#include <stdio.h>
void main()
{
char c;
int a,b;
printf("dame un caractern");
c=getchar();
fflush (stdin);
printf("dame dos numerosn");
scanf("%d %d",&a,&b);
switch (c)
{
case '+':
printf("resultado %d",a+b);
break;
case '-':
printf("resultado %d",a-b);
break;
case '*':
printf("resultado %d",a*b);
break;
case '/':
printf("resultado %d",a/b);
break;
default:
printf("error");
}
}
4.- Leer un número entero y visualizar su tabla de multiplicar.
Solución:
/* Leer un número entero y visualizar su tabla de multiplicar. */
#include <stdio.h>
void main()
{
int a,b;
printf ("Introduce el número:");
scanf("%d",&a);
b=1;
while (b<=10)
{
printf("%d * %d = %dn",a,b,a*b);
b++;
}
}
Profesor: Angel Delgado Herrador 6
7. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
5.- Generar enteros de 3 en 3 comenzando por el 2 hasta el valor máximo
menor que 30. Calcular la suma de los enteros generados que sean divisibles
por 5.
6.- Media de una serie de números que finaliza al introducir el 999. El 999
no debe ser tenido en cuenta para la media.
Solución:
/* Media de una serie de números que finaliza al introducir el 999. El 999 no
debe ser tenido en cuenta para la media. */
#include <stdio.h>
void main()
{
int n,c=0,s=0;
// Típico esquema mientras.
// Se lee el primer elemento de la secuencia fuera del bucle
printf("Dame el primer nº:");
scanf("%d",&n);
while(n!=999)
{
s+=n; // Se trata el elemento leído
c++;
printf("Dame el siguiente nº:"); // Se obtiene el siguiente elemento
scanf("%d",&n);
}
if (c) // Sólo se podrá dividir si en la secuencia hay algún nº
printf("nLa media de los números es %.2fn",(float)s/c);
else
Profesor: Angel Delgado Herrador 7
8. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
printf("nNo se ha leído ningún número.n");
}
7.- Leer un número entero positivo y averiguar si es perfecto. Un nº es
perfecto cuando es igual a la suma de sus divisores excepto el mismo.
Solución:
/* Leer un entero positivo y averiguar si es perfecto. Un nº es perfecto cuando
es igual a la suma de sus divisores excepto el mismo */
#include <stdio.h>
void main()
{
int i,numero,suma=0;
do{
printf("Dame un numero:");
scanf("%d",&numero);
} while (numero<=0);
for (i=1;i<=(numero/2);i++)
if ((numero%i)==0)
suma+=i;
if (numero==suma)
printf("El numero es perfecto.");
else
printf("El numero NO es perfecto.");
}
8.- Leer dos números enteros a y b mayores o iguales que cero y calcular su
producto mediante sumas.
Solución:
/* Leer dos números enteros a y b mayores o iguales que cero y calcular su
producto mediante sumas sucesivas. (Se usan, a modo de ejemplo, los tres
esquemas repetitivos existentes en C.*/
#include <stdio.h>
void main()
{
int a,b,c,i,producto=0;
Profesor: Angel Delgado Herrador 8
9. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
do{
printf("Dame un a:");
scanf("%d",&a);
} while (a<0);
do{
printf("Dame b:");
scanf("%d",&b);
} while (b<0);
// Suponemos que a es mayor que b en caso contrario se hace un intercambio
if (a<b)
{
c=a;
a=b;
b=c;
}
printf("a=%d b=%dn",a,b);
for (i=0;i<b;i++)
producto+=a;
printf("El producto con for es: %dn",producto);
producto=0;
i=0;
while (i<b)
{
producto+=a;
i++;
}
printf("El producto con while es: %dn",producto);
producto=0;
i=0;
do /* con este bucle al multiplicar por cero */
{ /* me daria "a" */
producto+=a;
i++;
} while (i<b);
printf("El producto con do-while es: %d",producto);
}
9.- Leer un número entero y averiguar si es o no múltiplo de 9. Un número es
múltiplo de 9 si la suma de sus cifras es 9 o múltiplo de 9.
Solución:
/* Leer un numero entero y averiguar si es o no múltiplo de 9. Un nº es múltiplo
de 9 si la suma de sus cifras es 9 o múltiplo de 9.
Profesor: Angel Delgado Herrador 9
10. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
Ej.: 99 es múltiplo pues 9+9=18, que a su vez 1+8=9 */
#include <stdio.h>
void main()
{
int numero,sumacifras,s;
printf("Dame un numero: ");
scanf("%d",&numero);
s=numero;
while (numero>9)
{
sumacifras=(numero%10); //Inicializamos sumacifras con el primer resto.
while ((numero/=10)!=0) //Mientras la parte entera de la división sea distinta
de 0
sumacifras+=(numero%10); //Seguimos sumando los restos
numero=sumacifras; //Asignamos la suma de las cifras al número
}
if (numero==9) //Al salir si el número es igual a 9 es múltiplo
printf("El numero %d, es multiplo de 9.",s);
else
printf("El numero %d, NO es multiplo de 9.",s);
}
10.- Generar los N primeros términos de la serie de Fibonacci. El valor de N
(entero y positivo) deberá ser leído por teclado. En esta serie los dos
primeros números son 1, y el resto se obtiene sumando los dos anteriores:
1,1,2,3,5,8,13,21,...
Solución:
Profesor: Angel Delgado Herrador 10
11. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
/* Generar los N primeros términos de la serie de Fibonacci. El valor de N
(entero y positivo) deberá ser leído por teclado. En esta serie los dos primeros
números son 1, y el resto se obtiene sumando los dos anteriores:
1,1,2,3,5,8,13,21,... */
#include <stdio.h>
void main()
{
int n,a,b,c,aux;
do{ // Se lle el número hasta que sea mayor que cero.
printf("nDame un numero :");
scanf("%d",&n);
} while(n<=0);
a=1;b=0;
for(c=1;c<=n;c++)
{
printf("%dt",a);
aux=a;
a+=b;
b=aux;
}
}
11.- Presentar en la función main() el siguiente menú de opciones:
1.- Tabla de multiplicar (leer en main() un número y en una función
mostrar su tabla de multiplicar).
2.- Producto por sumas (en main() leer dos números enteros mayores
que 0 y en una función calcular su producto mediante sumas
sucesivas).
3.- Mostrar números comprendidos (leer dos números enteros
cualesquiera y en función mostrar los números comprendidos entre
ambos, no se incluyen).
Solución:
/* Programa: Presentar en la función main() el siguiente menú de opciones:
1.- Tabla de multiplicar (leer en main() un número y en una función mostrar su
tabla de multiplicar).
2.- Producto por sumas (en main() leer dos números enteros mayores que 0 y
en una función calcular su producto mediante sumas sucesivas).
3.- Mostrar números comprendidos (leer dos números enteros cualesquiera y
en función mostrar los números comprendidos entre ambos, no se incluyen). */
#include <stdio.h>
void tabla(int);
void producto(int,int);
void numeros(int,int);
Profesor: Angel Delgado Herrador 11
12. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
void main()
{
int op,n,m;
do {
system ("cls");
printf ("n MENÚ DE OPCIONES");
printf ("n ================n");
printf ("n 1.- TABLA DE MULTIPLICARn");
printf ("n 2.- PRODUCTO POR SUMASn");
printf ("n 3.- MOSTRAR NÚMEROS COMPRENDIDOS ENTRE DOSn");
printf ("n 4.- SALIR nnnn");
printf ("n ELIGE UNA OPCION : ");
scanf ("%d",&op);
switch (op)
{
case 1:
system ("cls");
printf ("n Dame un número : ");
scanf ("%d",&n);
tabla(n); // Llamada a la función
printf ("n");
system("pause");
break;
case 2:
system ("cls");
do{
printf ("n Dame un número : ");
scanf ("%d",&n);
}while (n < 0);
do{
printf ("n Dame otro número : ");
scanf ("%d",&m);
}while (m < 0);
producto(n,m);
printf ("n");
system("pause");
break;
case 3:
system ("cls");
printf ("n Dame un n£mero : ");
scanf ("%d",&n);
printf ("n Dame un n£mero : ");
scanf ("%d",&m);
numeros(n,m);
printf ("n");
system("pause");
break;
}
}while (op != 4);
}
Profesor: Angel Delgado Herrador 12
13. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
void tabla(int n)
{
int c,p=1;
for (c=1;c<=10;c++)
{
p=n* c;
printf ("n %d * %d = %d",n ,c,p);
}
return;
}
void producto(int n, int m)
{
int c,sum=0,aux;
if (n > m) // Se supone n el menor, en caso de no serlo se intercambian los
valores
{
aux=n;
n=m;
m=aux;
}
for (c=1;c<=n;c++) sum+=m;
printf ("n El producto por sumas es %d",sum);
return;
}
void numeros(int n, int m)
{
int c,aux;
if (n > m)
{
aux = n;
n = m;
m = aux;
}
if (n+ 1 >= m) printf ("n No hay números n");
else for (c=n + 1;c < m ;c++) printf ("n %d",c);
return;
}
12.- Leer por teclado un numero entero N. Escribir los números primos
comprendidos entre 1 y N. Diseñar una función que permita averiguar si un
número es o no primo.
Solución:
/* Leer por teclado un numero entero N. Escribir los números primos comprendidos
entre 1 y N. Diseñar una función que permita averiguar si un número es o no primo. */
Profesor: Angel Delgado Herrador 13
14. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int primo(int);
void main()
{
int n,i;
printf("nDame un numero:");
scanf("%d",&n);
for (i=1;i<=n;i++)
if(primo(i))
printf(" %d ",i);
}
int primo (int n)
{
int i;
for (i=2;i<=(n/2);i++)
if((n%i)==0)
return FALSE;
return TRUE;
}
13.- Leer una fecha en formato dia-mes-año, averiguar si es correcta e
indicar el día siguiente.
Solución:
/* Leer una fecha en formato dia-mes-año, averiguar si es correcta e indicar el día
siguiente. */
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int correcta_fecha(int,int,int);
int bisiesto(int);
void main()
{
int dia,mes,anio;
printf("Dame una fecha:(dd-mm-aaaa)");
scanf("%d-%d-%d",&dia,&mes,&anio);
if (!correcta_fecha(dia,mes,anio))
printf("nLa fecha no es correcta.");
}
int correcta_fecha(int dia,int mes,int anio)
Profesor: Angel Delgado Herrador 14
15. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
{
int d;
switch (mes)
{
case 4:
case 6:
case 9:
case 11:d=30;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: d=31;
break;
case 2: if (bisiesto(anio))
d=29;
else
d=28;
break;
default: return FALSE;
}
if (dia<=d)
{
if (dia<d)
dia++;
else
{
dia=1;
if (mes==12)
{
mes=1;
anio++;
}
else
mes++;
}
printf("nEl proximo dia sera:%2d-%2d-%d.",dia,mes,anio);
return TRUE;
}
else
return FALSE;
}
/* Un ano es bisiesto cuando es multiplo de 4 pero no de 100 o multiplo de 400. */
int bisiesto(int anio)
{
if ((anio%4==0 && anio%100!=0) || (anio%400==0)) return TRUE;
Profesor: Angel Delgado Herrador 15
16. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
return FALSE;
}
14.- Implementar un programa que sea capaz de calcular el resultado de
aplicar la fórmula siguiente (n i)= n! /( i! * (n-i)!).
Para ello se dispone de dos funciones, una de ellas lee un número por teclado
que debe ser mayor o igual que cero. Teniendo en cuenta además que n
tiene que ser necesariamente mayor que i. La otra función calcula el
factorial de un número.
Solución:
/* Implementar un programa que sea capaz de calcular el resultado de aplicar
la fórmula siguiente (n i)= n! /( i! * (n-i)!).
Para ello se dispone de dos funciones, una de ellas lee un número por teclado
que debe ser mayor o igual que cero. Teniendo en cuenta además que n tiene
que ser necesariamente mayor que i. La otra función calcula el factorial de un
número. */
#include <stdio.h>
int lee_numero();
long int factorial(int);
// Programa principal.
void main()
{
int n,i;
printf("Valor de i...n");
i=lee_numero();
printf("nValor de n...n");
do
n=lee_numero();
while(n<i);
printf("Resultado %d sobre %d = %d",n,i,factorial(n)/(factorial(i)*factorial(n-i)));
}
// Funciones.
int lee_numero()
{
int a;
do{
printf("Escribe un valor:");
scanf("%d",&a);
}while(a<0);
return a;
}
long int factorial(int x)
Profesor: Angel Delgado Herrador 16
17. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
{
long int f=1;
for(;x>0;x--)
f*=x;
return f;
}
15.-Mostrar los datos de un fichero de texto usando el símbolo de
redirección del sistema operativo MS-DOS.Ejecutar: programa<fich.txt
Solución:
/* Mostrar los datos de un fichero de texto usando el símbolo de redirección del
sistema operativo MS-DOS. Ejecutar: programa<fich.txt
También se puede generar un archivo de texto, si se usa el símbolo de
redirección > en este caso, la entrada de datos por teclado debe finalizar al
pulsar ^Z*/
#include <stdio.h>
void main()
{
char c;
while((c=getchar())!=EOF)
putchar(c);
}
BLOQUE 2
1.- Cargar una tabla de p filas y q columnas, escribir la tabla en forma de
matriz y escribir la suma de las filas y las columnas.
2.- Cargar un array de m números enteros decir cual es el mayor y donde
esta.
3.- Cargar un array de n enteros y calcular la media de los que estén en
posiciones pares.
Solución:
/* Cargar un array de n enteros y calcular la media de los que estén en
posiciones pares. */
#include <stdio.h>
#define MAX 100
int carga_array(int[]);
float media(int[],int);
void main()
{
int a[MAX],eltos;
Profesor: Angel Delgado Herrador 17
18. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
eltos=carga_array(a);
if (eltos)
printf("nLa media es %f.",media(a,eltos));
}
int carga_array(int a[])
{
int i,num;
printf("nDame un numero:");
scanf("%d",&num);
for (i=0;i<num;i++)
{
printf("Dame un elto:");
scanf("%d",&a[i]);
}
return num;
}
float media(int a[],int eltos)
{
int i,suma=0,num=0;
for (i=1;i<eltos;i+=2)
{
suma+=a[i];
num++;
}
return ((float)suma/num);
}
4.- Programa: Leer en la función main() un número entero "n" mayor que 2 y
menor o igual que 20. Cargar, en una función, un array de "n" números
enteros. Mostrar el vector, en una sola línea, en otra función. En main() leer
otro número entero y en una función contar las veces que aparece dicho
número en el array, el resultado debe indicarse en main().
Solución:
/*Programa: Leer en la funcion main() un n£mero entero "n" mayor que 2 y
menor o igual que 20. Cargar, en una funci¢n, un array de "n" n£meros enteros.
Mostrar el vector, en una sola l¡nea, en otra funci¢n. En main() leer otro n£mero
entero y en una funcion contar las veces que aparece dicho n£mero en el array,
el resultado debe indicarse en main().*/
#include <stdio.h>
void cargar(int[],int);
void mostrar(int[],int);
int contar(int[],int,int);
void main()
{
int n,a,t[20];
system("cls");
do{
printf("¨Cuántos elementos tiene la tabla?");
scanf("%d",&n);
Profesor: Angel Delgado Herrador 18
19. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
}while (n<3 || n>20);
cargar(t,n);
system("cls");
printf("Los elementos de la tabla son...n");
mostrar(t,n);
printf("nnnDame el número que vas a buscar: ");
scanf("%d",&a);
printf("nnEl número %d aparece %d veces en la tabla.",a,contar(t,n,a));
}
void cargar(int t[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("Elemento %d: ",i+1);
scanf("%d",&t[i]);
}
return;
}
void mostrar(int t[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%6d",t[i]);
return;
}
int contar(int t[],int n,int a)
{
int i,cont=0;
for(i=0;i<n;i++)
if (t[i]==a) cont++;
return cont;
}
5.- Leer, en main(), una cadena de caracteres y llamar a un función que la
modifique. En la función se deben cambiar mayúsculas por minúsculas,
minúsculas por mayúsculas y dígitos por puntos. El resultado se escribe en la
función main().
Solución:
/* Leer, en main(), una cadena de caracteres y llamar a un función que la
modifique. En la función se deben cambiar mayúsculas por minúsculas,
minúsculas por mayúsculas y dígitos por puntos. El resultado se escribe en la
función main(). */
#include <stdio.h>
void modificar (char[]);
Profesor: Angel Delgado Herrador 19
20. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
void main()
{
char cad[30];
printf("Dame una cadena caracteres:");
gets(cad);
modificar(cad);
puts(cad);
}
void modificar(char cad[])
{
int i;
for(i=0;cad[i]!='0';i++)
{
if(isupper(cad[i]))
cad[i]=tolower(cad[i]);
else if(islower(cad[i]))
cad[i]=toupper(cad[i]);
else if(isdigit(cad[i]))
cad[i]='.';
}
return;
}
6.- Leer una cadena de caracteres y cortarla en palabras escribiendo cada
palabra en una línea. Se supone que las palabras se separan sólo por blancos.
Solución:
/* Leer una cadena de caracteres y cortarla en palabras escribiendo cada
palabra en una línea. Se supone que las palabras se separan sólo por blancos.
*/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void escribe_palabras(char[]);
void main()
{
char frase[50];
gets(frase);
escribe_palabras(frase);
}
void escribe_palabras(char frase[])
{
char palabra[10];
int i=0,j=0;
Profesor: Angel Delgado Herrador 20
21. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
while(frase[i]!='0')
{
while(frase[i]==' ')
i++;
j=0;
while((frase[i]!=' ') && (frase[i]!='0'))
palabra[j++]=frase[i++];
palabra[j]='0';
puts(palabra);
}
}
7.- Leer un numero n y pedir n veces tres números enteros e imprimirlos
cada vez ordenados de menor a mayor. Utilizar una función que, con ayuda
de punteros, permita ordenar dos números.
Solución:
/* Leer un numero n y pedir n veces tres números enteros e imprimirlos cada
vez ordenados de menor a mayor. Utilizar una función, que con el uso de
punteros, permita ordenar dos números. */
#include <stdio.h>
void ordena (int*,int*); // función que ordena números de dos en dos
void main()
{
int n,i,a,b,c;
do{
printf("dame un número:");
scanf("%d",&n);
}while (n<=0);
for (i=0;i<n;i++)
{
printf("Dame tres números:");
scanf("%d-%d-%d",&a,&b,&c);
ordena(&a,&b);
ordena(&a,&c);
ordena(&b,&c);
printf("%d-%d-%dn",a,b,c);
}
}
void ordena(int *pa,int *pb)
Profesor: Angel Delgado Herrador 21
22. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
{
int aux;
if (*pa>*pb)
{
aux=*pa;
*pa=*pb;
*pb=aux;
}
return;
}
8.- Convertir una cadena de caracteres a un valor entero mediante una
función que reciba la dirección de la cadena y la dirección de la variable que
almacenará el resultado. (Se supone que hay números el la cadena).
-Buscar el comienzo del número distinto de blanco, supondremos + o -.
-Averiguar el signo, si no es un carácter valido devuelve un error.
-Si el carácter es un digito se pasa a decimal ((ascii)numero-48)*10.
-Si la función finaliza de forma correcta devuelve un uno.
Solución:
/* Convertir una cadena de caracteres a un valor entero mediante una función
que reciba la dirección de la cadena y la dirección de la variable que
almacenará el resultado. (Se supone que hay números el la cadena).
-Buscar el comienzo de numero distinto de blanco, supondremos + o -.
-Averiguar el signo, si no es un carácter valido devuelve un error.
-Si el carácter es un digito se pasa a decimal ((ascii)numero-48)*10.
-Si la función finaliza de forma correcta devuelve un uno. */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int convierte(char*,float*);
void main()
{
char cadena[50];
float valor;
printf("Dame una cadena:");
gets(cadena);
if (convierte(cadena,&valor))
printf("El valor es:%f",valor);
else
puts("ERROR");
}
int convierte(char *pcadena,float *pvalor)
{
int neg=1,error=0;
Profesor: Angel Delgado Herrador 22
23. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
while(*pcadena==' ')
pcadena++;
if (!isdigit(*pcadena))
{
if (*pcadena=='-')
neg=-1;
else
if (*pcadena=='+')
neg=1;
else
error=1;
pcadena++;
}
while ((*pcadena) && (!error))
{
if (!isdigit(*pcadena))
error=1;
else
*pvalor=*pvalor*10+((int)(*pcadena-48));
pcadena++;
}
if (error) return 0;
*pvalor=(*pvalor)*(float)neg;
return 1;
}
9.- Generar los N primeros términos de la serie de Fibonacci, utilizando
para ello una función en las que se trabaja con variables estáticas.
Solución:
/* Generar los N primeros términos de la serie de Fibonacci, utilizando para ello una
función en las que se trabaja con variables estáticas.*/
#include <stdio.h>
long int fibonacci(int);
void main()
{
int n,cont;
printf("n Cuántos números de Fibonacci??");
scanf("%d",&n);
for(cont=1;cont<=n;cont++)
printf("ni=%2dt F=%ld",cont,fibonacci(cont));
}
long int fibonacci(int cont)
Profesor: Angel Delgado Herrador 23
24. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
{
static long int f1=1,f2=1; // Se inicializan en la primera llamada a la función.
long int f;
f=(cont<3)?1:f1+f2; // if (cont<3) f=1; else f=f1+f2;
f2=f1; // se denomina operador condicional
f1=f;
return f;
}
10.- Cargar un array bidimensional de p*q y devolver un puntero apuntando a
la fila que mas suma.
Solución:
/* Cargar un array bidimensional de p*q y devolver un puntero apuntando a la fila que
mas suma.*/
#include <stdio.h>
#define fil 5
#define col 5
void cargar_tabla(int(*)[col],int,int);
int *max_fila(int(*)[col],int,int);
void main()
{
int p,q,array[fil][col];
int *pfila,i;
do{
printf("Dame las filas:");
scanf("%d",&p);
}while(p<2 || p>5);
do{
printf("Dame las columnas:");
scanf("%d",&q);
}while(q<2 || q>5);
cargar_tabla(array,p,q);
pfila=max_fila(array,p,q);
for (i=0;i<q;i++)
printf(" %d ",*(pfila+i));
}
void cargar_tabla(int (*array)[col],int p,int q)
{
int i,j;
for(i=0;i<p;i++)
for (j=0;j<q;j++)
{
printf("Dame un [%d,%d]:",i,j);
scanf("%d",(*(array+i)+j));
Profesor: Angel Delgado Herrador 24
25. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
}
return;
}
int *max_fila(int (*array)[col],int p,int q)
{
int i,j,suma=0,max,pos;
for(i=0;i<p;i++)
{
for (j=0;j<q;j++)
suma+=*(*(array+i)+j);
if(!i)
{
max=suma; // Para no inicializar el mayor a cero si
pos=i; // me dan todos los números negativos
}
else
if(suma>max)
{
max=suma;
pos=i;
}
suma=0;
}
return (*(array+pos));
}
11.- Leer por teclado un número entero largo e indicar si el número leído es
o no capicúa. Para ello debe utilizarse un array unidimensional donde
almacenaremos cada una de las cifras del número leído.
Se implementarán dos funciones, una para descomponer el número en cifras
y cargar el array, y otra para comparar las posiciones del array y
determinar si el número es capicúa.
Solución:
/* Leer por teclado un número entero largo e indicar si el número leído es o no
capicúa. Para ello debe utilizarse un array unidimensional donde
almacenaremos cada una de las cifras del número leído.
Se implementarán dos funciones, una para descomponer el número en cifras y
cargar el array, y otra para comparar las posiciones del array y determinar si el
número es capicúa. */
#include <stdio.h>
int descomponer_numero(long int,int[]);
int comparar_posiciones(int,int[]);
main()
{
long int n;
Profesor: Angel Delgado Herrador 25
26. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
int t[10],c;
system("cls");
printf("nIntroduce un numero para ver si es capicua :");
scanf("%ld",&n);
c=descomponer_numero(n,t);
if(comparar_posiciones(c,t))
printf("nttt CAPICUA n ");
else
printf("nttt NO CAPICUA n");
}
int descomponer_numero(long int a,int tabla[])
{
int cifras=0;
while(a!=0)
{
tabla[cifras]=a%10;
a=a/10;
cifras++;
}
return cifras; //Devolvemos la cantidad de cifras que tenía el número
}
int comparar_posiciones(int c,int tabla[])
{
int i=0;
while(i<c)
{
if(tabla[i]!=tabla[c-1])
return 0; //Falso, no es capicúa
i++;
c--;
}
return 1; //Verdadero, es capicúa
}
12.- Introducir una cadena de caracteres, e indicar si la cadena leída es o no
un palíndromo (se lee igual de izquierda a derecha, que de derecha a
izquierda). Ej: Dabale arroz a la zorra el abad
Solución:
/* Leer por teclado una cadena de caracteres, e indicar si es o no un
palíndromo (se puede leer tanto de izquierda a derecha, como de derecha a
izquierda).
Ej: Dabale arroz a la zorra el abad */
#include<stdio.h>
Profesor: Angel Delgado Herrador 26
27. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
V#include<string.h>
#include<ctype.h>
void quitar_blancos(char[]);
int palindromo(char[]);
void main()
{
char cad[80];
printf("Cadena:");
gets(cad);
quitar_blancos(cad);
if(palindromo(cad)) printf("nLa cadena leída es un palíndromo.");
else printf("nLa cadena leída NO es un palíndromo.");
}
void quitar_blancos(char cad[])
{
char a[80];
int i,c=0;
for(i=0;i<strlen(cad);i++)
if(!isspace(cad[i])) { a[c]=cad[i]; c++; }
a[c]='0';
strcpy(cad,a);
return;
}
int palindromo(char cad[])
{
// Se puede hacer de cualquiera de las dos maneras siguientes...
// int i,k=strlen(cad)-1;
// for(i=0;i<k;i++,k--)
// if(cad[i]!=cad[k]) return 0;
char a[80];
strcpy(a,cad);
strrev(a); // Sirve para darle la vuelta a una cadena.
if(strcmp(cad,a)) return 0;
else return 1;
}
13.- Leer por teclado un número entero mayor que 0 y menor o igual que 10
para determinar el rango de una matriz de enteros.
Leer un segundo número entero, que servirá para indicar el valor de
comienzo.Cargar, recorriendo en espiral, una matriz de enteros, a partir del
segundo valor leído, y con el rango indicado.
Profesor: Angel Delgado Herrador 27
28. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
Solución:
/* Cargar una matriz, numérica entera, de orden N, a partir de un valor
cualquiera, introducido por teclado, y recorriéndola en espiral.
Ej: N=4 ,Vi=6 Matriz resultante: 6 7 8 9
17 18 19 10
16 21 20 11
15 14 13 12 */
#include <stdio.h>
void mostrar(int[][10],int);
void espiral(int[][10],int,int);
void main()
{
int m[10][10],rango,a;
system("cls");
do{
printf("¨Rango de la matriz(1-10)?");
scanf("%d",&rango);
}while(rango<=0||rango>10);
printf("Valor de A:");
scanf("%d",&a);
espiral(m,rango,a);
system("cls");
printf("nDatos de la tabla...n");
mostrar(m,rango);
printf("nnPulse una tecla para acabar...");
system("pause>nul");
}
void espiral(int t[][10],int r,int n)
{
int tope,a,i,k;
if(r%2) tope=r/2+1;
else tope=r/2;
for(a=0;a<tope;a++)
{
for(i=a,k=a;k<r-a;k++,n++) t[i][k]=n;
printf("n");
for(i=a+1,k--;i<r-a;i++,n++) t[i][k]=n;
printf("n");
for(k--,i--;k>=a;k--,n++) t[i][k]=n;
printf("n");
for(k++,i--;i>a;i--,n++) t[i][k]=n;
}
Profesor: Angel Delgado Herrador 28
29. Instalación y Mantenimiento 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales. IES “Inca Garcilaso”
Montilla (Córdoba)
return;
}
void mostrar(int t[][10],int r)
{
int i,k;
for(i=0;i<r;i++)
{
for(k=0;k<r;k++)
printf("%5d",t[i][k]);
printf("n");
}
return;
}
Profesor: Angel Delgado Herrador 29