C语言程序设计第三版习题库答案 下载本文

【程序1】

#include main(){

int i,m,n,k;

for(i=100;i<1000;i++){ m=__i__;

n=_ i/10__; k=i/100;

if(__m*m*m+n*n*n+k*k*k==i__) printf(\} }

【程序2】

#include main(){ int i,a,n,s;

for (i=100;i<=999;i++){ n=i;s=0; while(n>0) { a=__n__; s+=a*a*a; n /=__10__; }

if (__s==i__) printf(“%d”,i); }

10、一个数如果恰好等于它的因子之和,这个数就称为\完数\。例如,6的因子为1、2、3,而6=1+2+3,因此6是\完数\。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3

#include main() { int a,i,m;

for (a =1; a<=1000;a++) {

for (__i=1,m=0__; i <= a/2;i++) if (!(a%i)) __m+=i__; if (m==a) printf(“M”,a); } }

11、利用:?/4=1-1/3+1/5-1/7+….级数求?的值,直到最后一项的绝对值小于10-6为止。求绝对值的函数为fabs()。

#__include__ #include main(){

int i=1,flag=1; double sum=0.0,s; do{

s=__1.0/(2*i-1)__;

sum+=s*flag; i++;

__flag=-flag__;

}while(__fabs(s)>1e-6__);/**/ printf(\4*sum__); }

11、有一分数序列:2/1,3/2,5/3, 求出这个数列的前20项之和。 #include #define N 20 main(){ int i=1;

double x=1,y=2, sum=0; while(__i<=20__) {

sum=sum+__y/x__; y = ___x+y__; x = __y-x__; i++;

}

printf(\}

12、一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高? #include main(){ int i,n=10;

double h=100,s=100; for(i=2;i<=n;i++){

h*=__0.5__;

s=__s+h*2__; }

printf(\}

13、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 #include #define N 10 main(){

int i=1,sum=1; while(i++

sum=__(sum+1)*2__;

printf(\}

14、用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include

#include main(){

float x0,x1,a; scanf(\x1=a/2; do{

x0=x1;

x1=__(x0+a/x0)/2__; } while(__x1>1e-5__); printf(\}

15、用牛顿迭代法求方程2x3?4x2?3x?6?0在1.5附近的根。 #include #include ____

#define f(x) 2*x*x*x-4*x*x+3*x-6 main(){

double x,y;x=__1.5__; do{

y = f(x);

x = x - y/(6*x*x-8*x+3); } while(fabs(y)>1e-6); printf(\}

3216、用二分法求方程2x?4x?3x?6?0在(-10,10)之间的根

#include #include

#define f(x) 2x*x*x-4*x*x+3*x-6 main(){

double x1=-10,x2=10,x,y; do{

x=(x1+x2)/2; y=f(x); if(y<0) x1=x; else x2=x;

}while(fabs(y)>1e-6); printf(\}

17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如 输入75,输出 C。请完成填空

#include main(){ int score;

scanf(\%d__\

switch(__score/10__){ case 1:case 2:case 3:case 4:case 5:

printf(“grade E\\n”); ___break__; case 6: printf(“grade D\\n”);break; case 7: printf(“grade C\\n”);break; case 8: printf(“grade B\\n”);break; case 9: printf(“grade A\\n”);break; __default__:printf(\ } }

18、该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。 #include #include

#define f(x) x*x-5*x+sin(x) void main(){

int x; float max; __max=f(1)__;

for(x=2;x<=10;x++)

__if(max

19、程序功能:输入整数a和b的值,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 #include main(){ int a,b,s;

scanf(\ s=__a*a+b*b__;

if(s>100) printf(\s/100__); else printf(\a+b__); }

20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。 #include main(){

int day,x1,x2; day=0;x1=1020; while(__x1>0__){

x2=__x1/2-2__; x1=x2; day++} printf(“day=%d”,day); }

21、找出整数的所有因子 #include main(){ int i,x;

scanf(“%d”,&x); i=1;

for ( ; __i<=x/2__;){

if (x%i==0) printf(%d”,i); i++;

} }

22、统计用数字0-9可以组成多少个各位上的数字没有重复的3位偶数。 #include main(){

int n=0,i,j,k;

for (i = 1;i <= 9;i++)

for (k = 0;k <= 8; __k+=2__) if (k != i)

for (j = 0;j <= 9;j++) if (__j!=i&&j!=k__) n++; printf(“n=%d\\n”,n); }

23、用100元换成1、2、5元的所有兑换方案。 #include main() {

int i,j,k,l=0;

for (i = 0; i<=20;i++) for (j =0; j<=50; j++) { k= __(100-i-2*j)/5__; if (__i+j*2+k*5==100__){

printf(“- - -”,i,j,k); l = l + 1;

if (l%5==0) printf(“\\n”); } } }

24、输出1-100之间满足每位数的乘积大于每位数的和的数 #include main() {

int n,k=1,s=0,m;

for (n=1; n<=100; n++) { k=1; s=0; __m=n__;

while (__m>0__) { k *=m; s+=m; ___m/=10__; }

if (k>s) printf(“%d”,n); }

25、从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。 #include main() { int i,j,k;

for (i=0;i<=3;i++)