1180: 习题5-7 求和
题目描述
求如下式子的和
请将结果定义为double类型。
注意求平方,不要用C数学库中提供的函数pow。
输入
无
输出
小数点后保留6位小数,末尾换行。
样例输入 Copy
无
样例输出 Copy
47977.928968
#include<stdio.h>
int main()
{
double k=1.0,i,t=0,s=0,j=0;
for(;k<101;k++)
s+=k;
for(k=1;k<=50;k++)
{
i=k*k;
t+=i;
}
for(k=1;k<=10;k++)
{
i=1.0/k;
j+=i;
}
i=s+t+j;
printf("%.6lf\n",i);
return 0;
}
1181: 习题5-8 求水仙花数
题目描述
输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。
例如,153是一个水仙花数,因为153=13+53+33
输入
无
输出
每行输出一个水仙花数。
样例输入 Copy
无
样例输出 Copy
153 370 371 407
#include<stdio.h>
int main()
{
int i,a,b,c;
for(i=100;i<1000;i++)
{a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d\n",i);}
}
1182: 习题5-9 完数
题目描述
一个数如果恰好等于它的因子和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,所以6是“完数”。
编程输出1000以内的所有完数,每个完数输出一行,并按下面的格式输出其因子:
6 its factors are 1,2,3
输入
无
输出
每个完数输出一行,并按下面的格式输出其因子:
? its factors are ?,?,?
样例输入 Copy
无
样例输出 Copy
6 its factors are 1,2,3 28 its factors are 1,2,4,7,14 496 its factors are 1,2,4,8,16,31,62,124,248
提示
因子包含1但不包含其本身。
#include<stdio.h>
int main()
{
int i,j,s=0,num;
for(i=1;i<1000;i++)
{s=0;
for(j=1;j<=i/2;j++)
if(i%j==0)
{
s+=j;
}
if(s==i)
{
printf("%d its factors are ",s);
num=0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
{
if(num>0)
printf(",");
printf("%d",j);
num++;
}
}
printf("\n");
}
}
}
1183: 习题5-10 分数序列求和
题目描述
有如下分数序列
求出次数列的前20项之和。
请将结果的数据类型定义为double类型。
输入
无
输出
小数点后保留6位小数,末尾输出换行。
样例输入 Copy
无
样例输出 Copy
32.660261
#include<stdio.h>
int main()
{
double a,b,i,s=0;
a=2.0;b=1.0;
for(i=1;i<=20;i++)
{
s+=(a/b);
a+=b;
b=a-b;
}
printf("%.6lf",s);
return 0;
}
1184: 习题5-11 求多次落地弹球高度
时间限制: 1 Sec 内存限制: 12 MB
提交: 446 解决: 207 外部导入
题目描述
一个球从100m的高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。
求它从第一次落地时,到第N次落地时,共经过了多少米,第N次反弹多高。
输入
一个正整数N,表示球落地的次数。
输出
length=球第N次落地时所经过了距离
high=球第N次落地反弹的高度
小数点后保留4位小数。
注意:末尾输出换行。
样例输入 Copy
10
样例输出 Copy
length=199.8047 high=0.0977
#include<stdio.h>
#include<math.h>
int main()
{
double high=100,length=0;int a,i;
scanf("%d",&a);
for(i=1;i<=a;i++)
{
high=high/2;
length+=(2*high);
}
printf("length=%.4lf\nhigh=%.4lf\n",length,high);
return 0;
}
1185: 习题5-12 猴子吃桃问题
时间限制: 1 Sec 内存限制: 12 MB
提交: 252 解决: 227 外部导入
题目描述
猴子第1填摘下若干桃子,当即吃了一半,还觉着不过瘾,又多吃了一个。第2天早晨,又将剩下的桃子吃掉一半,又多吃了一个。以后每天早晨都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现就只剩一个桃子了。求第1天共摘了多少个桃子。
输入
无
输出
一个整数,末尾换行。
样例输入 Copy
无
样例输出 Copy
1534
#include<stdio.h>
int main()
{
int a=1,i;
for(i=1;i<10;i++)
{
a=(a+1)*2;
}
printf("%d",a);
}
1186: 习题5-13 迭代法求平方根
时间限制: 1 Sec 内存限制: 12 MB
提交: 40 解决: 30 外部导入
题目描述
输入一个非负实数a,用迭代法求平方根
求平方根的迭代公式为
要求前后两次求出的x的差的绝对值小于10-5
从键盘输入非负实数a和迭代初值x0,输出满足条件的xn+1
C数学库中有求绝对值的函数fabs.
输入
非负实数a和迭代初值x0(要求double类型)
输出
输入非负实数的平方根,保留6位小数,末尾换行。
样例输入 Copy
10 3
样例输出 Copy
3.162278
#include<stdio.h>
#include<math.h>
int main()
{
double a,x0,x1;
scanf("%lf%lf",&a,&x0);
x1=a;
while(fabs(x0-x1)>=0.00001)
{
x0=x1;
x1=(x0+a/x0)/2;
}
printf("%.6lf\n",x1);
}
1187: 习题5-14 牛顿迭代法求方程的根
时间限制: 1 Sec 内存限制: 12 MB
提交: 32 解决: 27 外部导入
题目描述
用牛顿迭代法求下面方程在输入初值点附近的根:
2x3-4x2+3x-6=0
要求前后两次求出的x的差的绝对值小于10-6
牛顿迭代法公式如下:
将给定给定方程写成f(x)=0的形式,在给定初值x0的情况下,按如下公式迭代计算:
xn+1=xn-f(x)/f'(x)
提示:C语言数学库中有求指数an的函数pow(a, n)以及求x绝对值的函数fabs(x)
浮点型数据请定义为双精度double类型。
输入
双精度浮点型初值x0
输出
x0附件方程的根,小数点后保留6位小数,末尾换行。
样例输入 Copy
3
样例输出 Copy
2.000000
#include<stdio.h>
#include<math.h>
int main()
{
double x0,x;
scanf("%lf",&x0);
do
{
x0=x;
x=x0-(2*pow(x0,3)-4*pow(x0,2)+3*x0-6)/(6*pow(x0,2)-8*x0+3);
printf("%.6lf",x);
}while(fabs(x0-x)<=1e-6);
return 0;
}
1188: 习题5-15 二分法求方程的根
时间限制: 1 Sec 内存限制: 12 MB
提交: 64 解决: 27 外部导入
题目描述
用二分法求下面方程在区间(a,b)之间的根:
2x3-4x2+3x-6=0
区间端点a, b由键盘输入,确保输入区间内有根。
计算至误差小于10-6为止。
程序中,浮点型数据请定义为双精度double类型。
提示:二分法求方程根的步骤如下:
先将方程写成f(x)=0的形式,再按照如下步骤计算:
1.求出给出的两个端点之间的值fx1,fx2.当fx1*fx2<0,则表明x1和x2之间必存在一根
要么就不存在,一直提示输出x1和x2.
2.一旦fx1*fx2<0,就表明在x1和x2之间有根,继续判断,求的x1和x2的中点值x0,求出fx0.
3.在判断fx0*fx1>0,则在x0和x2中间去找根,此时x1不起作用,用x0代替x1,用fx0代替fx1.
要么就在x0和x1中去找根,此时x2不起作用,用x0代替x2,用fx0代替fx2.
输入
以空格分隔的区间端点值,确保输入的区间内存在方程的根。
输出
二分法求得的方程根,小数点后保留6位小数,末尾换行。
样例输入 Copy
-10 10
样例输出 Copy
2.000000
#include"stdio.h"
#include"math.h"
double f(double x)
{
return 2*x*x*x-4*x*x+3*x-6;
}
int main()
{
double m,n,k;
scanf("%lf%lf",&m,&n);
k=(m+n)/2;
while(fabs(f(k))>1e-6)
{
if(f(m)*f(k)<0)
{
n=k;
}
else
{
m=k;
}
k=(m+n)/2;
}
printf("%.6lf",k);
}
1189: 习题6-1 筛选法求素数
时间限制: 1 Sec 内存限制: 12 MB
提交: 54 解决: 35 外部导入
题目描述
从键盘上输入一个正整数N(N<=100),用筛选法求N之内的素数
输入
正整数N
输出
0~N之间的素数,每个素数一行
样例输入 Copy
100
样例输出 Copy
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
提示
筛选法求N以内的素数
算法:
(1)挖去1;
(2)用下一个未被挖去的数P去除P后面各数,把P的倍数挖掉;
(3)检查P是否小于N的开方的整数部分,如果是,则返回2继续执行,否则就结束。
(4)剩下的数就是素数。
#include<stdio.h>
#include<math.h>
int main()
{
int n,a[101],j,i;
scanf("%d",&n);
for(i=0;i<=n;i++)
a[i]=i;
a[1]=0;
for(i=2;i<=sqrt(n);i++)
for(j=i+1;j<=100;j++)
{
if(a[j]!=0&&a[i]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
for(i=1;i<=n;i++)
if(a[i]!=0)
{printf("%d\n",a[i]);
}
return 0;
}