1、国家二级( C语言)机试模拟试卷 17及答案与解析 一、选择题 1 数据结构主要研究的是数据的逻辑结构、数据的运算和 ( )。 ( A)数据的方法 ( B)数据的存储结构 ( C)数据的对象 ( D)数据的逻辑存储 2 一棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的结果是 ( )。 ( A) DBACEF ( B) CBEFDA ( C) FDAEBC ( D) DFABEC 3 在数据处理中,其处理的最小单位是 ( )。 ( A)数据 ( B)数据项 ( C)数据结构 ( D)数据元素 4 在数据库系统的内部结构体系中,索引属于 ( )。 ( A)模式
2、 ( B)内模式 ( C)外模式 ( D)概念模式 5 以下 ( )不属于对象的基本特征。 ( A)继承性 ( B)封装性 ( C)分类性 ( D)多态性 6 数据库系统的核心是 ( )。 ( A)数据模型 ( B)软件开发 ( C)数据库设计 ( D)数据库管理系统 7 开发软件所需高成本和产品的低质 量之间有着尖锐的矛盾,这种现象称做 ( )。 ( A)软件矛盾 ( B)软件危机 ( C)软件藕合 ( D)软件产生 8 关系模型允许定义 3类数据约束,下列不属于数据约束的是 ( )。 ( A)实体完整性约束 ( B)参照完整性约束 ( C)属性完整性约束 ( D)用户自定义的完整性约束 9
3、 关系表中的每一行记录称为一个 ( )。 ( A)字段 ( B)元组 ( C)属性 ( D)关键码 10 在数据库管理技术的发展中,数据独立性最高的是 ( )。 ( A)人工管理 ( B)文件系统 ( C)数据库系统 ( D)数据模型 11 以下叙述错误的是 ( )。 ( A) C语言区分大小写 ( B) C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改 ( C)整数和实数都能用 C语言准确无误地表示出来 ( D)在 C程序中,正整数可以用十进制、八进制和十六进制的形式来表示 12 有以下程序段: int i, n; for(i=0; i void main()
4、int a=1, b=0; printf(“ d, “, b=(a+)+(a+); printf(“ dn“, a+b); 程序运行后的输 出结果是 ( )。 ( A) 4, 6 ( B) 2, 5 ( C) 3, 5 ( D) 2, 6 18 若有代数式 , (其中 e仅代表自然对数的底数,不是变量 ),则下列能够正确表示该代数式的 C语言表达式是 ( )。 ( A) sqrt(abs(nx+ex) ( B) sqrt(fabs(pow(n, x)+pow(x, e) ( C) sqrt(fabs(pow(n, x)+exp(x) ( D) sqrt(fabs(pow(x, n)+exp(x
5、) 19 设有定义: imk=0;,下列选项的 4个表 达式中与其他 3个表达式的值不相同的是 ( )。 ( A) k+ ( B) k+=1 ( C) #NAME? ( D) k+1 20 有下列程序,其中 u表示按无符号整数输出。 main() unsigned int x=0xFFFF; /*x的初值为十六进制数 */ printf(“ un“, x); 程序运行后的输出结果是 ( )。 ( A) -1 ( B) 65535 ( C) 32767 ( D) 0xFFFF 21 下面程序的运行结果是 ( )。 for(i=3; i99) s=3; else if(num9) s=2: els
6、e s=1; i=num/100; j=(num-i*1 00)/10; k=(num-i*100-j*10); switch(s) case 3: printf(“ d d dn“, k,j, i); break; case 2: pfintf(“ d dn“, ) ; case 1: printf(“ dn“, k); ( A) 123 ( B) 1, 2, 3 ( C) 321 ( D) 3, 2 1 24 有以下程序 # include #include structA int a; char b10; double c; ; struct A f(structAt); main()
7、stmct A a=1001,“ZhangDa“, 1098 0; a=f(a); printf(“ d, s, 6 1 fn“, a a, a b, a c); struct A f(struct A t) t a=1002; strcpy(t b, “WangPeng“); t c=1 220 0; return t; 程序 运行后的输出结果是 ( )。 ( A) 1001, ZhangDa, 1098 0 ( B) 1 002, ZhangDa, 1 220 0 ( C) 1001, WangPeng, 1098 0 ( D) 1002, WangPeng, 1220 0 25 判断 c
8、har型变量 c1是否为小写字母的正确表达式为 ( )。 ( A) a: a)&(c1=c1 |(z=a)&(c1m ( B) *(p+)-m ( C) (*p) m ( D) *(+p)-m 29 下列程序的运行结果是 ( )。 #include void sub(int*s, int*y) static int m=4; *y=s0; m+: void main() int a=1, 2, 3, 4, 5, k; int x; printf(“11“); for(k=0; k int fun(int x, int Y) if(x!=y)return(y); else return(x+y)
9、/2); main() int a=4, b=5, c=6; printf(“ dn“, fun(2*a, fun(b, c); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 6 ( C) 8 ( D) 12 31 C语言中规定,程序中各函数之间 ( )。 ( A)既允许直接递归调用也允许间接递归调用 ( B)不允许直接递 归调用也不允许间接递归调用 ( C)允许直接递归调用不允许间接递归调用 ( D)不允许直接递归调用允许间接递归调用 32 以下程序的输出结果是 ( )。 #include main() int a33=0, 1, 2,0, 1, 2, 0, 1, 2, i,j,
10、 s=1; for(i=0; i #define X 5+6 main() int a=2, c; C=x*2; printf(“ d“, c); 程序运行后的输出结果是 ( )。 ( A) 17 ( B) 22 ( C) 16 ( D) 11 34 当用 “#define F 37 5f”定义后,下列叙述正确的是 ( )。 ( A) F是 float型数 ( B) F是 char型数 ( C) F无类型 ( D) F是字符串 35 若有定义语句: int a=3, b=2, c=1;,以下选项中错误的赋值表达式是 ( )。 ( A) a=(b=4)=3; ( B) a=b=c+1; ( C)
11、 a=(b=4)+c; ( D) a=1+(b=c: 4); 36 以下说法正确的是 ( )。 ( A)宏定义是 C语句,要在行末加分号 ( B)可以使用 #undefine提前结束宏名的使用 ( C)在进行宏定义时,宏定义不能嵌 套 ( D)双引号中出现的宏名也要进行替换 37 下面程序的输出结果是 ( )。 typedef unionlong x1; int y4; char z10; M; M t; main() printf(“ dn“, sizeof(t); ( A) 32 ( B) 26 ( C) 10 ( D) 4 38 以下程序中函数 sort的功能是对 a数组中的数据进行由大
12、到小的排序 void sort(int a, int n) int i,j, t; for(i=0; i #include #include int fun(char *s) char *lp, *rp; /*found*/ ip=_1_; rp=s+strlen(s)一 1; while(toupper(*lp)=toupper (*rp)&(lp /*found*/ void fun(char*s, int a, int b) while(*s) if(*s=A&*s=a&*s #include void fun(char*s, char t) msin() char s100, t100
13、; void NONO(); printf(“nPlease enter string S: “); s canf(“ s“, s); fun(s, t); printf(“nThe result is: sn“, t); NONO(); void NONO() /*本函数用于打开文件,输入数据 ,调用函 数,输出数据,关闭文件。 */ char s100, t100; FILE*rf, *wf; int i ; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0 ; i99,所以 s=3, i=3, i=2, k=1。因为 s
14、=3,所以执行 case 3,输出 k, i, i的值,然后通过 break结束程序。 24 【正确答案】 D 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 25 【正确答案】 D 【试题解析】 C语言规定,字符常量在程序中要用单引号括起来。首先判断 c1是否为小写字母的主要条件 c1=a和 c1=z是逻辑与关系,其次选项 A)的这种形式 C语言中没有,所以选项 D)正确。 26 【正确答案】 B 【试题解析】 本题考查标准输入输出函数和循环语句。 gets(s)函
15、数的作用是将输入的字符读入字符串 s,直到遇到回车。而 scanf()函数接收字符串 时的结束标志为回车或者空格。因此选项 B)不能,选项 C)和选项 D)中按字符逐个读入字符串 s中,直到读入的字符是换行符为止,因此正确。 27 【正确答案】 D 【试题解析】 本题考查几个循环语句的关系。 dowhile 语句、 while语句、 for语句所实现的循环可以相互替代; dowhile 语句和 while语句的区别是 dowhile 语句至少执行一次,再判断循环条件, while语句是先判断条件再执行。 28 【正确答案】 D 【试题解析】 本题考查如何通过指针引用数组元素 。首先定义了一个结
16、构体,然后定义了一个结构体变量 s3,并赋了初值。在主程序中,定义了一个指向结构体变量 s的指针 p,要使表达式的值为 5,就应该引用 s1 m的值,使指针 p指向s1, +p可以实现将 p指针加 1,指向 s1。 29 【正确答案】 A 【试题解析】 本题中 sub(int*s, int*y)函数的参数是两个指针型变量,在函数体内将数组 s的第一个元素赋给 y。主程序内,首先定义了一维数组并赋初值,然后通过 for循环, 5次调用 sub(a,&x)函数,每一次调用都是将数组 a的第一个元 素 1赋给 x,并输出。 30 【正确答案】 B 【试题解析】 fun(b,c)即 fun(5,6),
17、 5!=6,所以返回 6; fun(2*a, 6)即 *fun(8,6),8!=6,所以返回 6。 31 【正确答案】 A 【试题解析】 本题考查函数调用的基本概念。在函数调用时,只要符合函数的使用,程序中的各个函数间既可以直接调用其他函数,也可以递归调用其自身。 32 【正确答案】 B 【试题解析】 当外层循环为 i时,内层循环 j只能取 j=i,所以 s+: aiajD,其实就是 s+=aiaii,当 i=0时, S=S+a0a00=s+a00=1,当 i=1时,S=S十 a1a11=s+a11=1+1=2,当 i=2时,s=s+a2a22=s+a22=2+2=4。 33 【正确答案】 A
18、 【试题解析】 define语句仅进行简单替换,因此 c=5+6*2=17。 34 【正确答案】 D 【试题解析】 字符替换定义格式为: #define标识符 (形参表 )形参表达式。题中 F是代表形参表达式的标识符 (字符串 )。 35 【正确答案】 A 【试题解析】 这道题目主要考察赋值表达式,对于赋值表达式来说,赋值号 “=”的左边一定为变量名,右边为一个 C语言合法的表达式。 36 【正确答案】 B 【试题解析】 本题考查宏的使用规则: 字符替换格式: #define标识符字符串,行末不加分号; 双引号中出现的宏名不替换; 如果提前结束宏名的使用,程序中可以使用 #undefine;
19、在进行宏定义时,宏定义能层层置换,能够嵌套。 37 【正确答案】 C 【试题解析】 “联合体 ”所占用的内存空间为最长的成员所占用的空间。题中联合体的 z10成员是联合体中占空间最长的成员。 38 【正确答案】 C 【试题解析】 程序中 son函数的功能是对数组中的数据进行从大到小的排序。主函数 main中调用函数 son(&aa3, 5);,使得数组 aa中从第 4个元素开始的 5个元素进行从大到小的排序,数组 aa中的元素变为: 1, 2, 3, 8, 7, 6, 5, 4,9, 10。并输出这些元素。 39 【正确答案】 C 【试题解析】 本题主要考查按位 或运算, x=061(二进制为
20、 00110001), y=016(二进制为 000011 10),进行或运算后结果为 00111111。 40 【正确答案】 A 【试题解析】 位置指针重返文件头函数 rewind()的调用形式为: rewind(fp)。其中, “fp”是指向文件的文件型指针。 rewind(fp)的功能是:使 fp指定的文件的位置指针重新定位到文件的开始位置。 二、程序填空题 41 【正确答案】 (1)s (2)- (3)return 0 【试题解析】 第一空: “rp=s+strlen(s)-1; ”可知 rp指向最后 *个元素,因此 lp是指向第一个元素,因此第一空应为 “s”。 第二空: “lp+;
21、 r1)_2 _; ”lp往后移动, rp应该往前移动,故第二空处应为 “-”。 第三空: “if(lprp)”成立 兑明 lp和 rp比较没有比较到字符串的最中间的字符,也就是说 s字符串不是回文,因此第三空处的应为 “return 0”。 三、程序修改题 42 【正确答案】 (1)void fun(char *s, int *a, int *b) (2)*a=*a+1; (3)*b=*b+1; 【试题解析】 (1)第一个标识下面 “void fun(char*s, int a, int b)”,因为主函数调用 fun函数第二个、第三个参数传送的是参数地址,因此定义的 fun函数中的第二个、
22、第三个参数应是指针型,应将 “void fun(char*s, int a, int b)”改为 “void fun f char*s, int*a, int )”。 (2)第二个和第三个标识下面,因为 a、 b都是指针型,将 a、 b中的内容加 1,应为 “*a=*a+1; ”和 “*b=*b+1; ”。 四、程序设计题 43 【正确答案】 int i, j=0 ; for(i=0; istrlen(s); i+=2) if(si 2=0)tj+=si; tj=0; 【试题解析】 (1)判断一个字符串中的某一字符下标 i是否为偶数,可用 “i2=0”来判断;也可以从下标 0开始,每次增 2。判断字符中的 ASCII码值是否为偶数,则可用 “si 2=0”来判定。 (2)对串 s中下标为偶数的字符进行考查。满足 ASCII码值是偶数条件的字符就顺序放在新串 s中,否则就 不存放。 (3)所有字符处理完后,记得在新串 s的末尾加上结束符 “0”。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1