Quote Originariamente inviata da The_Mustang_24 Visualizza il messaggio
codice:
MAX=I;
MIN=I;
strcpy(XA, NM);
strcpy(XB, NM);
o

codice:
strcpy(MAX, I);
strcpy(MIN, I);
strcpy(XA, NM);
strcpy(XB, NM);
è uguale o cambia qualcosa?
Sì, il primo funziona, il secondo nemmeno compila.

strcpy è solo per le stringhe di caratteri, per cui la normale assegnazione non funziona dato che bisogna copiare più caratteri (e fermarsi al terminatore della stringa); per tutti i tipi primitivi si usa la normale assegnazione.

codice:
I=(float)AT/(float)AB*100;
Come mai bisogna scrivere float se sono state dichiarati numeri interi?
Bisogna scrivere float esattamente perché sono dichiarati numeri interi. Dato che AT e AB sono interi, AT/AB effettua una divisione intera, che non calcola le cifre decimali; moltiplicare per 100 dopo non serve a niente - la precisione si è persa nella divisione. Se ad esempio AT fosse 2 e AB fosse 3, il risultato che tu vorresti è 66, mentre quello che otterresti facendo AT/AB*100 sarebbe 0 (2/3 = 0 in divisione intera; 0*100 = 0).

Fare un cast a float fa in modo che la divisione venga eseguita in floating point, per cui (float)2/(float)3 = 0.6666666f; 0.6666666f * 100 = 66.666f.

Nota che il fatto che il tutto venga assegnato ad una variabile di tipo float non ha alcuna influenza su come viene valutata l'espressione: il calcolo dell'espressione avviene indipendentemente da dove andrà ad essere assegnato il suo risultato.