C语言第三次作业(循环结构)参考答案
1. 求Sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/(2n))其中n的值由键盘获得。
#include
#include
int main()
{
int n,i;
double SN=0;
printf("请输入n的值:");
scanf("%d",&n);
for(i=1;i<=n;i++)
SN+=1.0/(2*n-1)-1.0/(2*n);
printf("SN=%lf\n",SN);
return 0;
}
2.求S=aa….a -… -aaa - aa - a的值,其中a=3,n=6。
例如:22222-2222-222-22-2(例如:a=2,n=5)
#include
#include
int main()
{
int i,s=0,t=0,a,n;
scanf("%d,%d",&a,&n);
for(i=0;i
t=t*10+a;
s=t;
printf("%d",s);
for(i=1;i
{ t=t/10;
s=s-t;
}
printf("s=%d",s);
return 0;
}
3..根据以下公式求∏的值(要求满足精度0.0005,即某项小于0.0005时停止迭代)∏/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+(1*2*3*4)/(3*5*7*9)+…+(1*2*3*4*…*n)/(3*5*7*9*…*(2n+1))程序运行后,如果输入精度0.0005,则程序输出为3.140578。
#include
#include
int main()
{
int n=1;
double t=1.0,pi=0.0;
while(t>=0.0005)
{ pi+=t;
t=t*n/(2*n+1);
n++;
}
pi=2*pi;
printf("pi=%lf\n",pi);
return 0;
}
4.输出1至100之间每位数的乘积大于每位数的和的数
#include
int main()
{int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{ k=1;s=0;
m=n;
while(m)
{k*=m%10;
s+=m%10;
m/=10;
}
if(k>s) printf("%d ",n);
}
}
5.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,因此6是“完数”。编程序找出1000之内的所有完数及这些完数之和,并按下面格式输出因子:6的因子是1,2,3 …… 完数和是…。
#include
int main()
{ int a,s,sum=0,i;
for(a=1;a<1000;a++)
{ s=0;
for(i=1;i<=a/2;i++)
if(a%i==0)s=s+i;
if(s==a)
{printf("%d的因子是:",a);sum=sum+a;
for(i=1;i<=a/2;i++)
if( a%i==0) printf("%d,",i);
printf("\n");
}
}
printf("完数和是%d。\n",sum);
return 0;
}
6. 有一数列:
2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和。
#include
int 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("前20项的合是%7.2f",s);
}
7. 大于m且紧靠m的k个素数打印出来。
例如,若输入m=17, k=5 ,则应输出“19,23,29,31,37”。
#include
int main()
{
int m,k,n,i=0,flag;
printf("请输入m和k的值:");
scanf("%d %d",&m,&k);
printf("素数是:");
while(i
{m=m+1;flag=1;
for(n=2;n<=m/2;n++)
if(m%n==0) {fl