1、国家二级( C语言)机试模拟试卷 122及答案与解析 一、选择题 1 线性表常采用的两种存储结构是 ( )。 ( A)散列方法和索引方式 ( B)链表存储结构和数组 ( C)顺序存储结构和链式存储结构 ( D)线性存储结构和非线性存储结构 2 软件需求分析阶段的工作,可以分为四个方面:需求获取、编写需求规格说明书、需求评审和 ( )。 ( A)阶段性报告 ( B)需求分析 ( C)需求总结 ( D)都不正确 3 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是 ( )。 ( A)需求分析 ( B)详细设计 ( C)软件设计 ( D)概要设计 4 对建立良好的程序设计风
2、格,下面描述正确的是 ( )。 ( A)程序应简单、清晰、可读性好 ( B)符号名的命名只要符合语法 ( C)充分考虑程序的执行效率 ( D)程序的注释可有可无 5 下列工具中,不属于结构化分析的常用工具的是 ( )。 ( A)数据流图 ( B)数据字典 ( C)判定树 ( D) NS图 6 在软件生产过程中,需求信息的来源是 ( )。 ( A)程序员 ( B)项目经理 ( C)设计人员 ( D)软件用户 7 对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B)交运算 ( C)差运算 ( D)积运算 8 设有关
3、键码序列 (Q, G, M, Z, A, N, B, P, X, H, Y, S, T, L, K, E),采用堆排序法进行排序,经过初始建堆后关键码值 B在序列中的序号是 ( )。 ( A) 1 ( B) 3 ( C) 7 ( D) 9 9 数据库的故障恢复一般是由 ( )来执行恢复。 ( A)电脑用户 ( B) 数据库恢复机制 ( C)数据库管理员 ( D)系统普通用户 10 下列选项中,不属于数据模型所描述的内容的是 ( )。 ( A)数据类型 ( B)数据操作 ( C)数据结构 ( D)数据约束 11 程序设计的任务包括 ( )。 ( A)编写程序代码并上机调试 ( B)确定所用数据结
4、构 ( C)确定所用算法 ( D)以上选项均正确 12 下列合法的标识符是 ( )。 ( A) 123 ( B) #256 ( C) a 55 ( D) abhj1_2_3 13 以下程序的运行结果是 ( )。 #include stdio h main() int a=3, b=4, c=8, d=4, m=1, n=3; printf(“ d n“, (m=a b)&(n=c d); ( A) 0 ( B) 1 ( C) 2 ( D) 3 14 以下选项中,能用作数据常量的是 ( )。 ( A) o18 ( B) o11 ( C) 0 8e2 5 ( D) 25L 15 有下列程序: ma
5、in() int m, n, p; scanf(“m= dn= dp= d“, &m, &n, &p); printf(“ d d d n“, m, n, p); 若想从键盘上输入数据,使变量 m中的值为 123, n中的值为 456, p中的值为789,则正确的输入是 ( ) ( A) m=123n=456p=789 ( B) m=123 n=456 p=789 ( C) m=123, n=456, p=789 ( D) 123 456 789 16 以下关于 long、 int和 short类型数据占用内存大小的叙述中正确的是 ( )。 ( A)均占 4个字节 ( B)根据数据的大小来决定
6、所占内存的字节数 ( C)由用户自己定义 ( D)由 C语言编译系统决定 17 有以下程序 #include stdio h main() int k=5, n=0; while(k 0) switch(k) default: break; case 1 : n+=k: case 2 : case 3 : n+=k: k-; printf(“ d n“, n); 程序运行后的输出结果是 ( A) 0 ( B) 4 ( C) 6 ( D) 7 18 有以下程序段 int j; float y; char name50; scanf(“ 2d f s“, &j, &y, name); 当执行上述程
7、序段,从键盘上输入 55566 7777abc后, y的值为 ( )。 ( A) 55566 0 ( B) 566 0 ( C) 7777 0 ( D) 566777 0 19 若变量己正确定义 ,有以下程序段: i=0; do printf(“ d, “, i); while(i+); printf(“ d n“, i); 其输出结果是 ( )。 ( A) 0, 0 ( B) 0, 1 ( C) 1, 1 ( D)程序进入无限循环 20 设有条件表达式: (EXP)?i+; j-,则以下表达式中 (EXP)完全等价的是 ( )。 ( A) (EXP=0) ( B) (EXP!=0) ( C)
8、 (EXP=1) ( D) (EXP!=1) 21 有以下程序 #include stdio h main() int y=9; for(; y 0; y-) if(y 3=0)printf(“ d“, -y); 程序的运行结果是 ( )。 ( A) 741 ( B) 963 ( C) 852 ( D) 875421 22 若要求从键盘读入含有空格字符的字符串,应使用函数 ( )。 ( A) getc() ( B) gets() ( C) getchar() ( D) scanf() 23 当 a=4, b=5, c=7, d=6时,执行下面一 段程序: if(a b) if(c d)x=1;
9、 else if(a c) if(b c)x=2: else x=3; else x=4: else x=5; 程序执行后, x的值为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 24 在 C语言程序中,以下说法正确的是 ( )。 ( A)函数的定义和函数的调用均不可以嵌套 ( B)函数的定义不可嵌套,但函数的调用可以 嵌套 ( C)函数的定义可以嵌套,但函数的调用不可以嵌套 ( D)函数的定义和函数的调用均可以嵌套 25 以下程序运行后的输出结果是 ( )。 #include stdio h main() void reverse(int a, int n) int b
10、10=10, 9, 8, 7, 6, 5, 4, 3, 2,1; int i, s=0; int i, t; reverse(b, 10); for(i=0; i n 2; i+) for(i=0; i 3; i+)s+=bi; t=ai; ai=an 1 i; an 1 i=t; printf(“ d n“, s); ( A) 27 ( B) 6 ( C) 25 ( D) 30 26 设 y为整型变量, a=6, a的地址为 E2000, b=14, b的地址为 E2001;执行语句 b=&a; ( A) E2000 ( B) E2001 ( C) 6 ( D) 14 27 若有以下程序段:
11、 struct st main() int n; struct st*p; int*m; p=s; ; int a=2, b=3, c=5; struct st s3=(10 1, &a, 102, &c, 103, &b; 则以下表达式中值为 5的是 ( )。 ( A) (*p) m ( B) *(p+1) m ( C) *(p+) n ( D) (p+) (*m) 28 在下列叙述中,错误的是 ( )。 ( A) C语言中,二维数组或多维数组是按行存放的 ( B)赋值表达式 b12=a23是正确的 ( C) char a1; a0=A与 int a1; a0=A等价 ( D)数组名后的方括
12、号内可以为常量表达式,也可以为变量 29 若已包括头文件 stdio h和 string h,运行下而程序的输出结果是( )。 char s110=“12345“, s210=“089“, S3=“67“; strcat(strcpy(s1, s2), s3); puts(s1); ( A) 08967 ( B) 0894567 ( C) 089567 ( D) 089567 30 下列说法正确的是 ( )。 ( A) auto和 register将声明的对象说明为自动存储类对象,这些对象可用在函数中或函数外 ( B)将变量其定义为 static类型,则其初值默认为随机值 ( C) typed
13、ef说明符并不会为对象预留存留空间 ( D)如果一个对象被声明为 register,则对它应用一无运算符 &,意在取得其存储的地址 31 以下有关宏的描述不正确的是 ( )。 ( A)宏定义不做晤法检查 ( B)双引号中出现的宏名不进行替换 ( C)宏名无类型 ( D)宏名必须用大写字母表示 32 以下程序段的输出结果为 ( )。 static char a=“programme“; char *p; p=a; for(p=a; p a+8; p+=2) putchar(*p); ( A) programme ( B) porm ( C)有语法错误 ( D) prog 33 下列关于 C语言数
14、据文件的叙述中正确的是 ( )。 ( A)文件由 ASCII码字符序列组成, C语言只能读写文本文件 ( B)文件由二进制数据序列组成, C语言只能读写二进制文件 ( C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 ( D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 34 已知 char*s,下面正确的语句是 ( )。 ( A) s=“ABCDEF“; ( B) *s=“ABCDEF“; ( C) *s=“ABCDEF“; ( D) *s=A; 35 下列程序的运行结果是 ( )。 #include stdio h void main() void f
15、un(int*s, int*p) int a=2, 3, 4, 5, k, x; static int t=3; for(k=0; k 4; k+) *p=st; fun(a, &x); t-; printf(“ d, ”, x); ( A) 5, 4, 3, 2, ( B) 2, 3, 4, 5, ( C) 2, 2, 2, 2, ( D) 5, 5, 5, 5, 36 以下函数 findmin拟实现在数组中查找最小值并作为函数值返回,但程序中有错导致不能实现预定功能 #define MAX 2147483647 int findmin(int x, int n) int i,min; mi
16、n=MAX; for(i=0; i n; i+) if(min xi) min=xi; return min; 造成错误的原因是 ( )。 ( A)定义语句 int i, min;中 min未赋初值 ( B)赋值语句 min=MAN;中,不应给 min赋 MAX值 ( C)语句 if(min Xi)min=Xi;中判断条件设置错误 ( D)赋值语句 min=MAX;放错了位置 37 以下程序的输出结果是 ( )。 #include stdio h main() struct st p=aa; int x; int*y; *p; printf(“ d n“, +(p x); int dt4=1,
17、 2, 3, 4; struct st aa4=2, &dt0, 3, &dt0, 4, &dt0, 5, &dt0, ; ( A) 1 ( B) 2 ( C) 3 ( D) 4 38 有以下定义和语句: struct students int num; char name20; char c; struct int gradel; int grade2; s; ; struct students w *pw; *pw=w: 下列赋值语句不正确的是 ( )。 ( A) w num=1002; ( B) w gradel=85; ( C) pw num=1002; ( D) w s grade2
18、=85; 39 设有以下语句: char x=3, y=6, z; z=xy 2; 则 z的二进制值是 ( )。 ( A) 00010100 ( B) 00011011 ( C) 00011100 ( D) 00011000 40 有以下程序: #include stdio h main() FILE*pf; char*s1=“China“,*s2=“Beijing“; pf=fopen(“abc dat“, “wb+“); fwrite(s2, 7, 1, pf); rewind(pf); *文件位置指针回到文件开头 * fwrite(s1, 5, 1, pf); fclose(pf); 以
19、上程序执行后 abc dat文件的内容是 ( )。 ( A) China ( B) Chinang ( C) ChinaBeijing ( D) BeijingChina 二、程序填空题 41 给定程序中,函数 fun的功能是:计算下式前 n项的和作为函数值返回。例如,当形参 n的值为 10时,函数返回: 0 204491。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANK1 C中。不得增行或删行,也不得更改程序的结构 ! #include stdio h double fun(int n) int i,k; double s,
20、 t; s=0; *found* k=_(1); for(i=1; i =n; i+) *found* t=_(2); s=s+k*(2*i一 1)*(2*i+1) (t*t); *found* k=k*_(3); return s; main() int n= 1: while(n 0) printf(“Please input(n 0): “); scanf(“ d“, &n); printf(“ nThe result is: f n“, fun(n); 三、程序修改题 42 给定程序 MODI1 C中函数 fun的功能是:从整数 1到 55之间,选出能被 3整除、且有一位上的数是 5的
21、那些数,并把这些数放在 b所指的数组中,这些数的个数作为函数值返回。规定,函数中 a1放个位数, a2放十位数。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 #include stdio h int fun(int*b) int k, a1, a2, i=0; for(k=10; k =55; k+) *found* a2=k 10: a1=k a2*10; if(k 3=0&a2=5)(k 3=0&a1=5) bi=k; i+; *found* return k; main() int a100, k, m; m=fun(a
22、); printf(“The result is: n“); for(k=0; k m; k+)printf(“ 4d“, ak); printf(“ n“); 四、程序设计题 43 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组S中,请编写函数 fun,它的功能是:把分数最低的学生数据放在 b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注意:部分源程序在文件 PROG1 C文件中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include stdio h #defiDe N 16
23、 typedef struct char num10; int s; STREC; 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,
24、 n; FILE*out; n=fun(s, h); printf(“The d lowest score: n“, n); for(i=0; i n; i+) printf(“ s 4d n“,hi num, hi s); printf(“ n“); out=fopen(“out dat“, “W“); fprintf(out, “ d n“, n); for(i=0; i n; i+) fprintf(out, “ 4d n“, hi s); fclose(out); 国家二级( C语言)机试模拟试卷 122答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 线性表的存储通常要用两
25、种存储结构:顺序存储结构和链式存储结构。 2 【正确答案】 B 【试题解析】 软件需求分析阶段的工作,可以概括为四个方面:需求获取、需求分析、编写需求规格说明书和需求评审。需 求获取的日的是确定对同标系统的各方面需求。涉及到的主要任务是建立获取用户需求的方法框架,并支持和监控需求获取的过程。需求分析是对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型。编写需求规格说明书作为需求分析的阶段成果,可以为朋户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。需求评审是对需求分析阶段的工作进行复审,验证需求文档的一致性、可行性
26、、完整性和有效性。 3 【正确答案】 A 【试题解析】 软件生命周期的主要活动 阶段为:可行性研究和计划制定、需求分析、软件设计、软件实现、软件测试、运行和维护。其中需求分析是对开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格说明书及初步的用户手册,提交评审。 4 【正确答案】 A 【试题解析】 程序设计应该简单易懂,语句结构应该简单直接,不应该为提高效率而把语句复杂化。 5 【正确答案】 D 【试题解析】 结构化分析的常用工具有数据流图、数据字典、判定树和判定表。 6 【正确答案】 D 【试题解析】 软件需求是指用户对目 标软件系统在功能、性能、设计约束等方
27、面的要求,是由用户提出的。 7 【正确答案】 A 【试题解析】 关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。 8 【正确答案】 B 【试题解析】 建堆的算法:首先将要排序的所有关键码放到一棵完全二叉树的各个结点中 (这时的二叉树不具备堆的特性 ),然后,从 i=n 2(n为结点的个数 )的结点 Ki开始,逐步把以 Kn 2, Kn 2 1, Kn 2 2, 为根的子树成堆,直到以K1为根的树排成堆,就完成了 建堆过程。此题中, n=16, i=16 2=8,即从第 8个结点开始,建堆完成后如下图: 所以经过初始建堆后关键码值 B在序列中的序号是
28、 3。 9 【正确答案】 C 【试题解析】 数据库一旦发生故障,需要及时进行故障恢复,并由数据库管理员负责执行故障恢复。 10 【正确答案】 A 【试题解析】 数据模型描述的内容包含数据结构、数据操作和数据约束。 11 【正确答案】 D 【试题解析】 程序设计是一门技术,需要相应的理论、技术、方法和工具来支持。程序设计的任务包括选项 A)、 B)、 C)等方商。 12 【正确答案】 D 【试题解析】 C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。 “#”、 “.”不允许出现在标识符中。 13 【正确答案】 A 【试题解析】 逻辑与 (&)运算符的功能是:
29、当 “&”运算符两边的运算对象均为1时,整个表达式的值为 1,否则为 0。因为 a=3 b=4,即 m=0,所以整个表达式的值为 0。 14 【正确答案】 D 【试题解析】 本题考查常量定义。数据常量可有 10进制、 8进制、 16进制、指数法等, 8进制数字 为 07,第一个字符为 0,而不是 o,因此选项 A)和 B)错误。为指数法时,指数部分须为整形,因此选项 C)错误,选项 D)中数字后加入 L是说明此变量为长整型。 15 【正确答案】 A 【试题解析】 scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,存输入数据时,按照一一对应的位置原样输入这些字符。 16
30、【正确答案】 D 【试题解析】 不同的编译系统或计算机系统对几类整型数所占用的字节数有不同的规定。 long、 int和 short类型数据占用内存大小是由选择何种 C编译系统 决定的。 17 【正确答案】 D 【试题解析】 因为没有 break语句,当 k=2的时候,会顺序执行两条语句, k=1的时候,会顺序执行 3条语句。 18 【正确答案】 B 【试题解析】 因为在输入格式控制符中指定变量 i的输入格式控制符为 “ 2d”,即变量 i所占的宽度为 2,所以变量 j只接收输入数据的前两位,从第 3位开始直到空格之间的输入整数都会被保存到变量 y中,因为 y为浮点型数据,所以输出结果为选项
31、B)。 19 【正确答案】 B 【试题解析】 dowhile 循环的执行过程如下: 执 行 do后面的循环体中的语句。 计算 while后一对圆括号中表达式的值。当值为非 0时,转去执行步骤 ;当值为 0时,执行步骤 。 退出 dowhile 循环。对于本题变量 i的初始值等于“0”,接着执行 do后面的循环体中的语句,输出变量 i的值 0。再判断 while后面括号中表达式 i+的值,其值为 0,所以循环结束。此时变量 i的值经过自加已经变为 1,所以再次输出 i的值 “1”。 20 【正确答案】 B 【试题解析】 条件表达式的形式为: “表达式 1?表达式 2:表达式 3”。其含义为:当
32、“表达式 1”的值为非零时,求出 “表达式 2”的值,此时 “表达式 2”的值就是整个条件表达式的值;当 “表达式 1”的值为零时,求出 “表达式 3”的值,此时 “表达式 3”的值就是整个条件表达式的值。对于本题来说,当表达式 EXP为非 0值时条件成立,即执行语句 i+;当 EXP等于 0时,执行语句 i-;这等同于条件表达式 “(EXP!=0)?i+; j+”。 21 【正确答案】 C 【试题解析】 y的初值为 9,所以在 for循环中,当 y的值为 9、 6或 3时, if语句的条件成立,执行输出语句,输出表达式 -y的值。因为自减符号在 y的前面,所以首先 y自 减 1,然后再输出
33、y的值,故输出结果为 8 5 2。 22 【正确答案】 B 【试题解析】 scanf()语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; getchar()函数用于输入字符,其调用形式为:ch=getchar(), getchan()函数从终端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入Enter键时,读入才开始执行。 gets()函数的调用形式为: gets(str adr),其 中 str adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。
34、 gets函数用来从终端键盘读入字符串 (包括空格符 ),直到读入一个换行符为止。 getc()函数的调用形式为: ch=getc(pf)其中 pf是文件指针。函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。 23 【正确答案】 B 【试题解析】 本题考查 ifelse语句。第一个 if语句,先判断条件, a b成立,则执行下面的语句;第二个 if语句,先判断条件, c d不成立,则执行其对应的else语句 ;第三个 if语句,先判断条件, a c成立,执行其后语句;第四个 if语句,先判断条件, b c成立,执行语句 x=2。 24 【正确答案】 B 【试题解析】 本题考
35、查函数调用的基本概念。因为函数的结果是一个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以嵌套。 25 【正确答案】 B 【试题解析】 本题考查函数调用时的参数传递。函数 reverse将数组 b进行了逆置,此时 b10=10, 9, 8, 7, 6, 5, 4, 3, 2, 1,后面 for语句的功能是将 b中的后 3个数累 加,并将结果放在 s中,最后将 s输出,结果 s=1+2+3=6。 26 【正确答案】 D 【试题解析】 &是取地址运算符, y=&a是将 a的地址赋给 y,而 a的地址没有发生变化,因此 y的值为 E2000。 27 【正确答案】 B 【试
36、题解析】 本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后定义了一个结构体变量 s3,并赋了初值。在主程序中,定义了一个指向结构体变量 s的指针 p,要使表达式的值为 5,就应该引用 s1.m的值,使指针 p指向s1, +p可以实现将 p指针加 1,指向 s1。 28 【正确答案】 D 【试题解析】 本题考查数组的 4个知识点: C语言中,二维数组或多维数组元素排列的顺序是按行存放: 不同数组的元素之间可以相互赋值: 字符型数组中存放的是字符, int型数组中存放的是字符对应的 ASCII码值,虽然在计算机内部字符常量都是作为整型量来处理的,其对应的整数值就是 ASCII码值,但两
37、者并不完全等价; 数组名后的方括号内可以为常量,也可以为常量表达式,但不可以为变量。 29 【正确答案】 A 【试题解析】 本题考查字符串复制函数和字符串连接函数:字符串 复制函数strcpy(s1, s2)是把 s2的字符串复制给 s1,执行后 s1=089;字符串连接函数strcat(s1, s2),功能是把 s2字符串连接到 s1字符串的末尾,执行后 s1=08967。 30 【正确答案】 C 【试题解析】 这种声明也具有定义的作用,并将预留存储空间。 register说明的声明等价于 auto说明的声明,所不同的是, register暗示了声明的对象将被频繁地访问,将尽可能存储在寄存器
38、中。如果一个对象被声明为 register,则将不能对它应用一元运算符 &,声明为 register但实际按照 auto类型处理的对象的地址进行计算是非法的。 static将声明的对象说明为静态存储类。这种对象可以用在函数内部或者函数外部。在函数内部,该说明符将引起存储空间的分配,具有定义的作用。在函数外部,该说明符将引起声明对象为具有内部链接。另外,若将其定义为 static类型,则其初值默认为 0。 函数内部的 extern声明表明,被声明的对象的存储空间定义在其他地方。在函数外部,说明声明的对象具有外部链接。 typedef说明符并不会为对象预留存留空间。 31 【正确答案】 D 【试题
39、解析】 本 题考查宏的使用规则: 字符替换格式: #define标识符字符串,标识符称为宏名,无类型; 双引号中出现的宏名不替换; 宏名的定义通常用大写字母,但不是必须用大写; 宏定义不是赋值语句,不做语法检查。 32 【正确答案】 B 【试题解析】 本程序首先定义了静态字符数组 a,然后将指针 p指向数组 a的首地址,第一次 for循环, p=a, p指向数组的第一个元素, *p是取指针 p所指地址的内容,输出 p;第二次 for循环, p=p+2,则 p指向数组的第三个元素, *p是取指针 p所指地址的内容,输出 o;第三次 for循环, p=p+2,则 p指向数组的第 5个元素, *p是
40、取指针 p所指地址的内容,输出 r;第四次 for循环, p=p+2,则 p指向数组的第 7个元素, *p是取指针 p所指地址的内容,输出 m;结束循环。 33 【正确答案】 D 【试题解析】 本题考查数据文件的基本概念。 文件由数据流形式组成,可以按数据的存放形式分为二进制文件和文本文件; C语言既能读写文本文件,又可以读写二进制文件。 34 【正确答案】 C 【试题解析】 “s”是代表数组首地址的地址常量,不是变量, “=”左边不能出现常量,因此 s=“ABCDEF“语法错误。 “*s”和 “s”一样; “*s”是指变量地址,不能给其赋字符串。 35 【正确答案】 A 【试题解析】 分 f
41、un函数程序段,可知 fun函数要实现的功能是将 s中第 (t+1)个元素前面 (含该元素 )的元素逆置赋给数组 p。由于 fun函数定义了静态变量 t=3,因此,在主函数中调用函数 fun(a, &x)时,就是将数组 a中前 4个元素逆置赋给数组 x,最后输出 x数组。 36 【正确答案】 D 【试题解析】 在 C语言中,一个整型变量占用 4个字节的内存单元,并按整型数的存储方式存放数据,允 许存放的数值范围是: 2147483648 2147483647。所以在这个题目中定义的宏变量 MAX的值就是整数范围内最大的数值,因而对于任意一个整数来说,其值都比 MAX小,而判断最小值,是当找到的
42、数比 min小时,才交换。 37 【正确答案】 C 【试题解析】 程序首先将指针 p指向结构体数组 aa的首地址,通过 p-X引用了结构体数组 aa0的第一个成员 2; +(p x)是将 p x的值加 1,所以输出结果为 3。 38 【正确答案】 B 【试题解析】 本题主要考查的是结构体变量的嵌套定义 ,也就是说一个结构体变量也可以是一个结构体。在本题中 student这个结构体中包含了结构体 s。所以对结构体变量 w中 gradel成员的引用是 w s gradel或 w s gradel。 39 【正确答案】 B 【试题解析】 本题考查的是位运算符的应用。 x和 y写成二进制表示分别为x=
43、00000011, y=00000110,由于左移位运算符 “ ”的优先级高于按位异或运算符 “ ”,左移两位后 y 2=00011000,此结果和 x按位异或后 x y2=00011011。 40 【正确答案】 B 【试题解析】 本题考查函数 fwrite的使用。函数 fwrite的调用形式为: int fwrite(char*pt, unsigned n, FILE*fp);其功能是把 pt所指向的 n*size个字节输出到 fp所指文件中,第二次调用该函数时,从文件的第一个位置开始写入,之前已有的会被覆盖掉,如果第二次写入的长度没有第一次的长,则后面短出的部分保留原样。 二、程序填空题
44、41 【正确答案】 (1)1 (2)2*i (3)( 1) 【试题解析】 函数 fun的功能是求级数和,观察可知,级数项有规律变化,可 以用循环来累加求和。 第一空:由 “s=s+k*(2*i 1)*(2*i+1) (t*t); ”可知 t*t表示的是级数项的分母, t=2*i, t=2, 4, 6 ,故 t的初始化值应为 1,因此第一空处应为 “1”。第二空:由第一空的分析可知,第二空处应为 “2*i”。第三空:由“s=s+k*(2*i 1)*(2*i+1) (t*t); ”可知, k是级数项的 ( 1)n 1部分,所以在循环中 k是每次都乘以一 1,故第三处应为 “(一 1)”。 三、程序
45、修改题 42 【正确答案】 (1)a2=k 10; (2)return i; 【试题解析】 本题中函数的功能是从整数 1到 55之间,选出能被 3整除且有一位上的数是 5的数。其中,涉及整数个位的截取,以及判断某范围内能被 3整除的判断条件表达式、循环。 (1)第一标识下 “a2=k 10; ”是截取上位数,截取个位数是 k 10,而截取十数是k 10,因此第一标识下应改成 “a2=k 10; ”。 (2)变量 i是标识数组 b的下表也就是数组的个数,题目中, “return k; ”返回的是循环条件表达式中的变量,所以这里应该将 “return k; ”改为 “return i; ”。 四、
46、程序设计题 43 【正确答案】 int i, j=0, min=a0, s; for(i=0; i N; i+) if(min ai s) j=0; bj+=ai; min=ai s; else if(min=ai s) bj+=ai; return j; 【试题解析】 该程序功能是把分数最低的学生数据放在 b所指的数组中。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最小值。然后将最小值与所有值 进行比较,求得所有的最小值。 (1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使用一个 for循环把所有的成绩进行比较,找出最低的分数来。 (2)找出所有与最低分数相等的学牛,并将最低分数的人数累加。