已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
2个月前关闭。
Improve this question
我试图调用一个函数来计算sinx()
和cosx()
,但由于某种原因,sinx()
每次都返回值0
。
// homework 4, part 1,
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
// function call for factorial.
int factorial(int n) {
int temp = n;
int sum = 1;
while (temp > 0) {
sum *= temp;
temp -= 1;
}
return sum;
}
// function call for numenator.
numenator(int n) {
int numenator = pow(-1, n);
return numenator;
}
// function call for powX.
powX(int x, int n) {
int powX = pow(x, n);
return powX;
}
// function call for x & n inputs.
/* function is not working */
int getInputs(int x, int n) {
printf("Enter integer as degree: ");
scanf(" %d", &x);
printf("Enter integer as degree: ");
scanf(" %d", &n);
if (x == 'E' || n == 'E') {
exit(EXIT_FAILURE);
}
}
// function call to find sine.
double sinx(int x, int n) {
double sine;
double temp = 0.0;
while (n > 0) {
// program -n yapınca 2*n+1 değişiyor
// temp üzerinden değişiklik yapınca, aynı döngü...
// ...temp 0 olana kadar devam ediyor.
sine = numenator(n) / factorial(2*n+1) * powX(x, 2*n+1);
temp += sine;
printf("sin(%d) where n is %d = %f\n", x, n, temp);
n -= 1;
}
}
// function call to find cosine.
double cosx(int x, int n) {
double cosine = 0.0;
double temp = 0.0;
while (n > 0) {
cosine = numenator(n) / factorial(2*n) * powX(x, 2*n);
temp += cosine;
n -= 1;
printf("\ncos(%d) where n is %d = %f", x, n, temp);
}
}
// main section of program.
int main() {
int x = 30, n = 4;
//getInputs(x, n);
sinx(x, n);
cosx(x, n);
return 0;
}
我试着看看问题是从哪里来的,所以一个接一个地写下每个函数,看看它是否正常工作,但我在函数sinx
和cosx
上失去了跟踪。
下面是我在子函数上使用的公式(numenator/factorial/powX):
3条答案
按热度按时间mqkwyuun1#
在我看来,这两个函数都应该得到奇怪的结果(未定义的行为),因为
sinx
和cosx
都不会返回值。在这两种情况下,都应该返回
temp
的值,但是一旦累加了序列中的所有项,就不用它的值了。7xzttuei2#
计算结果给予令人惊讶的结果,因为对于许多表达式,您使用整数运算而不是浮点运算:
x
应定义为double
,而不是main
、sinx
、cosx
和powX
中的int
sinx
和cosx
应该返回结果。powX
应该有一个返回类型double
。numenator
应该有一个返回类型int
,并重命名为numerator
。numenator
中,你定义了一个与函数同名的局部变量:这让人困惑。此外,您应该使用if (n % 2 == 1) return -1; else return 1;
而不是pow(-1, n)
。int getInputs(int x, int n)
应该接受指向目标变量的指针。x
应通过%f
转换读取temp
应该用于术语,而不是结果。cosx
,temp
的初始值应该是1.0
。如编码的那样,cosx
缺少第一项。tvokkenx3#
至少这些问题:
保存时间启用所有警告
函数缺少返回值
浮点运算
numenator(n) / factorial(2*n+1
是整数除法与整数商。使用浮点除法。考虑在更多地方使用
double
,例如