1、国家二级( C语言)机试模拟试卷 23及答案与解析 一、选择题 1 下列链表中,其逻辑结构属于非线性结构的是 ( A)二叉链表 ( B)循环链表 ( C)双向链表 ( D)带链的栈 2 设循环队列的存储空间为 Q(1: 35),初始状态为 front=rear=35。现经过一系列入队与退队运算后, front=15, rear=15,则循环队列中的元素个数为 ( A) 15 ( B) 16 ( C) 20 ( D) 0或 35 3 下列关于栈的叙述中,正确的是 ( A)栈底元素一定是最后入栈的元素 ( B)栈顶元素 一定是最先入栈的元素 ( C)栈操作遵循先进后出的原则 ( D)以上说法均错误
2、 4 在关系数据库中,用来表示实体间联系的是 ( A)属性 ( B)二维表 ( C)网状结构 ( D)树状结构 5 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是 ( A) 1: 1联系 ( B) m: 1联系 ( C) 1: m联系 ( D) m: n联系 6 有两个关系 R和 S如下: 则由关系 R得到关系 S的操作是 ( A)选择 ( B)投影 ( C)自然连接 ( D)并 7 数据字典( DD) 所定义的对象都包含于 ( A)数据流图( DFD图 ) ( B)程序流程图 ( C)软件结构图 ( D)方框图 8 软件需求规格说明书
3、的作用不包括 ( A)软件验收的依据 ( B)用户与开发人员对软件要做什么的共同理解 ( C)软件设计的依据 ( D)软件可行性研究的依据 9 下面属于黑盒测试方法的是 ( A)语句覆盖 ( B)逻辑覆盖 ( C)边界值分析 ( D)路径覆盖 10 下面不属于软件设计阶段任务的是 ( A)软件总体设计 ( B)算法设计 ( C)制定软件确认测试计 划 ( D)数据库设计 11 下列叙述中错误的是 ( A) C程序可以由多个程序文件组成 ( B)一个 C语言程序只能实现一种算法 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 12 C语言源程序名的
4、后缀是 ( A) .C ( B) .exe ( C) .obj ( D) .cp 13 以下选项中不能用作 C程序合法常量的是 ( A) 123 ( B) 123 ( C) 1,234 ( D) x7D 14 表达式 a+=a -= a=9 的值是 ( A) 18 ( B) -9 ( C) 0 ( D) 9 15 若有定义语句: int x=12, y=8, z; 在其后执行语句 z= 0.9+x/y; 则 z的值为 ( A) 1 ( B) 1.9 ( C) 2 ( D) 2.4 16 阅读以下程序 #include stdio.h main() int case ; float printF
5、; printf(“请输入 2个数: “); scanf(“%d %f“, printf(“%d %fn“,case,printF ); 该程序在编译时产生错误,其出错原因是 ( A)定义语句出错, case是关键字,不能用作用户自定义标识符 ( B)定义语句出错, printF不能用作用户自定义标识符 ( C)定义语句无错, scanf不能作为输入函数使用 ( D)定义语句无错, printf不能输出 case的值 17 有以下程序 #include stdio.h main() char c1,c2,c3,c4,c5,c6; scanf(“%c%c%c%c“, c5=getchar();
6、c6=getchar(); putchar(c1); putchar(c2); printf(“%c%cn“,c5,c6); 程序运行后,若从键盘输入(从第 1列开始 ) 123回车 45678回车 则输出结果是 ( A) 1245 ( B) 1256 ( C) 1278 ( D) 1267 18 以下选项中,当 x为大于 1的奇数时,值为 0的表达式是 ( A) x/2 ( B) x%2=0 ( C) x%2!=0 ( D) x%2=1 19 以下选项中与 if(a=1)a=b; else a+; 语句功能不同的 switch语句是 ( A) switch(a=1) case 0:a=b;b
7、reak; case 1:a+; ( B) switch(a) case 1:a=b;break; default : a+; ( C) switch(a) default:a+;break; case 1:a=b; ( D) switch(a=1) case 1:a=b;break; case 0:a+; 20 若变量已正确定义,有以下程序段 i=0; do printf(“%d,“,i); while( i+ ); printf(“%dn“,i); 其输出结果是 ( A) 0,1 ( B) 0,0 ( C) 1,1 ( D)程序进入无限循环 21 有以下程序 #include stdio.
8、h main() int a=1,b=2,c=3,d=0; if (a=1 else printf(“%d,%d,%dn“,a,b,c); else printf(“%d,%d,%dn“,a,b,c); 程序运行后的输出结果是 ( A) 1,3,2 ( B) 1,3,3 ( C) 1,2,3 ( D) 3,2,1 22 有以下程序段 int i, n; for( i=0; i 8; i+ ) n = rand( ) % 5; switch (n) case 1: case 3: printf(“%d n“, n); break; case 2: case 4: printf(“%d n“, n
9、); continue; case 0: exit(0); printf(“%d n“,n); 以下关于程序段执行情况的叙述,正确的是 ( A) for循环语句固定执行 8次 ( B)当产生的随机数 n为 4时结束循环操作 ( C)当产生的随机数 n为 1和 2时不做任何操作 ( D)当产生的随机数 n为 0时结束程序运行 23 有以下程序 #include stdio.h int fun1( double a ) return (int)(a*=a); int fun2(double x, double y) double a=0,b=0; a=fun1( x ); b=fun1( y );
10、 return (int)(a+b); main() double w; w=fun2(1.1,2.0); printf(“%4.2f“, w); 程序执行后输出 结果是 ( A) 0.0 ( B) 5 ( C) 5.21 ( D) 5 24 设有定义语句 int (*f)(int); 则以下叙述正确的是 ( A) f是基类型为 int的指针变量 ( B) f是指向函数的指针变量,该函数具有一个 int类型的形参 ( C) f是指向 int类型一维数组的指针变量 ( D) f是函数名,该函数的返回值是基类型为 int类型的地址 25 有以下程序 #include stdio.h void fu
11、n( int *a,int *b) int *c; c=a;a=b;b=c; main() int x=3, y=5, *p= fun(p,q); printf(“%d,%d,“,*p,*q); fun( printf(“%d,%dn“,*p,*q); 程序运行后的输出结果是 ( A) 3,5,3,5 ( B) 3,5,5,3 ( C) 5,3,3,5 ( D) 5,3,5,3 26 若有定义: int w35; 则以下不能正确表示该数组元素的表达式是 ( A) *( for (i=2; i 6; i+) bi *= 2; main() int a10=1,2,3,4,5,6,7,8,9,10
12、, i; f(a); for (i=0; i 10; i+) printf(“%d,“, ai); 程序运行后的输出结果是 ( A) 1,2,3,4,5,6,7,8,9,10, ( B) 1,2,6,8,10,12,7,8,9,10, ( C) 1,2,3,4,10,12,14,16,9,10, ( D) 1,2,6,8,10,12,14,16,9,10, 28 有以下程序 #include stdio.h int fun( char s) int n=0; while(*s = 9 s+; return (n); main() char s10= 6, 1, *, 4, *, 9, *, 0
13、, *; printf(“%dn“,fun(s); 程序的运行结果是 ( A) 5 ( B) 9 ( C) 61 ( D) 61490 29 若要求从键盘读入含有空格字符的字符串,应使用函数 ( A) getchar() ( B) getc() ( C) gets() ( D) scanf() 30 设有如下程序段 #include stdio.h char s20=“Beijing“, *p; p=s; 则执行 p=s;语句后,以下叙述正确的是 ( A) s和 p都是指针变量 ( B) s数组中元素的个数和 p所指字符串长度相等 ( C)可以用 *p表示 s0 ( D)数组 s中的内容和指针
14、变量 p中的内容相同 31 有以下程序 #include stdio.h main() char s=“abcde“; s+=2; printf(“%dn“,s0); 执行后的结果是 ( A)输出字符 c的 ASCII码 ( B)程序出错 ( C)输出字符 c ( D)输出字符 a的 ASCII码 32 有以下程序 #include stdio.h #include string.h void fun(char *s, int n) char *t; int i, j; for (i=0; i n-1; i+) for (j=i+1; j n; j+) if (strlen(si) strle
15、n(sj) t = si; si = sj; sj = t; main() char *ss=“bcc“,“bbcc“,“xy“, “aaaacc“, “aabcc“; fun(ss, 5); printf(“%s,%sn“, ss0,ss4); 程序的运行结果是 ( A) aaaacc,xy ( B) xy,aaaacc ( C) bcc,aabcc ( D) aabcc,bcc 33 有以下程序 #include stdio.h int a=4; int f(int n) int t = 0; static int a=5; if (n%2) int a=6; t += a+; else
16、int a=7; t += a+; return t + a+; main() int s=a, i=0; for (; i 2;i+) s += f(i); printf(“%dn“, s); 程序运行后的输出结果是 ( A) 36 ( B) 24 ( C) 32 ( D) 28 34 有以下程序 #include stdio.h int f(int n) int t = 0, a=5; if (n/2) int a=6; t += a+; else int a=7; t += a+; return t + a+; main() int s=0, i=0; for (; i 2;i+) s
17、+= f(i); printf(“%dn“, s); 程序运行后的输出结果是 ( A) 28 ( B) 24 ( C) 32 ( D) 36 35 有以下定义和语句 struct workers int num; char name20; char c; struct int day; int month; int year; s; ; struct workers w,*pw; pw= 能给 w中 year成员赋 1980的语句是 ( A) pw- year=1980; ( B) w.year=1980; ( C) w.s.year=1980; ( D) *pw.year=1980; 36
18、以下叙述中错误的是 ( A)可以用 typedef将已存在的类型用一个新的名字来代表 ( B)可以通过 typedef增加新的类型 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 37 有以下程序 #include stdio.h struct tt int x; struct tt *y; *p; struct tt a4=20,a+1,15,a+2,30,a+3,17,a; main() int i; p=a; for(i=1; i =2; i+) printf(“%d,“, p- x ); p=p- y;
19、程序的运行结果是 ( A) 20,30, ( B) 30,17 ( C) 15,30, ( D) 20,15, 38 有以下程序 #include stdio.h main() struct STU char name9; char sex; double score2; ; struct STU a=“Zhao“, m, 85.0, 90.0, b=“Qian“, f, 95.0, 92.0; b=a; printf(“%s,%c,%2.0f,%2.0fn“, b.name, b.sex, b.score0, b.score1); 程序的运行结果是 ( A) Qian,m,85,90 ( B
20、) Zhao,m,85,90 ( C) Zhao,f,95,92 ( D) Qian,f,95,92 39 以下叙述中错误的是 ( A) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( B)预处理命令行的最后不能以分号表示结束 ( C) #define MAX 是合法的 宏定义命令行 ( D)在程序中凡是以 “#“开始的语句行都是预处理命令行 40 有以下程序 #include stdio.h main() FILE *f; f=fopen(“filea.txt“,“w“); fprintf(f,“abc“); fclose(f); 若文本文件 filea.txt中原有内容为: he
21、llo,则运行以上程序后,文件 filea.txt中的内容为 ( A) abclo ( B) abc ( C) helloabc ( D) abchello 二、程序填空题 41 给定程序中,函数 fun的功能是:统汁形参 s所指的字符串中数字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。 例如,若形参 s所指的字符串为 “abcdef35adgh3kjsdt7”,则输出结果为 4。 请在程序的下画线处填入正确内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include Stdio h void
22、 fun(char*S, int*t) int i, n; n=0; /*found*/ for(i=0; 【 1】 ! =0, i+) /*found*/ if(si =0i =n; i+) y=f(1 0*i); s+=y;)/*found*/ return Svoid main() system(“CLS”); printf(“ f n”, fun(5); 四、程序设计题 43 请编写函数 fun,其功能是:将 M行 N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,若 二维数组中的数据为 W W W W S S S S H H H H 则字符串中的内容应是: WSHW
23、SHWSHWSH。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #inolude Stdio h #define M 3 #define N 4 void fun(char(*S)N, char*b) voidmain() char a1 00, wMN=W, W, W,W, S, S, S, S, H, H, H, H; int i, j; printf(“The matrix: n”); for(i=0; i M; i+) for(j=0; j N; j+) printf(“ 3c”, Wij);
24、 printf(“ n”), fun(W, a); printf(“The A string: n”); puts(a); printf(“ nn”), 国家二级( C语言)机试模拟试卷 23答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。循环链表具有单链表的特征,但又不需要增加额外 的存贮空间,仅对表的链接方式稍
25、做改变,使得对表的处理更加方便灵活,属于线性链表。二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。答案为 A选项。 2 【正确答案】 D 【试题解析】 在循环队列中,用队尾指针 rear指向队列中的队尾元素,用排头指针 front指向排头元素的前一个位置。在循环队列中进行出队、入队操作时,头尾指针仍要加,朝前移动。只不过当头尾指针指向向量上界时,其加操作的结果是指向向量的下界。由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾 指针均相等。答案为 D选项。 3 【正确答案】 C 【试题解析】 栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元
26、素总是最先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行的。因此,栈称为先进后出表,或 “后进先出 “表,所以选择C。 4 【正确答案】 B 【试题解析】 关系模型实体间的联系采用二维表来表示,简称表。选项 C为网状模型实体间的联系,选项 D为层次模型实体间的联系,选项 A属性刻画了实体 5 【正确答案】 C 【试题解析】 两个实体集间的 联系实际上是实体集间的函数关系,主要有一对一联系( 1:1)、一对多联系( 1:m)、多对一联系( m:1)、多对多联系( m:n)。对于每一个实体部门,都有多名职员,则其对应的联系为一对多联系( 1:m),答案选 C。 6 【正
27、确答案】 A 【试题解析】 由关系 R到关系 S为一元运算,排除 C和 D。关系 S是关系 R的一部分,是通过选择之后的结果,因此选 A。 7 【正确答案】 A 【试题解析】 在数据流图中,对所有元素都进行了命名,所有名字的定义集中起来就构成了数据字典。因此选 A,而 B, C, D都不符合。 8 【正确答案】 D 【试题解析】 软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。软件需求规格说明书有以下几个方面的作用。 便于用户、开发人员进行理解和交流, B正确; 反映出用户问题的结构,可以作为软件开发工作的基础和依据, C正确; 作为确认测试和验收的依据, A正确。 9
28、【正确答案】 C 【试题解析】 黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例。在使用黑盒测试法时,手头只需要有程序功能说明就可以了。黑盒测试法分等价类划分法、边界值分析法和 错误推测法,答案为 C。而 A、 B、 D均为白盒测试方法。 10 【正确答案】 C 【试题解析】 从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。所以 A、 B、 D正确, C为软件测试阶段的任务。 11 【正确答案】 B 【试题解析】 一个 C语言程序可以实现多种算法 ,可以由多个程序文件共同构成。一个 C语言程序可以由一个或多个函数组成 ,一个 C函数可以单独作为一个 C
29、程序文件存在,被包含到其他程序中,所以选择 B选项。 12 【正确答案】 A 【试题解析】 C语言源程序名的 后缀是 .C,目标文件的扩展文件是 .obj,可执行文件的扩展名是 .exe。 13 【正确答案】 C 【试题解析】 C选项中不能含有逗号 ,所以 “1,234“不能用作 C程序的合法常量,B选项中表示的是八进制的常量 ,D选项中表示的是十六进制的常量。 14 【正确答案】 C 【试题解析】 首先计算 a=9,然后计算 a-=9,即 a=a-9,结果为 0,然后计算 a+=0,即a=a+0,所以最终结果为 0。 15 【正确答案】 A 【试题解析】 先计算 x/y,结果为 1,然后计算
30、 0.9+1,结果为 1.9,但由于变量 z为整型 ,所以取值 1,所以 z的值为 1。 16 【正确答案】 A 【试题解析】 C语言中标识符的定义中区分大小写 ,所以 printF与 printf不一样 ,可以作为标识符。而 case是 C语言中的关键字,不能作为变量名, scanf是标准的输入函数 ,printf是标准的输出函数 ,所以选择 A选项。 17 【正确答案】 A 【试题解析】 Scanf按照格式字符进行输入 ,所以 123与回车的值分别送入了 c1、c2、 c3、 c4变量的存储空间, getchar()函数的功能是从键盘输入的字符串中读 入一个字符 ,所以 4送入了变量 c5
31、的存储空间 ,5送入了变量 c6的存储空间,所以打印时结果为 1245。 18 【正确答案】 B 【试题解析】 A选项的值为不定值 ,但绝对不是 0,算术运算符的优先级高于关系运算符的优先级 ,所以当 x为大于 1的奇数时 ,B选项的值为假 ,即 0, C选项的值为真 ,即 1, D选项的值为真 ,即 1。选项 B正确。 19 【正确答案】 A 【试题解析】 if语句的含义是如果 a的值为 1,将 b的值赋给 a,否则将 a的值自增1, Swich(a=1)中表达式 a= =1的结果如果为真即为 1,则从 case1开始执行 ,直到遇到 break语句跳出 switch语句 ,如果 a=1的结
32、果如果为假即 0,则从 case0开始执行 ,所以与题干含义执行操作相反的是选项 A中的语句。 20 【正确答案】 A 【试题解析】 第一次首先先执行循环体打印 i的值 0,然后判断 while的条件 i+,先用后自增 ,所以判断时条件为假 ,跳出循环 ,但是仍执行了 i的自增操作 ,i的值为1,在接下来的打印语句中进行打印。 21 【正确答案】 B 【试题解析】 else总是和最近的 if配对 ,所以进入第一个 if语句中条件判断时 ,因为是逻辑与操作需要两边运算对象的值均为非零值 ,才为真 ,所以需要逐个执行判断的结果为 1,不再执行第二个 case语句中的操作,而是进入第二个 if语句条
33、件判断 ,因为 b!=2条件成立所以整个条件表达式的值为真 ,所以不再执行逻辑或的第二个运算对象 (c- !=3)c的值不变 ,也不再执行第一个 else语句,打印 a的值 1,b的值 3,c的值 3。 22 【正确答案】 D 【试题解析】 当产生的随机数为 4时 ,对 5取余结果为 4,执行 case4后面语句 ,见到 continue结束本次循环 ,而非结束程序运行 ,所以 B选项错误, 当产生的随机数为1时 ,执行 case1后面的所有语句 ,直到遇到 break语句跳出 switch结构 ;当随机数为2时 ,执行 case2后面的所有语句 ,直到遇到 continue语句跳出本次循环
34、,所以 C选项错误,由于循环体中含有 exit(0)语句 ,该语句的功能是终止程序的执行 ,所以不是固定执行 8次 ,A选项错误。 23 【正确答案】 D 【试题解析】 题中变量 w的定义为 double型,函数 fun2()的定义为 int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。因此 D选项正确。 24 【正确答 案】 B 【试题解析】 int(*f)(int);为指向函数的指针变量的定义方法,其中 f为指向函数的指针变量,第一个 int为函数返回值类型,第二个 int为函数的形参类型。因此 B选项正确。 25 【正确答案】 A 【试题解析】 fun函数的功能是交换形式
35、参数的值,即交换指针变量 a和 b的值,但是 fun函数并不能够交换实参的值,因此 fun(p,q)不能交换 p和 q的值,所以第一个 printf语句的输出为 3,5。第二个 fun函数对 x和 y的地址进行了操作,同样不能交换 x和 y的值,并不能影响 p和 q指针指向 的数据,因此第二个 printf语句的输出也是 3,5。因此 A选项正确。 26 【正确答案】 D 【试题解析】 A选项中 *(B选项中 *(*w+3) 表示w03;C选项中 *(*(w+1) 表示 w01;而 D选项中 *(w+1)4的正确写法是(*w+1)4,表示 w14;因此选择 D选项。 27 【正确答案】 B 【
36、试题解析】 数组名是常量,表示的是数组首元素的地址。当执行 f( a)的时候,由于传递的是首地址,相当于直接对数组 a进 行操作,所以从数组 a的第三个元素 a2到元素 a5,每个元素值扩大两倍。因此 B选项正确。 28 【正确答案】 C 【试题解析】 在 fun函数中, while循环的功能是:逐个取字符数组 s的字符判断其是否是数字。若是则将其作为个位数字保存到变量 n中, n的原数据的各个数位将相应左移一个 10进制位。当指针 s指向数组的第 3位时,循环条件不成立,循环结束,返回 n的值,输出 n的值为 61。因此 C选项正确。 29 【正确答案】 C 【试题解析】 scanf ( )
37、语句中用 “空格 “间隔不同的字符串,空格 将被全部忽略掉,所以用 scanf()函数不能输入空格; getchar()函数用于输入字符,其调用格式为: ch=getchar(), getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才开始执行。 gets()函数的调用形式为: gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。 gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个 换行符为止。 getc()
38、函数的调用形式为: ch=getc(pf)其中 pf是文件指针,函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。因此 C选项正确。 30 【正确答案】 C 【试题解析】 程序定义了字符数组 s和字符型指针变量 p,并且使得 p指向数组,执行 p=s;语句后, *p即表示 s0; s数组中元素的个数和 p所指字符串长度不相等,因为 s数组中元素的个数包括字符串结束标志 “0“,而 p所指字符串长度不包括 “0“; s是字符型数组, p是指针变量;数组 s中的内容和指针变量 p中的内容不 相同,数组中存放的是字符串,而指针变量 p存放的是数组的首地址。因此 C选项正确。 31
39、【正确答案】 B 【试题解析】 本题重点考察数组名的概念。在 C语言中,数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容。所以本题中的 s+=2;语句让数组名 s的内容加 2是错误的,编译无法通过。因此 B选项正确。 32 【正确答案】 B 【试题解析】 函数 fun(char s ,int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序,在主函数中执行 fun(ss,5)语句后,*ss=“xy“,“bcc“,“bbcc“,“aabcc“,“aaaacc“, ss0,ss4的输出结果为xy,aaaacc。因此 B选项正确。 33 【正确答案】 D 【试题解析】 在
40、主函数 main()中定义了两个变量 s和 i,同时给 s赋初值。 a4, i赋初值 0。当 i=0时。执行 “s+ f(i); “语句,调用 f()并将 i的初值 0传递给形参 n。首先执行 if语句中内条件: n%2,若条件为假。则执行 else下的语句, a 7,t 7+0 7,使用 return返回 t, t 7+(a+) 7+5 12,此时 a运算完后自增 1,变为 6;返回主函数中, s 4+12 16。当 i=1时,执行 “s+=f(i); “语句,调用 f()并将 i的初值 1传递给形参 n。首先执行 if语句中的条件: n%2,条件为真,执行 if下面的语句, t 0, a
41、6 t 0+6 6,使用 return返回 t, t=6+6=12,返回主函数中, s 16+12=28。最后输出的结果为 28。因此 D选项正确。 34 【正确答案】 B 【试题解析】 在主函数 main()中定义了两个变量 s和 i,同时给 s和 i赋初值 0。当 i=0时。执行 “s+ f(i); “语句,调用 f()并将 i的初值 0传递给形参 n。首先执行 if语句中内条件: n/2,条件为假。则执行 else下的语句, a 7,t 7+0 7,使用return返回 t, t 7+(a+) 7+5 12,此时 a运算完后自增 1,变为 6;返回主函数中, s 0+12 12。当 i=
42、1时,执行 “s+=f(i); “语句,调用 f()并将 i的初值 1传递给形参 n。首先执行 if语句中的条件: n/2,条件为真,执行 if下面的语句, t0, a 6 t 0+6 6,使用 return返回 t, t=6+6=12,返回主函数中, s12+12=24。最后输出的结果为 24。因此 B选项正确。 35 【正确答案】 C 【试题解析】 本题考查结构体变量的引用,题目中定义了一个结构体,其中结构体中的变量又是一个结构体, w为外层结构体,如果给内层结构体赋值, C先要得到内层结构体变量,即 w.s,若要给 year赋值,表示为 w.s.year即可,选项 C正确。 36 【正确
43、答案】 B 【试题解析】 本题考查 typedef的用法, typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以 B选项错误。 37 【正确答案】 D 【试题解析】 本题考查结构体变量的引用以及结构体数组, p指向 a数组的第一个元素,所以 p- x为 20,然后 p=p- y后, p指向数组 a的第二个元素,所以输出 15,选项 D正确。 38 【正确答案】 B 【试题解析】 本题考查结构体初始化操作,本题中可以直接将结构体 a赋值给b,所以输出的结果和 a一样,选项 B正确。 39 【正确答案】 A 【试题解析】 本题考查预处理命令行,预处理是在程序编译之前进
44、行的,所以 A选项错误。 40 【正确答案】 B 【试题解析】 本题考查文件操作函 数,执行 fprintf(f,“abc“);后 f文件的内容就变为了 abc,所以 B选项正确。 二、程序填空题 41 【正确答案】 (1)si (2)9 (3)*t=n 【试题解析】 填空 1:通过 for循环语句来判断是否到字符型结尾,变量 i用来存放字符型数组下标,则应填入 si。 填空 2:题目要求判断数字字符,所以此处应填入 9。 填空 3:将数字字符个数存入变量 t中,此处需注意变量 t是指针变量。 三、程序修改题 42 【正确答案】 (1)double f(double x) (2)return
45、s; 【试题解析】 该程序的流程是: fun函数对 f(n)项循环累加, fun函数采用条件选择语句计算函数 f(x)的值。第一处错误在于未定义函数 f(double x)的类型,因为返回值类型为 double型,所以此处函数应定义为 double。第二处错误在于语法错误。 四、程序设计题 43 【正确答案】 void fun(char(*s)N, char*b) int i, j, k=0; for(i=0 ; i N; i+) *按列的顺序 依次放到一个字符串中 * for(j=0; j M; j+) bk+=sji; bk= 0; 【试题解析】 看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。 注意:第 1个循环条件为 i N(即列 );第 2个循环条件为 j M(即行 ),因为在循环的嵌套中越在内层,循环,变化就越快。