我用C语言写了个程序 可以运行 但是得不到结果 求解呀·
#include<stdio.h>#include<math.h>intmain(void){doublefact(intn);intn,count;doublex,su...
#include<stdio.h>
#include<math.h>
int main(void){
double fact(int n);
int n,count;
double x,sum,denominator,b;
printf("Enter x:\n");
scanf("%lf",&x);
for(n=1;n<=1000000000;x++){
denominator=fact(n);
count++;
b=pow(x,count)/denominator;
sum+=b;
if(denominator<0.00001)
break;
else
continue;
}
printf("sum=%.4f\n",sum);
return 0;
}
double fact(int n){
int i,j,s;
for(i=1;i<=n;i++){
s=1;
for(j=1;j<=i;j++){
s*=j;}
}
return s;} 展开
#include<math.h>
int main(void){
double fact(int n);
int n,count;
double x,sum,denominator,b;
printf("Enter x:\n");
scanf("%lf",&x);
for(n=1;n<=1000000000;x++){
denominator=fact(n);
count++;
b=pow(x,count)/denominator;
sum+=b;
if(denominator<0.00001)
break;
else
continue;
}
printf("sum=%.4f\n",sum);
return 0;
}
double fact(int n){
int i,j,s;
for(i=1;i<=n;i++){
s=1;
for(j=1;j<=i;j++){
s*=j;}
}
return s;} 展开
5个回答
展开全部
运行结果确实是4
16
48
但你的程序中一下值得注意:
cout<<endl;
而不是
cout<<end1;
这样的低级语法错误不应该犯;
而且一般写程序也不建议使用void
main(),而应使用int
main(int
argc,
char
*argv[])
16
48
但你的程序中一下值得注意:
cout<<endl;
而不是
cout<<end1;
这样的低级语法错误不应该犯;
而且一般写程序也不建议使用void
main(),而应使用int
main(int
argc,
char
*argv[])
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(n=1;n<=1000000000;x++){
这个循环里面的循环变量应该是n吧,你却来个x++,n就一直是1,当然是个死循环。而且你的这个数1000000000太大了,整形的变量会溢出变成负数的,在VC++上的话你可以试试__int64,在DEV-C上的话就试试long long
这个循环里面的循环变量应该是n吧,你却来个x++,n就一直是1,当然是个死循环。而且你的这个数1000000000太大了,整形的变量会溢出变成负数的,在VC++上的话你可以试试__int64,在DEV-C上的话就试试long long
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
Enter x = 5
sum = 66.5865
Press any key to continue
*/
#include<stdio.h>
#include<math.h>
int main(void) {
double fact(int n),sum = 0;
unsigned int n,count = 0;
double x,denominator,b;
printf("Enter x = ");
scanf("%lf",&x);
for(n = 1;n <= x;n++) {
denominator = fact(n);
count++;
b = pow(x,count)/denominator;
sum += b;
if(1.0/denominator < 0.00001) break;
// else continue; // 冗余语句
}
printf("sum = %.4lf\n",sum); // 输出double类型数据的格式是%lf
return 0;
}
double fact(int n) {
int i,j,s = 0,fact;
for(i = 1;i <= n;i++) {
fact = 1;
for(j = 1;j <= i;j++) fact *= j; // 求i的阶乘
s += fact; // 各个阶乘结果求和
}
return s; // 返回阶乘和
}
Enter x = 5
sum = 66.5865
Press any key to continue
*/
#include<stdio.h>
#include<math.h>
int main(void) {
double fact(int n),sum = 0;
unsigned int n,count = 0;
double x,denominator,b;
printf("Enter x = ");
scanf("%lf",&x);
for(n = 1;n <= x;n++) {
denominator = fact(n);
count++;
b = pow(x,count)/denominator;
sum += b;
if(1.0/denominator < 0.00001) break;
// else continue; // 冗余语句
}
printf("sum = %.4lf\n",sum); // 输出double类型数据的格式是%lf
return 0;
}
double fact(int n) {
int i,j,s = 0,fact;
for(i = 1;i <= n;i++) {
fact = 1;
for(j = 1;j <= i;j++) fact *= j; // 求i的阶乘
s += fact; // 各个阶乘结果求和
}
return s; // 返回阶乘和
}
追问
您好 为什么要加上这个unsigned啊·unsigned表示什么意思啊·?而且我判断结束的语句是x^n/n!的绝对值<10的-5次方 才算结束; 为什么else continue 是冗余的啊 ··?我把我源代码改了 改正if(b<0.00001) 把sum=0;为什么这可以运行当X=1的时候 其他的值运行部了
追答
这个不加,因为你原来的循环结束条件是n < 1000000000,后来改为n就不必要了。
unsigned是无符号类型,比如unsigned char是无符号字符类型,unsigned int是无符号整形等等。
else continue 是冗余的,因为如果满足条件(1.0/denominator < 0.00001)就结束循环,否则就继续,不加该语句其功能是完全等同的。
x = 1时,可以正常运行,其结果是sum = 1.0000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面的SUM没有初始化,下面还没看,你的SUM应该在定义的时候写上SUM=0,这样才能显出结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询