国家二级C语言机试(选择题)模拟试卷232
选择题
1.以下不能用于描述算法的是(B)
A. 程序语句
B. E-R图
C. 伪代码和流程图
D. 文字叙述
解析:E-R图为实体.联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。描述算法的有流程图,盒图,伪代码,文字描述以及程序代码描述。
2.以下C语言用户标识符中,不合法的是(D)
A. 1
B. AaBc
C. a b
D. a–b
解析:本题考查用户标识符,C语言中,用户标识符只能由字母、下划线和数组组成,且必须以字母或者下划线开始。选项A、B和C都是正确的,选项D中的case是C语言关键字,不能作为用户标识符,是错误的。
3.有以下程序,输出结果是( )。
main()
{ int i=15j=21,n=0;
switch(i%3)
{ case 0:n++;break;
case 1:n++:
switch(j%2)
{ default:n++;
case 0:n++;break;
}
}
pintf(\\(A)
A. 1
B. 2
C. 3
D. 4
解析:本题考查switch-case语句的嵌套形式。程序的主体部分是switch-case语句的嵌套,变量i的值是15,表达式i%3之后是0,对应的分支是“case 0:n++;break”,变量n自加变为1,遇到break语句,跳出外层的switch-case语句。内层switch-case语句未执行,n为1。
4.对长度为n的线性表作快速排序,在最坏情况下,比较次数为(D)
A. n
B. n-1
C. n(n-1)
D. n(n-1)/2
解析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。快速排序法也是一种互换类的排序方法,但由于它比冒泡排序法的速度快,因此,称为快速排序法。
5.设表的长度为n。下列算法中,最坏情况下比较次数小于n的是(A)
A. 二分查找法
B. 堆排序
C. 快速排序
D. 顺序查找法
解析:二分法查找只适用于顺序存储的有序表。二分查找的基本方法是:将被查元素x与线性表的中间项进行比较,若中间项的值等于x,则说明查到;若小于中间项的值则在线性表的前半部分;以相同的方法进行查找;若大于中间项的值,则在线性表的后半部分以相同的方法进行查找。在最坏情况下,二分查找需要比较log2n次。所以选项A正确。
6.设有课程关系模式如下:
R(C#,Cn,T,Ta)(其中C#为课程号,Cn为课程名,T为教师名,Ta为教师地址)并且假定不同课程号可以有相同的课程名,每个课程号下只有一位任课教师,但每位教师可以有多门课程。该关系模式可进一步规范化为( )。(A)
A. R1(C#,Cn,T),R2(T,Ta)
B. R1(C#,Cn),R2(T,Ta)
C. R1(C#,Cn,Ta),R2(T,Ta)
D. Rl(C#,T),R2(T,Ta)
解析:本题的码为课程号,由于每门课程只有一位任课教师,课程号就可以决定教师名、教师地址。课程号可决定教师名,教师名又决定教师地址,这里有对主属性的传递依赖。可将该关系模式拆分为两个关系模式R1和R2,其中R1包含课程号、课程名、教师名,R2包含教师名、教师地址。其中R1的主码是课程号,R2的主码为教师名。这样两个表都不会出现对主属性的传递依赖。
7.以下叙述中正确的是(C)
A. if语句只能嵌套一层
B. 不能在else子句中再嵌套if语句
C. if子句和else子句中可以是任意的合法的C语句
D. 改变if-else语句的缩进格式,会改变程序的执行流程
解析:含else子句的if语句的格式为if(表达式)语句lelse语句2其中if和else是C语言的关键字。”语句1”称为if子句,”语句2”称为else子句,这些予句只允许为一条语句,若需要多条语句时,则应该使用复合语句,对于if和else语句的嵌套原则是比较自由的。
8.下列定义语句中错误的是( )。
B
解析:二维数组定义的一般形式是:类型说明符数组名[常量表达式1][常量表达式2]。其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的长度。如对二维数组的全部元素赋初值,则第一维的长度可以不给出。但如果对x[4][]赋值,只确定行数,而不确定列数,就无法正确赋值,因此B选项正确。
9.下列定义数组的语句中正确的是( )。(A)
A. define N 10
int x[N];
B. int N=10;
int x[N];
C. int x[0..10];
D. int x[];
解析:数组说明的一般形式为:类型说明符数组名[常量表达式]。B选项中N是变量,不能用变量定义数组长度。C选项中数组长度是一串非法的数字。定义数组时必须为其指明长度,D选项中的数组长度为空,所以非法。
10.有下列程序段:
typedef struct NODE
{ int num;struct NODE *next;
} OLD;
下列叙述中正确的是( )。(C)
A. 以上的说明形式非法
B. NODE是一个结构体类型
C. OLD是一个结构体类型
D. OLD是一个结构体变量
解析:C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用typedef定义了新的类型OLD结构,所以OLD为结构体类型。
11.有以下程序:
#include
int b=3:
int fun(int *k)
{b=*k+b;return(b);}
main()
{int a[10]={1,2,3,4,5,6,7,8),i;
for(i=2;i<4;i++){b=fun(&a[i]+b;printf(\\(B)
A. 12 14
B. 12 32
C. 10 14
D. 10 20
解析:i=2时,fun(&a[2])返回值是:b=b+a[1]=3+3=6,b=b+b=6+6=12;i=3时,fun(&a[3])返回值是:b=b+a[3]=12+4=16,b=b+b=16+16=32。
12.以下选项中非法的C语言字符常量是(C)
A. ’\b’
B. ’\007’
C. ’aa’
D. ’\xaa’
解析:一个字符常量代表ASCⅡ字符集中的一个字符,
本文档预览:3600字符,共7539字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载