用c语言编写一个程序,要求如下
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 05:12:31
用c语言编写一个程序,要求如下
已知如下两个多项式
P(x)=PX+ PX+...+PX+P
Q(x)=qX+qX+...+qX+q
求它们的乘积多项式 S(x)=sX+...+sX+s.
可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义一维数组来s来存储结果;利用函数来完成对结果多项式各项系数的计算,最后在屏幕上计算结果.
已知如下两个多项式
P(x)=PX+ PX+...+PX+P
Q(x)=qX+qX+...+qX+q
求它们的乘积多项式 S(x)=sX+...+sX+s.
可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义一维数组来s来存储结果;利用函数来完成对结果多项式各项系数的计算,最后在屏幕上计算结果.
简单说个算法输入的时候是输入两个式子的系数,可以用#作为输入结束标志char ch=‘0’;while(ch!='#'-‘0’){scanf(%c,&ch);ch-='0';}上面的算法每个循环得到的ch里存放的就是实际的数值想办法放到p,q数组里去就行了p,q,s位数分别为pi,qi,si的话si=pi+qi; //s的幂次必为p,q幂次之和P、Q的x幂次相加存入S相应位置至于输入系数的时候输入没有特别要求的话可以按照x的升序排列这样0次幂存入p[0],1次幂存入p[1],...三个数组都可以这样安排方便计算同时可以获取最终式子项数,也就是(幂次+1),在si里s(x)系数计算x幂次之和m刚好对应s[ ]下标for(m=0;m<=si;m++) //计算数组s[ ] for(i=0;i<=m;i++) s[m]=p[i]+q[m-i];然后输出应该就可以了大概就是这样吧 源程序在这里,Win7+C-Free 5.0测试通过先上截图#include <stdio.h> #include <string.h>#define MAXLEN 20 //数组长度 void input(); //输入P/Q void mul(); //多项式乘法 void outputS(); //输出S int main(void){float p[MAXLEN],q[MAXLEN], //p,q输入元素为原多项式各项系数 s[MAXLEN<<2]; //s中元素为输出多项式int sn,pn,qn; //分别为多项式的次数 system("cls"); printf("\n\n输入P(x)的次数(正整数):"); //输入P(x) scanf("%d",&pn);printf("\n输入P(x)各项系数,P(x)降幂排列:\n");pn++; //项数=次数+1 input(p,pn);printf("\n"); printf("\n\n输入Q(x)的次数(正整数):"); //输入Q(x) scanf("%d",&qn);printf("\n输入Q(x)各项系数,Q(x)降幂排列:\n");qn++; //项数=次数+1 input(q,qn); printf("\n"); sn=(pn+qn-2); //S多项式次数 int i; //S数组初始化 for (i=0;i<sn+1;i++) s[i]=0; mul(p,q,s,pn,qn); //做多项式乘法 outputS(s,sn+1); //输出S printf("\n"); getch(); return 1;}void input(float *p,int t){ int i;for (i=0;i<t;i++) scanf("%f",&p[i]);}void mul(float *p,float *q,float *s, int m, int n){int i,j;for (i=0;i<m;i++) //扫描P(x)系数 for (j=0;j<n;j++) //扫描Q(x)系数 s[i+j]+=p[i]*q[j];}void outputS(float *s,int t){int i;printf("\nS(x)各项系数是(S(x)降幂排列):\n");for (i=0;i<t;i++) printf("%.2f\t",s[i]);}呼呼~~终于完成了~~