东南大学机械学院C第一学期上机作业八之后汇总.docx
《东南大学机械学院C第一学期上机作业八之后汇总.docx》由会员分享,可在线阅读,更多相关《东南大学机械学院C第一学期上机作业八之后汇总.docx(27页珍藏版)》请在冰豆网上搜索。
![东南大学机械学院C第一学期上机作业八之后汇总.docx](https://file1.bdocx.com/fileroot1/2022-11/15/675d2173-dd53-497c-a341-927934f84059/675d2173-dd53-497c-a341-927934f840591.gif)
东南大学机械学院C第一学期上机作业八之后汇总
八
1.设有如下求近似值的公式:
设计算法,给定一个x,求f(x)的近似值,要求单项误差不大于0.0001。
提示:
需要使用fabs函数求绝对值,fabs函数需要包含数学函数头文件,
#include“math.h”
2.输出100-200之间的质数,输出格式为8个一行;
3.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如,6的因子为1、2、3,而6=1+2+3,28=1+2+4+7+14因此6,28是“完数”。
编程序找出1000之内的所有的完数并输出。
4.设计一个计算n的阶乘的函数fac,参数为n,返回值为整数。
完成后,在主程序中输入一个整数,然后调用该函数,并输出结果。
5.把第一题转化成函数,即设计一个函数f,参数是实数,返回值也是也实数。
在主程序中输入x,然后调用函数之后输出。
1、#include
#include
voidmain(void)
{
doublef=1,sum=0,x;
intn=1;
cout<<"请输入一个x的值:
";
cin>>x;
while(fabs(f)>0.0001)
{
sum+=f;
f=-f*x*x/2/n/(2*n-1);
n++;
}
cout<<"f(x)的近似值为:
"<}
2、#include
#include
voidmain(void)
{
intm,k,i,n=0;
for(m=101;m<200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i==k+1)
{
cout<n++;
}
if(n%8==0)
cout<<'\n';
}
}
3、#include
voidmain(void)
{
intsum;
cout<<"1000之内的所有完数为:
";
for(inti=1;i<=1000;i++)
{
sum=0;
for(intj=1;j
if(i%j==0)
sum+=j;
if(i==sum)
cout<
}
}
4、#include
intfac(intn)
{
intm=1;
for(inti=1;i<=n;i++)
m=m*i;
returnm;
}
voidmain(void)
{
intn;
cout<<"请输入一个n的值:
";
cin>>n;
cout<"<}
5、#include
#include
doublef(intx)
{
doublem=1,sum=0;
inti=1;
while(fabs(m)>0.0001)
{
sum+=m;
m=-m*x*x/2/i/(2*i-1);
i++;
}
returnsum;
}
voidmain(void)
{
intx;
cout<<"请输入一个x的值:
";
cin>>x;
cout<<"f(x)的近似值为:
"<}
第9周上机题目:
(1)构造递归函数与程序,把输入的一个十进制的数字,正确的输出转化为2进制的数字。
(2)写出斐波那契级数前20项计算的递归和递推的函数与程序;
(3)要求:
设计一个函数intcheck(intm),功能是提取m中的最高位数字和最低位数字,检查二者是否相同,若是则返回1,否则返回0。
在主函数能够依次输入20个数,然后调用所设计的函数,输出多少个数是高位与低位相同。
(4)定义一个函数longinvers(longx),形式参数x为一个6位整数,函数功能是取x的高3位数(赋给h)和低3位各位数字(可从高位到低位依次存入变量a、b和c),将a、b和c逆序组合为一个整数t,计算h+t并将结果返回。
例如:
x=123456,h=123,t=654。
(5)、利用级数展开式计算:
(50分)
f(x)=(n≥1)
其中:
g(m,x)=(1+2+3+…+m)*x
【要求】
(1)定义函数doubleg(intm,doublex)用于计算g(m,x)。
(2)定义函数doublef(…)用于计算f(x),其中应调用函数g()。
(3)主函数:
从键盘输入x值(-1输出格式为f()=<结果值>,(n=<给定值>)。
1、#include
voidfun(intn)
{
if(n!
=0)
{
fun(n/2);
cout<}
}
voidmain(void)
{
intn;
cout<<"请输入一个十进制的数:
";
cin>>n;
cout<<"其对应的二进制数为:
";
fun(n);
cout<<'\n';
}
2、#include
intfib(intn)
{
intm;
if(n==1||n==2)
m=1;
else
m=fib(n-1)+fib(n-2);
returnm;
}
voidmain(void)
{
cout<<"Fibonnaci数列前20项为:
\n";
for(inti=1;i<=20;i++)
cout<}
#include
intfib(intn)
{
intt1,t2,t;
if(n==1||n==2)
t2=1;
else
{
t1=1;
t2=1;
for(inti=3;i<=n;i++)
{
t=t2;
t2=t1+t2;
t1=t;
}
}
returnt2;
}
voidmain(void)
{
cout<<"Fibonnaci数列前20项为:
\n";
for(inti=1;i<=20;i++)
cout<}
3、#include
intcheck(intm)
{
inta,b;
b=m%10;
while(m/10!
=0)
m=m/10;
if(m==b)
a=1;
else
a=0;
returna;
}
voidmain(void)
{
intm,j=0;
for(inti=1;i<=20;i++)
{
cout<<"请输入一个整数:
";
cin>>m;
if(check(m))
j++;
}
cout<<"这二十个数中有"<}
#include
intcheck(intm)
{
intn;
if(m/10==0)
n=m%10;
else
n=check(m/10);
returnn;
}
voidmain(void)
{
intm,j=0;
for(inti=1;i<=20;i++)
{
cout<<"请输入一个整数:
";
cin>>m;
if(m%10==check(m))
j++;
}
cout<<"共有"<}
4、#include
longinvers(longx)
{
intm,a,b,c;
a=x%10;
b=x/10%10;
c=x/100%10;
m=100*a+10*b+c+x/1000;
returnm;
}
voidmain(void)
{
intx;
cout<<"请输入一个六位整数:
";
cin>>x;
cout<<"计算结果为:
"<}
5、#include
doubleg(intm,doublex)
{
doublet=0;
for(inti=1;i<=m;i++)
t=t+i;
t=t*x;
returnt;
}
doublef(intn,doublex)
{
doublet=1;
for(inti=1;i<=n;i++)
t=t+1/g((2*i+1),x);
returnt;
}
voidmain(void)
{
doublex;
cout<<"请输入x的值(-1";
cin>>x;
cout<<"f("<}
十
1.编写并调试运行多函数形式的程序
利用级数展开式计算:
f(x)=(n≥2)
其中:
g(m)=(m-2)/(m-1)。
g
(1)=1;m>1
【要求】
(1)定义函数doubleg(intm)用于计算g(m)。
(2)定义函数doublef(…)用于计算f(x),其中应调用函数g(m)。
(3)主函数负责输入输出以及调用函数f(x)。
从键盘输入x(-1(4)输出格式为:
f()=<结果值>,(n=<给定值>)。
程序测试至少三次,分别输入不同的x值和n值(如x=0.3,0.8,1.5,n=10,16,25)。
2.编制函数,用辗除法求两个整数的最大公约数其最大公约数和最小公倍数。
要求在主函数中输入以下10对整数:
12、20,7、13,6、8,15、60,3、5,10、24,13、15,36、9,45、11,18、36,输出其中互质的数对(互质数对指除了1之外,没有其他的公因子,如7、13)。
输入两个正整数m和n,要求用写出函数完成上述功能。
所谓辗除法叙述如下:
设要求a和b的最大公约数.首先将a除以b,得商q,得余数r(如果a
再将余数去除原来的除数,得新的商和余数,重复此过程,直到余数为零,则此时的除数就是a和b的最大公约数。
3.利用函数打印出如下图案:
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
1、#include
doubleg(intm)
{
doublen;
if(m==1)
n=1;
else
n=(m-2.0)/(m-1);
returnn;
}
doublef(doublex,intn)
{
doublet;
t=x*x*x;
for(inti=3;i<=