在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double←float。
(16)D 【解析】在ANSI标准中,long、int和short分别占用4、2和2个字节。但实际上对于某些C编译系统,int和short都占用4个字节,所以说各种类型数据占用内存大小是由选择何种C编译系统决定的。
(17)B 【解析】本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式控制为\即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。
(18)B 【解析】对于do…while循环,程序先执行一次循环体,再判断循环是否继续。本题先输出一次i的值\再接着判断表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,程序再次输出i的值\。
(19)D 【解析】 if…else语句的执行过程如下,首先计算if后面一对圆括号内表达式的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句。C语言的语法规定,else子句总是与前面最近的不带else的if匹配,与书写格式无关,本题目的后一个if-else相当于嵌套在第一个if子句里,相当于x
(20)A 【 解析】本题主要考查switch语句的使用方法。switch语句的执行过程为:进入switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的case,以此作为入口,执行switch结构中后面的各语句,直到遇到break语句,则跳出switch语句,如果各case都不匹配时,则执行default后面的语句。
(21)A 【解析】本题考查用于多分支选择的switch语句, 其一般形式为: switch(表达式) {
case常量表达式1: 语句1; case常量表达式2: 语句2; …
case常量表达式n: 语句n; default : 语句n+1; }
其语义是:计算表达式的值,并逐个与其后的常量表达式值进行比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有 case后的语句;如表达式的值与所有case后的常量表达式均不相等时,则执行default后的语句。 (22)D 【解析】在C语言中,定义一维数组的语句一般形式如下: 类型名数组名[常量表达式];
一维数组的引用形式为:数组名[下标表达式]。count表示能被2整除或被5整除的个数,i则计
41
算有多少个数组元素。
(23)D 【解析】在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为2。
(24)B 【解析】本题考查循环语句的嵌套以及条件的判断问题。在程序中,内层循环判断条件为\j<=i\而j的初值为3,故当i的值为1和2时,内层循环体都不会被执行。只有当i和j都等于3时才会执行一次。m的值为55对3取模,计算结果为1。
(25)C 【解析】在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需要以整型格式输出字符时,输出的也是ASCII码值。字符'A'和'D'的ASCII码值分别为65和68。 (26)D 【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算。此外,一开始应知道*k的值为数组中的某一下标值,即*k=0,本函数的功能是找出数组中的最大元素的位置及最大元素的值。
(27)B 【解析】 argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指针数组的指针。
(28)C 【解析】 p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=9,所以b=9。
29)C 【解析】函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项A)正确。指针类型的函数可以返回地址值,选项B)正确。在文件stdio.h中,NULL被定义为void 型的指针,选项D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项C)错误。
(30)C 【解析】此题考查了指针引用一维数组元素的方法。*p+9因为运算符\的优先级高于\所以输出结果为p指向的元素1,然后加9,值为10。
(31)B 【解析】字符串连接函数strcat的调用形式如下:strcat(s1,s2)。此函数将s2所指字符串的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的尾标,函数返回s1的地址值。 (32)A 【解析】本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:str1=\如果想把\这5个字符放到数组str1中,除了逐个输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(str1,\或strcpy(str1,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给str1):str1=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
strcpy函数的结构是:strcpy(字符数组1,字符串2)
其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,\字符数组1\必须写成数组名形式,如(str1),\字符串2\可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
(33)C 【解析】在fun函数中,while循环的功能是:逐个取字符数组s的字符判断其是否是
42
数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位将相应左移一个10进制位。当指针s指向数组的第3位时,循环条件不成立,循环结束,返回n 的值,输出n的值为61。 (34)A 【解析】在本题中,p和q同为指向字符类型数据的指针。*q 和p[0]同为字符型数据。选项B)、C)和D)都符合题目的要求;选项A)计算得出的是指针类型数据所占的内存字节数。 (35)A 【解析】循环开始前,指针t和s都指向字符串的起始位置,然后通过while循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t自减1,此时t指向的位置是字符串的结束标志'\\0'处,故t-s的值是字符串的长度,并不包括结束标志。
(36)C 【解析】本题综合考查了输入函数的使用。scanf函数会将空格视为分隔符,getchar函数只能输入单个字符,getc函数是文件操作函数,显然都不符合题意。通过gets函数输入字符串时,输入的空格被认为是字符串的一个字符。
(37)D 【解析】通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。选项B)和C)后面的'\\0'是多余的,在C语言中,系统会自动在字符串的结尾处加上一个字符'\\0'作为串的结束标记。
(38)D 【解析】函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋值,而只是保留上次函数调用结束时的值。 (39)C 【解析】带参数的宏定义命令行形式如下: #define 宏名(形参表) 替换文本 在编译的时候编译预处理程序用\替换文本\来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间。
(40)A 【解析】本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen函数将返回NULL。 选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的。 (1)算法的空间复杂度是指
A)算法程序的长度 B)算法程序中的指令条数 C)算法程序所占的存储空间 D)执行算法需要的内存空间
(2)在结构化程序设计中,模块划分的原则是
A)各模块应包括尽量多的功能 B)各模块的规模应尽量大 C)各模块之间的联系应尽量紧密
D)模块内具有高内聚度、模块间具有低耦合度 (3)下列叙述中,不属于测试的特征的是
A)测试的挑剔性 B)完全测试的不可能性 C)测试的可靠性 D)测试的经济性 (4)下面关于对象概念的描述中,错误的是
A)对象就是C语言中的结构体变量 B)对象代表着正在创建的系统中的一个实体 C)对象是一个状态和操作(或方法)的封装体 D)对象之间的信息传递是通过消息进行
43
的
(5)下列关于队列的叙述中正确的是
A)在队列中只能插入数据 B)在队列中只能删除数据 C)队列是先进先出的线性表 D)队列是先进后出的线性表
(6)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 A)acbed B)decab A)n+1 B)n-1 (8)设有如下三个关系表 R
S B 1
C 3
T A B m 1 n
1
C 3 3
A m n
下列操作中正确的是
A) T=R∩S B) T=R∪S C) T=R×S D) T=R/S (9)下列叙述中,正确的是
A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系 B)用E-R图只能表示实体集之间一对一的联系 C)用E-R图只能表示实体集之间一对多的联系 D)用E-R图表示的概念数据模型只能转换为关系数据模型 (10)下列有关数据库的描述,正确的是
A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C)关系中的每一列称为元组,一个元组就是一个字段 D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 (11)C语言规定,在一个源程序中,main函数的位置
A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后
(12)以下叙述中错误的是
A)计算机不能直接执行用C语言编写的源程序 B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D)后缀为.obj和.exe的二进制文件都可以直接运行
(13)下列选项可以正确表示字符型常量的是
A)′\\r′ B)\ C)\ D)296
C)deabc D)cedba
D)n/2
(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为
C)2n
44
(14)以下叙述中正确的是
A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)C函数定义的格式是K&R格式
(15)设变量均已正确定义,若要通过scanf(\语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)
A) 10□X□20□Y<回车> D) 10X<回车> 20Y<回车>
(16)若有说明:int *p,m=5,n;,以下正确的程序段是
A)p=&n;scanf(\ B)p=&n;scanf(\ C)scanf(\ D)p=&n;*p=m;
(17)在执行下述程序时,若从键盘输入6和8,则结果为 main() { int a,b,s;
scanf(\ s=a if(a
printf(\ A)36 main() { int a,b,k;
scanf(\ k=a;
if(a
A)5 B)3 C)2 D)0
(19)在C语言中,函数返回值的类型最终取决于
A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型 C)调用函数时主调函数所传递的实参类型 D)函数定义时形参的类型
(20)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的
B)64
C)48
D)以上都不对
(18)若执行下面的程序时,从键盘输入5和2,则输出结果是
B) 10□X20□Y<回车>C) 10□X<回车>20□Y<回车>
45
2014年3月份全国计算机等级考试二级C语言选择题大全



