2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.设有定义“intx,y,z;”,且各变量已经赋正整数值,则以下能正确表示代数式“”的C语言表达式是()。

A.1.0/x/y/zB.1/x*y*zC.1/(x*y*z)D.1/x/y/(double)z

2.若有语句“typedefstructTT{charc;inta[4];}CIN;”,则下列叙述中正确的是()。

A.CIN是structTT类型的变量

B.TT是struct类型的变量

C.可以用TT定义结构体变量

D.可以用CIN定义结构体变量

3.当接受用户输入的含有空格的字符串时,应使用()函数。

A.gets()B.getchar()C.scanf()D.printf()

4.有以下程序main(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d",a[1][i]);}程序运行后的输出结果是

A.12B.123C.234D.345

5.软盘上第()磁道最重要,一旦损坏,该盘就不能使用了。

A.0B.40C.1D.80

6.

7.

8.以下正确的字符串常量是()。

A.\\\B.'abc'C.OlympicGames

9.设"char**s;",以下正确的表达式是()。

A.s="computer";B.*s="computer";C.**s="computer";D.*s='c';

10.数据结构若采用链式存储结构,要求内存中可用存储单元的地址()。

A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以

11.C语言可执行程序的开始执行点是()。

A.包含文件中的第一个函数B.程序中第一个函数C.程序中的main()函数D.程序中第一条语句

12.有下列程序:程序执行后的输出结果是()。

A.0,-1,-1,-1

B.0,-1,-1,0

C.0,-1,-1,0,-1,0

D.0,-1,-1,-1,-1,-1

二、2.填空题(12题)13.以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下:

ABCDE

FGHI

JKL

MN

O

请填空完成该程序。

main()

{inti,j,n;charch='A';

scanf("%d",&n);

if(n<11)

{for(i=1;i<=n;i++)

{for(j=1;j<n-i+1;j++)

{printf("%2c",ch);

[10];

}

[11];

}

14.常用的黑箱测试有等价分类法、【】、因果图法和错误推测法4种。

15.【】是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。

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

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");

}

}

17.数据结构分为逻辑结构和存储结构,循环队列属于______结构。

18.以下程序的输出结果是【】。

main()

{inty=9;

for(;y>0;y--)

if(y%3==0)

{printf("%d",--y);continue;}}

19.数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。

20.一般来说,数据库的设计过程要经历3个大的阶段,即可行性分析与研究阶段、系统设计阶段、设计实施与系统运行阶段。概念设计、逻辑结构设计、物理结构设计属于数据库设计的【】阶段。

21.以下程序运行后的输出结果是()。#definePower2(x)x*xmain(){inti=6,j=8;printf("%d\n",Power2(i+j));}

22.【】是数据库设计的核心。

23.下列程序的功能是计算1~100的整数的累加和。

main()

{inti,sum=【】;

i=1;

for(【】)

{sum+=i;

i++;

}

printf("sum=%d\n",【】);

}

24.若有定义语句chars[100],d[100];intj=0,i==0;且s中已赋字符串,请填空以实现拷贝。(注:不使用逗号表达式)

while(s[i]=【】;j++;}

d[j]=0;

三、3.程序设计题(10题)25.请编写函数fun(),该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

例如,若二维数组中的数据为:

33333333

44444444

55555555

则一维数组中的内容应该是33333333444444AA,55555555

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

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

试题程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,

intmm,intnn)

{

}

main()

{

intw[10][10]={{33,33,33,33},{44,44,

44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printf("Thematrix:\n");

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

{for(j+0;j<4;j++)

printf("%3d",w[i][j]);

printf("\n");

}

fun(w,a,&n,3,4);

printf("TheAarray:In");

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

printf("%3d",a[i]);

printf("\n\n");

}

26.请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

27.请编写函数fun,函数的功能是:移动一维数组中的内容:若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10:p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。

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

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

28.程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(inta[][N],intn),该函数的功能是使数组左下半三角元素中的值加上n。

例如:若n的值为3,a数组中的值为

a=254

169

537

则返回主程序后a数组中的值应为

554

499

8610

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

fun(inta[][N],intn)

{

}

main()

{

inta[N][N],n,i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机5*5矩阵*/

{

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

{

a[i][j]=rand()%10;

printf("%4d",a[i][j]);

}

printf("\n");

}

do

n=rand()%10;

/*产生一个小于5的随机数n*/

while(n>=5);

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

fun(a,n);

printf("*****THERESULT*****\n");

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

{

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

printf("%4d",a[i][j]);

printf("\n");

}

}

29.编写一个函数,该函数可以统计一个长度为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);

}

30.请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

{

}

main()

{

inti,x[20],max,index,n=10;

randomize();

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

{

x[i]=rand()%50;

printf("%4d",x[i]);

/*输出一个随机数组*/

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

31.请编写函数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");

}

}

32.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234345753134436458100321135760

则输出结果为6,100。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

}

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

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

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

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

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

34.下列程序定义了N×N的二维数组,并在主函数中自动赋值;请编写函数fun(inta[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为

a=197

238

456

则返回主程序后a数组中的值应为

097

008

000

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

printf("%4d",a[i][j]);

}

printf("\n");

}

fun(a);

printf("THERESULT\n");

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

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

printf("%4d",a[i][j));

printf("\n");

}

}

四、单选题(0题)35.健壮的算法不会因非法的输入数据而出现莫名其妙的状态()

A.对B.错

五、单选题(0题)36.在一个C语言源文件中定义的全局变量,其作用域为()。

A.由具体定义位置和extern说明来决定范围B.所在程序的全部范围C.所在函数的全部范围D.所在文件的全部范围

六、单选题(0题)37.有下列程序:main(){char*P[]={"3697","2584");inti,j;longnum=0;for(i=0;i<2;i++){j=0;while(p[i][j]!=\0){if((p[i][j]-t\0)%2)num=10*num+p[j][j]-0;j+=2;}}printf("%d\n",num);}程序执行后的输出结果是()。A.35B.37C.39D.3975

参考答案

1.A代数式“”的结果为小数,转为C语言的表达式必须是浮点数。A选项由于1.0为浮点数,计算结果自动转换为浮点数。选项B、C、D的表达式均为0,因此只有选项A正确。故本题答案为A选项。

2.DCIN为结构体类型名,而不是结构体变量。故本题答案为D选项。

3.A

4.D解析:本题考查的是二维数组元素在内存中的排列形式。虽然二维数组成多维数组从结构上来看不是线性的,但是在C语言中,这些数组元素在内存中的排列是连续线性存放的。它们的排列规则是:第一维下标变化最慢,最右边的下标变化最快.例如本题中定义的二维数组a[3][3]中9个元素在内存中的排列顺序是:a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2]。在主函数中,首先定义了二维数组a[3][3],然后定义了一个指针p指向数组a的第1个元素a[0][0]。在第一个for循环中,依数组a在内存中的排列顺序为其元素赋从0~8九个值,然后用第二个for循环依次输出a[1][0],a[1][1],a[1][2]三个元素的值。所以,4个选项中选项D符合题意。

5.A

6.C

7.D

8.D解析:在C语言中,字符串常量是以双引号括起来的字符序列。故选项B和C不正确。字符序列中可包含一些转义字符,转义字符都是以“\\”开头的。选项A中包含了三个“\\”,前两个(\\\\)代表了一个“\\”字符,后面一个和“'”一起(\\”)被看作一个……,所以该字符串缺少一个结束的“'”,故不正确。选项D的两个……之间没有任何字符,代表的是一个空串,是合法的字符串常量,故应该选择D。

9.B

10.D

11.C解析:每个C程序有且只有一个主函数main(),且程序必须从main函数开始执行,并在main()函数中结束。

12.A程序定义整型变量a和b,初值分别是1,-2。for语句中循环条件式为“a--&&b++”,因为--和++的优先级高于逻辑与运算符&&,所以循环条件式等价于“(a--)&&(b++)”,自左向右运算。第1轮循环,a、b的值为1,-2,首先执行a--,a--的值为1,执行完后a的值为0;继续执行b++,b++的值为-2,执行完后b的值为-1。整个表达式“a--&&b++”的值为真,程序输出0,-1。第2轮循环,a、b的值分别为0,-1,首先执行a--,a--的值为0,执行完后a的值为-1,由于a--的值为0,根据逻辑与运算的短路原则,表达式“a--&&b++”的值一定为假,表达式b++不再执行,循环结束,执行循环体外的printf语句,输出a、b的值分别为:-1,-1。所以本题输出结果为:0,-1,-1,-1。本题答案为A选项。

13.C语言允许字符数据与整数进行直接的算术运算,故输出大写字母A开始的连续字符,可通过白加运算ch++完成。三角形字符阵列第i行的字符个数为n-i+1,在每行结尾以回车字符‘\\n’换行。\r\n\r\n

14.边值分析法边值分析法解析:本题考查了黑箱测试的方法。黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。

15.封装封装解析:面向对象技术中包括以下几个基本概念,即对象、类、方法、消息、继承和封装,其中封装是一种信息隐蔽技术,目的在于将对象的使用者对象的和设计者分开。

16.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列的格式输出。

17.存储或物理或存储结构或物理结构存储或物理或存储结构或物理结构解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。供队列循环使用。可知,循环队列应当是物理结构。

18.852852解析:循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。

19.概念设计阶段(数据库概念设计阶段)概念设计阶段(数据库概念设计阶段)

20.系统设计系统设计解析:系统设计阶段是系统的具体设计过程,主要包括概念设计、逻辑结构设计、物理结构设计3个步骤。这3个不同层次上的设计过程,是把实体以及相互之间的联系转换为“数据”并落实于计算机中。

21.6262解析:本题考查的是宏定义。带参数的宏定义是按#indefine命令行中指定的字符串从左到右进行转换。本题中替换的式子为:6+8*6+8,代入i,j的值得到62。

22.数据模型数据模型

23.0;sum<=100;sum

24.s[i++]s[i++]解析:本题中为了能实现字符串的拷贝,需要使字符数组s从头到尾依次遍历其所有元素。本题应使用i的自增后置来实现。

25.voidfun(int(*s)[10]int*bint*nintmmintnn){intijk=0;for(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/for(j=0;j<nn;j++)b[k++]=s[i][j];/*通过指针返回元素个数*/*n=k}voidfun(int(*s)[10],int*b,int*n,intmm,intnn)\r\n{\r\ninti,j,k=0;\r\nfor(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/\r\nfor(j=0;j<nn;j++)\r\nb[k++]=s[i][j];/*通过指针返回元素个数*/\r\n*n=k\r\n}解析:我们可以用两个循环来处理问题,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成:

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

for(j=0;i<mm;j++)

b[k++]=s[j][i];

要注意s[j][i]的下标,不能用s[i][j]。

若按行取出则列标变化最快,若按列取出则行标变化最快。再根据循环嵌套时,越在内层的循环,其循环变量变化就越快。上题程序中只有当j从头到尾变化完时,i才变化一次(即加1);由于二数组的第1个下标为行下标,第2个下标为列下标,所以第1个程序列变化最快、第2个程序行变化最快。

26.

解析:该程序功能是求一维整型数组元素中最大的值和它所在的下标。其中,求最大元素的方法:用最大值变量nax标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记其当前最大值及其所在位置,从而找出最大值。

27.

解析:该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。

28.fun(inta[][N]intn){intij;for(i=0;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/}fun(inta[][N],intn)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<i;j++)\r\na[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/\r\n}解析:首先从数组中找出要被加上n的那部分元素,找的过程其实就是找出将被挑出的那部分元素在原数组中的分布规律的过程。通过观察得出,要被处理的那部分元素的下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得合乎要求的元素,然后再加上n。

29.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中的字符对应相同,若都相同则表示出现了一次。

30.voidfun(inta[]intnint*maxint*d){inti;*max=a[0];*d=0;for(i=0;i<n;i++)/*将最大的元素放入指针max所指的单元最大元素的下标放入指针d所指的单元*/if(*max<a[i]){*max=a[i];*d=i;}}voidfun(inta[],intn,int*max,int*d)\r\n{\r\ninti;\r\n*max=a[0];\r\n*d=0;\r\nfor(i=0;i<n;i++)/*将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元*/\r\nif(*max<a[i])\r\n{*max=a[i];*d=i;}\r\n}解析:该程序直接使用形参max和d,由于它们都是指针变量,所以要引用它所指向的变量时要对它进行指针运算,也即*号运算。

31.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的下标。

32.intfun(int*sinttint*k){inti;*k=0/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;/*找到数组的最小元素把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最小元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0/*k所指的数是数组的下标值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]>s[i])\r\n*k=i;/*找到数组的最小元素,把该元素的下标赋给k所指的数*/\r\nreturns[*k];/*返回数组的最小元素*/\r\n}解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值勤,即*k=0。

33.

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

34.intfun(inta[][N]){intij;for(i=0;i<N;i++)for(j=0;j<=i;j++)a[i][j]=0;/*将数组左下半三角元素中的值全部置成0*/}intfun(inta[][N])\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<=i;j++)\r\na[i][j]=0;/*将数组左下半三角元素中的值全部置成0*/\r\n}解析:本题旨在考查控制数组中左下半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

35.A

36.A全局变量的作用域是从声明处到文件的结束。故本题答案为A选项。

37.D执行第一次for循环时,用表达式p[i][J]!=\o来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-\o)除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。2021-2022学年黑龙江省大庆市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.设有定义“intx,y,z;”,且各变量已经赋正整数值,则以下能正确表示代数式“”的C语言表达式是()。

A.1.0/x/y/zB.1/x*y*zC.1/(x*y*z)D.1/x/y/(double)z

2.若有语句“typedefstructTT{charc;inta[4];}CIN;”,则下列叙述中正确的是()。

A.CIN是structTT类型的变量

B.TT是struct类型的变量

C.可以用TT定义结构体变量

D.可以用CIN定义结构体变量

3.当接受用户输入的含有空格的字符串时,应使用()函数。

A.gets()B.getchar()C.scanf()D.printf()

4.有以下程序main(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d",a[1][i]);}程序运行后的输出结果是

A.12B.123C.234D.345

5.软盘上第()磁道最重要,一旦损坏,该盘就不能使用了。

A.0B.40C.1D.80

6.

7.

8.以下正确的字符串常量是()。

A.\\\B.'abc'C.OlympicGames

9.设"char**s;",以下正确的表达式是()。

A.s="computer";B.*s="computer";C.**s="computer";D.*s='c';

10.数据结构若采用链式存储结构,要求内存中可用存储单元的地址()。

A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以

11.C语言可执行程序的开始执行点是()。

A.包含文件中的第一个函数B.程序中第一个函数C.程序中的main()函数D.程序中第一条语句

12.有下列程序:程序执行后的输出结果是()。

A.0,-1,-1,-1

B.0,-1,-1,0

C.0,-1,-1,0,-1,0

D.0,-1,-1,-1,-1,-1

二、2.填空题(12题)13.以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下:

ABCDE

FGHI

JKL

MN

O

请填空完成该程序。

main()

{inti,j,n;charch='A';

scanf("%d",&n);

if(n<11)

{for(i=1;i<=n;i++)

{for(j=1;j<n-i+1;j++)

{printf("%2c",ch);

[10];

}

[11];

}

14.常用的黑箱测试有等价分类法、【】、因果图法和错误推测法4种。

15.【】是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。

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

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");

}

}

17.数据结构分为逻辑结构和存储结构,循环队列属于______结构。

18.以下程序的输出结果是【】。

main()

{inty=9;

for(;y>0;y--)

if(y%3==0)

{printf("%d",--y);continue;}}

19.数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。

20.一般来说,数据库的设计过程要经历3个大的阶段,即可行性分析与研究阶段、系统设计阶段、设计实施与系统运行阶段。概念设计、逻辑结构设计、物理结构设计属于数据库设计的【】阶段。

21.以下程序运行后的输出结果是()。#definePower2(x)x*xmain(){inti=6,j=8;printf("%d\n",Power2(i+j));}

22.【】是数据库设计的核心。

23.下列程序的功能是计算1~100的整数的累加和。

main()

{inti,sum=【】;

i=1;

for(【】)

{sum+=i;

i++;

}

printf("sum=%d\n",【】);

}

24.若有定义语句chars[100],d[100];intj=0,i==0;且s中已赋字符串,请填空以实现拷贝。(注:不使用逗号表达式)

while(s[i]=【】;j++;}

d[j]=0;

三、3.程序设计题(10题)25.请编写函数fun(),该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

例如,若二维数组中的数据为:

33333333

44444444

55555555

则一维数组中的内容应该是33333333444444AA,55555555

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

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

试题程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,

intmm,intnn)

{

}

main()

{

intw[10][10]={{33,33,33,33},{44,44,

44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printf("Thematrix:\n");

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

{for(j+0;j<4;j++)

printf("%3d",w[i][j]);

printf("\n");

}

fun(w,a,&n,3,4);

printf("TheAarray:In");

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

printf("%3d",a[i]);

printf("\n\n");

}

26.请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

27.请编写函数fun,函数的功能是:移动一维数组中的内容:若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10:p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。

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

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

28.程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(inta[][N],intn),该函数的功能是使数组左下半三角元素中的值加上n。

例如:若n的值为3,a数组中的值为

a=254

169

537

则返回主程序后a数组中的值应为

554

499

8610

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

fun(inta[][N],intn)

{

}

main()

{

inta[N][N],n,i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机5*5矩阵*/

{

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

{

a[i][j]=rand()%10;

printf("%4d",a[i][j]);

}

printf("\n");

}

do

n=rand()%10;

/*产生一个小于5的随机数n*/

while(n>=5);

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

fun(a,n);

printf("*****THERESULT*****\n");

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

{

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

printf("%4d",a[i][j]);

printf("\n");

}

}

29.编写一个函数,该函数可以统计一个长度为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);

}

30.请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

{

}

main()

{

inti,x[20],max,index,n=10;

randomize();

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

{

x[i]=rand()%50;

printf("%4d",x[i]);

/*输出一个随机数组*/

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

31.请编写函数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");

}

}

32.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234345753134436458100321135760

则输出结果为6,100。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

}

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

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

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

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

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

34.下列程序定义了N×N的二维数组,并在主函数中自动赋值;请编写函数fun(inta[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为

a=197

238

456

则返回主程序后a数组中的值应为

097

008

000

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

printf("%4d",a[i][j]);

}

printf("\n");

}

fun(a);

printf("THERESULT\n");

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

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

printf("%4d",a[i][j));

printf("\n");

}

}

四、单选题(0题)35.健壮的算法不会因非法的输入数据而出现莫名其妙的状态()

A.对B.错

五、单选题(0题)36.在一个C语言源文件中定义的全局变量,其作用域为()。

A.由具体定义位置和extern说明来决定范围B.所在程序的全部范围C.所在函数的全部范围D.所在文件的全部范围

六、单选题(0题)37.有下列程序:main(){char*P[]={"3697","2584");inti,j;longnum=0;for(i=0;i<2;i++){j=0;while(p[i][j]!=\0){if((p[i][j]-t\0)%2)num=10*num+p[j][j]-0;j+=2;}}printf("%d\n",num);}程序执行后的输出结果是()。A.35B.37C.39D.3975

参考答案

1.A代数式“”的结果为小数,转为C语言的表达式必须是浮点数。A选项由于1.0为浮点数,计算结果自动转换为浮点数。选项B、C、D的表达式均为0,因此只有选项A正确。故本题答案为A选项。

2.DCIN为结构体类型名,而不是结构体变量。故本题答案为D选项。

3.A

4.D解析:本题考查的是二维数组元素在内存中的排列形式。虽然二维数组成多维数组从结构上来看不是线性的,但是在C语言中,这些数组元素在内存中的排列是连续线性存放的。它们的排列规则是:第一维下标变化最慢,最右边的下标变化最快.例如本题中定义的二维数组a[3][3]中9个元素在内存中的排列顺序是:a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2]。在主函数中,首先定义了二维数组a[3][3],然后定义了一个指针p指向数组a的第1个元素a[0][0]。在第一个for循环中,依数组a在内存中的排列顺序为其元素赋从0~8九个值,然后用第二个for循环依次输出a[1][0],a[1][1],a[1][2]三个元素的值。所以,4个选项中选项D符合题意。

5.A

6.C

7.D

8.D解析:在C语言中,字符串常量是以双引号括起来的字符序列。故选项B和C不正确。字符序列中可包含一些转义字符,转义字符都是以“\\”开头的。选项A中包含了三个“\\”,前两个(\\\\)代表了一个“\\”字符,后面一个和“'”一起(\\”)被看作一个……,所以该字符串缺少一个结束的“'”,故不正确。选项D的两个……之间没有任何字符,代表的是一个空串,是合法的字符串常量,故应该选择D。

9.B

10.D

11.C解析:每个C程序有且只有一个主函数main(),且程序必须从main函数开始执行,并在main()函数中结束。

12.A程序定义整型变量a和b,初值分别是1,-2。for语句中循环条件式为“a--&&b++”,因为--和++的优先级高于逻辑与运算符&&,所以循环条件式等价于“(a--)&&(b++)”,自左向右运算。第1轮循环,a、b的值为1,-2,首先执行a--,a--的值为1,执行完后a的值为0;继续执行b++,b++的值为-2,执行完后b的值为-1。整个表达式“a--&&b++”的值为真,程序输出0,-1。第2轮循环,a、b的值分别为0,-1,首先执行a--,a--的值为0,执行完后a的值为-1,由于a--的值为0,根据逻辑与运算的短路原则,表达式“a--&&b++”的值一定为假,表达式b++不再执行,循环结束,执行循环体外的printf语句,输出a、b的值分别为:-1,-1。所以本题输出结果为:0,-1,-1,-1。本题答案为A选项。

13.C语言允许字符数据与整数进行直接的算术运算,故输出大写字母A开始的连续字符,可通过白加运算ch++完成。三角形字符阵列第i行的字符个数为n-i+1,在每行结尾以回车字符‘\\n’换行。\r\n\r\n

14.边值分析法边值分析法解析:本题考查了黑箱测试的方法。黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。

15.封装封装解析:面向对象技术中包括以下几个基本概念,即对象、类、方法、消息、继承和封装,其中封装是一种信息隐蔽技术,目的在于将对象的使用者对象的和设计者分开。

16.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列的格式输出。

17.存储或物理或存储结构或物理结构存储或物理或存储结构或物理结构解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。供队列循环使用。可知,循环队列应当是物理结构。

18.852852解析:循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。

19.概念设计阶段(数据库概念设计阶段)概念设计阶段(数据库概念设计阶段)

20.系统设计系统设计解析:系统设计阶段是系统的具体设计过程,主要包括概念设计、逻辑结构设计、物理结构设计3个步骤。这3个不同层次上的设计过程,是把实体以及相互之间的联系转换为“数据”并落实于计算机中。

21.6262解析:本题考查的是宏定义。带参数的宏定义是按#indefine命令行中指定的字符串从左到右进行转换。本题中替换的式子为:6+8*6+8,代入i,j的值得到62。

22.数据模型数据模型

23.0;sum<=100;sum

24.s[i++]s[i++]解析:本题中为了能实现字符串的拷贝,需要使字符数组s从头到尾依次遍历其所有元素。本题应使用i的自增后置来实现。

25.voidfun(int(*s)[10]int*bint*nintmmintnn){intijk=0;for(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/for(j=0;j<nn;j++)b[k++]=s[i][j];/*通过指针返回元素个数*/*n=k}voidfun(int(*s)[10],int*b,int*n,intmm,intnn)\r\n{\r\ninti,j,k=0;\r\nfor(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/\r\nfor(j=0;j<nn;j++)\r\nb[k++]=s[i][j];/*通过指针返回元素个数*/\r\n*n=k\r\n}解析:我们可以用两个循环来处理问题,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成:

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

for(j=0;i<mm;j++)

b[k++]=s[j][i];

要注意s[j][i]的下标,不能用s[i][j]。

若按行取出则列标变化最快,若按列取出则行标变化最快。再根据循环嵌套时,越在内层的循环,其循环变量变化就越快。上题程序中只有当j从头到尾变化完时,i才变化一次(即加1);由于二数组的第1个下标为行下标,第2个下标为列下标,所以第1个程序列变化最快、第2个程序行变化最快。

26.

解析:该程序功能是求一维整型数组元素中最大的值和它所在的下标。其中,求最大元素的方法:用最大值变量nax标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记其当前最大值及其所在位置,从而找出最大值。

27.

解析:该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。

28.fun(inta[][N]intn){intij;for(i=0;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/}fun(inta[][N],intn)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<i;j++)\r\na[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/\r\n}解析:首先从数组中找出要被加上n的那部分元素,找的过程其实就是找出将被挑出的那部分元素在

温馨提示

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

评论

0/150

提交评论