?? addandsub.cpp
字號:
#include<stdio.h> /*該文件包含printf()、scanf()等文件*/
typedef struct
{
int key; /*多項式的項次數*/
signed int num; /*多項式的項系數*/
}exp; /*多項式的項的存儲結構*/
/*-------------------多項式的輸入函數-------------------------------*/
void cins(exp a[])
/*由多項式指數的降冪建立多項式*/
{
int i,n;
printf("-------------------------\n最高次項的次數:");
scanf("%d",&a[0].key); /*輸入多項式最高次項的系數*/
printf("-------------------------\n");
n=a[0].key;
for(i=0;i<=n;i++) /*輸入多項式每一項的系數*/
{
a[i].key=n-i; /*項次數賦值*/
printf("%d次項系數: ",n-i);
scanf("%d",&a[i].num); /*項系數賦值*/
}
printf("\n");
}
/*-------------------多項式的輸出函數-------------------------------*/
void couts(exp a[])
/*由多項式指數的降冪輸出多項式a[]的表達式*/
{
int i,b=-1; /*標志位b初始值為-1,用于判斷結果是否為0*/
for(i=0;i<=a[0].key;i++)
{
if(a[i].num==0) continue; /*系數為0的項不輸出*/
if(i!=0&&a[i].num>0) printf("+"); /*第一項后,系數為正,則輸出加號*/
if(a[i].key>=2) printf("%d*X^%d",a[i].num,a[i].key); /*系數輸出*/
else
if(a[i].key==1) printf("%d*X",a[i].num);
else printf("%d",a[i].num);
b=1; /*置標志位為1*/
}
if(b==-1) printf("%d",0); /*若各項系數均為0,則最后輸出0*/
printf("\n");
}
/*-------------------多項式的加法函數-------------------------------*/
void adds(exp a[],exp b[],exp c[])
/*多項式a和b相加,和存放在c中*/
{
int i,m,n; /*m存放二者最高次數較小的次數,n存放較大的次數*/
exp A[100],B[100]; /*A存放最高次數較大的多項式,B存放較小的多項式*/
if(a[0].key==b[0].key) /*a、b次數相同時*/
{
for(i=0;i<=a[0].key;i++)
{
c[i].key=a[i].key; /*c各項系數為指數相同的各項系數之和*/
c[i].num=a[i].num+b[i].num;
}
return;
}
if(a[0].key>b[0].key) /*a的最高次數大于b時*/
{
m=b[0].key;n=a[0].key;
for(i=0;i<=n;i++) /*A=a*/
A[i]=a[i];
for(i=0;i<=m;i++) /*B=b*/
B[i]=b[i];
}
else /*b的最高次數大于a時*/
{
n=b[0].key;m=a[0].key;
for(i=0;i<=m;i++) /*B=a*/
B[i]=a[i];
for(i=0;i<=n;i++) /*A=b*/
A[i]=b[i];
}
for(i=0;i<n-m;i++) /*c的前(n-m)項為A的前(n-m)項*/
{
c[i].key=A[i].key;
c[i].num=A[i].num;
}
for(i=0;i<=m;i++) /*c的后m項為A、B之和*/
{
c[n-m+i].key=B[i].key;
c[n-m+i].num=A[n-m+i].num+B[i].num;
}
}
/*-------------------多項式的減法函數-------------------------------*/
void subs(exp a[],exp b[],exp c[])
/*多項式a和b相減,差存放在c中*/
{
int i,m,n; /*m存放二者最高次數較小的次數,n存放較大的次數*/
if(a[0].key==b[0].key) /*a、b次數相同時*/
{
for(i=0;i<=a[0].key;i++) /*c各項系數為指數相同的各項系數之差*/
{
c[i].key=a[i].key;
c[i].num=a[i].num-b[i].num;
}
return;
}
if(a[0].key>b[0].key) /*a的最高次數大于b時*/
{
m=b[0].key;
n=a[0].key;
for(i=0;i<n-m;i++) /*c的前(n-m)項為a的前(n-m)項*/
{
c[i].key=a[i].key;
c[i].num=a[i].num;
}
for(i=0;i<=m;i++) /*c的后m項為a、b之差*/
{
c[n-m+i].key=b[i].key;
c[n-m+i].num=a[n-m+i].num-b[i].num;
}
}
else /*a的最高次數小于b時*/
{
n=b[0].key;
m=a[0].key;
for(i=0;i<n-m;i++) /*c的前(n-m)項系數為a的前(n-m)項系數的相反數*/
{
c[i].key=b[i].key;
c[i].num=0-b[i].num;
}
for(i=0;i<=m;i++) /*c的后m項為a、b之差*/
{
c[n-m+i].key=a[i].key;
c[n-m+i].num=a[i].num-b[n-m+i].num;
}
}
}
/*############################主函數################################*/
void main(void)
{
int i,n;
char d;
exp a[100],b[100],c[100]; /*a存放第一個多項式,b存放第二個多項式,c存放結果*/
printf("*************************\n 一元多項式的加減計算\n*************************\n\n第一個多項式輸入:\n");
cins(a); /*第一個多項式輸入*/
printf("第二個多項式輸入:\n");
cins(b); /*第二個多項式輸入*/
printf("執行的運算(+/-):");
scanf("%s",&d); /*選擇執行的運算*/
printf("=========================\n\n");
if(d=='+') adds(a,b,c); /*輸入“+”,執行加法*/
else
if(d=='-') subs(a,b,c); /*輸入“-”,執行減法*/
else /*否則,輸入錯誤*/
{
printf("輸入錯誤!\n");return;
}
printf("\n運算結果輸出:\n");
printf("-------------------------\n");
printf("各項系數:\n");
printf("-------------------------\n");
n=c[0].key;
for(i=0;i<=n;i++) /*輸出運算結果的各項系數*/
printf("%d次項系數: %d\n",n-i,c[i].num);
printf("\n-------------------------\n");
printf("表達式:\n");
printf("-------------------------\n");
printf("第一個多項式:");
couts(a); /*輸出第一個多項式的表達式*/
printf("第二個多項式:");
couts(b); /*輸出第二個多項式的表達式*/
printf("執 行 運 算:%c\n",d);
printf("運 算 結 果:");
couts(c); /*輸出運算結果的表達式*/
printf("\n繼續進行多項式計算(Y/N) ?");
scanf("%s",&d);
if(d=='Y'||d=='y')
{
printf("\n\n\n");
main();
}
else return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -