分数:C 编程中的和与差
Fractions: Sum and difference in C programming
我在用 C 编写计算 S 的程序时遇到问题,S = {1/50 - 3/48 + 5/46...} 有 9 个元素。我不知道如何在 SUM 运算符后使用 DIFFERENCE 运算符,我必须使用 for 结构。
这是我写的程序:
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int n, d, S, i;
i = 0;
n = 1;
d = 50;
S = n / ((double)d);
for (i = 0; i < 4; i++) {
n += 2;
n -= 2;
S = S + (n / ((double)d));
S = S - (n / ((double)d));
}
printf("%d", S);
return 0;
}
我知道变量声明可能是错误的,这正是我感到困惑的地方。我将 S 标定为整数,但将 d(分母)加倍,因为结果当然必须是十进制数。
有人能帮帮我吗??
我得到的输出是:0
检查您要查找的是否是以下代码:
#include <stdio.h>
#include <stdlib.h>
void main () {
int n = 1, d = 50, i = 0, signal = 1;
double S = n / (double) d;
for (i = 0; i < 8; i++) {
n += 2;
d -= 2;
signal = -signal;
S += signal * n/(double)d;
}
printf("%f", S);
}
我认为您遗漏了 S
是一个 double
数字。 int/double = double
,但您将此数学分配到 int
变量中。
大概是这样的。最重要的一点,是使用double
类型,因为int
类型只能容纳整数。
#include <stdio.h>
int main (void) {
int i;
double sign = 1.0; // sign
double num = 1.0; // numerator
double div = 50.0; // divisor
double sum = 0.0; // series sum
for (i = 0; i < 9; i++) {
sum += sign * num / div; // accumulate the term
num += 2.0; // numerator +2
div -= 2.0; // divisor -2
sign *= -1.0; // alternate the sign
printf("%f\n", sum); // show double result
}
return 0;
}
程序输出:
0.020000
-0.042500
0.066196
-0.092895
0.121390
-0.153610
0.188496
-0.228171
0.271829
关于您的代码的不同说法。
首先,您不能使用整数求和,因为您需要浮点数结果。
然后如评论中所述,您正在使用导致不更改变量的连续操作
n+=2; n-=2;
你可以简单地做类似的事情:
double S = 0.0; int N=9;
for(i=0; i < N; ++i) {
S += ( (i % 2 == 0)?(1.0):(-1.0) ) * (2.0*i+1)/(50-(2.0*i+1));
}
指令 (i % 2 == 0)?(1.0):(-1.0) 如果 'i' 是偶数,则选择 1,如果 'i' 是奇数,则选择 -1。
最后,如果 S 不再是 int,则必须将 printf 更改为浮点格式,例如“%f”。
我在用 C 编写计算 S 的程序时遇到问题,S = {1/50 - 3/48 + 5/46...} 有 9 个元素。我不知道如何在 SUM 运算符后使用 DIFFERENCE 运算符,我必须使用 for 结构。
这是我写的程序:
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int n, d, S, i;
i = 0;
n = 1;
d = 50;
S = n / ((double)d);
for (i = 0; i < 4; i++) {
n += 2;
n -= 2;
S = S + (n / ((double)d));
S = S - (n / ((double)d));
}
printf("%d", S);
return 0;
}
我知道变量声明可能是错误的,这正是我感到困惑的地方。我将 S 标定为整数,但将 d(分母)加倍,因为结果当然必须是十进制数。
有人能帮帮我吗??
我得到的输出是:0
检查您要查找的是否是以下代码:
#include <stdio.h>
#include <stdlib.h>
void main () {
int n = 1, d = 50, i = 0, signal = 1;
double S = n / (double) d;
for (i = 0; i < 8; i++) {
n += 2;
d -= 2;
signal = -signal;
S += signal * n/(double)d;
}
printf("%f", S);
}
我认为您遗漏了 S
是一个 double
数字。 int/double = double
,但您将此数学分配到 int
变量中。
大概是这样的。最重要的一点,是使用double
类型,因为int
类型只能容纳整数。
#include <stdio.h>
int main (void) {
int i;
double sign = 1.0; // sign
double num = 1.0; // numerator
double div = 50.0; // divisor
double sum = 0.0; // series sum
for (i = 0; i < 9; i++) {
sum += sign * num / div; // accumulate the term
num += 2.0; // numerator +2
div -= 2.0; // divisor -2
sign *= -1.0; // alternate the sign
printf("%f\n", sum); // show double result
}
return 0;
}
程序输出:
0.020000
-0.042500
0.066196
-0.092895
0.121390
-0.153610
0.188496
-0.228171
0.271829
关于您的代码的不同说法。
首先,您不能使用整数求和,因为您需要浮点数结果。
然后如评论中所述,您正在使用导致不更改变量的连续操作
n+=2; n-=2;
你可以简单地做类似的事情:
double S = 0.0; int N=9;
for(i=0; i < N; ++i) {
S += ( (i % 2 == 0)?(1.0):(-1.0) ) * (2.0*i+1)/(50-(2.0*i+1));
}
指令 (i % 2 == 0)?(1.0):(-1.0) 如果 'i' 是偶数,则选择 1,如果 'i' 是奇数,则选择 -1。
最后,如果 S 不再是 int,则必须将 printf 更改为浮点格式,例如“%f”。