Hago una iteración de matriz para calcular el número redondo más cercano a millones. Por ejemplo, si ingresa 3400000, el resultado es 3000000, que es correcto. Pero si la entrada fue 23200000 (el resultado deseado era 23000000), el resultado inesperadamente se convirtió en 0.0000

El código que usé:

main()
{
    double initial_num;
    double progress_num[10];
    double final_number;
    double difference;
    int i;  

    printf("input number : "); scanf("%lf",&initial_num);

    /*limit_awal=5802000;*/

    progress_num[0]=initial_num;
    for (i=1; progress_num[i]>0; i++) {
        progress_num[i]=initial_num-(i)*1000000;

        if (progress_num[i]<1000000) {
            difference = progress_num[i];
            final_number=initial_num-difference;
            break;
        }
    } 

    printf("Final number after rounding to million = %lf\n",final_number);
}
c
0
Agung Sudrajat Supriatna 12 oct. 2019 a las 10:49

1 respuesta

La mejor respuesta

En esta linea

 for (i=1; progress_num[i]>0; i++) {

El código no se compara con el valor anterior, sino con el actual, que ni siquiera está configurado.

Cámbialo para que sea

 for (i=1; progress_num[i-1]>0; i++) {

También ajuste el tamaño de la matriz progress_num, o agregue una prueba para no escribir más allá de sus límites.

También tenga cuidado de que i * 1000000 no se desborde int.

Por cierto: en C tiene que ser int main(void) al menos.

2
alk 12 oct. 2019 a las 08:44