Instalación y Mantenimiento               1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales...
Instalación y Mantenimiento               1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales...
Instalación y Mantenimiento               1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales...
Instalación y Mantenimiento               1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales...
Instalación y Mantenimiento                   1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes loc...
Instalación y Mantenimiento                  1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes loca...
Instalación y Mantenimiento                     1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes l...
Instalación y Mantenimiento                       1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes...
Instalación y Mantenimiento                    1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes lo...
Instalación y Mantenimiento                         1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de red...
Instalación y Mantenimiento              1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales....
Instalación y Mantenimiento         1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales.     ...
Instalación y Mantenimiento                 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes local...
Instalación y Mantenimiento                     1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes l...
Instalación y Mantenimiento                 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes local...
Instalación y Mantenimiento                 1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes local...
Instalación y Mantenimiento              1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales....
Instalación y Mantenimiento               1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales...
Instalación y Mantenimiento              1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales....
Instalación y Mantenimiento               1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales...
Instalación y Mantenimiento                   1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes loc...
Instalación y Mantenimiento                  1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes loca...
Instalación y Mantenimiento                  1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes loca...
Instalación y Mantenimiento                      1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes ...
Instalación y Mantenimiento                      1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes ...
Instalación y Mantenimiento                    1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes lo...
Instalación y Mantenimiento                         1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de red...
Instalación y Mantenimiento                  1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes loca...
Instalación y Mantenimiento         1º C.F. G.M. Explotación de Sistemas Informáticos.
de servicios de redes locales.     ...
Upcoming SlideShare
Loading in …5
×

Ejercicios generales C Programa

3,265 views
3,129 views

Published on

ejercicios resueltos C
Clsicos ejercicios
Curso de C

Published in: Education, Technology, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,265
On SlideShare
0
From Embeds
0
Number of Embeds
41
Actions
Shares
0
Downloads
165
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ejercicios generales C Programa

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×