0

Ok so I have never taken a C programming course and I have a general idea of what Arrays are, but I cant seem to figure out why this array has a certain output.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>  // include srand function
#pragma warning(disable : 4996) 
#define Size 15
main() {
    int a[Size];
    int i;
    double b1[Size], b2[Size];
    srand( (unsigned)time( NULL ) );  // Use current time as seed
    // apply (start) timestamp 
       for (i = 0; i < Size; i++)
    {
        a[i] = rand() % 100; 
              // initialize the array using random number between 0 and 99
        b1[i] = a[i]/5;
        printf("a[%d] = %d\n", i, a[i]);
        printf("b1[%d] = %f\n", i, b1[i]);
        b2[i] = a[i];
        b2[i] = b2[i]/5;
        printf("b2[%d] = %f\n", i, b2[i]);
    }
    // apply (end) timestamp 
    //compute the time elapsed and display time in seconds
}

For my homework I need to run this code and explain why b1 and b2 have same or different values. I cant seem to wrap my head around what is happening here:

       for (i = 0; i < Size; i++)
    {
        a[i] = rand() % 100; 
              // initialize the array using random number between 0 and 99
        b1[i] = a[i]/5;
        printf("a[%d] = %d\n", i, a[i]);
        printf("b1[%d] = %f\n", i, b1[i]);
        b2[i] = a[i];
        b2[i] = b2[i]/5;
        printf("b2[%d] = %f\n", i, b2[i]);
    }

If someone could explain what the code is doing here I would very much appreciate it. Thanks!

Edit- This is the output once I run the program:

a[0] = 8
b1[0] = 1.000000
b2[0] = 1.600000
a[1] = 74
b1[1] = 14.000000
b2[1] = 14.800000
a[2] = 78
b1[2] = 15.000000
b2[2] = 15.600000
a[3] = 64
b1[3] = 12.000000
b2[3] = 12.800000
a[4] = 53
b1[4] = 10.000000
b2[4] = 10.600000
a[5] = 6
b1[5] = 1.000000
b2[5] = 1.200000
a[6] = 71
b1[6] = 14.000000
b2[6] = 14.200000
a[7] = 4
b1[7] = 0.000000
b2[7] = 0.800000
a[8] = 7
b1[8] = 1.000000
b2[8] = 1.400000
a[9] = 57
b1[9] = 11.000000
b2[9] = 11.400000
a[10] = 55
b1[10] = 11.000000
b2[10] = 11.000000
a[11] = 13
b1[11] = 2.000000
b2[11] = 2.600000
a[12] = 55
b1[12] = 11.000000
b2[12] = 11.000000
a[13] = 96
b1[13] = 19.000000
b2[13] = 19.200000
a[14] = 25
b1[14] = 5.000000
b2[14] = 5.000000
1
  • What values do you see printed out? Commented Jan 31, 2015 at 21:45

1 Answer 1

3

Because you implicitly convert int to double and both times do that different ways.

b1[i] =   a[i]   / 5   ;
/*     ^  ^ int    ^ 
 *     |           +-- int
 *     +-- implicit convertion to double */

b2[i] =  b2[i]     /  5   ;
/*        ^ double    ^
 *                    + int implicitly converted
 *                      to double */
  • In first expression you divide int by int where you lose precision (i.e. 7 / 2 gives you 3, not 3.5),
  • In second expression you divide double by double. That doesn't lead to that.
Sign up to request clarification or add additional context in comments.

1 Comment

Aha! Yes thank you that makes sense to me. I can understand why the values printed out are different. b1 only prints out values as int whereas b2 prints out values as a double which is why they are all in decimal. It divides the value in array a[] at the certain index by 5 and thats how b1 and b2 get their values. Is my thought process here right?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.