1、二级 C 语言-638 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.循环队列是队列的一种链式存储结构B.循环队列是队列的一种顺序存储结构C.循环队列是非线性结构D.循环队列是一种逻辑结构2.下列关于线性链表的叙述中,正确的是_。(分数:1.00)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素D.以上说法均不正确3.一棵二叉树共有 25 个结点,其中 5 个是叶
2、子结点,则度为 1 的结点数为_。(分数:1.00)A.16B.10C.6D.44.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是_。(分数:1.00)A.外模式B.内模式C.概念模式D.逻辑模式5.在满足实体完整性约束的条件下_。(分数:1.00)A.一个关系中应该有一个或多个候选关键字B.一个关系中只能有一个候选关键字C.一个关系中必须有多个候选关键字D.一个关系中可以没有候选关键字6.有三个关系 R、S 和 T 如下: (分数:1.00)A.自然连接B交C除D并7.下面描述中,不属于软件危机表现的是_。(分数:1.00)A.软件过程不规范B.软件开发生产率低C.软件质量难以控
3、制D.软件成本不断提高8.下面不属于需求分析阶段任务的是_。(分数:1.00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成测试计划9.在黑盒测试方法中,设计测试用例的主要根据是_。(分数:1.00)A.程序内部逻辑B.程序外部功能C.程序数据结构D.程序流程图10.在软件设计中不使用的工具是_。(分数:1.00)A.系统结构图B.PAD 图C.数据流图(DFD 图)D.程序流程图11.以下选项中关于程序模块化的叙述错误的是_。(分数:1.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序B.把程序分成若干相对独立、功能单一
4、的模块,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序12.以下叙述中正确的是_。(分数:1.00)A.用 C 语言编写的程序只能放在一个程序文件中B.C 程序书写格式严格,要求一行内只能写一个语句C.C 程序中的注释只能出现在程序的开始位置和语句的后面D.C 程序书写格式自由,一个语句可以写在多行上13.以下不合法的数值常量是_。(分数:1.00)A.8.0E0.5B.1e1C.011D.0xabcd14.以下关于 C 语言数据类型使用的叙述中错误的是_。(分数:1.00)A.若要处理如“人员信息
5、”等含有不同类型的相关数据,应自定义结构体类型B.若要保存带有多位小数的数据,可使用双精度类型C.若只处理“真”和“假”两种逻辑值,应使用逻辑类型D.整数类型表示的自然数是准确无误差的15.设有定义: int k=0; 以下选项的四个表达式中与其他三个表达式的值不相同的是_。(分数:1.00)A.+kB.k+=1C.k+D.k+116.有如下程序段: int x=12; double y=3.141593; printf(“%d%8.6f“,x,y); 其输出结果是_。(分数:1.00)A.123.141593B.12 3.141593C.12,3.141593D.123.141593017.
6、已知字符A的 ASCII 代码值是 65,字符变量 c1 的值是A,c2 的值是D。则执行语句printf(“%d,%d“,c1,c2-2);的输出结果是_。(分数:1.00)A.65,68B.A,68C.A,BD.65,6618.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。(分数:1.00)A.x%2=0B.x/2C.x%2!=0D.x%2=119.有以下程序: #includestdio.h main() int x; scanf(“%d“, if(x=3); else if(x!=10)printf(“%d/n“,x); 程序运行时,输入的值在哪个范围才会有输出结果
7、_。(分数:1.00)A.小于 3 的整数B.不等于 10 的整数C.大于 3 或等于 10 的整数D.大于 3 且不等 10 的整数20.有以下程序: #includestdio.h main() int a=7; while(a-); printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.0B.-1C.1D.721.有以下程序: #includestdio.h main() char b,c; int i; b=“a“; c=“A“; for(i=0;i6;i+) if(i%2)putchar(i+b); else putchar(i+c); printf(“
8、/n“); 程序运行后的输出结果是_。(分数:1.00)A.abcdefB.ABCDEFC.aBcDeFD.AbCdEf22.有以下程序: #includestdio.h main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if(j%2)continue; x+; x+; printf(“x=%d/n“,x); 程序执行后的输出结果是_。(分数:1.00)A.x=4B.x=8C.x=6D.x=1223.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。(分数:1.00)A.函数的形参和实参分别占用不同的存储单元B.形
9、参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元24.设有以下函数: void fun(int n,char*s) 则下面对函数指针的定义和赋值均正确的是_。(分数:1.00)A.void(*pf)(int,char);pf=B.void*pf();pf=fun;C.void*pf();*pf=fun;D.void(*pf)(int,char*);pf=fun;25.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是_。(分数:1.00)A.int a5+5;B.int n=10,an;C.#de
10、fine n 5int a2*n;D.#define N 10int aN;26.有以下程序: #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:1.00)A.3 5 7B.7 5 3C.3 6 9D.7 5 127.有以下程序: #includestdio.h void fun(int*s,int n1,int n2) int i,j,t; i=n1;j=n2; while(ij) t=si;si=sj;sj=t;i+;j-; main(
11、) int a10=1,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;k10;k+) printf(“%d“,ak); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.4321098765B.5678901234C.0987654321D.098765123428.有以下程序: #includestdio.h main() int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,k,t; for(i=0;i3;i+) for(k=i+1;k4;k+) if(a
12、iiakk) t=aii;aii=akk;akk=t; for(i=0;i4;i+) printf(“%d,“,a0i); 程序运行后的输出结果是_。(分数:1.00)A.1,1,2,6,B.6,2,1,1,C.6,4,3,2,D.2,3,4,6,29.以下选项中正确的语句组是_。(分数:1.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“;C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;30.若有以下定义和语句: #includestdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d
13、%d/n“,strlen(s1),strlen(s2); 则输出结果是_。(分数:1.00)A.10 7B.10 5C.5 5D.5 831.有以下程序: #includestdio.h void fun1(char*p) char*q; q=p; while(*q!=“/0“) (*q)+; q+; main() char a=“Program“,*p; p= fun1(p); printf(“%s/n“,a); 程序执行后的输出结果是_。(分数:1.00)A.PrphsbnB.ProhsbnC.ProgsbnD.Program32.有以下函数: int aaa(char*s) char*t
14、=s; while(*t+); t-; return(t-s); 以下关于 aaa 函数功能叙述正确的是_。(分数:1.00)A.将串 s 复制到串 tB.比较两个串的大小C.求字符串 s 的长度D.求字符串 s 所占字节数33.有以下程序: #includestdio.h int fun(int a,int B) if(b=0)return a; else return(fun(-a,-b); main() printf(“%d/n“,fun(4,2); 程序运行后的输出结果是_。(分数:1.00)A.1B.2C.3D.434.以下选项中叙述错误的是_。(分数:1.00)A.C 程序函数中定
15、义的自动变量,系统不自动赋确定的初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C.C 程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值D.C 程序函数的形参不可以说明为 static 型变量35.有以下程序段: struct st int x;int *y;*pt; int a=1,2,b=3,4; struct st c2=10,a,20,b; pt=c; 以下选项中表达式的值为 11 的是_。(分数:1.00)A.+pt-xB.pt-xC.*pt-yD.(pt+)-x36.有以下程序: #includestdio.h struct Sin
16、t n;int a20; void f(int*a,int n) int i; for(i=0;in-1;i+) ai+=i; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;is.n;i+) printf(“%d,“,s.ai); 程序运行后的输出结果是_。(分数:1.00)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
17、stdio.h #includestring.h typedef structchar name9;char sex;float 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;i2;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); 程
18、序运行后的输出结果是_。(分数:1.00)A.Zhao,m,85,90B.Qian,m,85,90C.Zhao,f,95,92D.Qian,f,95,9238.有以下程序: #includestdio.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); 程序运行后的输出结果是_。(分数:1.00)A.10,64B.10,10C.64,10D.64,6439.有以下程序: #includestdio.h main() char a=4; printf(“%d/n“,a=a1); 程序
19、运行后的输出结果是_。 A16 B8 C40 O)4 (分数:1.00)A.B.C.D.40.设文件指针 fp 已定义,执行语句 fp=fopen(“file“,“w“);后,以下针对文本文件 file 操作叙述的选项中正确的是_。(分数:1.00)A.只能写不能读B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写二、(共 18 分)(总题数:1,分数:18.00)41.下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中查找与形参 t 所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss 所指字符串数组中共有
20、N 个内容不同的字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! #includestdio.h #includestring.h #define N 5 #define M 8 int fun(char(*ss)M,char*t) int i; /*found*/ for(i=0;i 1;i+) /*found*/ if(strcmp(ssi,t)=0)return 2; return-1; main() char chNM=“if“,“while“,“switch“,“int“,“for“,tM;
21、 int n,i; printf(“/nThe original string/n/n“); for(i=0;iN;i+)puts(chi); printf(“/n“); printf(“/nEnter a string for search:“);gets(t); n=fun(ch,t); /*found*/ if(n= 3)printf(“/nDon“t found!/n“); else printf(“/nThe position is%d./n“,n); (分数:18.00)三、(共 18 分)(总题数:1,分数:18.00)42.下列给定程序中函数 fun 的功能是:从整数 10 到
22、 55 之间,查找能被 3 整除且有一位上的数值是 5 的数,把这些数放在 b 所指的数组中,这些数的个数作为函数值返回。规定函数中 a1 放个位数,a2 放十位数。 请改正程序中的错误,使它能得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! #includestdio.h int fun(int*b) int k,a1,a2,i=0; for(k=10;k=55;k+) /*found*/ a2=k/10; a1=k-a2*10; if(k%3=0i+; /*found*/ return k; main() int a100,k,m; m=fun(a); printf(“The
23、 result is:/n“); for(k=0;km;k+) printf(“%4d“,ak); printf(“/n“); (分数:18.00)_四、(共 24 分)(总题数:1,分数:24.00)43.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:将字符串尾部的*号全部删除,前面和中间的*号不动。 例如,字符串中的内容为:“*A*BC*DEF*G*”,删除后,字符串中的内容应当是:“*A*BC*DEF*G”。在编写函数时,不得使用 C 语言提供的字符串函数。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。#i
24、ncludestdio.h void fun(char*a) main() char s81;void NONO(); printf(“Enter a string:/n“);gets(s); fun(s); printf(“The string after deleted:/n“);puts(s); NONO(); void NONO() /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE*in,*out; int i;char s81; in=fopen(“in.dat“,“r“); out=fopen(“out.dat“,“w“); for(i=0;i10;i
25、+) fscanf(in,“%s“,s); fun(s); fprintf(out,“%s/n“,s); fclose(in); fclose(out); (分数:24.00)_二级 C 语言-638 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.循环队列是队列的一种链式存储结构B.循环队列是队列的一种顺序存储结构 C.循环队列是非线性结构D.循环队列是一种逻辑结构解析:解析 在实际应用中,队列的顺序存储结构一般采用循环队列的形式。2.下列关于线性链表的叙述中,正确的是_。(分数:1.00)A.各
26、数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素 D.以上说法均不正确解析:解析 一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。3.一棵二叉树共有 25 个结点,其中 5 个是叶子结点,则度为 1 的结点数为_。(分数:1.00)A.16 B.10C.6D.4解析:解析 根据二叉树的性质 3:在任意一棵二叉树中,度为 0
27、 的叶子结点总是比度为 2 的结点多一个,所以本题中度为 2 的结点是 5-1=4 个,所以度为 1 的结点的个数是 25-5-4=16 个。4.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是_。(分数:1.00)A.外模式B.内模式 C.概念模式D.逻辑模式解析:解析 数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,所以选择 B。5.在满足实体完整性约束的条件下_。(分数:
28、1.00)A.一个关系中应该有一个或多个候选关键字 B.一个关系中只能有一个候选关键字C.一个关系中必须有多个候选关键字D.一个关系中可以没有候选关键字解析:解析 实体完整性约束要求关系的主键中属性值不能为空值,所以选择 A。6.有三个关系 R、S 和 T 如下: (分数:1.00)A.自然连接B交C除 D并解析:解析 如果 S=T/R,则 S 称为 T 除以 R 的商。在除运算中 S 的域由 T 中那些不出现在 R 中的域所组成,对于 S 中的任一有序组,由它与关系 R 中每个有序组所构成的有序组均出现在关系 T 中。所以本题选择 C。7.下面描述中,不属于软件危机表现的是_。(分数:1.0
29、0)A.软件过程不规范 B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高解析:解析 软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择 A。8.下面不属于需求分析阶段任务的是_。(分数:1.00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成测试计划 解析:解析 需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择 D。9.在黑盒测试方法中,设计测试用例的主要
30、根据是_。(分数:1.00)A.程序内部逻辑B.程序外部功能 C.程序数据结构D.程序流程图解析:解析 黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证,黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明,所以本题选择 B。10.在软件设计中不使用的工具是_。(分数:1.00)A.系统结构图B.PAD 图C.数据流图(DFD 图) D.程序流程图解析:解析 系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。PAD 图是在详细设计
31、阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以选择 C。11.以下选项中关于程序模块化的叙述错误的是_。(分数:1.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序解析:
32、解析 程序模块化思想中,可以采用自顶向下、逐步细化的方法。所以选项 A 中“自底向上”的说法是错误的。12.以下叙述中正确的是_。(分数:1.00)A.用 C 语言编写的程序只能放在一个程序文件中B.C 程序书写格式严格,要求一行内只能写一个语句C.C 程序中的注释只能出现在程序的开始位置和语句的后面D.C 程序书写格式自由,一个语句可以写在多行上 解析:解析 C 语言编写的程序可以放置于多个程序文件中,所以 A 错误。C 程序中的一行可以有多条语句,所以 B 错误。C 语言中的注释语句可以与原语句放在一行也可以不放在一行,所以 C 错误。13.以下不合法的数值常量是_。(分数:1.00)A.
33、8.0E0.5 B.1e1C.011D.0xabcd解析:解析 A 选项中 E 后面的指数必须为整型数据,所以 A 错误。C 选项中 011 表示的是八进制常量,0xabcd 表示的是十六进制常量。14.以下关于 C 语言数据类型使用的叙述中错误的是_。(分数:1.00)A.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型B.若要保存带有多位小数的数据,可使用双精度类型C.若只处理“真”和“假”两种逻辑值,应使用逻辑类型 D.整数类型表示的自然数是准确无误差的解析:解析 C 语言中没有逻辑类型,所以 C 错误。若要保存带有多位小数的数据,可以用单精度类型也可以用双精度类型。处
34、理包含不同类型的相关数据可以定义为结构体类型。整数类型可以无误差的表示自然数。15.设有定义: int k=0; 以下选项的四个表达式中与其他三个表达式的值不相同的是_。(分数:1.00)A.+kB.k+=1C.k+ D.k+1解析:解析 +k,先使 k 的值自增 1 后再使用,k+是先取得 k 的值再将 k 的值自增 1,所以 C 选项中表达式的值为 0,而其他三个表达式的值均为 1,所以选择 C。16.有如下程序段: int x=12; double y=3.141593; printf(“%d%8.6f“,x,y); 其输出结果是_。(分数:1.00)A.123.141593 B.12
35、3.141593C.12,3.141593D.123.1415930解析:解析 printf 函数中格式字符“%8.6”的含义是:变量 y 的输出宽度为 8(包括小数点),小数点后面保留 6 位小数,且右对齐。所以选择 A。17.已知字符A的 ASCII 代码值是 65,字符变量 c1 的值是A,c2 的值是D。则执行语句printf(“%d,%d“,c1,c2-2);的输出结果是_。(分数:1.00)A.65,68B.A,68C.A,BD.65,66 解析:解析 打印时以%d 整型格式打印输出,所以字符标量 c1 的值打印出来就是 65,从 c2-2 的值打印出来就是 68-2,即 66。所
36、以选择 D。18.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。(分数:1.00)A.x%2=0 B.x/2C.x%2!=0D.x%2=1解析:解析 算术运算符的优先级高于关系运算符的优先级,所以当 x 为大于 1 的奇数时,A 选项的值为假,即 0。B 选项的值为不定值,但绝对不是 0。C 选项的值为真,即 1。D 选项的值为真,即 1。19.有以下程序: #includestdio.h main() int x; scanf(“%d“, if(x=3); else if(x!=10)printf(“%d/n“,x); 程序运行时,输入的值在哪个范围才会有输出结果_。(分
37、数:1.00)A.小于 3 的整数B.不等于 10 的整数C.大于 3 或等于 10 的整数D.大于 3 且不等 10 的整数 解析:解析 根据代码可知如果 x 的值小于等于 3,执行空语句,不进行打印操作。如果 x 的值大于 3,再判断 x 的值是否不等于 10,如果不等于 10 就打印 x 的值,所以选择 D 选项。20.有以下程序: #includestdio.h main() int a=7; while(a-); printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.0B.-1 C.1D.7解析:解析 a-的含义是先用后减 1,所以当 a 的值为 0 时
38、,跳出循环,但是仍要执行 a-,a 的值变为-1。21.有以下程序: #includestdio.h main() char b,c; int i; b=“a“; c=“A“; for(i=0;i6;i+) if(i%2)putchar(i+b); else putchar(i+c); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.abcdefB.ABCDEFC.aBcDeFD.AbCdEf 解析:解析 函数的含义是如果 i 的值能被 2 整除,以字符格式打印输出 i+c 的值,如果 i 的值不能被2 整除,打印 i+b 的值。第一次 i 值为 0,执行 else
39、 语句打印字符A,第二次 i 值为 1,打印 1+b 的值即字符b,第三次 i 值为 2,打印字符C,依此类推选择 D 选项。22.有以下程序: #includestdio.h main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if(j%2)continue; x+; x+; printf(“x=%d/n“,x); 程序执行后的输出结果是_。(分数:1.00)A.x=4B.x=8 C.x=6D.x=12解析:解析 coutinue 的作用是跳出循环体中剩余的语句而进行下一次循环。第一次执行外循环 i 的值为 0,执行 x+,x 的值变
40、为 1,第一次执行内层循环 j 的值为 0,不满足 if 条件,执行 x+,x 的值变为2,第二次内循环 j 的值为 1,if 条件成立,跳出本次循环,第三次执行内循环 j 的值为 2,不满足 if 条件,x 的值变为 3,第四次执行内循环 j 的值为 3 满足条件跳出本次内循环,x 的值加 1,即为 4,第一次外循环结束。第二次执行外循环时,同理,i 的值被加了,4 次,变为 8,所以选择 B 选项。23.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。(分数:1.00)A.函数的形参和实参分别占用不同的存储单元 B.形参只是形式上的存在,不占用具体存储单元C.同名的实
41、参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元解析:解析 本题重点考察的是函数的形参和实参。在定义函数时函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C 语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。因此 A 选项正确。24.设有以下函数: void fun(int n,char*s) 则下面对函数指针的定义和赋值均正确的是_。(分数:1.00)A.void(*pf
42、)(int,char);pf=B.void*pf();pf=fun;C.void*pf();*pf=fun;D.void(*pf)(int,char*);pf=fun; 解析:解析 函数的参数可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的入口地址,指向函数的指针应该定义为 void(*pf)()。如果定义为 void*pf(),则表示函数 pf返回值为一个基类型为 void 的指针。因此 D 选项正确。25.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是_。(分数:1.00)A.int a5+5;B.int n=10,an; C
43、.#define n 5int a2*n;D.#define N 10int aN;解析:解析 一维数组的定义方式为:类型说明符数组名常量表达式;注意定义数组时,元素个数不能是变量。因此应该选 B 选项。26.有以下程序: #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:1.00)A.3 5 7 B.7 5 3C.3 6 9D.7 5 1解析:解析 二维数组 t3实际上指 t33=9,8,7,6,5,4,3,2,1,通过循环语句 for
44、语句可以得到 i=0,t20=3、i=1,t11=5、i=2,t02=7、i=3 时循环结束即 t20=3、t11=5、t02=7。因此 A 选项正确。27.有以下程序: #includestdio.h void fun(int*s,int n1,int n2) int i,j,t; i=n1;j=n2; while(ij) t=si;si=sj;sj=t;i+;j-; main() int a10=1,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;k10;k+) printf(“%d“,ak); printf(“
45、/n“); 程序运行后的输出结果是_。(分数:1.00)A.4321098765B.5678901234 C.0987654321D.0987651234解析:解析 该程序首先给一维数组赋值,然后三次调用 fun 函数,其中 fun(a,0,3);功能是将一维数组中第 1 个元素和第 4 个元素互换,第 2 个元素和第 3 个元素互换;其中 fun(a,4,9);功能是将一维数组中第 5 个元素和第 10 个元素互换,第 6 个和第 9 个元素互换,第 7 个元素和第 8 个元素互换;其中fun(a,0,9);功能是将将一维数组中第 1 个元素和第 10 个元素互换,第 2 个元素和第 9 个元素互换依此类推。因此 B 选项正确。28.有以下程序: #includestdio.h main() int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,k,t; for(i=0;i3;i+) for(k=i+1;k4;k+) if(aiiakk) t=aii;aii=akk;akk=t; for(i=0;i4;i+) printf(“%d,“,a