我计划暑假刷很多关于PAT的主题,然后提高编程能力。
结果,暑假过去了,进入了研二,但这些文章怎么也写不出来。
因为很惭愧,所以从今天开始,我又回去继续写这些关于编程的文章了。
一方面是为了提高自己的实力,另一方面也是为了更多的伙伴和我一起提高编程技术。
今天的主题是PAT乙级收录的1010号主题,也就是一元多项式求指引。
主题要求如下:
虽然用指数函数递减的方式输入多项式的非零项系数和指数(绝对值都在1000以下的整数),但是这个括号内的内容,实际上没有什么效果。 其实可以无视这个。 因为,在这个题目中,没有对整数的绝对值进行一个判断。
2、要求以与输入相同的形式输出结果,也就是输出导数多项式的非零项系数和指数,但最后不能有多余的空格。 另外,请特别注意“零多项式”的指数和系数都为0,为0。
根据主题给出的例子,阐明这个主题的实现原理。
实现原理分析
。我认为在正式开始编程问题之前,整理逻辑是非常重要的。
流程图有助于我们整理逻辑。
绘出流程图,理清楚程序逻辑
。如上图所示,这是这个程序的流程图。
代码实现
根据这个流程图,可以整理代码的写法。1、输入非零项的指数和系数时,也就是说为了分别输入指数和系数,需要scanf函数。
另外,在循环中输入。 这里没有指定输入指数和系数的数量,所以可以使用while(1)作为默认值。 另外,之后进行if语句的判断,返回enter后结束循环。
if(getchar (可以使用!='n ' ) )进行换行输入的判断。
2、如果对零多项式作出一个判断,就会发现导前的一元多项式有常数项,也就是-2x^0,导后得到的指数系数分别为0和-1,常数项的导数为0。
此外,零多项式的指数和系数均为0。 只考虑系数为0的情况。 因为指数为0时,这个数就直接变成0。
3、这是我在之前的几篇文章中一直提到的,是最后一列没有空间的问题。 可以完全重新定义变量count并开始记录。 0时,输出空格。 为每个输出添加一个空格,直到最后没有空格。
做这个题目的时候,我也遇到过很多问题:
错误踩点
例如,我没有对printf('0) )做出附加判断。 请注意。 这种情况必须满足以下条件:只有在number2为0时,且输出结果最终为0时,必须隐藏0,以避免出现重复的0。问题代码部分:
//一元多项式求导
# #包括stdio.h
int主()。
int编号1=0;
int编号2=0;
int计数=0;
wile(1) {
扫描(' % d % d )、编号1、编号2 );
if(number2==0)//这部分代码有问题,需要更改。
printf('0);
}
if (编号2!=0}{
if (计数0 ) {
printf (' );
}
打印机(% d % d )、编号1 *编号2、编号2-1 );
出局;
//这里是特别值得注意的地方,为什么必须在计数中使用count,是为了解决空间
//空间问题需要在这里解决。 我们最初输出结果的时候
//从开头开始,例如123那样是一对的话,在下一对-10和这一对之间空出空间
//
所以需要用到一个count //至于上面的printf("0 0");部分,就是当count为初始值的时候,也就是不满足count不为零的时候 if(getchar()=='n'){ break; } } return 0; }正确结果与代码实现
//一元多项式求导 #include<stdio.h> int main(){ int number1 = 0; int number2 = 0; int count = 0; while(1){ scanf("%d %d", &number1, &number2); if(number2==0){ if(count==0){ printf("0 0"); } } if(number2!=0){ if(count>0){ printf(" "); } printf("%d %d", number1*number2, number2-1); count++; } if(getchar()=='n'){ break; } } return 0; }测试结果
很显然结果是正确的,但是呢,在具体做题的时候我会遇到许多问题,需要静下心来一点点来解决,最终成功完成这道题目了。
总结
总的来说,这道题目其实难度并不大,但是需要细心细心再细心,不然就会出很多错误,特别是注意用到while循环,以及用条件语句对回车结束循环进行判断。