1、求e的近似值
题目: 自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
输入格式:
输入第一行中给出非负整数 n(≤1000)。
输出格式:
在一行中输出部分和的值,保留小数点后八位。
输入样例:
10
输出样例:
2.71828180
代码1:
#include<stdio.h>
#include<math.h>
double fact(int a)
{
double b=1;
int i;
if(i=0){b=1;}
else{
for(i=1;i<=a;i++){
b=b*i;}
}
return b;
}
int main()
{
int i,n;
double s=0;
scanf("%d",&n);
for(i=0;i<=n;i++){
s=s+1.0/fact(i);
}
printf("%.8f",s);
return 0;
}
代码2:
#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
double sum=1;
double fact(int n);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
sum=sum+1/fact(i);
}
printf("%.8f\n",sum);
return 0;
}
double fact(int n)
{
double sum=1;
int i;
for (i=1;i<=n;i++)
{
sum=sum*i;
}
return sum;
}
2、统计素数并求和
题目: 本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
代码1:
#include<stdio.h>
#include<math.h>
int main()
{
int i,k,limit,m,n,flag,count,s=0;
scanf("%d%d",&m,&n);
count=0;
for(k=m;k<=n;k++){
if(k<=1){
flag=0;
}
else if(k==2){
flag=1;
}
else{
flag=1;
limit=sqrt(k)+1;
for(i=2;i<=limit;i++){
if(k%i==0){
flag=0;
break;
}
}
}
if(flag==1){
count++;
s=s+k;
}
}
printf("%d %d",count,s);
return 0;
}
代码2:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,m,n,sum=0,count=0;
scanf("%d%d",&m,&n);
for (i=m;i<=n;i++)
{
for (j=2;j<=sqrt(i);j++)
{
if (i%j==0)
{
break;
}
}
if (j>sqrt(i))
{
sum=sum+i;
count++;
}
}
if (m==0&&n==0)
{
sum=0;
count=0;
}
else if (m==0&&n==1)
{
sum=0;
count=0;
}
else if(m==1&&n==1)
{
sum=0;
count=0;
}
else if(m==1&&n>1)
{
sum=sum-1;
count=count-1;
}
else if(m==0&&n>1)
{
sum=sum-1;
count=count-2;
}
else
;
printf("%d %d\n",count,sum);
return 0;
}
3、统计一个整数的位数
题目: 从键盘读入一个整数,统计该数的位数。例如输入12534,输出5;输入-99,输出2;输入0,输出1。
输入格式:
输入在一行中给出整数。
输出格式:
输出一个整数(该数的位数)。
输入样例1:
10
输出样例1:
2
输入样例2:
-123
输出样例2:
3
代码1:
#include<stdio.h>
int main()
{
int count,number;
scanf("%d",&number);
if(number==0){
count=1;
}
if(number<0){
number=-number;
}
while(number!=0){
count++;
number=number/10;
}
printf("%d",count);
return 0;
}
代码2:
#include<stdio.h>
int main()
{
int count,number;
count=0;
scanf("%d",&number);
if(number<0)
{
number=-number;
}
do{
number=number/10;
count++;
}while(number);
printf("%d",count);
return 0;
}
4、用序列求和公式1+1/1!+1/2! + ……
题目: 本题要求编写程序,用序列求和公式 1 + 1 1 ! + 1 2 ! + 1 3 ! + … … 1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+…… 1+1!1+2!1+3!1+…… 求自然对数底e的近似值,直到最后一项的绝对值小于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“e = S”的格式输出部分和的值S,精确到小数点后10位。题目保证计算结果不超过双精度范围。
输入样例1:
4E-3
输出样例1:
e = 2.7180555556
输入样例2:
0.0002
输出样例2:
e = 2.7182539683
代码1:
#include<stdio.h>
#include<math.h>
double fact(int a)
{
double b=1;
int i;
if(i=0){b=1;}
else{
for(i=1;i<=a;i++){
b=b*i;}
}
return b;
}
int main()
{
int i=0;
double item=1,eps,s=0;
scanf("%lf",&eps);
while(fabs(item>=eps)){
s=s+item;
i++;
item=1.0/fact(i);
}
s=s+item;
printf("e = %.10f",s);
return 0;
}
代码2:
#include <stdio.h>
#include <math.h>
int main()
{
int i=0,flag=1;
double item=1,sum=0,error;
scanf("%lf",&error);
if(error>1)
{
sum=1;
}
else if(error==1)
{
sum=1;
}
else
{
while(fabs(item)>error)
{
item=flag*1.0/(3*i+1);
sum+=item;
flag=-flag;
i++;
}
}
printf("sum = %.6f\n",sum);
return 0;
}
【这一篇到这就完结啦!喜欢的朋友可以点个赞,关注一下哦!你们的关注、点赞和收藏是我更新的动力,O(∩_∩)O哈哈~祝各位前程似锦,明天见呀!】