错位的代码:
#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的值恢复到我们所想要的值。