一元多项式的加减乘法

输入一元多项式的参数,然后根据一元多项式加法减法乘法的计算法则,求解最终结果。用到了结构体,指针,操作的时候要注意。

不多说,上代码:

  1 #include <stdio.h>
  2 #include <malloc.h>
  3
  4 typedef struct node{
  5     float coef;
  6     int expn;
  7     struct node *next;
  8 }PLOY;
  9
 10 void start(){
 11     printf("*******************************\n");
 12     printf("两个一元多项式相加/相减,相乘:\n");
 13     printf("*******************************\n");
 14     printf("请选择操作:\n");
 15     printf("0.退出\n");
 16     printf("1.两个一元多项式相加\n");
 17     printf("2.两个一元多项式相乘\n");
 18     printf("3.两个一元多项式相减\n");
 19 }
 20
 21 void insert(PLOY *head,PLOY  *inpt){
 22     PLOY *pre,*now;
 23     int signal=0;
 24     pre=head;//pre定义为现在的前一个链接
 25     if(pre->next==NULL){
 26         pre->next=inpt;
 27     }
 28     else{
 29         now=pre->next;
 30         while(signal==0){
 31             if(inpt->expn<now->expn){
 32                 if(now->next==NULL){
 33                     now->next=inpt;
 34                     signal=1;
 35                 }
 36                 else{
 37                     pre=now;
 38                     now=pre->next;
 39                 }
 40             }
 41             else{
 42                 if(inpt->expn > now->expn){
 43                     inpt->next=now;
 44                     pre->next=inpt;
 45                     signal=1;
 46                 }
 47                 else{
 48                     now->coef=now->coef+inpt->coef;
 49                     signal=1;
 50                     free(inpt);
 51                     if(now->coef==0){
 52                         pre->next=now->next;
 53                         free(now);
 54                     }
 55                 }
 56             }
 57         }
 58     }
 59 }
 60
 61 PLOY *creat(char ch){
 62     PLOY *head,*inpt;
 63     float x;
 64     int y;
 65     head=(PLOY *)malloc(sizeof(PLOY));
 66     head->next=NULL;
 67     printf("请输入一元多项式%c:(格式是系数 指数;以0 0结束!)\n",ch);
 68     scanf("%f %d",&x,&y);
 69     while(x!=0){
 70         inpt=(PLOY *)malloc(sizeof(PLOY));
 71         inpt->coef=x;
 72         inpt->expn=y;
 73         inpt->next=NULL;
 74         insert(head,inpt);
 75         printf("请输入一元多项式%c的下一项:(以0 0结束!)\n",ch);
 76         scanf("%f %d",&x,&y);
 77     }
 78     return head;
 79 }
 80
 81 PLOY *addPLOY(PLOY *head,PLOY *pre){
 82     PLOY *inpt;
 83     int flag=0;
 84     while(flag==0){
 85         if(pre->next==NULL)
 86             flag=1;
 87         else{
 88             pre=pre->next;
 89             inpt=(PLOY *)malloc(sizeof(PLOY));
 90             inpt->coef=pre->coef;
 91             inpt->expn=pre->expn;
 92             inpt->next=NULL;
 93             insert(head,inpt);
 94         }
 95     }
 96     return head;
 97 }
 98
 99 PLOY *minusPLOY(PLOY *head,PLOY *pre){
100     PLOY *inpt;
101     int flag=0;
102     while(flag==0){
103         if(pre->next==NULL){
104             flag=1;
105         }
106         else{
107             pre=pre->next;
108             inpt=(PLOY *)malloc(sizeof(PLOY));
109             inpt->coef=0-pre->coef;
110             inpt->expn=pre->expn;
111             inpt->next=NULL;
112             insert(head,inpt);
113         }
114     }
115     return head;
116 }
117
118 PLOY *byPLOY(PLOY *headl,PLOY *head2){
119     PLOY *inpt,*res,*pre;
120     int flag=0;
121     res=(PLOY *)malloc(sizeof(PLOY));
122     res->next=NULL;
123     headl=headl->next;
124     pre=head2;
125     while(flag==0){
126         if(pre->next==NULL){
127             pre=head2;
128             headl=headl->next;
129             continue;
130         }
131         if(headl==NULL){
132             flag=1;
133             continue;
134         }
135         pre=pre->next;
136         inpt=(PLOY *)malloc(sizeof(PLOY));
137         inpt->coef=pre->coef * headl->coef;
138         inpt->expn=pre->expn + headl->expn;
139         inpt->next=NULL;
140         insert(res,inpt);
141     }
142     return res;
143 }
144
145 void print(PLOY *fun){
146     PLOY *printing;
147     int flag=0;
148     printing=fun->next;
149     if(fun->next==NULL){
150         printf("0\n");
151         return ;
152     }
153     while(flag==0){
154         if(printing->coef>0&&fun->next!=printing)
155             printf("+");
156         if(printing->coef==1);
157         else if(printing->coef==-1)
158             printf("-");
159         else
160             printf("%f",printing->coef);
161         if(printing->expn!=0)
162             printf("x^%d",printing->expn);
163         else if((printing->coef==1)||(printing->coef==-1))
164             printf("1");
165         if(printing->next==NULL)
166             flag=1;
167         else
168             printing=printing->next;
169     }
170     printf("\n");
171 }
172
173 int main(){
174     PLOY *f,*g;
175     int sign=-1;
176     start();
177     while(sign!=0){
178         scanf("%d",&sign);
179         switch(sign){
180             case 0:
181                 break;
182             case 1:
183                 {
184                     printf("你选择的操作是多项式相加:\n");
185                     f=creat(‘f‘);               //输入多项式f(x)
186                     printf("f(x)=");
187                     print(f);
188                     g=creat(‘g‘);               //输入多项式g(x)
189                     printf("g(x)=");
190                     print(g);
191                     printf("F(x)=f(x)+g(x)=");
192                     f=addPLOY(f,g);
193                     print(f);
194                     sign=-1;
195                     start();
196                     break;
197                 }
198             case 2:
199                 {
200                     printf("你选择的操作是多项式相乘:\n");
201                     f=creat(‘f‘);
202                     printf("f(x)=");
203                     print(f);
204                     g=creat(‘g‘);
205                     printf("g(x)=");
206                     print(g);
207                     printf("F(x)=f(x)*g(x)=");
208                     f=byPLOY(f,g);
209                     print(f);
210                     sign=-1;
211                     start();
212                     break;
213                 }
214             case 3:
215                 {
216                     printf("你选择的操作是多项式相减:\n");
217                     f=creat(‘f‘);
218                     printf("f(x)=");
219                     print(f);
220                     g=creat(‘g‘);
221                     printf("g(x)=");
222                     print(g);
223                     printf("F(x)=f(x)-g(x)=");
224                     f=minusPLOY(f,g);
225                     print(f);
226                     sign=-1;
227                     start();
228                     break;
229                 }
230             default:
231                 {
232                     printf("输入有误!请重新选择操作!\n");
233                     start();
234                     break;
235                 }
236         }
237
238     }
239 }
240
241
242
243
244  
时间: 2024-10-06 00:07:20

一元多项式的加减乘法的相关文章

大数加减乘法

大数的相关计算问题一直是编程比赛常考的题目,在蓝桥杯比赛之前又把大数的加减乘法做了一遍.大数除法比较难,还没有去尝试实现,以后有机会了再继续补全好了. 算法分析:三种方法相似,都是按位操作,动态存储.处理好输入数据后,对每一位的逐个操作,很容易得到答案. 大数加法 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #define MAX 1010 using n

ThinkPHP 3.2.3 加减乘法验证码类

ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Verify/ 可以在 Verify.class.php 文件内进行修改,也可以单独写一个类继承自带的验证码类.如果单独写一个继承的类,可以重用父类的属性和方法,但是要注意的是父类中有一些属性和方法是私有(private)的,可以修改这些私有的属性和方法为保护(protected)的,如果不希望修改框架自

十个数字不同,实现加减乘。暴力枚举法

/*2016.08.29此程序功能是实现十个个位数字的组合不同形式形成加减乘法,可以灵活变动以适应不同的要求*/#include<iostream>using namespace std;int main(){ int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (int i0 = 0; (i0 < 10) && (a[i0] != -1); i0++){ a[i0] = -1; if (i0 == 1) for (int

表达式求值:从“加减”到“带括号的加减乘除”的实践过程

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee ● 为什么想做一个表达式求值的程序 最近有一个需求,策划想设置游戏关卡的某些数值,这个数值不是一个常量,而是根据关卡的某些环境数据套上一个计算表达式算出来的.这个需求无法用excel拖表预计算出,因为关卡的环境数据只有在游戏中才能产生,在excel制表时,这些都是未知的.作为程序员,我可以把计算表达式硬编码在代码中,但这个做法有缺陷,如果策划要修改计算表达式的话,只能通过我修改程序并

BigDecimal数据的加 减 乘 除 N次幂运算 以及比较大小

在实际开开发过程中BigDecimal是一个经常用到的类: 它可以进行大数值的精确却运算,下面介绍一下它的加-减-乘-除以及N次幂的操作操作 import java.math.BigDecimal; public class Test02 { public static void main(String[] args) { BigDecimal num1 = new BigDecimal(5000); BigDecimal num2 = new BigDecimal(20); BigDecima

逆向课程第三讲逆向中的优化方式,以及加减乘

逆向课程第三讲逆向中的优化方式,以及加减乘 一丶为什么要熟悉优化方式 熟悉优化方式,可以在看高级代码的时候浮现出汇编代码,以及做逆向对抗的时候,了解汇编代码混淆 优化和混淆是相反的 优化: 指的是汇编代码越少越好,让程序更快的执行 混淆: 一条汇编代码变为多条汇编代码,影响逆向人员的破解能力,但是软件的效率大大降低 二丶加减乘的常见的几种优化方式 优化方式分为: 1.常量折叠 2.常量传播 3.变量去除 这些优化方式成为窥孔优化 (有10几种后面会一一到来) 首先了解什么是常量折叠,常量传播,然

大数加减乘模板

大数加法: 1 #include <stdio.h> 2 3 #include <string.h> 4 5 #define M 100 //定义了数量M是100作为数组初始化的数量 6 7 8 9 int main() 10 11 { 12 13 int i, j, len_s1, len_s2; // len_s1是字符数组s1的长度, len_s2是字符数组s2的长度, 14 15 char s1[M], s2[M]; 16 17 int num1[M] = {0}; //

在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问

有同学在群里提问,如何使用axure制作商品数量增加减少效果,见GIF图.虽然属于初级教程,但很多同学还是小白新手阶段,所以特地录制了详细的视频讲解,供大家学习参考! 该教程由原型库网站录制http://www.yuanxingku.com转载请注明出处! 在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问,布布扣,bubuko.com

去除input[type=number]最右边的spinners(默认加减符号)

// 去掉input[type=number]默认的加减号 input[type='number'] { -moz-appearance:textfield; } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } input[type=number]有时会出现默认的加减spinne