c盘大小计算公式(用C语言进行编程)
本来计划一个暑假多刷一些关于PAT的题目,以及提升一下自己的编程能力。
结果,暑假倒是过去了,也步入研二了,但是这些文章呢,一直迟迟没有写出来。
我感觉非常不好意思,所以,从今天开始,我又回来继续写这些关于编程的文章了。
一方面呢,是为了提升自己的实力,另一方面呢,也是为了让更多小伙伴能跟我一起提升编程技术。
今天这道题目呢,是收录在PAT乙级中的第1010题,也就是一元多项式求导。
题目要求如下:
1、以指数递降的方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数),但这个括号里的内容,其实并无太大作用,其实可以忽略这个,因为在这道题目里,它并没有要求对整数的绝对值进行一个判断。
2、要求以与输入相同的格式来输出结果,也就是输出导数多项式的非零项系数和指数,但是结尾不能有多余空格,以及要特别注意一点:“零多项式”的指数和系数都是0,表示为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 0")进行一个额外判断,要注意,这种情况,只有当number2为0的时候,且还要满足一个条件,也就是在输出结果最终为0的时候,不要出现重复的0,也就是需要把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){//这部分代码是存在问题的,所以需要更改。
printf("0 0");
}
if(number2!=0){
if(count>0){
printf(" ");
}
printf("%d %d", number1*number2, number2-1);
count ;
} //这里就是需要特别关注的地方了,为什么需要用到count来进行计数,就是为了解决空格
//空格问题需要在这里来进行解决,因为我们在第一次输出结果的时候
//是从最开始开始的,比方说从12 3这样是一对,那么下一对-10 1与这一对之间是有一个空格隔开的
//所以需要用到一个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循环,以及用条件语句对回车结束循环进行判断。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com