if(a%b==0)
c=0;
if(c)
d++;}
printf("%d",d);
}
11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。
答案:
110
#include
main()
{inta,b=0,c,d,e;
for(a=1000;a<=9999;a++)
{c=a/1000;
d=a%1000/100;
e=a%1000%100/10;
if(a%8==0&&c+d==d+e)
b++;}
printf("%d",b);
}
12、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。
下列程序的功能是求出该数列前10项的和。
请改正程序中的错误,并运行修改后的程序,给出程序结果。
(注:
只有一处错误!
)*/
答案:
311
#include
voidmain()
{
longsum=0,a[30]={1,2,1};
intk,j;
for(k=3;k<10;k++)
a[k]=a[k-1]+a[k-2]+a[k-3];
for(j=0;j<=10;j++)
sum+=a[j];
printf("%ld\n",sum);
}
13、/*求1到2000之间的双胞胎数的对数。
双胞胎数:
两素数差为2称为双胞胎数。
例如227和229是一对双胞胎数,它们都是素数且差为2。
*/答案:
61
#include
intprime(intx)//定义函数prime
{
intk;
for(k=2;kif(x%k==0)break;//判定是a否为素数
if(k==x)return1;
elsereturn0;
}
voidmain()
{inta,b,n=0;
intprime(intx);//函数声明
for(a=2;a<=1998;a++)
{
if(prime(a)==1)//函数调用
{b=a+2;
if(prime(b)==1)n++;//判定b是否为素数,并计算素数个数
}
}
printf("%d\n",n);
}
14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。
答案:
4
#include
voidmain()
{
inta,b,c,d,n=0;
for(a=200;a<=400;a++)
{b=a/100;
c=a%100/10;
d=a%100%10;
if(c*b*d==42&&(b+c+d==12))
n++;
}
printf("%d\n",n);
}
15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?
答案:
9
#include
voidmain()
{
inta,b,c,n=0;//定义学生人数为变量
for(a=1;a<=30;a++)
for(b=1;b<=30;b++)
for(c=1;c<=30;c++)
{if((3*a+2*b+c==50)&&(a+b+c==30))
n++;
}
printf("%d\n",n);
}
16、爱因斯坦走台阶:
有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?
答案:
119
#include
voidmain()
{
inta=1;
while(a)
{if(a%2==1&&a%3==2&&a%4==3&&a%5==4&&a%6==5&&a%7==0)
break;
a++;
}
printf("%d\n",a);
}
17、/*求1000以内最大的10个素数的和。
*/答案:
9946
#include
intprime(longn)//定义函数,判断是否为素数
{
longk;
for(k=2;k<=n-1;k++)
if(n%k==0)
return0;//是素数
return1;//不是素数
}
voidmain()
{
longt,total=0,num=0;
intprime(longn);//函数声明
for(t=1000;t>=2;t--)
{
if(prime(t)==0)
{
total=total+t;
num++;
}
if(num==10)break;
}
printf("\n%ld",total);
}
18、/*求1!
+2!
+3!
+...+7!
,7!
表示7的阶乘。
*/答案:
5913
#include
longjc(longx)
{
longk,fac=1;
for(k=1;k<=x;k++)
fac*=k;
returnfac;
}
voidmain()
{
longn,sum=0;
longjc(longx);
for(n=1;n<=7;n++)
sum+=jc(n);
printf("\n%ld",sum);
}
19、求10000以内所有完数之和,"完数"是指:
一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:
6=1+2+3,则6就是一个完数。
(注:
所有变量用int数据类型定义!
)答案:
8658
#include
voidmain()
{
longa,b,c,d,e=0;
for(a=2;a<=10000;a++)
{c=0;
d=0;
for(b=1;b<=a-1;b++)
if(a%b==0)
{c=b;
d+=c;
}
if(d==a)
e+=d;
}
printf("%ld",e);
}
20、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。
下列程序先给出数列的第一项
(1)、第二项
(2)、第三项
(1),再逐步计算其它项并保存在数组a中,最后求出该数列的第25项。
请改正程序中的错误,并运行修改后的程序,给出程序结果。
(注:
只有一处错误!
)*/答案:
1323525
#include
#include
#defineN30
voidmain()
{
longa[N];
intk;
a[0]=1;a[1]=2;a[2]=1;
for(k=3;k<=24;k++)
a[k]=a[k-1]+a[k-2]+a[k-3];
printf("%ld\n",a[k-1]);
}
21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。
*/答案:
87970
#include
inthws(longn)
{
longx=n,t=0,k;
while(x>0)
{
k=x%10;
t=t*10+k;
x=x/10;
}
if(n==t)return1;
elsereturn0;
}
voidmain()
{
longk,s=0;
inthws(longn);
for(k=200;k<=3000;k++)
if(hws(k))
s=s+k;
printf("\n%ld",s);
}
22、/*下面的程序是求表达式的值:
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=25时,程序的运行结果(按四舍五入保留10位小数)。
*/答案:
1.5707963267
#include
doublefun(intn)
{
doubles=1.0,t=1.0;
intk;
doublertn=1.0;
for(k=1;k<=n;k++)
{
t=t*k;
s=s*(2*k+1);
rtn=rtn+t/s;
}
returnrtn;
}
voidmain()
{intn;
scanf("%d",&n);
doublesum;
doublefun(intn);
sum=fun(n);
printf("\n%.10lf",sum);
}n=30时,答案。
。
23、已知:
Sn=2/1+3/2+4/3+…+(n+1)/n,求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。
答案:
49.395
#include
doublefun(intn)
{
doubles=1.0,t=1.0;
intk;
doublertn=0.0;
for(k=1;k<=n;k++)
{
t=k+1;
s=k;
rtn=rtn+t/s;
}
returnrtn;
}
voidmain()
{intn;
scanf("%d",&n);
doublesum;
doublefun(intn);
sum=fun(n);
printf("\n%.3lf",sum);
}54.499
24、计算Y=X/1!
-X^3/3!
+X^5/5!
-X^7/7!
+……前20项的值(已知:
X=2)。
要求:
按四舍五入的方式精确到小数点后第二位。
答案:
0.91
#include
#include
voidmain()
{
doubles,b,i,k,p,d,o;
o=1;
p=0;
k=1;
for(i=1;i<=41;i=i+2)
{s=1;
for(b=1;b<=i;b++)
s=s*b;
d=pow(2,i)*pow(-1,++o);
p=p+d/s;
}
printf("%.2f",p);
}
25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。
例:
3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。
答案:
135
#include
#include
voidmain()
{doubled,i,e,n=0;
for(i=131;i<=200;i++)
for(d=1;d<=200;d++)
for(e=1;e<=200;e++)
{if(dif(pow(i,2)==pow(d,2)+pow(e,2))
{
printf("%.0f\n",i);
n++;
}
if(n)
break;
}
}
26、已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。
答案:
43
#include
#include
voidmain()
{
doubled,i,e,n,k=0;
for(i=25;i>=1;i--)
for(d=25;d>=1;d--)
for(e=25;e>=1;e--)
{if(dif(pow(i,2)+pow(d,2)+pow(e,2)==625)
{n=i+d+e;
printf("%.0f\n",n);
k++;
}
if(k)
break;
}
}
27、猴吃桃:
有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。
第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。
以后每天都是吃尚存桃子的一半零一个。
到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。
问小猴子第一天共摘下了多少个桃子。
答案:
1534
#include
voidmain()
{doublei,n,k=1;
for(i=9;i>=1;i--)
{n=2*(k+1);
k=n;
}
printf("%.0f\n",n);
}
28、求[1,50]之间的所有整数能构成直角三角形的三边的组数。
例如:
3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。
答案:
20
#include
#include
voidmain()
{
doubled,i,e,k=0;
for(i=50;i>=1;i--)
for(d=50;d>=1;d--)
for(e=50;e>=1;e--)
if(dif(pow(e,2)==pow(d,2)+pow(i,2))
k++;
printf("%.0f\n",k);
}
29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?
输出所有的兑换方法。
答案:
18种
#include
voidmain()
{doubled,i,e,k=0;
for(i=15;i>=0;i--)
for(d=15;d>=0;d--)
for(e=15;e>=0;e--)
if(5*i+2*d+e==15)
{k++;
printf("%.0f%.0f%.0f%.0f\n",i,d,e,k);
}
}
30、用迭代法求x等于a开平方的正数值。
迭代公式为:
xn+1=1/(2*(xn+a/xn)),要求直到前后两次求出的x的差的绝对值小于10-5为止。
A的值从键盘输入。
#include
#include
voidmain()
{
doublei;
inte;
doublehan(inta);
scanf("%d",&e);
i=double(e);
printf("%f",i);
}
doublehan(inta)
{doublef2,f1=?
?
?
k,t;
t=0;
for(k=1;k>0;k++)
{if(t{f2=1/(2*(f1+a/f1));
t=f2-f1;
f1=f2;
}
elsebreak;
}
returnf1;
31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。
答案:
407
#include
#include
voidmain()
{inta,b,c,d;
for(a=999;a>=100;a--)
{b=a/100;
c=a%100/10;
d=a%10;
if(pow(b,3)+pow(c,3)+pow(d,3)==a)
{printf("%d\n",a);
break;
}
}
}
32、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少米?
第10次反弹多高?
答案:
299.6093750.097656
#include
#include
voidmain()
{floatb,a=100,c,s;
s=100;
for(c=1;c<=10;c++)
{b=a/2;
a=b;
}
printf("%f\n",a);
s=100;
b=0;
a=100;
for(c=1;c<=9;c++)
{b=a/2;
s=s+b*2;
a=b;
}
printf("%f\n",s);
}
33、编写程序,完成如下功能,输入8个float类型的实数,分别求最大值和最小值,保留三位小数输出最大值和最小值。
#include
voidmain()
{floatj,k,max,min;
inti;
floata[8];
for(i=0;i<=7;i++)
scanf("%f",&a[i]);
min=max=a[0];
k=j=0;
for(i=0;i<=7;i++)
{if(max{max=a[i];
j=i;}
else
if(min>a[i])
{min=a[i];
k=i;
}
}
printf("%f,%f",min,max);
}
34、编写程序输出如下字符图形:
@@@@@@@@@@@
@@@@@@@@@@
…
@@
@
#include
voidmain()
{inta,b;
for(b=1;b<=11;b++)
{for(a=12-b;a>=1;a--)
printf("@");
printf("\n");}
}
35、计算:
s=f(-30)+f(-29)+......+f(-1)+f(0)+f
(1)+......+f(30)的值。
其中函数定义如下:
f(x)=(x+1)/(x-2)如果x>1;f(