运行结果总是出现项缺失
#include<stdio.h>
#include<malloc.h>//修订思路:1、在原代码上修订。2、改用for循环取代while循环
typedef struct poly {
int factor;//系数
int exp;//幂指数
int use;//备用标志
struct poly *next;
}POLY;
void show_1(int *F1,int *F2,int n);
void create(POLY *F1,POLY *F2);
void show(POLY *F);
void clear(POLY *F);
int count(POLY *F);
//测试代码段:
void sum(POLY *F1, POLY *F2) {
int a,b;
a=count(F1);
b=count(F2);
POLY *P;
POLY *S1=F1;
POLY *S2=F2;
int factor_1[100]={};
int exp_1[100]={};
int factor_2[100]={};
int exp_2[100]={};
int factor[100]={};
int exp[100]={};
int i1,i2=0;
int i3,i4=0;
int i=0;
for(i1=0;i1<=a;i1++){
factor_1[i1]=S1->factor;
exp_1[i1]=S1->exp;
S1=S1->next;
}
for(i2=0;i2<=b;i2++){
factor_2[i2]=S2->factor;
exp_2[i2]=S2->exp;
S2=S2->next;
}
int n=0;
for(i3=0;i3<a;i3++){
n=0;
for(i4=0;i4<b;i4++){
if(exp_1[i3]==exp_2[i4]){
factor_2[i4]=factor_2[i4]+factor_1[i3];
}else{
n=n+1;
}
if(n==(b-1)){
exp_2[(i3+i4+1)]=exp_1[i3];//不确定要不要加 1
factor_2[(i3+i4+1)]=factor_1[i3];
}
}
}
show_1(factor_2,exp_2,(a+b+1));
}
//测试代码段:
int main() {
POLY p1 = {};
POLY p2 = {};
POLY *P1 = &p1;
POLY *P2 = &p2;
first:int n = 10;
printf("\n***************数据结构综合性实验******************");
printf("\n*******一、多项式的加法、减法、乘法运算**********");
printf("\n******* 1.多项式创建 **********");
printf("\n******* 2.多项式相加 **********");
printf("\n******* 3.多项式相减 **********");
printf("\n******* 4.多项式相乘 **********");
printf("\n******* 5.清空多项式 **********");
printf("\n******* 0.退出系统 **********");
printf("\n******* 请选择(0—5) **********");
printf("\n*************************************************\n");
printf("*请选择(0-5):\n");
scanf("%d", &n);
getchar();
switch (n)
{
case 1: create(P1, P2); goto first;
case 2: sum(P1, P2); goto first;
// case 3: subduction(P1, P2); goto first;
// case 4: multiplication(P1, P2); goto first;
case 5: clear(P1); clear(P2); goto first;
case 0: goto last;
default:
break;
}
last:return 0;
}
void create(POLY *F1, POLY *F2) {
POLY *P;
POLY *S = F1;
int n = 0;
int m = 0;
int i1, i2 = 0; //循环变量
printf("请输入第一个多项式项数\n");
scanf("%d", &n);
getchar();
printf("请依次输入%d对系数和指数\n",n);
for (i1 = 0; i1 < n; i1++) {
scanf("%d", &S->factor);
getchar();
scanf("%d", &S->exp);
getchar();
if (i1 == (n - 1)) {
S->next = NULL;
}
else {
P = (POLY*)malloc(sizeof(POLY));
S->next = P;
S = P;
} //最后一项为NULL
}
S = F2;
printf("请输入第二个多项式项数\n");
scanf("%d", &m);
getchar();
printf("请依次输入%d对系数和指数\n",m);
for (i2 = 0; i2 < m; i2++) {
scanf("%d", &S->factor);
getchar();
scanf("%d", &S->exp);
getchar();
if (i2 == (m - 1)) {
S->next = NULL;
}
else {
P = (POLY*)malloc(sizeof(POLY));
S->next = P;
S = P;
} //最后一项为NULL
}
show(F1);
show(F2);
}
void clear(POLY *F) {
POLY *S;
POLY *P;
POLY *Q;
S = F;
while (S != NULL)
{
P = S;
S = S->next;
free(P);
}
}
void show(POLY *F) {
POLY *S = F;
printf("\n 方程式为 \n");
int n=0;
while (S != NULL) {
if(n==0){
printf("%d*x^%d", S->factor, S->exp);}
if(S->factor>0&&n!=0){
printf("+%d*x^%d", S->factor, S->exp);}
if(S->factor<0){
printf("-%d*x^%d", S->factor, S->exp);}
S = S->next;
n=n+1;
}
printf("\n");
}
int count(POLY *F) {
POLY *S = F;
int p=0;
while (S->next!=NULL) {
p = p + 1;
S = S->next;
}
return p;
}
void show_1(int *F1,int *F2,int n){
int P=*F1;
int S=*F2;
int i=0;
printf("多项式为:");
for(i=0;i<n;i++){
if(i==0){
printf("%d*x^%d",*(F1+i),*(F2+i));
}
else{
printf(" + %d*x^%d",*(F1+i),*(F2+i));
}
}
printf("\n");
}
#include<stdio.h>
#include<malloc.h>//1、在原代码上修订。2、改用for循环取代while循环
typedef struct poly {
int factor;//系数
int exp;//幂指数
int use;//备用标志
struct poly *next;
}POLY;
void create(POLY *F1,POLY *F2);
void show(POLY *F);
void clear(POLY *F);
int count(POLY *F);
//测试代码段:
void sum(POLY *F1, POLY *F2, POLY *Q) {
int i1, i2 = 0; //循环变量
POLY *S1 = F1;
POLY *S2 = F2;
POLY *P1;
POLY *P2;
POLY *S;
POLY *P;
S = Q; //结果变量
while (S1 != NULL) //!=(NULL=0)
{ printf("**1_1**\n");//
S2 = F2;
while (S2 != NULL) {
printf("***1_2***\n");//
if (S1->exp == S2->exp) {
printf("****1_3****(while-if循环)\n");//
S->factor = S1->factor + S2->factor;
S->exp = S1->exp;
S1->use = 1;
S2->use = 1;
P = (POLY*)malloc(sizeof(POLY));
S->next = P;
S = P;
}
S2 = S2->next;
}
S1 = S1->next;
}
S1 = F1; //复位
S2 = F2;
while (S1 != NULL) {
printf("*****2_1*****\n");//
if (S1->use == 0) {
printf("******2_2******\n");//
S->factor = S1->factor;
S->exp = S1->exp;
S1->use = 1;
P = (POLY*)malloc(sizeof(POLY));//最后一项不见了,问题应该在这
S->next = P;
S = P;
}
S1 = S1->next;
}
while (S2 != NULL) {
printf("*******3_1*******\n");//
if (S2->use == 0) {
printf("********3_2********\n");//
S->factor = S2->factor;
S->exp = S2->exp;
S2->use = 1;
P = (POLY*)malloc(sizeof(POLY));
S->next = P;
S = P;
}
S2 = S2->next;
}
S=NULL;
show(Q);
clear(Q);
}
//测试代码段:
int main() {
POLY p1 = {};
POLY p2 = {};
POLY l = {};//
POLY *P1 = &p1;
POLY *P2 = &p2;
POLY *L = &l;//
first:int n = 10;
printf("\n***************数据结构综合性实验******************");
printf("\n*******一、多项式的加法、减法、乘法运算**********");
printf("\n******* 1.多项式创建 **********");
printf("\n******* 2.多项式相加 **********");
printf("\n******* 3.多项式相减 **********");
printf("\n******* 4.多项式相乘 **********");
printf("\n******* 5.清空多项式 **********");
printf("\n******* 0.退出系统 **********");
printf("\n******* 请选择(0—5) **********");
printf("\n*************************************************\n");
printf("*请选择(0-5):\n");
scanf("%d", &n);
getchar();
switch (n)
{
case 1: create(P1, P2); goto first;
case 2: sum(P1, P2, L); goto first;
// case 3: subduction(P1, P2); goto first;
// case 4: multiplication(P1, P2); goto first;
case 5: clear(P1); clear(P2); goto first;
case 0: goto last;
default:
break;
}
last:return 0;
}
void create(POLY *F1, POLY *F2) {
POLY *P;
POLY *S = F1;
int n = 0;
int m = 0;
int i1, i2 = 0; //循环变量
printf("请输入第一个多项式项数\n");
scanf("%d", &n);
getchar();
printf("请依次输入%d对系数和指数\n",n);
for (i1 = 0; i1 < n; i1++) {
scanf("%d", &S->factor);
getchar();
scanf("%d", &S->exp);
getchar();
if (i1 == (n - 1)) {
S->next = NULL;
}
else {
P = (POLY*)malloc(sizeof(POLY));
S->next = P;
S = P;
} //最后一项为NULL
}
S = F2;
printf("请输入第二个多项式项数\n");
scanf("%d", &m);
getchar();
printf("请依次输入%d对系数和指数\n",m);
for (i2 = 0; i2 < m; i2++) {
scanf("%d", &S->factor);
getchar();
scanf("%d", &S->exp);
getchar();
if (i2 == (m - 1)) {
S->next = NULL;
}
else {
P = (POLY*)malloc(sizeof(POLY));
S->next = P;
S = P;
} //最后一项为NULL
}
show(F1);
show(F2);
}
void clear(POLY *F) {
POLY *S;
POLY *P;
POLY *Q;
S = F;
while (S != NULL)
{
P = S;
S = S->next;
free(P);
}
}
void show(POLY *F) {
POLY *S = F;
printf("\n 方程式为 \n");
int n=0;
while (S != NULL) {
if(n==0){
printf("%d*x^%d", S->factor, S->exp);}
if(S->factor>0&&n!=0){
printf("+%d*x^%d", S->factor, S->exp);}
if(S->factor<0){
printf("-%d*x^%d", S->factor, S->exp);}
S = S->next;
n=n+1;
}
printf("\n");
}
int count(POLY *F) {
POLY *S = F;
int p=0;
while (S->next!=NULL) {
p = p + 1;
S = S->next;
}
return p;
}//实际上并未用到
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。