解题思路:
首先通过拆分,可分为以下几步:
1.实现fact()函数 ,完成阶乘
阶乘可以看成1*2*3*..*n, 其中由1到n可以借用循环变量,
再使用一个变量用于存储前一次的乘积,最后该变量所存储的值就是n的阶乘
for(i=1;i<=n;i++)
m=m*i;
2.实现mypow()函数,完成xn次方
xn次方可以看为n个x相乘的结果,即一个循环n次的乘法,
注意此时x累乘后值发生变化,因用一变量存储初始x
t=x;
for(i=1;i<n;i++)
x=x*t;
3.实现奇数项为+,偶数项为-,并求和
该功能易于实现,即奇数项乘以1,偶数项乘以-1,
只需一个变量不断替换为相反数,再累积再变量上即可
sum=0;
for(i=1,t=1;i<=n;i++)
{
sum+=t * mypow( x,n ) / fact( n );
t=-t;
}
注意事项:
1.合理使用数据类型
2.注意格式要求
参考代码:
#include <stdio.h> double Fact(long long n) { long long m=1; for (int i = 2; i <= n; i++) m=m * i; return m; } double MyPow(double x, long long n) { double t = x; for (int i = 1; i < n; i++) x = x * t; return x; } int main(void) { double x; long long n; double sum = 0; scanf("%lf", &x); scanf("%lld", &n); for (int i = 1, t = 1; i <= n; i++, t = -t) sum += t * MyPow(x, i) / Fact(i); printf("%.4lf", sum); return 0; }
0.0分
25 人评分
#include <stdio.h> double fact(long long n); double mypow(double x,long long n); int main() { double x=0,sum=0; long long n=0; int i=0,t=0; scanf("%f %lld",&x,&n); for(i=1,t=1;i<=n;i++,t=-t){ sum=sum+t*mypow(x,n)/fact(n); } printf("%.4lf",sum); return 0; } double fact(long long n){ int i=0; long long sum=1; for(i=1;i<=n;i++){ sum=sum*i; } return sum; } double mypow(double x,long long n){ int a=0,c=0; double b=x,ama=0; for(a=1;a<n;a++){ //第一轮,b=4;第二论,b=8 b=b*x; } return b; } 这个哪里有问题呢?可以请教一下大佬们吗
#include<stdio.h> #include<math.h> double fact(int n) { int i; double sum=1; for(i=1;i<=n;i++) { sum*=i; } return sum; } double mypow(double x,int n) { double S; S=pow(-x,n); return S; } double fact(int n); double mypow(double x,int n); int main() { double x; int n,i,t=-1; double f=0; scanf("%lf%d",&x,&n); for(i=1;i<=n;i++) { f+=t*mypow(x,i)/fact(i); } printf("%0.4lf",f); return 0; }
#include <stdio.h> double mypow(double a, long long int b){ double q = a; if( b==1 ) return a; else return a * mypow(q,b-1); } double fac(long long int m){ if( m==1 ) return 1; else return m * fac(m-1); } int main(){ int t = -1; long long int i, n; double x, S = 0; scanf("%lf %lld", &x, &n); for( i=1; i<=n; i++ ){ t *= -1; S += t * mypow(x,i) / fac(i); } printf("%.4lf", S); }
double fact(int n) { int i = 1; double sn = 1; for (; i <= n; i++) { sn *= i; } return sn; } double mypow(double x, int n) { int i = 1; double sx = 1; for (; i <= n; i++) { sx *= x; } return sx; } int main() { double x = 0; int n = 0; int j = 0; int s = -1; double sum = 0; scanf("%lf %d", &x, &n); for (j = 1; j <= n; j++) { s *= -1; sum += s * (mypow(x, j) / fact(j)); } printf("%.4lf\n", sum); return 0; }
double fact(double n); double mypow(double x, double n); int main() { double n, x; int i; scanf("%lf%lf", &n, &x); double sum = 0.0000; double t = 1; for (i = 1, t = 1; i <= n; i++) { sum += t * mypow(x, n) / fact(n); t = -t; } printf("%.4lf\n", sum); } double fact(double n) { double c = 0; if (n == 1) { return 1; } else { c=1 * fact(n - 1)*n; return c; } } double mypow(double x, double n) { int i = 0; double sum = 1; for (i = 0; i < n; i++) { sum *= x ; } return sum; } 为什么我最后的结果是0.000
#include<stdio.h> double fact(long long n) { long long i; i=1; while(n>0) { i=i*n; n--; } return i; } double mypow(double x, long long n) { long long i, j; i=j=1; while(i<=n) { j=j*x; i++; } return j; } int main() { int t; t=1; long long a, b; b=1; double c, sum; sum=0; scanf("%lf %lld", &c, &a); while(b<=a) { sum=sum+t*mypow(c,b)/fact(b); t=-t; b++; } printf("%.4lf", sum); return 0; } 这个有什么问题?
KExa 2022-07-07 20:58:50 |
mypow函数里把j的类型换成double试试
#include<stdio.h> int main() { double fact(long long n); double mypow(double x,long long n); double x,s=0.0,a,b; long long n,i,t=-1; scanf("%lf %d",&x,&n); for(i=1;i<=n;i++) { a=mypow(x,n); b=fact(n); if(i%2==0) { b=t*b; } s=s+a/b; } printf("%.4lf",s); return 0; } double mypow(double x,long long n) { double z=1.0; long long j; for(j=1;j<=n;j++) { z=z*x; } return z; } double fact(long long n) { double w=1.0; long long h; for(h=1;h<=n;h++) { w=w*h; } return w; } 为什么提交上去不对呢?
#include <stdio.h> #include <math.h>> double fact(double n) { int i; double j=1; for(i=1;i<=n;i++) { j=i*j; } return j; } double mypow(double x,int n) { int i; double m,fac; for(i=1;i<=n;i++) { fac=fact(n); m=(pow((-1),i-1)*pow(x,i))/fac+m; } return m; } int main () { int n; double x,w; scanf("%lf %d",&x,&n); w=mypow(x,n); printf("%.4lf",w); } 输出1.000问题在哪求解
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:651 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:849 |
C语言训练-计算1977!* (C语言代码)浏览:932 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:818 |
字符串的输入输出处理 (C语言代码)浏览:1003 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:569 |
printf基础练习2 (C语言代码)浏览:648 |
矩形面积交 (C++代码)浏览:1200 |
C二级辅导-求偶数和 (C语言代码)浏览:701 |
排序算法(选择,插入,冒泡)浏览:874 |