C语言:求5/6+11/12+19/20+29/30+...的前N项的和,咋写?
1)N由键盘输入,1~99999;输入错误要提示并退出。
2)输出保留6位有效小数。
3)测试有多组,输入0结束。 展开
分析:
1) 定义变量n,scanf("%d",&n); if ( n<0 || n>99999 ) { printf("输入错误。\n"); break; }
2)定义double类型累加和变量s,因为多项式中有分式,因此需要浮点类型变量保存结果
printf("%.6lf\n",s); 由于需要多次求不同n值的和,因此每次求和之前需要强制清0
3)多组测试,用循环结构,由于不关心循环次数,选用while循环:
while ( 1 ) { ...; if ( n==0 ) break; }
4)分析多项式:一般多项式求和采用for循环,利用循环变量i的取值计算相关多项式分子和分母
每项分子和分母都是整型数据,因此可以分别用整型变量求,分子fz,分母fm
分子规律是当前分母取值减1,分母规律i=0,1,2,3,...,n时取值2x3,3x4,4x5,...,(i+2)x(i+3)
注意,直接用整数相除需要将分子或分母中至少一个强制数据类型转换成浮点数,否则只能得到整型结果。
因此程序为:
#include<stdio.h>
void main() { int n,i,fz,fm; double s;
while ( 1 ) { //无限循环,退出由循环体中条件语句完成
printf("请输入N(1~99999):"); scanf("%d",&n); if ( n==0 ) break;
if ( n<0 || n>99999 ) { printf("输入错误。\n"); break; }
s=0; for ( i=0;i<n;i++ ) { fm=(i+2)*(i+3); fz=fm-1; s+=(double)fz/fm; }
printf("%.6lf\n",s);
}
printf("程序结束运行。\n");
}
代码文本:
#include "stdio.h"
int main(int argc,char *argv[]){
int i,k,t,n;
double s;
printf("Enter n(int 0<n<100000, n==0 end)...\nn=");
while(scanf("%d",&n)==1 && n>0 && n<100000){
for(s=(k=5)/6.0,t=6,i=1;i<n;s+=(k+=t)/(k+1.0),t+=2,i++);
printf("The SUM is %g\n",s);
}
if(n<0 || n>99999)
printf("Input error, exit...\n");
return 0;
}
{int n,i.t=0;
double s=0;
printf("请输入一个不超过5位的正整数:");
scanf("%d",&n);
if(n<1||nn99999)
{printf("输入错误!");return 0;}
for(i=0;i<n;i++)
s+=t+=6,(double)(t-1)/t;
printf("%f\n",s);
return 0;
}