全国二级c语言100套上机真题.docx

上传人:无*** 文档编号:87073167 上传时间:2023-04-16 格式:DOCX 页数:278 大小:386.04KB
返回 下载 相关 举报
全国二级c语言100套上机真题.docx_第1页
第1页 / 共278页
全国二级c语言100套上机真题.docx_第2页
第2页 / 共278页
点击查看更多>>
资源描述

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

1、001请补充函数fun,函数fun的功能是求n的阶乘。注意:部分源程序给出如卜。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表 达式或语句。试题程序:#include long fun(int n)if( 1)retum(n*fun( 2);return 3;void main()printf( 10!=%ldnfun(l 0);1 nl 或 ll和n=l这两种情况的处理方法不同,需 要分开考虑。填空2:阶乘的算法是,当nl时,n! =n*(n-l)!,即:fun(n)=n*fun(n-l)。填空 3: n=l是递归的终止条件,返回值为E下列给定程序中,函

2、数fun的功能是:分别统计字符串中大写字母和小写字母的个数。例如, 给字符串 s 输入:AaaaBBb 123CCccccd,则应输出结果:upper=5, lower=9 请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include/*found*/ void fun(char *s,int a,ini b)while(*s)/* 亭 found */if(*s=A, & *s=a & *sv=z)b+;s+;)main()(chars100;int upper=0,lower=0;printf(np

3、iease a string :H);gets(s);fun(s,&upper,&lower);printf(n upper=%d lower=%dnH,upper,lower);(1)错误:void fun( char *s, int a, int b)正确:void fun(char *s, int *a, int *b)(2)错误:a+;正确:(*a)+;(3)错误:b+;正确:(*b)+;【解析】(1)根据题中程序可以看出,函数fun传递的是地址,那么在函数中就应该出现指 针,所以改为void fun (char *s ,int *a, int *b)。(2)和(3)很明显,这里是要累

4、加数值,因 为a、b是指针变量,所以是错误的。请编写一个函数void fun(charpp),统计在tt字符串中”a“到“ z26个字母各自出现的次数,并依次放在pp所指数组中。例如:当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:333221 11000000 0000000000000注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干 语句。试题程序:#include #include #include void fun(char pp) void main()(FILE *wf;char aa1000;in

5、t bb26, k;system(MCLS);printf(nPlease enter a char string : ); scanf(n%sn,aa);fun(aa,bb);for (k=0 ;k26 ; k+)printf(H%d M,bbk);printf(Mn );wf=fopen(out.dat,wM);fun (nabcdefgabcdeabcM,bb);for (k=0 ;k26 ; k+)fprinlf(wf,d ”,bbk);fclose(wf); void fun(char*tt,int pp)(int i;for(i=0;i=,a,&*tt=,z,)pp*tt-a+;/

6、*将tt字符串中H到N26个字母各自出现的次数,依次放在pp数组中,任一个小写字母减去宜后所得结果正好是它对应的下标*/【解析】第1个循环的作用是初始化数组pp,未经赋值变量的量为一个不确定数字。由于 它要将a到Z 26个字母的个数依次放到数组pp中。即丁的个数存于pp0中,b,的个数存 于ppl中,的个数存于pp中,依次类推。而葭-0,的值正好为0,的值为1,ca,的值为2,,依此类推。即任一个小写字母减去T后所得结果正好是它对应的下标, 所以就有了 pp*tta+。但*tt必须是小写字母,即if()不应省略。002请补充函数fun,它的功能是:计算并输出n(包括n)以内所有能被3或7整除的

7、自然数的倒 数之和。例如,在主函数中从键盘给n输入30后,输出为:s= 1.226323。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表 达式或语句。试题程序:#includedouble fun(int n)int i;double sum=0.0;for (i= 1 1 ; i+) if(i%3=0_ 2 _i%7=0) sum+=_ 3 _/i;return sum;)main()(int n;double s;printf(HnInput n: ); scanf(d”,&n);s=fun(n);printf(nns=%fn

8、u, s);1 i=n 2 II 【3】1.0 或(double) 1【解析】填空1:本题要求找出n(包括n)以内满足条件的自然数,所以,i的取值范围是从 1到n,填空2: i能被3整除,也就是指,i除以3的余数为0,题中的条件是能被3或7 整除,所以使用逻辑或运算符11。填空3:需要注意,如果71运算符两边都是整型数,则结 果也是整型数。因为i为整型数,如果将i的倒数写为1/i,则结果为0,所以在求倒数时, 要使用1。,而不是1,或者将变量i强制类型转化为double型。下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值。t=l-l/(2x2)-l/(3x3)-.-

9、l/(mxm)请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include double fun(int m) double y=1.0;int I;/*found*/ for(I=2;Im;I+)/*found*/y-=l/(I*I);retum(y);void main() int n=5;system(CLS);printf(nThe result is %lfn, fun(n);(1)错误:for(I=2; Im; I+) 正确:for(I=2; I=m; I+)(2

10、)错误:y-=l/(l*I);正确:y-=1.0/(I*I);【解析】该题是一道简单的计算题,循环条件for(I=2;km;I+)中忽略了 i=m时的一种情况, 因为题目中I是从2到m的一个计算公式。y-=l/(l*);的错误很明显,是语法错误,由定义 double y= 1.0 可知,应该是 y-=L0/(I*I);,而非 y-=l/(I*I);。请编写一个函数void fun(int m, int k, int xx),该函数的功能是:将大于整数m且紧靠m的 k个素数存入所指的数组中。例如,若输入17, 5,则应输出19, 23, 29, 31, 37。注意:部分源程序给出如下。请勿改动m

11、ain函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干 语句。试题程序:#include #include #include void fun(int m, int k, int xx) void main()(int m,n,zz1000;system(,CLS,);printf(nPlease enter two integers:);scanf(,%d%dM,&m,&n);fun(m, n, zz);for(m=0;mn;m+)printf(M%d M,zzm);printf(Hn ); void fun(int m, int k, int xx)(int i,j,n

12、;for(i=m+1 ,n=0;nk;i+)/*找大于 m 的素数,循环 k 次,即找出紧靠m的k个素数*/for(j=2;j=i)/*如果是素数,放入数组xx中*/ xxn+=i;【解析】本题只要掌握了判断素数的算法就不难完成了,其实程序缺少部分也正是这部分。003给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一 的圆面积(注:圆面积公式为:S=nr2,在程序中定义的变量名要与公式的变量相同)。例如,输入圆的半径值:19.527,输出为:s=598.949991。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仪在横线上填入所编写的若干表

13、达式或语句。 试题程序:#include double fun(double r)(return 3.14159*_ 1 _/2.0;Imain()(double x;printf(Enter x:);scanf(%ir,_ 2 J;printf(S=%lfn,fun(_ 3 _);1 r*r 2 &x 3 x【解析】填空1:计算圆的面积,面积公式:S=FIr*r。填空2: scanf一般形式为scanf (格 式控制,地址表列),因此填入&x。填空3:送入函数的参数是圆的半径X。下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。t=l + l/2+l/3+l/4+.+ l/m

14、例如,若输入5,则应输出2.283333。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include double fun(int m)double t=1.0;int I;for(I=2;I=m;I+)/* *found */ t+=l.O/k;/* * *fou nd */ return I;void main()int m;system(nCLSu);printf(HnPlease enter 1 integer number:);scanf(”d”,&m);printf(M

15、nThe result is %lfnu, fun(m);(1)错误:t+=LO/k;正确:t+=1.0/I;(2)错误:return I; 正确:return t;【解析】该题目考查分母成等差数列递增的一个数学公式,我们先看循环条件 for(I=2;I=m;I+), i从2开始递增到m,所以t的值应该是由1.0/1的值逐步循环叠加后的 结果,而不是t+=1.0/k;。return I;考查对程序的解读能力,当循环结束后(由输入m的值决 定),函数返回当前t的值。编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参 传入。S=l+l/(l+2)+l/(l+2+3

16、)+.+ l/(l+2+3+.+n)例如:若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干 语句。试题程序:#include #include #include #include float fun(int n) void main()(int n;float s;system(“CLS”);printf(MnPlease enter N: );scanf(H%dn,&n);s=fun(n);printf(The result is:%fn ,s);float fun(int n)(in

17、t i,sl=0;float s=0.0;fbr(i=l;i=n;i+)sl=sl+i;/*求每一一项的分母*/ s=s+1.0/sl;/*求多项式的值*/return s;【解析】本题中si用来表示式中每一项的分母,而每一项的分母都是由前一项分母加项数。注意:由于si定义成一个整型,所以在s=s+1.0/sl中不能把1.0写成1。004给定程序的功能是:计算并输出下列级数的前N项之和SN,直到SN大于q为止,q的值 通过形参传入。例如,若q的值为50.0,则函数值为50.416687。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干

18、表 达式或语句。试题程序:#includedouble fun(double q)(int n;double s;n=2;s=2.0;while (s 1 q)s = s + (double)(n+ l)/n;2;)printf(,n=%dn,n);【3】;main() printf(M%fnn,fun(50);1 = 2 n+或 n+=l 或 n=n+1 3 return s 或 return (s)【解析】填空1:根据题意,相加直到Sn大于q为止,因此为=。填空2:计算前N项的 和,增加n的值。填空3:计算完Sn的和后,返回函数的值,以便于输出。下列给定的程序中,函数fun的功能是:计算并

19、输出k以内最大的10个能被13或17整除 的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为4622。请改正程序中的错误,使它能得出正确的结果。也不得更改程序的结构。注意:不要改动main函数,不得增行或删行, 试题程序:#include #include #include int fun(int k) int m=0,mc=0, j;while(k=2)&(mcn。P=m!/(n!(mn)!),例如:m=12, n=8 时,运行结果为 495.000000。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干 语句。试题

20、程序:#include #include #include float fun(int m, int n) void main()system(nCLS);printf(Mp=%fnM,fun(12,8);float fun (int m, int n)(int i;double p=1.0;for(i= 1 ;i=m;i+)p=p*i;/*求 m!*/for(i= 1 ;i=n;i+)p=p/i;/*求 m!/n!*/fbr(i= 1 ;i=m-n;i+) p=p/i;/*求 m!/(n!(m-n)!)*/return p;)【解析】本题中,欲求P的值,需要先求m、n和m-n的阶乘值,可用循

21、环语句实现。注意 阶乘值应当是double类型,若定义x, y, z为整型变量,则p=x/(y*z)中的除法为整数除 法。005请补充函数fun,该函数的功能求能是:整除x且是偶数的数,把这些数保存在数组bb中, 并按从大到小的顺序输出。例如当x=20时,依次输出:20 10 4 2。注意:部分源程序给出如卜。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表 达式或语句。试题程序:#include #include #include void fun(int k,int bb)int I;intj=O;for( I ;I=0;I-) printf(H%d M

22、,bbI);void main()(int k=l;int bb100;system(HCLSn);printf(MnPlease input X=M); scanf(H%dM,&k);fun(k,bb);11 1=1 2 k%I=0&I%2=03 _j 或 j或 j=j-l 或 j=l【解析】填空1:为了求出能整除k,且是偶数的数,寻找范围是从1到匕 填空2:如果I 能整除匕则k对I求余为0,如果I为偶数,贝UI对2求余为0,由于这两个条件要同时满 足,所以要使用“与“运算符“&”。填空3:由于数组bb中的数是按从小到大的顺序排列的, 而题目要求按从大到小输出,所以从数组的最后一个元素开始,

23、依次输出。因为在for循环 中,变量j多加了一次,所以这里要将j减1,得到数组最后一个元素的下标。下列给定程序中,函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m中的值为5,则应输出:1.463611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include double fun(int m) double y= 1.0;int i;/*found*/for (i=2; im; i+)/*found*/y+=l/(i*i);retum(y);main()(int n=5;printf

24、(nnThe result is%lfn,fun(n);(1)错误:for (i=2;im;i+) 正确:fbr(i=2;i=m;i+)(2)错误:y+=l/(i*i)正确:y+=1.0/(i*i)【解析】(1) for (i=2;ivm;i+)中是一个基础的分析错误,应该包括m。(2) y是一个double 型变量,题中得出的结果是一个整数,所以改为y+=1.0/(i*i)。编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(x)x=0的一个实根。 xn+l=cos(xn)迭代步骤如下:(1)取xl初值为0.0;(2) x0=xl,把xl的值赋给x0;(3) xl=cos(x

25、0),求出一个新的 xl;(4)若x0xl,的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);(5)所求xl就是方程cos(x)x=0的一个实根,作为函数值返回。程序将输出结果Root=0.739085o注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仪在函数fun的花括号中填入所编写的若干 语句。试题程序:#include #include #include float fun () main()(float f=fun ();printf(MRoot=%fnM,f); float fun() ( float xl=0.0,x0;do ( xO=xl;

26、 xl=cos(xO); ) while (fabs(xO-x 1 )= 1 e-6); return xl;【解析】函数fun的功能是用迭代方法求方程的一个实根,结果由函数值返回。题目已经给 出了算法,只要按照算法用合适的程序表达,就可以解题了。006程序的功能是计算s=! !.注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。 试题程序:#include long fun(int n)int i;long s;s= 1 _;for(i=l; i=n; i+)s= 2;return s;)main()(long s;int k, n

27、;scanf(M%dH,&n);s= 3;for (k=0; k=n; k+)s= 4;printf(n%idnu,s);1 1【2s*i 或 i*s 3 04 s+fun(k)【解析】函数fun的功能是计算n的阶乘。首先定义一个long型累计变量s,并初始化为1, 然后用一个for循环从1循环到n,累乘给s,循环结束时s的值即为n的阶乘。主函数中也 定义了一个累计变量s,通过for循环,累加从0到n的所有数的阶乘。下列给定程序中,函数fun的功能是:按如下递归公式求函数值。例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。 请改正程序中的错误,使它能得出正确的结果。注意:不要

28、改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include /* found* */int fun (n)(int c;/* * * found* */if(n=l)c=10;elsec=fun(n-l)+2;return (c);Imain ()(int n;printf(Enter n:);scanf(u%dM, &n);printf(MThe result: %dnnfun(n);(1)错误:intfun(n)正确:int fun (int n)(2)错误:if(n=l) 正确:if(n=l)【解析】(1)主函数中已经定义了变量n的类型,在子函数中也要定义。(2

29、) if后面应该紧 跟一个条件判断表达式,而n=l是付值表达式,表达式的值永远为真,也就是说这个条件 永远成立,没有递归执行。请编写函数fun,函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组 中的值在主函数中赋予。例如:若二维数组中的值为13 5 7 92 9 9 9 46 9 9 9 813 5 7 0则函数值为61,注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include #include #include #define M 4#define N 5 int fun( intaMN)

30、void main()(int aaMN= 135,7,9),2,9,9,9,4), 6,9,9,9,8,1,3,57,0;int i, j, y;system(nCLSn);printf (nThe original data is :n );for(i=0; iM;i+)for (j=O;jN;j+)printf(%6d n,aaij);printf(n );y=fun(aa);printf(nThe sun: %dn n,y);printf(Hn ); int fun( int aMN)(int i,j,sum=0;for(i=0;iM;i+)for(j=0;jN;j+)if(i=0ll

31、i=M-lllj=0llj=N-l)/*只要下标中有一个为 0 或 M-l 或 N-1,则它一定是周边元素*/sum=sum+aijj;/*将周边元素相加*/return sum;)【解析】本题采用逐一判断的方式,周边元素的下标一定有一个是0或M-1或N-1,且只要 下标中有一个为。或M-1或N-1,则它一定是周边元素。请补充函数fun,该函数的功能是:求不超过给定自然数的所有偶数之和。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表 达式或语句。试题程序:#include int fun(int x)(int i, s;s=_ 1

32、1 ;for(i=2; 2 ;i+=2)s+=i;return s;main()(int n;do(printf(nnPlease enter natural numbers n:);scanf(%d&n); while (n = 0);printf(n不超过给定自然数d的各偶数之和为dn”,n,fun(n);)1 02 i=x【解析】填空1:根据题意,偶数当然要从0开始,所以40。填空2:不论给定的数是偶 数还是奇数,只要小于等于X,便应该计算在内。下列给定程序中函数fun的功能是:计算n!。例如,给n输入5,则输出定0.000000。 请改正程序中的错误,使程序能输出正确的结果。注意:不要

33、改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include double fun(int n) (double result = 1.0;/* * * found* */if n=0return 1.0;while (nl & n170)/* * * found* */result = n-;return result;main ()( int n;printf(nInput N: ); scanf(%dH, &n);printf(,nn%d!=%lfnn,n,fun(n);(I)错误:ifn=O 正确:if(n=O)(2)错误:result =n;

34、正确:result *=n;【解析】(1)这里是一个简单的格式错误,if条件应该加括号。(2)根据阶乘的概念,从n 开始,n!=n*(nl)!,直到1,所以应该为result *=n-;请编一个函数float fun(double h),函数的功能是:对变量h中的值保留两位小数,并对第 三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干 语句。试题程序:#include #include #includ

35、e float fun (float h ) void main()(float a;system(nCLSn);printf(Enter a: );scanf(M%f),&a);printf(The original data is : ); printf(%fnn, a);printf(MThe result: %fnM, fun(a);float fun (float h)(long t;t=(h*1000+5)/10;/*单精度数h乘以1000后再加5,相当于对h中 的第三位小数进行四舍五入除以10后将其赋给一个长整型数时就把第三位小数后的数全 部截去*/return (float)t

36、/l 00;/*除以100,保留2位小数*/I【解析】注意本题要求h的值真正发生了四舍五入,而不是为了输出,即不能用 printf(, %7.2f” ,h)来直接得到结果。由于单精度数h乘以1000后再加5,此时相当于对h 中的第三位小数进行四舍五入,在将其赋给一个长整型数时就把第三位小数后的数全部截 去。注意在return中要将其中个数转成浮点型数。008请补充函数fun,该函数的功能是:求一维数组xN的平均值,并对所得结果进行四舍五入 (保留两位小数)。例如:当 x10= 15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0,结果为:avg=1

37、5.030000o注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表 达式或语句。试题程序:#include #include #include double fun(double x10)(int I;long t;double avg=0.0;double sum=0.0;for(I=0;I10;I+)1;avg=sum/10;avg= 2;t= 3;avg=(double)t/100;return avg;void main()(double avg,x 10=15.6,19.9,16.7,15.2,18.3,12.1,15.5

38、,11.0,10.0,16.0);inti;system(nCLSM);printf(nThe original data is :n);for(i=0;i 10;i+)printf(nnnn);avg=fun(x);printf(Haverage=%fnnn,avg);I sum+=xI 2 avg*10003 (avg+5)/10【解析】填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现 四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除 以10,实现四舍五入的功能。下列给定程序中函数fun的功能是:计算正整数num各位上的数字

39、之积。例如,若输入252, 则输出应该是20。若输入202,则输出应该是0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include long fun(long num)/*tound*/long k;do ( k*=num%10;/*foun(j* */num =10; while (num);return (k);main ()(long n;printf(please enter a number:);scanf(n%ld, &n);printf(,n%ldn, fun(n);(1)错误:long k; 正确:long k=l;(2)错误:num=10;正确:num/=10;【解析】(1) k用来存放各位数字的积,初值应为lo (2)这里是一个符号错误,除号使用来表示的。请编写一个函数fun,它的功能是:根据以下公式求冗的值(要求满足精

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

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

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

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