1、计算机二级C语言笔试322 模拟 计算机二级C语言笔试322一、选择题 下列各题A、B、C、D 四个选项中,只有一个选项是正确的。第1题:算法是指A.计算机程序B.解决问题的计算方法C.排序算法D.解决问题的有限运算序列参考答案:D 算法是指对解决方案准确而完整的描述。第2题:下列叙述中正确的是A.循环链表是非线性结构B.双向链表是非线性结构C.只有一个根结点的数据结构不一定是线性结构D.有一个以上根结点的数据结构不一定是非线性结构参考答案:C 线性结构指的是数据元素之间存在着“一对一”线性关系的数据结构,这样的结构中只有一个根结点,如循环链表和双向链表;非线性结构指的是数据元素之间存在着“一
2、对多”非线性关系的数据结构,这样的结构中可能有一个根结点,如树形结构,也可能有多个根结点,如网状结构。第3题:下列对于线性链表的描述中正确的是A.存储空间不一定连续,且各元素的存储顺序是任意的B.存储空间不一定连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的参考答案:A 线性链表是链式存储结构。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。第4题:面向对象方法中,不属于对象基本特点的是A.标识唯一性B.分类性C.封装性D.一致性参考答案:
3、D 对象的基本特点有:标识唯一性、分类性、多态性、封装性和模块独立性。第5题:在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是A.概要设计B.详细设计C.可行性分析D.需求分析参考答案:D 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。软件生命周期的主要活动阶段如下。 可行性研究与计划制定:确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制订完成开发任务的实施计划。 需求分析:对待开发软件提出的需求进行分析并给出详细定义。编写软件规格说明书及初步的用户手册,提交评审。 软件设计:系统设计人员和程
4、序设计人员应该在反复理解软件需求的基础上给出软件的结构、模块的划分、功能的分配以及处理流程。 软件实现:把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。 软件测试:在设计测试用例的基础上,检验软件的各个组成部分,编写测试分析报告。 运行和维护:将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。第6题:数据流图中方框表示的是A.数据流B.存储文件C.控制流D.源,潭参考答案:D 数据流图是描述数据处理过程的工具,它从数据传递和加工的角度,来刻画数据流从输入到输出的变化过程。数据流
5、图中的主要图形元素有:圆形表示加工,箭头表示数据流,双杠表示存储文件,方框表示源、潭。第7题:下列对于软件测试的描述中正确的是A.软件测试的主要目的是发现程序中的错误B.软件测试的目的是证明程序是否正确C.软件测试的目的是使程序运行结果正确D.软件测试是为了证明软件中没有错误参考答案:A 软件测试的目标是发现软件中的错误。第8题:数据库、数据库系统和数据库管理系统之间的关系是A.数据库包括数据库系统和数据库管理系统B.数据库系统包括数据库和数据库管理系统C.数据库管理系统包括数据库和数据库系统D.三者没有明显的包含关系参考答案:B 数据库系统有数据库、数据库管理系统、数据库管理员、硬件平台、软
6、件平台5部分构成。第9题:设有图书(图书编号,书名,第一作者,出版社)、读者(借书证号,姓名,单位,职称)和借阅(借书证号,图书编号,借书日期,还书日期)三张表,则表借阅的关键字(键或码)为A.借书证号,图书编号B.图书编号,借书日期C.借书日期,还书日期D.借书证号,借书日期参考答案:A 在二维表中凡能唯一标识元组的最小属性集称为关键字,关键字具有标识元组、建立元组间联系等重要作用。此题中,借书证号,图书编号是表借阅的主键,借书证号、图书编号分别是外键,借书证号是读者表的主关键字,图书编号是图书表的主关键字。第10题:有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为
7、A.并B.自然连接C.笛卡儿积D.交参考答案:D 在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1,又属于R2。第11题:下列叙述中正确的是A.每个C语言程序文件中都必须要有一个main()函数B.在C语言程序中main()函数的位置是固定的C.C语言程序中所有函数之间都可以相互调用,与函数所在位置无关D.在C语言程序的函数中不能定义另一个函数参考答案:A main函数是C语言程序的主函数,可以出现在程序中的任何位置。函数是C语言程序的基本模块,函数内部可以再定义其他
8、函数。但函数间可相互调用,被调用的既可以是C语言提供的库函数,也可以是用户自定义的函数。第12题:以下合法的十六进制数是A.0xB.0x4deC.0x1hD.0x77参考答案:B 考查十六进制数的表示方法。十六进制数以0x开头,后面跟着若干位09和af的数,所以正确答案为B)。第13题:已知大写字母A的ASCII码的值是65,小写字母a的ASCII码的值是97,以下不能将变量c中的大写字母转换为对应小写字母的语句是A.c=(c-A)%26+aB.c=c+32C.c=c-A+aD.c=(A+c)%26-a参考答案:D 无论大小写,字母间的间隔都相等,所以C-A=c-a,因此c=C-A+a,选项A
9、)、C)正确。从题述可知,a-A=97-65=32,所以c=C+32,选项B)正确。第14题:若变量已正确定义并赋值,以下符合C语言语法的表达式是A.a:=b+1B.a=b=c+2C.int 18.5%3D.a=a+7=c+b参考答案:B 选项A)中包含一个不合法的运算符“:=”;选项C)应改为(int) 18. 5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。第15题:设变量a是int型,f是
10、float型,i是double型,则表达式10+a+i*f值的数据类型为A.intB.floatC.doubleD.不确定参考答案:C 根据混合运算规则,如果有一个数据是float型或double型,则其他数据类型先转化为double型,运算的结果最终也是double型。第16题:有以下程序: #include stdio.h main() chal c1=1,c2=2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); 当运行时输入:a 回车 后,以下叙述正确的是A.变量c1被赋予字符a,c2被赋予回车符B.程序将等待用户输入第2个字
11、符C.变量c1被赋予字符a,c2中仍是原有字符2D.变量c1被赋予字符a,c2中将无确定值参考答案:A 本题考查的是输入输出函数。函数getchar()的作用是从终端(或系统隐含指定的输入设备)输入一个字符,且只能接受一个字符(回车符也算是一个字符)。故本题中变量c1被赋予字符a,c2被赋予回车符。第17题:下列程序的输出结果是 #include stdio.h main() int i, a=0, b=0; for(i=1; i 10; i+) if(i % 2=0) a+; continue; b+; printf(a=%d, b=%d, a, b); A.a=4, b=4B.a=4, b
12、=5C.a=5, b=4D.a=5, b=5参考答案:B continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被2整除时,a就会增加1,之后执行continue语句,直接执行到for循环体的结尾,进行i+,判断循环条件。第18题:设变量a、b、c、d和y都已正确定义并赋值。若有以下if语句: if(a b) if(c=d)y=0; else y=1; 该语句所表示的含义是A.B.C.D.参考答案:C 本题考查if语句的使用。整个语句都是以a b为假设的,在a b的情况下,如果c=d,则y=0;否则y=1。所以答案为选项C)。第19题:若a是数值类型
13、,则逻辑表达式(a=1)|(a!=1)的值是A.0B.1C.2D.不知道a的值,不能确定参考答案:B 当a=1时,(a=1)|(a!=1)为真;当a!=1时,(a=1)|(a!=1)也为真,故正确答案为B)。第20题:有以下程序: #include stdio.h main() int s; scaIlf(%d, s); while(s 0) switch(s) case 1:printf(%d, s+5); case 2:printf(%d, s+4).break; case 3:printf(%d, s+3); default:printf(%d, s+1)Ibreak; scanf(%d
14、,s); 运行时,若输入123450 回车 ,则输出结果是A.6566456B.66656C.66666D.6666656参考答案:A switch语句执行完一个case后面的语句后,流程控制转移到下一个case语句继续执行,遇到break会跳出本次循环。本题中输入1时会输出65,输入2时会输出6,输入3时会输出64,输入4时会输出5,输入5时会输出6,在输入0时不满足循环条件,程序执行结束。第21题:有如下程序: int a10=11, 12, 13, 14, 15, 16, 17, 18, 19, 20; int*p=a3, b; b=p5; 则b的值是A.15B.16C.18D.19参考
15、答案:D p=a3将指针指向数组a的第4个元素,p5指向数组a的第9个元素,而a8=19,所以b=19。第22题:以下程序的输出结果是 Fun(int x, int y) return(x+y); main() int a=1, b=2, c=3, sum; sum=Fun(a+, b+, a+b), c+); printf(%d, sum); A.9B.8C.7D.6参考答案:B 逗号表达式a+,b+,a+b先计算a+,a=2; 再计算b+,b=3; 表达式的值就是a+b的值,为5。表达式c+的值是c递增前的值,为3。所以fun(a+,b+,a+b),c+)等价于fun(5,3),返回值为5
16、+3=8。第23题:有以下程序: #include stdio.h main() int i=5; do if(i%3=1) if(i%5=2) printf(%d, i); break; i+; while(i!=0); printf(n); 程序的运行结果是A.*7B.*3*5C.*5D.*2*6参考答案:A 整个程序中只有对i增加的语句而没有对i减少的语句,所以2、3都不可能出现,选项B)和D)错误。而1=5时第一个if语句的表达式为假,所以选项C)也错误。第24题:以下函数按每行8个输出数组中的数据: void fun(int*w, int n) int i; for(i=0; i n
17、; i+) _ printf(%d, wi); printf(n); 下划线处应填入的语句是A.if(i/8=0)printf(n);B.if(i/8=0)continue;C.if(i%8=O)printf(n);D.if(i%8=0)continue;参考答案:C 在C语言循环语句中,continue用来跳出当次循环,因此B)项和D)项不正确。if(i/8=0)是指当i除以8的得数等于0,即i的值小于8时,打印换行,因此A)项也不正确。if(i%8=0)是指当i除以8的余数等于0,即当间隔8个数时,打印换行,因此选项C)正确。第25题:以下数组定义中错误的是A.int x3=0;B.int
18、 x23=1, 2, 3, 4, 5, 6;C.int x3=1, 2, 3, 4, 5, 6;D.int x23=1, 2, 3, 4, 5, 6;参考答案:B 二维数组的初始化有以下几种形式:分行进行初始化;不分行进行初始化;部分数组元素进行初始化;省略第一维的定义,不省略第二维的定义。选项B)等号右边分了3行,大于等号左边数组的行数2。第26题:有以下程序: #include string.h main() char p=a, b, c, q10=a, b, c; printf(%d%dn, strlen(p), strlen(q); 以下叙述中正确的是A.在给p和q数组置初值时,系统会
19、自动添加字符串结束符,故输出的长度都为3B.由于p数组中没有字符串结束符,长度不能确定;但q数组中字符长度为3C.由于q数组中没有字符串结束符,长度不能确定;但p数组中字符长度为3D.由于p和q数组中没有字符串结束符,故长度都不能确定参考答案:B 本题考查的是库函数的调用。strlen()是计算以0结束的字符串的长度函数,函数的值为字符串的实际长度,不包括0。题中q10=a,b,c虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前3个存储单元,其余存储单元系统自动加上0,故数组q的长度为3;由于p数组中没有字符串结束符,故字符串的长度不能确定。第27题:若有以下程序: #incl
20、ude stdio.h int a=1, 3, 5, 7; main() int i; int *p=a; for(i=0; i 4; i+)ai=*p; printf(%dn, a2); 上面程序的输出结果是A.5B.7C.lD.3参考答案:C 在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为1。第28题:若有定义语句:int m=5, 4, 3, 2, 1, i=4;, 则下面对m数组元素的引用中错误的是A.m-iB.m2*2C.mm0D.mmi参考答案:C 数组m下标从04计算,
21、共5个元素,选项C)中m0=5,则mm0为m5中,超出了数组m的下标范围。因此正确答案为C)。第29题:设有以下说明语句: typedef struct int n; char ch8; PER; 则下面叙述中正确的是A.PER是结构体变量名B.PER是结构体类型名C.typedef struct是结构体类型D.struct是结构体类型名参考答案:B 本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。第30题:有以下程序: int fun(int n) if(n=1)return 1; else return(n+
22、fun(n-1); main() int x; scanf(%d, x); x=fun(x); printf(%dn, x) 执行程序时,给变量x输入10,程序的输出结果是A.54B.55C.65D.45参考答案:B 本题考查的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10=55。第31题:以下程序的输出结果是 #include stdio.h sub(int*s, int y) static int t=3; y=st; t-; main() int a=1, 2, 3, 4, i, x=0;
23、for(i=0;i 4;i+) sub(a, x); printf(%d, x); printf(n); A.1234B.4321C.OOOOD.4444参考答案:C 本题的考查点是函数的形参和实参的关系。x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并没能使得x的值变化,所以在打印时,x的值始终是0。第32题:有以下程序: #include stdio.h #define F(x, y) (x)*(y) main() int a=3, b=4; printf(%dn, F(a+, b+); 程序运行后的输出结果是A.12B.15C.16D.20参考答案:A 本题的考查点是带参
24、数的宏定义。本题的程序中就定义了一个带参数的宏,对F(a+,b+)进行展开后,宏的返回值为12,注意a+,b+都是先使用变量值,再自增。第33题:以下程序运行时,若从键盘输入10 20 30 回车 ,输出的结果是 main() int i=0, j=0, k=0; scanf( %d% * d%d, i, j, k); printf( % d% d% dn, i, j, k); A.10200B.102030C.10300D.10030参考答案:C 根据scanf()函数附加的格式说明字符,可知%后的“*”是附加说明符,用来表示跳过它相应的数据,所以本题中忽略第2个数据的输入,则i=10,j=
25、30,k的值不变,还是0,所以输出结果是10300。第34题:有以下程序: #include stdio.h main() char *a=abcd, ef, gh, ijk; int i; for(i=0; i 4; i+)printf(%c,*ai); 程序运行后的输出结果是A.aegiB.dfhkC.abcdD.abcdefghijk参考答案:A a为一个指针数组,其中的每个元素都是一个指针。该程序的功能是分别打印4个字符串的首字母,因此本题答案为A)。第35题:以下程序执行后的输出结果是 fun(int x, int y) static int m=0, i=2; i+=m+1; m=
26、i+x+y; return m; main() intj=1, m=1, k; k=fun(j, m); printf(%d, , k); k=fun(j, m); printf(%dn, k); A.5, 5B.5, 11C.11, 11D.11, 5参考答案:B maln函数中的局部变量m与fun函数中的静态局部变量m同名,因此main访问的是其局部变量m,所以main中的两次函数调用,实际上都是调用fun(1,1)。第一次调用时,i=i+(m+1)=2+(0+1)=3,m=i+x+y=3+1+1=5。第二次调用时,i=i+(m+1)=3+(5+1)=9,m=i+x+y=9+1+1=11。
27、所以程序输出5,11。第36题:阅读下面程序,则执行后的结果是 #include stdio, h main() char str=tomeetme, *p; for(p=str; p str+7; p+=2)putchar(*p); printf(n); A.tomeetmeB.tmemC.oeteD.tome参考答案:B 存放字符串的字符数组的名字就是这个字符串的首地址。本题的功能是对字符串“tomeetme”进行选择式输出,从第一个字母开始,每输出一个字符即跳过一个。第37题:有以下程序: main() char ch=uvwxyz, *pc; pc=ch; printf(% cn,*(pc+5); 程序运行后的输出结果是A.zB.0C.元素ch5的地址D.字符y的地址参考答案:A 本题考查的是指向数组的指针。本题中定义了一个字符串数组和指针,并将指针pc指向该数组的首地址,执行输出语句“printf(%cn,%(pc+5); ”。语句中的*(pc+5)指的就是pc5的值,所以最后输出的结果为z。第38题:设有定义: struct complex int real, unreal; data1=1, 8, data2; 则以下赋值语句中错误的是A.data2=da
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1