Cicli
Codifica:
#include <stdio.h>
main()
{
int N,F,I,k;
printf("Inserire N: ");
scanf("%d",&N);
for (k=2; k<=N; k++) /* CICLO ESTERNO,
DA 2 A N */
{ /* si calcola il fattoriale di k */
F=1;
for (I=2; I<=k;
I++) F = F*I;
printf("Fatt(%d)=%d\n",k,F);
}
}
Variante: osservando che fatt(N) = fatt(N-1) * N, è possibile utilizzare un ciclo solo.
#include <stdio.h>
main()
{
int N,F,I,k;
printf("Inserire N: ");
scanf("%d",&N);
F=1;
for (k=2; k<=N; k++)
{
F = F*k;
printf("Fatt(%d)=%d\n",k,F);
}
}
#include <stdio.h>
main()
{
double N,pot=1;
int M,i;
printf("Inserire N e M (M>=0): ");
scanf("%lf%d",&N,&M);
for (i=1;i<=M;i++) pot = pot*N;
printf("N^M = %lf",pot);
}
Variante:
#include <stdio.h>
main()
{
double N,pot;
int M,i;
printf("Inserire N e M: ");
scanf("%lf%d",&N,&M);
pot = N;
if (M>=0)
for (i=2;i<=M;i++) pot = pot*N;
else {
for (i=2;i<=(-M);i++) pot = pot*N;
pot = 1/pot;
}
printf("N^M = %lf",pot);
}
Esercizio 5
Esercizio 6
Alcune osservazioni:
#include <stdio.h>
main()
{
int N,voto,max,min,i;
printf("Inserire i voti e terminare con 0:\n");
max = 18;
min = 30;
do {
printf("Voto: ");
scanf("%d",&voto);
if (voto != 0) {
if (voto>max) max = voto;
if (voto<min) min = voto;
}
} while (voto != 0);
printf("\nVoto max:%d\tVoto min:%d\n",max,min);
}
Alcune osservazioni:
#include <stdio.h>
main()
{
int N,voto,max,min,i;
printf("Inserire i voti e terminare con 0:\n");
printf("Voto: ");
scanf("%d",&voto);
max = min = voto;
while (voto != 0)
{
if (voto>max) max = voto;
else if (voto<min) min = voto;
printf("Voto: ");
scanf("%d",&voto);
}
printf("\nVoto max:%d\tVoto min:%d\n",max,min);
}
Osservazione: è stato introdotto un ELSE per evitare di
valutare la condizione del secondo IF; infatti, se voto>max allora sarà
sicuramente voto>min e il secondo confronto può essere evitato.
Si osservi che, con questa modifica, non sarebbe corretto (dal punto di
vista logico) inizializzare MAX e MIN a 18 e 30 (perché?).