一、选择题
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);
}
一、选择题
1.D 2.A 3.A 4.C 5.B 6.B 7.C
8.B 9.B 10.C 11.B 12.B 13.A 14.B
15.C 16.C 17.C 18.D 19.A 20.B 21.C
22.B 23.C 24.A 25.C 26.D 27.C 28.D
二、写出下列程序的运行结果
1.7 2.t=7531 3.1 3 6 4.8,17 5.5 6
6.8,8 7.3 6 9 12 8.10 9.39,18
10.64 54 11.-20 12.15 13.2 14.y=923
三、编程题(以下各题均用函数实现)
1.超级素数:一个素数依次从低位去掉一位、两位……若所得的数依然是素数,如239就是超级素数。试求100~9999之内:
(1)超级素数的个数;
(2)所有超级素数之和;
(3)最大的超级素数。
解:(1)spn=30 (2)sps=75548 (3)spm=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是弦数,求(121,130)这间的弦数个数以及最大和最小的弦数。
解: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)!(n≥0),当x = 5.6,n = 7时,求y的值。
解: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的值。
例如,当k为10时,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));
}