1、二级 C 语言-16-2 及答案解析(总分:71.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:45.00)1.有以下程序:void fun( int *a, int i, int j)int t;if ( ij )t=ai;ai=aj;aj=t;fun (a,+i,-j);main()int a=1,2,3,4,5,6),i;fun(a,0,5)for( i=0; i6; i+) printf(“%d“,ai);执行后的输出结果是( )。 A. 654321 B. 432156 C. 456123 D. 123456(分数:1.00)A.B.C.D.2.有以下程序:#in
2、cludestdio.hvoid f(int*q) int i=0;for(;i5;i+)(*q)+;main() int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“%d,“,ai);程序运行后的输出结果是_。 A.6,2,3,4,5, B.2,2,3,4,5, C.1,2,3,4,5, D.2,3,4,5,6,(分数:1.00)A.B.C.D.3.关系代数运算是以_为基础的运算。 A. 关系运算 B. 谓词运算 C. 集合运算 D. 代数运算A.B.C.D.4.程序调试的任务是_。 A.设计测试用例 B.验证程序的正确性 C.发现程序中的错误 D.诊
3、断和改正程序中的错误(分数:1.00)A.B.C.D.5.结构化分析可以使用的工具是 A. N-S 图 B. DFD 图 C. PAD 图 D. 程序流程图(分数:2.00)A.B.C.D.6.有以下程序main(int argc,char *argv) int n,i=0;while(argv1i!=/0) n=fun(); i+;printf(“%d/n“,n*argc);int fun() static int s=0;s+=1;return s;假设程序编译、连接后生成可执行文件 exam.exe,若键入以下命令exam 123回车则运行结果为 A. 6 B. 8 C. 3 D. 4
4、(分数:1.00)A.B.C.D.7.结构化程序由 3 种基本结构组成,3 种基本结构组成的算法( )。 A. 可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完成符合结构化的任务 D. 只能完成一些简单的任务(分数:1.00)A.B.C.D.8.下列程序的输出结果是_。main() int a=-1,b=1,k;if(+a0) s=“Olympic“; B. char s7; s=“Olympic“; C. char *s; s=“Olympic“; D. char s7; s=“Olympic“;(分数:2.00)A.B.C.D.11.软件调试的目的是 A. 发现错误 B.
5、 改正错误 C. 改善软件的性能 D. 验证软件的正确性(分数:2.00)A.B.C.D.12.有以下程序:#define f(x) (x*x)main()int i1,i2;i1=f(8)/f(4);i2=f(4+4)/f(2+2);printf(“%d,%d/n“,i1,i2);程序运行后的输出结果是 A. 64, 28 B. 4,4 C. 4,3 D. 64, 64(分数:1.00)A.B.C.D.13.语句 printf(“a/bhow/s/bhe/n“);的输出结果是_。(说明:b是退格符) A. a/bhow/s/bhe/n B. a/bhow/s/bhe C. howshe D.
6、 abhowshe(分数:1.00)A.B.C.D.14.常采用的两种存储结构是U /U。 A. 顺序存储结构和链式存储结构 B. 散列方法和索引方式 C. 链表存储结构和数组 D. 线性存储结构和非线性存储结构(分数:2.00)A.B.C.D.15.以下有 4 组用户标识符,其中合法的组是_。 A. FOR -sub Case B. 4d DO Size C. f2_G3 IF abc D. WORD void define(分数:1.00)A.B.C.D.16.在数据管理技术发展的三个阶段中,数据共享最好的是_。 A.人工管理阶段 B.文件系统阶段 C.数据库系统阶段 D.三个阶段相同(分
7、数:4.00)A.B.C.D.17.面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是( )。 A. 模拟现实世界中不同事物之间的联系 B. 强调模拟现实世界中的算法而不强调概念 C. 使用现实世界的概念抽象地思考问题从而自然地解决问题 D. 鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考(分数:1.00)A.B.C.D.18.若有说明语句:double * p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是U /U。 A. *p= sCanf(“%1f“,p); B. *p= scanf(“%f“,p); C. p= scanf( “% 1f“ ,
8、* p); D. p = scanf( “% 1f“ , p);(分数:1.00)A.B.C.D.19.若有如下程序:sub(int *t,int a34) int m,n;for(m=0;m3;m+)for(n=0;n4;n+) *t=amn;t+; main() int*t,s34)=1,2,3),4,5,6),7,8,9;t=(int*)malloc(50);sub(t,s);printf(“%d,%d/n“,t4,t7);则程序运行后的输出结果是( )。 A. 4,7 B. 4,0 C. 5,8 D. 程序错误(分数:1.00)A.B.C.D.20.若运行时给变量 x 输入 12,则以
9、下程序的运行结果是main() int x,y;scanf(“%d“,for(i=1;i4;i+) for(j=i;j4;j+)printf(“%d*%d=%d “,i,j,i*j);printf(“/n“);程序运行后的输出结果是 A. 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3 B. 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 C. 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 D. 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9(分数:1.00)A.B.C.D.27.指针变量 p 的
10、基类型为 double,并已指向一连续存储区,若 p 中当前的地址值为 65490,则执行 p+后,p 中的值为 U /U A. 65490 B. 65492 C. 65494 D. 65498(分数:1.00)A.B.C.D.28.设有定义:int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 A. (!a=1)(!b=0) B. (aB) !c|1 C. ab D. a|(b+b)(c-a)(分数:2.00)A.B.C.D.29.以下叙述中正确的是 A. 构成 C 语言程序的基本单位是函数 B. 可以在一个函数中定义另一个函数 C. main()函数必须放在其他函数之前
11、D. 所有被调用的函数一定要在调用之前进行定义(分数:1.00)A.B.C.D.30.有以下程序:#include stdio.hmain()FILE *fp; int i,k,n;fp=fopen(“data.dat“,“w+“);for(i=1;i6;i+)fprintf(fp,“%d “,i);if(i%3=0) fprintf(fp,“/n“);rewind(fp);fscanf(fp,“%d%d“, main()pritnf(“%d/n“,F(3+5);程序运行后的输出结果是( )。 A. 192 B. 29 C. 25 D. 编译出错(分数:1.00)A.B.C.D.34.以下程序
12、中函数 reverse 的功能是将 a 所指数组中的内容进行逆置。void reverse(int a , int n)int i, t;for(i=0;in/2;i+)t=ai; ai =an-1-i;an-1-i=t; main()int b10=1,2,3,4,5,6,7,8,9,10; int i, s=0;reverse(b,8);for(i=6;i10;i+) s+=bi;printf(“%d/n“, s);程序运行后的输出结果是 A. 22 B. 10 C. 34 D. 30(分数:1.00)A.B.C.D.35.有以下说明和定义语句struct student int age;
13、char num 8;struct student stu3=20,“200401”,21,“200402”),19,“200403”;struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是 A. (p+)-num B. p-num C. (*p).num D. stu3.age(分数:1.00)A.B.C.D.二、B填空题/B(总题数:15,分数:26.00)36.以下程序运行后的输出结果是_。 struct NODE int k; struct NODE*link; ; main() struct NODE m5,*p=m,*q=m+4; int i=0;
14、 while(p!=q) p-k=+i;p+; q-k=i+;q-; q-k=i; for(i=0;i5;i+)printf(“%d“,mi.k); printf(“/n“); (分数:2.00)填空项 1:_37.软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和U U /U /U的设计来实现。(分数:1.00)填空项 1:_38.顺序存储方法是把逻辑上相邻的结点存储在物理位置U U /U /U的存储单元中。(分数:2.00)填空项 1:_39.若有语句 int i=-19,j=i%4; printf(“%d/n“,j); 则输出结果是U U /U /U。(分
15、数:1.00)填空项 1:_40.下列程序运行后的输出结果是_。 main() int x,a=1,b=2,c=3,d=4; x=(ab)?a:b;x=(xc)?x:c;x=(dx)?x:d; printf(“%d/n“,x); (分数:4.00)填空项 1:_41.已知字符 A 的 ASCII 码值为 65,以下程序运行时,若从键盘输入:B33回车,则输出结果是_。 #include main() char a,b; a=getchar();scanf(“%d“, a=a-A+0;b=b*2; printf(“%c %c/n“,a,b);(分数:2.00)填空项 1:_42.假设在当前盘当前
16、目录下有一个可执行程序 USER.EXE。现要执行该程序,并要求在执行过程中将显示输出的结果信息存入当前盘当前目录的文件 OUT.DAT 中,则完整的 DOS 命令为 1。(分数:1.00)填空项 1:_43.若已知 a=10,b=20,则表达式! ab 的值为 1。(分数:2.00)填空项 1:_44.在两种基本测试方法中, 1 测试的原则之一是保证所测模块中每一个独立路径至少要执行一次。(分数:2.00)填空项 1:_45.以下程序的输出结果是_。 main() unsigned short a=65536;int b; printf(“%d/n“,b=A) ; (分数:1.00)填空项
17、1:_46.下面程序段的运行结果是_。 main() char a=2,b=3,c=5,d,e; d=a-b|c; e=a-b|c; printf(“%d,%d“,d,e); (分数:2.00)填空项 1:_47.以下 sstrcpy()函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+=_); main() char str1100,str2=“abcdefgh“; sstrcpy(str1,str2); printf(“%s/n“,str1); (分数:2.0
18、0)填空项 1:_48.函数 sstrcmp 的功能是对两个字符串进行比较。当 s 所指字符串和 t 所指字符串相等时,返回值为0;当 s 所指字符串大于 t 所指字符串时,返回值大于 0;当 s 所指字符串小于 t 所指字符串时,返回值小于 0(功能等同于库函数 strcmp)。请填空。 #include stdio.h int sstrcmp(char *s,char *t) while(*st+; returnU U /U /U; (分数:1.00)填空项 1:_49.若有如下定义,则该数组的第一维大小为_。 int b4=1,2,3,4,5,6,7,8,9);(分数:1.00)填空项
19、1:_50.以下函数把 b 字符串连接到 a 字符串的后面,并返回 a 中新字符串的长度。请填空。 strcen(char a,char b) int num=0,n=0; while(*(a+num)! =U U /U /U)num+; while(bn)*(a+num)=bn;num+;U U /U /U; return(num); (分数:2.00)填空项 1:_二级 C 语言-16-2 答案解析(总分:71.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:45.00)1.有以下程序:void fun( int *a, int i, int j)int t;if ( i
20、j )t=ai;ai=aj;aj=t;fun (a,+i,-j);main()int a=1,2,3,4,5,6),i;fun(a,0,5)for( i=0; i6; i+) printf(“%d“,ai);执行后的输出结果是( )。 A. 654321 B. 432156 C. 456123 D. 123456(分数:1.00)A. B.C.D.解析:解析 函数 fun()中有 3 个参数,参数 a 为一个指针变量,接收的实参可以是数组名,参数 i 和j 分别表示数组元素的下标,当下标 i 小于下标 j 时,ai和 aj交换,然后对自身进行调用,可见这是一个递归函数。其实现的功能是把数组 a
21、 从下标为 i 的元素到下标为 j 的元素之间的所有元素反序存放。在主函数中调用 fun()函数,把 a 数组从 a0到 a5之间的所有元素反序存放,最后输出从 a0到 a5的值,因此输出的值为 6、5、4、3、2、1,所以,A 选项为所选。2.有以下程序:#includestdio.hvoid f(int*q) int i=0;for(;i5;i+)(*q)+;main() int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“%d,“,ai);程序运行后的输出结果是_。 A.6,2,3,4,5, B.2,2,3,4,5, C.1,2,3,4,5, D.
22、2,3,4,5,6,(分数:1.00)A. B.C.D.解析:解析 本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取首个数组元素值进行加 1 运算,循环 5 次,因此 A 选项正确。3.关系代数运算是以_为基础的运算。 A. 关系运算 B. 谓词运算 C. 集合运算 D. 代数运算A.B.C. D.解析:解析 关系代数运算是以关系代数作为运算对象的组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包括垂直分割(投影)、水平分割(选择)、关系的结合(连接)等。4.程序调试的任务是_。 A.设计测试用例 B.验证程序的正确性 C.发现程序中的错误 D.诊断和改正程序中的
23、错误(分数:1.00)A.B.C.D. 解析:解析 程序调试的任务是诊断和改正程序中的错误。5.结构化分析可以使用的工具是 A. N-S 图 B. DFD 图 C. PAD 图 D. 程序流程图(分数:2.00)A.B. C.D.解析:解析 数据流图(DFD)、数据字典、判定表和判定树是结构化分析常用的工具。程序流程图、N-S图、PAD 图是详细设计过程中常用的图形工具。6.有以下程序main(int argc,char *argv) int n,i=0;while(argv1i!=/0) n=fun(); i+;printf(“%d/n“,n*argc);int fun() static i
24、nt s=0;s+=1;return s;假设程序编译、连接后生成可执行文件 exam.exe,若键入以下命令exam 123回车则运行结果为 A. 6 B. 8 C. 3 D. 4 (分数:1.00)A. B.C.D.解析:解析 本题中主函数带有两个参数,DOS 下执行命令 examl23 后,argc 为 2,argv1为“exam”,argv 2为“123”,且变量 s 由 static 定义后,每次调用 fun()函数,s 保留上一次的值,所以表达式n*argc 最终值为 3X2=6。7.结构化程序由 3 种基本结构组成,3 种基本结构组成的算法( )。 A. 可以完成任何复杂的任务
25、B. 只能完成部分复杂的任务 C. 只能完成符合结构化的任务 D. 只能完成一些简单的任务(分数:1.00)A. B.C.D.解析:解析 C 程序由 3 种基本的结构组成,分别为顺序结构、选择结构和循环结构,这 3 种结构可以组成任何复杂的 C 程序,即可以完成任何复杂的任务,故选项 B、选项 C 和选项 D 都不正确。所以,4 个选项中选项 A 符合题意。8.下列程序的输出结果是_。main() int a=-1,b=1,k;if(+a0) s=“Olympic“; B. char s7; s=“Olympic“; C. char *s; s=“Olympic“; D. char s7; s
26、=“Olympic“;(分数:2.00)A. B.C.D.解析:解析 数组名代表数组的首地址,是一个地址常量,不能对其赋值,所以选项 B、D 错误。只有在初始化时才可以用花括号,所以选项 C 错误。11.软件调试的目的是 A. 发现错误 B. 改正错误 C. 改善软件的性能 D. 验证软件的正确性(分数:2.00)A.B. C.D.解析:解析 软件测试与软件调试是两个不同的概念:软件测试的目的是发现错误,而软件调试的目的是发现错误导致程序失效的原因,并修改程序以修正错误,调试是测试之后的活动。12.有以下程序:#define f(x) (x*x)main()int i1,i2;i1=f(8)/
27、f(4);i2=f(4+4)/f(2+2);printf(“%d,%d/n“,i1,i2);程序运行后的输出结果是 A. 64, 28 B. 4,4 C. 4,3 D. 64, 64(分数:1.00)A.B.C. D.解析:解析 本题考查的是宏定义。对带参数的宏的展开只是将语句中宏名后面括号内的实参字符串代替#define 命令行中的形参。本题中“i1=f(8)/f(4)”用“#defme f(x)(x*x)”代替得 i1=(8*8)/(4*4),结果为 4;“i2=f(4+4)/f(2+2)”用“#define f(x)(x*x)”代替得 i2=(4+4*4+4)/(2+2*2+2),求得结
28、果为 3。故本题输出的值为 4,3。13.语句 printf(“a/bhow/s/bhe/n“);的输出结果是_。(说明:b是退格符) A. a/bhow/s/bhe/n B. a/bhow/s/bhe C. howshe D. abhowshe(分数:1.00)A.B.C. D.解析:14.常采用的两种存储结构是U /U。 A. 顺序存储结构和链式存储结构 B. 散列方法和索引方式 C. 链表存储结构和数组 D. 线性存储结构和非线性存储结构(分数:2.00)A. B.C.D.解析:解析 线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。15.以下有 4 组用户标识符,其中合法的
29、组是_。 A. FOR -sub Case B. 4d DO Size C. f2_G3 IF abc D. WORD void define(分数:1.00)A.B.C. D.解析:解析 C 语言的标识符的定义为:以字母或下划线开头的由字母、数字字符、下划线组成的字符串。而且标识符不能与关键字相同。16.在数据管理技术发展的三个阶段中,数据共享最好的是_。 A.人工管理阶段 B.文件系统阶段 C.数据库系统阶段 D.三个阶段相同(分数:4.00)A.B.C. D.解析:解析 数据管理发展至今已经历了 3 个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便,
30、逻辑性强,物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C。17.面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是( )。 A. 模拟现实世界中不同事物之间的联系 B. 强调模拟现实世界中的算法而不强调概念 C. 使用现实世界的概念抽象地思考问题从而自然地解决问题 D. 鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考(分数:1.00)A.B.C. D.解析:解析 面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是,使用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件
31、开发的绝大部分中都用应用领域的概念去思考。本题答案为 C)。18.若有说明语句:double * p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是U /U。 A. *p= sCanf(“%1f“,p); B. *p= scanf(“%f“,p); C. p= scanf( “% 1f“ , * p); D. p = scanf( “% 1f“ , p);(分数:1.00)A.B.C.D. 解析:解析 p=for(m=0;m3;m+)for(n=0;n4;n+) *t=amn;t+; main() int*t,s34)=1,2,3),4,5,6),7,8,9;t=(int*)ma
32、lloc(50);sub(t,s);printf(“%d,%d/n“,t4,t7);则程序运行后的输出结果是( )。 A. 4,7 B. 4,0 C. 5,8 D. 程序错误(分数:1.00)A.B. C.D.解析:解析 本题定义了一个 sub()函数,其作用为将一个二维数组按行复制到 t 所指的连续内存空间内。主程序中首先使用 malloc()函数为 t 申请了 50 个字节的内存空间,然后调用 sub()函数,将二维数组 s 的内容复制到 t 申请的内存空间内,最后输出 t 的第 5 个元素(t4)和第 8 个元素(t7),即为 3行 4 列二维数组中的 s10和 s13。s10是初始化列
33、表中第二个大括号中的第一个值 4,而 s13应该是初始化列表中第二个大括号中的第 4 个值,但没有这么多初始值,C 语言在这种情况下会自动将该元素设置为 0,即 s34=1,2,3,4,5,6, 7,8,9等价于 s34=1,2,3,0, 4,5,6,0),7,8,9,0。所以最后输出结果是 4,0,应该选择 B。20.若运行时给变量 x 输入 12,则以下程序的运行结果是main() int x,y;scanf(“%d“,for(i=1;i4;i+) for(j=i;j4;j+)printf(“%d*%d=%d “,i,j,i*j);printf(“/n“);程序运行后的输出结果是 A. 1
34、*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3 B. 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 C. 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 D. 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9(分数:1.00)A.B. C.D.解析:解析 本题主要考查了 for 循环的嵌套。外层 for 循环的自变量 i 从 1 开始,每次循环后增 l,至到 i 等于 3 结束。内层循环的自变量 j 每次从 i 开始,每次循环后增 1,至到 j 等于 3 结束。在每次外循环开始后,内层循环在一行上先打
35、印“i*j=两个乘数的积”,然后换行,下次循环从下一行开始打印。27.指针变量 p 的基类型为 double,并已指向一连续存储区,若 p 中当前的地址值为 65490,则执行 p+后,p 中的值为 U /U A. 65490 B. 65492 C. 65494 D. 65498(分数:1.00)A.B.C.D. 解析:28.设有定义:int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 A. (!a=1)(!b=0) B. (aB) !c|1 C. ab D. a|(b+b)(c-a)(分数:2.00)A. B.C.D.解析:解析 本题考查逻辑运算。根据运算符的优先级顺序,
36、选项 A 的值为“(!2=1)(!3=0)=0(!3=0)=0”,选项 B 的值为“(23)!4|1=0!4|1=00|1=0|1=1”。选项 C 的值为“23=1”。选项 D 的值为“2|(6)(2)=2|1=1”。所以只有选项 A 的值为 0。 注意:在进行逻辑与运算时,若“”的左边运算结果已经为 0,则“”右边的表达式将不再进行计算,结果总为 0;在进行逻辑或运算时,若“|”的左边运算结果已经为 1,则“|”右边的表达式也将不再进行计算,结果总为 1。29.以下叙述中正确的是 A. 构成 C 语言程序的基本单位是函数 B. 可以在一个函数中定义另一个函数 C. main()函数必须放在其
37、他函数之前 D. 所有被调用的函数一定要在调用之前进行定义(分数:1.00)A. B.C.D.解析:解析 根据函数的定义语法规定,在 C 语言程序中,不能嵌套定义,即不能在函数中再定义函数;main()函数在 C 语言程序中是必须的,但函数可以放在程序中的任意位置;当在所有函数的外部、被调用之前说明函数时,在函数说明后面的任何位置上都可以对函数进行调用。函数说明也可以放在调用函数的说明部分,如在 main 函数内部进行说明,则只能在 main 函数内部才能识别函数。30.有以下程序:#include stdio.hmain()FILE *fp; int i,k,n;fp=fopen(“data
38、.dat“,“w+“);for(i=1;i6;i+)fprintf(fp,“%d “,i);if(i%3=0) fprintf(fp,“/n“);rewind(fp);fscanf(fp,“%d%d“, main()pritnf(“%d/n“,F(3+5);程序运行后的输出结果是( )。 A. 192 B. 29 C. 25 D. 编译出错(分数:1.00)A.B.C.D. 解析:本题是一道陷阱题,考生如果没注意到 F()函数被定义为 void 类型的话,很容易错选为选项 A,其实应该选择选项 D,编译出错。34.以下程序中函数 reverse 的功能是将 a 所指数组中的内容进行逆置。voi
39、d reverse(int a , int n)int i, t;for(i=0;in/2;i+)t=ai; ai =an-1-i;an-1-i=t; main()int b10=1,2,3,4,5,6,7,8,9,10; int i, s=0;reverse(b,8);for(i=6;i10;i+) s+=bi;printf(“%d/n“, s);程序运行后的输出结果是 A. 22 B. 10 C. 34 D. 30(分数:1.00)A. B.C.D.解析:解析 本题考查的知识点是数组名作为函数参数及函数调用。reverse()数的功能是将具有 n 个元素的数组 a 反序存放。在主函数中调用
40、语句是“reverse(b,8);”,实现的功能是把 b 数组的前八个元素逆置,所以 b 数组中依次存放的值为“8,7,6,5,4,3,2,1,9,10”。for 循环了 4 次,分别把b6、b7、b8和 b9的值(分别是 2、1、9、10)加到了 s 中,s 的结果是 22,所以最后输出的 s 值为22。所以 4 个选项中 A 正确。35.有以下说明和定义语句struct student int age;char num 8;struct student stu3=20,“200401”,21,“200402”),19,“200403”;struct student *p=stu;以下选项中
41、引用结构体变量成员的表达式错误的是 A. (p+)-num B. p-num C. (*p).num D. stu3.age(分数:1.00)A.B.C.D. 解析:解析 本题考核的知识点是结构体数组元素成员的引用。结构体变量也有地址,因此可以把它的地址赋值给一个指针变量,然后通过该指针变量来引用结构体的成员,选项 A 和选项 B 就是通过指针变量来引用结构体的成员,故选项 A 和选项 B 都正确,也可以通过结构体数组元素的成员引用,选项 C 和选项 D 属于这种情况,而在选项 D 中 stu3.age 不正确,因为结构体数组 stu 共有三个元素,其下标应该为 0,1,2所以,4 个选项中选
42、项 D 符合题意。二、B填空题/B(总题数:15,分数:26.00)36.以下程序运行后的输出结果是_。 struct NODE int k; struct NODE*link; ; main() struct NODE m5,*p=m,*q=m+4; int i=0; while(p!=q) p-k=+i;p+; q-k=i+;q-; q-k=i; for(i=0;i5;i+)printf(“%d“,mi.k); printf(“/n“); (分数:2.00)填空项 1:_ (正确答案:13431)解析:解析 m 是结构数组,长度为 5。结构指针 p、q 分别指向 m0、m4,i 初值为 0
43、.while 循环当p 和 q 不相等时,执行“p-k=+i;q-k=i+;”,也就是 m0k 值为 1,m4k 值为 1,i 值变为2,则“p+,q-”,p、q 分别指向 m1、m3,while 循环当 p 和 q 不相等时,执行“p-k=+i;q-k=i+;”,也就是 m1k 值为 3,m3k 值为 3,i 值变为 4,“p+,q-”,p、q 都指向 m2,while 循环当 p 和 q 相等时,循环停止。while 循环体后面的“q-k=i;”,也就是 m2k 值为 4。因此“for(i=0;i5;i+)printf(“%d“,mi.k);”输出结果是:13431。37.软件测试是保证软
44、件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和U U /U /U的设计来实现。(分数:1.00)填空项 1:_ (正确答案:测试实例)解析:解析 进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。38.顺序存储方法是把逻辑上相邻的结点存储在物理位置U U /U /U的存储单元中。(分数:2.00)填空项 1:_ (正确答案:相邻)解析:解析 常用的存储表示方法有:顺序存储、链式存储、索引存储、散列存储。其中,顺序存储方法是把逻辑上相邻的结点存储在物理位置也相邻的存储单元中。39.若有语句 int i=-19,j=i%4; printf(“%d/n“,j); 则输出结果是U U /U /U。(分数:1.00)填空项 1:_ (正确答案:-3)解析