2023年河南省濮阳市全国计算机等级考试C语言程序设计预测试题(含答案).docx
2023年河南省濮阳市全国计算机等级考试 C语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .若有如下结构体说明:struct STRUint a,b;char c: double d;struct STRU *pl,*p2;);请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。t202 .结构化程序设计的3种基本结构分别是顺序、选择和 o3 .当数据的物理结构(存储结构、存取方式等)改变时,不影响数据库的 逻辑结构,从而不致弓I起应用程序的变化,这是指数据的【】。4 .若有定义floatb15,*p=b;,且数组b的首地址为200H,则p/13所 指向的数组元素的地址为 O5 .C语言用于结构化程序设计的3种基本结构是选择结构和循环结构。/ include Vstdio. h> double proc(int n) void main()<int mdouble sumprintfC'Xnlnput n: ")«sum proc( n) printfC *ns25 .编写函数proc,它的功能是:计算和输出下列级数的和。S=1 / (12) + 1 / (23) +.+1 / (n (n+1)例如,当 n=20 时,函数值为 0 .952381。 注意:部分源程序给出如下。请勿改动main ()函数和其他函数中的 任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试 题程序:e include < mdld>> h>=incinde <ro«Mds inclixie <nidiOL b> dotible proc(mt n)void ruimi< )wy#ietn< *() apnniR *»proc( 10) 26 .请编写函数 proc , 它的功能是计算s=(In(l)4+ln(2)4+ln(3)+. .+In(m)0 . 5在C语言中可调用log(n)函数求ln(n)o例如,若m的值为30,则proc函数值为8 . 640500o注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include<stdlib . h>#include<conio . h>#inclllde<stdio . h>#include<math . h>double proc(int m) ()void main(system("CLS");printf(n%fnn, proc(30);)27 .请编写函数proc,其功能是:将str所指字符串中除下标为偶数、 同时ASCII码值为奇数的字符外,其余的字符都删除,串中剩余字符 所形成的一个新串放在t所指的数组中。例如,若str所指字符串中的 内容为ABCDEFG12345,其中字符B的ASCII码值为偶数,所在元素 的下标为奇数,因此必须删除;而字符A的ASCII码值为奇数,所在数组中的下标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应是ACEG。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所写的若干语句。试题程序:#include<stdlib . h>#include<conio h>#include<stdio. h>#include<string. h>void proc(char*str, char t)()void main(char str100, t100;system(nCLSn);printf(nnPlease enter string str:");scanf("%S", str);proc(str, t);printf(nnThe result iS : %snH,t);下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。例如,若输入字符串:“thankyou6verymuch” ,则应输出:“TbAnKYoU6vErYMuCh”。注意部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试题程序:仪 include Vcooioi, b>9include Vzdn h> include VmdhK h> void pruc< char sir)woid m»in()ciiar tt51 ,iwynt*ni( ) iprtmf< ptM9e rtitvr character vtnnc wit Imn 30 ciiarxirr*>nw)i*1(tt) |printfC *nnAftcr ch*n<tnc«tbriproc<tt) printfC<nbccom<Bn29 .请编写函数proc,其功能是:计算并输出下列多项式值。S=(l-1 / 2)+(1 / 3-1 / 4)+.+(1 / (2n-l)-l / 2n)例如,若主函数从键盘给n输入20后,则输出为S=0. 680803c注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include t: stdio. h>double proc(int n) void main(int n;double slim;printf(n nlnput n:");scanf("%d", &n);sum=proc(n)。printf(" ns= %f n", sum);)30 .编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。注意:部分源程序在文件PROC1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。tinclude < stdio. h > tinclude < string, h >#define M 81int fun( char ss. char c)main()I char a M , ch;void NONO();printf( " SnPlease enter a string:* ) ; ge<s( a);printf( * nP1ease enter a char:" ); ch = getchar();printf( * nThe number of the char is: %dn*, fun(av ch);NONO();Ivoid NONO()1/本函数用于打开文件,检人测试数据,调用fun函数,输出数据.关闭文件。/ int i ;FILE rf. wf ;char aMv bMt ch ;rf = fbpen( Hin. dat" Jr");wf = fopcn( noul. datH .w w*1 );for(i = 0i < 10;i+)Ifecanf(rf, . a);facanfC rf9R%s* t b);ch s b ;fjprintf(wfvM%c %dnwt ch, fun(at ch);I.;一fcloee( rf);fcloee( wf);四、2.程序修改题(10题)31 .给定程序M0D11 . C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:xl = (x0 + ) 2 x0例如,a为2时,平方根值为:1 . 414214O请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1234567891011121317 J ;linclude <stdio.h>! linclude <math.h>i /*found*/;double fun(double ar dounle xO) ! double xlr y;; xl»(xO* a/xO)/2.0; .j /*found*/!if(fabs(xl-xo)>0.00001)i y=fun(arxl);!else y-xl;!return y;J ! main () 14 ; double x;15 ; printf(REnter x:scanf printf(nThe square root of %lf %lfnwrxr fun(xr1.0);32 .下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由 大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio . h >#include < stdio . h >#define MAXLINE 20 void fun(char *pstr6) (inti, j ;char *p ;for(i=0 ; i<5 ; i+)for(j=i+l ; j < 6 ; j+)/ kL*vt* Kt# Kt# vl> L*1vL» *1* *1 >/不不不不不不不不不不不不不tciind不不不不不不不不,if(strcmp(pstr+i), (pstr+j) < 0) p=*(pstr+i);*(pstr+i)=*(pstr+j);/ KL>KL> %X>I k1>k1> Kl> KL> KL* k1*£> k1> /个不个个不不小、个不不个个ci nc个个不不不小不小不个个不小/*(pstr+j)=*p ;) main() int i ;char*pstr6, str6 MAXLINE;clrscr();for(i=0 ; i < 6 ; i+)pstri=stri;printf(n/nEnter 6 string(l string at each line) : nn);for(i=0 ; i < 6 ; i+)scanf("%s", pstri);fun(pstr);printf(nThe strings after sorting : nn);for(i=0 ; i < 6 ; i+)printf("%sn", pstri);)33 .下列给定程序中,函数fun()的功能是计算并输出high以内的素数之和。high由主函数传给fun()函数。例如:若high的值为100,则函数的返回值为1060。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include < conio.h >#include < stdio.h > #include < math.h > int fun(int high)(int sum=0, n=0, j, yes;while(high > =2) yes=l;for(j=2 ; j < =high/2; j+)* * f)und* */ ifhigh%j=O yes=0; break;/ vl* kL* vl* vt# vt* vt*vt* vl> vl* vl* kI* *1* kL* kT* C1*1* kJ* *£*1* *1* *1* *1* *1* *1* *1* *1* *1*1* *1* *1* *1*1* /1 1 T-1 /|*14、-门/if(yes=0) sum+=high; n+;high-;return sum;)main()clrscr();printf(n%dn fun(lOO); )34 .给定程序MODU . C中函数fun的功能是:统计一个无符号整数中 各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最 大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字 值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!5678910111213include <stdio.h>int fun(unsigned n, int *zero) int count=0,max=0,t;do t«n%10;/ "und *if(t-0) count+; if(max<t) n«n/10;while (n);found/育/14return max;zero1Hcount;161718192015 )main() unsigned n; int zerofmax;printf (nnlnput n (unsigned) : M); scanf(w%dwr &n);max fun(nr 4zero);printf (nnThe result: max=%d zero® %dnwrmaxr zero);216 .数据模型是用来描述数据库的结构和语义的,数据模型有概念数据模 型和结构数据模型两类,E-R模型是【】7 .在E-R图中,矩形表示【】。8 .以下程序运行后的输出结果是【】。#define S(x)4*x*x+1mah() int i=6,j=8 ;printf(n%dnH,S(i+j); )9 .软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和 预防性维护。10 .下面程序的运行结果是()。#include < stdio.h >#define SIZE 12main()char sSIZE;int i;for(i=0;i < SIZE;i+) si=A+i+32;sub(s,5,SIZE-1);for(i=0;i < SIZE;i+)printf("%c",si);printf("n");sub(char *a,int tl,int t2) char ch;while(tl < t2) ch=*(a+tl);35 .下列给定程序中,函数fun()的功能是:将m(10n£lO)个字符串连接 起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc, CD, EF串联起来,结果是abcCDEF。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h > #include < string.h >#include < stdio.h >/ *1*kI*!> kJ* k!> <!> K!>/小小不不不不不不不不不不不Tei me不不不不不不不不不不不不不不/int fun(char str 10,int m, char *pt) int k,q,i,j=O;for(k=0;k < m;k+) q=strlen(strk);j+=q;for(i=0;i < q;i+)pti=strk,i;pt+=q;ptO =0;)Pt-=j;)main () int m, h;chars10 10,p120;clrscr ();printf(nnPlcasc enter m:");scanf(n%du,&m); gets(s0);printf (nnPlease enter %d string:In n,m);for(h=0;h < m;h+) gets(sh);printf(nnThe result is :%sn ”,p);36 .给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio.h > #include < conio.h > float m10;/vt*vt* /下不不不少不不不不不下不不tciinri不不不不不不不不下不不不不少/int fun (void) intj;printf(uIn subfunc after callingnn);for(j=O;j < 10;j+)/ 7" 7" 7" 7,7, 7,7,7,7“ 7“ 7”1 7” 7,7,7“ 7, 7,7,7“ 7, 7” 7,7,/不不不不不不不不不不不不小tciind不不不不不不不不不不不小不小/print (n%f mj%5);)main() int i;printf ("In main before callingnn);for (i=0;i < 10;i+) mi=i+20;printf("f”,mi);)fun();printf(nnln main after callingnn);for(i=O; i < 10;i+)37 .下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元 素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并 将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是 5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对 前10个元素进行处理,不对最后的4个元素求平均值。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include < stdio.h >#define SIZE 20fun (double *s, double *w) int k, i; double sum;for(k=2, i=0; i < SIZE; i+)s i=k; k+=2;sum=0.0 ;for(k=0, i=0; i < SIZE ; i+)sum+=si;/kL* vt* Kt* kL* vL* vl*1 上kL*kL* vt* /不不不不不不不不不不不不不tcii nd不不不不不不不不不不不不、不/if(i+l%5=0)wk=sum/5; Sum=0; k+;)return k;main() double aSIZE, bSIZE/5; int i, k;k=fun(a/b);printf ("The original data : n");for(i=0 ; i < SIZE ; i+) (if(i%5=0)printf("n");printf("%4.0f7ai); )printf"nnThe result : n");for(i=0; i < k; i+) printf("%6.2f, bi);printf("nn"); )38.给定程序MODU . C中函数fun的功能是:用下面的公式求兀的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:K . 111 I + 43 5 7例如,程序运行后,输入0 . 0001,则程序输出3 .1414。请改正程序中的错误,使它能输出正确的结果。注意:不要改动smain函数,不得增行或删行,也不得更改程序的结构!2 345 67 89;finclude <math.h>! tinclude <stdio.h>i float fun (float num) int s ;( float n, t, pi ;i /*found*/ while(t >= num)10 !11 12 13 !14 1pi = pi + t ;n - n + 2 ;s - -s ;*found*/ t « s % n ;15 ;16 17 ;pi « pi 4 ; return pi ;18 ; )19 i main (J20float nl, n2 ;21 22 23 !24 iprintf (wEnter a float number:11); scanf(R%fRr &nl);n2 - fun(nl);printf(w%6.4fnw# n2);39.已知一个数列从第0项开始的前三项分别为0, 0, 1,以后的各项 都是其相邻的前三项之和。给定程序MODE . C中函数fun的功能是: 计算并输出该数列前n项的平方根之和。n的值通过形参传入。例如,当n = 10时,程序的输出结果应为:23 . 1977450请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!2345678910111213141516171819202122finclude <stdio.h>tinclude <math.h>/found/ fun (int n) double sum, s0r si, s2, s; int k; sum 1.0;if (n <= 2) sum 0.0;sO * 0,0; si = 0.0; s2 = 1.0; for (k « 4; k <- n; k*+)(s = sO + si + s2;sum sqrt(s);sO , si; si - s2; s2 s;/*found*www*/return sum) main () ( int n;printf(wInput N”); scanf&n);printf(R%fn°r fun(n);40.下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数 的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。 例如当s中的数为25846513时,t中的数为6482。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio . h >#include < conio . h > void fun(long S, long *t)int d ;long sl=l, i=l ;*t=0 ;while(s/i > 0)i=i*10 ;i=i/10 ;while(s > 0) d=s/i/1!>/不不不不不不不不一、不不不不tci inri不不不不不不不不不不不不不/ if(d%2!=0)/ 7,7,7,7“ 7,01<!> 7,*!>7,7,7,/小小小不不不不小不不不小小tmnd不不不不不不不不不不不不不/t=d*sl+t ;sl*=10 ;) S=S%i ;i=i/10 ;) main()(longS, t;clrscr();printf(nnPlease enter S :n);scanf("%ld", &s);fun(S, &t);printf(nThe result is : %ldnH, t);五、程序改错题(2题)41.下列给定程序中,函数ptoc的功能是:利用插入排序法对字符串 中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字 符串中的头两个元素进行排序,然后把第3个字符插入前两个字符 中,插入后前3个字符依然有序;再把第4个字符插入前三个字符 中,待排序的字符串已在主函数中赋予。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结 构。试题程序:#include<strin9. h>#include<stdiO. h>#define M 80void proc(char*arr) int i, j, n; char ch;n=strlen(arr):for(i= 1 ; i<n; i+)/* found* * * * c=arri;j=i-l;while(j>=o)& &(ch<arrj)arrj+l=arrj;j-;)arrj+l=ch;)void mainchar aM=nQWERTYUIOPASDFGHJKLMNBVCXZn;printf(nThe original string: %s ' n”, a);proc(a);printf(HThe string after sortin9:%snn", a);)42 .改正下列程序中不正确的语句。main() int a;scanf("%d' a); if (a = 1) printf("Onen"); 六、操作题(2题)43 .下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:天=5+2)/2 X。例如,2的平方根为1.414214。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < math, h > #include < stdio. h >/si#rist*/个个不不不不不不不不不不不ci n不不不不不不不不不不不不不不/fun(double a,double xO) double xl,y;xl= (x0+a/x0)/2.0;/ kL*kL* vl* kL* kL* k|> vL*1 vl* L* vL*kL#kI* kIxkL* /不不不不不不不不不不不不不tciind不不不不不不不不不不不小不不/if (fabs (xl-xO) >0.00001)y=fun (a, xl);else y=xl;return y;)main () double x;printf(uEnter x: "); scanf(n%lf&x); printf ("The square root of %lf is x, fun(x,l.O);)44 .请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不 得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。 若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing < CR > nanchang < CR > ( < CR >为回车键),函数将 返回 nanjing o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入所编写的若干语句。试题程序:*(a+tl)=*(a+t2);*(a+t2)=ch;tl+;t2-;)二、单选题(10题)11 .有以下程序:#include <stdio.h>main() (inti, s=0, t=(l,2,3,4,5,6,7,8,9;for(i=0; i<9; i+=2)s+=*(t+i);printf("dn's);)程序的运行结果是O OA.20 B.25 C.45 D.3612 .函数fun的功能是在a所指的具有n个元素的数组中查找最大值并返回给调用函数,但函数不完整:int fun (int *a, int n)int *p, *s;for(p=a,s=a; p-a<=nn p=nn>if() s=p;return *s;)在if语句下划线处应填入的选项是()OA.p > s B.*p > *s C.ap > as D.p-a > p-s13 .设变量a是int型,f是float型,i是double型,则表达式10+'a'+i*f值#include < stdio . h >char *fun(char *S, char *t)( ) main()(char a20, b10, *p, *q ;int i ;printf("Input 1th string :");gets(a);printf("Input 2th string :");gets(b);printf("%s",fun(a, b);参考答案l.strudctSTRUstrudctSTRU解析:结构件类型是构造数据类型,是用户自己定义的一种类型。结构体类型的定义:struct结构体类型名(成员项表; 定义结构体变量的的形式为: struct结构体类型名变量1,变量2,.?其中变量包括;一般变量、指针变量、数组变量等。2 .重复(循环)重复(循环)解析:结构化程序设计包括3种基本的结 构:顺序结构、选择结构和重复结构(循环结构),利用这3种结构就足 以表达出各种其他形式结构的程序设计方法。其中利用循环结构,可以 简化大量的程序执行。3 .物理独立性物理独立性4.252H252H解析:要解答本题,首先要明白在对指针进行加、减运算 时,数字T不是十进制数的T,而是指T个存储单元长度。1个存储单元 长度占存储空间的多少,应该视具体情况而定,如果存储单元的基类型 是int型,则移动1个存储单元的长度就是位移2个字节;如果存储单 元基类型是float型,则移动1个存储单元的长度就是位移4个字节。 所以旷13所指向的数组元素的地址为:200H+(13*4)H = 252H。5 .顺序结构顺序结构解析:结构化程序有3种摹本结构,即顺序结构、 选择结构(包括if语句和switch语句)和循环结构(包括for语句、while 语句、do.while 语句)。6 .概念数据模型概念数据模型7 .实体实体 解析:E-R模型中,有3个基本的抽象概念:实体、联系和 属性。在E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表 示属性。8.8181解析:本题的宏调用S(i+j)将被替换成表达式4*i+j*i+j+l等于 4*6+8*6+8+1=24+48+8+1 =81。所以本题输出 81。9.完善性完善性解析:软件维护活动包括以下几类:改正性维护、适应 性维护、完善性维护和预防性维护。完善性维护是指为了满足用户对软 件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、 增强软件性能、改进加工效率、提高软件的可维护性。lO.abcdelkjihgfabcdelkjihgf解析:本题先给字符型数组s的12个元素赋 值a到1共12个字母,函数sub(char*a,inttl,intt2)的功能是将数组a的 从第tl+1个元素到t2+l个元素进行逆置,在主函数中调用sub(s,5,SIZE- 1)函数,是将数组s的第6个元素到第12个元素进行逆置,其他元素位 置不变。H.B程序的功能为统计19这9个数中的奇数和。C语言中规定数组名 代表数组的首地址,也就是第1个元素的地址,因此“*(t+i)”代表数组的 第i+1个元素。程序的运行结果是1+3+5+7+9=25。故本题答案为B选 项。12.B函数fun的功能是在a所指的具有n个元素的数组中查找最大值并 返回。通过for循环比较,s始终指向最大值的那个元素。取指针的值, 使用*P,因此比较使用*P和*s,又因为找最大值,当*s<*p时,修改指 针s的指向。故本题答案为B选项。13 .C解析:根据混合运算规则,如果有一个数据是float型或double型, 则其他数据类型先转化为double型,运算的结果最终也是double型。14 .D15 .C16 .D解析 算法分析是指对一个算法的运行时间和占用空间做定量的分 析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。分 析算法的目的就是要降低算法的时间复杂度和空间复杂度;提高算法的 执行效。率。17 .D解析:返回指针的函数定义为:返回值类型,函数名(u3OOOu3OOO), 而指向函数的指针定义为:返回值类型(*变量名)(u3000u3000)。本题 中函数fun返回一个无类型的指针。18 .C19.B解析:考查函数指针的使用方法。可以使用函数指针来调用函数。 调用形式为:(*指针变量X实参表列)。20.A21.1 voidfun(inta,intb,longc)23 *c=(a% 10)*1000+(b% 10)*100+(a/10)*10+(b/10);4)本题给出两个两位数的正整数。分别取出两个数各位上的数字,再按 条件组成一个新数。取整数a十位数的方法为a/10,取整数a个位数 的方法为a%10o同理可取出整数b的个位数和十位数。22.【解析】要算出变量num的值,首先需要得到变量numl和hum2个 位和十位上的数字。然后将在千位上的数字乘以1000,百位上的数字 乘以100,十位上的数字乘以10,各位上的数字乘以1,就能得到要求 的 hum。23.v