东南大学机械学院C++第一学期上机作业八之后.docx
- 文档编号:29819344
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:32
- 大小:23.57KB
东南大学机械学院C++第一学期上机作业八之后.docx
《东南大学机械学院C++第一学期上机作业八之后.docx》由会员分享,可在线阅读,更多相关《东南大学机械学院C++第一学期上机作业八之后.docx(32页珍藏版)》请在冰豆网上搜索。
东南大学机械学院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( 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( 程序测试至少三次,分别输入不同的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<=n;i++) t+=-1*g(i)*x*x; t=t-x*x*x+x; returnt; } voidmain(void) { doublex; cout<<"请输入一个x值(-1 "; cin>>x; cout<<"f("< } 2、#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<=n;i++) t+=-1*g(i)*x*x; t=t-x*x*x+x; returnt; } voidmain(void) { doublex; cout<<"请输入一个x值(-1 "; cin>>x; cout<<"f("< } #include intf1(intm,intn) { if(m%n==0)returnn; elsereturnf1(n,m%n); } intf2(intm,intn) { m/=f1(m,n); returnm*n; } voidmain(void) { intm,n; cin>>m>>n; if(f1(m,n)==1) { cout< } elsecout< cout< } 3、#include #include voidfun() { charc; for(inti=1;i<=4;i++) { c=64; cout< c=c+i; for(intj=1;j<=2*i-1;j++) cout< cout<<'\n'; } for(i=3;i>=1;i--) { c=64; cout< c=c+i; for(intj=1;j<=2*i-1;j++) cout< cout<<'\n'; } } voidmain(void) { fun(); } (3)根据猜想,每一个大于4的偶数都可以表示为两个质数之和, 请把4-50以内的偶数拆分成两个质数之和,验证猜想。 #include intfun(intm) { inta; for(inti=2;i if(m%i==0) break; if(i==m) a=1; else a=0; returna; } voidmain(void) { for(inti=6;i<=50;i=i+2) { for(intm=3;m if(fun(m)&&fun(i-m)) { cout< break; } } } 十二 3.拆分一个小于8位的整数,把各位数字存放在一个数组中,例如,123456,拆分到a[0]=6,a[1]=5;a[2]=4;a[3]=3;a[4]=2;a[5]=1;a[6]=0,a[7]=0 4.建立一个长度为10的数组,从键盘由大到小输入9个有序的整数,形成一个有序的数列依次存放到数组中;然后再输入一个数,把这个数放到数组的正确位置,使得数组依然有序(不能使用排序方法重新排序)。 例如,数组为data,预先输入,1,3,4,6,8,12,14,16,20;然后再从键盘接收一个数,例如为5,最后的数组结果为,1,3,4,5,6,8,12,14,16,20。 提示,算法采用数组的搬移, 第一步: 创建数组,读入9个有序的数字; 第二步: 再读入一个数,然后在数组上遍历,找到新数应该处于的位置i,即当在数组中发现第一个大于新数的位置,就在它的前面停止下来; 第三步: 从i+1到9,数组依次向后搬移,注意搬移要从后面开始,即从第9个开始向后依次到第i+1个; 第四步: 把输入的数字放到位置i上; #include voidmain(void) { inta[8],m,i=0; cout<<"请输入一个小于八位的整数: "; cin>>m; while(m! =0) { a[i]=m%10; m=m/10; i++; } for(;i<8;i++) a[i]=0; cout<<"拆分后的结果为: \n"; for(i=0;i<8;i++) cout<<"a["< cout<<'\n'; } #include voidmain(void) { inta[10],i,j,k; cout<<"请先由大到小输入9个有序的整数: "; for(i=8;i>=0;i--) cin>>a[i]; cout<<"请再输入一个整数: "; cin>>k; for(i=0;i<=8;i++) { if(a[i]>=k) break; } for(j=8;j>=i;j--) a[j+1]=a[j]; a[i]=k; cout<<"最后的结果为: \n"; for(i=0;i<=9;i++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东南大学 机械学院 C+ 第一 学期 上机 作业 之后