二级C语言上机考题.doc

上传人:飞****2 文档编号:54376516 上传时间:2022-10-28 格式:DOC 页数:14 大小:761.50KB
返回 下载 相关 举报
二级C语言上机考题.doc_第1页
第1页 / 共14页
二级C语言上机考题.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《二级C语言上机考题.doc》由会员分享,可在线阅读,更多相关《二级C语言上机考题.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、填空题:一、数字题:1用函数指针指向要调用的函数,规定在_2_处使f指向函数f1,在_3_处使f指向函数f2。当调用正确时,程序输出:x1=5.,x2=3.,x1*x1+x1*x2=40.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_处使f指向函数f1,在_3_处使f指向函数f2。当调用正确时,程序输出:x1=5.,x2=3.,x1*x1+x1*x2=40.double fun(double x

2、, double y)if(i=1)return f1(x);else return f2(x,y); 3将形参n所指变量中各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:,新的数:为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所指变量中各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输

3、入一个数:,新的数为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所指变量中各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,输入一个数:,新的数为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*

4、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);x2=(-b-sqrt(disc)/(2*a);printf(x1=%6.2f,x2=%6.2fn,x1,x2);elsep=-b/(2*a);q=sqrt(f

5、abs(disc)/(2*a);printf(x1=%6.2f+%6.2f in,p,q);printf(x2=%6.2f-%6.2f in,p,q);7输出方程组A+B=56,A+2B=72的一组正整数解。结果是:A=40,B=16。main()int i,j;clrscr();for(i=0;i100; i+)for(j=0;j100; 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,

6、c,disc,x1,x2;clrscr();doprintf(Input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);disc=b*b-4*a*c;if(disc0)printf(disc=%fn Input again!n,disc);while(disc0);printf(*the result*n);x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(nx1=%6.2fnx2=%6.2fn,x1,x2);9判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。ch

7、ar *fun(int n)int g,s,b;g=n%10;s=n/10%10;b=n/100%10;if(g+b)=s)returnyes!;else returnno!;10输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-,结果为:。main()long int n;clrscr();printf(Enter the data;n);scanf(%ld,&n);printf(* the absolute value *n);if(n0)n=-n;printf(nn );printf(%ld, n);11计算如下公式的值。A1=1,A2=1/(1+A1),A3=

8、1/(1+A2),AN=1/(1+AN+1)若n=10,则应输出:0.。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.。double fun(double q)int n;double s;n=2;s = 2.0;while(s0f(x) =0 x=0 或 x=2 (x-1)/(x-2) x0float f(double x)if(x=0.0|x=2.0)ret

9、urn 0.0;else if(x0.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 i,n;long s=0,t=1;clrscr();printf(nInput n:n);scanf(%d,&n);for(i=1;i=n;i+)t=t*i;s=s+t;printf(1!+2!+3!.+%d!=%ldn,n,s);1

10、5计算Sn=1/1-1/3+1/5-1/7+1/(2n+1)的值。若n的值为15时,输出的结果是:S=0.,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);printf(S=%f N=%dn,s,n);16计算SN的值:SN=1/1+3/1+5/4+(2N-1)/(SN-1)当N50时,SN71.。double fun(int n)double s=1.0,s1=0.0;int k;f

11、or(k=2;k=n;k+)s1=s;s+=(2*k-1)/s1;return s;17计算S的值:s=13/31*35/53*57/75*(2k-1)2k+1/(2k+1)2k-1当k=5时,s=338.。double fun(int n)double s=1;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;i2*k+1;i+)f*=2*k-1;for(i=1;ie)s=s+k*x;k=k*(-1);t=2*i;x=(2*i+1)/(t*t);i+;return s;19求P的值p

12、=m!/(n!*(m-n)!)例如:m=11,n=4时,运行结果为330.。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)2例如,当形参N的值为10时,函数返回9.。double fun(int n)int i;double s,t;s=0;for(i=1;i=n;i+)t=2.0

13、*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-+(-1)n-1(2*n-1)*(2*n+1)/(2+n)2例如,当形参N的值为10时,函数返回-0.。double fun(int n)int i,k;double s,t;s=0;k=1;for(i=1;ie)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)

14、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,%dn,a,b,c);if(ab)max=a;else max=b;if(maxc) max=c;printf(max=%dn,max);25使从键盘上输入一个整数n,输出n对应的斐波那契数列。main()int i

15、,n=0;scanf(%d,&n);for(i=0;in;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(x999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。当n值为500时,各位数字之和为15的整数有:159、168、177共有26个。fun(int x)int n,s1,s2,s3,t;n=0;t=100;while(t=x)s1=t%10;s2=(t/10)%10;s3=t

16、/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)

17、printf(“%d”,t);n+;t+;return n;28打印出11000中满足:个位数字的立方等于其本身所有数。本题的结果为:1,64,125,216,729main()int i,g;clrscr();for(i=1;i1000;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;g10;g+)for (s=1;s10;s+)for(b=1;

18、b10;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(nInput two numbers:n);scanf(%d,%d,&n,&m);if(n=0&*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

19、f(nresult=%f,result);32计算两个自然数n和m(m10000)之间所有数的和(n和m从键盘输入)。例如:当n=1,m=100时,sum=5050main()int n,m;long sum;sum=0;printf(nInput n,mn);scanf(%d,%d,&n,&m);while(n=m)sum+=n;n+;printf(sum=%ldn,sum);33求k!(k0)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:);scan

20、f(%d,&n);for(i=1;iy)t=x;x=y;y=t;if(xz)t=z;z=x;x=t;if(yz)t=y;y=z;z=t;printf(*the result*n);printf(from small to big:%d %d %dn,x,y,z);36将十进制正整数m转换成k进制(2k9)数的数字输出。例如,若输入8和2,则应输出1000void fun( int m, int k )int aa20,i;for(i=0;m;i+ )aai=m%k;m/=k;for(;i;i-)printf(%d,aai-1);37求二分之一的圆面积,若圆的半径为19.527则输出为:s=59

21、8.。float fun ( float r )return 3.14159 * r * r /2.0;main( )float x;printf(Enter x:);scanf(%f,&x);printf(s=%fn ,fun(x);38读入一个整数k(2k10000),打印它的所有质因子若输入整数:3410,则应输出:2、5、11、31。IsPrime(int n)int i,m;m = 1;for(i=2;in;i+)if(!(n%i)m=0;break;return m ;main( )int j,k;printf( );scanf(%d,&k);printf();for( j = 2

22、; j 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)aj+=i;*n=j;main()int aa1000,n,k;fun(aa, &n );for(k=0;k= 2)&(n10)yes=1;for(j=2;j2)的素数的个数,素数的个数作为函数值返回。

23、int fun(int n)int i,j,count=0;printf();for(i=3;i=n;i+)for(j=2;j=i)count+;printf();return count;44求1100(不包括100)以内所有素数的平均值。最后结果为42.40。main()int i,j,n=0,flag;float aver=0;for(j=2;j100; j+)flag=1;for(i=2;ij; i+)if(j%i=0)flag=0;break;if(flag=1)n+;aver+=j;printf(nn average=%4.2f,aver/n);45用筛选法可得到2n(n10000

24、)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,int fun(int n)int a10000,i,j,count=0;for(i=2;i=n;i+)ai=i;i=2;while(in)for(j=ai*2;j=n;j+=ai)aj=0;i+;while(ai=0)i+;printf();for(i=2;i=n;i+)if(ai!=0)count+;printf();ret

25、urn count;46判断一个数是否为素数。该数是素数时,函数返回字符串:yes!,否则函数返回字符串:no!char *fun(int n)int i,m;m=1;for(i=2;i1)return(yes!);else return(no!);47寻找两个整数之间的的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。例如,输入6和21,则输出为:7,11,13,17 19,21。int fun(int n,int m,int bbN)int i,j,k=0,flag;for(j=n;j=m;j+)flag=1;for(i=2;ij;i+)if(j%i=0)flag=

26、0;break;if(flag=1)bbk+=j;return k;48甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒。例如,若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。#define OK(i,t,n) (i%t=0)&(i/tn)int fun(int t1,int t2,int t3,int t4,int n)int count,t,maxt=t

27、1;if(maxtt2)maxt=t2;if(maxtt3)maxt=t3;if(maxtt4)maxt=t4;count=1;for(t=1;tb)?(bc?b:(ac?c:a):(ac)?a:(bc)?c:b);return t;二、数组题:50删除w数组中下标为k的元素中的值。arrout(int *w,int m)int k;for(k=0;km;k+)printf(%d,wk);printf(n);arrdel(int *w,int n,int k)int i;for(i=k;in-1;i+)wi=wi+1;n-;return n;getindex(int n)int i;dopri

28、ntf(nEnter the index0=i%d:,n);scanf(%d,&i);while(in-1);return i;51从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun返回。当xx8=135,78,72,32,222,424,333,141,541时,bb6=787,232,222,424,333,141。int fun(int xx,int bb,int num)int i,n=0;int g,b;for(i=0;inum;i+)g=xxi%10;b=xxi/100;if(g=b) bbn+=xxi;return n;52从键盘输入一

29、组无符号整数并保存在数组xxN中,以整数结束输入,要求这些数的最大位数不超过位,编写函数从数组xx中找出个位和十位的数字之和大于的所有无符号整数,结果保存在数组yy中,个数由函数fun返回。当xx8=123,11,25,222,42,333,14,5451时,bb4=25,42,333,5451。int fun(int xx,int bb,int num)int i,n=0;int g, s;for(i=0;i5)bbn+=xxi;return n;53求一维数组xN的平均值,并对所得结果进行四舍五入(保留两位小数)。例如:当x10=15.6,19.9,16.7,15.2,18.3,12.1,

30、15.5,11.0,10.0,16.0,结果为:avg=15.。double fun(double x10)int i;long t;double avg=0.0;double sum=0.0;for(i=0;i10;i+)sum+=xi;avg=sum/10;avg=avg*1000;t=(avg+5)/10;avg=(double)t/100;return avg;54求出能整除x且不是偶数的各整数,并放在数组pp中,这些除数的个数由n返回。例如,若x的值为30,则有4个数符合要求,它们是1,3,5,15。void fun(int x, int pp, int *n)int i,j=0;f

31、or(i=1;i=x;i+=2)if(x%i)=0)ppj+=i;*n=j;main()int x,aa1000,n,i;printf();scanf(%d,&x);fun(x, aa, &n );for(i=0;in;i+)printf(%d,aai);printf(n);55求能整除x且是偶数的数,把这些数保存在数组bb中,并按从大到小的顺序输出。当x=20时,依次输出:20,10,4,2。void fun(int k,int bb)int i;int j=0;for(i=1;i=0;i-)printf(%d ,bbi);56在主函数中,从键盘输入若干个数放入数组x中,用0结束输入但不计入

32、数组。编写函数:输出数组元素中小于平均值的元素。例如:数组中元素的值依次为1,2,2,12,5,15,则程序的运行结果为1,2,2,5。void fun(int x,int n)double sum=0.0;double average=0.0;int i=0;for(i=0;in;i+)sum+=xi;average=sum/n;for(i=0;in;i+)if(xiaverage)if(i%5=0)printf(n);printf(%d,xi);57将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分段的人数存到b数组中:成绩为60到69的人数存到b0中,成绩为70到79的人数存到

33、b1,成绩为80到89的人数存到b2,成绩为90到99的人数存到b3,成绩为100的人数存到b4,成绩为60分以下的人数存到b5中。当a数组中的数据是:93、85、77、68、59、43、94、75、98。调用该函数后,b数组中存放的数据应是:1、2、1、3、0、2。void fun(int a,int b,int n)int i;for(i=0;i6;i+)bi=0;for(i=0;in;i+)if(ai60)b5+;else b(ai- 60)/10+;main()int i,a100=,b6;fun(a,b,9);printf(the result is: );for(i=0;i6;i+

34、)printf(%d ,bi);printf(n);58对a数组中n个人员的工资进行分段统计,各段的人数存到b数组中:工资为1000元以下的人数存到b0中,工资为1000到1999元的人数存到b1,工资为2000到2999元的人数存到b2,工资为3000到3999元的人数存到b3,工资为4000到4999元的人数存到b4,工资为5000到5999元的人数存到b5中。例如,当a数组中的数据为:900、1800、2700、3800、5900、3300、2400、7500、3800,调用该函数后,b中存放的数据应是:1、1、2、3、0、2。void fun(int a, int b, int n)i

35、nt i;for(i=0;i6;i+)bi=0;for(i=0;i=5000)b5+;else bai/1000+;main()int i,a100=,b6;fun(a, b, 9);printf(The result is: );for(i=0;i6;i+)printf(%d ,bi);printf(n);59从键盘输入学生的成绩,统计各分数段学生的人数。A类为90100分,B类为8089分,C类为7079分,D类为6069分,59分以下的为E类。当成绩为0时结束成绩的输入。例如,输入89,99,45,64,56,78,88,74,66,55,0。结果为A:1,B:2,C:2,D:2,E:3

36、main()float scoreN;int bb5;int grade,i=-1,n=0;char ch=A;printf(Input a score(0100);n);doi+;n+;printf(score%d=,i);scanf (”%f”,&scorei);while (scorei!=0);for(i=0;i5;i+)bbi=0;for(i=0;in-1;i+)grade=scorei/10;switch(grade)case 10:case 9:bb0+;break;case 8:bb1+;break;case 7:bb2+;break;case 6:bb3+;break;default:bb4+;for(i=0;i5;i+)printf(n%c:%d,ch+i,bbi);60删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:1,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁