C 代码看起来不错,但为什么它要求E两次并不断打印0.000?

C 代码看起来不错,但为什么它要求E两次并不断打印0.000?,c,C,我正在调试我的家庭作业程序。我觉得它不错,但似乎不能正常工作 任务如下:{Xn}=|COSn |/n-->0是一个限制为“0”的算术序列。目标是计算所有序列元素的总和,直到某个第n个元素的绝对值小于E(取自用户) 以下是代码: /* {Xn} = |COSn|/n - is a sequence programm works with*/ #include <math.h> #include <stdio.h> /* adding libraries here*/

我正在调试我的家庭作业程序。我觉得它不错,但似乎不能正常工作

任务如下:
{Xn}=|COSn |/n-->0
是一个限制为“0”的算术序列。目标是计算所有序列元素的总和,直到某个第n个元素的绝对值小于E(取自用户)

以下是代码:

/* {Xn} = |COSn|/n - is a sequence programm works with*/

#include <math.h>
#include <stdio.h>

/* adding libraries here*/

float calele(float a) // A function to CALculate an ELEment
{
    float b;
    b = fabs( cos(a) )/a; // {Xn} = |COSn|/n
    return b;
}

float seqsum(float E) //function, that counts sum. 
                      //"calele" function is used
{
    int n=1;
    float sum = 0.0;
    while( fabs(calele(n)) >= E) //if absolute value of counted element is still >= then user's E
    {
        sum = sum+calele(n); // then we add it so sum
        n = n+1;
    }
   return sum; // as soon as counted element becomes < then user's E, programm stops and returns the sum
}

int main(void)
{
    float E = 0; // Declaring E's variable
    float sum = 0; // sum of sequence's elements

    printf("Enter sequense's lower limit: "); // Prompting the user for the E
    scanf("%f", &E); // Getting E from the user
    sum = seqsum(E); // counting sum via function above
    printf("The sum of sequence's elements above %f is: %f\n\n", &E, &sum);

    return 0;
}
/*{Xn}=|COSn |/n-是一个序列程序*/
#包括
#包括
/*在此处添加库*/
float calele(float a)//计算元素的函数
{
浮球b;
b=fabs(cos(a))/a;//{Xn}=|COSn |/n
返回b;
}
float seqsum(float E)//计算和的函数。
//使用“calele”功能
{
int n=1;
浮动总和=0.0;
while(fabs(calele(n))>=E)//若计数元素的绝对值仍然>=则用户的E
{
sum=sum+calele(n);//然后我们把它加起来
n=n+1;
}
return sum;//一旦counted元素变为<,则用户的E,程序停止并返回总和
}
内部主(空)
{
float E=0;//声明E的变量
float sum=0;//序列元素的和
printf(“输入序列的下限:”);//提示用户输入E
scanf(“%f”,&E);//从用户处获取E
sum=seqsum(E);//通过上述函数计算和
printf(“超过%f的序列元素的总和为:%f\n\n”、&E、&sum);
返回0;
}
问题:

  • 为什么它不能正常工作
  • 为什么它总是要求第二个E
  • 为什么不管结果如何,它都会打印零 我无法复制“为什么它总是要求第二个E”-的东西。 然而,“无论结果如何,它为什么打印零”是因为您将
    &E
    &sum
    传递给
    printf
    ;也就是说,您正在传递期望浮点值的指针,从而产生未定义的行为。相反,写

    printf("The sum of sequence's elements above %f is: %f\n\n", E, sum);
    

    我无法想象这个程序不断地要求输入。唯一的
    scanf
    没有出现在任何循环中…您可以显示您的示例输入/输出会话吗?这些问题有点道理。我看不出如何使用
    printf打印任何内容(“在%f以上的序列元素的总和是:%f\n\n”、&E和&sum)请阅读警告,这应该是
    printf(“超过%f的序列元素的总和是:%f\n\n”,E,sum)
    只是一个建议:不要写注释来解释
    calele
    的工作是“计算一个元素”,而是将其命名为
    CALculate\u ELEment
    。再次询问E表示您正在运行一个旧版本的代码。尝试删除可执行文件,然后重新编译并确保获得新的可执行文件。请注意,您有两个警告,因此如果您使用
    -Werror
    编译,则肯定不会获得新的可执行文件。