c语言程序 多项式加法,我的程序哪里有问题?

题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。

输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

我的程序
#include <stdio.h>
int main(int argc, char const *argv[])
{

int size;
int board[size][2];
int i,j;

for (i = 0; i < size; i++)
{
for (j = 0; j < 2; j++)
{
scanf("%d",&board[i][j]);
}
}
int biggestnumber = board[0][1];
for (i = 0; i < size; i++)
{
while(board[i][1]>biggestnumber)
{
biggestnumber=board[i][1];
}
}
int sum=0;
for (int l = biggestnumber; l >= 2; l--)
{
for (int i = 0; i < size; i++)
{
while(board[i][0]==l)
{
sum+=board[i][1];

}
}
printf("%dx%d\t",sum,l );
}
sum=0;
for (int i = 0; i < size; i++)
{
while(board[i][0]==1)
{sum+=board[i][1];}
printf("%dx\t",sum );
}
sum=0;
for (int i = 0; i < size; i++)
{
while(board[i][0]==0)
{sum+=board[i][1];}
printf("%d",sum );
}

return 0;
}

完全是用最简单的想法。。但是不知道哪里出错了

程序有以下几个问题:
1)size没有初始化,定义的时候应该初始化,例如:int size=6;
2) 你的代码里所有使用while的地方都应该改为if。if是条件判断,而while是循环语句,你的代码里那样用while会造成死循环。
3)计算biggestnumber的地方应该用board[i][0],而不是board[i][1]。
4)最后两个printf语句应该挪动到for循环外。
所以,修改掉以后所有问题后的代码如下:
int main(int argc, char const *argv[])

{

int size = 6; //这里有修改

int board[size][2];

int i,j;

for (i = 0; i < size; i++)

{

for (j = 0; j < 2; j++)

{

scanf("%d",&board[i][j]);

}

}

int biggestnumber = board[0][0]; //这里有修改

for (i = 0; i < size; i++)

{

if(board[i][0]>biggestnumber) //这里有修改

{

biggestnumber=board[i][0];//这里有修改

}

}

int sum=0;

for (int l = biggestnumber; l >= 2; l--)

{

for (int i = 0; i < size; i++)

{

if(board[i][0]==l) //这里有修改

{

sum+=board[i][1];

}

}

printf("%dx%d\t",sum,l );

}

sum=0;

for (int i = 0; i < size; i++)

{

if(board[i][0]==1) //这里有修改

{sum+=board[i][1];}

}

printf("%dx\t",sum );//这里有修改

sum=0;

for (int i = 0; i < size; i++)

{

if(board[i][0]==0) //这里有修改

{sum+=board[i][1];}

}

printf("%d",sum );//这里有修改

return 0;

}追问

谢谢!!
我还有个问题:如果不知道是6,是任意的个数组,但最后一行一定是0次幂。怎么改?

追答

在scanf数组的时候,去判断输入是不是0次幂。题目要求是输入两个多项式,所以应该会遇到两行0次幂。在第二次遇到0次幂时终止输入即可。
int count0=0;

for (i = 0; i =2)

{

break;

}

}

}

上面在break之前要保存一下board数组里的有效数据的大小,可以直接size=i;

说错了,是直接size=i+1;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-24

你再给我加50财富值,我告诉你,10财富值,会有人回答你这种专业问题?

直接说吧,你的size是啥玩意,根本就没初始化,运行的时候一个随机的大数,程序直接崩溃了。

打好基础吧。

有用的话,就采纳。

追问

大神告诉我吧。。
我确实是小白,刚开始学。。

相似回答