1、国家二级 C语言机试(选择题)模拟试卷 88及答案与解析 一、选择题 1 算法的时间复杂度是指 ( )。 ( A)算法的长度 ( B)执行算法所需要的时间 ( C)算法中的指令条数 ( D)算法执行过程中所需要的基本运算次数 2 以下数据结构中,属于非线性数据结构的是 ( )。 ( A)栈 ( B)线性表 ( C)队列 ( D)二叉树 3 数据结构中,与所使用的计算机无关的是数据的 ( )。 ( A)存储结构 ( B)物理结构 ( C)逻辑结构 ( D)线性结构 4 内聚性是对模块功能强度 的衡量,下列选项中,内聚性较弱的是 ( )。 ( A)顺序内聚 ( B)偶然内聚 ( C)时间内聚 (
2、D)逻辑内聚 5 在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的 ( )。 ( A)连接码 ( B)关系码 ( C)外码 ( D)候选码 6 检查软件产品是否符合需求定义的过程称为 ( )。 ( A)确认测试 ( B)需求测试 ( C)验证测试 ( D)路径测试 7 数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符 名标识的图符不属于数据流图合法图符的是 ( )。 ( A)控制流 ( B)加工 ( C)存储文件 ( D)源和潭 8 待排序的关键码序列为 (15, 20, 9, 30, 67, 65, 45, 90),要
3、按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码 15被放到第 ( )个位置。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 9 对关系 S和关系 R进行集合运算,结果中既包含关系 S中的所有元组也包含关系 R中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B)交运算 ( C)差运 算 ( D)除运算 10 下列选项中,不属于数据管理员 (DBA)职责的是 ( )。 ( A)数据库维护 ( B)数据库设计 ( C)改善系统性能,提高系统效率 ( D)数据类型转换 11 C语言规定,在一个 C程序中, main()函数的位置 ( )。 ( A)必须在系统
4、调用的库函数之后 ( B)必须在程序的开始 ( C)必须在程序的最后 ( D)可以在任意位置 12 以下叙述中正确的是 ( )。 ( A) C语言比其他语言高级 ( B) C语言可以不用编译就能被计算机识别执行 ( C) C语 言以接近英语国家的自然语言和数学语言作为语言的表达形式 ( D) C语言出现的最晚,具有其他语言的一切优点 13 已知 “int a=6; ”则执行 “a+=a-=a*a; ”语句后, a的值为 ( )。 ( A) 36 ( B) 0 ( C) -24 ( D) -60 14 下列叙述中错误的是 ( )。 ( A) C语句必须以分号结束 ( B)复合语句在语法上被看作一
5、条语句 ( C)空语句出现在任何位置都不会影响程序运行 ( D)赋值表达式末尾加分号就构成赋值语句 15 若有定义: int a=7; float x=2 5, y=4 7;则表达式 “x+a 3*(int)(x+y) 2 4”的值是 ( )。 ( A) 2 500000 ( B) 2 750000 ( C) 3 500000 ( D) 0 000000 16 若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是 ( )。 ( A) +i; ( B) n1=(n2 (n3=2); ( C) k=i=j; ( D) a=b+c=2; 17 下列关于逻辑运算符两侧运算对象的叙述中正确的是
6、( )。 ( A)只能是整数 0或 1 ( B)只能是整数 0或非 0整数 ( C)可以是结构体类型的数据 ( D)可以是任意合法的表达式 18 若有说明 int a34;则 a数组元素的非法引用是 ( )。 ( A) a02*1 ( B) a13 ( C) a420 ( D) a04 19 下列说法不正确的是 ( )。 ( A) int *ptr;指针指向整形数据 ( B) char *ptr;指针的类型是字符型指针 ( C) int *ptr;指针的类型是双重指针 ( D) int(*ptr)3;是一个指 针数组,数组共有三个元素,而三个元素是 int型指针 20 有以下程序 #inclu
7、de void main() char s=“01aXy“; int i, n=0; for(i=0; si!=0; i+) if(si=z)n+; printf(“ d n“, n); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 2 ( C) 3 ( D) 5 21 有以下程序: #include main() int a=1, 2, 3, 4), y, *p=&a3; -p; y=*p; printf(“y= d n“, y); 程序的运行结果是 ( )。 ( A) y=0 ( B) y=1 ( C) y=2 ( D) y=3 22 下面的 for语句的循环次数为 ( )。
8、for(x=1, y=0; (y!=19)&(x void main() int a=0, b=1, c=2; if(+a0+b0) +c; printf(“ d, d, d“, a, b, c); ( A) 0, 1, 2 ( B) 1, 2, 3 ( C) 1, 1, 3 ( D) 1, 2, 2 24 有以下程序: #include main() int c; while(c=getchar()!= n) switch(c-3) case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case 3: putchar(c+3);
9、 case 4: putchar(c+3); break; printf(“ n“); 从第一列开始输入数据 (代表一个回车符 ): 3845,则程序输出结果为( )。 ( A) 77889 ( B) 77868 ( C) 776810 ( D) 77886610 25 C语言规定,函数返回值的类型是 ( )。 ( A)由调用该函数时的主调函数类型所决定 ( B)由 return语句中的表达式类型所决定 ( C)由调用该函数时系统临时决定 ( D)由定义该函数时所指定的数值类型决定 26 执行下列程序时输入 “456789123”,输出结果是 ( )。 #include main() char
10、 m80; int c, i; scanf(“ c“, &c); scanf(“ d“, &i); scanf(“ s“, &m); printf(“ c, d, s n“, c, i, m); ( A) 456, 789, 123 ( B) 4, 789, 123 ( C) 4, 56, 789, 123 ( D) 4, 56, 789 27 已知下列函数定义: fun(int *b, int c,int d) int k; for(k=0; k int flint t, int n); main() int a4=1, 2, 3, 4, s; s=f(a, 2); printf(“ d n
11、“, s); int f(int t, int n) if(n0)&(n #include“string h“ void fun(char*s, int n) char *t; int i, j; for(i=0; istrlen(sj) t=si; si=sj; sj=t; main() char *ss=“bcc“, “bbcc“, “xy“, “aaaacc“, “aabcc“; fun(ss, 5); printf(“ s, s n“, ss0, ss4); 程序的运行结果是 ( )。 ( A) xy,aaaacc ( B) aaaacc,xy ( C) bcc,aabcc ( D)
12、aabcc,bcc 34 若已定义: int a=0, 1, 2,3,4,5,6,7,8,9, *p=a, i; 其中 0i9,则对 a数组元素不正确的引用是 ( )。 ( A) ap-a ( B) *(&ai) ( C) pi ( D) a10 35 以 下选项中可用作 C程序合法实数的是 ( )。 ( A) 1e0 ( B) 3 0e0 2 ( C) E9 ( D) 9 12E 36 以下叙述中不正确的是 ( )。 ( A)预处理命令行都必须以 #号开始,结尾不加分号 ( B)在程序中凡是以 #号开始的语句行都是预处理命令行 ( C) C程序在执行过程中对预处理命令进行处理 ( D)预处理
13、命令可以放在程序中的任何位置 37 以下程序的输出结果是 ( )。 #include #define F(x)2 84+x #define w(y)printf(“ d“, (int)(y) #define P(y)w(y) main() int x=2; P(F(5)*x); ( A) 12 ( B) 13 ( C) 14 ( D) 16 38 设有下面的定义: struct st int a; float b; d; int *p; 要使 p指向结构变量 d中的 a成员,正确的赋值语句是 ( )。 ( A) *p=d a; ( B) p=&a; ( C) p=d a; ( D) p=&d
14、a; 39 交换两个变量的值,不允许用临时变量,应该使用下列 ( )位运算符。 ( A) & ( B) ( C) ( D) 40 如果需要打开一个已经存在的非空文件 “FILE”并进行修改,正确的语句是( )。 ( A) fp=fopen(“FILE“,“r“); ( B) fp=fopen(“FILE“,“a+“); ( C) fp=fopen(“FILE“,“w+“); ( D) fp=fopen(“FILE“,“r+“); 国家二级 C语言机试(选择题)模拟试卷 88答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行
15、过程中所需基本运算的执行次数来度量算法的工作量。 2 【正确答案】 D 【试题解析】 二叉树属于非线性结构。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作:队列可看作是插入在一端进行,删除在另一端进行的线性表。 3 【正确答案】 C 【试题解析】 数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用 的计算机无关。 4 【正确答案】 B 【试题解析】 内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚度由弱到强排列: 偶然内聚一一模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块为巧合强度模块。 逻辑内聚一
16、一这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成那一种功能。 时间内聚一一这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。 过程内聚 一一如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。 通信内聚一一这种模块除了具有过程内聚的特点外,还有另外一种关系,即它的所有功能都通过使用公用数据而发生关系。 顺序内聚一一如果一个模块内各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,处理元素的输出数据作为下一个处理元素的输入数据,则称为顺序内聚。 功能内聚一一如果一个模块包括为完成某一具体任务所必需的所有成分,
17、或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则为功能内聚模块。 5 【正确答案】 D 【试题解析】 在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的候选码或候选键。从二维表的所有候选键中选取一个作为用户使用的键称为主键或主码。 6 【正确答案】 A 【试题解析】 确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求。 7 【正确答案】 A 【试题解析】 数据流图用于抽象描述一个软件的逻辑模型,它由一些特定的图符构成,包括 4个方面,即加工、数据流、存储文件、源和潭。 8 【正确答案】 B 【试题解析】
18、 选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素 9放在第一个位置,元素 15则被交换放在第三个位置。 9 【正确答案】 A 【试题解析】 关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。 10 【正确答案】 D 【试题解析】 数据库管理员 (DataBase Administrator, DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下: -数据库设计。 DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计;
19、 -数据库维护。 DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护; -改善系统性能,提高系统效率。 DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。 11 【正确答案】 D 【试题解析】 每个 C程序有且只有一个主函数 (main),且程序必须从 “main()”函数开始执行,而且 “main()”函数可以放在程序中的任意位置。 12 【正确答案】 C 【试题解析】 此题考查的是 C语言的基本特点。 C语言是一种高级编程语言,但并不是比其他语言高级; C语言源程序必须经过编译生成目标文件才能被计算机识别执行; C语言出
20、现比较晚,它既有优点也有缺点,而并不是具有其他一切语言的优点。 13 【正确答案】 D 【试题解析】 此题考查的是赋值表达式。执行语句 “a+=a-=a*a; ”时,首先执行“a=a-a*a=-30”,然后执行 “a=a+a=一 60”。 14 【正确答案】 C 【试题解析】 C语言规定每条语句和数据定义的最后必须有一个分号,分号是 C语句的必要组成部分。复合语句也称为 “语句块 ”,其形式如下: 语句 1;语句2; 语句 n; ,即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语
21、句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也 不会提示逻辑错误,需要慎用。 15 【正确答案】 A 【试题解析】 此题考查的是变量的类型转换。表达式中 “(int)(x+y)把 x+y=(7 2)”的值强制转化成整型即得到 7,那么 “a 3*(int)(x+y) 2”的值为整型常量 1,所以“a 3*(int)(x+y) 2 4”的值为 0;因为变量 x是浮点型变量, 所以表达式 “x+a3*(int)(x+y) 2 4”的结果也是浮点型,得到 2 500 000。 16 【正确
22、答案】 D 【试题解析】 本题考查赋值表达式。赋值表达式的一般形式 是:变量名 =表达式。 C语言规定,不能给变量表达式赋值。 17 【正确答案】 D 【试题解析】 逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为 1(“真 ”),或者为 0(“假 ”)。 18 【正确答案】 D 【试题解析】 此题考查的是数组元素的引用。对于已定义的数组 aMN,数组元素的正确引用必须满足行下标小于 M,列下标小于 N且为正整数。此题中,选项 D)中列下标值出现溢出。 19 【正确答案】 D 【试题解析】 int(*ptr)3是一个数组指针, 指针指向一个有 3个 int型变量的数组
23、。 20 【正确答案】 A 【试题解析】 这段程序的功能求出字符串 s中字符的 ASCII码小于小写字符 a并且大于小写字符 z的字符的个数。因为小写字符 z的 ASCII码大于小写字符 a的ASCII码,所以满足 a的 ASCII码并且大于 z的 ASCII码的字符是不存在的,所以输出 0。 21 【正确答案】 D 【试题解析】 程序首先定义了一个一维数组和指针,接着将数组第 4个元素的地址赋给 “*p”,进行 -p使指针 p指向了数组的第 3个元素;通过 “y=*p”,将数组第3个 元素的值 3赋给了 y,所以选项 D)正确。 22 【正确答案】 D 【试题解析】 本题考查 for循环。只
24、考虑 x的取值变化, x从 1取到 5,可以循环 5次,但是并不知道 y是如何变化的,有可能出现 y=19提前跳出循环的情况,所以是最多执行了 5次。 23 【正确答案】 C 【试题解析】 本题考查 if语句。先判断 if语句的条件是否成立,因为“+a=10”,所以条件成立,又因为是进行逻辑或运算,在己知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行 +b操作,就可以直接得出整个表 达式的值为逻辑 1,执行下面的 +c。 24 【正确答案】 A 【试题解析】 题中 while循环的条件是:当从键盘读入的字符不是 “ n”时,执行 while循环。输入第一个字符 3时:执
25、行 case 0,什么也不输出; case 1,输出7; case 2,输出 7;遇到 break语句,跳出 switch语句。输入第二个字符 8时 “c一 3=5”,不执行任何语句。输入第三个字符 4时 “c-3=1”,执行 case 1输出 8;case 2,输出 8;遇到 break语句,跳出 switch语句。输入第四个字符 5时 “c-3=2”,执行 case2,输出 9;遇到 break语句,跳出 switch语句。 25 【正确答案】 D 【试题解析】 本题考查函数调用时的数值类型。函数调用时,函数返回值的类型既不由主调函数类型所决定,也不由 return语句中的表达式类型所决定
26、,更不是由系统临时决定,而是由定义该函数时所指定的数值类型所决定。 26 【正确答案】 D 【试题解析】 scanf。函数中的 “ c”表示通过键盘只读入一个字符型的数据,“&c”表示将该数据赋值给 c,所以 c=4。另外,以 “ d”格式读入数据时, 只有遇到空格或者换行等间隔符时才停止读入,所以 i=56, m=789。 27 【正确答案】 C 【试题解析】 本题考查函数调用时的参数传递。 fun函数的调用形式为fun(int*b,int c,int d)。调用数组时,用数组名表示一个指向数组的第一个元素的指针,因此,调用时的形式为 “fun(a,8,4)”。 28 【正确答案】 D 【试
27、题解析】 &是取地址运算符, “Y=&B”是将 B的地址赋给 Y,因此, Y值为EF02。 29 【正确答案】 B 【试题解析】 本题主要考查的是函数的 递归调用,子函数 f是一个递归函数,所以主函数中执行 “f(a,2)” 时, 其执行过程是 “a3+f(a, 1)=a3+a2+f(a,0)=7”。 30 【正确答案】 D 【试题解析】 本题考查如何对二维数组的元素赋值。选项 A),数组第二维的大小是 4,但是却赋值了 5个元素,数组溢出;选项 B), C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式;选项 C),数组第一维的大小是 2,但
28、是赋值超过了 2;选项 D),在对二维数组元素赋初值时,可以只 对部分元素赋初值,未赋初值的元素自动取 0。 31 【正确答案】 A 【试题解析】 本题考查一维数组的赋值。一维数组的一般定义格式为:类型说明符数组名 常量表达式 。其中, “”中的内容可以是整型常量,也可以是整型表达式。选项 A)中的 N是一个变量,所以错误。 32 【正确答案】 B 【试题解析】 “*s-*t”的输出实际是比较两个字符的 ASCII码值,比较两个字符串的大小。 33 【正确答案】 A 【试题解析】 从 main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按
29、元素长度从小到大的顺序排列元素,所以执行 “fun(ss,5)”函数后, “*ss1=“xy“, “bcc“, “bbcc“, “aabcc“,“aaaacc“”,所以调用 printf函数输出 ss0, ss4的值分别为 xy, aaaacc。 34 【正确答案】 D 【试题解析】 此题考查对一维数组的引用。对于已定义的数组 aM,数组元素的正确引用必须满足下标小于 M且为正整数。选项 D)中下标值出现溢出。 35 【正确答案】 A 【试题解析】 C程序的合法实数有两种表示形式,一种是小数形式,另一种是指数形式,对于用指数形式表示的实数来说,需要注意的是字母 e或 E之前必须要有数字,且字母
30、 e或 E后面的指数必须为整数,所以选项 A)为正确答案。 36 【正确答案】 C 【试题解析】 本题考查预处理命令的特点。编译预处理命令的特点有: 为了区分一般的语句,预处理命令行都必须以 #开始,结尾不加分号; 预处理命令可以放在程序中的任意位置; 在程序中凡是 #开始的语句都是预处理命令行。 37 【正确答案】 A 【试题解析】 本题考查带参数的宏定 义及相关运算。 “P(F(5)*x)-P(2 84+5*2)=P(12 84)”,调用 “w(12 84)”,输出 “(int)(12 84)=12”。 38 【正确答案】 D 【试题解析】 本题主要考查按结构数组元素方式引用结构成员。结构
31、体变量的成员引用方法有 3种: 结构体变量名成员名; 指针变量名 -成员名; (*指针变量名 )成员名。因为 p是指针变量,所以应该将地址值赋给 p。 39 【正确答案】 B 【试题解析】 按逻辑位运算的特定作用主要有 3点: 用按位与运算将特定位清0或保留特定位 ; 用按位或运算将特定的位置设置为 1; 用按位异或运算将某个变量的特定位翻转或交换两个变量的值。 40 【正确答案】 D 【试题解析】 本题考查打开文件函数 fopen(),打开文件函数 fopen()的调用形式为: fp=fopen(文件名,文件使用方式 )。 “文件使用方式 ”说明:方式 “r”为以输入方式打开一个文本文件;方式 “a+”为以读写方式打开一个文本文件,保留文件中原有的数据;方式 “w+”为以读写方式建立一个新的文本文件;方式 “r+”为以读写方式打开一个文本文件。