全国计算机等级考试二级C语言真题题库2 2016年3月
(总分100, 做题时间120分钟)
一、选择题(每小题1分,共40分)
1. 设有以下程序段:struct book{ float price;char language;char
title[20];} rec,*ptr;ptr = &rec;要求输入字符串给结构体变量rec的title成员,错误的输入语句是( )。
A seanf(”%s”Ptrtitle); B scanf(”%s”,rec.title); C scanf(’’%s”,(*pu).title); D scanf(”%s”,ptr->title); 答案:A
符号“_>”是指针特用的,符号“.”用于指定元素的成员。ptr是指针,只能用符号“一>”,因此选项A错误。+P是指定元素(Fee)可以使用“.”运算,因此选项D正确。选项B,Fee.title代表数组title,同理选项C正确。答案为A选项。
2. 有以下程序:
aBeDefG##<回车>,则输出结果是( )。
A AbCdEFg B ABCDEFG C BCDEFGH D bedefgh 答案:C
执行时输入:
循环的作用是将输入的字符串转化为大写,9etchar()每次读入一个字符,putchar()每次输出一个字符,当遇到#字符结束。putchar(++C),表示将字符变量C加1后输出。因此,输入aBcDefG##,得到的结果是BCDEFGH。故答案为c选项。
3. 以下与存储类别有关的四组说明符中,全部属于静态类的一组是( )。
A extem和static B auto和static C register和static D register和excerl 答案:A
auto用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字通常会被省,因为所有的变量默认就是aut0的。
register定义的变量告诉编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。当static用来修饰全局变量时,它就改变了全局变量的作用域。extern限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。extem外部声明,该变量在其他地方有被定义过。因此,答案为A选项。
4. 设有定义:int x,Y,z;,且各变量已赋正整数值,则以下能正确表示代数式
的C语言表达式是( )。
A …1.…0/x。/y,/z B 1/x * Y * z C 1/(x * Y * z) D 1/x/y/(double)z
答案:A
代数表达式1/(X?Y?z)是小数,转为cf语言的表达式必须是小数。A选项由于l.0为浮点数,计算结1果自动转换为浮点数,故A选项正确。选项B,C,D的表达式均为0。答案为A选项。
5. 若有定义:double x;,则表达式IX=0,x+10,x+十的值是( )。
A 11.0 B 10.0 C 0.0 D 1.0 答案:C
c语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运笑结束后才进行右边的子表达式的运算。也麓是辽,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。后置自增运算:k++表示先运算,后自■:曹置自增运算:++k表示先自加,后运算。因此,表达式l;O,I+10。x++的计算过程为首先赋值x=0,然后将x加l0,包是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。故答案为C选项。
6. 有以下程序:( )。
A 5,
B 0,0,0,0,0,
执行时输入:0<回车>后,则输出结果是
C 0,1,2,3,4, D 0,1, 答案:C
”anf(”%c”,&c),输入的字符,题目中输入了0,字符0,对应于ASCIl码为48,因此for循环中,i的范围从0~5,均小于48,if条件不成立,直接执行下一条语句,执行语句prinff,因此得到的结果是0,1,2,3,4。故答案为C选项。
7. 以下程序拟实现计算sum=1+1/2+1/3+…+1/50。
程序运行后,不能得到正确结果,出现问题的语句是
( )。
A sum+=1/i; B while(i<50); C sum.=1.0; D i++; 答案:A
选项A中,8111111+=1/i;i为整型,因此l/i是整型类型,当1/i有小数时,小数部分会被截断。因此l/i结果始终为0,导致结果出错,应改为8111m+=1.0/i。因此答案为A选项。
8. 下列处理中与队列有关的是( )。
A 操作系统中的作业调度 B 执行程序中的过程调用
C 执行程序中的循环控制 D ---X树的遍历 答案:A
队列是指允许在一端进行插入,而在另一端进行删除的线性表。由于最先进入队列的元素将最先出队,所以队列具有“先进先出”的特性,体现了“先来先服务”的原则。作业调度是指根据一定信息,按照一定的算法,从外存的后备队列中选取某些作业调入内存分配资源并将新创建的进程插入就绪队列的过程。执行程序中的过程调用一般指函数调用,需要调用时候转入被调用函数地址执行程序,与队列无关。执行程序中的循环控制是指算法的基本控制结构,包括对循环条件的判定与执行循环体,与队列无关。二叉树是一个有限的结点集合,二叉树的遍历是指不重复地访问二叉树中的所有结点,与队列无关。故本题选择A选项。
9. 非空循环链表所表示的数据结构( )。
A 有根结点也有叶子结点 B 没有根结点但有叶子结点 C 有根结点但没有叶子结点 D 没有根结点也没有叶子结点 答案:A
在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。循环链表是线性结构,有且只有一个根结点,每一个结点最多有一个前件,也最多有一个后件。循环链表表头结点为根结点,链表的最后一个结点为叶子节点,虽然它含有一个指向表头结点的指针,但是表头结点并不是它的一个后件。故选择A选项。
10. 将c语言的整数设为整数类1,则下面属于类I实例的是( )。
A -103 B 10E3 C 10.3