C程序实验(1)一个多项式可以表达为x的各次幂与系数乘积的和

题目内容:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:

2x6+3x5+12x3+6x+20

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

程序要处理的幂最大为100。

输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:

每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。

注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

输出格式:

从最高幂开始依次降到0幂,如:

2x6+3x5+12x3-6x+20

扫描二维码关注公众号,回复: 4727297 查看本文章

注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

输入样例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20

输出样例:

4x6+6x5+12x3+12x2+12x+40

遇到的问题

  • 如何能够根据输入动态存储这些数据呢
  1. 没注意最高幂是100,所以我们可以使用有100个元素的数组
  2. 可以用标号表示幂数,元素代表系数
  • 数组的表示
    A[n]
  • 在循环中要用break
  • 输出数组的元素的时候
    printf(“%d”,arr[0]),因为数组的第一个元素是地址
  • printf后面是不需要加地址的
#include<stdio.h>
#include<math.h>

int main()
{
	int N=101,i,n,a,flag=0;
	int arr[N];
	
	for(i=0;i<N;i++)
	{
		arr[i]=0;
	}
	
	while(flag<2)//输入数据 
	{
		scanf("%d %d",&n,&a);
		
		if(n==0)
		{
			flag++;
		}
		
		if(arr[n]!=0)
		{
			arr[n]+=a;
		}
		else
		{
			arr[n]=a;
		}
	}
	
	int max=0;
	for(i=N;i>0;i--)//判断最大的幂次 
	{
		if(arr[i]!=0)
		{
			max=i;
			break;
		}
		 
	 } 
	 
	 if(max==0)
	 {
	 	printf("%d",arr[0]);
	  } 
	  else
	  {
	  	for(i=max;i>-1;i--)
	  	{
	  		if(i>1)
	  		{
	  			if(abs(arr[i])==1)
	  			{
	  				printf("x%d",i);
				  }
				  else if(abs(arr[i])>1)
				  {
				  	printf("%dx%d",abs(arr[i]),i);
				  }
			  }
			  else if(i==1)
			  {
			  	if(abs(arr[i]==1))
			  	{
			  		printf("x");
				  }
				  else if(abs(arr[i]>1))
				  {
				  	printf("%dx",abs(arr[i]));
				  }
			  }
			  else if(arr[i]!=0)
			  {
			  	printf("%d",abs(arr[i]));
			  }
		  
		  if(i>0)
		  {
		  	if(arr[i-1]<0)
			  {
			  	printf("-");
			   } 
			   else if(arr[i-1]>0)
			   {
			   	printf("+");
			   }
		   } 
		   } 
	  }
	 
	  return 0;
 } 

代码终结

  • 结构
  1. 用数组存储数据,并且用flag变量表示结束两个多项式
  2. 用for循环判断最大的幂次
  3. 最难的就是后面的输出了,要充分了解各种情况。第一个就是只有一个常数的情况,第二个就是当系数为1时候,第三个就是当幂次为1时候的情况
  4. 使用绝对值,再在最后加上正负号,这样可以减轻讨论情况

猜你喜欢

转载自blog.csdn.net/weixin_42082138/article/details/85004694