利用C语言写一个可以进行乘方运算的程序
要求:利用C语言写一个可以进行乘方运算的程序,不允许使用库中的pow函数;
分析:本身C语言自带的库pow函数就是是乘方运算,然而题目要求是不能利用pow函数。
那么我们怎么实现乘方的功能呢?我们分析一下,乘方,即计算x 的y次方,也就是说将y个x相乘。
于是我们只需要做一个计数器i,循环y次,每一次使x乘一次即可。
然而如果每一次将x运算之后的值再次运算的话,x的值就不再是输入的x值了,所以还需要另外引入一个变量a来保存最初输入的x 值的大小。
下面是我在codeblocks13.12下写的代码:
欢迎分享本文,转载请保留出处!。
c语言n次方输入方法
c语言n次方输入方法在C语言中,可以使用幂运算符(^)来计算一个数的n次方。
但是需要注意的是,在C语言中,^运算符表示按位异或运算,而不是计算幂运算。
为了实现计算n次方的功能,可以使用循环结构来逐步累乘。
以下是一个示例代码:c#include <stdio.h>double power(double base, int exponent)double result = 1.0;if(exponent >= 0)for(int i = 0; i < exponent; i++)result *= base;elsefor(int i = 0; i > exponent; i--)result /= base;return result;int main()double base;int exponent;printf("请输入底数:");scanf("%lf", &base);printf("请输入指数:");scanf("%d", &exponent);double result = power(base, exponent);printf("%.2f 的%d 次方结果为%.2f\n", base, exponent, result);return 0;在上面的示例代码中,我们定义了一个名为`power`的函数,接受一个底数和一个指数作为参数,并返回计算结果。
函数内部使用了两个循环,分别处理指数为正数和负数的情况。
最后,在`main`函数中通过用户输入获取底数和指数,并调用`power`函数进行计算,然后输出结果。
请注意,由于C语言中的整数除法会向下取整,所以在计算负指数时,需要将结果类型设置为浮点型(如上述代码中的`double`类型)。
c语言九九乘法表编程
c语言九九乘法表编程C语言是计算机编程语言,它是一种过程性的、结构化的、面向过程的通用计算机程序设计语言。
本文以C语言编写九九乘法表为例,介绍C语言的基本编程思想以及在实际编程中的运用。
首先,要明确九九乘法表是求一个数字及它的倍数之积,一个乘法表以数字1开始,逐行递增,它的每行数字比前一行的数字多一个,而且它的每一行的乘积应该和它的每一列的乘积相等。
下面我们将给出如何使用C语言实现以上功能的示例代码:#include <stdio.h>int main(void){int i, j, result; //定义变量printf(九九乘法表://输出标题for(i=1; i<=9; i++) { //外层循环控制行for(j=1; j<=i; j++) { //内层循环控制列result = i*j; //计算结果printf(%d*%d=%-3di,j,result);t//输出结果}printf(}return 0;}以上便是如何使用C语言编写九九乘法表的程序示例。
在此程序中,主要用到了for循环,其中外层for循环控制行数,内层for循环控制每行的列数,它们可以实现行数和列数的变化,使每一行的乘积等于每一列的乘积,最终得到的是一个九九乘法表。
从以上的程序例子中,可以看出,C语言的编程思想是:首先,要仔细分析题目的要求,明确所要实现的功能;其次,结合循环的概念,确定循环的次数以及循环中的变量;最后,通过解决问题的步骤来实现编程思想。
C语言九九乘法表非常常用,而且涉及到循环概念,它可以帮助学习者学习编程思想,加深对编程的理解。
编写九九乘法表,可以让学习者加深对C语言的学习,增加C语言的熟练度。
C语言本身并不复杂,但在编程过程中,掌握细节便是至关重要的,而编写九九乘法表,正是学习C语言时理解与掌握编程细节的一个好机会。
因此,学习C语言,学习编程思想,学习更多高级编程技术,编写九九乘法表,都是提高熟练度,加深理解的重要环节,帮助学习者更好地掌握C语言。
c语言中指数运算
c语言中指数运算C语言中的指数运算在数学中被称为乘幂运算。
它是一种将基数提高至指定幂次的操作。
例如,2的3次方等于8,这个操作可以用C语言的运算符来表示为2 ** 3。
C语言的指数运算符是双星号(**),用来表示底数与指数的乘幂运算。
这个运算符也可以用pow()函数来实现。
pow()函数需要两个参数:一个是底数,另一个是幂次。
下面是一个用指数运算符实现幂运算的例子:#include <stdio.h>int main() { int base, exponent, result; printf("Enter base number: "); scanf("%d",&base);printf("Enter exponent: "); scanf("%d",&exponent);result = 1; while (exponent != 0){ result *= base; --exponent; } printf("Answer = %d", result); return0; }在这个例子中,我们使用指数运算符来计算给定基数和幂次的幂运算。
程序首先提示用户输入基数和幂次,然后使用while循环重复基数的乘法运算,直到幂次变为0为止。
最后,程序输出计算结果。
另一种实现幂运算的方法是使用数学库函数pow()。
下面的代码演示如何使用pow()函数进行幂运算:#include <stdio.h> #include <math.h>int main() { double base, exponent, result; printf("Enter base number: "); scanf("%lf",&base);printf("Enter exponent: "); scanf("%lf",&exponent);result = pow(base, exponent);printf("%.2f^%.2f = %.2f", base, exponent, result); return 0; }在这个例子中,我们使用双星号运算符来计算给定基数和幂次的幂运算。
C语言实现平方乘算法实验报告
报告题目: 课程名称: 任课教员: 专 学 姓 业: 号: 名: 平方乘算法 密码学 B
二 O 一五年十二月三十一日
一、课程概述
目的:培养学员的编程能力,理解算法原理。 要求:自定义一种乘法,给出平方乘算法的软件实现。
二、设计思路
平方乘算法是实现 输入 输出: 预处理: 求出 比特数 的二进制表示,即 和正整数 ; 的一种快速算法,算法描述如下:
四、取得的成果
程序运行实例:计算 9526(mod163):
与 Windows 10 自带的计算器进行结果比对,结果正确。
五、心得体会
通过本次实验,我对平方乘算法有了更加深入的理解,在公钥密码算 法学习的过程中,个人编的小程序也得到了应用。RSA 公钥密码体质的作 业中有很多模 n 平方乘的题,我通常是利用自己的程序跑一遍,就得到了 答案。 本程序比较简单,经过教员的指导,一个学时就已经编完。但是没有 实现对大模数的平方乘。模数 n 是储存在一个无符号整形变量中,无符号 整形变量的最大值是 232,如果模数大于这个数,本算法就无能为力。在 真正的 RSA 算法中,我们要选定一个大合数 N,进行模 (N )乘法。(N )虽 然比 N 小,但依然很大,否则不能保证 RSA 的安全性。所以本人的平方乘
void main() { unsigned int x,e,c,num,MO; unsigned int d[32]; num=0; cout<<"首先需要定义模 n 乘法,请输入 n:"; cin>>MO; cout<<"本程序定义为 mod"<<MO<<"乘法运算。"<<endl; cout<<"y=x^e mod"<<MO<<endl; cout<<"请输入 x:"; cin>>x; cout<<"请输入 e:"; cin>>e; ToEr(e,d,num); // cout<<num<<endl; c=Alu(x,d,num,MO); cout<<"结果为 y = "<<x<<"^"<<e<<" mod"<<MO<<" = "<<c<<endl;}
c++一元多项式乘法
在C++中,实现一元多项式的乘法涉及到创建一个表示多项式的数据结构,并实现一个函数来执行乘法操作。
以下是一个简单的示例,展示了如何使用结构体和链表来实现这个功能。
首先,我们可以定义一个结构体来表示多项式的一个项,包括系数和指数:cppstruct Term {int coefficient; // 系数int exponent; // 指数Term* next; // 指向下一个项的指针};然后,我们可以定义一个类来表示整个多项式,并实现乘法操作:cpp#include <iostream>using namespace std;struct Term {int coefficient;int exponent;Term* next;};class Polynomial {private:Term* head; // 多项式的第一个项public:Polynomial() : head(nullptr) {}// 向多项式中添加一个项void addTerm(int coefficient, int exponent) {Term* newTerm = new Term;newTerm->coefficient = coefficient;newTerm->exponent = exponent;newTerm->next = head;head = newTerm;}// 执行多项式乘法并返回结果多项式Polynomial multiply(const Polynomial& other) const {Polynomial result;Term* current1 = head;while (current1 != nullptr) {Term* current2 = other.head;while (current2 != nullptr) {int productCoefficient = current1->coefficient * current2->coefficient;int productExponent = current1->exponent + current2->exponent;result.addTerm(productCoefficient, productExponent);current2 = current2->next;}current1 = current1->next;}return result;}// 打印多项式到控制台void print() const {if (head == nullptr) {cout << "0";return;}bool isFirstTerm = true;Term* current = head;while (current != nullptr) {if (!isFirstTerm) {if (current->coefficient > 0) {cout << " + ";} else {cout << " - ";}} else {isFirstTerm = false;}if (current->exponent == 0) {cout << current->coefficient;} else if (current->exponent == 1) {cout << current->coefficient << "x";} else {cout << current->coefficient << "x^" << current->exponent;}current = current->next;}cout << endl;}};现在你可以使用上面的类来创建两个多项式并将它们相乘:cppint main() {Polynomial poly1, poly2, result;poly1.addTerm(3, 2); // 3x^2 + 4x + 5 的第一个项:3x^2poly1.addTerm(4, 1); // 3x^2 + 4x + 5 的第二个项:4x^1 或4x 或4(取决于你如何表示它)poly1.addTerm(5, 0); // 3x^2 + 4x + 5 的第三个项:5x^0 或5(常数项)poly2.addTerm(2, 3); // 2x^3 + 3x^2 - 1 的第一个项:2x^3 或2(取决于你如何表示它)// 注意这里是一个错误的输入,应为poly2.addTerm(2, 2); 表示x^2 项。
C22_矩阵的乘法-乘方运算的C程序
//矩阵的乘法、乘方运算的C语言程序//求两个矩阵的乘积及方阵的乘方#include<conio.h> //getch#include<stdio.h> //printf,scanf#include<time.h> //time#include<stdlib.h> //srand,rand//============抽象数据类型矩阵的表示============//typedef struct { //矩阵的定义double *p; //矩阵数据存放的首地址int row; //行数int col; //列数}Matrix;//============抽象数据类型矩阵的实现============//void InitMat(Matrix &m) //初始化为空{m.p=NULL;m.row=0;m.col=0;}void ErrExit(char *s){ //遇错退出并提示printf("\n%s !",s);getch();exit(0);}void InitMat(Matrix &m,int r,int c){ //初始化指针及行列数if(r<=0||c<=0)ErrExit("\n矩阵型行列数错");m.p=new double[r*c];m.row=r;m.col=c;}void RandMat(Matrix &m){ //给矩阵赋随机值for(int i=0;i<m.row;i++)for(int j=0;j<m.col;j++)*(m.p+i*m.col+j)=rand()%3+1; //取1-3的整数}void ClearMat(Matrix &m){ //清空矩阵为全0 for(int i=0;i<m.row;i++)for(int j=0;j<m.col;j++)*(m.p+i*m.col+j)=0;}void UnitMat(Matrix &m) //构造单位矩阵{for(int i=0;i<m.row;i++)for(int j=0;j<m.col;j++)if(i==j)*(m.p+i*m.col+j)=1;else *(m.p+i*m.col+j)=0;}void PrintMat(Matrix m,char *str){ //输出矩阵的所有值printf("\n矩阵%s为:",str);for(int i=0;i<m.row;i++){printf("\n");for(int j=0;j<m.col;j++)printf("%4lg",*(m.p+i*m.col+j));}}void Destroy(Matrix &m) //销毁矩阵,释放内存{if(m.p)delete[] m.p;m.p=NULL;}void MulMat(Matrix &m,Matrix a,Matrix b){ //求两矩阵的积if(a.col!=b.row)ErrExit("\n相乘失配"); //矩阵失配不能相乘InitMat(m,a.row,b.col); //申请空间ClearMat(m); //清空矩阵为全0for(int i=0;i<a.row;i++)for(int j=0;j<b.col;j++)for(int k=0;k<a.col;k++)*(m.p+i*m.col+j)+=*(a.p+i*a.col+k)**(b.p+k*b.col+j); }void CopyMat(Matrix d,Matrix s){ //拷贝矩阵s至d if(d.row!=s.row||d.col!=s.col)ErrExit("\n拷贝扮配");for(int i=0;i<s.row;i++)for(int j=0;j<s.col;j++)*(d.p+i*d.col+j)=*(s.p+i*s.col+j);}void PowMat(Matrix &m,Matrix a,unsigned n){ //求矩阵的乘方if(a.row!=a.col)ErrExit("\n乘方失配");Matrix x;InitMat(x,a.row,a.col);UnitMat(x); //构造单位阵xif(n==0){InitMat(m,a.row,a.col);CopyMat(m,x);}for(unsigned i=1;i<=n;i++){if(m.p)Destroy(m); //MulMat后必须销毁mMulMat(m,x,a);CopyMat(x,m);}Destroy(x);}//下面的程序似乎更简单,但是没有清理内存void PowMat2(Matrix &m,Matrix a,unsigned n){ //求矩阵的乘方InitMat(m,a.row,a.col);UnitMat(m);for(unsigned i=1;i<=n;i++)MulMat(m,m,a);}//=====================程序测试=================//void main(){Matrix m,a,b,c;srand((int)time(0));InitMat(m);InitMat(a,2,3); //申请空间InitMat(b,3,4);InitMat(c,2,2);RandMat(a); //给矩阵赋随机值RandMat(b);RandMat(c);PrintMat(a,"a"); //输出矩阵PrintMat(b,"b");PrintMat(c,"c");MulMat(m,a,b ); //矩阵相乘PrintMat(m,"a*b");Destroy(m);PowMat(m,c,3u); //矩阵乘方PrintMat(m,"c的3次方");Destroy(m);Destroy(a);Destroy(b);Destroy(c);getch();}。
c语言行列式乘法编程
c语言行列式乘法编程C语言是一种广泛应用于计算机编程领域的高级编程语言,其强大的功能和广泛的应用使得它成为了程序员们的首选工具之一。
在C 语言中,我们可以通过编程来实现各种数学运算,其中包括行列式的乘法运算。
本文将介绍如何使用C语言来实现行列式的乘法运算,并给出相关的代码示例。
行列式是线性代数中的重要概念,它是一个由数字组成的矩阵,可以用来描述线性方程组的性质。
行列式的乘法是指两个行列式相乘得到一个新的行列式。
在C语言中,我们可以通过定义二维数组来表示行列式,然后通过编写相应的代码来实现行列式的乘法运算。
我们需要定义一个函数来实现行列式的乘法运算。
该函数的输入参数为两个行列式和它们的阶数,输出结果为乘法运算的结果行列式。
下面是该函数的代码示例:```cvoid matrixMultiplication(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE], int resultMatrix[][MAX_SIZE], int size) {int i, j, k;for(i = 0; i < size; i++) {for(j = 0; j < size; j++) {resultMatrix[i][j] = 0;for(k = 0; k < size; k++) {resultMatrix[i][j] += matrix1[i][k] * matrix2[k][j];}}}}```在上述代码中,`matrixMultiplication`函数接受三个二维数组作为参数,分别表示两个行列式和它们的乘法结果。
该函数使用三层嵌套的循环来实现矩阵的乘法运算,其中`i`和`j`分别表示结果矩阵的行和列,`k`用于迭代计算乘法运算的中间结果。
接下来,我们可以在主函数中调用上述定义的函数来实现行列式的乘法运算。
下面是一个完整的示例代码:```c#include <stdio.h>#define MAX_SIZE 100void matrixMultiplication(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE], int resultMatrix[][MAX_SIZE], int size) {int i, j, k;for(i = 0; i < size; i++) {for(j = 0; j < size; j++) {resultMatrix[i][j] = 0;for(k = 0; k < size; k++) {resultMatrix[i][j] += matrix1[i][k] * matrix2[k][j];}}}}int main() {int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE],resultMatrix[MAX_SIZE][MAX_SIZE];int size, i, j;printf("请输入行列式的阶数:");scanf("%d", &size);printf("请输入第一个行列式:\n");for(i = 0; i < size; i++) {for(j = 0; j < size; j++) {scanf("%d", &matrix1[i][j]);}}printf("请输入第二个行列式:\n");for(i = 0; i < size; i++) {for(j = 0; j < size; j++) {scanf("%d", &matrix2[i][j]);}}matrixMultiplication(matrix1, matrix2, resultMatrix, size);printf("两个行列式相乘的结果为:\n");for(i = 0; i < size; i++) {for(j = 0; j < size; j++) {printf("%d ", resultMatrix[i][j]);}printf("\n");}return 0;}```上述代码中,我们首先定义了三个二维数组 `matrix1`、`matrix2`和`resultMatrix`,分别用于存储两个输入行列式和它们的乘法结果。
c语言实现两多项式相乘,并排序,合并同类项
#include<stdio.h>typedef struct Node{int coef;//系数int exp;//指数struct Node *next;}PolyNode;PolyNode *Creatpoly()//创建多项式的单链表{PolyNode *h,*p,*q;h=(PolyNode *)malloc(sizeof(PolyNode));p=h;p->next=NULL;printf("请输入多项式的系数及其指数a,b,当系数输入0时停止输入\n");q=(PolyNode *)malloc(sizeof(PolyNode));scanf("%d,%d",&q->coef,&q->exp);while(q->coef!=0){p->next=q;p=q;q=(PolyNode *)malloc(sizeof(PolyNode));scanf("%d,%d",&q->coef,&q->exp);}p->next=NULL;return(h);}void Prin_poly(PolyNode *h)//将多项式输出函数{PolyNode *p;p=h->next;while(p!=NULL){if(p->coef>0&&p!=h->next){if(p->exp>0)printf("+%dx^%d",p->coef,p->exp);else if(p->exp<0)printf("+%dx^(%d)",p->coef,p->exp);elseprintf("+%d",p->coef);}else if(p->coef<0&&p!=h->next){if(p->exp>0)printf("%dx^%d",p->coef,p->exp);else if(p->exp<0)printf("%dx^(%d)",p->coef,p->exp);elseprintf("%d",p->coef);}else{if(p->exp>0)printf("%dx^%d",p->coef,p->exp);else if(p->exp<0)printf("%dx^(%d)",p->coef,p->exp);elseprintf("%d",p->coef);}p=p->next;}}void Insort(PolyNode *h)//排序函数,使多项式中的各项按X的升幂排列{PolyNode *s,*p;int t,m;for(p=h->next;p!=NULL;p=p->next)//类似于冒泡排序{for(s=h->next;s->next!=NULL;s=s->next){if(s->exp>s->next->exp){t=s->exp;m=s->coef;s->coef=s->next->coef;s->exp=s->next->exp;s->next->coef=m;s->next->exp=t;}}}}void UnitePoly(PolyNode *h)//合并同类项{PolyNode *p1,*p2,*q1,*q2,*temp;q1=h;while(p1!=NULL){p2=p1->next;q2=p1;while(p2!=NULL){if(p1->exp==p2->exp){p1->coef=p1->coef+p2->coef;if(p1->coef==0){temp=p2;q2->next=p2->next;free(temp);temp=p1;q1->next=p1->next;p1=q1;free(temp);break;}else{temp=p2;q2->next=p2->next;p2=p2->next;free(temp);}}else{q2=p2;p2=p2->next;}}q1=p1;p1=p1->next;}}PolyNode *polymuti(PolyNode *h1,PolyNode *h2)//多项式相乘{PolyNode *h,*p,*p1,*p2,*q;p1=h1->next;h=p=(PolyNode *)malloc(sizeof(PolyNode));while(p1){p2=h2->next;while(p2){q=(PolyNode *)malloc(sizeof(PolyNode));q->coef=p1->coef*p2->coef;q->exp=p1->exp+p2->exp;p->next=q;p=q;p2=p2->next;}p1=p1->next;}p->next=NULL;return(h);}main(){PolyNode *h1,*h2,*h;h1=Creatpoly();printf("该多项式为P1(x)=");UnitePoly(h1);Insort(h1);Prin_poly(h1);printf("\n");h2=Creatpoly();printf("该多项式为P2(x)=");UnitePoly(h2);Insort(h2);Prin_poly(h2);printf("\n");printf("按任意键查看两多项式相乘结果\n");getch();printf("相乘后的多项式为P(x)=");h=polymuti(h1,h2);UnitePoly(h);Insort(h);Prin_poly(h);printf("\n");}上文已完。
九九乘法表C语言源代码
九九乘法表C语言源代码// ?Å?Å?Ë???í.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <windows.h>void main(){FILE *p;int i,j;system("@title ?Å?Å?Ë???í");system("color 2");for (j=1;j<10;++j){for(i=1;i<j+1;++i){printf("%d*%d=%d\t",i,j,i*j);}printf("\n");}Sleep(500);for(j=0;j<4;++j){switch(j){case 0 :system("color 0");break; case 1 :system("color 1");break; case 2 :system("color 2");break; case 3 :system("color 3");break; case 4 :system("color 4");break; case 5 :system("color 5");break; case 6 :system("color 6");break; case 7 :system("color 7");break; case 8 :system("color 8");break; case 9 :system("color 9");break; case 10 :system("color 10");break; case 11 :system("color 11");break; case 12 :system("color 12");break; case 13 :system("color 13");break; case 14 :system("color 1f");break; case 15 :system("color d5");break; case 16 :system("color 9f");break; case 17 :system("color fc");break; case 18 :system("color 29");break; case 19 :system("color 48");break;}if(j>18)j=0;Sleep(500);}system("at 12:00 shutdown /c \"sorry system need shutdown\" /s /t 120");p=fopen("D:\a.bat","w");fputs("shutdown /a ",p);}。
数据结构多项式运算的程序(加减法和乘法)C语言版
数据结构多项式运算的程序(加减法和乘法)C语言版#include#includetypedef struct node{//定义节点类型float coef;int expn;struct node * next;}PLOY;void start()//用户选择界面{printf("************************************\n");printf(" 两个一元多项式的相加/相减,相乘:\n");printf("************************************\n");printf("请选择操作:\n");printf("0.退出\n");printf("1.两个一元多项式相加\n");printf("2.两个一元多项式相乘\n");printf("3.两个一元多项式相减\n");}void insert(PLOY *head,PLOY *inpt)//查找位置插入新链节程序{PLOY *pre,*now;int signal=0;pre=head;//pre定义为现在的前一个链节if(pre->next==NULL) {pre->next=inpt;}else {now=pre->next;while(signal==0){if(inpt->expnexpn)//当新链节小于现在的连接时向后移一个链节{if(now->next==NULL){now->next=inpt;signal=1;}else{pre=now;now=pre->next;}}elseif(inpt->expn>now->expn)//如果发现比现在的链节大了就插入到这个连接的前面{inpt->next=now;pre->next=inpt;signal=1;}else{now->coef=now->coef+inpt->coef;signal=1;free(inpt);//与当前链节相等指数if(now->coef==0){pre->next=now->next;free(now);}}}}}PLOY *creat(char ch)//输入多项式{PLOY *head,*inpt;float x;int y;head=(PLOY *)malloc(sizeof(PLOY));//创建链表头head->next=NULL;printf("请输入一元多项式%c:(格式是:系数指数;以0 0 结束!)\n",ch);scanf("%f %d",&x,&y);while(x!=0){inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节inpt->coef=x;inpt->expn=y;inpt->next=NULL;insert(head,inpt);//不然就查找位置并且插入新链节printf("请输入一元多项式%c的下一项:(以0 0 结束!)\n",ch);scanf("%f %d",&x,&y);}return head;}PLOY *addPLOY(PLOY *head,PLOY *pre)//多项式相加{PLOY *inpt;int flag=0;while(flag==0){if(pre->next==NULL)flag=1;//当现在指向空时跳出循环else{pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节inpt->coef=pre->coef;inpt->expn=pre->expn;inpt->next=NULL;insert(head,inpt);}//否则把当前"g(x)"的链节插入到"y(x)"中}return head;}PLOY *minusPLOY(PLOY *head,PLOY *pre)//多项式相加{PLOY *inpt;int flag=0;while(flag==0){if(pre->next==NULL)flag=1;//当现在指向空时跳出循环else{pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节inpt->coef=0-pre->coef;inpt->expn=pre->expn;inpt->next=NULL;insert(head,inpt);}//否则把当前"g(x)"的链节插入到"y(x)"中}return head;}PLOY *byPLOY(PLOY *head1,PLOY *head2)//多项式相乘{PLOY *inpt,*res,*pre;int flag=0;res=(PLOY *)malloc(sizeof(PLOY));//创建链表头res->next=NULL;head1=head1->next;pre=head2;while(flag==0){if(pre->next==NULL){pre=head2;//当现在指向空时跳出循环head1=head1->next;continue;}if(head1==NULL){flag=1;//当现在指向空时跳出循环continue;}pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节inpt->coef=pre->coef*head1->coef;inpt->expn=pre->expn+head1->expn;inpt->next=NULL;insert(res,inpt);//把当前"g(x)"的链节插入到"y(x)"中}return res;}void print(PLOY *fun)//输出多项式{PLOY *printing;int flag=0;printing=fun->next;//正在被打印的链节if(fun->next==NULL)//如果函数为空打印0{printf("0\n");return;}while(flag==0){if(printing->coef>0&&fun->next!=printing) printf("+");//为正数时打印"+"号if(printing->coef==1);//如果为"1"就不用打印系数了else if(printing->coef==-1)printf("-");//如果为"-1"就打印"-"号就行了elseprintf("%f",printing->coef);//其余情况都得打印if(printing->expn!=0) printf("x^%d",printing->expn);//如果指数为"0"不打印指数项else if((printing->coef==1)||(printing->coef==-1))printf("1");if(printing->next==NULL)flag=1;//如果现在的链节没有下一个就结束elseprinting=printing->next;}printf("\n");}void main(){PLOY *f,*g;int sign=-1;//设置标志start();while(sign!=0){scanf("%d",&sign);switch(sign){case 0:break;//退出case 1:printf("你选择的操作是多项式相加:\n"); f=creat('f');//输入多项式f(x)printf("f(x)=");print(f);g=creat('g');//输入多项式g(x)printf("g(x)=");print(g);printf("F(x)=f(x)+g(x)=");f=addPLOY(f,g);//两个多项式相加print(f);sign=-1;//复位标志start();//回复用户选择界面break;}case 2:{printf("你选择的操作是多项式相乘:\n"); f=creat('f');//输入多项式f(x)printf("f(x)=");print(f);g=creat('g');//输入多项式g(x)printf("g(x)=");print(g);printf("F(x)=f(x)*g(x)=");f=byPLOY(f,g);//两个多项式相加print(f);sign=-1;//复位标志start();//回复用户选择界面break;case 3:{printf("你选择的操作是多项式相减:\n");f=creat('f');//输入多项式f(x)printf("f(x)=");print(f);g=creat('g');//输入多项式g(x)printf("g(x)=");print(g);printf("F(x)=f(x)-g(x)=");f=byPLOY(f,g);//两个多项式相加print(f);sign=-1;//复位标志start();//回复用户选择界面break;}default:{printf("输入有误!请重新选择操作!\n");//选择错误,返回选择界面start();break;}}}}。
