105.多项式乘法

举报
C语言与CPP编程 发表于 2022/05/04 00:45:12 2022/05/04
【摘要】 #include <stdio.h>#include <math.h>#define MAX 50/* 下面的两个数组可以根据具体要求解的多项式来决定其值*/static double p[6]={4,-6,3,1,-1,5}; /*表示多项式4x^5 - 6x^4 + 3x^3 + x^2 - x + 5 */...

  
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define MAX 50
  4. /* 下面的两个数组可以根据具体要求解的多项式来决定其值*/
  5. static double p[6]={4,-6,3,1,-1,5}; /*表示多项式4x^5 - 6x^4 + 3x^3 + x^2 - x + 5 */
  6. static double q[4]={3,2,-5,1}; /*表示多项式3x^3 + 2x^2 - 5x + 1 */
  7. static double result[9]={0,0,0,0,0,0,0,0,0}; /*存放乘积多项式*/
  8. void npmul(p,m,q,n,s)
  9. int m,n;
  10. double p[],q[],s[];
  11. {
  12. int i,j;
  13. for (i=0; i<=m-1; i++)
  14. for (j=0; j<=n-1; j++)
  15. s[i+j]=s[i+j]+p[i]*q[j]; /*迭带计算各项系数*/
  16. return;
  17. }
  18. double compute(s,k,x) /*计算所给多项式的值*/
  19. double s[];
  20. int k;
  21. float x;
  22. {
  23. int i;
  24. float multip = 1;
  25. double sum = 0;
  26. for (i=0;i<k;i++)
  27. multip = multip * x; /*先求出x的最高次项的值*/
  28. for (i=k-1;i>=0;i--)
  29. {
  30. sum = sum + s[i] * multip; /*依次从高到低求出相对应次项的值*/
  31. if (x!=0)
  32. multip = multip / x;
  33. }
  34. return sum;
  35. }
  36. void main()
  37. {
  38. int i,j,m,n;
  39. double px[MAX],qx[MAX],rx[MAX];
  40. float x;
  41. clrscr();
  42. for(i=0;i<MAX;i++)
  43. rx[i]=0;
  44. puts(" This is a polynomial multiplication program.");
  45. puts("It calculate the product of two polynomials: P(x) and Q(x)");
  46. puts(" P(x)=Pm-1*x^(m-1)+Pm-2*x^(m-2)+...+P1*x+P0");
  47. puts(" Q(x)=Qn-1*x^(n-1)+Qn-2*x^(n-2)+...+Q1*x+Q0");
  48. printf("\n >> Please input m (>=1): ");
  49. scanf("%d",&m);
  50. printf(" >> Please input P%d, P%d, ... P1, P0 one by one:\n",m-1,m-2);
  51. for(i=0;i<m;i++)
  52. scanf("%f",&px[i]);
  53. printf("\n >> Please input n (>=1): ");
  54. scanf("%d",&n);
  55. printf(" >> Please input Q%d, Q%d, ... Q1, Q0 one by one:\n",n-1,n-2);
  56. for(i=0;i<n;i++)
  57. scanf("%f",&qx[i]);
  58. npmul(p,m,q,n,rx);
  59. printf("\nThe product of two polynomials R(x) is :\n");
  60. for (i=m+n-1,j=0;i>=1;i--) /*逐行逐项打印出结果多项式*/
  61. {
  62. printf(" (%f*x^%d) + ",rx[m+n-1-i],i-1);
  63. if(j==2)
  64. {
  65. printf("\n");
  66. j=0;
  67. }
  68. else
  69. j++;
  70. }
  71. printf("\n");
  72. printf("Input the value of x: ");
  73. scanf("%f",&x);
  74. printf("\nThe value of the R(%f) is: %13.7f",x,compute(rx,m+n-1,x));
  75. puts("\n Press any key to quit...");
  76. getch();
  77. }

文章来源: blog.csdn.net,作者:程序员编程指南,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/124558650

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。