自考资讯

导航

自学考试《C语言程序设计》复习试题及答案

来源 :中华考试网 2017-01-31

  【4.46】分析:二分法的基本原理是,若函数有实根,则函数的曲线应当在根这一点上与x轴有一个交点,在根附近的左右区间内,函数值的符号应当相反。利用这一原理,逐步缩小区间的范围,保持在区间的两个端点处的函数值符号相反,就可以逐步逼近函数的根。

  参考答案:

  #include "stdio.h"

  #include "math.h"

  main()

  { float x0, x1, x2, fx0, fx1, fx2;

  do

  { printf("Enter x1,x2:");

  scanf("%f,%f", &x1, &x2);

  fx1=2*x1*x1*x1-4*x1*x1+3*x1-6; /* 求出x1点的函数值fx1 */

  fx2=2*x2*x2*x2-4*x2*x2+3*x2-6; /* 求出x2点的函数值fx2 */

  }while (fx1*fx2>0); /* 保证在指定的范围内有根,即fx的符号相反 */

  do

  { x0=(x1+x2)/2; /* 取x1和x2的中点 */

  fx0=2*x0*x0*x0-4*x0*x0+3*x0-6; /* 求出中点的函数值fx0 */

  if((fx0*fx1)<0) /* 若fx0和fx1符号相反 */

  { x2=x0; /* 则用x0点替代x2点 */

  fx2=fx0;

  }

  else

  { x1=x0; /* 否则用x0点替代x1点 */

  fx1=fx0;

  }

  }while(fabs((double)fx0)>=1e-5); /* 判断x0点的函数与x轴的 距离 */

  printf("x=%6.2f\n", x0);

  }

  【4.47】分析:做圆的内接4边形,从圆心和4边形顶点连接形成4个三角形,可以求出每个三角形的面积(r2/2)现在我们知道三角形的面积和两个边长(均为半径a=r、b=r),可以用公式:S=s(s-a)(s-b)(s-c)求出第三边c。我们将内接4边形换为内接8边形,原来的三角形被一分为二,故c/2就是每个三角形的高,面积又是可以求出的。再将三角形一分为二,……。当三角形的面积求出时,内接多边形的面积就可求出。

  参考答案:

  main()

  { int n=4;

  double r=10,s,cr,c,p;

  s=r*r/2;

  do

  { cr=n*s;

  p=16*r*r*r*r-64*s*s;

  c=(4*r*r-sqrt(p))/2;

  c=sqrt(c);

  s=c*r/4;

  n=2*n;

  }while(n*s-cr>1.0e-10);

  printf("PAI=%lf\n",cr/r/r);

  }

  【4.48】分析:根据题意,总计将所有的鱼进行了五次平均分配,每次分配时的策略是相同的,即扔掉一条后剩下的鱼正好分为五份,然后拿走自己的一份,余下其它四份。假定鱼的总数为x,则x可以按照题目的要求进行五次分配:x-1后可被5整除,余下的鱼为4×(x-1)÷ 5。若x满足上述要求,则x就是题目的解。

  参考答案:

  main( )

  { int n,i,x,flag=1; /* flag:控制标记 */

  for(n=6;flag;n++) /* 采用试探的方法,令试探值n逐步加大 */

  { for(x=n,i=1;flag && i<=5;i++) /* 判断是否可按要 */

  if((x-1)%5 == 0) x=4*(x-1)/5; /* 求进行5次分配 */

  else flag=0; /* 若不能分配则置标记flag=0退出分配过程 */

  if(flag) break; /* 若分配过程正常,找到结果,退出试探的过程 */

  else flag=1; /* 否则继续试探下一个数 */

  }

  printf("Total number of fish catched = %d\n", n); /* 输出结果 */

  }

  【4.49】分析:按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。

  参考答案:

  #include "math.h"

  main()

  { int i,j,k,c;

  for(i=1;i<=9;i++) /* i:车号前二位的取值 */

  for(j=0;j<=9;j++) /* j:车号后二位的取值 */

  if( i!=j ) /* 判断两位数字是否相异 */

  { k=i*1000+i*100+j*10+j; /* 计算出可能的整数 */

  for( c=31;c*c

  if(c*c==k)

  printf("Lorry_No. is %d .\n", k); /* 若是,打印结果 */

  }

  }

  【4.50】分析:用穷举法解决此类问题。设任取红球的个数为i,白球的个数为j,则取黑球的个数为8-i-j, 据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黑球的个数取值应为8-i-j<=6。

  参考答案:

  main( )

  { int i,j,count=0;

  printf(" RED BALL WHITE BALL BLACK BALL\n");

  printf("------------------------------------------\n");

  for(i=0;i<=3;i++) /* 循环控制变量i控制任取红球个数0~3 */

  for(j=0;j<=3;j++) /* 循环控制变量j控制任取白球个数0~3 */

  if((8-i-j)<=6)

  printf("%2d: %d %d %d\n",++count, i,j,8-i-j);

  }

  【4.51】分析:此题采用穷举法。

  参考答案:

  main()

  { int x,y,z,j=0;

  for(x=0; x<=33; x++)

  for(y=0; y<=(100-3*x)/2; y++)

  { z=100-x-y;

  if( z%2==0 && 3*x+2*y+z/2==100)

  printf("%2d:l=%2d m=%2d s=%2d\n",++j,x,y,z);

  }

  }

  【4.52】分析:此题采用穷举法。

  参考答案:

  main( )

  { int f1,f2,f5,count=0;

  for(f5=0;f5<=20;f5++)

  for(f2=0;f2<=(100-f5*5)/2;f2++)

  { f1=100-f5*5-f2*2;

  if(f5*5+f2*2+f1==100)

  printf("No.%2d >> 5: %4d 2: %2d 1: %2d\n",++count,f5,f2,f1);

  }

  }

  【4.53】分析:此题采用穷举法。

  参考答案:

  main( )

  { long int i,j,k,count=0;

  for(i=1;i*i<=200;i++)

  for(j=1;j*j<=200;j++)

  for(k=1;k*k<=200;k++)

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

  { printf("\nA^2==B^2+C^2: %4ld%4ld%4ld",i,j,k);

  count++;

  }

  printf("\ncount=%ld",count);

  }

  【4.54】分析:此题采用穷举法。可设整数N的千、百、十、个位为i、j、k、m,其取值均为0~9,则满足关系式:(i*103+j*102+10k+m)*9=(m*103+k*102+10j+i) 的i、j、k、m即构成N。

  参考答案:

  #include

  main( )

  { int i;

  for(i=1002;i<1111;i++) /* 穷举四位数可能的值 */

  if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9 )

  printf("The number satisfied states condition is: %d\n", i);

  /* 判断反序数是否是原整数的9倍若是则输出 */

  }

  【4.55】分析:此题采用穷举法。

  参考答案:

  main()

  { int i,j,n,k,a[16]={0};

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

  { n=i;k=0;

  while(n>0) /* 将十进制数转变为二进制数 */

  { a[k++]=n%2;

  n=n/2;

  }

  for(j=0;j

  if(a[j]!=a[k-j-1]) break;

  if(j>=k)

  { printf(" %d: ",i);

  for(j=0;j

  printf("%2d",a[j]);

  printf("\n");

  }

  }

  }

  【4.56】分析:类似的问题从计算机算法的角度来说是比较简单的,可以采用最常见的穷举法解决。程序中采用循环穷举每个字母所可能代表的数字,然后将字母代表的数字转换为相应的整数,代入算式后验证算式是否成立即可解决问题。

  参考答案:

  #include

  main( )

  { int p,e,a,r;

  for(p=1;p<=9;p++) /* 从1到9穷举字母p的全部可能取值 */

  for(e=0;e<=9;e++) /* 从0到9穷举字母e的全部可能取值 */

  if(p!=e)

  for(a=1;a<=9;a++) /* 从0到9穷举字母a的全部可能取值 */

  if(a!=p && a!=e)

  for(r=0;r<=9;r++) /* 从0到9穷举字母r */

  if(r!=p && r!=e && r!=a /* 四个字母互不相同 */

  && p*1000+e*100+a*10+r-(a*100+r*10+a)

  == p*100+e*10+a )

  { printf(" PEAR %d%d%d%d\n", p, e, a, r);

  printf(" - ARA - %d%d%d\n", a, r, a);

  printf("-------- ---------\n");

  printf(" PEA %d%d%d\n", p, e, a);

  }

  }

  【4.57】参考答案:

  main()

  { int i,n,k,a[3],b[3];

  for(i=248;i<=343;i++)

  { for(n=i,k=0;n>0;n/=7)

  a[k++]=n%7;

  for(n=i,k=0;n>0;n/=9)

  b[k++]=n%9;

  if(k==3)

  for(n=0;n

  if(a[n]!=b[k-n-1])

  break;

  if(n==k)

  printf("%d\n",i);

  }

  }

  【4.58】参考答案:

  main()

  { int i,j,k,m,error;

  for(i=6;i<=2000;i+=2)

  { error=1;

  for(j=2;j

  { for(k=2;k

  if(j%k==0) /* j能够被小于它的一个数整除就不是素数 */

  break;

  if(k>=j) /* j是素数 */

  { m=i-j;

  for(k=2;k

  if(m%k==0)

  break;

  if(k>=m) /* m也是素数,输出结果 */

  { printf("%4d = %4d + %4d\n",i,j,m);

  error=0;

  break; }

  }

  }

  if(error)

  printf("%4d error!");

  }

  }

  【4.59】分析:可采用穷举法,依次取1000以内的各数(设为i),将i的各位数字分解后,据阿姆斯特朗数的性质进行计算和判断。

  参考答案:

  #include

  main()

  { int i,t,k,a[4]={0};

  printf ("There are following Armstrong number smaller than 1000:\n");

  for(i=2;i<1000;i++) /* 穷举要判定的数i的取值范围1~1000 */

  { for(t=0,k=1000;k>=10;t++) /* 截取整数i的各位(从高位向低位) */

  { a[t]=(i%k)/(k/10);   /* 分别赋给a[0]~a[3] */

  k /= 10;

  }

  if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]+a[3]*a[3]*a[3]==i)

  printf(" %d ",i); /* 判断i是否为阿姆斯特朗数,*/

  /* 若满足条件,则输出 */

  }

  }

  【4.60】参考答案:

  main( )

  { int j,k,n,m;

  printf("Please enter n:");

  scanf("%d",&n);

  for(j=2;j

  { for(k=2;k

  if(j%k==0) break; /* j能够被小于它的一个数整除就不是素数 */

  if(k>=j) /* j是素数 */

  { m=n-j;

  for(k=2;k

  if(m%k==0) break;

  if(k>=m) /* m也是素数,输出结果 */

  { printf("%4d = %4d + %4d\n",n,j,m);

  break;

  }

  }

  }

  }

分享到

您可能感兴趣的文章