Reputation: 199
I was recently asked this question in a programming test. I can't seem to understand why I am getting the answer '1'. I am a beginner in the C
programming language.
Here is my code:
#include<stdio.h>
int main()
{
float c = 0;
int n, i = 1;
printf("Enter the number here: ");
n = getchar();
while (i <= 2*n - 1)
{
c = c + (1/i);
i = i + 2;
}
printf("%f", c);
}
I have already tried using a for
loop, but the answer remains the same. Any help would be appreciated!
Upvotes: 7
Views: 2250
Reputation: 5222
I agree with Adrian's answer.
Another issue is because of the way floating point numbers are represented in a system when they are added in arbitrary order, precision can be lost.
To have maximum precision, floating point numbers should be added from smallest first to largest last.
Upvotes: 3
Reputation: 51825
The problem in your code lies on this line:
c = c + (1/i);
Here, the operation performed inside the parentheses is integer division! So, when i
has any value greater than 1
, the result will be zero. This zero is then converted to a float value.
To force the compiler to use floating point division, use this:
c = c + (1.0/i);
Upvotes: 15