错位的代码:
#include <stdio.h> #include <stdlib.h> int main() { int n,i; float q,sum1=0.0,ask=1.0,sum2=0.0; char a; while((scanf("%d %f",&n,&q))!=EOF) { sum1=0.0; sum2=0.0; ask=1.0; for(i=1; i<=n; i++) { ask=ask*q; sum1=sum1+ask; } sum2=sum1+1.0; printf("%.3f\n",sum2); scanf("%c",&a); } return 0; }
当我把float型改成double时候,程序结果是正确的。
#include <stdio.h> #include <stdlib.h> int main() { int n,i; double q,sum1=0.0,ask=1.0,sum2=0.0; while((scanf("%d %lf",&n,&q))!=EOF) { sum1=0.0; sum2=0.0; ask=1.0; for(i=1; i<=n; i++) { ask=ask*q; sum1=sum1+ask; } sum2=sum1+1.0; printf("%.3f\n",sum2); } return 0; }
通过比较我们发现,该题目不需要清除缓冲区?这是为什么呢!
程序的改良:
#include <stdio.h> #include <stdlib.h> int main() { int n,i; double q,sum,ask; while((scanf("%d %lf",&n,&q))!=EOF) { sum=1; ask=1; for(i=1; i<=n; i++) { ask=ask*q; sum=sum1+ask; } printf("%.3f\n",sum); } return 0; }由于我们计算的不是一组数据,所以说再每一组数据被计算完成后,我们要把ask和sum的值恢复到我们所想要的值。