Esercizio: elevamento a potenza
Si vuole scrivere un programma che accetti in input due numeri interi \(x\) e \(y\) e stampi il risultato dell’operazione \(x^y\).
Quando il programma viene eseguito deve chiedere all’utente di inserire due numeri interi \(x\) e \(y\) e stampare il risultato dell’operazione \(x^y\) in un loop infinito. L’esecuzione termina quando l’utente inserisce due zeri.
Ad esempio:
Inserisci due numeri interi: 2 3
2^3 = 8
Inserisci due numeri interi: 3 2
3^2 = 9
Inserisci due numeri interi: 4 5
4^5 = 1024
...
Inserisci due numeri interi: 0 0
Bye!
Per semplicità si può assumere che \(x, y \in \mathbb{N}\) (siano sempre maggiori o uguali a zero).
Opzionale:
- ampliare il dominio dell’input a \(x, y \in \mathbb{Z}\) (l’input può contenere anche numeri negativi);
Suggerimento
In C non esiste un operatore per l’elevamento a potenza. Tuttavia, possiamo calcolare \(x^y\) come \(x \cdot x \cdot \ldots \cdot x\) (con \(y\) fattori) utilizzando un ciclo for
.
Soluzione
se \(x, y \in \mathbb{N}\)
#include <stdio.h>
int main(void)
{
int base, exp, result;
do
{
// inizializza result a 1
= 1;
result
// ricevi l'input dall'utente
("Inserisci due numeri interi: ");
printf("%d %d", &base, &exp);
scanf
// se l'input non è 0 0
if (base != 0 || exp != 0)
{
// calcola base^exp = base * base * ...
for (int i = 0; i < exp; i++)
{
*= base;
result }
("%d^%d = %d\n", base, exp, result);
printf}
} while (base != 0 || exp != 0);
}
se \(x, y \in \mathbb{Z}\)
#include <stdio.h>
int main(void)
{
int base, exp;
float result;
do
{
= 1.0;
result
("Inserisci due numeri interi: ");
printf("%d %d", &base, &exp);
scanf
if (base != 0 || exp != 0)
{
if (exp < 0)
{
for (int i = 0; i > exp; i--)
{
/= base;
result }
}
else
{
for (int i = 0; i < exp; i++)
{
*= base;
result }
}
("%d^%d = %.3f\n", base, exp, result);
printf}
} while (base != 0 || exp != 0);
}