《2022年辽宁省营口市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年辽宁省营口市全国计算机等级考试C语言程序设计真题(含答案).docx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年辽宁省营口市全国计算机等级考试C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .数据结构分为逻辑结构与存储结构,线性链表属于【】。2 .数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、 数据结构、数据流 和处理过程。3 .函数check用来判断字符串s是否是“回文”(顺读和倒读都一样的字 符串为“回文”,如abeba)。是则函数返回值1,否则返回值0,请填空。 int check(char *s)(char *pl, *p2 ; int n ;n=strlen(s);pl=S ;p2=;while(pl s iitdude Vcooa h
2、$ teidio. h * indude ma double prorf ml m) fl void )CLS4 ) s e proci请编写一个函数proc (),它的功能是:根据以下公式求7c的值(要求满足精度0 . 00。5,即某项小于0 . 005时停止迭代)ox/2-l +1/3+1 * 2/(3 * 5)+1 2 3/(3 5 7)+1* 2*3* 4 / (3 5 7 9) + + 1 *23*n/(35*7 (2n+l)程序运行后,如果输入精度0 . 0005,则程序输出3 . 1405780注意: 部分源程序给出如下。请勿改动main ()函数和其他函数中的任何内 容,仅在函
3、数proc ()的花括号中填入所编写的若干语句。试题程序:二 include include include double proc( double eps)void main( (;double *3printf( MnPlrasc enter a precision: *) issnf( % I&C sprin(f( MnPi= % 1 fn ,proc(s) i )28 .规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是: 除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时, 不得使用c语言提供的字符串函数。例如,字符串中的内容为:*a*BC*DEF*G*,删除
4、后,字符 串中的内容应当是:*ABCDEFG。注意:部分源程序在文件PR0G1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入你编写的若干语句。#include void fun( rhjir )main()char s 81 ;void NONO ();printff Enter 11 siring:n );fun(、);prinlff wThe siring after deleted: nR ) ;put( n);NONO();void NONO )/本函数用于打开文件,输入数据,调用函数,雉出数据.关闭文件,7FILE in. out;:.int
5、 i ; char s 81 ;in 二 fbpen( in.dat Jr);out a fopcn(M out. cht ”.),:for(i s 0 ; i Ifwcanf(int -%i );fun(s),fprintf(mitv);(cloee(in); fcloe(out);29 .假定输入的字符串中只包含字母和*号。请编写函数proc (),它的功能 是:使字符串中前部的*号不得多余m个;若多余m个,则删除多余的 *号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删 除。例如,字符串中的内容为*A*BC*DEF*G*,若m的值为2, 删除后,字符串中的内容则应当是*A*
6、BC*DEF*G* ;若m的值为 4,则字符串中的内容仍为*A*BC*DEF*G*n的值在主函数中输 入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试题程序:於 include Vndid 方 由elude co void procchar MftSlJiifti m1*Enier a Mnng inM) i1*( tr) iEnter mi(,将d.& m,procnntf(a Tbe AtnAg afirr drlrti :n*)t30.请编写函数。fun能
7、是:判断形参n中的正整数是几位数(输入数 据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数 据为123,则输出结果为:输入的数字是3位。注意:部分源程序存在 PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函 数fun的花括号中填入所缩写的若干语句。 试题程finclude void NONO ();int fun (int n) main () int n. place ;doprint ”请输入一个4位以内的正整数:scanf (R%dwr &n); while (n9999);place = fun (n);printf (输入的数字是记位n-,plac
8、e );NONO();)void NONO ()本函数用于打开文件,输入数据,调用函数,输出数据.关闭文件./FILE - fp, wf ;int i, n, place ;fp - fopen(wc: fcest in.dat,r);wf - fopen(c: fcest Vut.datWw);for ( i 0; 1 10; i 什)(fscanf (fp/ %d4n);place = fun (n);fprintf(wf/w%dnr place);Ifclose(fp);fclose(wf);序:)四、2.程序修改题(10题)31 .给定程序MODII . C中函数fun的功能是:把主函
9、数中输入的3个 数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:55 12 34,输出结果应当是:a = 55 .0, b = 34.0,c = 12 . 0o请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。234567891011121314151617181920finclude void fun (float *ar float *br float *c) (/found* float *k; if(*a*b) k*a; *a-*b; *b*k; found*c) k-*c; *c*a; *ak; if (*
10、bwc) k-*b; *b*c; *c-k; ) main() float a,bfc;printf(wInput a b c: ); scant (w%f%f%ftlr&ar &br&c);printf (wa %4. If r b 44 . If r c %4.1fnnwrarbrc);fun(&ar&br&c);printf(na , %4eIfr b %4.Ifr c %4.lfnn”,a,b,c);32 .下列给定程序中,函数fun()的功能是:输出M行N列整数方阵, 然后求两条对角线上的各元素的平方和,返回此和数。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,
11、不得增行或删行,也不得更改程序的结构。 试题程序:#include #include #define M 5int fun(int n, int XXM)int i, j, sum=O ;printf(nnThe %d x %d matrix : nn, M, M);for(i=0 ; iN ; i+) for(j=0 ; j 7,7,7,7,/不不小不不不不小小不不不小八小不小不不不不小不不不小小/printf(n%4dn, XXij);/vl*1 kL*/不不不不不不不不不不不不不tc不不不不不不不不不不不不不/printf(,n,);)for(i=0 ;i n ;i+) sum+=xxi
12、 i *XXi i+XXi n-i-1 *XXin-i-l;return(sum);) main() clrscr();printf(nnThe result of all elements on 2 diagnals iS%dn, fun(M, aa);int aaMM)=312,4, 24, 35,11, 3, 3, 7,56.61, 27, 58, 49, 24,17, 28, 7, 36,85,(15, 33, 5, 24, 9);33 .下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值。t= M/(2x2)-l/(3x3)-.-l/(mxm)请改正函数fu
13、n()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include double fun(int m) double y=1.0;int i;/ KL#KE| KE*/不干不个个不,、不小小不不不ci inc不小个个个不不个个不不不不不/for(i=2;i kJ kI/不不不不不不不不不不不不tcund不不不不不不不不不不不不不不/ y-=l/ (i*i);return(y);)main() int n=5;clrscr();printf(nnThe result is %lfnM, fun(n);)34 .下列
14、给定程序中,函数fun()的功能是:求出以下分数序列的前n项 之和。2/1, 3/2, 5/3, 8/5, 13/8, 21/13和值通过函数值返回main。函数。例如,若输入n=5,则应输出8.391667O 请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include / vL* kL* vt* vlkL* k* /%1 * kL* k1 *L* vl* kL* vt* vl* kL* /不不不不不不不不不不不不不tc n不不不不不不不不不不不不不不/fun (int n) int a=2,b=l,
15、c, k;double s=0.0;for(k=l;k k17,1*、!、! 7,7,7, 7,7,01 ! 7,7,1、!、! 7,7,kJ 7,7,/不不小不不不不小小不不不小八小不小不不不不小不不不小小不/c=a; a+=b; b+=c;)return (s);)main () int n=5;clrscr ();printf(nnThe value of function is:%lfnn,fun (n);35 .下列给定程序中,函数fun()的功能是:计算并输出下列级数的的N项之和SN,直到SN+1大于q为止,q的值通过形参传入。SN=2/1 +3/2+4/3+(N+ 1)/N例如,
16、若q的值为50。则函数值为49.394948。请改正程序中的错误,使它能得出正确的结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include / vl* vt* *1* *。,1 *1* *1* *1* *J* kI*kL* vt* kL* /不不不不不不不不不不不不不不tc md不不不不不不不不不不不不不不不/double fun(double q) int n; double s,t;n=2;s=2.0;while (s 7,k101k! 7,、!、!、! 7,/不不小不不不不不小不不不小TOllDfl不小不不不不不不不不不小不/s
17、=s+ (n+l)/n;n+;printf (nn=%dn n, n);/ k1 k17,1*、!、! 7,7,7,7,。17,7,1、!7,7,*! kJ 7,7,/不不小不不不不小小不不不tciinri不不小小不不不不小不不不小小不/return s;)main () clrscr();printf (n%An n,fun (50);)36 .下列给定程序中,函数fun()的功能是:计算整数n的阶乘。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include double fun(int n)(double res
18、ult=L0;whil (n l&n k1 *1 *.f *1k| k1 kJ kJI kI k k1 K.t K.t k1 k1 k| *1*.t k| k! k1 K.t /不个个不不不个个不不不不个不Tciind个不不不不个个不不不个个不个个不不不不个/return;main()int. n;clrscr();printf(nEnter an integer:);scanf(n%dH,&n);printf(unn%d!=%lgnn ”,n, fun(n);else return 1 ; )4 .以下程序的输出结果是【】。main() char s=nABCDn, *p;for(p=s+l
19、; ps+4; p+)printf (n%snH,p);5 .若输入5、9,以下程序的运行结果为【】。 main() int a, b, *ptl, *pt2 ;printf(ninput a, b : n);scanf(%d%d, &a, &b);ptl=&a ;pt2=&b ;if(a b) swap(ptl, pt2);printf(nn%d, %dnn, *ptl, *pt2);)swap(pl, p2)int *pl, *p2 ; int *p ;p二pl;pl=p2 ;P2二p ;37 .给定程序MODH . C中函数fun的功能是:将十进制正整数m转换成k(2SkW9)进制数,并
20、按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示 是 1000)o请改正fun函数中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!234567891011121314151617181920212223include include void fun(int m, int k) (int aa 209 i;for(i 0; m; i+) (/w*found*/ aa1 m/k;m / k;)for(; i; i-)/found / printf(w%dRr aai); main () ( int b; n
21、; printf(MnPlease enter a numberand a base:nw);scanf(w%d %d,&b);fun(nr b);printf(nnn);38 .下列给定程序中,函数fun()的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include #define N 80int fun(char *s, char *t) int n ;char p,* n=0 ;while(*s) P=s ;
22、/ kL*kL* *1* k! kJ* kJ*1 *1/不不不不不不不不不不不不不不tc不不不不不不不不不不不不不不不/r=P while(*r)if*r=*p) r+ ; p+ ; else break ;/ *1* *1* 1* *1* *1*1*r1/个不不不不不不不不不不不不不Tei nrl不不不不不不不不不不不不不不不/if(*r=0) n+ ;s+ ;)return n ;)main()char aN, bN ; int m ;clrscr();printf(nnPlease enter string a :n);gets(a);printf(nnPlease enter subs
23、tring b :n);gets(b);m=funa,b);printf(nnThe result is :m=%dnn, m); )39.下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的 n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所 指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如:当 s所指字符串中所指的内容为abcdabfab, tl所指字符串中的内容为ab, t2所指字符串中的内容为99时,结果在w所指的数组中的内容应为 99cd99f99。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程
24、序的结构。 试题程序:#include #include #include int fun (char *s, char *tl, char *t2, char *w) int i; char *p,*r,*a;strcpy(w,s);while (*w)p=w; r=tl;/不不小不不不不不小不不不不td n小不小不不不不不不不不不小不/while (r)if (*r=*p) r+;p+;else break;if (*r= =0)a=w; r=t2;/KE_1/I KE* KL* *1*KLKL /不干不个个不不不小小不不不ci inc不个“、个个不不个个不不不不不/while (*r)*
25、a=*r;a+;r+ w+=strlen(t2);else w+;) main()char s100,tl100,t2100,w100;clrscr();printf(nnPlease enter string S:);scanf(n%sn,s);printf(nnPleaseentersubstring tl:);scanf(u%stl);printf(nnPlease enter substring t2:);scanf(n%sn,t2);if (strlen(tl)= =strlen(t2)(fun (s,tl,t2,w);printf(nnThe result is : %sn,w);
26、)else printf(nError: strlen(t2)nn);)40.下列给定程序中,函数fun()的功能是:给定n个实数,输出平均值, 并统计平均值以上(含平均值)的实数个数。例如,n=8时,输入193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763,所得平均值为195.838745,在平均值以上的实数个数应为5。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include int fun(float x,
27、 int n)/* found * * * * * * * * * * */iht j, c=0;float xa=0.0;for (j=0; j n;.j+)xa+=xj/n;printf(nave=%nn,xa);for (j=0; j =xa)C+;returnc;)main()float x100= 193.199,195.673,195,757,196.051,196.092,196.596,196.579,196.763;clrscr ();printf(n%dnn,fun (x,8);五、程序改错题(2题)41 .下列给定的程序中,函数proc()的功能是:计算并输出k以内最大
28、的10个能被15或18整除的自然数之和,k的值由主函数传人。若k 的值为800,则函数的值为7605。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main。函数,不得增行或删行,也不得更改程序的结构。试题程序: g mclu4r Vaidia S include CC It include Vm如b. h ifit proef mt k)mt mOfnc (i whilH - 2)&(nieV 10 / found il|)m-fn + kifwc,0) k / fownd rvtuni miraid fMin()*ystem( *CLS) i pnntf * K procs in
29、clude Vconio* h include o h dotibic proc mi n) double yj l 0 itit ii / IommI torCi,2siVnii- ) / lomd ,一(, Oi mummH main() ini t1-7. sy*tm( *t六、操作题(2题)43 .函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。void delete(char s,int i, int n) int j9k,length=0 ;while(slength);-i / J=1)if() k=i+n;if(i+n =length)
30、while(k length)sj+=sk+;sj=O;44.请编一个函数 voidproc(intint ppN), tt 指向一个 M 行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include#include#include#define M 3#define N 4void proc(int ttrM3rN。int ppN)()void main (intstrMN= 34, 56, 84,
31、78,23, 84, 93, 12),28, 38, 39, 93;intpN, i, j, k;system(CLS);printf(The riginal data is: n);for(i=0; iM; i+)for(j=0; jN; j+) printf(n%6dn, strij);printf(n);)proc(str, p);printf(n nThe result is: nn); for(k=0: kM; k+)printf(%4d, pk);printf(Hnn); 参考答案1 .存储结构2 .数据存储数据存储3,s+n-lpl p2s+n-lrnpl p2解析:判断是否“回
32、文,字符串,应该使用 两个字符型指针,一个从前往后遍历字符串,另一个从后往前遍历字符 串,直到它们中途相遇,如果每次两个指针所指的字符都相同,则为“回 文”字符串。程序中已经使pl=s,即指向字符串的第一个字符了,所以 p2应该指向s的最后一个字符,故第一空应填s+n-1。比较两个指针时, 如果有一次不相同,则跳出循环,因为此时已可肯定不是“回文”字符串。 如果是while循环的条件pl p2不满足时自然结束的循环,则每次比 较都是相同的,两个指针是中途相遇了才结束比较。两种情况的区别就 是plp2是否成立。故第二空应该填pl y)if(xz)printf(n%dfx);else printf
33、(%d,y);printf(n%dnz);9 .设一棵二叉树的中序遍历结果为DBEAFC ,前序遍历结果为 ABDECF,则后序遍历结果为【。10 . mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返 回。请填空。int mystrlen(char *str) int I;for(I=0; !=n;I+);return(I); 首地址,输出字符串ABCD p+,第二次循环,p的值为字符数组s的 首地址加1,输出字符串BCD。p+,第三次循环,p的值为字符数组s 的首地址加2,输出字符串CD; p+,第4次循环,p的值为字符数组 s的首地址加3,输出字符串D13.C14.B
34、解析:本题主要考查结构体和联合内存使用的区别:结构中不同 的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构 中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合 所占用的内存空间为最长的成员所占用的空间。15 .D解析:程序不仅是编写完就结束了,为了测试和维护程序,往往还 有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰, 即程序的易读性,“清晰第一,效率第二”。16 .D17 .CChar类型数据占1个字节。18 .A19 .A解析:本题定义了一个指向由3个元素组成的一维数组的指针变 量pa,通过赋值让它指向具有2行3列的数组a,此时用指针变量pa, 表示
35、数组元素的形式是paijo for循环执行了 3次;第一次i值 为0,执行pal0=pal0-l,执行后的值变为3 ;第二次i值 为1,执行执行后的值为4;第三次i值为 2,执行pa=1,执行后al的值变为1。故printf语句输入的值 为2+4+1=7。所以,A选项为所选。20 .C解析:do-while语句的一般形式为:do循环体语句while(表达式);, 其中循环体语句可以是复合型语句,但必须用花括号括起来。while后 必须要有分号作为语句的结束,在do-while循环中,不可以省略while。 21.【解析】题目中要求把下标从P到n-1的数组元素平移到数组的前面, 可以通过每一次循
36、环将最后一个元素放在第一个位置上,使其成为第一 个元素,其余元素后移一个位置。通过n-1-p次循环实现将从p到n-1 的数组元素平移到数组的前面。22. n#include,stdio . hnint fun(int a)n int I;nif(a=2) return 1; 1=2;nwhile(a%I)! =OI=sqrt(float)a)nl+;nif(a%I=0)nprintf%d is not a prime!;nreturn 0; nprintf(“d is a prime!”,a);nreturn 1; nmainnint x;XnprintfWn please enter a number:);nscanf(%d&x);nprintf(dnfUn(x); n【解析】要使数组左下半三角元素中的值全部置成0,先要找出数组的 下半三角元素,再将其值全部赋值为0。二维数组中下半三角元素的特点为,其列下标小于其行下标。根据这个特点,将二维数组的下半三 角元素都赋值为0。【解析】要算出变量num的值,首先需要得到变量numl和hum2个 位和十位上的数字。然后将