本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
#include<stdio.h>
double slv(int n);
int main(){
int n;
scanf("%d",&n);
printf("%.2f",slv(n));
return 0;
}
double slv(int n){
double sum=0;
int i;
int son=2;
int mother=1;
int mid;
for(i=0;i<n;i++){
sum+=(double)(son)/mother;
mid=son;
son=son+mother;
mother=mid;
}
return sum;
}
整体问题不大,但是pat上显示较大n会出错,不知道什么原因?
项数 n 过大,double slv(int n) 函数里 son mother mid 变量的值会超 int 型的范围,修改如下,供参考:
#include<stdio.h>
double slv(int n);
int main() {
int n;
scanf("%d", &n);
printf("%.2f", slv(n));
return 0;
}
double slv(int n) {
double sum = 0;
int i;
double son = 2.0, mother = 1.0, mid; // 修改
for (i = 0; i < n; i++) {
sum += son / mother;
mid = son;
son = son + mother;
mother = mid;
}
return sum;
}