欢迎光临散文网 会员登陆 & 注册

计算机二级C语言上机题库(三)

2021-02-28 08:56 作者:朝颜晚扶桑  | 我要投稿

填空题:

数字题

1、 用函数指针指向要调用的函数,规定在2处指向函数f1,在3处使f指向函数f2,当调用正确时,程序输出:

 X1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000

double fun(double a , double b)

{double (*f)(); double r1,r2;f=f1;r1=f(a);f=f2;

r2=(*f)(a,b);return r1+r2;}

2、 2用函数指针指向要调用的函数,规定在2处指向函数f1,在3处使f指向函数f2,当调用正确时,程序输出:

 X1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000

double fun(double  x , double  y)

{if(i= =1) return f1(x);

else return f2(x,y);}

3、 将形参n所指变量中各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量,例如,输入一个数:27638496,新的数:739

Void fun(unsigned long *n)

{ unsigned long x=0,I;int t;i=1;

while(*n){t=*n%10;if(t%2!=0){x=x+t*i;i=i*10;}*n=*n/10;}*n=x;}

4、 将形参n所指变量中各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输入一个数:27638496,新的数:64862

unsigned long fun(unsigned long n)

{ unsigned long x=0;int t;while(n){t=t%10;if(i%2= =0)x=10*x+t;n=n/10;}return x;}

5、 将形参n所指变量中各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,输入一个数:27638496,新的数:26846

unsigned long fun(unsigned long n)

{ unsigned long x=0,s,i;int t;s=n;i=1;while(s){t=s%10;if(i%2==0)x=x+t*i;i=i*10;}s=s/10;}return x;}

6、 求方程ax2+bx+c=0的根。例如,当a=1,b=2,c=1时,方程的两个根是:x1= -1.00,x2= -1.00

main()

{float a,b,c,disc,x1,x2,p,q;

scanf(%f,%,f,%f,&a,&b,&c);disc=b*b-4*a*c;clrscr();printf(******the result******\n);

If(disc>=0){x1=(-b+sqrt(disc))/(2*a); x1=(-b-sqrt(disc))/(2*a);printf(x1=%6.2f,x2=%6.2f\n,x1,x2);}

else{p=-b/(2*a);q=sqrt(fabs(disc))/(2*a);

printf(x1=%6.2f+%6.2f i\n,p,q);

printf(x2=%6.2f-%6.2f i\n,p,q);}}

7、 输出方程组A+B=56,A+2B=72的一组正整数解。结果是:A=40,B=16。

main()

{int i,j;clrscr();

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

for(j=0;j<100;j++) if(i+j= =56&&i+2*j= =72)printf(A=%2d,B=%2d,i ,j);}

8、 求方程ax2+bx+c=0的两个实数根。例如,当a=1,b=2,c=1时,方程的两个根是:x1= -1.00,x2= -1.00

main()

{ float a,b,c,disc,x1,x2,

clrscr();

do{printf(input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);disc=b*b-4*a*c;
if(disc<0)printf(disc=%f\ninput again!\n,disc)}

while(disc<0);printf(******the result******\n);

x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a);printf(\nx1=%6.2f\nx2=%6.2f,x1,x2);}

9、 判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”

Char *fun(int n)

{int g,s,b;g=n%10;s=n/10%10;b=n/100%10;if(g+b= =s)retrun yes!;else return no!;}

10、输入一个长整数,如果这个数是负数,则取它的绝对数,并显示出来。例如:输入:-3847652,结果为3847652

main()

{long int n;clrscr();pritntf(enter the data;\n);scanf(%ld,&n);printf(***the absolute value***\n);

if(n<0)n= -n;printf(\n\n);printf(%d,n);}

11、计算如下公式的值。A1=1,A2=1/(1+A1),A3=1/(1+A2)-------AN=1/(1+AN+1)若n=10,则应输出:0.618056

 float fun(int n)

 {float A=1;int i;for(i=1;i<=n;i++)A=1.0/(1+A);return A;}

12、计算并输出下列数的前N项之和SN,直到SN+1大于q为止。SN=2/1+3/2+4/3+------N+1/N例如,q的值为50.0,则函数的值为50.416687。

 double fun(double q)

{int n;double s;n=2;s=2.0;while(s<=q){s=s+(double)(n+1)/n;n++}printf(n=%d\n,n);return s;}

13、计算s=f(-n)+f(-n+1)+------+f(0)+f(1)+f(2)+------+f(n)的值,当n为5时,S的值为:10.407143(函数省略)。

float fun(double x)

{if(x= =0.0 || x= =2.0)return 0.0;else if(x<0.0) return (x-1)/(x-2);else return (x+1)/(x+2);}

double fun(int n)

{int i;double s=0.0,y;for(i=-n;i<=n;i++){y=f(1.0*i);s+=y;}return s;}

14、求1!+2!+3!+-------N!的和,若N=6则和为873。

main()

{int j,n;long s=0,t=1;

clrscr();

printf(\n input n:\n);scanf(%d,&n);

for(i=1;i<=n;i++){t=t*i;s=s+t;}printf(1!+2!+3!+-------+%d!=%ld\n,n,s);}

15、计算Sn=1/1-1/3+1/5-1/7+-------1/(2n+1)的值,当n的值为15时,输出的结果是:s=0.769788,N=15。

Void fun(float *sn,int n )

{int i,j=1;float s=0.0;for(i=0;i<=n;i++){s=s+j*1.0/(2*i+1);j*=-1;} *sn =s;}

main()

{int n=15;float s;fun(&s,n);}

16、计算SN的值:SN=1/1+3/1+5/4+------+(2N-1)/(SN-1),当N=50时,SN=71.433699

double fun(int n)

{double s=1.0,s1=0.0;int k;for(k=2;k<=n;k++){s1=s;s+=(2*k-1)/s1;}return s;}

17、计算SN的值:s=13/31*35/53*57/75*-----*(2k-1)(2k+1)/ (2k+1) (2k-1) 当k=5时,S=338.215158

double fun(int n)

{ double s=1.0;double f=0.0; double p=0.0;int i=0;int k;for(k=1;k<=n;k++){f=2*k-1;p=2*k+1;

for(i=1;i<2*k+1;i++)f*=2*k-1; for(i=1;i<=2*k-1;i++)p*=2*k+1;s*=f/p;}return s;}

18、计算下式:s=3/23-5/42+7/62+-----+(-1)n-1*(2*n+1)/(2n)2,直到(2*n+1)/(2n)2的绝对值小于等于10-3,并把计算的结果作为函数值返回。例如:若E的值为1E-3,函数值为0.551690.

double fun(double e)

{int i,k;double s,t,x;s=0;k=1;i=2;x=3/4;while(x>e){s=s+k*x;k=k*(-1);t=2*i;x=(2*i+1)/(t*t);i++}return s;}

19、求P的值p=m!/(n!*(m-n)!),例如:m=11,m=4时,运算结果为330.000000.

long jc(int m)

{long s=1;int i;for(i=1;i<=m;i++)s=s*i;return s;}

Float fun(int m,int n)

{float p;p=1.0*jc(m)/jc(n)/jc(m-n);return p;}

20、计算S的值:s=(1*3)/22+(3*5)/42+ (5*7)/62+-----(2*n-1)/(2*n+1)2,当形参N的值为10时,函数的返回值9.612558

double fun(int n)

{int i;double s,t;s=0;for(i=1;i<=n;i++){t=2.0*i;s=s+(2.0*i-1)* (2.0*i+1)/(t*t); }return s;}

21、计算S的值:s=(1*3)/22-(3*5)/42+ (5*7)/62------(2*n-1)/(2*n+1)2,当形参N的值为10时,函数的返回值-0.204491

double fun(int n)

{int i,k;double s,t;s=0;k=1;for(i=1;i<=n;i++){t=2*i;s=s+k*(2*i-1)* (2*i+1)/(t*t);k=k*(-1);}return s;}

22、计算下式:s=1/22+3/42+5/62+------(2N-1)/(2N)2

double fun(double e)

{int i;double s,x;s=0;i=0;x=1.0;while(x>e){i++;x=(2.0*i)/ ((2.0*i)* (2.0*i));s=s+x;}return s;}

23、判断某一个年份是否为闰年,例如,1900年不是闰年,2004是闰年。

int fun(int n)

{int flag=0;if(n%4= =0){if(n%100!=0)flag=1;}

if(n%400= =0)flag=1;return flag;}

24、从键盘输入3个整数,然后找出最大的数并输出。例如,输入12,45,43最大值为45

main()

{int a,b,c,max;clrscr();

printf(\ninput three numbers:\n);scanf(%d,%d,%d,&a,&b,&c);printf(%d,%d,%d,a,b,c);

if(a>b)max=a;else max=b;if(max<c)max=c; printf(max=%d\n,max);}

25、从键盘输入一个整数n,输出n对应的裴波那契数列。

main()

{inti,n=0;scanf(%d,&n);

for(i=0;i<=n;i++)printf(%d,fun(i));}

Int fun(int n)

{if(n= =0) return 0;else if(n= =1)return 1;

else return fun(n-1)+fun(n-2);}

26、找出100至x(x<999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。

当n值为500时,各位数字之和为15的整数有:159,168,177----共有26个。

fun(int x)

{intn,s1,s2,s3,t;n=0;t=100while(t<=x){s1=t%10;s2=(t/10)%10;s3=t/100;if(s1+s2+s3= =15){printf(%d,t);n++;}++t;}return n;}

27、找出100—999之间(含100和999)各位上的数字之和为X(X为一个正整数)的整数,然后输出。符合条件的整数个数作为函数值返回。当x值为5时,满足条件的数为:104,113,122,131,140,203,212,221,230,302,311,320,401,410,500----共有15个。

int fun(int x)

{int n,s1,s2,s3,t;n=0;t=100; while(t<=999){s1=t%10; s2=(t/10)%10;s3=t/100;if(s1+s2+s3= =x){printf(%d,t);n++;}t++;}

return n;}

28、打印出1~1000中满足:个位数字的立方等于其本身所有数。本题结果为:1,64,125,216,729

main()

{int i,g,clrscr();for(i=1;i<1000;i++){g=i%10;if(g*g*g= = i)printf(%4d,i);}}

29、打印出满足个位的数字,十位上的数字和百位上的数字都相等的所有三位数。本题的打印结果为:111,222,333,444

555,666,777,888,999

main()

{int g,s,b; clrscr();for(g=1;g<10;g++)for(s=1;s<10;s++) for(b=1;b<10;b++){if(g= =s&&s= =b)printf(%5d,g+s*10+b*100);}}

30、求两个正整数m和n的最大公约和最小公倍数

main()

{int a,b,n,m,t; clrscr();printf(\n input two numbers:\n);scanf(%d,%d,&n,&m);if(n<m){a=m;b=n;}else{a=n;b=m;}

While(b!=0){t=a%b;a=b;b=t}printf(greatest common divisor:%d\n,a);printf(leas common multiple:%d\n,n*m/a);}

31、从键盘输入只有两个整数参与运算的一个四则运算式,然后计算出它的值。注意数字全部为正整数。例如:输入

308*28,结果为8624.000000

main()

{int a=0,b=0,flag=1,fg=1;

float result;char *p,ch;

char str[10];clrscr();

printf(\n input a string \n);gets(str);p=str;

while(*p){if(*p>=0&&*p<=9&&flag= = 1)a=a*10+*p –‘0;else if(fg){ch=*p ;flag=2;fg=0;}

if(*p>=0&&*p<=9&&flag= = 2) b=b*10+*p –‘0;p++;}

switch(ch)

{case +:result=a+b;break;  case-: result=a-b;break;  case*: result=a*b;break;  case/: result=(float)(a/b);break;}

Print (\n result=%f,result);}

32、计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入),例如:n=1,m=100时,sum=5050

main()

{int n,m;long sum;sum=0;printf(\n input n,m\n);

scanf(%d,%d,&n,&m);

while(n<=m){sum+=n;n++;}printf(sum=%ld\n,sum);}

33、求k!(k<13)并通过函数名传回主函数。例如:若k=0,输出3628800.

long fun(int k)

{if(k>0)return(k*fun(k-1));else if(k= =0)return 1L;}

34、求n!,例如:7!=5040

main()

{int i,n;long f=1;printf(input n:);scanf(%d,&n);

for(i=1;i<=n;i++)f*=i;printf(%d!=%ld\n,n,f);}

35、把从键盘输入的3个整数按从小到大输出,若输入33,78,25则输出25,33,78

main()

{int x,y,z,t;clrscr();

printf(input x,y,z\n);

scanf(%d%d%d,&x,&y,&z);if(x>y){t=x;x=y;y=t;} if(x>z){t=z;z=x;x=t;}

if(y>z){t=y;y=z;z=t;}printf(******the result******\n);printf(from small to big:%d%d%d\n,x,y,z);}

36、将十进制正整数m转换成k进制(2k9)数的数字输出,例如:若输入8和2,则应输出1000

Void fun(int m,int k)

{int aa[20],i;for(i=0; m;i++){aa[i]=m%k;m/=k;}for(;i;i--;i++)printf(%d,aa[i-1]);}

37、求二分之一圆的面积,若圆的半径为19.527,则输出为:s=598.950017。

float fun(float r)

{return 3.14159*r*r/2.0;}

main()

{float x;printf(enter x:);scanf(%f,&x);printf(s=%f\n,fun(x));}

38、读入一个整数k(2k10000)打印它们所有质因子,若输入的整数3410,则应输出:2,5,11,31

Isprime(int n)

{int i,m;m=1;for(i=0;

i<n;i++)if(!(n%i))

{m=0;break;}return m;}

main()

{int j,k;printf(------);

scanf(%d,&k);printf(-----);for(j=2;j<=k;j++)if(!(k%j))&&(isprime(j))printf(\n%4d,j);printf(\n);}

39、计算并输出n(包括n)以内能被3或7整除的所有自然数的倒数之和,例如当n为32后,输出为s=1.226323

double fun(int n)

{int i;double sum=0.0;if(n>0&&n<=100){for(i=1;i<=n;i++)if(i%3= = 0|| i%7= = 0)sum+=1.0/i;}return sum;}

40、求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数放在数组a中,通过n返回这些数的个数

Void fun(int *a,int *n)

{int i,j=0;for(i=1;i<=1000;i++)if(((i%7= =0)||(i%11= =0))&&i%77!=0)a[j++]=i;*n=j;}

Main()

{int aa[1000],n,k;fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10= =0)printf(\n);else printf(%5d,aa[k]);}

41、统计长整数n的各个位上出现数字1,2,3,的次数,并通过外部(全局)变量c1,c2,c3返回主函数,当n=123114350,结果应该:c1=3,c2=1,c3=2。

Void fun(long n)

{ c1=c2=c3=0;while(n)

{switch(n%10)

{case 1:c1++;break; case 2:c2++;break; case 3:c3++;}n/=10;}}

42、计算并输出high以内最大的10个素数之和,若high的值为100,则函数的值为732。

int fun(int high)

{int sum=0,n=0,j,yes;

while((high>=2)&&(n<10)){yes=1;for(j=2;j<=high/2;j++)if(high%j= =0){yes=0;break;}

if(yes){sum+=high;n++}high--;}return sum;}

43、统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。

int fun(int n)

{int i,j,count=0;printf(----);for(i=3;i<=n;i++)

{for(j=2;j<i;j++)if(i%j= = 0)break;

If(j>=i){count++;printf(-----);}}return count;}

44、求1~100(不包含100)以内所有素数的平均数。最后结果为42.40.

Main()

{int i,j,n=0,flag,float aver=0;j=2;

for(j=;j<100;j++){flag=1;for(i=2;i<j;i++)if(j%i= =0){flag=0;break;}

If(flag= =1){n++;aver+=

j;}}printf(\n\n average=%4.2f,aver/n);}

45 、用筛选法可得到2~n(n<10000)之间所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去

( 把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数,以此类推,直到所找的下一个数等于n为止,这样会得到一个序列:2,3,5,7,11,13,17,19,23-----

Int fun(int n)

{int a[10000],i,j,count=0;

for(i=2;i<=n;i++)a[i]=i;i=2;

While(i<n){for(j=a[i]*2;j<=n;j+=a[i])a[j]=0;i++;while(a[i]= =0)i++;}printf(“”);

For(i=2;i<=n;i++)if(a[i]!=0){count++;printf(---);}

46、判断一个数是否为素数,该数是素数时,函数返回字符串:yes!,否则返回no!

Char *fun(int n)

{int i,m;m=1;

for(i=2;i<=n;i++)if(n%i= =0){m=0;break;}if(m= =1&&n>1)1)return (yes!);else return (no!);}

47、寻找两个整数之间的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。例如,输入6和21,则输出为:7,11,13,17,19,21.

Int fun(int n,int m,int bb[N])

(int i ,j,k=0,flag; for(j=n;j<=m;j++){flag=1;for(i=2;i<j;i++)if(j%i= =0){flag=0;break;}if(flag= =1)bb[k++]=j;}return k;)

48、甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响只算一次响声,第一次响声是在第0秒。例如,若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。

#difine ok(i,t,n) ((i%t= =0)&&(i/t<n))

Int fun(int t1,int t2,int t3,int t4,int n)

{int count ,t,maxt=t1;if(maxt<t2)maxt=t2; if(maxt<t3)maxt=t3; if(maxt<t4)maxt=t4;count=1;

for(t=1;t<maxt*(n-1);t++){if(ok(t,t1,n))|| if(ok(t,t2,n))|| if(ok(t,t3,n))|| if(ok(t,t4,n))count++;}return count;}

49、从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时中数为4.

int fun(int a,int b,int c)

{int t;t=(a>b)?(b>c)?b:a>c?c:a))((a>c?a:((b>c?c:b));return t;}


计算机二级C语言上机题库(三)的评论 (共 条)

分享到微博请遵守国家法律