《C语言程序设计》复习题库答案Word下载.docx
《《C语言程序设计》复习题库答案Word下载.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》复习题库答案Word下载.docx(39页珍藏版)》请在冰点文库上搜索。
3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。
编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。
所有变量用long数据类型定义!
)答案:
1533459
longf(longx)
longs=0;
if(x%2!
=0)
{
while(x>
0)
{
s=s+x%10;
x=x/10;
}
if(s%15==0)return1;
elsereturn0;
}
elsereturn0;
longf(longx);
longi,sum=0;
for(i=1000;
=9999;
if(f(i))
sum=sum+i;
sum=%ld\n"
sum);
4、下面程序的功能是:
计算并输出700以内的最大的10个能被13或者17整除的自然数之和。
请改正程序中的错误,并运行,最后给出程序运行的正确结果。
只有一处错误!
6591
{
inttotal=0,mc=1,k=700;
//改为:
inttotal=0,mc=0,k=700;
intpm[10],count=0;
while((k>
=2)&
&
mc<
=10)
{
if((k%13==0)||(k%17==0))
pm[mc]=k;
mc++;
}
k--;
for(k=1;
k<
=10;
k++)
total+=pm[k-1];
%d\n"
total);
5、求x=1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。
math.h>
#include<
main()
inti;
doublex;
x=1;
i=5;
do
x=x+1/(double)i;
i=i+2;
}while(fabs(1/(double)i)>
1e-5);
%.2lf\n"
x);
输出:
6.058
6、计算如下公式的A20值。
A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......(按四舍五入保留10位小数)。
答案:
0.6180339850
(1)可用递归:
1n=1
F(n)=
1/(1+f(n-1))n>
1
doublef(doublen)
doublea;
if(n==1)a=1;
elsea=1.0/(1+f(n-1));
returna;
doublef(doublen);
f(20)=%.10lf\n"
f(20));
(2)不用递归:
doublei,c,a=1,b=1,x;
20;
c=a;
a=b;
b=c+b;
x=a/b;
x=%.10lf\n"
7、求[10,1600]之间能被7整除的奇数之和。
90965
(1)用函数可写成:
intjx(intx)
=0)return1;
intf(intx)
if(jx(x))
if(x%7==0)return1;
intjx(intx);
intf(intx);
inti,s=0;
for(i=10;
=1600;
if(f(i))s=s+i;
s=%d\n"
s);
(2)不用函数可写成:
if(i%2!
=0&
i%7==0)s=s+i;
8、函数mystrlen(char*s)的功能是求字符串s的长度。
请填空。
intmystrlen(char*s)
{intnum=0;
while(*s++!
='
\0'
){_num++_;
return(num);
}
9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。
1042
inti,sum=0;
for(i=100;
=500;
if(i%7==5&
i%5==3&
i%3==1)
sum=sum+i;
sum=%d\n"
10、求[100,999]之间所有的素数的个数。
143
intsushu(intx)
for(i=2;
x;
if(x%i==0)break;
if(i==x)return1;
intsushu(intx);
inti,num=0;
=999;
if(sushu(i))
num++;
num=%d\n"
num);
11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。
110
inta,b,c,d;
a=x/1000;
b=x/100%10;
c=x/10%10;
d=x%10;
if(a+b==b+c)return1;
return0;
if(i%8==0)
if(f(i))num++;
12、数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。
下列程序的功能是求出该数列前10项的和。
请改正程序中的错误,并运行修改后的程序,给出程序结果。
)
答案:
311
longsum=0,a[30]={1,2,1};
intk,j;
for(k=3;
10;
a[k]=a[k-1]+a[k-2]+a[k-3];
for(j=1;
j<
j++)
sum+=a[j];
sum+=a[j-1];
%ld\n"
13、/*求1到2000之间的双胞胎数的对数。
双胞胎数:
两素数差为2称为双胞胎数。
例如227和229是一对双胞胎数,它们都是素数且差为2。
*/答案:
61
intprime(intx)
intk;
for(k=2;
k++)
if(_x%k==0_)break;
if(k==x)return1;
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++;
%d\n"
n);
14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。
4
inta,b,c;
for(i=200;
=400;
a=i/100;
b=i/10%10;
c=i%10;
if(a*b*c==42&
a+b+c==12)
15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?
9
intnum=0;
inti,j,k;
//i为大学生人数,j为中学生人数,k为小学生人数
=30;
for(j=i;
j++)
for(k=30-i;
if(i*3+j*2+k*1==50)
num++;
16、爱因斯坦走台阶:
有一台阶,如果每次走两阶,最后剩一阶;
如果每次走三阶,最后剩两阶;
如果每次走四阶,最后剩三阶;
如果每次走五阶,最后剩四阶;
如果每次走六阶,最后剩五阶;
如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?
119
intx;
for(x=1;
;
x++)
if((x%2==1)&
(x%3==2)&
(x%5==4)&
(x%6==5)&
(x%7==0))
{printf("
%d\n"
break;
17、求1000以内最大的10个素数的和。
9664
intprime(longn)
longk;
=n-1;
if(__n%k==0__)return0;
return1;
}
longt,total=0,num=0;
intprime(longn);
for(t=1000;
t>
=2;
t--)
if(_prime(t)__)
total=total+t;
num++;
if(num==10)break;
\n%ld"
18、/*求1!
+2!
+3!
+...+7!
,7!
表示7的阶乘。
5913
longjc(longx)
longk,fac=1;
for(k=1;
_k<
=x__;
fac*=k;
_returnfac__;
longn,sum=0;
longjc(longx);
for(n=1;
n<
=7;
n++)
_sum=sum+jc(n)_;
19、求10000以内所有完数之和,"
完数"
是指:
一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:
6=1+2+3,则6就是一个完数。
所有变量用int数据类型定义!
8658
intws(intx)
if(x%i==0)
s=s+i;
if(s==x)return1;
intws(intx);
=10000;
if(ws(i))
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
conio.h>
#defineN30
longa[N];
clrscr();
a[0]=1;
a[1]=2;
a[2]=1;
=20;
k++)//改为:
for(k=3;
=24;
a[k-1]);
21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。
87970
inthws(longn)
longx=n,t=0,k;
while(x>
k=x%10;
t=t*10+k;
x=x/10;
if(_t==n__)return1;
longk,s=0;
inthws(longn);
for(k=200;
k<
=3000;
if(_hws(k)__)
s=s+k;
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
doublefun(intn)
doubles=1.0,t=1.0;
doublertn=1.0;
=n;
k++)
t=t*k;
s=s*(2*k+1);
rtn=rtn+t/s;
____
returnrtn;
doublesum;
_sum=fun(25);
_
\n%.10lf"
23、已知:
Sn=2/1+3/2+4/3+…+(n+1)/n,求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。
49.395
doublefun()
doublet=0,s=0;
doublen;
t=t+(n+1)/n;
if(t>
50)
break;
s=t;
returns;
%.3lf\n"
fun());
24、计算Y=X/1!
-X^3/3!
+X^5/5!
-X^7/7!
+……前20项的值(已知:
X=2)。
要求:
按四舍五入的方式精确到小数点后第二位。
0.91
doublea,b,x,y;
x=2;
y=x;
a=x;
b=1;
a=-a*x*x;
b=b*2*i*(2*i+1);
y=y+a/b;
y);
25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。
例:
3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。
135
intxs(intx)
inti,j;
for(j=1;
if(i*i+j*j==x*x)
return1;
inti,j,x,flag=0;
x=131;
for(x=131;
x<
=200;
if(xs(x))
printf("
break;
26、已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。
43
intx,y,z,max,sum;
max=0;
for(x=1;
=25;
for(y=1;
y<
y++)
for(z=1;
z<
z++)
{
if(x*x+y*y+z*z==25*25)
sum=x+y+z;
if(sum>
max)max=sum;
}
max=%d\n"
max);
27、猴吃桃:
有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。
第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。
以后每天都是吃尚存桃子的一半零一个。
到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。
问小猴子第一天共摘下了多少个桃子。
1534
floatx,i,t;
t=x;
for(i=1;
t=t-(t/2+1);
if(t==1)break;
%f\n"
28、求[1,50]之间的所有整数能构成直角三角形的三边的组数。
例如:
3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。
20
inti,j,k,num=0;
=50;
for(k=j;
if(i*i+j*j==k*k)
29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?
输出所有的兑换方法。
18种
inti,j,k,num=0,t=0;
for(i=0;
=15;
for(j=0;
for(k=0;
if(i*1+j*2+k*5==15)
t++;
30、用迭代法求x等于a开平方的正数值。
迭代公式为:
xn+1=1/(2*(xn+a/xn)),要求直到前后两次求出的x的差的绝对值小于10-5为止。
A的值从键盘输入。
{floatx0,x,a;
a);
do{
x0=x;
x=1.0/2*(x0+a/x0);
}while(fabs(x-x0)>
=1e-5);
31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。
407
intflower(intn)
{intx=0,i,j,k;
i=(n%10);
j=(n/10%10);
k=(n/100);
x=i*i*i+j*j*j+k*k*k;
if(x==n)return1;
inti,max=0;
if(flower(i)&
i>
max)