1、国家二级( C语言)机试模拟试卷 52 及答案与解析 一、选择题 1 面向对象方法中,实现对象的数据和操作结合于统一体中的是 ( A)结合 ( B)封装 ( C)隐藏 ( D)抽象 2 在进行逻辑设计时,将 E-R图中实体之间联系转换为关系数据库的 ( A)关系 ( B)元组 ( C)属性 ( D)属性的值域 3 线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有 ( A)节省存储空间 ( B)插入与删除运算效率高 ( C)便于查找 ( D)排序时减少元素的比较次数 4 深度为的完全二叉树中共有 125个结点,则该完全二叉树中的叶子结点数为 ( A) 62 ( B) 63 ( C)
2、64 ( D) 65 5 下列叙述中正确的是 ( A)所谓有序表是指在顺序存储空间内连续存放的元素序列 ( B)有序表只能顺序存储在连续的存储空间内 ( C)有序表可以用链接存储方式存储在不连续的存储空间内 ( D)任何存储方式的有序表均能采用二分法进行查找 6 设二叉树如下: 则后序序列为 ( A) ABDEGCFH ( B) DBGEAFHC ( C) DGEBHFCA ( D) ABCDEFGH 7 计算机软件包括 ( A)算法和数据 ( B)程序和数据 ( C)程序和文档 ( D)程序、数据及相关文档 8 下面描述中不属于软件需求分析阶段任务的是 ( A)撰写软件需求规格说明书 ( B
3、)软件的总体结构设计 ( C)软件的需求分析 ( D)软件的需求评审 9 当数据库中数据总体逻辑结构发生变化,而应用程序不受影响,称为数据的 ( A)逻辑独立性 ( B)物理独立性 ( C)应用独立性 ( D)空间独立性 10 有三个关系 R、 S和 T如下:则由关系 R和 S得到关系T的操作是 ( A)并 ( B)投影 ( C)交 ( D)选择 11 以下叙述正确的是 ( A) C编译程序把文件后缀为 .c的源程序文件编译成文件后缀为 .obj的二进制文件 ( B) C编译程序把文件后缀为 .c的源程序文件编译成文件后缀为 .exe的可执行文件 ( C) C编译程序把文件后缀为 .obj的二
4、进制文件编译成文件后缀为 .exe的可执行文件 ( D)链接程序把文件后缀为 .c的源程序文件链接成文件后缀为 .exe的可执行文件 12 以下叙述正 确的是 ( A)循环结构、选择结构、顺序结构都是结构化程序的基本结构 ( B)计算机可以直接执行 C语言程序,不需要做任何转换 ( C)过于复杂的算法不能使用 N S流程图描述 ( D)只有不超过 20步操作步骤的算法才是简单算法 13 有如下程序 #include stdio.h main( ) int x = 072; printf(“X=%d.n“, x+1); 程序运行后的输出结果是 ( A) X=115 ( B) X=73 ( C)
5、X=59. ( D) X=72. 14 下面叙述正确的是 ( A)任何复杂任务都可以分解成简单子任务 ( B) C语言程序的所有函数只能处于同一个源文件中 WEr ( C)包含全部三种基本结构的程序才是结构化程序 ( D) C语言程序可以定义多个不同内容的 main函数 15 以下叙述正确的是 ( A) C程序总是以 main()作为程序执行的起始行 ( B) main()函数若不带参数,其后面的一对圆括号可省略 ( C)函数体内的定义语句和可执行语句允许任意穿插出现 ( D) C语言中的语句之间必须用分号作为分隔符 16 有以下程序 #include stdio.h main( ) char
6、 c; for(; (c=getchar() != #; ) putchar(+c); 执行时如输入为: abcdefg#回车 , 则输出结果是 ( A) abcdefg ( B) bcdefgh$ ( C) bcdefgh$ ( D) bcdefgh 17 有以下程序 #include stdio.h main( ) int a=1, b=0; for(; a 5; a+) if (a%2 = 0) break; continue; b += a; printf(“%d n“, b); 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) 10 ( D) 4 18 有以下程序 #in
7、clude stdio.h main( ) int x = 0x13; if (x = 0x12) printf(“True“); printf(“Falsen“); 程序运行后的输出结果是 ( A) True ( B) TrueFalse ( C) False ( D) TrueFalseTrue 19 为了避免在嵌套的 if-else语句中产生二义性, C语言规定与 else子句配对是 ( A)与其在同一行上的 if子句 ( B)在其之后最近的不带 else的 if子句 ( C)与其缩排位置相同的 if子句 ( D)在其之前最近的不带 else的同层 if子句 20 有以下程序 #incl
8、ude stdio.h main( ) int i,a; for (i=0; i =10; i+) a=i; printf(“%d,%dn“, i, a); 程序的运行结果是 ( A) 11,10 ( B) 10,10 ( C) 10,11 ( D) 11,11 21 有以下程序 #include stdio.h void fun(int a , int n) int i=0; for (i=0; i n; i+) if (i % 2 = 0) ai += n; else ai -= n; main( ) int c5 = 5,4,3,2,1, i; fun(c, 5); for (i=0;i
9、 5; i+) printf(“%d,“, ci); printf(“n“); 程序运行后的输出结果是 ( A) 10,-1,8,-3,6, ( B) 5,4,3,2,1, ( C) 10,2,8,4,6, ( D) 5,-1,3,-3,1, 22 有以下程序 #include stdio.h #define N 4 void fun(int aN) int i; for(i=0; i N; i+) a0i = aN-1N-1-i; main( ) int xNN= 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16, i; fun(x); for
10、(i=0; i N; i+) printf(“%d,“, xii); printf(“n“); 程序运行后的输出结果是 ( A) 16,6,11,16, ( B) 1,6,11,16, ( C) 4,7,10,13, ( D) 17,17,17,17, 23 有如下程序 #include stdio.h int convert(int* data) return (*data) +; main( ) int data = 56; convert( printf(“%d,“, data); data = convert( printf(“%d,n“, data); 程序运行后的输出结果是 ( A
11、) 56,57, ( B) 57,58, ( C) 57,57, ( D) 55,57, 24 设有如下程序段 int a1 = 0; int b = 9; char c3 = “A“, “B“; char d = “12“; 以下叙述正确的是 ( A) a, b的定义合法, c, d的定义不合法 ( B) a,b,c,d的定义都是合法的 ( C) a,b,c的定义是合法的, d的定义不合法 ( D)只有 a的定义是合法的 25 设有定义: int x=2,*p=float y=3.0; char z=c;,则立即进行以下运算有安全隐患的是 ( A) p+; ( B) x+; ( C) y+;
12、 ( D) z+; 26 有以下程序 #include stdio.h double fun(double a) double x; x = a - (int)a; return x; main( ) double a = 3.1415; printf(“%fn“, fun(a); 程序的运行结果是 ( A) 3.000000 ( B) 3.1415 ( C) 0.1415 ( D) 0 27 有以下程序 #include stdio.h #include string.h char *a = “you“; char *b = “Welcome you to Beijing!“; main(
13、) char *p; p = b; while (*p != *a) p+; p += strlen(a) + 1; printf(“%sn“, p); 程序运行后的输出结果是 ( A) Beijing! ( B) you to Beijing! ( C) Welcome you to Beijing! ( D) to Beijing! 28 有如下程序 #include stdio.h #include string.h main( ) printf(“%dn“, strlen(“0tnA0111“); 程序运行后的输出结果是 ( A) 8 ( B) 9 ( C) 7 ( D) 10 29
14、有如下程序 #include stdio.h int sum(int data) static int init = 1; return init += data; main( ) int i; for (i=1; i =1; i+) printf(“%d,“, sum(i); printf(“n“); 程序运行后的输出结果是 ( A) 2, ( B) 2,3, ( C) 3, ( D) 1, 30 有以下程序 #include stdio.h main( ) char s1 = “programe“, s2 = “Language“; char *p1 = s1, *p2 = s2; int
15、 k; for (k=0; k 8; k+) if (*(p1+k) = *(p2+k) printf(“%sn“,(p1+k); 程序的运行结果是 ( A) grame ame e e ( B) g a e ( C) programe ( D)无输出字符 31 以下针对全局变量的叙述错误的是 ( A)全局变量的作用域是从定义位置开始至源文件结束 ( B)全局变量是在函数外部任意位置上定义的变量 ( C)用 extern说明符可以限制全局变量的作用域 ( D)全局变量的生存期贯穿于整个程序的运行期间 32 有以下程序 #include stdio.h #include string.h typ
16、edef struct stu char name10; char gender; int score; STU; void f(STU *c) strcpy(c- name, “Qian“); c- gender = f; c- score = 350; main( ) STU a = “Zhao“, m, 290, b; b = a; f( printf(“%s,%c,%d,“, a.name, a.gender, a.score); printf(“%s,%c,%dn“, b.name, b.gender, b.score); 程序运行后的输出结果是 ( A) Zhao,m,290,Qi
17、an,f,350 ( B) Zhao,m,290,Qian,m,290 ( C) Zhao,m,290,Zhao,m,290 ( D) Zhao,m,290,Qian,m,350 33 下面关于编译预处理的命令行,正确的是 ( A) #define PAI 3.14 ( B) #Define Eps 0.00001 ( C) #DEFINE FALSE 0 ( D) #define int INT 34 有以下程序 #include stdio.h #define D(x) 2*x+3 main( ) int i = 1, j = 2; printf(“%dn“, D(i+j); 程序运行后的
18、输出结果是 ( A) 7 ( B) 6 ( C) 9 ( D) 2 35 有以下程序 #include stdio.h #include string.h struct S char name10; ; void change(struct S *data, int value) strcpy(data- name, “#“); value = 6; main( ) struct S input; int num = 3; strcpy(input.name, “OK“); change( printf(“%s,%dn“, input.name, num); 程序运行后的输出结果是 ( A)
19、OK,6 ( B) #,6 ( C) OK,3 ( D) #,3 36 有如下定义 struct st char name12; int age; char sex; std10,*p=std; 以下 语句错误的是 ( A) scanf(“%d“,p- age); ( B) scanf(“%s“,std0.name); ( C) scanf(“%d“, 37 有以下程序 #include stdio.h #include stdlib.h void fun(int *s, int x23) *s=*(x1+1); main() int a23 = 1,2,3,4,5,6, *p; p = (i
20、nt*)malloc(sizeof(int); fun( printf(“%dn“,*p); 程序的运行结果是 ( A) 6 ( B) 2 ( C) 5 ( D) 3 38 有如下定义 struct st int a; float b; x10; FILE *fp; 若文件已正确打开,且数组 x 的 10个元素均已赋值,以下将数组元素写到文件中的语句错误的是 ( A) for(i=0; i 10; i+) fwrite(x,sizeof(struct st),1,fp); ( B) fwrite(x,10*sizeof(struct st),1,fp); ( C) fwrite(x,sizeo
21、f(struct st),10,fp); ( D) for(i=0; i 10 ;i+) fwrite( 39 有以下程序 #include stdio.h int disp(char* str) while (*str) putchar(*str+); putchar(#); return *str; main() printf(“%dn“, disp(“C#123“); 程序运行后的输出结果是 ( A) C#123#0 ( B) C#1230 ( C) C#0 ( D) C#123#0 40 以下叙述中错误的是 ( )。 ( A)使用三种基本结构构成的程序只能解决简单问题 ( B)结构化程
22、序由顺序、分支、循环三种基本结构组成 ( C) C语言是一种结构化程序 设计语言 ( D)结构化程序设计提倡模块化的设计方法 二、程序填空题 41 下列给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。 例如,输入一个整数 27638496,函数返回值为 64862。 清在程序的下画线处填人正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlo h unsigned long fun(unsigned long
23、 n) unsigned long x=0; int t; while(n) t=n 10; /*found*/ if(t 2=【 1】 ) /*found*/ x=【 2】 +t; /*found*/ n=【 3】 ; return x; main() unsigned long n=一 1; while(n 99999999 |n 0) printf(”Please input(0 n 100000000): ”); scanf(” ld”, n); ) printf(” nThe result is: ld n”, fun(n); 三、程序修改题 42 下列给定程序中,函数 fun的功能
24、是:将 s所指字符串中位于奇数位置的字符或 ASCII码值为偶数的字符依次放入 t所指数组中。例如,字符串中的数据为“AABBCCDDEEFF”,则输出应当是 “ABBCDDEFF”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h #include string h #define N 80 void fun(char*S, char t) int i, j=0; for(i=0; i (int)strlen(S); i+) /*found*/
25、if(i 2 si 2=0) tj+=Si; /*found*/ ti= 0; main() char SN, tN; printf(“ nPlease enther string S: ”); gets(S); fun(s, t); printf(“ nThe result is: s n”, t); 四、程序设计题 43 函数 fun的功能是:将 s所指字符串中下标为偶数的字符删除,剩余字符形成的新串放在 t所指的数组中。 例如,当 s所指字符串中的内容为 “ABCDEFGHUK”时,在 t所指数组中的内容应是 “BDFHJ”。 注意:部分源程序给出如下。 请勿改动函数 main和其他函数
26、中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include conio h #include stdio h #include string h void fun(char*s, char t) void main() char s100, t100; system(“CLS”), printf(“ nPlease enter string S: ”); scanf(“ 8”, s); fun(s, t), printf(“ nThe result is: s n”, t); 国家二级( C语言)机试模拟试卷 52 答案与解
27、析 一、选择题 1 【正确答案】 B 【试题解析】 对象的基本特点是:标识 唯一性、分类性、多态性、封装性、模块独立性好。封装是指隐藏对象的属性和实现细节,将数据和操作结合于统一体,仅对外提供访问方式, B 选项正确。 2 【正确答案】 A 【试题解析】 E-R模型和关系模式的对照表如下:由表中可以看出,联系转换为关系数据库的关系, A选项正确。 3 【正确答案】 B 【试题解析】 顺序表和链表的优缺点比较如下表:由表中可以看出链式存储插入与删除运算效率高,故 B 选项正确。 4 【正确答案】 B 【试题解析】 在树结构中,定义一棵树的根结点所在的层次为,其他结点 所在的层次等于它的父结点所在
28、的层次加,树的最大层次称为树的深度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。深度为 6的满二叉树,结点个数为 26-1=63,则第 7层共有 125-63=62个叶子结点,分别挂在第 6层的左边 62 个结点上,加上第 6层的最后 1个叶子结点,该完全二叉树共有 63个叶子结点,故 B选项正确。 5 【正确答案】 C 【试题解析】 有序是特指元素按非递减排列,即从小到大排列,但允许相邻元素相等, A选项错误。有序表可以顺序存储也可以链式存储, B 选项错。能使用二分法查找的线性表必须满足两个条件:用顺序存储结构;线性表是有序表, D选项错误。故
29、 C选项正确。 6 【正确答案】 C 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为 ABDEGCFH,中序遍历为 DBGEAFHC,后序遍历为 DGEBHFCA,故 C选项正确。 7 【正确答案】 D 【试题解析】 计算机软件由两部分 组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故 D选项正确。 8 【正确答案】 B 【试题解析】 需求分析阶段的工作可以分为个方面:需求获取
30、、需求分析、编写需求规格说明书和需求评审。故 B 选项正确。 9 【正确答案】 A 【试题解析】 数据独立性包括物理独立性和逻辑独立性,物理独立性指数据的物理结构的改变,不会影响数据库的逻辑结构,也不会引起应用程序的改动;逻辑独立性指数据库的总体逻辑结构的改变,不会导致相应的应用程序的改变。故 A选项正确 。 10 【正确答案】 A 【试题解析】 用于查询的 3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。投影,从关系模式中指定若干个属性组成新的关系, T 相较于 R没有缺少属性,故 B 选项错误。选择,从关系中找出满足给定
31、条件的元组的操作称为选择, T 相较于 R增加了元组,故 D选项错误。交: RS结果是既属于 R又属于 S的记录组成的集合, T中元组多于 R与 S,故 C选项错误。并: R S是将 S中的记录追加到 R后面,与题目中结果相符,故 A选项正确。 11 【正确答案】 A 【试题解析】 C编译程序把文件后缀为 .c的源程序文件编译成文件后缀为 .obj的二进制文件,链接将一个或多个目标文件与程序用到的库文件连接起来 ,形成一个可以在操作系统直接运行的执行程序 .exe,故排除 B,C,D选项,答案选 A选项。 12 【正确答案】 A 【试题解析】 计算机只能识别机器语言, C语言是高级语言,计算机
32、无法直接执行,排除 B选项; N-S流程图是复杂流程算法的描述手段,因此 C选项错误;算法的复杂与简单,不能用操作步骤数来衡量, D选项错误;循环结构、选择结构、顺 序结构都是结构化程序的基本结构,答案为 A选项。 13 【正确答案】 C 【试题解析】 x定义为 072,表示 x为一个八进制数, %d代表十进制整数输出, x需要转化成十进制为 58,在输出时, x+1=59,再输出,答案为 C选项,另外输出时不能忘记 “.“。 14 【正确答案】 A 【试题解析】 C语言程序的函数可以处于不同的源文件, B 选项错误;包含一种基本结构的程序就是结构化程序, C选项错误; C语言只可以定义一个
33、main 函数, D选项错误,答案为 A选项。 15 【正确答案】 A 【试题解析 】 main()函数后面的括号告诉编译器这是一个函数,不可以省略,排除 B 选项;在复合语句中,不仅可以有执行语句,还可以有定义语句,定义语句应该出现在执行语句的前面,故排除 C选项; C语言中的某些语句可以不用分号,例如 if 语句,故 D选项错误;答案为 A选项。 16 【正确答案】 D 【试题解析】 for语句中执行的含义是,每次把输入赋给 c值,如果不等于 #,则执行 putchar(+c),即将当前 c值在 ASCII码上 +1后再输出字符型 c值, c的值等于 #,则终止循环,所以输出应该是 bcd
34、efgh,答 案为 D选项。 17 【正确答案】 A 【试题解析】 题干中 for循环有 break 和 continue语句,且均放在 b+=a语句前面,无论 if 条件是否满足, b+=a都不会被执行,因此 b值始终为 0,答案为 A选项。 18 【正确答案】 B 【试题解析】 if( x=0x12)表示 x=0x12! =0即 x=0x12为假时,执行printf(“True“),再执行 printf(“Falsen“),因此答案为 B 选项,注意赋值操作符“=“与相等操作符 “=“的区别。 19 【正确答案】 D 【试 题解析】 注意 if与 else的配对关系。原则是 if 总是与它
35、上面最近的、未配对的 else配对,因此答案为 D选项。 20 【正确答案】 A 【试题解析】 当 i=10时, i值赋值给 a,同时 i+1,再判定是否满足 i =10, i=11时 ,不满足条件,结束循环。循环结束时,输出 i,a的值为 11,10,答案为 A选项。 21 【正确答案】 A 【试题解析】 fun()函数功能是:对数组中,下标为偶数的元素累加 5,下标为奇数的元素减去 5,所以执行完 fun()函数后,数组 c变为 10, -1,8, -3,6, A选项正确。 22 【正确答案】 A 【试题解析】 程序最后输出 x00, x11, x22, x33,其中只有 x00的值在 f
36、un函数中发生改变,在 fun 函数中,当 i=0时, x00= x33=16,因此答案为 A选项。 23 【正确答案】 C 【试题解析】 convert 函数每次都定义了一个指针 *data,再将指针变量 *data对应地址的值进行加一处理,再返回加 1前的值作为结果,因此答案为 C选项。 24 【正确答案】 A 【试题解析 】 int a1=0表示定义一个数组 a1初值为 0, int b = 9,表示定义一个数组 b,其中只有一个值 9,系统自动识别数组有 1个元素。 char c3 = “A“, “B“,数组元素为字符串,需要用二维数组来表示, C选项错误 ; char d = “12
37、“;,字符串常量不能赋值给字符变量, D选项错误 ;因此答案为 A选项。 25 【正确答案】 A 【试题解析】 由于 x是一个整形变量,将 x地址赋值给 p指针后, A选项中 p+对指针 p 进行加 1运算, p 指针的值相当于加 4(整型变 量的地址占 4个字节),此时 p指向了未知的内存地址,对未知内存地址进行操作具有安全隐患,故答案为 A选项。 26 【正确答案】 B 【试题解析】 这里考查了强制转换的概念,在 fun 函数中, x=a-(int)a表示 x取值为 a的小数部分,因此,输入 a为 3.1415,输出 x=0.141500,答案为 C选项。 27 【正确答案】 D 【试题解
38、析】 while函数判断 p指针指向地址的内容是否和 a指针指向地址的内容相等,如果不是,则移动指针 p+1,当 p 指向 *b 字符串中的 y时,和 *a首地址元素相等,退 出 while语句后, p再向右移动 a字符串长度 +1个单位地址,此时 p指向 t,输出 t及剩余的字符串,答案为 D选项。 28 【正确答案】 A 【试题解析】 strlen 是求字符串长度的函数, “0tnA0111“是一个长度为 8的字符串,其中 t、 n、 1均为转移字符常量,但是长度也是 1,因此输出结果是 8,答案为 A选项。 29 【正确答案】 A 【试题解析】 在输出函数中,调用 sum函数, sum函
39、数作用是定义一个常数init=1,对 Init进行叠加主函数传递的 data值,随后将和返 回给主函数,因此输出为 2,答案为 A选项。 30 【正确答案】 A 【试题解析】 定义两个指针变量 p1,p2,分别指向数组 s1,s2 首地址,在 for循环中,比较两个指针对应地址的元素是否相等,如果相等,则输出当前指针指向地址的字符串,答案为 A选项。 31 【正确答案】 C 【试题解析】 在不同编译单位内用 extern 说明符来扩展全局变量的作用域,extern 可以将全局变量作用域扩展到其他文件,而不是限制全局变量的作用域,答案为 C选项。 32 【正确答案】 A 【试题解析】 本题定 义
40、了一个结构变量 struct stu,并且命名为 STU, STU结构中包含三个数据。 main 函数中,首先定义两个结构体 STU类型的变量 a, b,并对 a完成初始化,然后将 a赋值给 b,使得结构体 a, b 的值都是 “Zhao“, m, 290,然后调用 f 函数, f函数的功能是将形参结构体指针 c指向的结构体赋值为“Qian“, f, 350,由于形参是指针, c指向的结构体就是 b,所以实参 b的值被修改为 “Qian“, f, 350,而 a的值不变,答案为 A选项。 33 【正确答案】 A 【试题解 析】 宏定义用法一般表达式为 #define 宏名 字符串, A选项满足
41、宏定义用法; C语言中是区分大小写的, define属于 C语言的关键字,不可以大写 ,因此B, C选项错误; D选项中, int是代表整数类型,不满足 define用法, D选项错误,因此答案为 A选项。 34 【正确答案】 A 【试题解析】 宏定义只作简单的替换,输出中 D( i+j)表达式执行运算为2*i+j+3,代入 i,j,答案为 A选项。 35 【正确答案】 D 【试题解析】 声明结构类型 S 中有一个字符数组 name,在 main 函数中,定 义了一个结构变量 input,为 input中成员 name初始化 “ok“后,调用 change()函数。 chang()执行功能是把
42、 “#“赋值给 name,由于 change()函数的形参为结构体指针,因此 change函数改变形参指针 data 指向的 name值的同时,也改变了实参input的成员 name值;而形参 value为整型变量, change函数改变 value值的同时不影响实参 num,所以输出为 #,3。答案为 D选项。 36 【正确答案】 A 【试题解析】 A选项中, p- age是结构指针访问结构成员的方式, 如果为结构体内变量进行赋值,应该对指针地址指向的单元进行赋值,因此在 p- age前面应该加入取地址符 &, A选项语句错误,答案为 A选项。 37 【正确答案】 C 【试题解析】 mall
43、oc( size)函数作用是在内存的动态存储区分配一个长度为size的连续空间,函数的返回值是新分配的存储区的首地址,将该地址赋值给 p指针,然后取 p指针的地址,调用 fun函数。 fun 函数中对指向指针的指针 s指向的内存单元赋值,其中 x1表示二维数组 x的第二行的行地址, x1+1表示二维数组x的第二行第二列的地址,所以 fun函数的功能是将二维数组 x的第二行第二列的值,即 x11赋值给 *s, *s为 p,所以 *s代表 *p, x11与 a11等价,因此答案为 C选项。 38 【正确答案】 A 【试题解析】 fwrite()函数用法是 fwrite( void *buffer,
44、int size,int n,FILE *fp) ,其中 buffer为要输出的数据的首地址, A选项中,因为 n=1,即每次写入 1个结构体数据, x是数组的首地址,因此,每次写入的数据都是数组的首个结构体元素,没有将整个数组写入文件中去,答 案为 A选项。 39 【正确答案】 A 【试题解析】 disp()函数中,存在 while循环,当指针指向地址单元存储的字符不等于空字符 0,输出此字符,否则退出循环,输出 #。在主函数中调用 disp()函数时,字符串 “C#123“先全部输出,当指针指向字符串最后空字符时,退出循环,输出 #,并且再将 0返回输出,由于 disp()函数返回类型为
45、int,所以返回 0的 ASCII 码 0,因此,答案为 A选项。 40 【正确答案】 A 【试题解析】 使用顺序,选择 (分支 ),循环三种基 本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以 A)错误。 二、程序填空题 41 【正确答案】 (1)0 (2)10*x (3)n/10 【试题解析】 填空 1:定义变量 t用米存放某数的各个位数值,此处判断 t是否为偶数,即对 2求余结果是否为 0。 填空 2:将 t作为 x的个位数,原来 x的各个位上升 1位,即 x=10*x+t。 填空 3:每循环一次,通过除法运算,去掉数值最后一位。 三、程序修改题 42 【正确答案】 (1)i
46、f(i 2 | si 2=0)或 if(i 2 ! =0 | si 2=0) (2)tj= 0;或 tj=0; 【试题解析】 (1)根据题意,将字符串 s中位于奇数位置的字符或 ASCII码值为偶数的字符,依次放入字符串 t中,所以 if条件中要使用 “或 ”运算。 (2)变量 j控制字符串 t的下标,所以是 tj。 四、程序设计题 43 【正确答案】 void fun(char*s, char t) int i, j=0, k=strlen(s); *k为字符串的长度 * for(i=1; i k; i=i+2) *将 s所指字符串中下标为奇数的字符存入 t所指字符串中 * tj+=si; tj= 0; *在字符串最后加上结束标识 * 【试题解析】 本题使用了一种 i永远是奇数的循环方法,即 “for(i=1; i k;i=i+2)”,因为开始时 i的值为 1,当 i+2 循环时,值永远是奇数。循环结束后在新串的尾部加上结束符 0。