2022-2023学年山东省滨州市全国计算机等级考试C语言程序设计真题二卷(含答案)_第1页
2022-2023学年山东省滨州市全国计算机等级考试C语言程序设计真题二卷(含答案)_第2页
2022-2023学年山东省滨州市全国计算机等级考试C语言程序设计真题二卷(含答案)_第3页
2022-2023学年山东省滨州市全国计算机等级考试C语言程序设计真题二卷(含答案)_第4页
2022-2023学年山东省滨州市全国计算机等级考试C语言程序设计真题二卷(含答案)_第5页
已阅读5页,还剩22页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2022-2023学年山东省滨州市全国计算机等级考试C语言程序设计真题二卷(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.已知一算术表达式的中缀形式为A+B*C–D/E,后缀形式为ABC*+DE/–,其前缀形式为()。

A.–A+B*C/DEB.–A+B*CD/EC.–+*ABC/DED.–+A*BC/DE

2.

3.有以下程序段:#include<stdio.h>intj;floaty;charname[50];scanf(“%2d%f%s”,&j,&y,name);当执行上述程序段时,从键盘上输入555667777abc后,y的值为()。

A.566.0B.55566.0C.7777.0D.566777.0

4.有以下定义和语句:structworkers{intnum;charname[20];charC;struct{intday;intmonth;intyear;)S;};structworkersw,*pw;pw=&w;能给w中year成员赋1980的语句是()。A.*pw.year=1980;

B.w.year=1980;

C.pw->year=1980

D.w.S.year=1980;

5.下面描述中,不属于软件危机表现的是()A.软件过程不规范B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高

6.C程序是由()构成的。

A.主程序与子程序B.主函数与子函数C.一个主函数与若干个其他函数D.主函数与子程序

7.下列程序的输出结果是()。#includedstdi0.h>#includedstring.h>voidfun(intb[]){staticinti=0;do{b[i]+=b[i+1];}while(++i<2);}main{intk,a[5]={1,3,5,4,9};fun(a);for(k=0;k<5;k++)printf("%d",a[k]);}A.13579B.48579C.48549D.48999

8.有3个关系R、S和T如下.

则由关系R和S得到关系T的操作是()。A.自然连接B.差C.交D.并

9.有以下程序:#includeintfun(intx,inty){if(x!=y)return(x+y)/2);elsereturn(x);}Main(){Inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c));}A.6B.3C.8D.12

10.下列存储器中,存取速度最快的是()。

A.软盘B.硬盘C.光盘D.内存

11.以下关于long、int和short类型数据占用内存大小的叙述中正确的是(),

A.均占4个字节B.根据数据的大小来决定所占内存的字节数C.由用户自己定义D.由C语言编译系统决定

12.当用户要求输入的字符串中含有空格时,应使用的输入函数是()。

A.scanfB.getcharC.getsD.getc

二、2.填空题(12题)13.下列程序的运行结果是______。

#defineP(A)printf("%d",A)

main()

{intj,a[]={1,2,3,4,5,6,7),i=5;

for(j=3;j>1;j--)

{switch(j)

{case1:

case2:P(a[i++]);break;

case3:P(a[--i]);

}

}

}

14.下列程序段的输出结果是【】。

main()

{charb[]="Hello,you";

b[5]=0;

printf("%s\n",B);

}

15.设有下列宏定义:#defineA2

#defineBA+3

则执行赋值语句;t=B*2;t为int型变量后的值是______。

16.软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和【】的设计来实现。

17.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个______实际上对应一个处理模块。

18.下面程序把从终端读入的10个整数以二进制方式写入一个名为bi.dat的新文件中。

#include<stdio.h>

FILE*fp;

main()

{inti,j;

if(fp=fopen(【】)==NULL)exit(0);

for(i=0;i<10;i++)

{scanf("%d",&j);

fwrite(&j,sizeof(int),1,【】;

}

fclose(fp);

}

19.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。

#include<string.h>

main()

{inti,j,【】;charstr[]={"1234567"};

for(i=0,j=strlen(str)【】;i<j;i++,j--)

{k=str[i];str[i]=str[j];str[j]=k;}

printf("%s\n",str);}

20.对于软件测试,从是否需要执行被测软件的角度,可以分为静态测试和动态测试。代码检查属于______测试。

21.以下程序运行后的输出结果是【】。

main()

{inti,j,a[][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)

for(j=i+1;j<3;j++)a[j][i]=0;

for(i=0;i<3;i++)

{for(j=0;j<3;j++)printf("%d",a[i][j]);

printf("\n");

}

}

22.若x和n均是int型变量,且x=12,n=5,则执行y=x%=(n%=2)表达式后y的值为()。

23.数据的逻辑结构有线性结构和______两大类。

24.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【】(要求形参名为b)。main(){doubles[10][22];intn;……fun(s);……}

三、3.程序设计题(10题)25.请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。

例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。

注意:要求n的值大于2但不大于100。部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

26.请编写函数fun,其功能是:计算并输出下列多项式的值:

例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。

注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

27.请编写函数fun(),该函数的功能是:实现B=A+A',即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main()函数中输出。

例如,输入下面矩阵:

123

456

789

其转置矩阵为:

147

258

369

则程序输出:

2610

61014

101418

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf("%7d",t[i][j]);

printf("\n");

}

}

28.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为asdasasdfgasdaszx67asdmklo,子字符串为as,则应当输出6。

注意:部分源程序给出如下。

请勿改动主函数main和具他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*str,char*substr)

{

}

main()

{

charstr[81],substr[3];

intn;

clrscr();

printf("输入主字符串");

gets(str);

printf("输入子字符串");

gets(substr);

puts(str);

puts(substr);

n=fun(shr,substr);

printf("n=%d\n",n);

}

29.请编写函数fun,其功能是:计算并输出给定10个数的方差:

例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。

注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

30.请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,一维数组中的数据是:2223445666677899101010。

删除后,数组中的内容应该是:2345678910。

注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

31.请编写一个函数voidfun(cbara[],charb[],intn),其功能是:删除一个字符申中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

{

}

main()

{

charstr1[LEN],str2[LEN];

intn;

clrscr();

printf("Enterthestring:\n");

gets(str1);

printf("Enterthepositionofthestring

deleted:");

scanf("%d",&n);

fun(str1,str2,n);

printf("Thenewstringis:%s\n",

str2);

}

32.请编写函数fun(),该函数的功能是:计算n门课程的平均分,计算结果作为函数值返回。

例如x有5门课程的成绩是90.5,72,80,61.5,55,则函数的值为71.80。

注意:部分源程序给出如下.

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

floatfun(float*a,intn)

{

}

main()

{

floatscore[30]=(90.5,72,80,61.5,55},

aver;

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f

\n",aver);

}

33.m个人的成绩存放在score数组中,请编写函数fun(),它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。

例如,当score数组中的数据为10,20,30,40,50,60,70,80,90时,函数返回的人数应该是4,below中的数据应为10,20,30,40。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intbelow[])

{

}

main()

{

ihti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,

80,90};

clrscr();

n=fun(score,9,below);

printf("\nBelowtheaveragescoreare:");

for(i=0;i<n;i++)

printf("%d",below[i]);

}

34.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言中提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio,h>

#include<stdio,h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

四、单选题(0题)35.有以下程序:#include<stdio.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(“%d”,y[i]);printf(“\n”);}程序的运行结果是()。

A.-3,-1,1,3,B.-12,-3,0,0,C.0,1,2,3,D.-3,-3,-3,-3,

五、单选题(0题)36.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法()

A.分块B.顺序C.折半D.哈希

六、单选题(0题)37.

参考答案

1.D

2.D

3.Ascanf是格式输入函数,即按用户指定的格式从键盘上把数据输入指定的变量中。其中,在百分号(%)与格式码之间的整数用于限制从对应域读入的最大字符数。所以j的值为55,y的值为566.0,字符数组name的值为7777abc。故本题答案为A选项。

4.D结构workers中的成员s是一个嵌套的结构类型定义,因此在给year赋值时,要用“.”运算在深入一层访问到最基本的成员year,只有D项反映出了这一点。

5.A软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。

6.B

7.C本题考查do-while循环,在fun函数中,首先定义了静态变量i=0,do-while循环要实现的功能是以b[0]=b[0]+b[1],b[1]=b[1]+b[2],其他元素不变的规则重新给b数组赋值。在主函数中,通过调用fun函数,按上面的规则对数组a重新赋值,最后输出数组a。

8.B关系之间的操作分为自然连接、投影、交、并、差等,由图可知此操作为差操作。

9.A本题中第一次调用为fun(8,fun(5,6)),因为fun(5,6)返回值为5,所以第二次调用为fun(8,5)=6。所以选择A)。

10.D\nD【解析】存储器中.存取速度最快的是内存。

\n

11.D解析:在C语言的标准中,short占2个字节、long占4个字节,但int的大小和编译系统相关。例如在Turbo\u3000C\u30002.0中,int占2个字节,但在VisualC++6.0(VC6可以用做C语言编译器)中占4个字节。故本题应该选择D。

12.C解析:C语言提供了许多输入函数,其中有:getchar(输入字符)、scanf(格式输入)和gets\u3000(输入字符串)等。题目要求输入的是字符串,所以可以排除getchar,而且要求输入的字符串中包含空格,而scanf函数默认将输入的空格字符作为分割符,所以空格不会被输入,故可排除scanf。getc的作用是从文件中输入一个字符,故也不可取。gets函数可以输入一整行作为一个字符串,其中也包括空格字符,故应该选择C。

13.5555解析:分析程序执行过程,第一次循环时,j=3,i=5。因为switch(3),所以执行case3,调用P(a[--i])=P(a[4])=P(5),输出5;第二次循环时,j=2,i=4,因为switch(2),所以执行case2,调用P(a[i++])-P(a[4])=P(5),输出5,之后i自加等于5。

14.HelloHello解析:字符串中,数值0或符号'/0'表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。

15.88解析:本题考查带参数的宏定义及相关运算.运算过程为:t=B*2=A+3*2=2+3*2=8。

16.测试实例测试实例解析:进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。

17.加工加工解析:数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中的每一个加工对应一个处理模块。

18."bi.dat"fp'bi.dat'\r\nfp解析:打开文件函数fopen的参数是文件名,因此有fopen('bi.dat');而写文件的参数是文件指针,因此有fwrite(&j,sizeof(int),1,fp);

19.k-1k\r\n-1解析:颠倒一个字符串中的字符,就是首尾对应的元素两两交换。简单地可用两个游标变量i和j,i是前端元素的下标,j是后端元素的下标,交换以这两个变量值为下标的元素str[i]和str[j]。开始时,i的值为0,j的值为字符串末元素的下标(字符串长度减1)。每次交换后,i增1,j减1。继续交换的条件是str[i]还位于str[j]的前面,即i<j。字符串末元素的下标是它的长度减1,所以在第二个空框处应填入-1。程序为了交换str[i]和str[j],使用了变量k,该变量应在程序的变量定义部分中一起定义,所以在第一个空框处应填入k。

20.静态静态解析:静态测试包括代码检查、静态结构分析,代码质量度量等。静态测试不实际运行软件。

21.123056009123\r\n056\r\n009解析:数组a中元素的初值为:a[0][0]=1、a[0][1]=2、a[0][2]=3、a[1][0]=4、a[1][1]=5、a[1][2]=6、a[12][0]=7、a[2][1]=8、a[2][2]=9。执行第1个for循环后a[1][0]=0、a[2][0]=0、a[2][1)=0;第2个for循环的功能是将数组元素按照3行3列的格式输出。

22.00解析:n%=2等价于n=n%2,结果为1:x%=1等价于x=x%1,结果为0。

23.非线性结构非线性结构

24.

25.

解析:函数fun的功能是计算并输出3到n之间(含3和n)所有素数的平方根之和,首先根据题干中的要求找出3到n之间的素数,并求出素数的平方根,然后求得这些平方根的和。

26.

解析:该程序功能是计算并输出多项式的值。该题的解题思路是。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

27.voidfun(inta[3][3]intb[3][3]){intij;for(i=0;i<3;i++)for(j=0;j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置存放在矩阵b中*/}voidfun(inta[3][3],intb[3][3])\r\n{\r\ninti,j;\r\nfor(i=0;i<3;i++)\r\nfor(j=0;j<3;j++)\r\nb[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置,存放在矩阵b中*/\r\n}解析:在《线性代数》里面有矩阵转置的概念,行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j列正好对应原矩阵的第j行第i列。

若要将矩阵a转置后还存入a中可用程序:

inti,j,t;

for(i=0;i<N;i++)

for(j=i;j<N;j++)

{t=a[i][j];a[i][j]=a[j][i];a[j][ii=t;}

注意第2个循环的初值。

若要将矩阵a转置后存入c中:

inti,j;

for(i=0;i<N;i++)

for(j=0;j<N;j++)

c[i][j]=a[j][i];

注意数组c和a的下标。

28.intfun(char*strchar*substr){intij=0;for(i=0;str[i+1]!='\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次则j+1如此循环*/if(str[i]==substr[0]&&str[i+1]==substr[1])j++;returnj;/*返回子字符串在主字符串中出现的次数*/}intfun(char*str,char*substr)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i+1]!='\\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次,则j+1,如此\r\n循环*/\r\nif(str[i]==substr[0]&&str[i+1]==substr[1])\r\nj++;\r\nreturnj;/*返回子字符串在主字符串中出现的次数*/\r\n}解析:该题中subsu只有两个字符,所以可以用if语句来直接进行判断。要注意if())中str组的下标为i和i+1,即比较当前字符及其以后的一个字符是否分别与substr中的字符对应相同,若都相同则表示出现了一次。

29.

解析:该程序功能是计算并输出给定10个数的方差。解题思路是,根据题干中给出的方差公式首先计算出x’的值,然后计算根号里面的值,最后求其平方根。

30.

解析:该程序功能是删去一维数组中所有相同的数,使之只剩一个。解题思路是,首先在函数中定义临时变量指向每一个元素,然后在循环过程中将临时值和其他元素进行比较,如果相同,那么跳过相同字符。

31.voidfun{chara[]charb[]intn){intik=0;for(i=0;a[i]!=‘\0’;i++)if(i!=n)/*将不是指定下标的字符存入数组b中*/b[k++]=a[i];b[k]=‘\0’;/*在字符串最后加上结束标记*/}voidfun{chara[],charb[],intn)\r\n{\r\ninti,k=0;\r\nfor(i=0;a[i]!=‘\\0’;i++)\r\nif(i!=n)/*将不是指定下标的字符存入数组b中*/\r\nb[k++]=a[i];\r\nb[k]=‘\\0’;/*在字符串最后加上结束标记*/\r\n}解析:本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。所以要用if(i!=n),注意不能写成“=”运算。

32.floatfun(float*aintn){floatav=0.0;inti;for(i=0;iav=av+a[i];/*求分数的总和*/return(av/n);/*返回平均值*/}floatfun(float*a,intn)\r\n{\r\nfloatav=0.0;\r\ninti;\r\nfor(i=0;iav=av+a[i];/*求分数的总和*/\r\nreturn(av/n);/*返回平均值*/\r\n}解析:我们先按数学的思路来计算平均分:总分除以人数即可得到平均分,其实用C语言的指针来实现该问题,也不难。当指针变量指向一个数组时,用该指针变量引用数组元素时,引用方式与数组的引用方式相同。如本题中a指向了score,所以通过a引用score中的元素时可以用下标法,也可以用指针运算法,a[i]和*(a+i)具有相同的作用。下标运算实际上是从当前地址开始往后取出地址中的第几个元素,当前地址下标为0。例如:若有intcc[10],*P=cc+5;,即p指向了cc的第5号元素,则p[0]的作用是取出从当前地址(即p所指地址)开始的第0号元素,它与cc[5]相同:p[3]的作用是取出从当前地址(即p所指地址)开始往后的第3号元素,它与cc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论