1、国家二级( C语言)机试模拟试卷 66及答案与解析 一、选择题 1 在结构化方法中,用数据流程图 (DFD)作为描述工具的软件开发阶段是 ( )。 ( A)逻辑设计 ( B)需求分析 ( C)详细设计 ( D)物理设计 2 对序线性表 (23, 29, 34, 55, 60, 70, 78)用二分法查找值为 60的元素时,需要比较次数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 3 下列描述中,正确的是 ( )。 ( A)线性链表是线性表的链式存储结构 ( B)栈与队列是非线性结构 ( C)双向链表是非线性结构 ( D)只有根结点的二叉树是线性结构 4 开发大型软件时,
2、产生困难的根本原因是 ( )。 ( A)大型系统的复杂性 ( B)人员知识不足 ( C)客观世界千变万化 ( D)时间紧、任务重 5 两个或两个以上的模块之间关联的紧密程度称为 ( )。 ( A)耦合度 ( B)内聚度 ( C)复杂度 ( D)连接度 6 下列关于线性表的叙述中,不正确的是 ( )。 ( A)线性表可以是空表 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件和后件 ( D)线性表是由 n个元素组成的一个有限序列 7 设有如下关系表: 则下列操作正确的是 ( )。 ( A) T=R S ( B) T=RS ( C) T=RS ( D) T= US 8 以下描
3、述中,不是线性表顺序存储结构特征的是 ( )。 ( A)可随机访问 ( B)需要连续的存储空间 ( C)不便于插入和删除 ( D)逻辑相邻的数据物理位置上不相邻 9 在三级模式之间引入两层映像,其主要功能之一是 ( )。 ( A)使数据与程序具有较高的独立性 ( B)使系统具有较高的通道能力 ( C)保 持数据与程序的一致性 ( D)提高存储空间的利用率 10 下列方法中,属于白盒法设计测试用例的方法的是 ( )。 ( A)错误推测 ( B)因果图 ( C)基本路径测试 ( D)边界值分析 11 在 C语言中,以下说法不正确的是 ( )。 ( A)在 C程序中,整数和实数都能被准确无误地表示出
4、来 ( B)在 C程序中,任何一个变量名都代表存储器中的一个位置 ( C)静态变量的生存期与整个程序的运行期相同 ( D) C语言中,任何变量都必须先声明才能进行引用 12 以下关于 C语言数据类型的叙述中正 确的是 ( )。 ( A) C基本数据类型包括:分为整型、实型、浮点型、字符型四种 ( B)实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式 ( C)若要处理如 “人员信息 ”等含有不同类型的相关数据,应自定义结构体类型 ( D)若只处理 “真 ”和 “假 ”两种逻辑值,应使用逻辑类型 13 以下标识符不是关键字的是 ( )。 ( A) break ( B
5、) char ( C) switch ( D) return 14 下列选项中,不能作为合法常量的是 ( )。 ( A) 1 234e04 ( B) 1 234e0 4 ( C) 1 234e+4 ( D) 1 234e0 15 有以下程序: #include main() while(getchar()!= n); 以下叙述中正确的是 ( )。 ( A)此 while语句将无限循环 ( B) getchar()不可以出现在 while语句的条件表达式中 ( C)当执行此 while语句时,只有按回车键程序才能继续执行 ( D)当执行此 while语句时,按任意键程序就能继续执行 16 下列叙
6、述中正确的是 ( )。 ( A)调用 printf()函数时,必须要有输出项 ( B)使用 putchar()函数时,必须在之前包含头文件 stdio h ( C)在 C语言中,整数可以以二进制、八进制或十六进制的形式输出 ( D)调节 getchar()函数读入字符时,可以从键盘上输入字符所对应的 ASC 码 17 执行以下程序段后, w的值为 ( )。 int w=A, x=14, y=15; w=(xy)&(w0) ( B) (x-y0) ( D) (x-y=0) 21 若 a、 b、 c、 d都是 int型变量 且都已经正确赋初值,则以下不正确的赋值语句是 ( )。 ( A) a+d;
7、 ( B) a+; ( C) a=b=c=d=100; ( D) a=(b=3)+(d=5); 22 有以下程序 #define r(X, Y)(X)*(Y) main() int a=3, b=4; printf(“ dLn“, F(a+, b+); 程序运行后的输出结果是 ( )。 ( A) 12 ( B) 15 ( C) 16 ( D) 20 23 以下是 while语 句的基本形式: while(表达式 )语句; 其中 “表达式 ”( )。 ( A)必须是逻辑表达式 ( B)必须是关系表达式 ( C)必须是逻辑表达式或关系表达式 ( D)可以是任意合法的表达式 24 有以下程序: #i
8、nclude main() int a=6, b=7, m=1; switch(a 2) case 0: m+; break; case 1: m+: switch(b 2) defaut: m+; case0: m+; break; printf(“ d n“, m); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 25 有以下程序 #include int fun(int a, int b) if(b=0)return a; else return(fun(-a, -b); main0 printff“ d n“, fun(4, 2); 程序的运
9、行结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 26 关于字符常量,以下叙述正确的是 ( )。 ( A)空格不是一个字符常量 ( B)字符常量能包含大于一个的字符 ( C)单引号中的大写字母和小写字母代表的是相同的字符常量 ( D)所有的字符常量都可以作为整型量来处理 27 下面函数调用语句含有实参的个数为 ( )。 func(exp1, exp2), (exp3, exp4,exp5); ( A) 1 ( B) 2 ( C) 3 ( D) 5 28 有以下程序 #include void main() int n=2, k=1; while(!(k0IIn+);
10、printf(“ d d n“, k, n); 程序运行后的输出结果是 ( )。 ( A) 0 2 ( B) 1 3 ( C) 5 7 ( D) 1 2 29 以下不正确的定义语句是 ( )。 ( A) double x5=1 0, 2 0, 3 0, 4 0, 5 0; ( B) int y5=0, 1, 2, 3, 4, 5; ( C) char c11, 2, 3, 4, 5; ( D) char c2=a, b, c; 30 若有以下定义,则对数组元素的正确引用是 ( )。 int a5, *p=a; ( A) *&a5 ( B) (*a)+2 ( C) *p+4 ( D) *(a+2
11、) 31 下列字符数组初始化语句中,不正确的是 ( )。 ( A) char c=goodmorning; ( B) char c20=“goodmoming“; ( C) char c=a, b, c, d; ( D) char c=“goodmorning“; 32 下列程序的运行结果为 ( )。 #include void abc(char*str) int a, b, i, j; for(i=j=0; stri!= 0; i+) if(stri!=a) strj+=stri; strj= 0; void main() char str=”abcdef; abc(str); printf
12、(”str。 s”, str); ( A) str=bcdef ( B) str=abcdef ( C) str=a ( D) str=ab 33 阅读下面程序,程序执行后的结果为 ( )。 #include“stdio h“ main() char*str=“abcdefghijklmnopq“; while(*strH!=e); printf(“ c n“, *str); ( A) f ( B) a ( C) e ( D) q 34 设有如下的程序段: char str=“HelloWorld“; char*ptr; ptr=str; 执行上面的程序段后, *(ptr10)的值为 ( )。
13、 ( A) 0 ( B) 0 ( C)不 确定的值 ( D) 0的地址 35 下述语句中,在字符串 s1和 s2相等时显示 “they areEqual”的是 ( )。 ( A) if(*s1=*s2) puts(“they are Equal“); ( B) if(!strcmp(s1, s2) puts(“they are Equal“); ( C) if(s1=s2) Puts(“they are Equal“); ( D) ifistrcmp(s1, s2) puts(“they are Equal“); 36 设有定义: struct complex int rea1, unrea1
14、; data1=1, 8, data2; 则以下赋值语句中错误的是 ( )。 ( A) data2=data1 rea1, data1 unrea1; ( B) data2=(2, 6); ( C) data2 rea1=data1 rea1; ( D) data2-rea1=data1 unrea1; 37 以下程序的输出结果是 ( )。 #include voidprt(int *x, int *y, int *z) ptintf(“ d, d, d n“, +*x, +*y, *(z+); main() int a=10, b=40, c=20; prt(&a, b, c); prt(&
15、a, b, &c); ( A) 11, 42, 31 12, 22, 41 ( B) 11, 41, 20 12, 42, 20 ( C) 11, 21, 40 11, 21, 21 ( D) 11, 41, 21 12, 42, 22 38 设有以下说明,则不正确的叙述是 ( )。 union un int a; char b: float c; art; ( A) arr所占的内存长度等于成员 c的长度 ( B) arr的地址和它的各成员的地址都是同一地址 ( C) arr可以作为函数参数 ( D)不能在定义 arr时对它初始化 39 若 x=4, y=5,则 x&y的结果是 ( )。 (
16、 A) 0 ( B) 4 ( C) 3 ( D) 5 40 下列关于 C语言数据文件的叙述中正确的是 ( )。 ( A)文件由 ASC 码字符序列组成, C语言只能读 写文本文件 ( B)文件由二进制数据序列组成, C语言只能读写二进制文件 ( C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 ( D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 二、程序填空题 41 给定程序中已建立一个带有头结点的单向链表,在 main函数中将多次调用 fun函数,每调用一次 fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。 请在程序的下划线处填入正确的
17、内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生 文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 8 typedef struct list int data; struct list *next; SLIST; void fun(SLIST *P) SLIST *t, *s; t=P-next; s=P; while(t-next!=NULL) s=t; *found* t=t-_1_ *found* printf(“ d“, _2_); s-next=NULL; *found* free(
18、_3_); ) SLIST *creatlist(int *a) SLIST *h, *P, *q; int i; h=p=(SLIST*)malloc(sizeof(SLIST); for(i=0; idata=ai; P-next=q; P=q; P-next=0; return h; void outlist(SLIST *h) SLIST *P; p=h-next; if(p=NULL)printf(“ nThe list is NULL! n“); else printf(“ nHead“); do printf(”- d“, P-data); p=p-next; while(P!=
19、NULL); printf(“-End n“); main() SLIST *head; int aN=11, 12, 15, 18, 19, 22, 25, 29); head=creatlist(a); printf(“ nOutput from head: n“); outlist(head); printf(“ nOutput from tail: n“); while(head-next!=NULL) fun(head); printf(“ n n“); printf(“ hOutput from head again: n“); outlist: (head); 三、程序修改题 4
20、2 已知一个数列从第 0项开始的前三项分别为 0, 0, 1,以后的各项都是其相邻的前三项之和。给定程序 MODI1 C中函数 fun的功能是:计算并输出该数列前 n项的平方根之和。 n的值通过形参传入。 例如,当 n=10时,程序的输出结果应为: 23 197745。 请改正 程序中的错误,使程序能输出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include *found* fun(int n) double sum, s0, s1, s2, s; int k; sum=1 0; if(n #define N 16 typede
21、f struct char num10; int s; STRECj int fun(STREC *a, STREC*b) main() STREC sN=“GA05“, 85, “GA03“, 76, “GA02“, 69, “GA04“, 85, “GA01“, 91, “GA07“, 72, “GA08“, 64, “GA06“, 87, “GA015“, 85, “GA013“, 91, “GA012“, 64, “GA014“, 91, “GA011“, 91, “GA017“, 64, “GA018“, 64, “GA016“, 72; STREC hN; int i , n; F
22、ILE *out; n=fun(s, h); printf(“The d lowest score: n“, n); for(i=0; ifun(3, 1)-fun(2, 0),其返回值为 2。所以正确答案为选项 B。 26 【正确答案】 D 【试题解析】 本题考查字符常量的 4个知识点: 空格是一个字符常量,而且单引号中的空格不可以省略; 字符常量只能包含一个字符; 单引号中的大写字母和小写字母代表的是 不相同的字符常量; 所有的字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是 ASCII码值。 27 【正确答案】 B 【试题解析】 本题考查函数调用时的实参形式。这里有一个逗号运
23、算的考查,(a, b)的运算结果为 b,因而只有一个值,结合 func的调用形式,可以知道实参的个数只有 2个。 28 【正确答案】 D 【试题解析】 在程序中整型变量 n的初始值等于 2,整型变量 k的初始值等于1,在执行 while语句时,由于表达式 k的值大于 0为真,所以不再需要判断 n+是否为真, (k0n+)表达式的值为真。 !(k0n+)表达式的值为假,所以 while语句中的条件不满足,循环语句不会执行,变量 n的值也不会加 1,所在输出变量 k和 n的值是 1和 2。 29 【正确答案】 B 【试题解析】 本题考查对一维数组的赋值。选项 B中, y5说明数组中有 5个元素,但
24、却给它赋了 6个值,数组溢出所以是错误的。 30 【正确答案】 D 【试题解析】 本题考查通过指针引用数组元素。选项 A、 C没有这种引用形式;选项 B, (*a)+2与 *a+2相同,表示第一个元素的值加 2;选项 D, *(a+2)引用数 组的第 3个元素。 31 【正确答案】 A 【试题解析】 本题考查两个概念。 用单引号括起来的一个字符常量只能存放一个字符; C语言中没有字符串变量,只能用字符数组来存储字符串。选项 A中一个单引号内存放了若干个字符,是错误的;选项 B和选项 D中将一个字符串赋值给一个字符数组是允许的。 32 【正确答案】 A 【试题解析】 本题考查函数调用的参数传递。
25、通过函数 abe的执行,将字符串中的字母 a去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。 33 【正确答案】 A 【试题解 析】 本题考查的是取内容运算符 “*”和自加运算符 “+”的优先级问题。由于 “+”的优先级高于 “*”,所以题干中 *str+!=e,即 *(str+)!=e,当 str指向字符 e时, while循环的条件不成立,但 s仃已经进行了自加指向了字符 f,所以*str输出字符 f。 34 【正确答案】 A 【试题解析】 本题涉及字符数组和指针两个知识点: 在 C语言中,字符数组在存放字符串时会自动在末尾加上 0,所以题中数组 s仃有 11个元素; ptr指
26、向数组 str的首地址, ptr+10是指向 str10, *(ptr+10)是引用 str10的值 (即结束符 0)。 35 【正确答案】 B 【试题解析】 字符串比较不能用两个等号 (=)来进行比较,应使用 strcmp(s1,s2)函数来比较。 strcmp(s1, s2)函数的功能是:当字符串 s1和 s2相等时,返回值为 0,因此,当表达式 !strcmp(s1, s2)=1时,条件成立,执行后面的语句,输出they are Equal。 36 【正确答案】 C 【试题解析】 本题主要考查结构体变量的定义与初始化。题目中定义了 complex类型的结构体变量 data1和 data2
27、,并对 data1进行了初始化。可以用一个结构体变量的成员对另一个结构体变量的成员赋值。 37 【正确答案】 B 【试题解析】 本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函数 prt( a, b, &c);,此函数中的输出语句 printf(“ d, d, d n“,+*x, +*y, *(z+);使得 a和 b的值均加 1,而 *(z+)由于先执行 z+所以 c的值不变;第二次调用函数 prt(&a, &b, &c);使得 a和 b在上一次的基础上再各自 加 1(因为形参和实参进行的是地址传递 ),而 c的值仍不变。 38 【正确答案】 C 【试题解析】 本题主要考查联合体的
28、内存使用:联合体所占用的内存空间为最长的成员所占用的空间, int占 2个字节, char占 1个字节, float占 4个字节,所以arr所占的内存长度等于成员 c的长度; arr的地址和它的各成员的地址都是同一地址;不能直接对 arr赋值,即不能在定义 arr时对它初始化; arr也不可以作为函数参数。 39 【正确答案】 B 【试题解析】 本题主要考查按位与运算的知识点。按位与是对两个运算 量相应的位进行逻辑与, “ ”的规则和逻辑与 “ &”相同。 x=4的二进制为 00000100, y=5的二进制为 00000101, x&y=00000100,转化为十进制即为 4。 40 【正确
29、答案】 D 【试题解析】 本题考查的是数据文件的有关概念。文件由数据流的形式组成,可以按数据存放的形式分为二进制文件和文本文件, C语言既能读写文本文件,又能读写二进制文件。 二、程序填空题 41 【正确答案】 (1)next (2)t-data (3)t 【试题解析】 第一空: fun函数中的 循环 “while(t-next!=NULL)”目的是找到尾结点,利用结点变量 s和 t, s指向当前节点, t不断指向下一个结点,因此第一空处应该是 “t=t-next; ”。 第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点 t, t的数据是 t-data,因此第二空处应该为 “prin
30、tf(“ d“, t-data); “。 第三空:输出尾结点数据之后删除尾结点,使用 free,又因为尾结点是 t,因此第三空处应该为 “flee(t): ”。 三、程序修改题 42 【正确答案】 (1)double fun(int n) (2)return sum; 【试题解析】 (1)第一个错误标识下 fun函数的定义根据题干要返回前 n项的平方根之和,函数具有返回值,所以 “fun(int n)”应改为 “double fun(int n)”,其中double为双精度型变量。 (2)第二个标识符下返回平方根之和,根据 C语言语法每一句 C语言后面应该以“; ”为结尾,所以 “return sum”改为 “return sum; ”。 四、程序设计题 43 【正确答案】 int i, j=0, min=a0 s; for(i=0; iai s) j=0; bj+=ai; min=ai s; else if(min=ai s) bj+=ai; return j; 【试题解析】 (1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使用一个 for循环把所有的成绩进行比较,找出最低的分数来。 (2)找出所有与最低分数相等的学生,并将最低分数的人数累加。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1