1、国家二级( C语言)机试模拟试卷 152及答案与解析 一、选择题 1 算法的有穷性是指 ( )。 ( A)算法程序的运行时间是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的长度是有限的 ( D)算法在执行过程中所需要的临时工作单元数 2 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDE12345 ( D) 54321EDCBA 3 下列关于线性链表的叙述中,正确的是 ( )。 ( A)各数据结点的
2、存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致 ( B)各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续 ( C)进行插入与删除时,不需要移动表中的元素 ( D)以上三种说法都不对 4 在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是 ( )。 ( A) O(n) ( B) O(n2) ( C) O(log2n) ( D) O(nlog2n) 5 假定已建立以下数据链表结构,且指针 p和 q已指向如下图所示的结点:则以下选项中可将 q所指结点从链表中删除并释放该结点的语句是 ( )。 ( A) (*)p next=(*q) next; free(p)
3、 ( B) b=q next; free(q) ( C) p=q; free(q) ( D) p next=q next; free(q) 6 软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N-S图 ( B) DFD图 ( C) PAD图 ( D)程序流程图 7 在面向方法中,不属于 “对象 ”基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 8 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱动 ( C)模块调用 ( D)数据流 9 在数据管理技术发展的三个阶段中,数据共享最好的是 ( )。 ( A)人工管理
4、阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 10 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 11 有三个关系 R、 S和 T如下:由关系 R和 S通过进行运算得到关系 T,则所使用的运算为 ( )。 ( A)笛卡尔积 ( B)交 ( C)并 ( D)自然连接 12 以下叙述中正确的是 ( )。 ( A) C程序的基本组成单位是语句 ( B) C程序中的每一行只能写一条语句 ( C)简单 C语句必须以分号结束 ( D) C语言必须在一行内写完 13 C源程序中不能表示的数制是 ( )
5、。 ( A)二进制 ( B)八进制 ( C)十进制 ( D)十六进制 14 以下叙述中错误的是 ( )。 ( A)用户定义的函数中可以没有 return语句 ( B)用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值 ( C)用户定义的函数中若没有 return语句,则应当定义函数为 void类型 ( D)函数的 return语句中可以没有表达式 15 以下选项中不能作为 C语言合法常量的是 ( )。 ( A) cd ( B) 0 1e+6 ( C) a ( D) 011 16 如有表达式 (w)?(一 x): (+y),则其中与 w等价的表达式是 ( )。 ( A)
6、 w=1 ( B) w=0 ( C) w!=1 ( D) w!=0 17 以下不能正确表示代数式 的 C语言表达是 ( )。 ( A) 2*a*b c d ( B) a*b c d*2 ( C) a c d*b*2 ( D) 2*a*b c*d 18 以下选项中正确的定义语句是 ( )。 ( A) double a; b; ( B) double a=b=7; ( C) double a=7, b=7; ( D) double, a, b; 19 若变量已正确定义为 int型,要通过语句 scanf(“ d, d, d“, &a, &b,&c);给 a赋值 1、给 b赋值 2、给 c赋值 3,
7、以下输入 形式中错误的是 (u代表一个空格 )( )。 ( A) 1, 2, 3回车 ( B) 1u2u3回车 ( C) 1, uu2, uu回车 3回车 ( D) uu1, 2, 3回车 20 执行以下程序段后, w的值为 ( )。 int w=A, x=14, y=15; w=(x y)&(w a); ( A)一 1 ( B) NULL ( C) 1 ( D) 0 21 有以下程序: #include stdio h main() char a=4; printf(“ d n“, a=a 1); 程序运行的结果是 ( )。 ( A) 40 ( B) 16 ( C) 8 ( D) 4 22
8、有以下程序段: int a, b, c; a=10; b=50; c=30; if(a b) a=b, b=c; c=a; printf(“a= d b= d c= d“, a, b, c); 程序的输出结果是 ( )。 ( A) a=10 b=50 c=10 ( B) a=10 b=50 c=30 ( C) a=10 b=30 c=10 ( D) a=10 b=30 c=50 23 有以下程序: #include stdio h main() int x=1, y=2, z=3; if(x y) if(y z)printf(“ d“, +z); else printf(“ d“, +y);
9、printf(“ d n“, x+); 程序运行的结果是 ( )。 ( A) 3 3 1 ( B) 4 1 ( C) 2 ( D) 1 24 有以下程序: #include stdio h main() int i=5: do if(i 3=1) if(i 5=2) printf(“* d“, i); break; i+; while(i!=0); printf(“ n“); 程序运行的结果是 ( )。 ( A) *7 ( B) *3*5 ( C) *5 ( D) *2*6 25 有以下程序: #include stdio h main() int i, j; for(i=3; i 1; i一
10、一 ) for(j=1; j =2; j+) printf(“ d“, i+j); printf(“ n“); 程序运行的结果是 ( )。 ( A) 2 3 4 3 4 5 ( B) 4 3 2 5 4 3 4 5 ( C) 2 3 3 4 2 3 ( D) 4 5 3 4 26 若有定义语句: char s10=“1234567 0 0“;,则 strlen(s)的值是 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 27 若有定义语句: int m=5, 4, 3, 2, 1, i=4;, 则下面对 m数组元素的引用中错误的是 ( )。 ( A) m一一 i ( B)
11、m2*2 ( C) mm0 ( D) mmi 28 有以下程序: #include stdio h void fun(int a, int n) int i, t; for(i=0; i n 2; i+) t=ai; ai=an一 1-i; an一 1一 i=t; main() int k10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; fun(k, 5); for(i=2; i 8; i+) printf(“ d“, ki); printf(“ n“); 程序运行的结果是 ( )。 ( A) 3456787 ( B) 876543 ( C) 1098765 ( D)
12、321678 29 有以下程序: #include stdio h void fun(int a, int b) int t; t=a; a=b; b=t; main() int c10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, i; for(i=0; i 10; i+=2) fun(ci, ci+11); for(i=0; i 10; i+) printf(“ d, “, ci); printf(“ n“); 程序运行的结果是 ( )。 ( A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, ( B) 2, 1, 4, 3, 6, 5, 8, 7, 0, 9,
13、 ( C) 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, ( D) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 30 有以下程序: #include stdio h #define N 4 void fun(int aN, int b) int i; for(i=0; i N; i+) bi=aii; main() int xN=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, yN, i; fun(x, y); for(i=0; i N; i+) printf(“ d“, yi); printf(“ n“); 程序运行的结果是 ( )。 ( A)
14、1 2 3 4 ( B) 1 0 7 0 ( C) 1 4 5 9 ( D) 3 4 8 0 31 若有定义语句: double x5=1 0, 2, 3, 4, 5 0, *p=x,则错误引用 x数组元素的是 ( )。 ( A) *p ( B) x5 ( C) *(p+1) ( D) *x 32 下面的函数调用语句中, func函数的实参个数是 ( )。 func(f2(v1, v2), (v3, v4, v5), (v6, max(v7, v8) ( A) 3 ( B) 4 ( C) 5 ( D) 8 33 有以下程序: #include stdio h int fun(int a, in
15、t b) if(b=0)return a; else return(fun(一一 a,一一 b); main() printf(“ d n“, fun(4, 2); 程序运行的结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 34 有以下程序: #include stdio h int fun(int(*s)4, int n, int k) int m, i; m=s0k: for(i=1; i n; i+) if(sik m) m=sik: return m; main() int a44=1, 2, 3, 4, 11, 12, 13, 14, 21, 22, 23,
16、 24, 31, 32,33, 34; printf(“ d n“, fun(a, 4, 0); 程序运行的结果是 ( )。 ( A) 4 ( B) 34 ( C) 31 ( D) 32 35 有以下程序: #include stdio h #include stdlib h int fun(int n) int *p; p=(int*)malloc(sizeof(int); *p=n; return *p; main() int a; a=fun(10); printf(“ d n“, a+fun(10); 程序运行的结果是 ( )。 ( A) 0 ( B) 10 ( C) 20 ( D)出
17、错 36 以下关于宏的叙述中正确的是 ( )。 ( A)宏名必须用大写字母表示 ( B)宏定义必须位于源程序中所有语句之间 ( C)宏替换没有数据类型限制 ( D)宏调用比函数调用耗费时间 37 以下程序段中完全正确的是 ( )。 ( A) int *p; scanf(“ d“, &p); ( B) int *p; scanf(“ d“, p); ( C) int k, *p=&k; scanf(“ d“, p) ( D) int k, *p; *p=&k; scanf(“ d“, p) 38 有以下程序: #include stdio h struct st int x, y; data2=
18、1, 10, 2, 20; main() struct st *p=data; printf(“ d“, p一 y); printf(“ d n“, (+p)一 x); 程 序运行的结果是 ( )。 ( A) 10 1 ( B) 20 1 ( C) 10 2 ( D) 20 2 39 有以下程序: #include stdio h main() struct STU char name9; char sex; double score2; ; struct STU a=“Zhao“, m, 85, 90 0, b=“Qian“, f, 95, 92 0; b=a: printf(“ s c 2
19、 0f 2 0f n“, b name, b sex, b score0,b score1); 程序运行的结果是 ( )。 ( A) Qian f 95 92 ( B) Qian m 85 90 ( C) Zhao f 95 92 ( D) Zhao m 85 90 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,
20、 5, 1, pf); fclose(pf); 以上程序执行后, abc dat文件的内容是 ( )。 ( A) China ( B) Chinang ( C) ChinaBeijing ( D) BeijingChina 二、程序填空题 41 给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返 回,并把其串长放在形参 n所指变量中。 ss所指字符串数组中共有 M个字符串,且串长 N。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio
21、 h #include string h #define M 5 #define N 20 *found* int fun(char(*ss)【 1】, int *n) int i, k=0, len=0; for(i=0; i M; i+) len=strlen(ssi); *found* if(i=0) *n=【 2】; if(len *n) *found* 【 3】; k=i; return(k); main() char ssMN=“shanghai“, “guangzhou“, “beijing“, “tianjing“, “cchongqing“; int n, k, i; pri
22、ntf(“The original strings are: n“); for(i=0; i M; i+) puts(ssi); k=fun(ss, &n); printf(“The length of longest string is: d n“, n); printf(“The longest string is: s n“, ssk); 三、程序修改题 42 下列给定程序中, fun函数的功能是:根据形参 m,计算下列公式的值。 t=1+1 2+1 3+1 4+1 m 例如,若输入 5,则应输出 2 283333。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函
23、数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h double fun(int m) double t=1 0; int i; for(i=2; i =m; i+) *found* t+=1 0 k; *found* return i; void main() int m; system(“CLS“); printf(“Please enter linteger number: “); scanf(“ d“, &m); printf(“The result is lf n“, fun
24、(m); 四、程序设计题 43 请编写函数 fun,其功能是:计算并输出给定 10个数的方差。 S=( (Xx)2 100 5 其中: S=( (X一 x)2) 10 例如,给定的 10个数为 95 0、 89 0、76 0、 65 0、 88 0、 72 0、 85 0、 81 0、 90 0、 56 0,则输出为S=11 730729。 注意:请勿改动主 main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include math h #include stdio h double fun(double x10) void main() FIL
25、E *wf; double s,x10=95 0, 89 0, 76 0, 65 0, 88 0, 72 0, 85 0, 81 0, 90 0,56 0; int i; printf(“The original data is: n“); for(i=0; i 10; i+) printf(“6 1f“, xi); printf(“ n“); s=fun(x); printf(“s= f n“, s); * wf=fopen(“out dat“, “w“); fprintf(wf, “ f“, s); fclose(wf); * 国家二级( C语言)机试模拟试卷 152答案与解析 一、选择题
26、 1 【正确答案】 A 【试题解析】 算法原则上能够精确地运行,而且人们用纸笔做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。 2 【正确答案】 B 【试题解析】 栈是按照 “先进后出 ”的原则组织数据的,入栈的顺序为12345ABCDE,则出栈的顺序应为其逆序,即 EDCBA54321。 3 【正确答案】 C 【试题解析】 一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选项正确。 4 【正确答案】 C 【试题解析】 二分查找的
27、最坏情况是不断的二分直至无法再分时,仍然没有查找成功。对于有序的线性表,二分查找法只需比较 log2n次。 5 【正确答案】 D 【试题 解析】 要删除结点 q,应首先由 q的上一个结点 p的指针域指向 q的指针域所指向的结点,即 p一 next=q一 next;,然后才能释放结点 q,即free(q)。 6 【正确答案】 B 【试题解析】 结构化分析方法是结构化程序设计理论在软件需求解析阶段的运用,数据流图 (Data Flow Diagram, DFD)是结构化分析常用的工具之一,数据字典、判定树和判定表也是常用的结构化分析工具。程序流程图、 NS图、 PAD图等图形工具用于详细设计的过程
28、中。 7 【正确答案】 A 【试题解析】 对象的基 本特点有: 标识唯一性,是指对象是可区分的; 分类性,是指可将具有相同属性和操作的对象抽象成类; 多态性,是指同一个操作可以是不同对象的行为; 封装性,是指对象的内部对外不可见,在外面不可直接使用对象的处理能力,也不能直接修改对象的内部状态; 模块独立性,是指模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。 8 【正确答案】 D 【试题解析】 数据流图基本符号的含义: 矩形表示数据的外部实体; 圆角的矩形表示变换数据的处理逻辑; “=”表示数 据的存储; 箭头表示数据流。 9 【正确答案】 C 【试题解析】 数据库系统阶段实现
29、了数据共享,具有数据的集成性,这使得数据可被多个应用所共享,还可以极大地减少数据冗余性。 A项,在人工管理阶段,数据不保存,没有对数据进行管理的软件,数据不能共享; B项,文件系统阶段是数据库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是这种能力十分有限。从人工管理阶段到文件系统阶段再到数据库系统阶段,对数据共享的能力在不断增强。 10 【正确答案】 B 【试题解析】 实体间的联系有如下情况: 一对一 (1: 1); 一对多 (1: m); 多对多 (m: n)。本题中,一间宿舍对应多个学生,那么宿舍和学生之间的联系是一对多,学生和宿舍的联系是多对一。 11 【正确答案】 D
30、【试题解析】 交和并运算要求关系 R和 S具有相同的属性, BC两项错误。 R与S的笛卡儿积是一个 4元关系,有 4个元素, A项错误。 R与 S有公共的属性 B,可通过公共属性的相等值进行连接,这种连接称之为自然连接。 12 【正确答案】 C 【试题解析】 C程序的基本组成单位是函数, A项错误; C程序以分号作为每个语句结尾,一行能写 多条语句,也可以将一条语句分几行书写, BD两项错误;而简单 C语言语句必须以分号结束,所以 C项正确。 13 【正确答案】 A 【试题解析】 C语言中整型常量可以用十进制数、八进制数、十六进制数来表示。虽然计算机只能识别二进制数,但二进制不能用来表示整型常
31、量。 14 【正确答案】 B 【试题解析】 用户定义的函数有两种: void函数,可以没有 return语句,如果有 return语句,也不可以返回任何表达式; 指定返回类型函数,至少有一个返回语句。在一个函数内,可以根据需要在多处出现 return语句,但无论有多少个 return语句, return语句只会被执行一次,然后退出函数,并且只能返回一个函数值。 15 【正确答案】 A 【试题解析】 常量包括整型常量、实型常量、字符常量和字符串常量等。单引号表示字符常量,但不能包含字符串。表达字符串常量时需用双引号。 16 【正确答案】 D 【试题解析】 ?:表达式形式为表达式 1 ?表达式 2
32、:表达式 3。当表达式 1的值为真,则结果为表达式 2的值;当表达式 1的值为假,则结果为表达式 3的值。可见表达式 w等价于 w!=0。 17 【正确答案】 D 【试题解析】 *与优先级相同,所以采用左结合的方式。 D项若改为: 2*a*b(c*d),则正确。 18 【正确答案】 C 【试题解析】 同一类型变量的定义时,不同变量之间需要用 “, ”分隔;定义变量时初始化赋值时不能用等号连接;变量类型说明后面不能用逗号,而是用空格分离。 19 【正确答案】 B 【试题解析】 scanf函数要求除格式控制符以外的字符都要原样输入。逗号是非格式符,所以需要原样输入,否则就不能正确读入数据。 B项前
33、两个数据后面没有紧跟一个逗号,格式不匹 配,所以输入形式错误。 20 【正确答案】 C 【试题解析】 因为 x=14, y=15都是非零整数,因此 x y=1。又因为A+32=a,知 w a也为真,因此 (x y)&(w a)的值为 1。 21 【正确答案】 C 【试题解析】 左移一位相当于原数乘以 2,右移一位相当于除以 2。 a 1结果为 4*2=8,没有超过 char类型的范围。 22 【正确答案】 A 【试题解析】 因为 a=10, b=50,所以 a b, if语句判断条件不成立,于是执行c=a,得到 c=10, a和 b的值不变。 23 【正确答案】 D 【试题解析】 else子句
34、总是与最前面最近的不带 else的 if相结合,与书写格式无关,所以本题中的 else语句与第二个 if语句配对,且 if和 else都在第一个 if的控制范围内。首先判断 x y不成立,直接退出第一个 if语句,执行 printf(“ dn“, x+)。 (x+)的值是 x加之前的值,所以输出结果为 1。 24 【正确答案】 A 【试题解析】 在 do while循环中,总是先执行后判断,所以循环体至少会被执行一次。在循环中,如果满足 (i 3=1)&(i 5=2),那么输出 i的值,退出循环,否则 i+,如果 i=0则跳出循环。 25 【正确答案】 D 【试题解析】 外层主循环 i从 3减
35、到 1执行了 3次 (最后一次循环条件不成立,不执行 ),嵌套的循环 j从 1增到 2,每轮执行 2次。每次输出 i+j的值,就可以得到如 D选项的输出结果。每次换行发生在外循环完成一次循环之后。 26 【正确答案】 A 【试题解析】 C语言规定以字符 0作为字符串结束的标识符。 strlen函数返回的是字符串的长度, “1234567 0 0”与 “1234567”等效,所以字符串长度是 7。 27 【正确答案】 C 【试题解析】 :数组的下标从零开始,数组 m中有 5个元素,所以数组 m即为m0=5, m1=4, m2=3, m3=2, m4=1。 C项, m0=5,引用数组元素为m5,但
36、是数组下标范围是 0 4,所以 m5溢出,引用错误。 28 【正确答案】 D 【试题解析】 由于数组名本身是一个地址,所以在用数组名作为实参传递时,对应的形参相当于一个指针变量,在函数中可以通过指针变量来引用数组元素,从而改变元素的值。本题中函数 fun的 作用是将数组 A的前 n个元素进行逆转,fun(k, 5)的结果是数组 k的前五个元素 1、 2、 3、 4、 5变为 5、 4、 3、 2、 1。逆转后,输出数组中第 3个至第 8个元素。 29 【正确答案】 A 【试题解析】 在 C语言中,函数参数传递的作用是 “传值 ”,形参和实参是两个没有关系的变量。函数 fun交换了参数值,但只是
37、交换了形参的值,结果并不会传递给实参。所以数组 c没有发生变化,原样输出。 30 【正确答案】 B 【试题解析】 数组 x有 4列。 fun函数中 for循环的作用是将二维数组前 4行的对角线元素分别赋 给 b0, b1, b2, b3。在主函数中,二维数组初始化为1, 2, 3, 4, 5, 6, 7, 8, 9, 10,所以可以看出对角线元素为 1 0 7 0。 31 【正确答案】 B 【试题解析】 引用一维数组元素有多种方式。直接引用的表达式为:数组名 下标 。数组大小为 n时,下标的取值范围为 0 (n一 1),所以本题中 x的下标为0 4, x5溢出, B项错误。此外还可以通过指针引
38、用一维数组元素。指针 p指向该数组,所以 *p表示 x0, A项正确;指针 p+1指向数组 x的第二个元素的地址, *(p+1)表示引用 x的第二个元素, C项正确; x为 x数组元素的首地址, *x表示对 x0的引用, D项正确。 32 【正确答案】 A 【试题解析】 函数调用中,实参有多个时,它们之间应该用逗号分隔。本题中的实参有 3个,为 f2(v1, v2)、 (v3, v4, v5)、 (v6, max(v7, v8)。其中 f2(v1, v2)是函数做参数, (v3, v4, v5)是逗号表达式做参数, (v6, max(v7, v8)是逗号与函数相结合做参数。 33 【正确答案】
39、 B 【试题解析】 fun函数是一个递归函数,其功能 是:当 b的值为零时,返回此时a的值;否则,返回 fun(一一 a,一一 b),即将 a和 b的值分别减 1后返回fun(a, b)。当 b不断递减时, a也不断递减,直到 b为零。执行过程为:执行fun(4, 2), b=2,返回 f(3, 1),此时 b=1,返回 f(2, 0), b=0,返回 a的值 2。 34 【正确答案】 C 【试题解析】 函数 fun通过数组指针引用二维数组,其作用是遍历 s1k sn一 1k,找出数组中最大的元素。 35 【正确答案】 C 【试题解析】 fun函数的功能是申请一个指针 p, 把 p指向的存储空
40、间赋值为n,并返回 p指向的空间的值,即为 n。 fun(10)的返回值为 10,所以 a=fun(10)后a的值为 10, a+fun(10)=20。 36 【正确答案】 C 【试题解析】 A项错误,宏名标识符习惯用大写字母表示,但宏名可以是任何合法的 C语言标识符,没有对大小写的强制性要求; B项错误,宏定义可以根据需要写在任何位置; D项错误,宏调用在编译前由编译预处理程序完成,不占用运行的时间。 37 【正确答案】 C 【试题解析】 选项 A错在没有对指针进行初始化,是无效指针,并且在scanf(“ d“, &p)中无需再进行取地址操作;选项 B没有对指针进行初始化,是无效指针;选项
41、D,语句 *p=&k;的左端 *p是指针所指内存空间的值, &k是地址,应为 p=&k。 38 【正确答案】 C 【试题解析】 题目在定义结构体 st的同时便定义了结构体数组 data。可知data0=1, 10, data1=2, 20。结构体指针 p指向数组的首地址,指向data0, +p则指向 data1,所以输出 p一 y和 (+p)一 x即输出 data0 y和 data1 x。 39 【正确答案】 D 【试题解析】 在 C语言中,相同类型变量可以通过等号直接赋值,它会按照每个成员在结构体中的顺序一一对应赋初值,可知, a name=“Zha0“,a sex=f, a score0=
42、85 0, a score1=90 0, b name=“Qian“,b sex=m, b score0=95 0, b score1=92 0。要特别注意 a=b;语句,如果没有该条语句,则输出 A选项的结果。 40 【正确答案】 B 【试题解析】 pf是一个文件指针, fopen(“abc dat“ “wb+“)执行后, fp指向可读写的二进制文件 abc dat。语句 fwrite(s2, 7, 1, pf);是将 s2的前 7*1个字符的内容写入 pf中,即 Beijing。 rewind(pf)是将文件位置指针移回到文件开头,语句 fwrite(s1, 5, 1, pf)是从文件的开
43、头位置向 s1写入五个字符,所以结果为Chinang。 二、程序填空题 41 【正确答案】 (1)N (2)len (3)*n=len 【试题解析】 本题考查:字符数组处理;函数形参定义; for循环语 句。 填空 1:形参 ss是一个字符串数组的定义,其宽度为 N,所以应填 N。 填空 2: *n用来记录最长字符串的长度,此处取第一个字符串的长度赋值给变量*n,所以应填 len。 填空 3:每循环一次,判断当前字符串的长度是否大于 *n,如果大于,则*n=len。 三、程序修改题 42 【正确答案】 (1)t+=1 0 i; (2)return t; 【试题解析】 本题考查: for循环语句
44、的循环条件;函数返回值。 该题目考查分母成等差数列递增的一个数学公式,先看循环条件 for(i=2; i=m; i+), i从 2开始递增到 m,所以 t的值应该是由 1 0 i的值逐步循环叠加后的结果,而不是 t+=1 0 k;。 return i考查对程序的解读能力,当循环结束后(由输入 m的值决定 ),函数返回当前 t的值。 四、程序设计题 43 【正确答案】 double fun(double x10) double x1=0 0, s=0 0; int i: for(i=0; i 10; i+) x1=x1+xi; x1=x1 10; *求 10个数的平均值 * for(i=0; i 10; i+) s=s+(xi一 x1)*(xi一 x1); return sqrt(s 10); *求 10个数的方差 * 【试题解析】 本题考查:平均值的求法; for循环;复合运算符; sqrt函数 (求方差 )。 这是一道求公式的值的题目,程序中第 1个循环用来完成求 10个数的总和,接着再用 x1=x1 10来求出平均值。第 2个循环用来求累加和的值,最后将累加和的平方根返回,注意 sqrt函数的应用。