#include<stdio.h>
#include<math.h>
double x_pow(double x,int n){
int i,x_pow = 1;
for(i = 1;i <= n;i++){
x_pow *= x;
}
return x_pow;
}
int fact(int n){
int sum = 1,i;
if(n == 0||n == 1) return 1;
for(i = 1;i <= n;i++){
sum *= i;
}
return sum;
}
void x_sin(double x){
int sign = 1,k = 1,count = 0;
double sin = 0;
double single_value = 0;
do{
single_value = x_pow(x,k)/fact(k);
sin += sign*single_value;
k += 2;
sign *= -1;
count++;
}while(abs(single_value) >= 0.00001);
43 printf("%.3lf\n%d",sin,count);
}
int main(){
double x;
scanf("%lf",&x);
x_sin(x);
return 0;
}
abs返回值类型是int
改为fabs
第29行:while(abs(single_value) >= 0.00001); 实数求绝对值不是 abs()函数,应用fabs(),修改如下: while (fabs(single_value) >= 0.00001);
不知道你这个问题是否已经解决, 如果还没有解决的话:对于左侧查看列表中的“single_value”为0.43,符合第28行的while循环条件,但却在调试时跳出dowhile循环的情况,有可能是因为代码中涉及到浮点数的比较,而浮点数计算存在精度问题,导致条件判断结果与预期不符。
解决方案: 1. 可以尝试将浮点数转换为整型进行比较,可以使用强制类型转换或者将浮点数乘以一个较大的整数再进行比较。 示例代码:
int value = (int)(single_value * 100); // 将浮点数乘以100再转换为整型
while(value <= threshold) {
// do something
}
double epsilon = 1e-9; // 设置极小值
while(fabs(single_value - threshold) > epsilon) {
// do something
}