知ing

大学C/C++语言程序设计基础(第2版)

阳小华,马淑萍 著 / 电子工业出版社

冥沙 上传

查看本书

习题5答案

一、选择题

1-10     CDABC   DABDC

11-20    DDDBD   B(AC)CDC   17题有2个答案AC

 

二、写出下列程序的运行结果

1.  64202.  2 03.  54.   ACEG

5.  ###6. 2,4,6,8,107. 46.0

8. 8 5 29. asDhEF10. 12,72

三、编程题(参考答案)

1.利用近似公式π的值,直到最后一项的绝对值小于10-6为止。

#include<stdio.h>

#include<math.h>

main()

{  double pi=0,i=1,j=1,k;

   do

{

    k=i/j;

 pi=pi+k;

 i=-i;

    j=j+2;

 }while (fabs(k)>1.0e-6);

   printf("pi is %lf",4*pi);

}

 

2.输入一行字符,分别统计出其中英文字母、数字、空格的个数。

#include<stdio.h>

main()

{  char t;

int n1=0,n2=0,n3=0;

do

 {scanf("%c",&t);

 if(t=='\n')break;

 else

   {if((t>='A'&&t<='Z')||(t>='a'&&t<='z')) n1++;

    if(t==' ')n2++;

    if(t>='0'&&t<='9') n3++;

   }

  }while(1);

   printf("字符个数为:%d ,空格个数为:%d ,数字个数为:%d",n1,n2,n3);

 }

3.3个红球、5个白球、6个黑球中任意取出6个球,且其中必须有白球,编程输出所有可能的组合

 

#include<stdio.h>

main()

{

int i,j,k;

  printf("\n hong bai hei\n");

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

    for(j=1;j<=5;j++)

    {  k=6-i-j;

       if(k>=0) printf(" %3d %3d %3d\n",i,j,k);

    }

}

 

4.如果一个数等于其所有真因子(不包括该数本身)之和,则该数为完数。例如:6的真因子有1、2、3,且6=1+2+3,故6为完数。求[2,1000]内的:

1)最大的完数;   (2)完数数目。

#include<stdio.h>

main()

{ int a,i,m,number=0,max=0;

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

 {  m=0;

for(i=1;i<=a/2;i++)

    if(a%i==0) m=m+i;

 if(m==a) { number++, max=m;}

  }

  printf("number is %d, max is %d\n", number, max);

}

 

习题6答案

一、选择题

1D     2A     3A      4C     5B     6B     7C

8B     9B    10C    11B    12B    13A    14B

15C    16C    17C    18D    19A    20B    21C

22B    23C    24A    25C    26D    27C    28D

 

二、写出下列程序的运行结果

17          2t=7531         31 3 6      4817        55  6

688       73  6  9  12    810        93918   

1064  54   11-20            1215       132        14.y=923

 

三、编程题(以下各题均用函数实现)

1.超级素数:一个素数依次从低位去掉一位、两位……若所得的数依然是素数,如239就是超级素数。试求100~9999之内:

1)超级素数的个数;

2)所有超级素数之和;

3)最大的超级素数。

解:(1spn=30        2sps=75548      3spm=7393

#include<stdio.h>

#include<math.h>

main()

{ int i,s=0,k=0,m,max=100;

  for(i=9999;i>=100;i--)

  {  m=i;

 while(m>1)

 if(fun(m))m=m/10;

 else break;

 if(m<=0)

     {

 if(max<i) max=i;

 k++;

 s=s+i;

 }

  }

  printf("超级素数的个数为:%5d,所有超级素数之和为:%5d,最大的超级素数为%5d\n",k,s,max);

}

int fun(int n)

{

  int k,i;

  k=sqrt(n);

  for(i=2;i<=k;i++)

    if(n%i==0)break;

  if(i>=k+1)return 1;

  else return 0;

 }

 

2.其平方等于某两个整数平方和的正整数称为弦数,例如因52=32+42,故5是弦数,求(121130)这间的弦数个数以及最大和最小的弦数。

解:n=4          max=130        min=122

参考程序1(用函数方法实现)

#include<stdio.h>

main()

{

  int k,maxnum,minnum;

  k=count(121,130);

  maxnum=max(121,130);

  minnum=min(121,130);

  printf("弦数的个数为:%d,最大的弦数为:%d,最小的弦数为:%d\n",k,maxnum,minnum);

}

 

int count(int m,int n)

{ int i,j,k,t=0,flag;

  for(i=m;i<=n;i++)

  {   flag=0;

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

       for(k=j;k<i;k++)

  if(i*i==j*j+k*k)

  {

flag=1;

printf("%4d,%4d,%4d\n",j,k,i);//显示出不重复的弦数的组合情况

           }

  if(flag==1)t++;

}

  return t;

}

 

int min(int m,int n)

{ int i,j,k,t=0;

  for(i=m;i<=n;i++)

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

      for(k=j;k<i;k++)

  if(i*i==j*j+k*k)

  {

printf("最小的弦数为:%4d\n",i);

            return i;

  }

 }

int max(int m,int n)

{ int i,j,k,t=0;

  for(i=n;i>=m;i--)

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

      for(k=j;k<i;k++)

  if(i*i==j*j+k*k)

  {

printf("最大的弦数为:%4d\n",i);

            return i;

  }

}

 

3有一个8灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数

解:384

#include <stdio.h>

main( )

{

  int i,t;

  t=fun(8);

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

 t=t*2;

  printf("t=%d\n",t);

}

int fun(int m)

{

  int i,j,n=1,sum;

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

  {   sum=i;

      n=i;

  for(j=1;j<m;j++)

  {  n=n*2;

        sum=sum+n;

  }

  if(sum==765)  break;

   }

  return i;

}

4编写程序,求的结果。

解:4037913

参考程序1

#include <stdio.h>

main( )

{

  int i;

  long s=0;

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

  s=s+fun(i);

  printf("s=%ld\n",s);

}

 

long fun(int n)

{

  int j;

  long t=1;

  for(j=1;j<=n;j++)

  t=t*j;

  return t;

}

参考程序2(递归算法)

#include <stdio.h>

main( )

{

  int i;

  long s=0;

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

  s=s+fun(i);

  printf("s=%ld\n",s);

}

 

long fun(int n)

{

  long t;

  if(n==1)t=1;

  else t=n*fun(n-1);

  return t;

}

5已知y =其中f(x, n) = 1 - x2 / 2! + x4 / 4! - (-1)nx2n /  (2n)!n0x = 5.6n = 7y的值。

0.007802

#include<stdio.h>

double fun(double x,int n)

{

  int i,t=1,m=1;

  double s=1.0,w=1.0;

  for(i=1;i<=2*n;i++)

  {    

  w=w*x;

  t=t*i;

  if(i%2==0)

  { m=-m;s=s+m*w/t;}

  }

  return s;

}

main()

{

double x=5.6;

int n=7;

double p,q,t,s;

p=fun(x,n);

q=fun(x+2.3,n);

t=fun(x-3.2,n+3);

    s=p/(q+t);

printf("%lf\n",s);

}

6编写程序求三个数的最小公倍数。

#include<stdio.h>

int fun(int x,int y,int z)

{   int j,t,m,n;

j=1;

t=j%x;

m=j%y;

n=j%z;

while(t!=0||m!=0||n!=0)

{   j=j+1;

    t=j%x;

m=j%y;

n=j%z;

}

return j;

}

main()

{

int x1,x2,x3,j;

printf("Input x1   x2   x3: ");

scanf("%d%d%d",&x1,&x2,&x3);

printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);

j=fun(x1,x2,x3);

printf("The minimal common multiple is: %d\n",j);

}

 

7.已知:编写程序,求S的值。

例如,当k10时,S的值应为:1.533852

#include<stdio.h>

double fun(int k)

{

int n;

double s,w,p,q;

n=1;

s=1.0;

while(n<=k)

{   w=2.0*n;

    p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

}

return s;

}

main()

{

printf("%f\n",fun(10));

}

 


查看更多