ejercicios generales c programa

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) Profesor: Angel Delgado Herrador 1 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 )

Upload: sergio

Post on 20-Jun-2015

2.966 views

Category:

Education


6 download

DESCRIPTION

ejercicios resueltos C Clsicos ejercicios Curso de C

TRANSCRIPT

Page 1: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 1

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)

Page 2: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 2

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.

Page 3: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 3

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)

Page 4: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 4

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)

Page 5: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 5

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() */

Page 6: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 6

#include <stdio.h> void main() { char c; int a,b; printf("dame un caracter\n"); c=getchar(); fflush (stdin); printf("dame dos numeros\n"); 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 = %d\n",a,b,a*b); b++; } }

Page 7: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 7

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 %.2f\n",(float)s/c);

else

Page 8: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 8

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;

Page 9: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 9

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=%d\n",a,b); for (i=0;i<b;i++) producto+=a; printf("El producto con for es: %d\n",producto); producto=0; i=0; while (i<b) { producto+=a; i++; } printf("El producto con while es: %d\n",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.

Page 10: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 10

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:

Page 11: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 11

/* 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("%d\t",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);

Page 12: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 12

void main() { int op,n,m; do { system ("cls"); printf ("\n MENÚ DE OPCIONES"); printf ("\n ================\n"); printf ("\n 1.- TABLA DE MULTIPLICAR\n"); printf ("\n 2.- PRODUCTO POR SUMAS\n"); printf ("\n 3.- MOSTRAR NÚMEROS COMPRENDIDOS ENTRE DOS\n"); printf ("\n 4.- SALIR \n\n\n\n"); 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); }

Page 13: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 13

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. */

Page 14: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 14

#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)

Page 15: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 15

{ 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;

Page 16: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 16

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)

Page 17: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 17

{ 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;

Page 18: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 18

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);

Page 19: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 19

}while (n<3 || n>20); cargar(t,n); system("cls"); printf("Los elementos de la tabla son...\n"); mostrar(t,n); printf("\n\n\nDame el número que vas a buscar: "); scanf("%d",&a); printf("\n\nEl 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[]);

Page 20: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 20

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;

Page 21: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 21

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-%d\n",a,b,c); } } void ordena(int *pa,int *pb)

Page 22: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 22

{ 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;

Page 23: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 23

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=%2d\t F=%ld",cont,fibonacci(cont)); } long int fibonacci(int cont)

Page 24: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 24

{ 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));

Page 25: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 25

} 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;

Page 26: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 26

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("\n\t\t\t CAPICUA \n "); else printf("\n\t\t\t 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>

Page 27: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 27

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.

Page 28: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 28

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("\n\nPulse 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; }

Page 29: Ejercicios generales C Programa

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)

Profesor: Angel Delgado Herrador 29

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; }