《2023年山东省青岛市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2023年山东省青岛市全国计算机等级考试C语言程序设计真题(含答案).docx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年山东省青岛市全国计算机等级考试 C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .将经过确认测试的软件与外设、网络等连接在一次运行的测试叫【】2 .数据结构包括数据的逻辑结构、数据的【】以及列数据的操作运算。3 .以下程序运行后的输出结果是【】。#include fun(int x) if(x/2 0) fun(x/2);printf(n%dn5x);)main() fun(6); )4 .有以下程序:# include main() int a=123,4,5,6,7,8,9,10,11,12, *p=a+5, *q=NULL;*q=*(p+5);p
2、rintf(d%dn”,*p,*q);程序运行后的输出结果是【】。fun(a,p,n);printf (nThe data after moving:n);for(i=0; iprintf (3d”,ai); printf (unn);)26 .某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程 的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的 平均分,并放入记录的ave成员中。例如,学生的成绩是:85 .5, 76, 69 .5, 85, 91, 72, 64 .5, 87 .5, 则他的平均分应为78 . 875。注意:部分源程序在文件PR0G1 . C中。 请勿
3、改动主函数main和其他函数中的任何内容,仅在函数flm的花括 号中填入你编写的若干语句。finclude Ikfefine N8 typedef structchar num 10;double N; double aves| STREC;void fun( STREC a) main()| STREC = |wt85t91.72t64.5t87.51 ; im i;void NONO();fun( );pnntf(The % student data: rT , s. num);for(i 0;i 1);prinrf( nave s%7.3fnM ave);NONO();Ivoid NON
4、O()本函数用于打开文件.输入数据,利用函数,输出数据,关闭文件FILE out 1intij ;STREC s 10 - I|-CA005- ,85.5,76,69.5.85.91,72,64.5.87.51.|R GA001 .82.5,66.76.5,76,89.76.46.5.78.51.| CA00T .72.5,56,66.5,66,79,68,46.5,58.51 ,I GA003”.%.5.76.86,5,86,99,86,56.5,885 , |-CAOW 用,75,76.5.63.51 . |-GA006- t75.5,74.71 .5,85,81,79.64.5.71.5
5、1 t | - GA007- t5,58.5|,CA010- J6,66.5,75.5.60,76,71,96.5,93.51 tI sout = fopen( out. dal; for(i s 0 ; i 10 ; i ) ( fun(&s i);printf(out9 *%7.3AnM, i. ave);Ifdo6e( out);27 .请编写一个函数proc,它的功能是:求出1m(含m)能被7或11 整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传给m的值为70,则程序输出:7 11 14 21 22 28 33 35 42 44 49 55 56 63 66 70注意:
6、部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。试题程序:# include<stdlib. h># include<conio. h># include<stdio . h># define N 100void proc(int m, int*a, int*n)void main(int arrN, n, k;system(CLS);proc(70, arr, &n);for(k=0 ; k<n; k+)if(k+l)%20=0) / / 每行输出 20 个数 printf(%4d, a
7、rrk);printf( n);)elseprintf(%4d, arrk);printf(nnn);28 .请编写一个函数proc(),它的功能是将一个数字字符串转换为一个 整数(不得调用C语言提供的将字符串转为整数的函数)。例如,若输入字符串“1234”,则函数把它转换为整数值1234。 注意:部分源程序给出如下。请勿改动main。函数和其他函数中的任何内容,仅在函数proc()的花括 号中填入所编写的若干语句。试题程序:C include Vstdio. I ,include lon mid main() char Sli long tie printfC aEnitf 八 !. pfO
8、C( I pruiift % 1 dtTi29 .请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同 时ASCH码值为奇数的字符外,其余的字符都删除,串中剩余字符所形 成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为 ABCDEFG12345,其中字符B的ASCH码值为偶数,所在元素的下标为 奇数,因此必须删除;而字符A的ASCH码值为奇数,所在数组中的下 标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应 是 ACEGO注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号 中填人所写的若干语句。试题程序:
9、#include#include#include#includevoid 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 : %snn, t);30.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放人结构体数组stu中,请编写函数proc (),其功能是:按分数的高低排列学生 的记录,身分在刖。注意:部分源程序给m如下。请勿改动ma
10、in () 函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编 写的若干语句。试题程序:& iorludr V.ldick hCdefiM M listructcluir nuvnL lOjiSTRfX, Rid proc(STRECmi ujiSTREC t9,用 W 泡惬搐以 IdL(or(j0|M- I *01 Y“|4l,八 八核分的离低梯“与4,记我11分在/ Iwid HMin ()STRIX* muM ( GAOOS*, GAOOJ*(;A002.49) .1GA84 W (GAOOrll.(*6X007*721 PA00) (iAD0*.B71 e.72hfl
11、 iiprar(wiiprintf( * Thr Ui, altrf Mirird 八for i-0i YM. + )i(iK4ss0)每行出4个学生id*printfipnnt(*Xfi %4d etu(iX numti. a)iprmdiTh四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t 所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为 abcdabfab, t所指字符串的内容为ab,则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#in
12、clude #include #include int fun (char *s, char *t)int n; char *p, *r;n=0;while(*s)p=s;r=t;while (*r)/7,1/小小不不不不不不不不不不小小tciind不不不不小不不不不不不小不不/if(*r=*p) r+; p+else break;/1/不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不/if(r=O)n+;s+;return n;)main()char s100, t100; int m;clrscr();printf(nnPlease enter string s: n);
13、 scanf (n%s,f,s);printf(nnPlease enter substring t: ); scanf(n%sH,t);m=fun (s,t);printf(HnThe result is: m=%dnn, m);32.给定程序MODE C中函数fun的功能是:求三个数的最小公倍数。例如,给主函数中的变量xl、x2、x3分别输入15 112,则输出结果应 当是:330。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。456789101112131415*found*16return i;*include *found*
14、fun (int x, y, z)int jrt ,n ,m;j = 1 ;m=j*y ;n-j%z;while(t!0I|m!-0|n!=0)( j - j+1;t=j%x;mj%y; n=j%z;1819202122232417 main () int xl,x2,x3r j ;printf (wInput xl x2 x3: w);scanf (n%d%d%drfr &xl, &x2, &x3);printf (ffxl-%dr x2%dr x3-%d nnr xlrx2rx3);jfun(xlr x2,x3);printf(wThe minimal common multiple is
15、 : %dn,j);33.下列给定程序中,函数fun()的功能是找出100n(n不大于1000)之 间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所 指的数组中,个数作为函数值返回。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #define N 100 int fun(int *s, int n) inti, j, k, a, b, c ;j=0;for(i=100 ; i n ; i+)/vl*1si* /不不不不不不不不不不不不不Tei ind不不不不不不不不不不不/kn za=k%10
16、 ;k/=10 ;b=k%10 ;c=k/10 ;if(a=b+c)/ /不不不不不不不不不不不不ci m不干不不不不不不不不不不不不/sj=i ;return j ;main() int aN, n, num=0, i ;do printf(nnEnter n( 1000);num=fun(a, n);5 .数据的逻辑结构有线性结构和 两大类。6 .在C语言中(以16位PC机为例),一个float型数据在内存中所占的 字节数为4;一个double型数据在内存中所占的字节数为【】。7 .设丫是int型变量,请写出判断Y为奇数的关系表达式【】。8 .与表达式a+4等价的另一书写形式是o9 .下列
17、程序中的数组a包括10个整数元素,分别将前项和后项之和存 入数组b,并按每行4个元素输出数组b。请填空。#include main() int a10,b10,i;for(i=0;i 10;i+) scanf(%d,&ai);fbr(i=0;i 9;i+) for(i=0;i 9;i+) if(i%4=0)printf(nnn);printf(n%3dn,bi);)10 .设有以下结构体类型:struct st charname8;printf(nnnThe result : n”);for(i=0 ; i num ; i+)printf(%5d, ai);printf(Hnnn);34.下列
18、给定程序中,函数fun()的功能是:将m(lWmWlO)个字符串反着 连接起来,组成一个新串,放入pt所指字符串中,例如把3个串DEG, ac, df反着串联起来,结果是dfacDEG。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main。函数,不得增行或者删行,也不得改变程序的结 构!试题程序:#include #include #include void fun(char str10, int m, char *pt)(intk, q, i, j=0 ;/ kL*kL*kL*kL*1kL*kL*/不不不不不不不不不不不不不tc mri不不不不不不不不不不不不不/for(k=m
19、;k 0 ;k)(q=strlen(strk); j+二q ;for(i=0 ; i 4/vl* k1* kIx 4/k* kL* /不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不/pt=j;main()int m, h ;chars1010, p120;clrscr();printf(nnPlease enter m :n);scanf(n%dn, & m);printf(nnPlease enter%d string : nn, m);gets(sO);for(h=0 ; h m ; h+)gets(sh);fun(S, m, p);printf(n/nThe resu
20、lt iS : %snn, p);35.给定程序MOD11 . C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:ABC DEF GHI JKO请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1234567tinclude void fun(char char *b) (int i, k-0;while(*p) il; while(i3 & *p) /found8910b(kl-p;k+
21、; p+;13/*found*/141516171819bk+=” ,) b(kJ-fOf;)main ()202122232425 char a80rb(80);printf(wEnter a string:w);gets(a);printf (The original string: ); puts(a);fun(arb);printf (wnThe string after insert space: ); puts (b); printf (,lnnn);36.给定程序MODH . C中函数fun的功能是:找出100至n(不大于 1000)之间三位数字相等的所有整数,把这些整数放在s所
22、指数组中,个 数作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1234567891011121314151617181920include tdefine N 100 int fun(int int n) intj0; for(i100; in; i+)(k*n;.a-k%10; k/10;bk%10; k/-10;found*.c-k%10if (a-b & a-c) s j+i;return j;main () int aN, n.num-Or i;212223242526do printf(wnE
23、nter n ( 1000);num fun (a, n);printf(nnnThe result :nn);for(iO; inum; i+)printfprintf(wnnn);37.下列给定程序中,函数fun()的功能是:根据形参m的值(2勺g9), 在m行m列的二维数组中存放如下所示的数据,由main()函数输出。 例如,若输入2,则输出1224输入4,则输出123424683 69 124 8 12 16请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include #define M 10i
24、nt aiM MI=0;/1 Kt#v! vl kT*/不不不不、不不不不不不不不不不 T/*Vl ITiri不不可不不不不不不不不不不不不不不不不/fun( int *a, int m)intj,k;for (j=0; j m; j+) for (k=0; k m; k+)/ st*1*si*sivl#st*/不不不不不不不不不不不不不不不ci ind不不不不不不不不不不不不不不不不不不不/aj k=k*j;)main ()int i,j, n;clrscr ();printf (nEnter nnn); scanf (%d,&n);fun (a, n);for (i=0; i n; i+)
25、 for (j=O;j n;j+)printf (%4d ,ai j); printf (nn n);)38.给定程序MOD11 . C中函数fun的功能是:首先把b所指字符串中 的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的 字符,按排列的顺序交叉合并到C所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为“abcdefg”,b所指 字符串中的内容为“1234”1时,c所指数组中的内容应该为“a4b3e2dlefg”;而当a所指字符串中的内容为“1234”, b所指字符串中的内容为“abedefg” 时,c所指数组中的内容应该为“lg2fse4dcb
26、a”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!2345678910*include include void fun (char *ar char *br char *c)int i r j; char ch;1 - 0; j = strlen(b)-1; found while (i j) chbi;bi-bj;bj-ch;12131415161718192021222324while (*a |I *b) foundIf La)if (*b)*c 之 o;main()25262728*a; C+; a*+;*b; C+;
27、b+;char sl100,s2(100,t200;printf(wnEnter si string : w);scanf(n%swr si);printf(wnEnter s2 string :scanf(w%swr s2);fun (si, s2, t);printf(nnThe result is:%snMrt);1.1. j-;39 .下列给定程序中函数fun()的功能是:计算n!。例如,给n输入5, 则输出 120.000000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include d
28、ouble fun (int n) double result=L0;/1/不不不个个不不不不个不个不rm inc不不不个不不不不不不不不不不/if n=0return 1.0;while (n l&n 170) result *=n- return result;)main () int n;printf (Input N: ); scanf(H%dH &n); printf (nnn%d!=%lAnnn,n, fun(n);40 .给定程序MODII . C中fun函数的功能是:根据整型形参m,计算 如下公式的值。例如,若主函数中输入5,则应输出-0.283333。请改正函数ftm中的错误
29、或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1 tinclude 2 i double fun(int m)3 456 789101112131415161718double t = 1.0;int 1;for(i * 2; i (0Mfd mt fun.M”.La2iN(h/ fouad 050i j+ )ljU IOi-0&.2 5)l Mj%】。0人&a1町】1/ found return jivoid main() mt n fun(a)i*tbc guh HiXn*)i fori-0Knii+,pnn
30、t(C) ipnntfCeXn*) i42 .下列给定程序中,函数proc的功能是:从字符串str中,删除所有 大写字母F。请修改程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结 构。试题程序:#include<stdio. h>void proc(char*str) (int i, j;* * * * * *fbr(i=j=O; stri 0; i+)if(stri!=F) /* found* * * *stri=stri;strj=O;)void main(char str80;printf(nnEnter a string:);
31、gets(str);printf(nThe original string:);puts(str);proc(str);printf(nThe string after deleted:);puts(str);printf(nn); 六、操作题(2题)43 .某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的 成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的 平均分放在记录的ave成员中。请自己定义正确的形参。int num ;float s4;student50;并且结构体数组student中的元素都已有值。若要将这些元素写到硬盘 文件fp中,请将以下fwrite
32、语句补充完整:fwrite(student, , 1, fp);二、单选题(10题)11 .若有定义:“inta, b ; ”,通过语句“scan(”d ; %d&a, &b); ”,能把整数3赋给变量a, 5赋给变量b的输入数据是()。A.3 5B.3, 5C.3 ; 5 D.3512 .若有以下说明和定义:int fun (int c) | .main()Iint ( a) (int ) = fun, * b( ) , x 10 t c; I则对函数fun的正确调用语句是()。A.( * a)(&c); B.a = a(x); C.b = * b(x); D.fun(b);13.数据结构主
33、要研究的是数据的逻辑结构、数据的运算和()。A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储例如,若学生的成绩是 85.5, 76, 69.5, 85, 91, 72, 64.5, 87.5,则他的平均分应当是78.875。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include #define N 8 typedef struct char num 10;double sN;double ave ;STREC ;void fun()()main()(STREC s=GA005, 85.5,
34、 76, 69.5, 85, 91,72, 64.5, 87.5);int i;fun (&s);printf(The %ss student data : n, s.num)/ /*输出学号*/for(i=0 ; i N; i+)printf(%4.1fn, s.si);/*输出各科成绩*/printf(nnave=%7.3fnn, s.ave);/*输出平均分*/ )44.以下程序运行后的输出结果是【】。(注:如果结果中含有回车,可 加一空格写在一行,例如:1111111 11可以写成:1 1 1 1 1 1 1 1 lo#include mala() int i,j,a3= 1,2,34
35、,5,6,7,8,9);for(i=0;i 3;i+)for(j=i+l;j 3;j+) aji=O;for(i=0;i 3;i+) for(j=0;j 0成立,执行fun(x/2),即fun(3), 同时输出x的值6 ;再判断if条件,3/2 0成立,再执行fun(x/2),即 fun(l),同时输出x的值3 ;此时1/2 0不再成立,输出1。而递归调用 的输出顺序是相反的,故输出结果为1 3 604 .运行后报错运行后报错解析:指针q没有指向确定的存储单元,故不 能赋值。5 .非线性结构非线性结构6.88解析:在一般系统中,一个float型数据在内存中占4个字节(32 位),一个doubl
36、e型数据占8个字节。7 .丫%2=1或Y%2!=OY%2=1或丫2!=0解析:判断变量是否为奇数 可以用变量与2取模,判断结果是为1或下为0。本题具体做法如下: Y%2=1 或 丫2!=0。8 .a=a+ba=a+b解析:a+=b与a=a+b等价,作用是把变量a的值加b后 再赋给变量ao9 .bi=ai+ai+lbi=ai4-ai+l解析:将数组 a 中元素 ai与 aj+l值 相加后的值赋予数组b中元素bi,即可实现将一个数组的前项和后项 之和存入另一数组。10.sizeof(struct st)*50sizeof(struct st)*50 解析:fwrite 函数的一般调用形 式为:fw
37、rite(buffer, size, count, fp);其中:buffer 是个指针变量, 是要输出数据的起始地址;size是要写的字节数;count是要写多少个 size字节的数据项;fp是文件指针。11 .Cn在输入时必须遵守scanf函数中的格式才能正确地赋值给相应的变量,由于scanf函数为“d;%d,所以在输入时要输入3 ; 5,答案为Con12.A题干中,函数fun接收一个整型指针参数,返回值为血类型。main函 数首先定义一个函数指针a,将函数fun的地址赋给a,所以a是指向 函数fun的指针,可以通过a调用函数fun。选项A中,通过a调用函 数fun,可以使用(*乃,接收的
38、参数是整型变量c的地址,正确;选项B 中,参数x是一个数组,错误;选项C中,调用b函数,由于程序没有 给出函数b的定义,因此这里调用b是错误的,而且函数b是没有参 数的,这里调用b的时候传入了参数,所以C错误;选项D中,由于b 是一个函数,不能作为整型指针变量传给fun函数,因此D错误。本 题答案为A选项。13.B详细解答:数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个 方面的内容,即数据的逻辑结构、存储结构和数据的运算。14.B15 . A16 .D本题考查对软件生命周期的理解,软件生命周期整体上可分为定义 阶段、开发阶段和维护阶段。其中定义阶段包括可行性研究与计划
39、制订 和需求分析;开发阶段包括概要设计、详细设计、开发和测试;维护阶 段是一个单独阶段,不包含在开发阶段内,它是所花费用最多的一个阶 段。17 .C 解析:选项 A) char *a ; *a = china”应改为 a = china ;,选项 B)应 该是char str6 ;D)项表述方法有错误。18 .C子函数funl(double a)的功能是返回a的平方值的整数部分。子函数fun2(double X, double y)的功能是返回X的平方值的整数部分与Y的 平方值的整数部分的和。又因为题中变量W的定义为double型,函数 fun(2)的定义为int型,按照各类数值型数据间的混合运算,整型数据 被转换为实型数据。所以双精度型变量w的值为5. Oo19 .Csum=fun(a+, b+, a+b), C+)中 a+, b+, a+b 为逗号表达式,运算后取a+b的值为5, C+为3,故函数调用后输出结果为8。20.A