1、国家二级 C语言程序设计机试(选择题)模拟试卷 1及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)所谓算法就是计算方法 ( B)程序可以作为算法的一种描述方法 ( C)算法设计只需考虑得到的计算结果 ( D)算法设计可以忽略算法的运算时间 2 程序流程图中带有箭头的线段表示的是 ( )。 ( A)图元关系 ( B)数据流 ( C)控制流 ( D)调用关系 3 深度为 5的完全二叉树的结点数不可能是 ( )。 ( A) 15 ( B) 16 ( C) 17 ( D) 18 4 下列选项中不属于结构化程序设计原则的是 ( )。 ( A)可封装 ( B)自顶向下 ( C)模块化
2、( D)逐步求精 5 下列关于栈的叙述中正确的是 ( )。 ( A)栈按 “先进先出 ”组织数据 ( B)栈按 “先进后出 ”组织数据 ( C)只能在栈底插入数据 ( D)不能删除数据 6 下列描述中不属于软件特点的是 ( )。 ( A)软件是一种逻辑实体,具有抽象性 ( B)软件在使用中不存在磨损、老化问题 ( C)软件复杂性高 ( D)软件使用不涉及知识产权 7 计算机软件的构成是 ( )。 ( A)源代码 ( B)程序和数据 ( C)程序和文档 ( D)程序、数据及相关文档 8 按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是 ( )。 ( A)下画线 ( B)大写字母 (
3、C)数字字符 ( D)连接符 9 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 10 有两个关系 R和 T如下: 则由关系 R得到关系 T的操作是 ( )。 ( A)投影 ( B)交 ( C)选择 ( D)并 11 以下叙述中正确的是 ( )。 ( A)不同函数的形式参数不能使用相同名称的标识符 ( B)用户自己定义的函数只能调用库函数 ( C)实用的 C语言源程序总是由一个或多
4、个函数组成 ( D)在 C语言的函数内部,可以定义局部嵌套函数 12 以下叙述中错误的是 ( )。 ( A) C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件 ( B) C语言中的每条可执行语 句和非执行语句最终都将被转换成二进制的机器指令 ( C)用 C语言编写的程序称为源程序,它以 ASC 代码形式存放在一个文本文件中 ( D) C语言源程序经编译后生成后缀为 .obj的目标程序 13 设有两行定义语句: int scanf; float case; 则以下叙述中正确的是 ( )。 ( A)第 2行语句不合法 ( B)两行定义语句都合法 ( C)第 1行语句不合法 (
5、 D)两行定义语句都不合法 14 以下各项中,能正确表述算式 sin(2r+30)的 C语言表达式是 ( )。 ( A) sin(2*r+30) ( B) sin(2*3 14*r+30) ( C) sin(2*3 14*r+3 14*30 180 0) ( D) sin(2*3 14*r+30*3 14 360 0) 15 若有定义: int a, b, c;,则以下选项中的赋值语句正确的是 ( )。 ( A) a=(b=c)=1; ( B) (a=b)=c=1; ( C) a=(b=c)+1; ( D) a+b=c; 16 有以下程序: #include main() printf(“ d
6、 n”, NULL); 程序运行后的输出结果是 ( )。 ( A) 1 ( B)变量无定义,输出不确定 ( C)一 1 ( D) 0 17 设有定义: double x=2 12;,则以下各项中不能完整输出变量 x值的语句是( )。 ( A) printf(“x= 5 of n”, x); ( B) prinff(“x= f n”, x); ( C) prinff(“x= If n”, x); ( D) prinff(“x= 0 5f n”, x); 18 若有定义: char c; iht d;,程序运行时输入: c=1 d=2,能把字符 l输入给变量 c、把整数 2输入给变量 d的输入语句
7、是 ( )。 ( A) scanf(“c= c d= d”, c, &d); ( B) scanf(“c= cd= d”, &c, &d); ( C) scant“(“c= d d= d”, &c, &d); ( D) scant“(“c= dd= d”, &c, &d); 19 若有定义 int x, y;并已正确给变量赋值,则以下选项中与表达式 (xy)?(x+): (y+)中的条件表达式 (xy)等价的是 ( )。 ( A) (xy0) ( B) (xy0) ( D) (xy=0) 20 有以下程序: #include main() char a=H; a=(a=A& a #define
8、 f(x)x*x*x main() int a=3, s, t; s=f(a+1); t=f(a+1); prinff(“ d, d n”, *, t); 程序运行后的输出结果是 ( )。 ( A) 10, 64 ( B) 10, 10 ( C) 64, 10 ( D) 64, 64 23 在一个 C源程序文件中所定义的全局变量,其作用域为 ( )。 ( A)所在文件的全部范围 ( B)所在程序的全部范围 ( C)所在函数的全部范围 ( D)由具体定义位置和 extem说明来决定范围 24 有以下程序: #include void main() char a, b, C, d; scanf(“
9、 c c”, a, b); c=getchar(); d=getchar(); prinff(“ c c c c n”, a, b, c, d); 当执行程序时,按下列方式输入数据 (从第一列开始, 代表回车,注意:回车是一个字符 ): 12 34 则输出结果是 ( )。 ( A) 1234 ( B) 12 ( C) 123 ( D) 1234 25 有以下程序: #include void fun(int x) if(x 21)fun(x 2); prinff(“ d”, X); void main() fun(7); prinff(“ n”); 程序运行后的结果是 ( )。 ( A) 13
10、7 ( B) 731 ( C) 73 ( D) 37 26 有以下程序: #include int b=2; int fun(int*k) b=*k+b; return(b); void main() int a10=1, 2, 3, 4, 5, 6, 7, 8, i; for(i=2; i int f(int x, int y) return(yx)*x); void main() int a=3, b=4, c=5, d; d=f(f(a, b), f(a, c); prinff(“ d n”, d); 程序运行后的输出结果是 ( )。 ( A) 9 ( B) 10 ( C) 8 ( D)
11、 7 29 以下叙述中正 确的是 ( )。 ( A)函数调用时,不必区分函数名称的大小写 ( B)调用函数时,函数名必须与被调用的函数名完全一致 ( C)函数名允许用数字开头 ( D)在函数体中只能出现一次 return语句 30 以下叙述中正确的是 ( )。 ( A)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 ( B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( D) C语言中的文 件是流式文件,因此只能顺序存取数据 31 有以下程序: #in
12、clude int m1(int x, int y) return x #include void main() char a10=“abc”, b10=“012”, c10=“xyz”; strcpy(a+1, b+2); puts(strcat(a, c+1); 程序运行后的输 出结果是 ( )。 ( A) a12xyz ( B) 12yz ( C) a2yz ( D) bc2yz 33 以下叙述中正确的是 ( )。 ( A)如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息 ( B)即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同 ( C)设变量 p是
13、一个指针变量,则语句 p=0;是非法的,应该使用 p=NULL; ( D)指针变量之间不能用关系运算符进行比较 34 以下叙述中正确的是 ( )。 ( A)如果 p是指针变量,则 &p是不合法的 表达式 ( B)如果 p是指针变量,则 *p表示变量 p的地址值 ( C)在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度 ( D)如果 p是指针变量,则 *p+1和 *(p+1)的效果是一样的 35 有以下程序: #include #include void fun(int: *s, int x23) *s=*(x1+1); void main() int a23=1, 2, 3, 4
14、, 5, 6, *p; P=(int*)malloc(sizeof(int); fun(&p, a); printf(“ d n”, *P); 程序的运行结果是 ( )。 ( A) 5 ( B) 2 ( C) 6 ( D) 3 36 有以下程序: #include main() int a=2, 3, 5, 4, i; for(i=0; i void main() int X=0x13; if(x=0x18)prinff(“T”); prinff(“F n”); 程序运行后的结果是 ( )。 ( A) TF ( B) T ( C) F ( D) TFT 38 下面结构体的定义语句中,错误的是
15、( )。 ( A) struct ordint x; int y; int z; struct ord a: ( B) struct ordint x; int y; int z; ; struct ord a; ( C) struct ordint x; int y; int z; a; ( D) structint x; int y; int z; a; 39 有以下程序: #include void fun(int n) static int x3=1, 2, 3; int k; for(k=0; k void main() unsigned char a=8, c; c=a3; pri
16、ntf(“ d n”, c); 程序运行后的输出结果是 ( )。 ( A) 32 ( B) 16 ( C) 1 ( D) 0 国家二级 C语言程序设计机试(选择题)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 算法是一组有穷指令集,是解题方案的准确而完整的描述。通俗地说,算法就是计算机解题的过程,重在解题方案的设计,并且不等于计算方法,故 A和 C选项不正确。程序的编制不可能优于算法的设计,但算法的描述可以用程序、伪代码、流程图来描述,故 B选项正确。算法要求执行过程中所需要的基本运算次数和时间最少,即时间复杂度最低,所以 D选项不正确。正确答案为B。 2 【正确答案
17、】 C 【试题解析】 在程序流程图中: 标有名字的带箭头线段表示控制流; 矩形表示加工步骤; 菱形表示逻辑条件。 3 【正确答案】 A 【试题解析】 对于满二叉树,叶子结点的数目等于 2n-1, n为深度,这里就是24=16。 4 【正确答案】 A 【试题解析】 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A。 5 【正确答案】 B 【试题解析】 栈是只允许在栈顶进行插入和删除运算的线性表,按 “先进后出 ”组织数据。 6 【正确答案】 D 【试题解析】 软件不像硬件一样具有实 物的特性,而是一种逻辑实体,具有抽象性;开发复杂性高,成本昂贵;在运行、
18、使用期间不存在磨损、老化问题。故A、 B和 C选项正确。由于软件是一种知识产品,受知识产权法的保护,所以 D选项不正确。 7 【正确答案】 D 【试题解析】 计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。答案选 D。 8 【正确答案】 D 【试题解析】 C语言中标识符由字母、下画线或数字组成,且开头必须是字母或下画线。 9 【正确答案】 C 【试题解析】 学号是学生表 S的主 键,课号是课程表 C的主键,因此选课表 SC的关键字应该与前两个表能够直接联系且能唯一定义元组,学号和课号的组合满足条件。 10 【正确答案】 A 【试题解析】 从表图中可以看出
19、,关系 T是从关系 R中选取一部分字段 (A和 C)及其值构成新的关系,是一种纵向操作产生新列,属于投影,正确选项为 A。 11 【正确答案】 C 【试题解析】 函数是一个独立的模块,不同函数之间的定义相互没有影响,所以标识符可以相同,选项 A错误;除了 main函数不能被其他函数调用之外,用户自定义函数可以调用其他任意函数,选项 B错误;一个 C程序可以有一个或多个程序文件,所以也可以有一个或多个函数,选项 C正确;函数体内部只可以调用,但是不可以定义其他函数,选项 D错误。故答案选 C。 12 【正确答案】 B 【试题解析】 C语言程序编译时将每条可执行语句转换为二进制的机器指令,但非执行
20、语句 (如注释语句 )不被编译。所以选项 B错误。 13 【正确答案】 A 【试题解析】 本题考查用户标识符,用户自己定义的标识符不能与关键字相同,并且尽量避免和预定义标识符相同。本题中 scanf。为预定义标识符,可以作为用户标识符; case为关键字,不能作为用户标识符,故而答案选 A。 14 【正确答案】 C 【试题解析】 考查算术表达式的写法,选项 c中没有 ,需要用数值 3 14代替, sin函数的参数为弧度,角度 30转成弧度应为 3 14*30 180。故应选 C。 15 【正确答案】 C 【试题解析】 赋值运算符的左侧必须为变量而不能是表达式,所以答案选 c。 16 【正确答案
21、】 D 【试题解析】 NULL为一个符号常量,对应的 ASC 码值为 0,答案选 D。 17 【正确答案】 A 【试题解析】 本题考查 printf函数的格式输出, “格式控制字符串 ”部分为 “ f”表示按照浮点型输出,选项 B正确;加入长度格式符 1即 “ 1”表示按照双精度浮点型输出,选项 C正确;若要控制输出精度,则需以 “ ”开头,后跟十进制整数,如 “ 2f或 “ 0 2f”,选项 D正确;控制输出宽度则是用整数表示,如“ 5f”,选项 A中 “ 5 Of”表示输出宽度为 5,右对齐,小数点后保留位数为0,所以结果输出为 2,不能完整输出 x,答案选 A。 18 【正确答案】 A
22、【试题解析】 在 sanf()函数中格式字符串的形式必须与地址格式保持一 致,所以B、 D选项不正确。 C选项中 c= d是以数值格式存入 c变量。故只有 A选项正确。 19 【正确答案】 A 【试题解析】 条件表达式: x:表达式 1?表达式 2:表达式 3,其含义是先求解表达式 1,若其值为非 0(真 ),则求解表达式 2,将表达式 2的值赋给 x;若表达式1的值为 0(假 ),则求解表达式 3,将表达式 3的值赋给 x。与表达式 (xy)等价的是 (xy0)。 20 【正确答案】 A 【试题解析】 考查条件运算符。条件表达式的形式为:表达式 1?表达式 2:表达式 3,计算 “表达式 1
23、”的值,若为 “真 ”,取 “表达式 2”的值作为整个条件表达式的值;若为 “假 ”,取 “表达式 3”的值作为整个条件表达式的值。字符参与运算时一般计算其 ASC 码,并且一个字母的小写一大写 =32(ASC 码 ),该程序将大写字母转成对应的小写字母,答案选 A。 21 【正确答案】 B 【试题解析】 考查 while循环的执行过程。先计算括号内表达式的值,若不为 0则执行循环体语句,若为 0则跳出 while循环,所以条件表达式的执行次数总是比循环体的执行次数多一次,答案选 B。 22 【正确答案】 A 【试题解 析】 c语言中带参数的宏可以理解为用参数直接替代定义式中的变量,而不经过任
24、何修改。所以 s=f(a+1)=a+1*a+1*a+1, t=f(a+1)=(a+1)*(a+1)*(a+1),所以有无括号的运算结果是不同的。 23 【正确答案】 D 【试题解析】 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。 24 【正确答案】 C 【试题解析】 scanf()函数的一般调用形式为: scanf(格式控制,输入地址列表 )。其中,格式控制是用双引号 括起来的字符串,包括格式字符和普通字符,格式是是由 “ ”和格式字符组成。 getchar()函数的功能是从标准输入设备上读入一个字符。根据程序中的格式控制可知,接收输入时分别
25、把 1赋给了 a, 2赋给了 b,然后 getchar()函数提取一个换行符赋给 c,再提取一个字符 3赋给 d。所以程序的输出结果为: 123。 25 【正确答案】 D 【试题解析】 函数 fun是递归函数,递归终止条件是 x小于等于 2,当大于 2时递归调用 fun(x 2)。第一次循环 x 2=3,调用 fun(3), x 2=1,跳出 if循环,执行输出 x=3,然后回到第一次循环,执行 if循环的语句,输出 x=7。 26 【正确答案】 C 【试题解析】 因为 b是全局变量,所以它的值在整个程序结束才会消失。 for循环中,第一次循环, i=2, a2=3,所以 fun(&ai=3+
26、2=5, b=5,所以 b:fun(&ai)+b=5+5=10;第二次循环, b=10,然后 fun( ai)代入 a3=4,这时fun(&ai=10+4=14,所以 b=fun(&ai)+b=14+14=28。 27 【正确答案】 A 【试题解析】 A项错误,数组定义后,不能对数组整体赋值, ss是二维数组,ss1是一维字符数组,即字符串,字符串赋值可以使用 “strcpy(ss1, ”right”); ”的形式,但不能使用赋值的形式。 B、 D两项正确,在定义时对数组同时进行初始化; C项正确,将常量字符串在内存中的首地址赋给指针数组的一个元素。 28 【正确答案】 A 【试题解析】 考查
27、函数的返回值。 d=f(f(a, b), f(a, c)=f(ba)*a, (ca)*a)=f(3, 6)=(63)*3=9,所以答案选 A。 29 【正确答 案】 B 【试题解析】 调用函数的时候只有保证调用语句的函数名和被调函数的函数名、参数列表一致才能保证调用的正确性,选项 B正确。 C语言对大小写敏感,选项A错。用户自定义的函数名需要遵循用户标识符的命名规则,由字母、数字、下画线组成并且第一个字符不能为数字,选项 C错。一个函数每次只能使用一个return语句,但是该函数体中可以有多个返回点,也就是有多条 return语句,每次只从其中一点返回,选项 D错。答案选 B。 30 【正确答
28、案】 A 【试题解析】 A选项正确, C语言通过文件缓冲区对文件进行操 作,如果操作完成后不进行关闭文件,可能导致文件缓冲区中的数据丢失。 B选项错误,打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等; C选项错误,在一个程序中当对文件进行了写操作后,用 fSeek()函数进行重新定位就能够读到第 1个数据; D选项错误, C语言中的文件可以进行随机读写。 31 【正确答案】 A 【试题解析】 函数 ml()返回两个参数中较小的数值,函数 m2()返回两个参数中较大的数值,函数 fun()返回两个参数之和,所以 fun(m1(x, y), m
29、2(y,z)=fun(m1(2, 3), m2(3, 1)=fun(2, 3)=5,答案选 A。 32 【正确答案】 C 【试题解析】 先执行 strcpy,将 b2中的 2复制到 a1中的 b及之后的存储空间中,即此时数组 a中值为 a2,再执行 strcat连接函数,将 c1所指的 y及之后的 z与 a连接,即为 a2yz。 33 【正确答案】 A 【试题解析】 空指针意味着该指针没有指向任何具体的变量,所以不能访问一个存储单元,选项 A正确。指针的赋值运算只能在同一数据类型之间进行,故选项B错。语句 p=0和 p=NULL是一样的,都是把一个空指针赋给指针变量 p,故选项 C错。指针之间
30、能进行关系运算,比较的是地址值的大小,选项 D错。答案选A。 34 【正确答案】 C 【试题解析】 考查指针的用法。指针进行算术运算的时候,数字 “1”不再代表十进制整数 “1”,而是指一个存储单元长度,选项 c正确。指针变量存储的是其指向的变量的地址,其本身的地址仍用取地址运算符 “&”求得, *p表示的是 p指向的变量的值,选项 A、 B错。 *p+1表示的是指针 p指向的变量值 +1,而 *(p+1)则是取得了下一个变量的值,两者不同,选 项 D错。答案选 C。 35 【正确答案】 A 【试题解析】 *s=*(x1+1);的作用是将 a数组的 5的地址赋给了 p,故正确答案为 A。 36
31、 【正确答案】 C 【试题解析】 main函数的函数体是一个 for循环语句, for循环中包含一个switch语句,如果判断条件为 0,则进入第二个 swit&一 l语句,如果判断语句为1,则执行 “ai=0”,最后将数组按顺序输出。所以程序功能是将数组的偶数项设为 0,奇数项如果为奇数则减 1,为偶数就加 1,最后得到结果。 37 【正确答案】 A 【试题解析】 x=Oxl8为赋值表达式,十六进制数 Oxl8非 0, if条件成立输出T,之后再输出 F与回车符。程序运行后的输出结果是 TF。 38 【正确答案】 A 【试题解析】 分号代表该结构体定义语句的结束,选项 A的结构体没有定义完全
32、就用该结构体另外定义变量,用法有误,所以答案选 A。 39 【正确答案】 B 【试题解析】 第一次调用 fun()函数,此时 n=O,数组 x是静态的,因此,只在第一次时初始化,由 xk+=xk一 n计算可知, x=2, 4, 6,第二次调用fun(),此时 n=1, x=2, 4, 6,经计算得 x=3, 7, 11,故输出结果为 2,4, 6, 3, 7, 11,。 40 【正确答案】 C 【试题解析】 字符常量与其 ASC 码值一一对应,在计算的时候,可以使用该字符的 ASC 码参与运算,输出时会根据格式控制符输出对应的字符或者 ASCII码。右移运算符 “”的运算规则是把左边运算数的各二进制位全部右移 n位, n取决于 “”右边的数值。字符 a的 ASC 码值为 8,对应二进制为 1000,所以a3=1,输出的字符 c的 ASC 码值为 1,答案选 C。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1