這個(gè)其實(shí)很簡單,需要3個(gè)數(shù)組(暫時(shí)考慮int數(shù)組),長度都是10,分別保存多項(xiàng)式1、2和計(jì)算結(jié)果。初始化為全0。輸入就按照你的假設(shè)吧。輸入后三個(gè)數(shù)組分別為:
鹿邑網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,鹿邑網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為鹿邑上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的鹿邑做網(wǎng)站的公司定做!
多項(xiàng)式1:[7, 0, -5, 2, 0, 0, 0, 0, 0, 0](x的0次冪系數(shù)是7,x的1次冪系數(shù)是2,以此類推,下同)
多項(xiàng)式2:[-8, 1, 3, 0, 0, 0, 0, 0, 0, 0]
計(jì)算結(jié)果:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0](還沒算呢,當(dāng)然都是0)
加法減法很好算,不贅述。乘法怎么算呢,你按照真實(shí)的數(shù)學(xué)計(jì)算步驟推一遍就知道了,你會(huì)把3x2、x、-8分別乘以2x3-5x2+7,最后把結(jié)果加起來。轉(zhuǎn)換到程序中,就是把若干個(gè)數(shù)組加起來:
[-56, 0, 40, -16, 0, 0, 0, 0, 0, 0]
[0, 7, 0, -5, 2, 0, 0, 0, 0, 0]
[0, 0, 21, 0, -15, 6, 0, 0, 0, 0]
加起來就可以了。
至于提高水平,這個(gè)題目出得不好,因?yàn)槎囗?xiàng)式相除結(jié)果不唯一。比如說2x2 + 1除以x2 + 1,你可以說2x2 + 1 = 2(x2 + 1) - 1,也可以說2x2 + 1 = 1(x2 + 1) + x2。這樣的題目數(shù)學(xué)上就意義不大,用程序去實(shí)現(xiàn)也達(dá)不到鍛煉水平的作用。也許我理解有誤?
思路:
因?yàn)檫@是個(gè)加法的多項(xiàng)式,用變量s累加,s的最初值是0,第1次向上加1!,第2次加2!,...,第n磁加n! s+=jc;階乘變量jc在循環(huán)中計(jì)算。
每項(xiàng)用循環(huán)變量i控制,第1次循環(huán)取值1,第2次循環(huán)取值2,...,第20次循環(huán)取值20,這個(gè)變量就是要求的階乘數(shù),i的值每次加1
階乘是個(gè)累乘的運(yùn)算,用變量jc,初始值是1,第1次向上乘以循環(huán)變量值1,就是1!,第2次是前邊計(jì)算好的1!*2=2!,...,第20次就是19!*20=20!,jc*=i;
由于20!數(shù)據(jù)比較大,對(duì)于32bit的int型變量存放不下,可以考慮用double型數(shù)據(jù)計(jì)算,省得溢出。
因此程序主體算法為:
int i;
double s,jc;
s=0; jc=1;
for ( i=1;i=20;i++ ) { jc*=i; s+=jc; }
printf("%lf\n",s);
#include stdio.h
#include stdlib.h
void main( )
{
double coe[20], x, sum = 0;
int i, n;
printf("請(qǐng)輸入總項(xiàng)數(shù): ");
scanf("%d", n);
printf("請(qǐng)按指數(shù)從高到低的順序輸入各項(xiàng)系數(shù): ");
for(i = n; i = 0; i--)
scanf("%lf", coe[i]);
printf("請(qǐng)輸入變量x的值: ");
scanf("%lf", x);
for(i = n; i = 0; i--)
sum = sum * x + coe[i];
printf("\n結(jié)果為: %lf\n", sum);
}
#include double x; double f(int n){ if(n==0)return 1.0; else if(n==1)return x; return (2*n-1)*x-(n-1)-(n-1)*f(n-2)/n;} int main(){ int a; printf("輸入n,x\n"); scanf("%d%lf",a,x); printf("%lf",f(a)); return 0;}
#include stdio.h
#define DEGREE_MAX 8
void get_poly(double coeff[], int *degree)
{
int i;
printf("please enter the biggest degree:");
scanf("%d", degree);
for (i = *degree; i = 0; i--) {
printf("enter %d `s Coefficient:", i);
scanf("%lf", coeff[i]);
}
printf("\nyour polynomial is:\n");
for (i = *degree; i = 0; i--) {
printf("%.2lfX^%d%c", coeff[i], i, (i 0?' ' : '\n'));
}
}
double eval_poly(const double coeff[], int degree, double x)
{
int i;
double m = x, ret = 0;
ret += coeff[0];
for (i = 1; i = degree; i++) {
ret += coeff[i]*m;
m *= x;
}
return ret;
}
int main() {
double coeff[DEGREE_MAX],x;
int degree;
get_poly(coeff, degree);
printf("\nplease enter X value:");
scanf("%lf", x);
printf("the answer is %.2lf\n", eval_poly(coeff, degree, x));
return 0;
}