1、国家二级( C语言)机试模拟试卷 153及答案与解析 一、选择题 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)类之间共享属性和操作的机制 6 以下叙述中正确的是 ( )。 ( A)程序设计的任务就是编写程序代码并上机调试 ( B)程序设计的任务就是确定所用数据结构 ( C)程序设计的任务就是确定所用算法 ( D)以上三种说法都不完整 7 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)可行性分析报告 ( B)软件需求规格说明
3、书 ( C)概要设计说明书 ( D)集成测试计划 8 软件详细设计产生的图如下: 该图是 ( )。 ( A) N-S图 ( B) PAD图 ( C)程序流程图 ( D) E-R图 9 在黑盒测试方法中,设计测试用例的主要依据是 ( )。 ( A)程序内部逻辑 ( B)程序外部功能 ( C)程 序数据结构 ( D)程序程序流程 10 有三个关系 R, S和 T如下: 其中关系 T由关系 R和 S通过某种操作得到,该操作为 ( )。 ( A)选择 ( B)投影 ( C)交 ( D)并 11 下面是有关 C语言字符数组的描述,其中错误的是 ( )。 ( A)不可以用赋值语句给字符数组名赋字符串 (
4、B)可以用输入语句把字符串整体输入给字符数组 ( C)字符数组中的内容不一定是字符串 ( D)字符数组只能存放字符串 12 计算机能直接执行的程序是 ( )。 ( A)源程序 ( B)目标程序 ( C)汇编 程序 ( D)可执行程序 13 以下选项中,能用作用户标识符的是 ( )。 ( A) void ( B) 8_8 ( C) _0_ ( D) unsigned 14 若有以下程序段: int r=8; printf(“ d n“, r 1); 输出结果是 ( )。 ( A) 16 ( B) 8 ( C) 4 ( D) 2 15 有以下定义语句,编译时会出现编译错误的是 ( )。 ( A)
5、char a=a ( B) char a= n; ( C) char a=aa; ( D) char a= x2d 16 有以下程序: #include stdio h main() char c1, c2; c1=A+8一 4; c2=A+8一 5; printf(“ c d n“, c1, c2); 已知字母 A的 ASCII码为 65,程序运行后的输出结果是 ( )。 ( A) E 68 ( B) D 69 ( C) E D ( D)输出无定值 17 有如下语句: k=a b?(b c?1: 0): 0;, 以下程序段中,与上述语句功能相同的是 ( )。 ( A) if(a b)&(b
6、c)k=1; else k=0; ( B) if(a b) (b c), k=1; else k=0; ( C) if(a =b)k=0; else if(b =c)k=1; ( D) if(a b)k=1; else if(b c)k=1; else k=0; 18 设有定义: int a=1, b=2, c=3;,以下语句中执行效果与其他三个不同的是( )。 ( A) if(a b)c=a, a=b, b=c; ( B) if(a b)c=a, a=b, b=c ( C) if(a b)c=a; a=b; b=c; ( D) if(a b)c=a; a=b; b=c 19 有以下程序: #
7、include stdio h main() int n=2, k=0; while(k+&n+ 2); printf(“ d d n“, k, n); 程序运行后的输出结果是 ( )。 ( A) 0 2 ( B) 1 3 ( C) 5 7 ( D) 1 2 20 以下函数中, findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。 #define MIN一 2147483647 int findmax(int x, int n) int i, max; for(i=0; i n; i+) max=MIN; if(max xi)max=xi; return
8、max; 造成错误的原因是 ( )。 ( A)定义语句 int i, max;中 max未赋初值 ( B)赋值语句 max=MIN;中,不应给 max赋 MIN值 ( C)语句 if(max xi)max=xi;中判断条件设置错误 ( D)赋值语句 max=MIN;放错了位置 21 有以下程序: #include stdio h main() int a=2, 3, 5, 4), i; for(i=0; i 4; i+) switch(i 2) case 0: switch(ai 2) case 0: ai+; break; case 1: ai一一; break; case 1: ai=0;
9、 for(i=0; i 4; i+) printf(“ d“, ai); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) 3344 ( B) 2050 ( C) 3040 ( D) 0304 22 下列函数的功能是 ( )。 fun(char *a, char *b) while(*b= *a)!= 0 a+; b+; ( A)将 a所指字符串赋给 b所指空间 ( B)使指针 b指向 a所指字符串 ( C)将 a所指字符串和 b所指字符串进行比较 ( D)检查 a和 b所指字符串中是否有 0 23 有以下程序: #include stdio h main() int c
10、ase; float printF; printf(“请输入 2个数: “); scanf(“ d f“, &case, &printF); printf(“ d f n“, case, printF); 该程序编译时产生错误,其出错原因是 ( )。 ( A)定义语句出错, case是关键字,不能用作用户自定义标识符 ( B)定义语句出错, printF不能用作用户自定义标识符 ( C)定义语句无错, scanf不能作为输入函数使用 ( D)定义语句无错, printf不能输出 case的值 24 有以下程序: #include stdio h main() int c=0, k; for(k
11、=1; k 3; k+) switch(k) default: c+=k; case 2: c+; break; case 4: c+=2; break; printf(“ d n“, c); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 5 ( C) 7 ( D) 9 25 设有定义: char *c;,以下选项中能够使字符型指针 c正确指向一个字符串的是 ( )。 ( A) char str=“string“; c=str; ( B) scanf(“ s“, c); ( C) c=getchar(): ( D) *c=“string“; 26 有以下程序: #include s
12、tdio h #include string h main() char a10=“abcd“; printf(“ d, d n“, strlen(a), sizeof(a); 程序运行后的输出结果是 ( )。 ( A) 7, 4 ( B) 4, 10 ( C) 8, 8 ( D) 10, 10 27 有以下程序: #include stdio h main() char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(si =a&si =z) n+; printf(“ d n“, n); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 2
13、 ( C) 3 ( D) 5 28 若有定义语句: int a410, *p, *q4;且 0i 4,则错误的赋值是 ( )。 ( A) p=a ( B) qi=ai ( C) p=ai ( D) p= a21 29 有以下程序: #include stdio h #include string h main() char str20=“One *World“, “One*Dream!“), *p=str1; printf(“ d, “, strlen(p); printf(“ s n“, p); 程序运行后的输出结果是 ( )。 ( A) 9, One*World ( B) 9, One*D
14、ream! ( C) 10, One*Dream! ( D) 10, One*World 30 有以下程序: #include stdio h void fun(int p) int d=2; p=d+; printf(“ d“, p); main() int a=1: fun(a); printf(“ d n“, a); 程序运行后的输出结果是 ( )。 ( A) 32 ( B) 12 ( C) 21 ( D) 22 31 有以下程序: #include stdio h int f(int n) static int a=1: n+=a+; return n; main() int a=3,
15、 s; s=f(a); s=s+f(a); printf(“ d n“, s); 程序运行以后的输出结果是 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 32 设有定义: double a10, *s=a;,以下能够代表数组元素 a3的是 ( )。 ( A) (*s)3 ( B) *(s+3) ( C) *s3 ( D) *s+3 33 下列关于 return语句的叙述中,正确的是 ( )。 ( A)一个自定义函数中必须有一条 return语句 ( B)一个自定义函数中可以根据不同情况设置多条 return语句 ( C)定义成 void类型的函数中可以有带返回值的 ret
16、urn语句 ( D)没有 return语句的自定义函数在执行结束时不能返回到调用处 34 在源程序的开始处加上 “#include stdio h ”进行文件引用的原因,以下叙述正确的是 ( )。 ( A) stdio文件中包含标准输入 输出函数的函数说明,通过引用此文件以便能正确使用 printf、 scanf等函数 ( B)将 stdio h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行 ( C)将 stdio h中标准输入输出函数的源程序插入到引用处,以便进行编译链接 ( D)将 stdio h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链接 35 设有以下函
17、数: void fun(int n, char*s) 则下面对函数指针的定义和赋值均是正确的是 ( )。 ( A) void(*pf)(); pf=fun; ( B) void *pf(); pf=fun; ( C) void *pf(); *pf=fun; ( D) void(*pf)(int char); pf=&fun; 36 有以下程序: #include stdio h main() int m=1, n=2, *p=&m, *q=&n, *r; r=p; p=q; q=r; printf(“ d, d, d, d n“, m, n, *p, *q); 程序运行后的输出结果是 ( )
18、。 ( A) 1, 2, 1, 2 ( B) 1, 2, 2, 1 ( C) 2, 1, 2, 1 ( D) 2, 1, 1, 2 37 有以下程序: #include stdio h #define f(x)x*x*x main() int a=3, s, t; s=f(a+1); t=f(a+1); printf(“ d, d n“, s, t); 程序运行后的输出结果是 ( )。 ( A) 10, 64 ( B) 10, 10 ( C) 64, 10 ( D) 64, 64 38 下面结 构体的定义语句中,错误的是 ( )。 ( A) struct ordint x; int y; in
19、t z; ; structord a; ( B) struct ordint x; int y; int z; structord a; ( C) struct ordint x; int y; int z; a; ( D) structint x; int y; int z; a; 39 有以下程序: #include stdio h #include string h struct A int a; char b10; double c; ; struct A f(struct A t); main() struct A a=1001, “ZhangDa“, 1098 0; a=f(a);
20、 printf(“ d, s, 6 1f n“, a a, a b, a c); struct A f(struct A t) t a=1002; strcpy(t b, “ChangRong“); t c=1202 0; return t; 程序运行后的输出结果是 ( )。 ( A) 1001, ZhangDa, 1098 0 ( B) 1002, ZhangDa, 1202 0 ( C) 1001, ChangRong, 1098 0 ( D) 1002, ChangRong, 1202 0 40 以下叙述中正确的是 ( )。 ( A)当对文件的读 (写 )操作完成之后,必须将它关闭,否则
21、可能导致数据丢失 ( B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( C)在一个程序中当对文件进 行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( D) C语言中的文件是流式文件,因此只能顺序存取数据 二、程序填空题 41 下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数 fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include
22、 stdlib h #define N 8 typedef struct list int data; struct list*next; SLIST; void fun(SLIST *h) SLIST *p, *q; p=h一 next; if(p!=NULL) q=p一 next; while(q!=NULL) if(p一 data=q一 data) p一 next=q一 next; *found* free(【 1】 ); *found* q=p一【 2】; else p=q; *found* q=q一【 3】; SLIST *creatlist(int *a) SLIST *h, *p
23、, *q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; i N; i+) q=(SLIST *)malloc(sizeof(SLIST); q一 data=ai; p一 next=q; p=q; p一 next=0; return h; void outlist(SLIST *h) SLIST *p; p=h一 next; if(p=NULL) printf(“The list is NULL! n“); else printf(“ nHead“); do printf(“一 d“, p一 data); p=p一 next; while
24、(p!=NULL); printf(“一 End n“); main() SLIST *head; int aN=1, 2, 2, 3, 4, 4, 4, 5; head=creatlist(a); printf(“The list before deleting: n“); outlist(head); fun(head); printf(“The list after deleting: n“); outlist(head); 三、程序修改题 42 下列给定程序中,函数 fun的功能是:求两个非零正整数的最大公约数,并作为函数值返回。 例如,若 num1和 num2分别为 49和 21,则
25、输出的最大公约数为 7;若 num1和num2分别为 27和 81,则输出的最大公约数为 27。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdio h int fun(int a int b) int r, t; if(a b) *found* t=a; b=a; a=t; r=a b; while(r!=0) a=b; b=r; r=a b; *found* return(a); main() int num1, num2, a; printf(“Input num1 n
26、um2: “); scanf(“ d d“, num1, num2); printf(“num1= d num2= d n“, num1, num2); a=fun(num1, num2); printf(“The maximun common divisor is d n“, a); 四、程序设计题 43 请编写函数 fun,其功能是:计算并输出给定数组 (长度为 9)中每相邻两个元素的平均值的平方根之和。 例如,若给定数组中的 9个元素 依次为 12 0、 34 0、 4 0、 23 0、 34 0、45 0、 18 0、 3 0, 11 0,则输出应为 S=35 951014。 注意:请
27、勿改主动函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 #include stdio h #include math h double fun(double x9) main() double s, a9=12 0, 34 0, 4 0, 23 0, 34 0, 45 0, 18 0, 3 0,11 0; int i; FILE *out; printf(“ nThe original data is: “); for(i=0; i 9; i+) printf(“ 6 1f“, ai); printf(“ n“); s=fun(a): printf(“s
28、= f n“, s); * out=fopen(“out dat“, “w“); fprintf(out, “ f“, s); fclose(out); * 国家二级( C语言)机试模拟试卷 153答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 算法的空间复杂度是指算法在执行过程中所需要的计算机存储空间。通常用 o()来表示。 2 【正确答案】 D 【试题解析】 在循环队列中,用队尾指针 (rear)指向队列中的队尾元素,用队头指针 (front)指向队头元素的前一个位置。在循环队列中,一般情况下 rearfront,当存储空间的最后一个位置被使用,而新元素要入队时,如果存储空间的
29、第一个位置空闲,便可将元素插入到第一个位置,此时存储空间的第一个位置作为队尾,便有 front rear。 3 【正确答案】 B 【试题解析】 栈是按照 “先进后出 ”原则在表特定的一端进行插入和删除运算操作的线性表。 4 【正确答案】 A 【试题解析】 结构化程序设计的基本原则包括: 模块化设计; 自顶向下原则; 逐步求精原则; 限制使用 goto语句。可封装是面向对象的设计思想。 5 【正确答案】 D 【试题解析】 继承是面向对象方法的一个主要特征,是使用已有的类的定义作为基础建立 新类的定义技术。在广义上来说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,因而说继承是指类之间
30、共享属性和操作的机制。 6 【正确答案】 D 【试题解析】 程序设计是指设计、编程、调试程序的方法和过程,通常分为 4个阶段: 问题建模; 算法设计; 编写代码; 编译调试。其工作内容涉及有关的基本概念、工具及方法,是目标明确的智力活动。 7 【正确答案】 B 【试题解析】 可行性分析报告是在可行性分析阶段产生的, A选项错误;概要设计说明书是总体设计阶段产生的文档, C选项错误;集成测 试阶段是在概要设计阶段编写的文挡, D选项错误。需求规格说明书是后续工作如设计、编码等需要的重要参考文档。 8 【正确答案】 C 【试题解析】 程序流程图基本图符有 3种:控制流 (用箭头表示 )、加工步骤
31、(用方框表示 )、逻辑条件 (用菱形表示 )。控制结构有 5种: 顺序结构; 选择结构; 多分支选择结构; 后判断重复型结构; 先判断重复型结构。题目中是选择结构的程序流程图。 9 【正确答案】 B 【试题解析】 黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试完全不考虑程序内部的逻 辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明。故 B选项正确。 10 【正确答案】 D 【试题解析】 选择和投影操作对单个关系进行操作,选择运算是对行的操作,投影运算是对列的操作,运算结果是一个关系。交和并运算要求参与运算的表具有相同的属性,交运算的结果是
32、两个表的公共部分,并运算的结果包含两个表的所有元素。 11 【正确答案】 D 【试题解析】 字符数组可以用来存放单个的字符或者字符串。 12 【正确答案】 D 【试题解析】 由高级语言编写 的程序称为 “源程序 ”,由二进制代码表示的程序称为 “目标程序 ”。由汇编语言编写的程序称为 “汇编程序 ”。对于计算机本身来说,它只能接收和处理由 0和 1的代码构成的二进制指令和数据。所以计算机能识别的程序是 “目标程序 ”,而计算机可以直接执行的程序是可执行程序,即扩展名为 exe的程序。 13 【正确答案】 C 【试题解析】 标识符是由若干个字符组成的字符序列,用来命名程序的一些实体。 C语言定义
33、标识符应遵循以下六种规则: 标识符由字母、数字或下画线组成; 第一个字符必须是字母或下画线; 标识符最多由 274个 字符组成; 在标识符中严格区分大小写字母; 关键字不能作为自定义的标识符在程序中使用。 14 【正确答案】 C 【试题解析】 C语言中 “ ”是对二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位信息舍去,在高位补 0,将所得的结果再赋值给变量。本题中 8的二进制为 00001000,右移一位得到 00000100,所以是 4。 15 【正确答案】 C 【试题解析】 本题中 a为一个字符型变量,只能为其赋值一个字符常量。 C项中aa不是字符常量,
34、所以会编译错误。 BD两项为转义字符,编译可以通过。 16 【正确答案】 A 【试题解析】 C语言中每个字符都对应一个 ASCII码值,该值可以用来运算。本题中 main函数将字符 A经过加 4和加 3运算后分别赋值给 c1、 c2,然后将 c1按字符格式输出, c2按整型格式输出。 17 【正确答案】 A 【试题解析】 三元运算符表达式的形式为:表达式 1?表达式 2:表达式 3,当表达式 1的值为真时,结果为表达式 2的值;当表达式 1的值为假时,结果为表达式 3的值。首先判断 a、 b的关系: 如果 a b,那么就执行 “: ”前面的语句 (bc?1: 0);判断 b、 c的关系,如果
35、b c, k=1,否则 k=0; 如果 a =b,则k=0。综上所述:当 a b且 b c时, k=1,否则 k=0,与 A项语句功能相同。 18 【正确答案】 C 【试题解析】 C语言中 if语句后面只跟一条语句时,可以省略大括号。即 if语句仅作用于紧随其后的那条语句或者是复合语句的内容,所以 A项执行三条语句组成的复合语句; BD两项执行大括号中的三条语句;而 C项只执行 c=a;。 19 【正确答案】 D 【试题解析】 (表达式 1)&(表达式 2)中,如果表达式 1为假或 0,那么表达式 2就不会被执行。本题中首先进入 while的判断语句,执行 k+和 n+。 k+为零,不满足循环
36、条件,所以 n+不会被执行, while循环结束后, k经过运算自增为1, n没有进行运算,仍为 2。 20 【正确答案】 D 【试题解析】 本题中 for循环中首先将 MIN值赋值给 max,然后用 xi与 max的值比较。每次都是将 MIN值与 xi值进行比较,所以无论 xi的值是什么,都不会影响 if的判断语句, max=i始终执行。所以函数返回的是数组中最后一个元素的值。本题的错误在于 max=MIN的位置, for循环之前应先执行 max=MIN。 21 【正确答案】 C 【试题解析】 main函数的主体是一个 for循环语句, for循环中包含一个 switch语句,如果判断条件为
37、 0则进入第二个 switch语句,如果判断语句为 1则执行“ai=0”,最后将数组顺序输出。所以程序的功能是将数组的偶数项设为 0,奇数项如果为奇数则减 1,为偶数就加 1,最后得到结果。 22 【正确答案】 A 【试题解析】 题中 a和 b是两个字符型指针,在 while语句的表达式中将指针 a所指向的字符赋给指针 b所指向 的内存单元,再判断指针 b所指向的字符是不是字符串中的结尾符。若不是,则字符指针 a和 b的值分别自增,再执行循环语句,直至 b所指向的字符为字符串中的结尾符。 23 【正确答案】 A 【试题解析】 C语言中,关键字又称保留字,它是系统预先定义的、具有特定含义的标识符
38、,不能用作用户自定义的标识符在程序中使用。 24 【正确答案】 A 【试题解析】 本题中 for语句的主体为一个 switch语句, switch语句的判断条件k=2时执行 “case 2”,然后终止本层 switch;否则执行 “default”语句,然后再执行“case 2”语句,并终止本层 switch语句。所以当 k=1时: c=012 ;当 k=2时: c=23 ;当 k=3时 for循环结束。结果为 3。 25 【正确答案】 A 【试题解析】 B选项中 scanf()函数是将 c定义为一个字符数组的数组名, C选项中是将 c定义为一个字符型变量, D项是在指针定义时为它赋值,否则是
39、不合法的,所以 BCD三项都不正确。 A选项定义字符数组 str,再将字符数组 str的首地址赋给字符型指针 c,正确。 26 【正确答案】 B 【试题解析】 在 C语言中, strlen()用来统计字符串中字符的个数, sizeof()是求分配给数组的存储空间大小。题目中字符串 a中字符个数为 4,但由于数组 a定义含有 10个字符,所以所占空间大小为 10。 27 【正确答案】 B 【试题解析】 本题 main函数的作用就是判断字符串 s中小写字母的个数,显然结果为 2。 28 【正确答案】 A 【试题解析】 二维数组名是指向指针的指针,所以 a和 q都为指向指针的指针,而 p为指向 in
40、t类型的指针, p和 a不同类型,故 A项 p=a赋值语句错误。其余选项可以正确赋值,其中 D项是用 &返回整数的地址,然后复赋值 p。 29 【正确答案】 C 【试题解析】 本题将两个字符串常量赋值给一个二维字符数组,用字符常量为字符数组赋值需要在最后加上一个结束符 “ O“表示字符串结束,所以数组长度为字符的个数加 1,而且数组的下标是从 0开始计数,所以 p指向第二个字符串。 30 【正确答案】 C 【试题解析】 C语言中函数参数传递满足 “单向传递 ”,实现传递值的功能,实参能传给形参,形参却不能传回给实参。 fun函数体内输出 p的值为 2,并不影响到fun函数外 a的值, a的值在
41、 main函数 内依然为 1。 31 【正确答案】 C 【试题解析】 在函数 f中,整型变量 a为静态变量,所以每次调用函数 f时不再为 a重新赋值,而且 a的值只有在程序结束时才被释放。第一次调用 f后 n=4,a=2;第二次调用时, a已经变成 2了,所以结果为 4+5=9。 32 【正确答案】 B 【试题解析】 本题考查通过指针引用数组元素。比如要引用 a3,有 3种引用方法, *(a+3)、 *(s+3)和 s3三者是等价的,都可以用来引用 a3。故 B选项正确。 33 【正确答案】 B 【试题解析】 一个自 定义函数中可以没有 return语句,没有 return语句的自定义函数执行
42、完函数体结束时,自动返回到函数调用处,并带回不确定的值;定义成 void类型的函数中不能有带返回值的 return语句;所以选项 A、 C、 D错误。一个自定义函数中可以根据不同情况设置多条 return语句,根据程序执行流程,选择执行其中一条 return语句带值返回。故 B选项正确。 34 【正确答案】 A 【试题解析】 “stdio h”文件中包含标准输入输出函数的函数说明,预处理指令#include stdio h是指程序可以在该文 件中找到 printf、 scanf等函数。 35 【正确答案】 A 【试题解析】 函数指针的一般定义形式为:数据类型 (*指针变量名 )()。 D项中,
43、void(*pf)(int, char)带有两个数据类型,不符合函数指针定义。 36 【正确答案】 B 【试题解析】 本题定义了两个整型变量,然后用两个指针分别指向这两个整型变量,接着对指针进行交换,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。 37 【正确答案】 A 【试题解析】 C语言中带参 数的宏可以理解为用参数直接替代定义式中的变量,而不经过任何修改。所以 s=f(a+1)=a+1*a+1*a+1, t=f(a+1)=(a+1)*(a+1)*(a+1),所以有无括号的运算结果是不同的。 38 【正确答案】 B 【试题解析】 C语言中结构体变量
44、的定义有 3种方法: 定义结构体类型的同时定义结构体变量,如 C项; 使用无名结构体类型定义结构体变量,如 D项; 先定义结构体类型,后定义结构体变量,如 A项。 39 【正确答案】 D 【试题解析】 函数 f对结构体进行修改,并返回新的结构体 ; main函数先定义了一个结构体变量 a并为它赋初值,然后调用函数 f修改结构体变量的成员值,最后输出新的结构体变量成员。 40 【正确答案】 A 【试题解析】 B选项中,打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等; C选项中,在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开后,
45、才能读到第 1个数据,可以用 fseek()函数进行重新定位即可; D选项中, C语言中的文件可以进行随机读写。故 A选项正确。 二、程序填空题 41 【正确答 案】 (1)q (2)next (3)next 【试题解析】 本题考查:释放内存空间函数 free();链表结点的基本操作。 填空 1:使用 free函数,释放 q所指的内存空间,其一般格式为: free(指针变量 )。 填空 2和填空 3:删除链表中符合条件结点后,指针要指向下一个结点。 三、程序修改题 42 【正确答案】 (1)t=a; a=b; b=t; (2)return(b);或 return b; 【试题解析】 本题考查:
46、 return语句,功能是计算表达式的 值,并将其返回给主调函数。求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将m除以 n(m n)得余数 r,再用余数 r去除原来的除数,得到新的余数,重复此过程直到余数为 0时停止,此时的除数就是 m和 n的最大公约数。 (1)程序首先判断参数 a和 b的大小,如果 a b则进行交换,这里是一个数学逻辑错误,应先将 a的值赋给中间变量 t,再将 b的值赋给 a,最后将 t的值赋给b。 (2)当余数 r为 0时,除数 b即为所求的最大公约数,所以函数应返回 b。 四、程序设计题 43 【正确答案】 double fun(double x9) double sum=0 0; int i, j=1; for(i=0; i 9; i+) if(j =8) sum+=sqrt(xi+xi+1) 2 0); *相邻两个元素之平均值的平方根之和 * j+; return sum: 【试题解析】 本题考查: for循环; sqrt函数 (平方根的计算 );复合赋值运算。 计算数组相邻两个元素的平均值,首先要取出数组中相邻 两个元素,即 xi和Xi+1。本程序使用循环语句遍历整个数组,在条件语句中计算相邻两个元素的平均值,并累加其平方根。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1