1、国家二级( C语言)机试模拟试卷 31 及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)每一个结点有两个指针域的链表一定是非线性结构 ( B)所有结点的指针域都为非空的链表一定是非线性结构 ( C)循环链表是循环队列的链式存储结构 ( D)线性结构的存储结点也可以有多个指针 2 使用白盒测试方法时,设计测试用例应根据 ( A)程序的内部逻辑 ( B)程序的复杂结构 ( C)程序的功能 ( D)使用说明书 3 在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在 多个科室治疗。则实体医生和患者之间的联系是 ( A)多对多 ( B)多对一 ( C)一对多 ( D
2、)一对一 4 设序列长度为 n,在最坏情况下,时间复杂度为 O(log2n)的算法是 ( A)二分法查找 ( B)顺序查找 ( C)分块查找 ( D)哈希查找 5 设数据集合为 D= 1,3,5,7,9 , D上的关系为 R,下列数据结构 B=( D, R)中为非线性结构的是 ( A) R= (5,1), (7,9), (1,7), (9,3) ( B) R= (9,7), (1,3), (7,1), (3,5) ( C) R= (1,9), (9,7), (7,5), (5,3) ( D) R= (1,3), (3,5), (5,9) 6 深度为 7的二叉树共有 127个结点,则下列说法中错
3、误的是 ( A)该二叉树有一个度为 1的结点 ( B)该二叉树是满二叉树 ( C)该二叉树是完全二叉树 ( D)该二叉树有 64个叶子结点 7 某二叉树的中序序列为 BDCA,后序序列为 DCBA,则前序序列为 ( A) DCBA ( B) BDCA ( C) ABCD ( D) BADC 8 下面能作 为软件需求分析工具的是 ( A) PAD图 ( B)程序流程图 ( C)甘特图 ( D)数据流程图 (DFD图 ) 9 下面不属于对象主要特征的是 ( A)唯一性 ( B)多态性 ( C)可复用性 ( D)封装性 10 ( A) (c,c,11,4) ( B) (b,b,11,4) ( C)
4、(a,a,2,4) ( D) (a,a,2,4)和 (e,e,6,1) 11 简单程序设计步骤中不包括 ( A)编码 ( B)确定算法 ( C)安装编译程序 ( D)调试 12 若想给已定义为 int型的变量 a,b,c,d赋值为 1,以下选项中错误的语句是 ( A) d=1, c=d, b=c, a=b; ( B) a=b=c=d=1; ( C) a=1, b=a, c=b, d=c; ( D) a=b, b=c, c=d, d=1; 13 有 C语言表达式 2*3+4+15%3 ,关于其执行顺序,以下叙述正确的是 ( A)先执行 2*3得 6,再执行 6+4得 10,再执行 15%3得 0
5、,最后执行 10+0得 10 ( B)先执行 2*3得 6,再执行 15%3得 5,最后执行 6+4+5得 15 ( C)先执行 15%3得 0,再执 行 2*3得 6,最后执行 6+4+0得 10 ( D)先执行 15%3得 3,再执行 4+3得 7,再执行 2*3得 6,最后执行 6+7得 13 14 若有定义: int a; float b; double c; ,程序运行时输入: 1,2,3回车,能把 1输入给变量 a、 2输入给变量 b、 3输入给变量 c的输入语句是 ( A) scanf(“%d,%f,%lf“, ( B) scanf(“%d%f%lf“, ( C) scanf(“
6、%d,%lf,%lf“, ( D) scanf(“%d,%f,%f“, 15 以下选项中,合法的 C语言实数是 ( A) E1 ( B) 1.00E-01 ( C) 0.10E ( D) 2.1e0.2 16 关于程序中的注释,以下叙述正确的是 ( A)注释的内容必须放在一对 /* 和 */之间 ( B)注释必须置于所说明的语句前或语句后 ( C)注释中间可以嵌套另一个注释 ( D)注释内容错误会导致编译出错 17 有以下程序 #include stdio.h main( ) int a,b; for (a=0; a 3; a+) scanf(“%d“, switch(b) default:
7、printf(“%d,“, b+); case 1: printf(“%d,“, b+); case 2: printf(“%d,“, b+); 程序运行时输入: 1 2 3回车,则输出结果是 ( A) 1,2,3,2,3,3, ( B) 1,2,3, ( C) 1,2,2,3,4,5, ( D) 1,1,1,2,2,3 18 以下非法的定义语句是 ( A) long b=0L; ( B) unsigned int a= -100u; ( C) short c2=0123; ( D) int d=0x0; 19 有以下程序 #include stdio.h main( ) int a=0, b
8、=0; for(; a 5; a+) if (a%2=0) continue; b += a; break; printf(“%d n“, b); 程序运行后的输出结果是 ( A) 1 ( B) 4 ( C) 0 ( D) 10 20 有以下程序 #include stdio.h main( ) char c; c=getchar(); do putchar(c+); while(c=getchar() != #); 程序运行时从第一列开始输入: abcdefg#回车,则输出结果是 ( A) bcdefgh$ ( B) bcdefgh ( C) abcdefg# ( D) abcdefg 21
9、 有如下程序 #include stdio.h main( ) char a = 0, b = a; int i; for (i=0; i 4; i+) if (i % 3) putchar(a + i); else putchar(b + i); 程序运行后的输出结果是 ( A) a12d ( B) ab3d ( C) 10ab ( D) 11ac 22 有以下程 序 #include stdio.h main( ) char ch = M; while (ch != K) putchar(ch); ch -; 程序运行后的输出结果是 ( A) ML ( B) MK ( C) OP ( D)
10、 mm 23 有以下程序 #include stdio.h int k=5; void f(int *s) s= *s=k; main( ) int m=3; f( printf(“%d,%dn“, m, k); 程序运行后的输出结果是 ( A) 3,3 ( B) 5,5 ( C) 3,5 ( D) 5,3 24 有如下程序 #include stdio.h int sum_mod(int a, int b) return a + b % 2; main( ) int i; for (i=0; i 5; i+) printf(“%d“, sum_mod(i, 4); printf(“n“);
11、程序运行后的输出结果是 ( A) 12345 ( B) 1234 ( C) 45678 ( D) 43210 25 以下对指针变量的操作中,错误的程序段是 ( A) int x=0,*p; *p=x; ( B) int x=1,*p,*q= p=q; ( C) int *p,*q; q=p=NULL; ( D) int p,*q; q= 26 有如下程序段 int *p, a=1; p= *p=10; 则变量 a的值为 ( A)不能确定 ( B) 1 ( C) 10 ( D) 11 27 有以下程序 #include stdio.h int a=2; int f(int k) static i
12、nt n=0; int m=0; n+; a+; m+; k+; return n+m+a+k; main( ) int k; for (k=0; k 2; k+) printf(“%d,“, f(k); printf(“n“); 程序运行后的输出结果是 ( A) 6,9, ( B) 6,10, ( C) 6,6, ( D) 6,7, 28 有以下程序 #include stdio.h void f(int x, int n) if ( n 1) printf(“%d,“, x0); f( printf(“%d,“, x0); else printf(“%d,“, x0); main( ) i
13、nt z3 = 4, 5, 6; f(z, 3); printf(“n“); 程序运行后的输出结果是 ( A) 6,5,4,6,5,4, ( B) 4,5,6,5,4, ( C) 4,5,6,4,5,6, ( D) 6,5,4,5,6, 29 有如下程序 #include stdio.h #include string.h main( ) char a = “1234“, *b = “ABC“; printf(“%d,%d,%d,%dn“, strlen(a), sizeof(a), strlen(b), sizeof(b); 程序运行后的输出结果是 ( A) 4,5,1,3 ( B) 4,3
14、,2,1 ( C) 4,5,3,3 ( D) 4,5,3,4 30 有以下程序 #include stdio.h int* sum(int data) static int init = 1; init += data; return main( ) int i, *p; for (i=1; i =3; i+) sum(i); p = sum(1); printf(“%dn“, *p); 程序运行后的输出结果是 ( A) 8 ( B) 9 ( C) 10 ( D) 7 31 以下对 C语言函数的叙述中正确的是 ( A)调用函数时,只能把实参的值传给形参,形参的值不能传给实参 ( B)函数既能嵌
15、套定义,又能递归定义 ( C)函数必须有返回值,否则不能使用 ( D)程序中有调用关系的 所有函数必须放在同一个源程序中 32 有以下程序 #include stdio.h #define S(x) x/x*x main( ) int k=6, j=3; printf(“%d,%dn“, S(k+j), S(j+k); 程序运行后的输出结果是 ( A) 27,27 ( B) 9,9 ( C) 27,29 ( D) 29,29 33 若有定义 typedef int *T; T *a20; 则以下与上述定义中 a类型完全相同的是 ( A) int *a20; ( B) int (*a)20; (
16、 C) int *(*a)20; ( D) int *a20; 34 设有以下程序段 struct person float weight; char sex; char name10; rec, *ptr; ptr = 从键盘读入字符串给结构体变量 rec的 name成员,错误的输入语句是 ( A) scanf(“%s“, rec- name); ( B) scanf(“%s“, rec.name); ( C) scanf(“%s“, (*ptr).name); ( D) scanf(“%s“, ptr- name); 35 有如下程序 #include stdio.h struct pai
17、r int first, second; ; struct pair get_min_max(int* array, int len) int i; struct pair res; res.first = array0; res.second = array0; for (i=1; i len; i+) if (arrayi res.first) res.first = arrayi; if (arrayi res.second) res.second = arrayi; return res; main( ) int array6 = 19, 21, 3, 4; struct pair m
18、in_max = get_min_max(array, 6); printf(“min=%d,max=%dn“, min_max.first, min_max.second); 程序运行后的输出结果是 ( A) min=0,max=6 ( B) min=1,max=20 ( C) min=1,max=19 ( D) min=0,max=21 36 有以下程序 #include stdio.h main( ) int i; FILE* fp; for (i=0; i 3; i+) fp = fopen(“res.txt“, “w“); fputc(K + i, fp); fclose(fp);
19、程序运行后,在当前目录下会生成一个 res.txt文件,其内容是 ( A) EOF ( B) M ( C) KLM ( D) L 37 有如下定义 struct st int n; float t; a20; FILE *fp; 若文件已正确打开,则 以下将文件内容读入数组 a中的语句错误的是 ( A) for(i=0; i 20; i+) fread(ai,sizeof(struct st),1L,fp); ( B) fread(a,sizeof(struct st),20L,fp); ( C) for(i=0; i 20; i+=2) fread( ( D) for(i=0; i 20;
20、i+,i+) fread( 38 有以下程序段 int m=33,n=66; m=mn; n=nm; m=mn; 执行上述语句后, m和 n的值分别是 ( A) m=66, n=66 ( B) m=33, n=66 ( C) m=66, n=33 ( D) m=33, n=33 39 有以下程序 #define Out(n) n%2=0 ? “%c“ : “%d“ #include stdio.h main( ) int x; for(x=65; x 69; x+) printf(Out(x),x); 程序的运行结果是 ( A) ABCD ( B) A66C68 ( C) 65666768 (
21、 D) 65B67D 40 有如下定义 struct st int x; float y; rec,*px; 若要使指针 px指向 rec的成员 x,正确的赋值语句是 ( A) px=(struct st*) ( B) px=(struct st*)rec.x; ( C) px= ( D) *px=rec.x; 二、程序填空题 41 程序通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数fun的功能是:对形参 b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据。 例如,若 b所指变量 t中的学号、姓名和三门课的成绩依次是: 10002、“ZhangQi”、 93、 8
22、5、 87,修改后输出 t中的数据应为: 10004、 “LiJie”、 93、 85、87。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下 。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #inClude stdio h #include string h struct student long Sno; char name10; float score3; ; void fun(struer student *b) /*found*/ b【 1】 =10004; /*found*/ strcpy(b 【 2】 , “LiJie”
23、); main() Struct student t=10002, “ZhangQi”, 93, 85, 87, int i; printf (“ n nThe original data : n”); printf(“ nNo: ld Name: s n Scores: ”, t Sno, t name); for(i=0 ; i 3; i+) printf(“ 6 2f”, t scorei); printf(“ n”); /*found*/ fun(【 3】 ); print f(“ nThe data after modifled: n”); printf(“ nNo: ld Name
24、: s n Scores: ”, t sno, t name); for(i=0; i 3; i+) printf(“ 6 2f”, t scorei); printf(“ n”); 三、程序修改题 42 下列给定程序中 fun函数的功能是:求表达式 S=aaaa 一 一 aaa一 aa一 a (此处 aaaa 表示 n个 a, a和 n的值在 1一 9之间 ) 例如, a=3, n=6,则以上表达式为: s=333333333333333333333 其值是 296298。 a和 n是 fun函数的形参,表达式的值作为函数值传回 main函数。 请改正程序中的错误,使它能计算出正确的结果。
25、注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h long fun(int a, int n) int j; /*found*/ long S=0, t=1; for(j=0; j n, j+) t=t*10+a; s=t; for(j=1; j n;j+) /*found*/ t=t 10 S=St: return(s); main() int a, n, printf(“ nPlease enter a and n: ”); scanf(“ d d”, a, n); printf(“The value of functio
26、n is id n”, fun(a, n); 四、程序设计题 43 某学生的记录由学号、 8门课程成绩和半均分组成,学号和 8门课程的成绩已在主函数中给出,请编写函数 fun,其功能是:求出该学生的平均分,并放入记录的 ave成员中。 例如,学生的成绩是: 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5,则他的平均分应为 78 875。 注意:部分源程序给出如下 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun部位中填入你编写的若干语句。 试题程序: #include stdio h #define N 8 typedef struct char
27、num10; double SN, double ave; STREC; void fun(STREC*a) voidmain() STREC S=“GA005”, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5); int i; fun( S); printf (“The SS student data: n”, s num); for(i=0; i N, i+) printf(“ 4 1fn”, S Si); printf(“ nave= 7 3f n”, S ave), 国家二级( C语言)机试模拟试卷 31 答案与解析 一、选择题 1 【正确答案】 D 【
28、试题解析】 一个非空的数据 结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。双向链表结点具有两个指针域,属于线性结构, A选项错误。循环链表所有结点的指针域都为非空,属于线性结构, B选项错误。循环链表是链表,循环队列属于队列,队列只能在队尾入队,在排头退队,链表可以在任何位置插入、删除, C选项错误。双向链表结点具有多个指针域, D选项正确。 2 【正确答案】 A 【试题解析】 白盒测试又称为结构测试或逻辑驱动测试,它允许测试人员利用程序内部的逻 辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进
29、行测试,故 A选项正确。 3 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多, A选项正确。 4 【正确答案】 A 【试题解析】 对长度为 n 的线性表排序,最坏情况下时间复杂度,二分法查找为O( log2n);顺序查找法为 O( n);分块查找时间复杂度与分块 规则有关;哈希查找时间复杂度为 O(1),因其通过计算 HashCode来定位元素位置,所以只需一次即可。故正确答案为 A选项。 5 【正确答案】
30、 D 【试题解析】 一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。 A选项中, 5为根结点,线性表为 51793。 B 选项中, 9为根结点,线性表为 97135。 C选项中, 1为根结点,线性表为 19753。 D选项,结点 1与 7都是根结点,属于非线性结构,故 D选项正确。 6 【正确答案】 A 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。满二叉树
31、指除最后一层外,每一层上的所有结点都有两个子结点的二叉树。深度为 7的二叉树,前 6层共有结点个数为 26-1=63,则第 7层有 127-63=64个结点,即第 7层结点数达到最大值,故此二叉树为满二叉树,也是完全二叉树,该二叉树没有度为 1的结点,有 64个叶子结点。故正确答案为 A选项。 7 【正确 答案】 C 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中中序序列为 BDCA,后序序列为 DCBA,可知 A为根结点, BDC为左
32、侧结点, C是 B右子结点, D是 C右子结点,故前序序列为 ABCD, C选项正确。 8 【正确答案】 D 【试题解析】 软件需求分析方法包括结构化分析方法和面向对象的分析方法两大类,前者常用工具为数据流图( DFD)、数据字 典( DD)、判定表、判定树等。故 D选项正确。 9 【正确答案】 C 【试题解析】 对象的基本特点如下: 可知 C选项正确。 10 【正确答案】 A 【试题解析】 从关系中找出满足给定条件的元组的操作称为选择,用表示。 “为交运算,它由属于前者且属于后者的元组组成。题目为选出属于属性 B,同时属性 C大于 4,并且属性 D大于 3的元组,结果为 (c,c,11,4)
33、,应保留全部属性。故 A选项正确。 11 【正确答案】 C 【试题解析】 简单程序设计步骤为:确定数据结构、确定算法、编码、调试、整理 文档,不包括安装编译程序,故答案为 C选项。 12 【正确答案】 D 【试题解析】 赋值是将一个常量的值赋给一个变量,在 D选项中,变量 b的值相当于一个未知的数,用 b 对 a赋值不满足,不满足题干要求的变量 a、 b、 c、 d赋值为 1的条件,因此答案选 D选项。 13 【正确答案】 A 【试题解析】 首先运算符 “*“和运算符 “%“有相同优先级,并且优先级都高于运算符 +,再根据运算结合性,乘法和取余运算都满足从左到右的运算规则, C, D选项错误;
34、因为 15%3=0,排除 B 选项,答案为 A选项。 14 【 正确答案】 A 【试题解析】 scanf()函数中, %d对应的参数是整数型地址, %f 对应参数为float型地址, %lf对应参数为 double型地址 ,因此 C,D选项错误;程序运行时输入: 1,2,3回车,函数中格式化字符需要用逗号隔开, B选项错误,故答案为 A选项。 15 【正确答案】 B 【试题解析】 C语言的数值表示中, e和 E都表示 “10的幂次 “,后面必须接整数,排除 C,D选项; e前面必须有底数,排除 A选项,答案为 B选项。 16 【正确答案】 A 【试题解析】 程序中,注释可以出 现在程序的任何位
35、置, B 选项错误;注释中间不能嵌套另一个注释, C选项错误;注释内容不影响程序编译, D选项错误,答案为 A选项。 17 【正确答案】 C 【试题解析】 程序在执行 switch 语句时,根据 switch 后面表达式的值找到匹配的入口标号,执行对应的 case语句,之后不再进行判断,继续执行此 case后面的语句,并且各个 case和 default的出现次序不影响执行结果,即题目中的 default放在开始位置,与放在最后是一样的结果;运算符 “+“放在变量后面时,表示先执行其他操作,再将变量 +1。本题 ,第一次循环输入 b=1,执行 case 1,输出 1,再执行 case 2,输出
36、 2,第二次循环输入 b=2,执行 case 2输出 2,第三次循环,输入 b=3,没有 case与其对应,故执行 default 输出 b=3,接着执行 case 1:,输出4,再执行 case 2,输出 b=5,至此退出 for语句。因此,最后输出为 1,2,2,3,4,5,答案为 C选项。 18 【正确答案】 B 【试题解析】 unsigned 定义的是 “无符号数 “,则 B选项定义错误,答案为 B 选项。 19 【正确答案】 A 【试题解析】 for语句中,当 a=0时,满足 for循环中 if 语句的条件,执行continue继续下一次循环, a+1后再进入 for语句循环,此时
37、a=1不满足 if 语句,执行 b=b+a为 1,接着执行 break 语句,终止循环,最后输出 b=1,故答案为 A选项。 20 【正确答案】 D 【试题解析】 运算符 “+“放在变量后面时,先参与其他操作,再对变量 +1。putchar(c+)表示先输出当前 c值,再对 c值 +1,当输入 abcdef#时,在 while语句中,程序输入 “#“,循环退出。因此输出为 abcdefg,答案为 D选项 。 21 【正确答案】 A 【试题解析】 if(i%3)表示 i对 3求余,如果不等于 0,则执行 putchar(a +i);否则执行 putchar(b+i),可见, i=0时 i%3=0
38、 执行 putchar(b+i),此时 b=a,以此类推 ,当 i=1时,执行 putchar( a+i) ,输出 1;当 i=2时,执行 putchar( a+i),输出 2;当 i=3时,执行 putchar( b+i)输出 d,答案为 A选项。 22 【正确答案】 A 【试题解析】 (ch != K)表示如果 ch不等于 K成立时,输出 ch,再对 ch 进行ASCII码减一操作,循环开始时, ch=M不等于 K输出 M, ch-表示 ch=L,循环继续,输出 L, ch-被执行 ch=K退出循环,答案为 A选项。 23 【正确答案】 C 【试题解析】 函数 f()的功能是:定义一个临时
39、的整型指针变量 s,指向全局变量k,然后用 k 的值对 s指向的内存地址进行赋值,结果当然是 k的值不变;另外在调用函数 f()过程中,虽然使用 m的地址初始化 s,但是 s在 f函数内部又被指向 k的地址,所以 s的后续操作对 m没有任何影响,因此最后输出为 3,5,答案为 C选项 。 24 【正确答案】 B 【试题解析】 程序的 main 函数中的 printf输出函数,调用 sum_mod 函数,计算结果 i + 4 % 2;因为 4%2为 0,所以循环中,函数每次执行的结果都是返回 i,因此答案为 B 选项。 25 【正确答案】 A 【试题解析】 定义指针 p 后,必须指针 p进行初始
40、化就进行赋值,故 A选项程序错误,答案为 A选项。 26 【正确答案】 C 【试题解析】 题中定义一个指针变量 p和整数并将 a赋值为 1,再把 a地址的值赋给指针 p,最后把 10 赋给指针 p所对应的地址单元,此 时改变了 a的值,a=10,答案为 C选项。 27 【正确答案】 A 【试题解析】 static定义一个静态分布变量,变量只会初始化一次,在 for循环体内调用 f()函数输出, f()函数是将当前 n,m,a,k 加 1后进行累加返回主函数输出,第二次累加时, n值初始值为 1,因此输出分别为 6,9,答案为 A选项。 28 【正确答案】 B 【试题解析】 本题考查了函数的递归
41、调用,在 main 函数中调用 f(z,3)后,系统进入 f()函数,随后进入 if语句,输出 x0,再进入 f()函数时,存在 &x1函数的递归,输出 x1,再进入 f 函数,再进行递归,输出 x2,随后结束返回输出上一个 f()函数,输出 x1,再返回第一个 f()函数中,输出 x0,程序运行后的输出结果是 4.5.6.5.4。因此答案为 B 选项。 29 【正确答案】 D 【试题解析】 当将一个字符串存储到一个字符型数组中时,系统会在其末尾自动加上一个空字符 0作为结束符, strlen()函数的返回值是字符串的实际长度,不包括结束符,所以 strlen( b) =3, strlen(
42、a) =4,而 sizeof()函数作用就是返回一个对象或者 类型所占的内存字节数,返回值包括结束符,所以 sizeof( a)=5由于一个指针在内存中占用四个字节,故 sizeof( b) =4,答案为 D选项。 30 【正确答案】 A 【试题解析】 static定义一个静态分布变量,变量只会初始化一次。在 for函数的循环体中调用 sum( i)函数,循环 3次,每次都把 i值累加在 init中,再执行i+1操作,因此,退出循环后, init=1+1+2+3=7,再执行次 sum( 1), init=8后,把 init的地址赋给指针 p,输出指针 p指向的 init的值,答案为 A选项。
43、31 【正确答案】 A 【试题解析】 C语言不能嵌套定义函数,能递归定义函数,因此 B选项错误;函数可以没有返回值,没有返回值的函数返回类型为 void, C选项错误;程序有调用关系的所有函数可以不放在同一源程序中, D选项错误,答案为 A选项。 32 【正确答案】 C 【试题解析】 定义一个带参数的宏时,字符串内的形参通常要用圆括号括起来,以避免出错,本题中, S( k+j)相当于执行运算 k+j/k+j*k+j,将 k,j值代入运算后取整为 27, S(j+k)同理,因此答案为 C选项。 33 【正确答案】 A 【试题解析】 typedef 类型名 新类型名表示为一个已有定义的类型标识符重
44、新定义一个类型名,题中,首先为指针类型命名为 T,再通过 T 定义了一个数组指针 *a20,整个功能等价于 int *a20,答案为 A选项。 34 【正确答案】 A 【试题解析】 题中声明了一个结构类型 person 同时,定义了 2个结构变量,一个为 rec,另一个为指针变量 ptr, A选项中, rec是一个结构体变量,结构体变量访问结构成员的方式应该为: rec.成员名 ,用法错误,答案为 A选项。 35 【正确答 案】 D 【试题解析】 本题首先在 main 函数定义一个数组 array,然后定义了一个结构变量 min_max, min_max 使用函数 get_min_max 的返
45、回值初始化,函数get_min_max 的功能就是将数组中的最小值和最大值取出来后分别赋值给结构变量 min_max中的 first, second 两个整形变量,数组长度为 6个单位,初始化 4个数据,剩下 2个默认为 0,因此答案为 D选项。 36 【正确答案】 B 【试题解析】 for循环中,每次都执行打开文件 res.txt、写入文件、再关闭文件的操作 ,由于 fopen 函数使用 w模式写文件,所以每次打开 res.txt 后,都删除文件中的原有数据,再重新写入新数据。所以文件最终的内容只与最后一次 for循环有关,最后一次 for循环是向文件 res.txt写入 K+2, 即 M,
46、正确答案是 B选项。 37 【正确答案】 A 【试题解析】 fread()函数用法是 fread( void *buffer,int size,int n,FILE *fp) ,其中 buffer为指针类型,应该传入指针类型的值, ai应该改为 &ai,因此 A选项语句错误,答案为 A选 项。 38 【正确答案】 C 【试题解析】 C语言中 “表示按位异或,因此,把 m,n 分别转化为二进制后进行题中要求运算赋值后, m=66,n=33,由结果可以发现该方法其实是不使用中间变量交换两个变量的值。答案为 C选项。 39 【正确答案】 D 【试题解析】 #define命令定义一个函数,该函数判断一
47、个数能否整除 2,如果能,默认当前数值为字符类型的 ASCII码值,否则认为当前数值为整数类型,在for循环中,调用该函数进行输出,答案为 D选项。 40 【正确答案】 A 【试题解析 】 rec.x表示整型变量,强制转化为 struct st类型的指针赋给 px后,px并不指向 rec的 x, B 选项错误; &rec.x是整型变量的地址,不能直接赋给struct st类型的指针, C选项错误; px未初始化,指向未知内存单元,将 rec.x(整数值)赋值给该内存单元是很危险的,并且这种方法也不能使 px 指向 rec的成员 x, px依然指向未知内存单元, D选项错误; &rec.x是 rec的成员 x的地址,这是整型指针,经过强制转化后,赋值给 px,可以使 px指向 rec的成员 x,答案为 A选项。 二、程序填空题 41 【正确答案】 (1)一 sno (2)一 name (3)&t 【试题解析】 填空 1:给 b所指结构体变量学生的学号赋值。 填空 2:通过 strcpy 字符申复制函数修改 b所指结构体变量学生的姓名。 填空 3:由于函数 fun的形参是指针型变量,所以在 main 函数中调用函数 fun 的参数应为指针