1、国家二级( C语言)机试模拟试卷 95及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)循环队列是队列的一种链式存储结构 ( B)循环队列是队列的一种顺序存储结构 ( C)循环队列是非线性结构 ( D)循环队列是一种逻辑结构 2 下列关于线性链表的叙述中,正确的是 ( )。 ( A)各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致 ( B)各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续 ( C)进行插入与删除时,不需要移动表中的元素 ( D)以上 说法均不正确 3 一棵二叉树共有 25个结点,其中 5个是叶子结点,则度为 1的结点数为 (
2、 )。 ( A) 16 ( B) 10 ( C) 6 ( D) 4 4 在下列模式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)外模式 ( B)内模式 ( C)概念模式 ( D)逻辑模式 5 在满足实体完整性约束的条件下 ( )。 ( A)一个关系中应该有一个或多个候选关键字 ( B)一个关系中只能有一个候选关键字 ( C)一个关系中必须有多个候选关键字 ( D)一个关系中可以没有候选关键字 6 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)交 ( C)除 ( D)并 7 下面描述中,不属于软件危机表现的是
3、( )。 ( A)软件过程不规范 ( B)软件开发生产率低 ( C)软件质量难以控制 ( D)软件成本不断提高 8 下面不属于需求分析阶段任务的是 ( )。 ( A)确定软件系统的功能需求 ( B)确定软件系统的性能需求 ( C)需求规格说明书评审 ( D)制定软件集成测试计划 9 在黑盒测试方法中,设计测试用例的主要根据是 ( )。 ( A)程序内部逻辑 ( B)程序外部功能 ( C)程序数据结构 ( D)程序流程图 10 在软件设计中不使用的工具是 ( )。 ( A)系统结构图 ( B) PAD图 ( C)数据流图 (DFD图 ) ( D)程序流程图 11 以下选项中关于程序模块化的叙述错
4、误的是 ( )。 ( A)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 ( B)把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块 ( C)把程序分成若干相对独立的模块,可便于编码和调试 ( D)可采用自顶向下 、逐步细化的设计方法把若干独立模块组装成所要求的程序 12 以下叙述中正确的是 ( )。 ( A)用 C语言编写的程序只能放在一个程序文件中 ( B) C程序书写格式严格,要求一行内只能写一个语句 ( C) C程序中的注释只能出现在程序的开始位置和语句的后面 ( D) C程序书写格式自由,一个语句可以写在多行上 13 以下不合法的数值常量是 ( )。
5、( A) 8 0E0 5 ( B) 1e1 ( C) 011 ( D) 0xabcd 14 以下关于 C语言数据类型使用的叙述中错误的是 ( )。 ( A)若要处理 如 “人员信息 ”等含有不同类型的相关数据,应自定义结构体类型 ( B)若要保存带有多位小数的数据,可使用双精度类型 ( C)若只处理 “真 ”和 “假 ”两种逻辑值,应使用逻辑类型 ( D)整数类型表示的自然数是准确无误差的 15 设有定义: int k=0; 以下选项的四个表达式中与其他三个表达式的值不相同的是 ( )。 ( A) +k ( B) k+=1 ( C) k+ ( D) k+1 16 有如下程序段: int x=1
6、2; double y=3 141593; printf(“ d 8 6f“, x, y); 其输出结果是 ( )。 ( A) 123 141593 ( B) 12 3 141593 ( C) 12, 3 141593 ( D) 123 1415930 17 已知字符 A的 ASCII代码值是 65,字符变量 cl的值是 A, c2的值是 D。则执行语句 printf(“ d, d“, c1, c2-2);的输出结果是 ( )。 ( A) 65, 68 ( B) A, 68 ( C) A, B ( D) 65, 66 18 以下选项中,当 x为大于 1的奇数时,值为 0的表达式是 ( )。 (
7、 A) x 2=0 ( B) x 2 ( C) x 2!=0 ( D) x 2=1 19 有以下程序: #include stdio h main() int x; scanf(“ d“, &x); if(x =3); else if(x!=10)printf(“ d n“, x); 程序运行时,输入的值在哪个范围才会有输出结果 ( )。 ( A)小于 3的整数 ( B)不等于 10的整数 ( C)大于 3或等于 10的整数 ( D)大于 3且不等 10的整数 20 有以下程序: #include stdio h main() int a=7; while(a-); printf(“ d n“
8、, a); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) -1 ( C) 1 ( D) 7 21 有以下程序: #include stdio h main() char b, c; int i; b=a; c=A; for(i=0; i 6; i+) if(i 2)putchar(i+b); else putchar(i+c); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) abcdef ( B) ABCDEF ( C) aBcDeF ( D) AbCdEf 22 有以下程序: #include stdio h main() int i, j, x=0;
9、for(i=0; i 2; i+) x+: for(j=0; j =3; j+) if(j 2)continue; x+; x+; printf(“x= d n“, x); 程序执行后的输出结果是 ( )。 ( A) x=4 ( B) x=8 ( C) x=6 ( D) x=12 23 若函数调用时的实参为变量时,以下关于函数形参和 实参的叙述中正确的是( )。 ( A)函数的形参和实参分别占用不同的存储单元 ( B)形参只是形式上的存在,不占用具体存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的实参和其对应的形参共占同一存储单元 24 设有以下函数: void fun(int
10、 n, char*s) 则下面对函数指针的定义和赋值均正确的是 ( )。 ( A) void(*pf)(int, char); pf=&fun; ( B) void*pf(); pf=fun; ( C) void*pf(); *pf=fun; ( D) void(*pf)(int, char*); pf=fun; 25 若要求定义具有 10个 int型元素的一维数组 a,则以下定义语句中错误的是( )。 ( A) int a5+5; ( B) int n=10, an; ( C) #define n5 int a2*n; ( D) #define N10 int aN; 26 有以下程序: #
11、include stdio h main() int i, t3=9, 8, 7, 6, 5, 4, 3, 2, 1; for(i=0; i 3; i+) printf(“ d“, t2-ii); 程序执行后的输出结果是 ( )。 ( A) 3 5 7 ( B) 7 5 3 ( C) 3 6 9 ( D) 7 5 1 27 有以下程序: #include stdio h void full(int*s, int n1, int n2) int i, j, t; i=n1; j=n2; while(i J) t=si; si=sJ; sj=t; i+; j-; main() int a10=1,
12、 2, 3, 4, 5, 6, 7, 8, 9, 0, k; fun(a, 0, 3); fun(a, 4, 9); fun(a, 0, 9); for(k=0; k 10; k+) printf(“ d“, ak); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) 4321098765 ( B) 5678901234 ( C) 0987654321 ( D) 0987651234 28 有以下程序: #include stdio h main() int a44=1, 4, 3, 2, 8, 6, 5, 7, 3, 7, 2, 5, 4, 8, 6, 1, i,k,
13、t; for(i=0; i 3; i+) for(k=i+1; k 4; k+) if(aii akk) t=aii; aii=akk; akk=t; for(i=0; i 4; i+) printf(“ d, “, a0i); 程序运行后的输出结果是 ( )。 ( A) 1, 1, 2, 6, ( B) 6, 2, 1, 1, ( C) 6, 4, 3, 2, ( D) 2, 3, 4, 6, 29 以下选项中正确的语句组是 ( )。 ( A) char*s; s=“BOOK!“; ( B) char*s; s=“BOOK!“; ( C) char s10; s=“BOOK!“; ( D)
14、chars; s=“BOOK!“; 30 若有以下定义和语句: #include stdio h char s110=“abcd!“, *s2=“ n123 “; printf(“ d d n“, strlen(s1), strlen(s2); 则输出结果是 ( )。 ( A) 10 7 ( B) 10 5 ( C) 5 5 ( D) 5 8 31 有以下程序: #include stdio h void funl(char*p) char*q; q=p; while(*q!= 0) (*q)+; q+: main() char a=“Program“, *p; p=&a3; fun1(p);
15、 printf(“ s n“, a); 程序执行后的输出结果是 ( )。 ( A) Prphsbn ( B) Prohsbn ( C) Progsbn ( D) Program 32 有以下函数: intaaa(char*s) char*t=s: while(*t+); t-; return(t-s); 以下关于 aaa函数功能叙述正确的是 ( )。 ( A)将串 s复制到串 t ( B)比较两个串的大小 ( C)求字符串 s的长度 ( D)求字符串 s所占字节数 33 有以下程序: #include stdio h int fun(int a, int B) if(b=0)return a;
16、 else return(fun(-a, -b); main() printf(“ d n“, fun(4, 2); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 34 以下选项中叙述错误的是 ( )。 ( A) C程序函数中定义的自动变量,系统不自动赋确定的初值 ( B)在 C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内 ( C) C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 ( D) C程序函数的形参不可以说明为 static型变量 35 有以下程序段: struct st int x; int*y;
17、*pt; int a=1, 2, b=3, 4; slruct st c2=10, a, 20, b; pt=c: 以下选项中表达式的值为 11的是 ( )。 ( A) +pt- x ( B) pt- x ( C) *pt- y ( D) (pt+)- x 36 有以下程序: #include stdio h struct Sint n; int a20; ; void f(int*a, int n) int i; for(i=0; i n-1; i+) ai+=i; main() int i; struct S s=10, 2, 3, 1, 6, 8, 7, 5, 4, 10, 9; f(s
18、 a, s n); for(i=0; i s n; i+) printf(“ d, “, s ai); 程序运行后的输出结果是 ( )。 ( A) 2, 3, 1, 6, 8, 7, 5, 4, 10, 9, ( B) 3, 4, 2, 7, 9, 8, 6, 5, 11, 10, ( C) 2, 4, 3, 9, 12, 12, 11, 11, 18, 9, ( D) 1, 2, 3, 6, 8, 7, 5, 4, 10, 9, 37 有以下程序: #include stdio h #include string h typedef structchar name9; char sex; f
19、loat score2; STU; void f(STU a) STU b=“Zhao“, m, 85 0, 90 0; int i; strcpy(a name, b name): a sex=b sex; for(i=0; i 2; i+) a scorei=b scorei; main() STU c=“Qian“, f, 95 0, 92 0: f(c); printf(“ s, c, 2 0f, 2 0f n“, c name, c sex, c score0,c score1); 程序运行后的输出结果是 ( )。 ( A) Zhao, m, 85, 90 ( B) Qian, m,
20、 85, 90 ( C) Zhao, f, 95, 92 ( D) Qian, f, 95, 92 38 有以下程序: #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) 6d, 64 39 有以下程序: #include stdio h main() char a=4: printf(“ d n“, a=a 1); 程序运行后的
21、输出结果是 ( )。 ( A) 16 ( B) 8 ( C) 40 ( D) 4 40 设文件指针 fp已定义,执行语句 fv=fopen(“file“, “w“);后,以下针对文本文件 file操作叙述的选项中正确的是 ( )。 ( A)只能写不能读 ( B)写操作结束后可以从头开始读 ( C)可以在原有内容后追加写 ( D)可以随意读和写 二、程序填空题 41 下列给定程序中,函数 fun的功能是:将形参 n中个位上为偶数的数取出,并按原来从高位到低位相反的川页序组成一个新数,作为函数值返回。 例如,输入一个整数 27638496,函数返回值为 64862。 请在程序的下划线处填入正确的内
22、容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include stdio h unsigned long fun(unsigned long 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)
23、: “); scanf(“ 1d“, &n); printf(“ nThe result is: 1d n“, fun(n); 三、程序修改题 42 下列给定程序中函数 fun的功能是:逐个比较 p、 q所指两个字符串对应位置上的字符,并把 ASCII值大或相等的字符依次存放到 c所指的数组中,形成一个新的字符串。 例如,若主函数中 a字符串为 “aBCDeFgH”, b字符串为 “Abcd”,则 c中的字符串应为 “aBcdeFgH”。 请改正程序中的错误,使它能得出正确的结果。 注意:部分 源程序在文件 MODI1 C中,不得增行或删行,也不得更改程序的结构 ! #include stdi
24、o h #include string h void fun(char*p, char*q, char*c) *found* intk: 1; *found* while(*p!=*q) if(*p *q)ck=*q; else ck=*p; if(*p)p+: if(*q) q+: k+: main() char a10=“aBCDeFgH“, b10=“ABcd“, c80= 0; fun(a, b, c); printf(“The string a: “); puts(a); printf(“The string b: “); puts(b); printf(“The result: “
25、); puts(c); 四、程序设计题 43 某学生的记录由学号、 8门课程成绩和平均分组成,学号和 8门课程的成绩已在主函数中给出,请编写函数 fun,其功能是:求出该学生的平均分,并放入记录的 ave成员中。 例 如,学生的成绩是: 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5,则他的平均分应为 78 875。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include stdio h #detine N8 typedef struet char num10;
26、 double sN; double ave: STREC; void fun(STREC*a) main() STREC s=“GA005“, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5; int i; void NONO(); fun(&s); printf(“The ss student data: n“, s num); for(i=0; i N; i+) printf(“ 4 1f n“, s si); printf(“ nave= 7 3f n“, s ave); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输
27、出数据,关闭文件。 * FILE: *out: int i, j; STREC s10= “GA005“, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5, “GA001“, 82 5, 66, 76 5, 76, 89, 76, 46 5, 78 5, “CA002“, 72 5, 56, 66 5, 66, 79, 68, 46 5, 58 5, “GA003“, 92 5, 76, 86 5, 86, 99, 86, 56 5, 88 5, “GA004“, 82, 66 5, 46 5, 56 76 75, 76 5, 63 5, “GA006“, 75
28、5, 74, 71 5, 85, 81, 79, 64 5, 71 5, “GA007“, 92 5, 61, 72 5, 84, 79, 75, 66 5, 72 5, “GA008“, 72 5, 86, 73 5, 80, 69, 63, 76 5, 53 5, “GA009“, 66 5, 7l, 74 5, 70, 61, 82, 86 5, 58 5, “GA010“, 76, 66 5, 75 5, 60, 76, 71, 96 5, 93 5, ; out=fopen(“out dat“, “w“); for(i=0; i 10; i+) fun(&si); fprintf(o
29、ut, “ 7 3f n“, si ave); fclose(out); 国家二级( C语言)机试模拟试卷 95答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 在实际应用中,队列的顺序存储结构一般采用循环队列的形式。 2 【正确答案】 C 【试题解析】 一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。 3 【正确答案】 A 【试题解析】 根据二叉树的性质 3:在任意一棵二叉树中,度为 0的叶子结点总是比度为 2的结点多一个,所以本题中度
30、为 2的结点是 5-1=4个,所以度为 1的结点的个数是 25-5-4=16个。 4 【正确答案】 B 【试题解析】 数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法 ,所以选择B。 5 【正确答案】 A 【试题解析】 实体完整性约束要求关系的主键中属性值不能为空值,所以选择A。 6 【正确答案】 C 【试题解析】 如果 S=T R,则 S称为 T除以 R的商。在除运算中 S的域南 T中那
31、些不出现在 R中的域所组成,对于 S中的任一有序组,由它与关系 R中每个有序组所构成的有序组均出现在关系 T中。所以本题选择 C。 7 【正确答案】 A 【试题解析】 软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程 度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬什的发展和应用需求的增长。所以选择 A。 8 【正确答案】 D 【试题解析】 需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择 D。 9 【正确答案】 B 【试题解析】 黑盒测试是对软件已经实现的功能足否满足需求进行测试和验证,
32、黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明,所以本题选择 B。 10 【正确答案】 C 【试题解析 】 系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。 PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,
33、所以选择 C。 11 【正确答案】 A 【试题解析】 程序模块化思想中,可以采 用自顶向下、逐步细化的方法。所以选项 A中 “自底向上 ”的说法是错误的。 12 【正确答案】 D 【试题解析】 C语言编写的程序可以放置于多个程序文件中,所以 A错误。 C程序中的一行可以有多条语句,所以 B错误。 C语言中的注释语句可以与原语句放在一行也可以不放在一行,所以 C错误。 13 【正确答案】 A 【试题解析】 A选项中 E后面的指数必须为整型数据,所以 A错误。 C选项中011表示的是八进制常量, 0xabcd表示的是十六进制常量。 14 【正确答案】 C 【试题解析】 C语言中没有逻 辑类型,所以
34、 C错误。若要保存带有多位小数的数据,可以用单精度类型也可以用双精度类型。处理包含不同类型的相关数据可以定义为结构体类型。整数类型可以无误差的表示自然数。 15 【正确答案】 C 【试题解析】 +k,先使 k的值白增 1后再使用, k+是先取得 k的值再将 k的值自增 1,所以 C选项中表达式的值为 0,而其他三个表达式的值均为 1,所以选择 C。 16 【正确答案】 A 【试题解析】 printf函数中格式字符 “ 8 6”的含义是:变量 y的输出宽度为8(包括小数点 ),小数点后面保留 6位小数, 且右对齐。所以选择 A。 17 【正确答案】 D 【试题解析】 打印时以 d整型格式打印输出
35、,所以字符标量 c1的值打印出来就是 65,从 c2-2的值打印出来就是 68-2,即 66。所以选择 D。 18 【正确答案】 A 【试题解析】 算术运算符的优先级高于关系运算符的优先级,所以当 x为大于 1的奇数时, A选项的值为假,即 0。 B选项的值为不定值,但绝对不是 0。 C选项的值为真,即 1。 D选项的值为真,即 1。 19 【正确答案】 D 【试题解析】 根据代码可知如果 x的值小于等于 3,执行空语句,不 进行打印操作。如果 x的值大于 3,再判断 x的值是否不等于 10,如果不等于 10就打印 x的值,所以选择 D选项。 20 【正确答案】 B 【试题解析】 a-的含义是
36、先用后减 1,所以当 a的值为 0时,跳出循环,但是仍要执行 a-, a的值变为 -1。 21 【正确答案】 D 【试题解析】 函数的含义是如果 i的值能被 2整除,以宁符格式打印输出 i+c的值,如果 i的值不能被 2整除,打印 i+b的值。第一次 i值为 0,执行 else语句打印字符 A,第二次 i值为 1,打印 1+b的值即字符 b,第三次 j值为 2,打印 字符C,依此类推选择 D选项。 22 【正确答案】 B 【试题解析】 toutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次执行外循环 i的值为 0,执行 x+, x的值变为 1,第一次执行内层循环 j的值为 0,
37、不满足 if条件,执行 x+, x的值变为 2,第二次内循环 j的值为 1, if条件成立,跳出本次循环,第三次执行内循环 j的值为 2,不满足 if条件, x的值变为3,第四次执行内循环 j的值为 3满足条件跳出本次内循环, x的值加 1,即为 4,第一次外循环结束。第二次执行外循环时,同理, i的值被加了, 4次,变为 8,所以选择 B选项。 23 【正确答案】 A 【试题解析】 本题重点考察的是函数的形参和实参。在定义函数时函数名后面括弧中的变量名称为 “形式参数 ”(简称形参 ),在主调函数中调用一个函数时,函数名后面括弧中的参数 (可以是一个表达式 )称为 “实际参数 ”(简称实参
38、)。 C语言规定,实参变量对形参变量的数据传递是 “值传递 ”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。因此 A选项正确。 24 【正确答案】 D 【试题解析】 函数的参数可以是 指针类型。它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的人口地址,指向函数的指针应该定义为void(*pf)( )。如果定义为 void*pf(),则表示函数 pf返回值为一个基类型为 void的指针。因此 D选项正确。 25 【正确答案】 B 【试题解析】 一维数组的定义方式为:类型说明符数组名 常量表达式 ;注意定义数组时,元素个数不能是变
39、量。因此应该选 B选项。 26 【正确答案】 A 【试题解析】 二维数组 t3实际上指 t33=9, 8, 7, 6, 5, 4, 3, 2,1,通过循环语句 for语句可以得到 i=0, t20=3、 i=1, t11=5、 i=2,02=7、 i=3时循环结束即 t20=3、 t11=5、 t02=7。因此 A选项正确。 27 【正确答案】 B 【试题解析】 该程序首先给一维数组赋值,然后三次调用 fun函数,其中fun(a, 0, 3);功能是将一维数组中笫 1,个元素和第 4个元素互换,第 2个元素和第 3个元素互换;其中 fun(a, 4, 9);功能是将一维数组中第 5个元素和第
40、10个元素互换,第 6个和 第 9个元素互换,第 7个元素和第 8个元素互换;其中fun(a, 0, 9);功能是将将一维数组中第 1个元素和第 10个元素互换,第 2个元素和第 9个元素互换 依此类推。因此 B选项正确。 28 【正确答案】 C 【试题解析】 首先对二维数组进行赋值操作, a00、 a01、 、 a32、a33的值为 1、 4、 、 6、 1。通过 for嵌套循环语句和 if条件语句,对二维数组对角线元素进行由大到小的排序操作,程序最后通过 for语句输出二维数组第 1行的 4个元素。因此 C选项正确。 29 【正 确答案】 B 【试题解析】 A选项去掉大括号就正确了; C选
41、项和 D选项应在定义时赋初值。因此 B选项正确。 30 【正确答案】 C 【试题解析】 strlen函数返回字符串的长度,求字符串长度时,遇到结束标志 0为止,但是长度不包括结束标识。字符数组 s1的后 5个元素没有赋值,都为 0,即 “abcd!”后为 0。所以 sIrlen(s1)的值为 5。字符指针 s2所指向的字符串中, n为转义字符换行符,表示 1个字符,也为转义宁符,代表,也是 1个字符,其后为字符串结束标识 0;所以 strlen(s2)的值也为 5。因此 C选项正确。 31 【正确答案】 B 【试题解析】 (*q)+是 q所指的字符加 1, q+就是指针移到下一个字符。因此B选
42、项正确。 32 【正确答案】 C 【试题解析】 本题重点考察的知识点 whik循环语句的应用。 aaa()函数中,首先定义了一个字符指针 t指向形参 s,然后通过一个 while循环让指针 t不断递增,直到 t指向字符串结束标识处。当 t指向结束标识处时,由于后缀 +运算符的原因,它还会被再递增 1,所以接下来的 t-;语句让它回到结束标识处。最后返回t-s, s还是指向字符串第 1个字符处,而 t指向了字符串结尾,故返回值为字符串的长度值。因此 C选项正确。 33 【正确答案】 B 【试题解析】 本题重点考察函数的递归调用;题目中给出的 fun()函数直接调用了自身,所以是一个递归函数。其功
43、能是:当参数 b为 0时,返回参数 a的值,否则返回 fun(-a, -b)的值。从这里可以看出,当 b不断递减时, a也不断递减直到 b为 0时返同 a的值。那么 a递减的总值就是 b原来的值。所以整个递归函数的作用就是返回 a-b的值。因此 B选项正确。 34 【正确答案】 C 【试题解析】 A选项描述正确,自动变量未赋初值,为随机值; B选项描述正确,变量定义除在函数开始位置外,在复合语句开始也可以; C选项描述是错误的,函数内的静态变量,只在第一次调用时候赋值,以后调用保留上次值; D选项描述也正确,形参属于局部变量,占用动态存储区,而 static型变量占用静态存储区。因此 C选项正
44、确。 35 【正确答案】 A 【试题解析】 本题考查结构体数组初始化以及结构体变量的引用,题目中定义了一个结构体数组 c并初始化,指针 pt指向 c的第一个元素,那么 pt- x为 10,+pt- x为 11, *pt- y为 1, (pt+)- x为 20,所以答案为 A。 36 【正确答案】 C 【试题解析】 题目中定义了一个结构体类型 s,然后定义了一个结构体变量 s并初始化,执行 f函数后,将 s中元素 a的每个元素都加上 i,这里需要注意最后一个元素没有加 i,所以最终答案为 C选项。 37 【正确答案】 D 【试题解析】 本题考查结构体的相关操作以及传值、传址的区别,该题中调用 f
45、函数后,会生成参数 c的一个副本,而不会改变 c的值,所以 c值维持原值,选项D正确。 38 【正确答案】 A 【试 题解析】 本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行 f(a+1)=a+1*a+1*a+1=3*a+1=10, f(a+1)=(a+1)*(a+1)*(a+1)=64。所以答案为A选项。 39 【正确答案】 B 【试题解析】 本题考查位运算,题目中将 4向左移一位然后重新赋值给 a, 4左移一位为 8,程序运行结果为 8,选项 B正确。 40 【正确答案】 A 【试题解析】 考查文件操作函数 fopen的基础知识,以 “w“方式打开文件,只能写不能读。选项
46、A正确。 二、程序填空题 41 【正确答案】 (1)0 (2)10*x (3)n 10。 【试题解析】 本题考查:已知某数,如何求该数各个位数值,已知各个位数值,如何表示该数;除法运算。 如果知道某数 n的各个位的数值,可以得到该数值 n,如 n的个位为 a、十位为b、百位为 r,那么 n=c*100+h*10+a。如果知道数值 n,可以采用求余和除法操作来表示其各个位,如 n 10(取个位 )、 n 10(取十位 )。 三、程序修改题 42 【正确答案】 (1)int k=0: (2)while(*p|*q)。 【试题解析】 本 题考查:变量初始化,需根据题意确定变量含义,然后对其进行初始化
47、操作; while循环语句。 四、程序设计题 43 【正确答案】 void fun(STREC*a) int i: a- ave=0 0: for(i=0; i N; i+) a- ave=a- ave+a- si; *求各门成绩的总和 * a- ave =N; *求平均分 * 【试题解析】 本题考查:结构体类型成员运算,指向结构体类型的指针变量作函数参数。 本题考查自定义形参的相关知识点,程序流程是这样的:在 fun()函数中 求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a,此时,引用成员的方式可以使用指向运算符,即 a- ave和 a- si,当然也可用 (*a) ave和 (*a) si。