admin 管理员组文章数量: 887021
2024年1月25日发(作者:insert语句实现什么功能)
国家二级C语言机试(选择题)模拟试卷151
(题后含答案及解析)
题型有:1.
1. 设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是( )。
A.0~255
B.0~65535
C.-32768~32767
D.-256~255
正确答案:B
解析:整型数据分为signed和unsigned两种,设int类型的数据长度为2个字节,则无符号整数表示的范围为0~65535。 知识模块:C语言的基本知识
2. 下列对于线性链表的描述中正确的是
A.存储空间不一定连续,且各元素的存储顺序是任意的
B.存储空间不一定连续,且前件元素一定存储在后件元素的前面
C.存储空间必须连续,且前件元素一定存储在后件元素的前面
D.存储空间必须连续,且各元素的存储顺序是任意的
正确答案:A
解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。在线性链表中,各数据元素之间的前后件关系是由各结点的指针域来指示的,指向线性表中第一个结点的指针head称为头指针,当head=NULL(或0)时称为空表。 知识模块:公共基础知识
3. 以下选项中,不合法的C语言用户标识符是
A.AaBc
B.a-b
C.a_b
D._1
正确答案:B
解析:在C语言中的用户标识符只能由字母,数字和下划母组成,并且第一个字符必须是字母或下划线,在选项B中出现了非法的字符“-”。 知识模块:C语言基础知识
4. 在深度为7的满二叉树中,度为2的结点个数为
A.64
B.63
C.32
D.31
正确答案:B
解析:因为在任意的二叉树中,度为0的结点(即叶子结点)总比度为2的结点的个数多1个,而度为0的结点数n0=2m-1(其中m为二叉树的深度)。本题的度为0的结点个数n0=27-1=26=64。因此,度为2的结点数n2=n0-1=63。所以选项B正确。 知识模块:数据结构与运算
5. 下列叙述中正确的是( )。
A.数据库的数据项之间无联系
B.数据库中任意两个表之间一定不存在联系
C.数据库的数据项之间存在联系
D.数据库的数据项之间以及两个表之间都不存在联系
正确答案:C
解析:数据库的数据项之间以及表之间都存在联系。 知识模块:公共基础知识
6. 下面不属于软件设计原则的是
A.抽象
B.模块化
C.自底向上
D.信息隐藏
正确答案:C
解析:软件设计的基本原则包括抽象、信息隐藏、模块化、局部化、确定性、一致性、完备性和可验证性。 知识模块:软件工程基础
7. 有以下程序段intj;floaty;charname[50];scanf(‘‘%2d%f%s’’,&j,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为
A.55566.0
B.7777.0
C.566.0
D.566777
正确答案:C
解析:因为在输入格式控制符中指定变量j的输入格式控制符为”%2d”,即变量i所占的宽度为2,所以变量j只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项C。 知识模块:C语言程序设计
8. 以下程序的输出结果是( )。main( ){int x=1,y=0;if(!x)y++;else
if(x==0)if(x)y+=2;else y+=3;printf(‘‘%d\n’’,y);}
A.一1
B.0
C.1
D.2
正确答案:B
解析:如果不满足if语句的条件,函数将不执行本题中x=1,if和else if的条件都不满足,故y值不改变输出。 知识模块:C语言程序设计
9. 以下叙述中正确的是
A.C程序中的每一行只能写一条语句
B.简单C语句必须以分号结束
C.C语言程序中的注释必须与语句写在同一行
D.C语句必须在一行内写完
正确答案:B
解析:C语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上。C语言注释是比较自由的,可以写在一行或者多行。C语言规定每条语句和数据定义的最后必须有一个分号,分号是c语句的必要组成部分。 知识模块:C语言基础知识
10. 有以下程序:#include<stdio.h>int add(int a,int
b){return(a+b);}main( ){int k,(*f)( ),a=5,b=10;f=add;…}则以下函数调用语句错误的是( )。
A.k=f(a,b);
B.k=add(a,b);
C.k=(*f)(a,b);
D.k=*f(a,b);
正确答案:D
解析:D选项中,*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。 知识模块:指针
11. 设有定义: int x[2][3];则以下关于二维数组X的叙述错误的是
A.数组x可以看作是由x[0]和x[1]两个元素组成的一维数组
B.可以用x[0]=0;的形式为数组所有元素赋初值0
C.元素x[0]可看作是由3个整型元素组成的一维数组
D.x[0]和x[1]是数组名,分别代表一个地址常量
正确答案:B
解析:二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第0行的元素,再存放第1行的元素……称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组,每个数组元素又是包含
有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如,inta[4][3]={1,2,4,5};在编译时,系统将按a数组元素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自动补初值0。以上将给a数组第一行的元素和第二行的第一个元素依次赋予1、2、4、5,其他元素的初值都为0。 知识模块:函数和数组
12. 当变量c的值不为2、4、6时,值为”真”的表达式是( )。
A.(c>=2 && c<=6) || (c!=3) || (c!=5)
B.(c==2)||(c==4)||(c==6)
C.(c>=2 && c<=6)&& !(c%2)
D.(c>=2 && c<=6)&&(c%2!=1)
正确答案:A
解析:逻辑或运算符的两个运算对象中,只要有一个值为真,整个逻辑表达式的值就为真;逻辑与运算符的两个运算对象的值均为真,整个逻辑表达式的值才为真。选项A)中,只要c的值不为3或者不为5或者在2和6之间,这个表达式就为真,所以答案选A)。 知识模块:数据类型、运算符与表达式
13. 以下选项中,不合法的C语言用户标识符是
A.AaBc
B.a-b
C.a_b
D._1
正确答案:B
解析:在C语言中的用户标识符只能由字母,数字和下划母组成,并且第一个字符必须是字母或下划线,在选项B中出现了非法的字符“-”。 知识模块:C语言基础知识
14. 有以下程序#include<stdio.h>#defineSQR(x)x*xmain( ){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(‘‘%dn’’,a);)程序的输出结果是
A.0
B.1
C.9
D.10412文件包含
正确答案:B
解析:SQR(k+m)宏展开以后为k+m*k+m,值为5,表达式a/=sQR(k+m)/SQR(k+m)为a=a/(5+5),表达式值为1。 知识模块:编译预处理和指针
15. 关于文件操作的叙述中正确的是( )。
A.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
B.C语言中的文件是流式文件,因此只能顺序存取数据
C.打开一个已存在的文件并进行写操作后,原有文件中的全部数据必定被覆盖
D.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
正确答案:D
解析:在C语言中,有两种对文件的存取方式:顺序存取和直接存取。如果以“a”的方式对一个已打开的文件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。如果以“a+”的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写,而且在读和写操作之间不必关闭文件,可以从头开始读。当对文件的读(写)操作完成之后,必须将它关闭。 知识模块:结构体及文件操作
16. 以下关于结构化程序设计的叙述中正确的是( )。
A.在C语言中,程序的模块化是利用函数实现的
B.结构化程序使用goto语句会很便捷
C.一个结构化程序必须同时由顺序、分支、循环三种结构组成
D.由三种基本结构构成的程序只能解决小规模的问题
正确答案:A
解析:goto语句会导致程序结构混乱,所以结构化程序中限制使用goto语句,选项B)错;一个结构化的程序可以依据该程序要实现的功能选用顺序、分支、循环这三种基本结构中的某几种或者全部使用,不是必须都用上,选项C)错;已经证明,由这三种基本结构组成的算法可以解决任何复杂的问题,选项D)错;程序的模块化是指把程序要解决的总目标分解为若干目标,再进一步分解为具体的小目标,每个小目标即为一个模块,而函数是C语言的基本模块,实现某一模块的具体功能。答案选A)。 知识模块:循环结构程序设计
17. 若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++) printf(“*\n”);下面关于语句执行情况的叙述中正确的是
A.循环体执行两次
B.循环体执行一次
C.循环体一次也不能执行
D.构成无限循环
正确答案:D
解析:本题考查for循环。本题的for循环初始条件为i=0,k=-1;循环结束条件为k=1永远为真(k不为0),因此循环不能结束。 知识模块:C语言程序设计
18. 以下叙述中正确的是
A.循环发生嵌套时,最多只能两层
B.三种循环for,while,do-while可以互相嵌套
C.循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误
D.for语句的圆括号中的表达式不能都省略掉
正确答案:B
解析:在一个循环体内又完整包含了另一个循环,称为循环嵌套。循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。for循环、while循环、do-while循环可以互相嵌套,但每层循环在逻辑上必须完整。而在for语句中,for语句中的表达式可以部分或全部省略,但两个“:”不可省略。 知识模块:C语言程序设计
19. 程序中若有如下说明和定义语句 char fun(char*); main( )
{char*s=“one”,a[5]={0},(*f1)( )=fun,ch; } 以下选项中对函数fun的正确调用语句是
A.(*f1)(a);
B.*f1(*s);
C.fun(a);
D.ch=*f1(s);
正确答案:A
解析:本题主要考查函数调用和函数指针的使用。根据定义f1是一个函数指针,且指向fun函数,因此可以使用函数指针来调用函数。使用函数指针调用函数的时候使用.运算符,即*f1和fun是一样的,fun函数有参数,通过f1调用fun函数写法为:(*f1)(a),括号是必须的,这样才能保证各部分正确结合。 知识模块:函数和数组
20. 不能正确表示数学式的表达式是
A.a/c*b
B.a*b/c
C.a/ b* c
D.a*(b/c)
正确答案:C
解析:/号和*号的优先级处于平级,结合性都是自左至右?所以选择C,C式子表示的是。
21. 若有以下程序struct stu{char*name,gender;int score;};main( ){struct
stu a={NULL,’m’,290},b;a.name=(char*)malloc(10);strcpy(a.name,”Zhao”);b=a;b.gender=‘f’;b.score=350;strcpy(b.name,”Qian”);printf(“%s,%c,%d,”,a.name,a.gender,a.score);printf(“%s,%c,%d\n”,b.
A.Zhao,m,290,Qian,f,350
B.Qian,f,350,Qian,f,350
C.Zhao,m,290,Zhao,e350
D.Qian,m,290,Qian,f,350
正确答案:D
解析:主函数中定义结构体类型struct stu,有三个成员,第一个成员为字符指针变量。主函数中为stu类型变量a赋值,首先为a.name成员分配存储空间,存入数据。b=a;语句执行完毕以后,a和b的各个成员值相同,需要注意的是b.name和a.name成员都保存了同一段内存的地址,因此当为变量b赋值的时候,同样更改了a的name成员,而其他成员由于有单独的存储空间而不会发生改变。 知识模块:结构体、共用体、位运算及文件操作
22. 下面选项中关于位运算的叙述正确的是
A.位运算符都需要两个操作数
B.左移运算的结果总是原操作数据2倍
C.右移运算时,高位总是补0
D.位运算的对象只能是整型或字符型数据
正确答案:D
解析:位运算则是以位(bit)一级进行的运算,位运算符中除 “~”以外,均为二元运算符,即要求两侧各有一个运算量,运算量只能是整型或字符型的数据,不能为实型数据。其中右移时,右端(低位)移出的二进制数舍弃,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。而左移运算在没有溢出的前提下每移动一位,相当于原数据的2倍。
知识模块:C语言程序设计
23. 下面选项中关于位运算的叙述正确的是
A.位运算符都需要两个操作数
B.左移运算的结果总是原操作数据2倍
C.右移运算时,高位总是补0
D.位运算的对象只能是整型或字符型数据
正确答案:D
解析:位运算则是以位(bit)一级进行的运算,位运算符中除“~”以外,均为二元运算符,即要求两侧各有一个运算量,运算量只能是整型或字符型的数据,不能为实型数据。其中右移时,右端(低位)移出的二进制数舍弃,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。而左移运算在没有溢出的前提下每移动一位,相当于原数据的2倍。
知识模块:结构体、共用体、位运算及文件操作
24. 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。
A.一对一
B.一对多
C.多对一
D.多对多
正确答案:B
解析:因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学
生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。
25. 若有以下程序#include<stdio.h>main( ){inta=1,b=2,c=3,d=4;if((a=2)||(b=1))c=2;if((c==3)&&(d=-1))a=5;printf(“%d,%d,%d,%dn”,a,b,c,d);}则程序的输出结果是
A.1,2,3,4
B.2,1,2,-1
C.5,1,2,-1
D.2,2,2,4
正确答案:D
解析:第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断。执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2。判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作。所以结果为选项D。
版权声明:本文标题:国家二级C语言机试(选择题)模拟试卷151(题后含答案及解析) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1706155925h502213.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论