编程C语言源程序代码.docx
《编程C语言源程序代码.docx》由会员分享,可在线阅读,更多相关《编程C语言源程序代码.docx(32页珍藏版)》请在冰点文库上搜索。
编程C语言源程序代码
已知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
把一张一元钞票,换成一分、二分和五分硬币,每种至少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
“完数”:
一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。
例如,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
下面的程序是求[200,800]之间最大的20个素数之和。
程序:
#include
#include
voidmain()
{intk=800,sum=0,n=0,j,yes;
while((k>=200)&&(n<20))
{yes=1;
for(j=2;j<=sqrt(k);j++)
if(k%j==0){yes=0;break;}
if(yes)
{printf(“%5d”,k);sum+=k;n++;
if(n%5==0)printf(“\n”);
}
k--;
}
printf("%d\n",sum);
}
14510
“同构数”:
所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如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<=1000;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=0;
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);}
11
A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。
求130B>C的倒勾股数有多少组。
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
猴吃桃:
有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。
第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。
以后每天都是吃尚存桃子的一半零一个。
到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。
问小猴子第一天共摘下了多少个桃子。
#include
main()
{inti,s=1;
for(i=9;i>=1;i--)
s=2*(s+1);
printf("%d",s);
}
1113
若一个四位正整数是另一个正整数的平方,且各位数字的和是一个
平方数,则称该四位正整数是“四位双平方数”。
例如:
由于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);
}
已知数列:
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);
}
1534
某些分数的分子和分母都是二位正整数的真分数具有下列特点:
如果将该分数的分子的两位数字相加作分子,而将该分数的分母的两位数字相加作分母,得到的新分子跟原分子相等。
例如,63/84=(6+3)/(8+4)。
试求所有具有这种特点的真分子(非约简真分数)的分子与分母之和的和。
29690
数列:
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);
}
10134
求[200,300]之间第二大有奇数个不同因子的整数(在计算因子个数时,包括该数本身)。
已知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+bprintf("%d",min);
}
8
已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。
256
一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。
如13,试求所有两位绝对素数的和。
109
若某整数平方等于某两个正整数平方之和的正整数称为弦数。
例如:
由于3^2+4^2=5^2,则5为弦数,求[100,199]之间最大的弦数。
429
下面的程序是求表达式的值:
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位小数)
程序:
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);
}
197
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));
#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
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);
}
若两个自然连续数乘积减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);
}
求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);
}
30
当n=50时,求下列级数和:
S=1/(1*2)+1/(2*3)+…+1/(n*(n+1))
要求:
按四舍五入的方式精确到小数点后第四位。
1.9608
编程求取:
[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);
}
18.46
求Y=1-1/2+1/3-1/4+1/5...前30项之和。
要求:
按四舍五入的方式精确到小数点后第二位。
0.9804
(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);
}
8
求方程9X-19Y=1,在|X|≤100,|Y|≤50内共有多少组整数解?
0.68
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);
}
11
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);
}
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;}
}
}
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);
}
12367
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);
}
407
当m的值为50时,计算下列公式的值:
T=1-1/2-1/3-1/4-…-1/m
要求:
按四舍五入的方式精确到小数点后第四位。
已知:
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)。
80
求数学式1-1/2+1/3-1/4+1/5-1/6+…+1/99-1/100的值。
(按四舍五入方式精确到小数点后4位)
-2.4992
求Y=1-1/2+1/3-1/4+1/5...前30项之和。
要求:
按四舍五入的方式精确到小数点后第二位。
-750874
当n=100时,计算S=(1-1/2)+(1/3-1/4)+……+(1/(2n-1)-1/(2n))的值。
.
要求:
按四舍五入的方式精确到小数点后第三位。
0.6882
计