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
和&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
编译,则肯定不会获得新的可执行文件。