第四套模拟试题参考答案及解析Word格式.docx

上传人:b****5 文档编号:21066746 上传时间:2023-01-27 格式:DOCX 页数:14 大小:28.66KB
下载 相关 举报
第四套模拟试题参考答案及解析Word格式.docx_第1页
第1页 / 共14页
第四套模拟试题参考答案及解析Word格式.docx_第2页
第2页 / 共14页
第四套模拟试题参考答案及解析Word格式.docx_第3页
第3页 / 共14页
第四套模拟试题参考答案及解析Word格式.docx_第4页
第4页 / 共14页
第四套模拟试题参考答案及解析Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

第四套模拟试题参考答案及解析Word格式.docx

《第四套模拟试题参考答案及解析Word格式.docx》由会员分享,可在线阅读,更多相关《第四套模拟试题参考答案及解析Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

第四套模拟试题参考答案及解析Word格式.docx

数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。

也就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。

选项A、B、C三种说法都是错误的。

10.本题考查的是数据模型。

层次模型是最早发展起来的数据库模型,它的基本结构是树形结构。

11.本题考查的是常量表示法。

C语言的常量分为整型常量、实型常量和字符型常量。

本题中只包含整型常量和实型常量。

选项B从形式上来看属于整型常量中的八进制整数,以0开头,但只能用0-7表示八进制数,所以选项B不合法;

选项C和D从形式上看属于实型常量,用指数形式表示的实型常量需要注意一点:

e(或E)之前必需有数字,且e后面的指数必须为整数,所以选项C和D中e后面为小数和没有数字的形式都不合法;

选项A属于实型常量中的十进制小数形式的表示法,是合法的。

12.本题考查的是算法的特性。

算法的特性中包括"

有零个或多个输入"

及"

有一个或多个输出"

这两个特性。

输入是指执行算法时从外界取得必要的信息。

一个算法可以有两个或多个输入,但也可以没有输入;

一个算法得到的结果就是算法的输出,没有输出的算法是没有意义的,所以一个算法必须至少有一个输出。

13.本题考查的是算法的特性。

C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。

注意:

大写字母和小写字母被认为是两个不同的字符。

所以选项A中Main与主函数名main不同。

另外标识符名不能与关键字重名,所以选项D是非法的标识符。

14.本题考查的是常量表示法。

本题选项中的几个常量都属于指数形式的实型常量。

此种类型的常量要求字母e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。

15.本题考查的是格式输出函数。

变量a,b定义为字符,执行语句"

printf("

%c,"

b++);

"

后,输出字符变量b的值'

2'

(b++是在使用b之后,再将b的值加1),b自加,b的值变成字符3,执行"

%d\n"

b-a);

,即'

3'

-'

1'

,故输出的值为数字2。

16.本题考查的是变量的自加运算。

++在变量前和变量后的唯一区别就在于在执行"

++变量"

所在的语句时,是先将变量加1再执行它所在语句还是先执行它所在的语句再使变量加1,当++在变量后时,也就是"

变量++"

,那就是先将变量值代入表达式运算后再使变量加1;

而"

是先使变量加1,再把加1后的结果放入表达式进行运算。

这两种情况,在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。

本题执行"

%d%d"

m++,++n);

后,输出的是m和n+1的值1235,接着使m+1=13,执行"

%d%d\n"

n++,++m);

输出n和m+1的值3514。

17.本题考查的是格式输入函数。

scanf函数中的"

格式控制"

后面应当是地址,而不是变量名。

对于变量,通过地址运算符"

&

求出内存中的地址;

对于数组c[10],数组名c即为数组在内存中的地址。

18.本题考查的是格式输入函数。

如果在"

字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。

根据本题的数据输入形式"

scanf("

m=%dn=%dp=%d"

&

m,&

n,&

p);

说明在输入数据时,必须输入"

m="

、"

n="

p="

字符,且中间不能含有空格。

19.本题考查的是算术运算符。

如果算术运算符"

/"

中参与运算的变量都是整型变量,则"

表示整除运算,"

%"

表示求余。

本题中"

a=d/10%9;

的值为25/10%9=2;

b=a&

(-1);

为2&

(-1)=1(注意:

-1表示真,只有0才表示假),所以a,b的值分别为2,1。

20.本题考查的是条件判断语句。

另外注意"

和"

||"

的"

短路"

运算。

当运算符"

左边表达式的值为0时,则右边表达式就不再进行运算,整个表达式的值即为0;

左边表达式的值为非零时,则右边表达式就不再进行运算,整个表达式的值为1。

本题中执行"

i++==1&

(++j==3||k++==3)"

时,先执行i++==1,由于i++是先运算,后自加,所以表达式"

i++==1"

的值为真,其值为1,然后执行括号中的表达式,由于++j是先自加,后运算,所以表达式"

++j==3"

的值为真,根据短路原理,右边的表达式"

k++==3"

不再进行运算,直接得出括中表达的值为1,相与后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为2,3,3。

故本题的答案为D。

21.本题考查的是条件表达式。

条件表达式的一般形式为:

表达式1?

表达式2:

表达式3

条件运算符的执行顺序为:

先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。

本题先求的是a<

b的值,根据a=1,b=4,故a<

b的值为真,所以整个表达式"

a<

b?

a:

c<

d?

c:

d"

的值为a的值1。

故本题的答案为A。

22.本题考查的是数组。

本程序的作用是求除p[0]外的其它奇数的和。

本题执行过程如下:

i=0:

i++<

7的值为真,p[i]%2即为p[1]%2,值为0,不执行j+=p[i];

,所以j=0;

i=1:

7的值为真,p[i]%2即为p[2]%2,值为1,执行j+=p[i];

,所以j=13;

i=2:

7的值为真,p[i]%2即为p[3]%2,值为0,不执行j+=p[i];

i=3:

7的值为真,p[i]%2即为p[4]%2,值为1,执行j+=p[i];

,所以j=13+15=28;

i=4:

7的值为真,p[i]%2即为p[5]%2,值为0,不执行j+=p[i];

,所以j=28;

i=5:

7的值为真,p[i]%2即为p[6]%2,值为1,执行j+=p[i];

,所以j=28+17=45;

i=6:

7的值为真,p[i]%2即为p[7]%2,值为0,不执行j+=p[i];

,所以j=45;

i=7:

7的值为假,结束循环,输出j的值45。

故本题答案为45。

23.本题考查的是字符串函数的使用。

C语言中以'

\0'

作为字符串的结束符,且strlen()函数计算的是'

字符前的所有字符的个数。

故本题中strlen(a)应为2。

数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。

sizeof()函数是计算变量或数组所分配到的内存空间的大小。

所以本题的sizeof(a)为7。

24.本题考查的是数组的定义。

选项A中定义的是5个数组元素,但赋值的时候赋的是6个元素,所以出错;

选项C不符合数组定义形式,数组名后应加上"

[]"

选项D的类型说明符错误,如果用char定义就对了;

选项B中的0,1,2,3,4,5分别表示对应字符的ASCII码,所以选项B是正确的。

25.本题考查的是函数的调用。

函数f1的功能是返回两个数中比较大的值,f2的功能是返回两个数中比较小的值。

具体执行过程如下:

1、f1(a,b):

即f1(4,3),返回值为4;

2、f1(c,d):

即f1(5,2),返回值为5;

3、e=f2(f1(a,b),f1(c,d)):

即f2(4,5),返回值为4;

4、f2(a,b):

即f2(4,3),返回值为3;

5、f2(c,d):

即f2(5,2),返回值为2;

6、f=f1(f2(a,b),f2(c,d)):

即f1(3,2),返回值为3;

7、g=a+b+c+d-e-f;

即g=7。

26.本题考查的是数组定义。

C语言规定'

为字符串结束标志,系统对字符串常量自动加一个'

为结束符。

所以"

chara[]="

xyz"

的数组长度为4,而"

b[]={'

x'

'

y'

z'

};

的数组长度为3(此处的数组长度与strlen函数所求的长度不同,此处的长度是指数组占内存空间的大小),故a数组长度大于b数组长度。

27.本题考查的是函数的调用。

本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。

在主函数中,能过"

p=a;

q=&

a[7];

将指针变量p指向了数组的第一个元素,指针变量q指向了数组的最后一个元素。

通过"

f(p,q)"

调用函数f进行对称的数组元素的交换。

当while循环4次(即p=q)后,a数组中各元素的值分别为87654321,所以程序输出的结果为8,7,6,5,4,3,2,1,。

28.本题考查的是指针变量对数组的引用。

本题通过"

for(i=0;

i<

9;

i++)p[i]=i;

对二维数组a的元素依次赋值。

赋值后,a的数组元素的值分别为a[0][0]=0,a[0][1]=1,a[0][2]=2,a[1][0]=3,a[1][1]=4,a[1][2]=5,a[2][0]=6,a[2][1]=7,a[2][2]=8,故本题输出的值为345。

29.本题考查的是数组的概念。

在C语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出"

下标越界"

的错误提示。

30.本题考查的是循环的嵌套。

本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。

由函数调用"

fun(a,2,9);

可知,函数fun用于将a[2]到a[9]的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。

31.本题考查的是循环的嵌套。

本题定义了一个二维数组a,并通过a[3][2]={0}将数组中的各个元素初始化为0,又定义了一个指针变量ptr,它用于指向包含2个元素的一维数组,在第一个for循环中,语句"

ptr=a+i;

用于将指针变量ptr指向第i行的数组元素,通过两次循环,分别给二维数组a的第0行的第1个元素和第1行的第1个元素赋了值1和2,即a[0][0]=1,a[1][0]=2。

32.本题考查的是数组名作函数的实参。

用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,这样两个数组就共同占用同一段内存单元。

本题通过"

prt(a,5);

将数组a的首地址传递给了指针变量m,使指针变量m指向数组a的首地址,那么,对指针变量所指向的存储单元的内容的改变就是对数组a中的元素的改变。

题中函数ptr的作用是将指针变量m所指向的存储单元中的元素值各加上1,故数组a中的值也随之变化,所以输出的数组元素的值为2,3,4,5,6,。

33.本题考查的是指针变量对数组元素的引用。

本题定义了数组a,C语言规定数组变量名代表数组的首地址,也是就是第0号元素的地址。

所以for循环中循环变量p的初值即为a[0]的地址,故输出的"

*p"

的值为a[0]的值。

当进行p++后,指针变量p又指向了a[1],再次输出"

即为a[1]的值,经过10次循环,将a数组中的值全部输出,即为1,2,3,4,5,6,7,8,9,0,。

34.本题考查的是宏定义。

return语句用于从被调函数带回一个函数值。

void关键字表示"

无类型"

,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。

35.本题考查的是位运算。

按位"

与"

运算符"

的运算规则是:

如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。

因为本题中相与的两个值相等,即对应位上的二进制值相等,所以"

的结果也即为其值本身。

36.本题考查的是预处理概念。

通常,预处理命令位于源文件的开头,但不一定必须位于开头,也可以写在函数与函数之间;

由于预处理命令的末尾不加分号,所以,不能在一行上写多条预处理命令,否则,系统处理时就会把它当作一条命令;

宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。

37.本题考查的是共用体。

union是表示共用体的关键字,说明其内的成员a,b,c共占用同一个内存空间,所以data的每个成员起始地址都相同;

共用体变量所占的内存长度等于最长的成员的长度,故变量data所占的内存字节数与成员c所占字节数相等;

但由于各成员变量的类型不一致,所以它们的存储方式也不相同,整型占用2个字节的存储空间,double型占用8个字节的存储空间;

另外data可以作为函数的实参,此时data作为一个地址进行地址传送;

执行"

data.a=5;

%f\n"

data.c);

系统不能自动将整型变量转换为浮点型值,printf函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数,故C是错误的。

38.本题考查的是字符串的赋值。

选项A定义了一个字符型的指针变量sp,则*sp存储的是第一个字符,而选项A中给它赋的是字符串,所以错误,如果将"

*sp="

right!

改成"

sp="

就对了,即把字符串"

right"

的首地址赋给了指针变量sp;

选项B定义了一个字符型的数组s[10],则s表示代表数组的首地址,而题中给它赋的是字符串,所以错误,要对字符数组赋值,只能在定义数组时,对其进行初始化;

选项C定义了一个字符型的数组s[10],再通过*s给数组元素赋初值,在此,由于*s指的是数组的第一个元素,而题中给它赋的是字符串,所以错误。

39.本题考查的是结构体。

typedef关键字用于声明一个新的类型名代替已有的类型名。

本题中如果没有用typedef进行定义的话,则structST为结构体类型,现在用typedef定义后,相当于用NEW代表了structST这一结构体类型,故NEW为结构体类型。

40.本题考查的是break与continue的区别。

break和continue的区别是:

continue语句只结束本次循环,而不是终止整个循环的执行;

而break语句则是结束整个循环过程,不再判断执行的条件是否成立。

本题具体执行过程如下:

a=1,b=1:

a>

=8不成立,判断a%2==1成立,a+=5则a=6,continue,执行下一次循环;

a=6,b=2:

=8不成立,判断a%2==1不成立,a-=3则a=3,执行下一次循环;

a=3,b=3:

=8不成立,判断a%2==1成立,a+=5则a=8,continue,执行下一次循环;

a=8,b=4:

=8成立,break,结束整个循环,输出b的值4。

41.本题考查的是指针变量对数组的引用。

p=s"

将指针变量p指向字符数组s,在第一次输出时,由于++和*为同一优先级,而结合方向为自右向左,所以,"

*p++"

相于"

*(p++)"

但又因为"

++"

在p的右侧,是"

后加"

,所以,先对p的原值进行*运算,得到s[0]的值,然后使得p加1,p指向s[1],故在第二次输出的时候,输出的值为s[1]的值,所以输出结果为15。

42.本题考查的是字符串运算。

字符串的比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到'

为止,若全部字符相同,则认为相等;

若出现不相同的字符,则以第一个不相同的字符的比较结果为准,该函数就实现了此功能,如果两字符串相等,则返回0,否则返回第一个不等字符串的ASCII码的差值。

43.本题考查的是循环的嵌套。

本题程序为二重循环,外循环控制输出数据的行数,内循环控制输出数据的列数。

从本题输出的形式来看,程序要求输出的是4行4列。

外层循环"

4;

i++)"

控制输出4行,内层的第一个for循环控制每行的空格数的输出,第二个for循环用于控制每行数字的输出,由于每一行的数字个数比前一行少1,所以内层的第二个for循环每一次循环的次数需要递减1,那么j的初始必呈递增形式,又因为第一行输出的是4个数,所以空格中填i是正确的。

44.本题考查的是指针变量对数组的引用。

在C语言中,函数的参数传递方式采用按值传递(即使是指针变量也是按值传递的),因此不能通过调用函数的方式来改变指针本身的值,只能改变指针所指变量的值,故在point函数中对指针p+=3的运算不能对调用它的函数起作用,所以本题的输出应该是"

a"

45.本题考查的是函数的调用。

题中char(*f1)()=fun定义了f1是一个指向函数fun的指针变量,即将函数fun的入口地址赋给了指针变量f1,这时f1和fun都指向函数的开头,调用*f1就是调用函数fun,注意,此时用函数指针变量调用函数时,只需将(*f1)代替函数名fun即可,再在(*f1)之后的括弧中根据需要写上实参,所以"

(*f1)(a);

就相当于"

fun(a)"

,故选项A是正确的。

故本题答案为A。

46.本题考查的是链表。

本题定义了结构体类型的指针变量p,q,r,并各自有两个成员变量data和next,data用于存放数据,next用于存放下一个结点的地址,所以,要想将q所指结点从链表中删除,同时保持链表的连续,必需使p结点的next指向r,在四个选项中,只有选项D不能做到。

47.本题考查的是结构体。

选项A中typedef的作用是声明一个新的类型名AA代替已有的结构体类型名structaa,然后用AA定义了结构体类型的变量td;

选项B直接用结构体类型名structaa定义了结构体类型的变量td;

选项C中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误的。

选项D中省去了结构体名,直接将td定义成了结构体变量。

48.本题考查的是文件操作函数。

fseek函数用于改变文件的位置指针。

调用的形式为:

fseek(文件类型指针,位移量,起始点),起始点用0、1、2代替。

0(SEEK_SET):

文件开始;

1(SEEK_CUR):

文件当前位置;

2(SEEK_END):

文件末尾。

位移量"

是指以"

起始点"

为基点,向前移动的字节数。

fseek(fp,0L,SEEK_SET)"

的作用是将位置指针移到文件头。

与此作用相同的函数是"

rewind(fp)"

使位置指针重新返回文件的开头。

feof的作用是判断文件是否已指到了文件末尾,如果已指到文件的末尾,则返回值为非零,否则为零。

ftell的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。

fgets的作用是指定文件读入一个字符串。

49.本题考查的是文件操作。

题中"

fopen(fn,"

w"

)"

的作用是打开fn所指向的文件,使用文件方式为"

写入"

fputs(str,fp)"

的作用是将字符str的值输出到fp所指向的文件中去。

在程序中,两次使用"

的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所以此次写入的数据覆盖了文件原有的数据,故本题中t1.dat的内容为end。

50.本题考查的是算法的特性。

有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的五大特性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1