Shaik
Shaik

Reputation: 33

My calculation shows wrong when enter large number?

#include <stdio.h>

main()
{
int choice, no;

printf("1. Show sum of odd/even number to N term\n");
printf("2. Smallest, largest and average of the supplied numbers\n");
printf("3. Terminate the programs\n\n");

printf("Enter your choice[1|2|3]: ");
scanf("%d", &choice);

if (choice == 1)
{
    int i , no , sum = 0, j, sum2 = 0;

    printf("\nEnter any number: ");
    scanf("%d", &no);

    for (i = 2; i <= no; i = i + 2)
    {
        sum = sum + i;
    }

    printf("\nSum of all even number between 1 to %d = %d\n", no, sum);

    for (j = 1; j <= no; j = j + 2)
    {
        sum2 = sum2 + j;
    }
    printf("Sum of all odd number between 1 to %d = %d\n", no, sum2);
}
else if(choice == 2)    
{
    float max, min, avg, num,counter=0, sum = 1;
    printf("\nPlease enter all the number you want![0 to end]: ");
    scanf("%f", &num);
    max = min = num;
    while (num != 0)
    {
        printf("Please enter all the number you want![0 to end]: ");
        scanf("%f", &num);
        if (max < num && num > 0)
            max = num;
        else if (min > num && num > 0)
            min = num;
        sum = sum + num;
        counter++;
    }
    printf("\nThe smallest and largest of entered numbers are %.2f and %.2f respectively.\n", min, max);
    avg = sum / counter;
    printf("The sum of entered number is %.2f\n", sum);
    printf("The average of entered number is %.2f\n", avg);
}

}

My problem is when i choose number 2 it will show smallest and largest number but the sum show wrongly when i enter large number like 200! But it work fine when i enter small value!?

small number Big number

picture included

Upvotes: 1

Views: 81

Answers (3)

Shaik
Shaik

Reputation: 33

#include <stdio.h>
main()
{
    int choice = 0;


    for (;choice != 3;)
    {
        printf("_____________________________________________________________\n\n");
        printf("1. Show sum of odd/even number to N term\n");
        printf("2. Smallest, largest and average of the supplied numbers\n");
        printf("3. Terminate the programs\n\n");
        printf("Enter your choice[1|2|3]: ");
        scanf("%d", &choice);
        printf("_____________________________________________________________\n\n");

        if (choice == 1)
        {
            int i, no, sumc1 = 0, j, sum2c1 = 0;

            printf("\nEnter any number: ");
            scanf("%d", &no);

            for (i = 2; i <= no; i = i + 2)
            {
                sumc1 = sumc1 + i;
            }

            printf("\nSum of all even number between 1 to %d = %d\n", no, sumc1);

            for (j = 1; j <= no; j = j + 2)
            {
                sum2c1 = sum2c1 + j;
            }
            printf("Sum of all odd number between 1 to %d = %d\n\n\n", no, sum2c1);
        }
        else if (choice == 2)
        {

            float counter, num, large, small, num2, sum = 0, avg;
            printf("\nEnter first number[Enter 0 to stop]: ");
            scanf("%f", &num);
            num2 = num;
            large = num;
            small = num;
            for (counter = 0; num != 0; counter++)
            {
                printf("Enter another number [Enter 0 to stop]: ");
                scanf("%f", &num);
                if (num > large && num > 0)
                    large = num;
                if (num<small && num > 0)
                    small = num;
                sum = sum + num;
            }
            sum = sum + num2;
            avg = sum / counter;
            printf("\nThe largest number is %.2f\n", large);
            printf("The smallest number is %.2f\n", small);
            printf("The sum of entered numbers are %.2f\n", sum);
            printf("The average of entered number are %.2f\n\n\n", avg);

        }
    }
}

I just figured out the main problem thanks to all, although some of replies gave me full code, i have to use just simple code because i only started to learn the basic. thanks.

this code might be useful for someone.

//uniten.encik//

Upvotes: 0

M Oehm
M Oehm

Reputation: 29126

Your program has several issues:

  • You initialise the sum to 1, not to 0 as it ought to be.
  • You handle the first value and subsequent values differently. This is basically okay, but make sure that the treatment is the same in bothz cases. In your code, you assign min and max for the first value correctly, but miss incrementing the sum and the counter.
  • Your code doesn't check whethet a valid float has been entered. That means that it will hang if the user enters something that isn't a float. Your program should handle such input as if it were zero.
  • In theory, you should not divide by counter when it is zero. In practice, that doesn't happen, because you also account for the terminating zero in your counter.

Perhaps it would be better to treat the first value like all other values. You could then either initialise min and max to big and small values (for example ±FLT_MAX from <float.h>) or you could check count == 0 inside the loop to implement diferent behaviour for the first and the following values.

In that case, you could break out of an infinite loop when invalid input or zero was given. This might seem complicated, but leads to simpler code:

#include <stdio.h>
#include <float.h>

int main(void)
{
    float max = -FLT_MAX;       // minimum possible float value
    float min = FLT_MAX;        // maximum possible float value
    float sum = 0.0f;
    int count = 0;

    for (;;) {
        float num;

        printf("Please enter all the number you want![0 to end]: ");

        if (scanf("%f", &num) < 1 || num == 0) break;            

        if (max < num) max = num;
        if (min > num) min = num;
        sum += num;
        count++;
    }

    if (count) {
        float avg = sum / count;

        printf("%d values\n", count);
        printf("Smallest: %.2f\n", min);
        printf("Largest:  %.2f\n", max);

        printf("Sum:      %.2f\n", sum);
        printf("Average:  %.2f\n", avg);
    }

    return 0;
}

Upvotes: 0

Xinzoop
Xinzoop

Reputation: 111

Your sum has never count the first input. With initial value sum = 1,

For your small numbers: your sum = (1 + 1 + 1 + 2) happens to be right. But for your big numbers: your sum = (1 + 100 + 100 + 200 ) = 400.1 (you can see you missed the first input 100);

Your mistakes:

  1. sum should be initialized as 0;

  2. you did not count the first input (before loop): not calc sum nor counter++

  3. when user finally input 0, you should not continue counter++ because '0' is not a valid input.

Upvotes: 1

Related Questions