C语言编程:序列求和。
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,...求出这个数列的前n项之和。关于输入第一行为整数m,表示有m行数据需要处理。其后每行一个整数n,表...
有一分数序列: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13, ... 求出这个数列的前n项之和。
关于输入
第一行为整数m,表示有m行数据需要处理。
其后每行一个整数n,表示求前n项之和。
关于输出
输出为m行,每行对应于所求的前n项和,精确到小数点后3位。
例子输入
3
20
10
5
例子输出
32.660
16.480
8.392
谢! 展开
关于输入
第一行为整数m,表示有m行数据需要处理。
其后每行一个整数n,表示求前n项之和。
关于输出
输出为m行,每行对应于所求的前n项和,精确到小数点后3位。
例子输入
3
20
10
5
例子输出
32.660
16.480
8.392
谢! 展开
展开全部
不明白你的意思,我这个代码是算前20项之和,你说清楚点,我改下程序。
#include "Stdio.h"
#include "Conio.h"
main()
{
int i,t,n=20;
float a=2,b=1,s=0;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a;a=a+b;b=t;
}
printf("sum is %9.3f\n",s);
getch();
}
#include "Stdio.h"
#include "Conio.h"
main()
{
int i,t,n=20;
float a=2,b=1,s=0;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a;a=a+b;b=t;
}
printf("sum is %9.3f\n",s);
getch();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#define MAXSIZE 100
int main(void){
int m, j,k;
int num[MAXSIZE]={0};
printf("请输入要计算的行数:\n");
scanf("%d", &m);
for(j=0;j<m;j++){
printf("想要计算到哪项?请输入第%d行数值:\n", j+1);
scanf("%d",&num[j]);
}
for(k=0;k<m;k++){
int i;
double res = 0;
double temp1 = 1.0, temp2 = 2.0;
for(i = 0; i < num[k]; ++i){
res = res + temp2/temp1;
temp2 += temp1;
temp1 = temp2 - temp1;
}
printf("第%d行计算结果为%.3lf\n", k+1,res);
}
}
#define MAXSIZE 100
int main(void){
int m, j,k;
int num[MAXSIZE]={0};
printf("请输入要计算的行数:\n");
scanf("%d", &m);
for(j=0;j<m;j++){
printf("想要计算到哪项?请输入第%d行数值:\n", j+1);
scanf("%d",&num[j]);
}
for(k=0;k<m;k++){
int i;
double res = 0;
double temp1 = 1.0, temp2 = 2.0;
for(i = 0; i < num[k]; ++i){
res = res + temp2/temp1;
temp2 += temp1;
temp1 = temp2 - temp1;
}
printf("第%d行计算结果为%.3lf\n", k+1,res);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
int main(void){
int m;
scanf("%d", &m);
while(m--){
int n, i;
double res = 0;
double temp1 = 1.0, temp2 = 2.0;
scanf("%d", &n);
for(i = 0; i < n; ++i){
res = res + temp2/temp1;
temp2 += temp1;
temp1 = temp2 - temp1;
}
printf("%.3lf\n", res);
}
}
#include <stdlib.h>
int main(void){
int m;
scanf("%d", &m);
while(m--){
int n, i;
double res = 0;
double temp1 = 1.0, temp2 = 2.0;
scanf("%d", &n);
for(i = 0; i < n; ++i){
res = res + temp2/temp1;
temp2 += temp1;
temp1 = temp2 - temp1;
}
printf("%.3lf\n", res);
}
}
追问
不对……
是一次性输入输出,
但这样是输入一个就有了一个输出。
我编了一个也是这样……
追答
晕倒 这个感觉像是基础的ACM题目啊 如果是ACM题目 这种输出就可以了
如果你想一次性的输入输出 那可以用动态空间申请(malloc或者calloc)就可以了
#include
#include
int main(void){
int m, k = 0;
double *res = NULL;
scanf("%d", &m);
res = (double *)malloc(m*sizeof(double));
while(k < m){
int n, i;
double temp1 = 1.0, temp2 = 2.0;
scanf("%d", &n);
res[k] = 0;
for(i = 0; i < n; ++i){
res[k] = res[k] + temp2/temp1;
temp2 += temp1;
temp1 = temp2 - temp1;
}
++k;
}
for(k = 0; k < m; ++k)
printf("%.3lf\n", res[k]);
free(res);
return 0;
}
这个程序中是对输出做了缓冲,将输出缓冲到res数组中。res数组动态申请和释放。你也可以将输入缓冲,也同样通过动态申请来实现。你自己改改吧
另外 可以把计算部分单独写成函数。
再一个就是其实你可以缓存答案.先计算好所有的res值,到时候直接打印就好了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询