PTA 1010一元多项式求导的代码实现及错误分析(C语言)

设计函数求一元多项式的导数。(注:x^n^(n为整数)的一阶导数为n*x^n-1^。)

输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

实现思路:

1.考虑到题目并未给定界定输入结束的方式,即多项式的最后一项指数不确定(不一定为0),故采用gets或者fgets这种以回车结尾的输入方式最为稳妥,但这样的话,就会涉及到字符串数组和整数数组的转化问题,较为繁琐,故推测题目给定的潜在结尾方式为末尾为0,经测试确实如此。

2.定义足够长的数组,循环读入数据,以输入为0作为结束标记(即考虑直接输入0的情况,但会产生对于6 5 0 0这种测试数据的最后一位0丢失)。

3.考虑零多项式的情况输出,否则则正常输出,但需判定空格符条件

代码如下:

#include<stdio.h>

int main()
{
  int iNum[1000];
  int i=-1;
  //输入数据
  do
  {
    i++;
    scanf("%d",&iNum[i]);
  }while(!iNum[i]==0);
  //判定零多项式
  if(iNum[0]==0||iNum[1]==0)
  {
    printf("0 0");
  }
  //正常输出
  else
  {
    for(int j=1;j<=i-1;j=j+2)
    {
      printf("%d %d",iNum[j-1]*iNum[j],iNum[j]-1);
      if(j<i-2)
      {
        printf(" ");
      }
    }
  }
  return 0;
}

错误分析:其中空格条件控制的j<i-2,起初写为j!=i-2,则测试点2格式错误,反思格式错误基本出于空格符,遂考虑当输入数据出现最后两位是0的情况时,最后一位丢失,则i最后一位为系数位,j需要到i-1,那么在最后一项后就会多一个空格。修改后通过。

扩展思路:偶然看到其他网友的另外一种思路,引以为参考,即不定义数组,每输入一组数据两个整数即分析判别输出,直到输入错误,即scanf函数出现EOF错误,但我个人测试直接输入一个0或者输入x和0(x为任意非0整数),则程序错误无法进行,故输入控制还需再考虑,思路可借鉴。

猜你喜欢

转载自blog.csdn.net/bawangtu/article/details/81103032
今日推荐