/*1. Crear una función que calcule el cubo de un número real (float). El resultado deberá ser otro número real. Probar esta función para calcular el cubo de 3.2 y el de 5. */ #include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; } int main() { float numero; float cubo; int i=0; while(numero >= -1000000) { if(i==0) puts("\nEscriba un numero real"); else puts("\nEscriba otro numero real"); scanf("%f", &numero); printf("%f elevado al cubo es %f\n", numero,cubo=cubica(numero)); i ++; } return 0; } /* 2. Crear una función que calcule cual es el menor de dos números enteros. El resultado será otro número entero. */ #include <stdio.h> int minus(int num1, int num2) { int min; min = num1 < num2? num1: num2; return min; } int main() { int numero1, numero2, menor; while (numero1, numero2) { printf(" Escriba un numero\n"); scanf("%d",&numero1); printf(" Escriba otro numero\n"); scanf("%d",&numero2); menor=minus(numero1, numero2); printf(" El menor es %d\n\n", menor); } return 0; } /* 3. Crear una función llamada signo, que reciba un número real, y devuelva un número entero con el valor: -1 si el número es negativo, 1 si es positivo o 0 si es cero. / #include <stdio.h> int signo (float num) { int sig; if (num > 0) sig = 1; if (num == 0) sig = 0; if (num < 0) sig = -1; return sig; } int main() { float numero; while (numero > -1000000) { printf("\nEscriba un numero real: "); scanf("%f", &numero); printf("%d", signo(numero)); } return 0; } /* 5. Crear una función que devuelva la primera letra de una cadena de texto. Probar esta función para calcular la primera letra de la frase Hola */ #include <stdio.h> #include <string.h> char primeraLetra (char* cadena) { return cadena[0]; } int main() { char palabra[10]; printf("Escriba una palabra\n"); scanf("%s", palabra); printf("La primera letra es %c.", primeraLetra(palabra)); return 0; } /* 6.Crear una función que devuelva la primera letra de una cadena de texto. Probar esta función para calcular la primera letra de la frase Hola */ #include <stdio.h> #include <string.h> char ultimaLetra (char* cadena) { return cadena[strlen(cadena)-1]; } int main() { char palabra[10]; int i; printf("Escriba una palabra\n"); scanf("%s", &palabra); printf("La ultima letra es: %c", ultimaLetra(palabra)); return 0; } /* 7. Crear una función que reciba un número y muestre en pantalla el perímetro y la superficie de un cuadrado que tenga como lado el número que se ha indicado como parámetro. */ #include <stdio.h> float perimetro (float numero) { float perimetro; perimetro = 4 * numero; return perimetro; } float area (float numero) { float area; area = numero * numero; return area; } int main() { int num; printf("Escriba un numero: "); scanf("%d", &num); printf("Perimetro:%f\n", perimetro(num)); printf("Area:%f\n", area(num)); return 0; } /* 8. Crear una función escribirTablaMultiplicar, que reciba como parámetro un número entero, y escriba la tabla de multiplicar de ese número (por ejemplo, para el 3 deberá llegar desde 3x0=0 hasta 3x10=30). */ #include <stdio.h> void escribirTablaMultiplicar (int numero) { int tabla; for (tabla=1; tabla<=10; tabla++) printf("%d x %d = %d\n", numero, tabla, numero * tabla); return; } int main() { int num, tabla; printf("Escriba un numero: "); scanf("%d", &num); escribirTablaMultiplicar(num); return 0; } /* 9. Crear una función esPrimo, que reciba un número y devuelva el valor 1 si es un número primo o 0 en caso contrario. */ #include <stdio.h> int esPrimo (int n) { int r, res; if(n != 1) { r=1; res=1; while (res != 0) { res = n % ++r; } if (n == r) return 1; else return 0; } else return 1; } int main() { int num; while (num){ printf("Escriba un numero: "); scanf("%d", &num); printf("%d ", esPrimo(num)); } return 0; } /* 10. Crear una función que reciba un número cualquiera y que devuelva como resultado la suma de sus dígitos. Por ejemplo, si el número fuera 123 la suma sería 6. */ #include <stdio.h> int sumaDeSusCifras (int numero) { int suma=0; if (numero < 10) return numero; else { while (numero >= 10) { suma += numero % 10; numero /= 10; } suma += numero; return suma; } } int main() { int num; printf("Escriba un numero entero positivo: \n"); scanf("%d", &num); printf("La suma de las cifras del numero %d es: %d", num, sumaDeSusCifras(num)); return 0; } /* 11. Crear una función que reciba una letra y un número, y escriba un triángulo formado por esa letra, que tenga como anchura inicial la que se ha indicado. Por ejemplo, si la letra es * y la anchura es 4, debería escribir **** *** ** * */ #include <stdio.h> void dibujaTriangulo (char letra, int numero) { int i; while (numero > 0) { for (i=0; i<numero; i++) printf("%c", letra); printf("\n"); numero--; } return; } int main() { char letra; int numero; printf("Escriba una letra: "); scanf("%c", &letra); printf("Escriba un numero: "); scanf("%d", &numero); dibujaTriangulo(letra, numero); return 0; } /* 12. Crear un programa que halle cualquier raíz de un número. El usuario deberá indicar el número (por ejemplo, 2) y el índice de la raiz (por ejemplo, 3 para la raíz cúbica). Pista: hallar la raíz cúbica de 2 es lo mismo que elevar 2 a 1/3. */ #include <stdio.h> #include <math.h> float raizUniversal (int numero, float raiz); int main() { int radicando, indice;; printf("Escriba el numero al cual le quiere extraer raiz: "); scanf("%d", &radicando); printf("Escriba la raiz que quiere extraer: "); scanf("%d", &indice); printf("La raiz es: %f", raizUniversal(radicando, indice)); return 0; } float raizUniversal(int numero, float ind) { float raiz; raiz = pow(numero, 1/ind); return raiz; } /* 14. Crear un programa que resuelva ecuaciones de segundo grado, del tipo ax2 + bx + c = 0 El usuario deberá introducir los valores de a, b y c. Pista: la solución se calcula con x = ? raíz (b2 - 4·a·c) / 2·a */ #include <stdio.h> #include <math.h> float ecuacion2oGrado1 (float, float, float); float ecuacion2oGrado2 (float, float, float); int main() { float a, b, c; do { printf("Escriba las constantes a, b y c\n"); scanf("%f %f %f", &a, &b, &c); } while (((a==0) || (b==0) || (c==0)) || (((b*b)-(4*a*c)) < 0)); printf("La raices son: %f %f", ecuacion2oGrado1(a, b, c), ecuacion2oGrado2(a, b, c)); return 0; } float ecuacion2oGrado1 (float a, float b, float c) { float x1; x1 = (-b + pow(b*b-4*a*c, 0.5)) / (2*a); return x1; } float ecuacion2oGrado2 (float a, float b, float c) { float x2; x2 = (-b - pow(b*b-4*a*c, 0.5)) / (2*a); return x2; } En este tengo problema con algunas potencias de 5. /* 15. Crear una función que calcule el valor de elevar un número entero a otro número entero (por ejemplo, 5 elevado a 3 = 53 = 5 ·5 · 5 = 125). Esta función se debe crear de forma recursiva. */ #include <stdio.h> #include <math.h> int exponenciacion (int numero, int numero); int main() { int base, exponente; while (exponente >= 0) { printf("Escriba el numero que quiere potenciar: "); scanf("%i", &base); printf("Escriba el numero al que lo quiere elevar: "); scanf("%i", &exponente); printf("La potencia es: %d\n\n", exponenciacion(base, exponente)); } return 0; } int exponenciacion (int a, int n) { if (n == 0) return 1; else return a * pow(a, n-1); /* ¿Porqué no funciona para muchas de las potencias de 5 como: 3, 4, 5, 7, 8, 9, 10, 13 ? */ } /* 16. Como alternativa, crear una función que calcule el valor de elevar un número entero a otro número entero de forma NO recursiva (lo que llamaremos de forma iterativa), usando la orden for */ #include <stdio.h> #include <math.h> int exponenciacion (int numero, int numero); int main() { int base, exponente; while (exponente >= 0) { printf("Escriba el numero que quiere potenciar: "); scanf("%d", &base); printf("Escriba el numero al que lo quiere elevar: "); scanf("%d", &exponente); printf("La potencia es: %d\n\n", exponenciacion(base, exponente)); } return 0; } int exponenciacion (int base, int expo) { int i, pot=1; for (i=0; i<expo; i++) pot *= base; return pot; } /* 16. Crear un programa que emplee recursividad para calcular un número de la serie Fibonacci (en la que los dos primeros elementos valen 1, y para los restantes, cada elemento es la suma de los dos anteriores). */ #include <stdio.h> #include <math.h> long serieFibonacci (int); int main() { int termino; while (termino >= 0) { printf("Escriba el termino de la serie que quiere encontrar: "); scanf("%d", &termino); printf("El termino buscado es: %d\n\n", serieFibonacci(termino)); } return 0; } long serieFibonacci (int n) { if ((n == 0) || (n == 1)) return n; else return serieFibonacci(n - 1) + serieFibonacci(n - 2); } /* 17. Crear un programa que emplee recursividad para calcular un número de la serie Fibonacci (en la que los dos primeros elementos valen 1, y para los restantes, cada elemento es la suma de los dos anteriores). */ #include <stdio.h> #include <math.h> long serieFibonacci (int); int main() { int termino; while (termino >= 0) { printf("Escriba el termino de la serie que quiere encontrar: "); scanf("%d", &termino); printf("El termino buscado es: %d\n\n", serieFibonacci(termino)); } return 0; } long serieFibonacci (int n) { if ((n == 0) || (n == 1)) return n; else return serieFibonacci(n - 1) + serieFibonacci(n - 2); } /* 18. Crear un programa que emplee recursividad para calcular el mayor de los elementos de un vector. */ #include <stdio.h> #define TAMANYO_VECTOR 100 int May(int vector[], int n); main() { int i; int Mayor, n=0; int vec[TAMANYO_VECTOR]; while (n < 1) { printf("Ingrese el numero de elementos: "); scanf("%d", &n); } for (i=0; i<n; i++) { printf("\tElemento[%d]: ", i); scanf("%d", &vec[i]); } printf("\nMayor: %d\n", May(vec, n)); } int May(int vector[], int n) { int max, maxResto; /* Primera línea. */ if (n == 1) /* Caso base */ max = vector[0]; else { maxResto = May(vector+1, n-1); /* Maximo del resto del vector */ if (vector[0] > maxResto) max = vector[0]; else max = maxResto; } return(max); } /* 19. Crear, tanto de forma recursiva como de forma iterativa, una función diga si una cadena de caracteres es simétrica (un palíndromo). Por ejemplo, DABALEARROZALAZORRAELABAD" es un palíndromo. */ #include <stdio.h> void palindromo (char cadena[80]); int main() { char letras[80]; int a=1, i; while ( a ) { puts("Escriba una palabra o una frase"); scanf("%c", &letras); palindromo(letras); } return 0; } void palindromo (char cadena[80]) { int aux, flag=1, i, j; for(i=0; (cadena[i]=getchar()) != '\n'; ++i) aux = i-1; j=aux; for(i=0; i<=aux/2; ++i) { if (cadena[i] != cadena[j]) { flag = 0; break; } --j; } if (flag == 1) printf(" ES un palindromo.\n\n"); else printf(" NO es un palindromo.\n\n"); return; } /* 20. Crear un programa que encuentre el máximo común divisor de dos números usando el algoritmo de Euclides: Dados dos números enteros positivos m y n, tal que m > n, para encontrar su máximo común divisor, es decir, el mayor entero positivo que divide a ambos: - Dividir m por n para obtener el resto r (0 = r < n) ; - Si r = 0, el MCD es n.; - Si no, el máximo común divisor es MCD(n,r). */ #include <stdio.h> #include <math.h> int MCD (int num1, int num2); int main() { int a, numero1, numero2; while( a ) { printf("Escriba dos numeros enteros:\n"); scanf("%d %d", &numero1, &numero2); if ((numero1 == 0) || (numero2 == 0)) { printf("El cero no es factor de ningun numero.\n\n"); continue; } printf("MCD(%d , %d) = %d\n\n", numero1, numero2, MCD(numero1, numero2)); } return 0; } int MCD (int num1, int num2) { int c, D, d, r; if (num1 > num2) { D = num1; d = num2; } else { D = num2; d = num1; } c = D/d; r = D % d; while (r != 0) { D = d; d = r; c = D/d; r = D % d; } return d; }