编程C语言 2.docx
- 文档编号:29241393
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:35
- 大小:28.38KB
编程C语言 2.docx
《编程C语言 2.docx》由会员分享,可在线阅读,更多相关《编程C语言 2.docx(35页珍藏版)》请在冰豆网上搜索。
编程C语言2
一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。
例如,6的真因子为1,2,3,而6=1+2+3,因此,6是“完数”。
求1000以内的所有完数之和。
#include
main()
{inti,j,s=0,t;
for(i=2;i<=1000;i++)
{t=1;
for(j=2;j
if(i%j==0)t=t+j;
if(t==i){printf("%4d",i);s=s+i;}
}
printf("\n%d",s);
}
530
所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如5的平方是25,25的平方是625,故5和25都是同构数,求[2,1000]之间所有同构数之和。
(提示:
若x是m位同构数,则x的平方除以10的m次方的余数就是x)
#include
#include
#include
main()
{longs;
longk,n,sum=0,count=0;
clrscr();
for(n=2;n<=750;n++)
{if(n<10)k=10;
elseif(n<100)k=100;
elsek=1000;
s=n*n;
if(s%k==n){count++;sum+=n;printf("%4d",n);}
}
printf("\n%5ld,%5ld",count,sum);
}
1113
A,B,C是三个小于或等于300的正整数,当满足1/A^2+1/B^2=1/C^2关系,并且A>B>C时,称为倒勾股数。
求这样的倒勾股数有多少组。
填空完成程序,然后运行程序得出正确结果。
(答案填程序运行结果,保留整数位)
#include
main()
{doublea,b,c;
intcount;
clrscr();
for(c=1;c<=300;c++)
for(b=c+1;b<=300;b++)
for(a=b+1;a<=300;a++)
if(1.0/(a*a)+1.0/(b*b)==1.0/(c*c))
count=count+1;
printf("%d",count);
}
A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。
求130B>C的倒勾股数有多少组。
#include
main()
{inta,b,c;
intcount=0;
for(c=1;c<=100;c++)
for(b=c+1;b<=100;b++)
for(a=b+1;a<=100;a++)
if(a+b+c>130&&a+b+c<150&&(1.0/(a*a)+1.0/(b*b)==1.0/(c*c)))
{printf("%d,%d,%d\n",a,b,c);count=count+1;}
printf("%d",count);
}
1
(101)求方程9x+4y=2000的所有正整数解的|x-y|的最大值
#include
#include
main()
{intx,y,z,max=0;
for(x=1;x<230;x++)
{y=(int)((2000-9*x)/4);
z=abs(x-y);
if(9*x+4*y==2000&&y>0&&max } printf(“%d”,max); } 487 下面的程序是求[200,800]之间最大的20个素数之和。 请修改程序中的错误, 使它能得出正确的结果,并给出正确结果。 程序: #include #include #include intfun(inthigh) {intsum=0,n=0,j,yes; while((high>=200)&&(n<=20)) {yes=1; for(j=2;j<=sqrt(high);j++) if(high%j==0){yes=0;break;} if(yes) {sum+=high;n++;} high--; } returnsum; } main() {clrscr(); printf("%d\n",fun(800)); } 14510 求出9269和8671的最小公倍数。 [算法提示: a与b的最小公倍数是a的倍数中第1个被b整除的数] settalkoff clear a=9269 b=8671 k=a dowhilemod(k,a)=0 k=k*a endfor ? k settalkon return (102)梅森尼数是指能使2^n-1为素数的数n,求[2,21]范围内最大 的梅素尼数? #include #include main() {inti,j,flag; longk; for(i=21;i>=2;i--) {flag=1; k=pow(2,i)-1; for(j=2;j<=sqrt(k);j++) if(k%j==0){flag=0;break;} if(flag==1){printf("%d",i);break;} } } 19 1113 猴吃桃: 有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。 第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。 以后每天都是吃尚存桃子的一半零一个。 到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。 问小猴子第一天共摘下了多少个桃子。 #include main() {inti,s=1; for(i=9;i>=1;i--) s=2*(s+1); printf("%d",s); } 1534 若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。 例如: 由于7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。 若把所有“四位双平方数”按升序排列,求前10个“四位双平方数”的和。 #include #include main() {intn=0,i,a,b,c,d,f; longs=0; for(i=1000;i<=9999;i++) {a=(int)(i/1000); b=(int)((i-a*1000)/100); c=(int)((i-a*1000-b*100)/10); d=i%10; f=a+b+c+d; if((int)(sqrt(i))==sqrt(i)&&(int)sqrt(f)==sqrt(f)) {n=n+1;s=s+i;printf("%5d",i);} if(n==10)break; } printf("\n%ld",s); } 29690 已知数列: 1,2,4,7,11,16,…,其规律是相邻两项之差依次是1,2,3,4,5,…。 求100以内最小的自然数n使得此数列的前n项之和大于800。 #include main() {ints=0,n=0,t=1; while (1) { t=t+n; s=s+t; if(s>800){break;printf("%d",s);} elsen++; } printf("\n%d",n); } 16 某些分数的分子和分母都是二位正整数的真分数具有下列特点: 如果将该分数的分子的两位数字相加作分子,而将该分数的分母的两位数字相加作分母,得到的新分子跟原分子相等。 例如,63/84=(6+3)/(8+4)。 试求所有具有这种特点的真分子(非约简真分数)的分子与分母之和的和。 10134 数列: E (1)=E (2)=1 E(n)=(n-1)*E(n-1)+(n-2)*E(n-2)(n>2) 称为E数列,每一个E(n),(n=1,2,…)称为E数。 求[1,30000]之内E数的个数。 #include #include main() {intcount=2,n=3; longE1=1,E2=1,E3; while (1) {E3=(n-1)*E2+(n-2)*E1; If(E3>30000)break; Else{count++;printf(“%5d”,E3); E1=E2; E2=E3; n++; } printf(“%d”,count); } 8 求[200,300]之间第二大有奇数个不同因子的整数(在计算因子个数时,包括该数本身)。 256 已知A #include #include main() {inta,b,min=3000; for(a=1;a<=(int)sqrt(2698);a++) for(b=(int)sqrt(2698);b<=2698;b++) if(a*b==2698&&a+b printf("%d",min); } 109 已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。 43 一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。 如13,试求所有两位绝对素数的和。 429 若某整数平方等于某两个正整数平方之和的正整数称为弦数。 例如: 由于3^2+4^2=5^2,则5为弦数,求[100,199]之间最大的弦数。 197 下面的程序是求表达式的值: s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*......*n)/(3*5*7*......(2*n+1)) 请将程序补充完整,并给出当n=28时,程序的运行结果(按四舍五入保留10位小数) 程序: #include #include #include doublefun(intn) {doubles,t;inti; s=1.0; t=1.0; for(i=1;i<=n;i++) {t=t*i/(2*i+1); s=s+t; } returns; } main() {printf("\n%12.10lf",fun(28)); } 1.5707963262 aaa.c 100、(A,B)满足条件A是素数,B是素数,A+B的和也是一个素数,又777>B>A>=2。 求这样的(A,B)中所有A+B的和是多少。 填空完成程序,然后运行程序得出正确结果。 (答案填程序运行结果,保留整数位) #include #include intsu(intx) {intj,k; k=sqrt(x); for(j=2;j<=k;j++) if(x%j==0){return(0);break;} if(j>k)return (1); } main() { intsum=0,a,b; for(a=3;a<=777;a++) {for(b=a+1;b<=777;b++) if(su(a)&&su(b)&&su(a+b)) {sum=sum+a+b;printf("%d%d",a,b);} } printf("\n%d",sum); } 99、下面的程序中,函数fun的功能是: 根据形参m,计算下面公式的值。 T=1/1! +1/2! +1/3! ...+1/m! 请改正程序中的错误,并运行改正后的程序。 当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。 程序: #include #include doublefun(intm) {doublefac,t=0.0; inti=1,j; for(i=1;i<=m;i++) {fac=1.0; for(j=1;j<=m;j++)fac=fac*i; t+=1.0/fac; } returnt; } main() {intm; clrscr(); printf("\n请输入整数: "); scanf("%d",&m); printf("%12.10lf\n",fun(m)); 46 自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差17-8=9都是平方数,则称8和17是自然数对(8,17)。 假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即: A<=100,B<=100,A<>B,A和B均不为0)的自然数对中A*B的积的和。 #include #include main() {doublesum=0.0; inta,b; for(b=1;b<=100;b++) for(a=b+1;a<=100;a++) if((int)(sqrt(a+b))==sqrt(a+b)&&(int)(sqrt(a-b))==sqrt(a-b)) {sum=sum+a*b;printf("%3d%3d",a,b); } printf("\n%f",sum); } 79492 若两个自然连续数乘积减1后是素数,则称此两个自然连续数为友数对,该素数称为友素数,例: 2*3-1=5,因此2与3是友数对,5是友素数,求[40,119]之间友素数对的数目。 #include #include main() {inti,n=0,j,m; longk; for(i=40;i<=118;i++) {k=i*(i+1)-1; m=sqrt(k); for(j=2;j<=m;j++) if(k%j==0)break; if(j>m){printf("%d%d",i,i+1);n++;} if(n%5==0)printf("\n"); } printf("\n%4d",n); } 30 已知S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+N),当N的值为50时,求S的值。 要求: 按四舍五入的方式精确到小数点后第四位。 #include #include main() {floats=0.0; intn,t=0; for(n=1;n<=50;n++) {t=t+n; s=s+1.0/t; } printf("%7.4f",s); } 1.9608 求S=1/2+2/3+3/5+5/8+……的前30项的和(注: 该级数从第二项开始,其分子是前一项的分母,其分母是前一项的分子与分母的和)。 要求: 按四舍五入的方式精确到小数点后第二位。 #include #include main() {floats=0.0,b=1.0,a=2.0,t; intn; for(n=1;n<=30;n++) {s=s+b/a; t=b+a; b=a; a=t; } printf("%7.2f",s); } 18.46 当n=50时,求下列级数和: S=1/(1*2)+1/(2*3)+…+1/(n*(n+1)) 要求: 按四舍五入的方式精确到小数点后第四位。 0.9804 编程求取: [121,140]之间的弦数的个数(若某正整数的平方等于另两个正整数平方之和,则称该数为弦数.例如: 3^2+4^2=5^2,因此5是弦数)。 #include #include main() {intn=0,i,j,k; for(i=100;i<=200;i++) {for(j=1;j<=i;j++) for(k=j+1;k<=i;k++) if(i*i==j*j+k*k){n++;printf("%3d,%3d,%3d",j,k,i); if(n%3==0)printf("\n"); } } clrscr(); printf("%d",n); } 8 求Y=1-1/2+1/3-1/4+1/5...前30项之和。 要求: 按四舍五入的方式精确到小数点后第二位。 0.68 (x,y,z)满足方程: x^2+y^2+z^2=55^2(注: 要求x>y>z),则(x,y,z)称为方程的一个解。 试求方程的整数解(包括负整数解)的个数。 #include #include main() {intn=0,x,y,z; for(z=-55;z<=55;z++) for(y=z+1;y<=55;y++) for(x=y+1;x<=55;x++) if(x*x+y*y+z*z==55*55&&x>y&&y>z){printf("%4d%4d%4d",x,y,z);n++; if(n%3==0)printf("\n"); } printf("\n%d",n); } 62 求方程9X-19Y=1,在|X|≤100,|Y|≤50内共有多少组整数解? 11 把一张一元钞票,换成一分、二分和五分硬币,每种至少11枚,问有多少种方案? #include voidmain() {intx,y,z,count=0; for(x=11;x<=100;x++;) {for(y=11;y<=50;y++;) {for(z=11;z<=20;z++) {if(x+2*y+5*z==100) printf(“x=%d,y=%d,z=%d”,x,y,z); count++; } } } printf(“thereare%dmethods”,count); } 13 12. 设S(n)=1-1/3+1/5-1/7+…1/(2n-1),求S(100)的值,要求S(100)按四舍五入方式精确到小数点后4位。 #include #include main() {floats=0.0; intn; for(n=1;n<=100;n++) s=s+pow((-1.0),(n-1))*1.0/(2*n-1); printf("%7.4f",s); } 34. 设S=1+1/2+1/3+…1/n,n为正整数,求使S不超过10(S≤10)的最大的n。 #include #include main() {floats=0.0; intn; for(n=1;s<=10;n++) s=s+1.0/n; printf("%d,%7.4f",n-2,s); } 12367 36 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。 试求所有这样的三位数中最大的一个是多少? #include #include main() {inti,ge,shi,bai; for(i=999;i>=100;i--) {ge=i%10; shi=i/10%10; bai=i/100; if(ge! =bai&&ge! =shi&&shi! =bai&&(ge*ge*ge+bai*bai*bai+shi*shi*shi==i)) {printf("%5d",i);break;} } } 407 41. 设某四位数的千位数字与十位数字的和等于百位数字与个位数字的积,例如,对于四位数: 9512,9+1=5*2,试问所有这样的四位数之和是多少? #include main() {longs=0; inti,n=0,ge,shi,bai,qian; for(i=1000;i<=9999;i++) {ge=i%10; shi=i/10%10; bai=(i-shi*10-ge)/100%10; qian=i/1000; if(qian+shi==bai*ge){n++;s=s+i;printf("%5d",i);} if(n%5==0)printf("\n"); } clrscr(); printf("%d,%ld",n,s); } 50 所谓回文数是从左至右与从右至左读起来都是一样的数字,如: 121是一个回文数。 编写程序,求出100-900之间的所有回文数的个数。 #include #include main() {inti,ge,bai,n=0; for(i=100;i<=999;i++) {ge=i%10; bai=i/100; if(ge==bai)) {printf("%5d",i);n++;} } printf("%5d",n); } 80 当m的值为50时,计算下列公式的值: T=1-1/2-1/3-1/4-…-1/m 要求: 按四舍五入的方式精确到小数点后第四位。 -2.4992 已知: f(n)=f(n-1)+2*f(n-2)-5*f(n-3),f(0)=1,f (1)=2,f (2)=3,求f(0)+f (1)+…f(30)。 -750874 求数学式1-1/2+1/3-1/4+1/5-1/6+…+1/99-1/100的值。 (按四舍五入方式精确到小数点后4位) 0.6882 求Y=1-1/2+1/3-1/4+1/5...前30项之和。 要求: 按四舍五入的方式精确到小数点后第二位。 0.68 当n=100时,计算S=(1-1/2)+(1/3-1/4)+……+(1/(2n-1)-1/(2n))的值。 . 要求: 按四舍五入的方式精确到小数点后第三位。 0.691 计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程C语言 编程 语言