Project-符合人类习惯的多元多项式计算器

程序最终功能介绍

1、可进行多元多项式的加减乘运算
2、多项式的输入输出完全符合人类书写习惯(系数1、-1、0 指数1、0时)
3、输入无升降幂要求,交叉项内字母无顺序要求
4、支持区分大小写的52种字母作为变元
5、指数最大32767, 系数最大2^32
6、结果以升幂输出,交叉项内字母按ASCII表排列
7、输入两个多项式可进行多次运算
8、支持合并同类项、合并同底数幂功能
示例:
加法:
在这里插入图片描述
减法:
在这里插入图片描述
乘法:
在这里插入图片描述
最多52元 + 交叉项自动字母排序:
在这里插入图片描述
自动升幂输出 + 合并同类项:
在这里插入图片描述
立方差公式:
在这里插入图片描述
较大指数系数容量:
在这里插入图片描述
输入一组式子可多次运算:
在这里插入图片描述
错误指令自动识别:
在这里插入图片描述

以下是程序各文件内容

main.h

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#define MAXASC 127
#define MAXINT 32767
#define min(a,b) ((a)>(b)?(b):(a))
typedef struct Poly{
   
	int coef;
	int exp;
	struct Part* self;
	struct Poly* next;
} Poly;
typedef struct Part{
   
	char letter;
	int exp;
	struct Part* next;
} Part;

void ReadTwoPoly(Poly** addhead1, Poly** addhead2);
void PrintPoly(Poly* head);

void PrintTable();
int ReceiveCommand(Poly* head1, Poly* head2);
int Count(Poly* L);
void Free(Poly** addhead1, Poly** addhead2);
int JudgeFirstJian(char* a);
int IsSign(char q);
int IsLetter(char q);
void PastePart(Poly* newpoly, Poly* oldpoly);
int Findwei(int n);
int TestHe(Poly* p, Poly* q);
int FindPartMin(Part* u);
int FindPolyMin(Poly* u);
void PolyHe(Poly* head);

void SortPartsofPoly(Poly* head);
void SortPart(Poly* p);
Poly* SortPoly(Poly* yuanhead);

Poly* Plus(Poly* head1, Poly* head2);
Poly* Subtract(Poly* head1, Poly* head2);
Poly* Multiple(Poly* head1, Poly* head2);

main.c

#include "main.h"

int main(void) 
{
   
	int command; 
	Poly *result, *head1=NULL, *head2=NULL;

while(1)
{
   	
	PrintTable();
	while(1)
	{
   
		command = ReceiveCommand(head1, head2);
		
		if(command==5)
		{
   goto ouk;}
		else if(command==1)
		{
    
			//if( head1!=NULL && head2!=NULL ) 
			//{
   
			//	Free(&head1,&head2);      
			//}
			ReadTwoPoly(&head1, &head2);  //之后head12存在空头结点 
			head1=head1->next; head2=head2->next;
			
			head1=SortPoly(head1);  head2=SortPoly(head2); 
			SortPartsofPoly(head1);  SortPartsofPoly(head2);		
		}	
		else if(command==2)
		{
    result = Plus(head1,head2); break;}
		else if(command==3)
		{
    result = Subtract(head1,head2); break; }
		else if(command==4)
		{
    result = Multiple(head1,head2); break;}		
	}
	PolyHe(result);
	PrintPoly(result);
}
	ouk:
	return 0;
}

other functions.c

#include "main.h"

void PrintTable()
{
   
	printf("\n"); 
	printf("  ________________________\n");
	printf(" |                        |\n");
	printf(" |  多元多项式运算控制台  |\n");
	printf(" |                        |\n");
	printf(" |  [1]输入两个多项式     |\n");
	printf(" |  [2]做加法             |\n");
	printf(" |  [3]做减法             |\n");
	printf(" |  [4]做乘法             |\n");
	printf(" |  [5]退出               |\n");
	printf(" |________________________|\n");
	
	return ;
}

int ReceiveCommand(Poly* head1, Poly* head2)
{
   
	int command;
	
	repeat: 
	scanf("%d", &command);
	if( command!=1 && head1==NULL && head2==NULL && command!=5 )//未输入1 且 还未输入多项式 
	{
   
		printf("请先按[1]输入两个多项式\n");
		goto repeat;
	}
	else
	{
   return command;}
}

int Count(Poly* L)
{
   
	int cnt=0;
	Poly* p=L;
	while(p!=NULL)
	{
    
		p=p->next;
		cnt++;
	}
	return cnt;
}

int Count2(Part* L)
{
   
	int cnt=0;
	Part* p=L;
	while(p!=NULL)
	{
    
		p=p->next;
		cnt++;
	}
	return cnt;
}

void Free(Poly** addhead1, Poly** addhead2)
{
   
	int i,j,cnt;
	Poly* head, *p;
	for(i=1; i<=2; i++)
	{
   
		if(i==1) {
    head=*addhead1; p=head;}
		if(i==2) {
    head=*addhead2; p=head;}
		cnt = Count(head);
		for(j=0; j<=cnt; j++,p=p->next)
		{
    free(p); } 
	}
	*addhead1 = *addhead2 = NULL;
	return ;
}

int JudgeFirstJian(char* a)
{
   
	if(*a=='-'){
   return 1;}
	else return 0;
}

int IsSign(char q)
{
   
	if(q=='+'||q=='-'||q=='\0'){
   return 1;}
	else return 0;
} 

int IsLetter(char q)
{
   
	if(q>='a'&&q<='z'||q>='A'&&q<='Z'){
   return 1;}
	else return 0;
}

void PastePart(Poly* newpoly, Poly*
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元多项式表示为 a_n * x^n + a_(n-1) * x^(n-1) + ... + a_1 * x + a_0,其中 a_i 是系数,x 是变量,n 是指数。 要实现一元多项式链表表示,我们可以定义一个结构体来表示多项式的每一项,包括系数和指数,并使用指针来连接每一项。示例代码如下: ``` #include <stdio.h> #include <stdlib.h> // 定义多项式项的结构体 typedef struct Node { int coefficient; // 系数 int exponent; // 指数 struct Node* next; // 下一项 } Node; // 创建多项式 Node* createPolynomial() { Node* head = (Node*)malloc(sizeof(Node)); // 创建头结点 head->next = NULL; Node* current = head; int coefficient, exponent; printf("请输入项数: "); int count; scanf("%d", &count); for (int i = 0; i < count; i++) { printf("请输入第%d项的系数和指数: ", i + 1); scanf("%d %d", &coefficient, &exponent); Node* newNode = (Node*)malloc(sizeof(Node)); newNode->coefficient = coefficient; newNode->exponent = exponent; newNode->next = NULL; current->next = newNode; current = newNode; } return head; } // 输出多项式 void printPolynomial(Node* polynomial) { Node* current = polynomial->next; while (current != NULL) { printf("%dx^%d", current->coefficient, current->exponent); if (current->next != NULL) { printf(" + "); } current = current->next; } printf("\n"); } int main() { Node* polynomial = createPolynomial(); printf("多项式为: "); printPolynomial(polynomial); return 0; } ``` 通过上述代码,我们可以创建一个包含多项式链表,并打印出其内容。你可以根据需要对多项式链表进行其他基本操作的实现,如插入、删除、合并等。 此外,你还可以在多项式链表的基础上实现一个简单的多项式计算器。你可以根据用户输入的操作,对多项式进行加法、减法、乘法等运算,最后输出结果。在计算过程中,你需要实现将多项式链表转换为多项式数组的功能,并根据相应的运算规则进行计算。这样,你就可以通过简单的计算器来计算和操作一元多项式了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值