多项式乘法的实现
青岛理工大学
《C语言程序设计》
目 多项式乘法(加法减法)的实现_____
指导教师: 李兰
姓名: 马鹏
学号: 201207059
班级: 计算122班
专业: 计算机科学与技术
地点: 听力楼201
时间: 2013.07.01 至 2013.07.05
1
多项式加法减法乘法的实现 一,
要求:已知如下两个多项式
m,1m,2P(x)=p1x+ px+...+px+p m-m-210
n,1n,2Q(x)=q+q+...+q+q xxxn-1n-210编程求他们的加减乘结果
本系统主要实现两个多项式的加减乘运算,利用数组的特点实现次数小于100的多项式的加减乘运算,主要思想是让数组的下表随多项式指数同事变化,读者只需输入多项式指数所对应的系数就可输出他所要得到的多项式了。
二,上机环境
操作系统:Windows 2007
开发工具:C与C++程序设计学习与实验系统 2012
三,函数调用关系图
main
()
void voidsub(voidmuiVoid Void systemsystemvoidadd(int int ty(int Input Output
a[],int a[],int a[],int (int (int ("paus("cls"menu(m,int m,int m,int y[], a[],
b[],int b[],int b[],int int int e") ); void) n,int n,int n,int x) x)
c[]) c[]) c[])
四,各函数功能说明
1,main()……………………………………………………主函数;
2,void input()………………………………………..输入函数;
3,void output()……………………………………..输出函数;
2
4,void menu(void)………………………………..菜单函数;
5,system(“cls”)........................................................................................................清屏函数; 6,system(“pause”)...................................................................................................暂停函数; 7,void muity(int a[],int m,int b[],int n,int c[])................多项式相乘函数; 8,void add(int a[],int m,int b[],int n,int c[])..................多项式相加函数; 9,void sub(int a[],int m,int b[],int n,int c[])..................多项式相减函数。 五,算法描述或流程图
开 始
输入m 输入n
m<=0 n<=0 n>0 m>0
i==0 i==0 调用input函input调用函 数输出Q(X) px 数输出()
i<100 i<100
output调用函数output调用函
px 输出()Qx 数输出()N Y Y N
i++ i++
提前退出
3
输入t
t=1 t=2 t=3 t=0 t>3&
&t<0
多项式相加 多项式相乘 输入
w
W=W=w>2&&输出结 1 2 w<1 果
计算P(x)-Q(x) 计算Q(x)-p(x)
结
束 输出结果
4
六,程序运行效果图
输入 第一组 3
P(X)的系数: 3 1 3
第二组 3
Q(X)的系数: -2 -1 2
运行结果截图:
5
七,总结
第十八周是青岛理工大学计算机
学院大
的课程设设计周,这是很多人人生当中的第一次课程设计,本以为自己所学到的东西对于课设很有信心,可是当我拿到题目是才知道我是多么的幼稚,对于课设要求中大多数题目都是很陌生的,不知道如何下手,我做的是一道数学程序题----多项式相乘,听起来很好听,但是做来实在不易啊,起初我怎么都不会想到能用数组做,于是我就用结构体和链表做,但是当做到多项式合并同类项是我就被卡住了,想不到怎么下手,我准备星期二去问问老师,第二天老师给我的回答让我很惊讶,她说你的题其实很简单,没必要用链表做,用数组完全就够了,我说用数组我实在想不起怎么去做,他就给我讲了一下原理,此时我还想着我昨天的功夫不就白费了吗,这又要重新开始了,怀着对数组的好奇我就开始做了起来,花了一天的时间终于做出来了,当时真的很高
6
心,不过又看了看周围同学的课设,我就没那么高兴了,说实话他们的程序真的很难,注定这是一个让我们大一过得最有意义的一周了,其实大多说C程序的让我在这一周有复习了一遍,又增加了我对C的理解,同事伴随着对他的新欢有增加了些。
用数组编程多项式的乘法也有很多缺点;比如:多现实的指数不好控制,用数组还要占大量的内存,使得整个程序华而不实,我感觉还是用链表做比较好,指数和系数任由自己输入,所占的内存又可以随时释放,对计算机的内存要求不高,看来真的得加深对结构体和链表的理解,并且深入了解了。
这周课设从中获得了很多,加深了对数组的理解,同时对系统函数又有了更多的理解又见识了很多,也从同学程序中获得了很多新的知识。
期待下次课设~~~
八,参考文献
邱建华. C语言程序设计
. 东软电子出版社
谭浩强(C程序设计(第三版)(清华大学出版社,2005
scanf("%d",&y[i]); 九,程序清单 }
}
#include "stdio.h" void output(int a[],int x) #include "stdlib.h" {
#include
int i,sum=0;
#define N 100 for(i=0;i0)
printf("\n\t**********'1'多项式相加 {
*********\n"); if(i!=0)
printf("\t**********'2'多项式相减 printf("+");
*********\n"); if(i>0)
printf("\t**********'3'多项式相乘 {
*********\n"); if(i==1)
printf("\t**********'0'退出 {
***************\n"); if(a[i]==1)
printf("请输入您的选择:"); printf("X");
} else void input(int y[],int x) printf("%dX",a[i]); { }
int i; else if(a[i]==1)
for(i=0;i0) void muity(int a[],int m,int b[],int n,int
{ c[])
if(i>1) {
{ int i,j;
if(a[i]==-1) for(i=0;in?m:n;
} for(i=0;in?m:n; printf("%dX^%d",abs(a[i]),i); for(i=0;in?m:n;
P2[index] = 0; while(scanf("%d",&t)!=EOF)
} {
printf("\n\t请输入一元多项式P(X)的项数
m(00) add(P1,m,P2,n,P3);
{ printf("两多项式相加结果
printf("\t请输入一元多项式P(X)(按指数由F(X)=P(X)+Q(X)="); 小到大排列的方式输入)\n"); printf("(");
input(P1,m); output(P1,m);
printf("您输入的多项式P(X)="); printf(") ");
output(P1,m); printf(" , ");
break; printf("(");
} output(P2,n);
else printf(") ");
printf("输入错去请重新输入\n"); printf(" , ");
output(P3,max);
} printf("\n如果您想继续请输入您
printf("\n"); 的选择:");
printf("\n\t请输入一元多项式Q(X)的项数 n(00) printf("\t**********'2'执行
{ Q(X)-P(X)*********\n");
printf("\t请输入一元多项式P(X)的 printf("你的选择是:"); 系数(按指数由小到大排列的方式输入)\n"); scanf("%d",&w);
input(P2,n); if(w==1)
printf("您输入的多项式Q(X)="); {
output(P2,n); sub(P1,m,P2,n,P3);
9
printf("两多项式相减结果 printf("("); F(X)=P(X)-Q(X)="); output(P1,m);
printf("("); printf(") ");
output(P1,m); printf(" × ");
printf(") "); printf("(");
printf(" , "); output(P2,n);
printf("("); printf(") ");
output(P2,n); printf(" , ");
printf(") "); output(P3,m+n);
printf(" , "); printf("\n如果您想继续请输入您
output(P3,max); 的选择:");
printf("\n如果您想继续请再次输 break;
入您的选择:"); case 0:
system("cls");
break; printf("\n\n\n\t\t\t谢谢您的使
} 用,再见~\n");
else if(w==2) exit(0);
{ default:
sub(P2,n,P1,m,P3); printf("Input Error\n");
printf("两多项式相减结果 printf("\n如果您想继续请输入您F(X)=Q(X)-P(X)="); 的选择:");
printf("("); break;
output(P2,n); }
printf(") ");
printf(" , "); }
printf("(");
output(P1,m); }
printf(") ");
printf(" , ");
output(P3,max);
printf("\n如果您想继续请再次输
入您的选择:");
break;
}
else
printf("对不起~没有这个选项
\n");
printf("\n如果您想继续请再次输
入您的选择:");
break;
case 3:
muity(P1,m,P2,n,P3);
printf("两多项式相乘结果
F(X)=P(X)*Q(X)=");
10