1、国家二级( C语言)机试模拟试卷 40 及答案与解析 一、选择题 1 设数据元素的集合 D= 1,2,3,4,5 ,则满足下列关系 R的数据结构中为线性结构的是 ( A) R= (1,2), (3,4), (5,1) ( B) R= (1,3), (4,1), (3,2), (5,4) ( C) R= (1,2), (2,3), (4,5) ( D) R= (1,3), (2,4), (3,5) 2 下列叙述中正确的是 ( A)链表结点中具有两个指针域的数据结构可以是线性结构,也可以是非 线性结构 ( B)线性表的链式存储结构中,每个结点必须有指向前件和指向后件的两个指针 ( C)线性表的链式
2、存储结构中,每个结点只能有一个指向后件的指针 ( D)线性表的链式存储结构中,叶子结点的指针只能是空 3 一个栈的初始状态为空。现将元素 A,B,C,D,E依次入栈,然后依次退栈三次,并将退栈的三个元素依次入队(原队列为空),最后将队列中的元素全部退出。则元素退队的顺序为 ( A) ABC ( B) CBA ( C) EDC ( D) CDE 4 某二叉树的中序序列为 DCBAEFG,后序序列为 DCBGFEA,则该二叉树的深度(根结点在第 1层)为 ( A) 5 ( B) 4 ( C) 3 ( D) 2 5 软件生命周期是指 ( A)软件产品从提出、实现、使用、维护到停止使用退役的过程 (
3、B)软件的需求分析、设计与实现 ( C)软件的开发与管理 ( D)软件的实现和维护 6 某系统结构图如下图所示 该系统结构图的深度是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 7 下面属于应用软件的是 ( A)学生成绩管理系统 ( B) UNIX操作系统 ( C)汇编程序 ( D)编译程序 8 将 E-R图转换为 关系模式时, E-R图中的属性可以表示为 ( A)属性 ( B)键 ( C)关系 ( D)域 9 有两个关系 R与 S如下,由关系 R和 S得到关系 T,则所使用的操作为( A)并 ( B)自然连接 ( C)除法 ( D)交 10 优化数据库系统查询性能的索引设计属于数
4、据库设计的 ( A)需求分析 ( B)概念设计 ( C)逻辑设计 ( D)物理设计 11 结构化程序由顺序、选择、循环三种基本结构组成,以下相关叙述错误的是 ( A)三种基本结构不可以嵌套使用 ( B)顺序结构是按语句在程序中的先后顺序逐条 执行,没有分支,没有转移 ( C)选择结构是根据不同的条件执行不同分支中的语句 ( D)循环结构是根据条件决定是否重复、重复执行多少次循环体语句 12 以下能正确表述算式 sin(2r+30)的 C语言表达式是 ( A) sin(2*3.14*r+3.14*30/180.0) ( B) sin(2*r+ 30 ) ( C) sin(2*3.14*r+ 30
5、 ) ( D) sin(2*3.14*r+30*3.14/360.0) 13 设有定义: int x=11,y=12,z=0;,以下表达式值不等于 12的是 ( A) (z,x,y) ( B) (z=x,y) ( C) z=(x,y) ( D) z=(x=y) 14 以下可以将任意一个两位整数 n的个位数与十位数对换的表达式为 ( A) (n-n/10*10)*10+n/10 ( B) n-n/10*10+n/10 ( C) n/10+(n-n/10) ( D) (n-n/10)*10+(n/10) 15 设有以下程序段 int y; y=rand() % 30+1; 则变量 y的取值范围是
6、( A) 0y30 ( B) 0 y30 ( C) 1 y 30 ( D) 1 y30 16 以下程序段中,循环次数不超过 10的是 ( A) int i=10; do i=i+1; while(i 0); ( B) int i=5; do i+=1; while(i 0); ( C) int i=1; do i+=2; while(i!=10); ( D) int i=6; do i-=2; while(i!=1); 17 有以下程序 #include stdio.h main() int x; scanf(“%d“, if(x 10) printf(“1“); else if(x 20)
7、printf(“2“); else if(x 30) printf(“3“); 若运行时输入: 35回车,则输出结果是 ( A) 123 ( B) 2 ( C) 3 ( D) 1 18 若要实现 total=1+2+3+4+5求和 ,以下程序段错误的是 ( A) int i=1,total=1; while(i 5) total+=i; i+=1; ( B) int i=1,total=0; while(i =5) total+=i; i+=1; ( C) int i=0,total=0; while(i 5) i+=1; total+=i; ( D) int i=0,total=0; whi
8、le(i =5) total+=i; i+=1; 19 有以下程序 #include stdio.h main() int i=1,k=0; for( ; i 6 ; ) switch(i%3) case 0: k+; case 1: k+; break; case 2: k+; continue; i+=1; printf(“%dn“,k); 程序的运行情况是 ( A)形成无限循环 ( B)输出 6 ( C)输出 5 ( D)输出 4 20 以下不能输出小写字母 a的选项是 ( A) printf(“%cn“,“a“); ( B) printf(“%cn“,A+32); ( C) putch
9、ar(97); ( D) putchar(a); 21 有以下程序段 char c1,c2,c3; scanf(“%c%c%c“, 若要给 c1、 c2、 c3分别输入字母 A、 B、 C,则以下对输入形式的描述正确的是 ( A)字母 A、 B、 C之间可以用空格分隔 ( B)字母 A、 B、 C之间不能有分隔符 ( C)字母 A、 B、 C之间可以用回车符分隔 ( D)字母 A、 B、 C之间可以用 Tab键分隔 22 有以下程序段 scanf(“%d%d%d“, if(a b) a=b; if(a c) a=c; printf(“%dn“,a); 该程序段的功能是 ( A)输出 a、 b、
10、 c中值相等的数值 ( B)输出 a、 b、 c中的最大值 ( C)输出 a、 b、 c中的最小值 ( D)输出 a的原始值 23 以下程序的功能是:通过调用 calc函数,把所求得的两数之和值放入变量 add中,并在主函数中输出。 #include stdio.h void calc(float x,float y, float *sum) _ = x+y; main() float x,y,add; scanf(“%f%f“, calc(x,y, printf(“x+y=%fn“,add); calc函数中下划线处应填入的是 ( A) *sum ( B) sum ( C) int i,j;
11、 for(i=0;i 4; i+) ai0=ai3=#; for(j=1; j 3; j+) a0j=a3j=#; if(i!=0) for(i=1;i 3; i+) for(j=0; j 4;j+) printf(“%2c“,aij); printf(“n“); 程序的运行结果是 ( A) # o o # # o o # ( B) # # # # # o o # ( C) # o o # # # # # ( D) # # # # # # # # 25 设有函数定义: void sub(int k,char ch) 则以下对函数 sub的调用语句中,正确的是 ( A) sub(1,97); (
12、 B) sub(2,97); ( C) n=sub(3,a); ( D) sub(4,“a“); 26 有以下程序 #include stdio.h void fun(int *x,int s,int n) int i; for(i=s; i =n; i-) *(x+i+3) = *(x+i); main() int m=0,1,2,3,4,5,6,7,8,9,k; fun(m,10-4,3); for(k=0; k 10;k+) printf(“%d“,mk); 程序的运行结果是 ( A) 0123456345 ( B) 123453456 ( C) 123456666 ( D) 12345
13、4569 27 设有以下说明和语句: int x34,(*p)4; p=a;,则与表达式 *(*p+2) 等价的选项是 ( A) a02 ( B) *(a+2)0 ( C) (*a+2)0 ( D) a20 28 若有定义语句: int m 3=1,2,3,4,5,6,7;,则与该语句等价的是 ( A) int m 3=1,2,3,4,5,6,7; ( B) int m 3=1,2,3, 4 ,5, 6,7; ( C) int m 3=1,2,3,4,5,6,7; ( D) int m 3=1,2,3,4,5,6,7; 29 以下不能将键盘输入的字符串: This is a string回车读
14、入到 str中的程序段是 ( A) char str80; scanf(“%s“,str) ; ( B) char str80; int i=0; while(stri+=getchar()!=n); stri=0; ( C) char str80; gets(str); ( D) char str80, *ps=str; do scanf(“%c“,ps); while(*ps+ !=n); *(ps)=0; 30 有以下程序 #include stdio.h main() char s10=“verygood“, *ps=s; ps+=4; ps=“nice“; puts(s); 程序的运
15、行结果是 ( A) nice ( B) verynice ( C) nicegood ( D) verygood 31 有以下程序 #include stdio.h int fun(char *s) char *p=s; while( *p != 0) p+; return(p-s); main() char *p=“01234“; printf(“%dn“,fun(p); 程序的运行结果是 ( A) 3 ( B) 6 ( C) 4 ( D) 5 32 有以下程序 #include stdio.h main() int findmax(int,int,int),m; m=findmax(a,b
16、,c); int findmax(int x,int y,int z) 则以下叙述正确的是 ( A)在 main函数中声明了 findmax函 数 ( B)在 main函数中定义了 findmax函数 ( C)在 main函数中两次调用了 findmax函数 ( D)在 main函数内、外重复定义了 findmax函数 33 有以下程序 #include stdio.h void fun(int n) int i; if(i=n/10)!=0) fun(i); putchar( n%10+0); main() fun(256); 程序运行后的输出结果是 ( A) 256 ( B) 652 (
17、C) 2560 ( D) 52 34 有以下程序 #include stdio.h #include stdlib.h void fun(int *p1, int *s) int *t; t=(int *)malloc(2 * sizeof(int); *t=*p1 + *p1+; *(t+1)=*p1+ *p1; s=t; main() int a2=1,2,b2=0; fun(a,b); printf(“%d,%dn“,b0,b1); 程序运行后的输出结果是 ( A) 2,6 ( B) 0,0 ( C) 2,4 ( D) 1,2 35 有以下程序 #include stdio.h #def
18、ine FNA(x) x*x #define FNB(x) x+x main() int a=2,b=4; printf(“%d,%dn“,FNA(FNB(a),FNB(FNA(b); 程序运行后的输出结果是 ( A) 8,16 ( B) 16,32 ( C) 8,32 ( D) 16,16 36 设有如下语句 typedef struct Date int year; int month; int day; DATE; 则以下叙述中错误的是 ( A) DATE是用户定义的结构体变量 ( B) struct Date是用户定义的结构体类型 ( C) DATE是用户说明的新结构体类型名 ( D)
19、 struct是结构体类型的关键字 37 设有如下定义 struct int n; char c; a2,*p=a; 则以下错误引用结构体成员 n的是 ( A) (*a)- n ( B) a0.n ( C) p- n ( D) (*p).n 38 有以 下程序 #include stdio.h #include string.h typedef struct char name10; char sex; int age; STU; void fun(STU t) strcpy(t.name,“Tong“); t.age+; main() STU s2=“Hua“,m,18,“Qin“,f,19
20、; fun(s1); printf(“%s,%d,%s,%dn“,s0.name,s0.age,s1.name ,s1.age ); 程序运行后的输出结果是 ( A) Hua,19,Tong,19 ( B) Hua,18,Tong,20 ( C) Tong,19,Qin,19 ( D) Hua,18,Qin,19 39 设有定义: int a=64,b=8;,则表达式 (a if( (fp=fopen(“test.txt“, “w“) = NULL) printf(“不能打开文件! “); exit(0); else printf(“成功打开文件! “); 若文件 test.txt已存在,则以
21、下叙述正确的是 ( A)程序运行后,文件 test.txt中的原有内容将全部消失 ( B)程序运行时,会因文件存在而出错 ( C)对文件 test.txt进行写操作后,可以随机进行读取 ( D)对文件 test.txt写入的内容总是被添加到文件尾部 二、程序填空题 41 下列给定程序中已建立了一个带头结点的单向链表,在 main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确 的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include(s
22、tdio h #include stdlib h #define N 8 typedef strucfi list int data; struct list: *next; SLIST; void fun(SLIST*P) SLIST*t, *s; t=P一 next; s=P; while(t一 next!=NULL) s=t; /*found*/ t=t一 【 1】 ; /*found*/ printf(“ d”, 【 2】 ), S一 next=NULL; /*found*/ free(【 3】 ); SLIST*creatlist(int*a) SLIST*h, *P, *q; in
23、t 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(“ nThe list is NULL! n”); else printf(“ nHead”); doprintf(“一 d”, p一 data); p=p一 next; while(P!=NULL)
24、; printf(“一 End n”); main() SLIST *head; int aN=(11, 12, 15, 18, 19, 22, 25, 29); head=treatlist; (a); printf(“ nOutput from head: n”); outl ist(head); printf(“ nOutput from tail: n”); while(head一 next!=NULL) fun(head); printf(“nn”); printf(“ nOutput from head again: n”); outlist(head); 三、程序修改题 42 在
25、主函数中从键盘输入若干个数放人数组中,用 0结束输入并放在最后一个元素中。下列给定程序中,函数 fun的功能是:计算数组元素中所有值为正数的平均值 (不 包括 0)。 例如,数组中元素的值依次为: 39、一 47、 21、 2、一 8、 15、 0,则程序的运行结果为 19 250000。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h double fun(int x) /*found*/ int sum=0 0; int c=0, i=0; w
26、hile(xi!=0) if(xi 0) sum+=xi; C+: i+: /*found*/ sum =C; return sum; main() int x1000; int i=0; printf(“ nPlease enter some dat a (end with 0): ”); do scanf(“ d”, xi); while(xi+!=0); printf(“、 1f n”, fun(x); 四、程序设计题 43 编写甬数 fun,其功能是:利用下面的简单迭代方法求方程 cos(x)一 x=0的一个实根。 xn+1=cos(xn) 迭代步骤如下: (1)取 x1初值为 0 0
27、; (2)x0=x1,将 x1的值赋给 x0; (3)xl=cos(x0),求出一个新的 x1; (4)若 x0一 x1的绝对值小于0 000001,执行步聚 (5),否则执行步聚 (2); (5)所求 x1就是方程 cos(x)一 x=0的一个实根,作为函数值返回。 程序将输出结果 Root=0 739086。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #includemath h #include stdio h double fun() main() prin
28、tf(“Root= f n”,fun(); 国家二级( C语言)机试模拟试卷 40 答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,称为线性结构。不同时满足以上两个条件的数据结构就称为非线性结构。 A选项中有两个根节点 3和 5故错误。 B选项根节点为 5,排列顺序为 54132, B 选项正确。 C选项有两个根节点 1和 4,故错误。 D选项有两个根节点 1和 2,故错误。 2 【正确答案】 A 【试题解析】 双向链表与树形结构的节点均可以包含两个指针域,但前者为线性结构后者为
29、非线性结构, A选 项正确。双向链表含有指向前件和指向后件的两个指针, C选项错误。线性链表,就是指线性表的链式存储结构。由于这种链表中,每个节点只有一个指针域,故又称为单链表, B选项错误。二叉树为非线结构,叶子节点没有后件但是可以有指向前件的指针, D选项错误。 3 【正确答案】 C 【试题解析】 栈所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。队列指允许在一端进行插入,而在另一端进行删除的线性表。习惯上称往队列的队尾插入一个元素为入队运算,称从队列的 队头删除一个元素为退队运算。元素入栈后为ABCDE,退栈并入队后,队中
30、元素为 EDC。退队时从队头开始,顺序为 EDC,C选项正确。 4 【正确答案】 B 【试题解析】 深度,定义一棵树的根节点所在的层次为,其他节点所在的层次等于它的父节点所在的层次加,树的最大层次称为树的深度。二叉树遍历可以分为 3种:前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。二叉树的后序序列为 DCBGFEA, A为 根节点。中序序列为 DCBAEFG,可知 DCB 为左子树节点, EFG为右子树节点。同理 B 为 C父节点 ,C为 D父节点。同理 E 为 F根节点, F为
31、G根节点。故二叉树深度为 4层。 B 选项正确。 5 【正确答案】 A 【试题解析】 通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期, A选项正确。 6 【正确答案】 C 【试题解析】 深度表示控制的层数。题目中系统共有 3层, C选项正确。 7 【正确答案】 A 【试题解析】 计算机软件按功能分为应用软件、系统软件、支撑软件(或 工具软件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件,如操作系统、数据库管理系统、编译程序、汇编程序和网络软件等, B、 C、 D均为系统软件。应用软件为了应用于特定的领域而开发的软件, A选项正确。
32、8 【正确答案】 A 【试题解析】 采用 E-R方法得到的全局概念模型是对信息世界的描述,并不适用于计算机处理,为了适合关系数据库系统的处理,必须将 E-R图转换成关系模式。下表为 E-R模型和关系模型的对照表。由表中可知 A选项正确。9 【正确答案】 C 10 【正确答案 】 D 【试题解析】 数据库设计的 4个阶段为:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。为一个给定的逻辑模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。数据库物理设计的主要目标是对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有效利用存储空间。一般 RDBMS 中留给用
33、户参与物理设计的内容大致有索引设计、集簇设计和分区设计。 D选项正确。 11 【正确答案】 A 【试题解析】 结构化程序主要由 3种基本控制结构组成,顺序结构是最基本的算法结构,当执 行由这些语句构成的程序时,将按这些语句在程序中的先后顺序逐条执行,没有分支,没有转移,没有步骤之间的相互约束,没有对某一步骤的多次使用,完全按照步骤的原有次序依次执行, B 选项叙述正确。选择结构根据不同的条件去执行不同分支中的语句, C选项叙述正确。循环结构就是根据各自的条件,使同一组语句重复执行多次, D选项叙述正确。三种结构可以嵌套使用, A选项叙述错误,选择 A选项。 12 【正确答案】 A 【试题解析】
34、 sin是库函数,在使用时应包含 math.h,其参数应该为被求角度的弧度制表示。 C语言中 不是已定 义的常量,需要用户自定义或者直接使用 3.14代替 。 B 选项没有替换 ,也没有将 30度换算成弧度,错误。 C选项没有将 30度换算成弧度,错误。 D选项弧度换算错误 , 对应于 180,应该除以 180.0而不是 360.0。 A选项 被正确替换,弧度换算正确, A选项正确。 13 【正确答案】 D 【试题解析】 逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两
35、边数据类型相同才能实现赋值。 成功实现赋值后以左值为返回值。逻辑表达式成立则返回 1,不成立返回 0。A选项逻辑表达式 x=y不成立,则 z=0,表达式值为 0。 B 选项中逗号表达式 x,y取 y值为表达式值,然后赋值给 z=12,表达式值为 12。 C选项逗号表达式 (x,y)取y值为表达式值,然后赋值给 z=12,表达式值为 12。 D选项逗号表达式 (z,x,y)取 y值为表达式值 12。选择 D选项。 14 【正确答案】 A 【试题解析】 A选项 n/10 得到十位数字, n-n/10 得到个位数字,将个位数乘以10加上十位数字, (n-n/10*10)*10+n/10 实现将任意一
36、个两位整数个位数与十位数对换, A选项正确。 B选项 n-n/10*10 得到个位数字, n/10 为十位数字, n-n/10*10+n/10 实现两位整数个位数与十位数之和, B选项错误。 C选项 n/10+(n-n/10)=n,不能实现题目中要求, C选项错误。 D选项 n/10 是十位数字, n-n/10为原两位整数减去十位数字,不是个位数字, D选项错误。 15 【正确答案】 B 【试题解析】 本题考点为 “%“求余符号。 rand()产生随机整数,任何整数对 30求余得到的整数范围为 029,则 y的取值范围为 1y30或者说 0 y30, B选项正确。 16 【正确答案】 A 【试
37、题解析】 dowhile 循环语句一般形式为: do循环体 while(表达式 ),执行过程为:首先执行循环体,之后判断表达式,成立(非 0)则再一次执行循环体,不成立( 0)则退出循环。 A选项,执行函数体 i=11,判断条件 11 0不成立,退出循环,循环次数为 1,不超过 10次, A选项正确。 B选项执行函数体 i=6,判断条件为 i 0,由于执行函数体时 i在增加, i 0一直成立,程序陷入无限循环,循环次数大于 10, B 选项错误。 C选项执行函 数体 i=3,判断条件为 i!=10,由于函数体中 i每次增加 2,所以永远不可能等于 10,故程序会陷入无限循环,循环次数大于 10
38、, C选项错误。 D选项执行函数体 i=4,判断条件为 i!=1,由于函数体中 i每次减少 2,所以永远不可能等于 1,故程序会陷入无限循环,循环次数大于 10,D选项错误。 17 【正确答案】 D 【试题解析】 程序执行过程为:输入 35回车, scanf 函数从键盘读入 35赋值给 x=35,对 if 条件进行判断, 35 10,条件成立,输出 1,不再执行下面的else if 语句,程序结束,输出结果为 1, D选项正确。 18 【正确答案】 A 【试题解析】 while循环语句一般形式为: while(表达式 )循环体 ,执行过程为:首先判断表达式,成立(非 0)则执行循环体,不成立(
39、 0)则退出循环。 A选项执行过程为: i=1,total=1,判断 while循环条件 1 5成立, total=1+1,i=2;判断循环条件执行函数体,直到 i=4,total=1+1+2+3+4,i=5; i=5循环条件不成立,退出循环, A选项不能实现题目要求,错误,选择 A选项。 B 选项执行过程:i=1,total=0, 1 =5成立 , total=0+1=1, i=2;直到 i=5,total=1+2+3+4+5,i=6; i=6条件不成立,退出循环,程序正确。 C选项执行过程: i=0,total=0, 0 5成立,i=1, total=1;直到 i=5,total=1+2+
40、3+4+5; i=5条件不成立,退出循环,程序正确。 D选项执行过程: i=0,total=0, 0 =5成立, total=0, i=1;直到i=5,total=1+2+3+4+5,i=6; i=6条件不成立,退出循环,程序正确。 19 【正确答案】 A 【试题解析】 switch 语句是一种多分支选择语句,执行过程为:计算 switch 后圆括号内的表达式的值,然后用该值逐个去与 case后的常量表达式值进行比较,当找到相匹配的值时,就执行该 case后面的语句。若均不匹配的,就执行 default后面的语句。执行完一个 case后面的语句后,程序就转移到下一个 case处继续执行,并不再
41、进行判断。 break 语句作用是结束整个循环过程,不再判断执行循环的条件是否成立,且在嵌套循环中,其只跳出最内层的一层循环,在分支结构中,跳出最内层分支结构。 continue语句只能用在循环结构中,其作用是结束本次 循环,即不再执行循环体中 continue语句之后的语句,而是立即转入对循环条件的判断与执行。本题执行过程为: i=1,k=0, i 6成立,执行 for循环: i%3=1,匹配case1,k=1,break 退出 switch, i=2; i 6成立,执行 for循环: i%3=2,匹配case2,k=2,执行 continue,由于其只用于循环结构,退出 switch,且不
42、执行此次for循环以后的语句, i=2不变, i 6成立,执行下一次 for循环,以后的循环情况与刚刚的情况完全一致, i=2不会改变,形成无限循环。 A选项正确。 20 【正确答案】 A 【试题解析】 字符是按照其 ASCII形式存储的,其值不能超过范围 0255,否则不是合法的字符。 printf 函数格式控制符 %c以字符形式输出数据。 putchar函数将括号中参数以字符形式输出。 A选项 “a“为字符串,不是单个字符,输出格式不正确,不能输出 a,选择 A选项。字符 a的 ASCII码为 97,字符 A的 ASCII码为 65。 A+32即为 a,故 B选项能输出 a。 C、 D选项
43、 putchar函数参数均为字符a,均可正确输出 a。 21 【正确答案】 B 【试题 解析】 在使用 scanf 函数时要注意,在用 “%c“格式输入字符时,分隔符(空格符、制表符( Tab 键)、回车符)和转义字符都将作为有效字符进行输入。题目中要求以字符形式输入三个数据,空格、回车符、 Tab键均会被视为有效字符赋给对应变量,所以字母 A、 B、 C之间不能有分隔符, B 选项正确。 22 【正确答案】 D 【试题解析】 程序段执行过程为:从键盘读入 3个整型数据分别赋值给 a,b,c,如果 a b,判断 a与 b 是否相等,无论结果如何不做任何改变。如果 a c,判断a与 c是否相等,
44、无论结果如何不做任何改变。最 后对于 a,b,c的值不做任何改变,输出 a的原始值, D选项正确。 23 【正确答案】 A 【试题解析】 程序的执行过程为:从键盘读入两个 float类型数据,分别赋给x,y,调用函数 calc将 x与 y的值与 add变量地址传入函数,地址赋给指针 sum,函数体中将两数之和放入指针指向的地址,指针正确的引用形式为( *sum),这表示变量,可以被赋值。所以横线处填写 *sum, A选项正确。 24 【正确答案】 A 【试题解析】 程序的执行过程为:定义 4行 4列二维数组字符 a并且初始化为a00=,其他元素均为 0。执行 for循环将数组第一列和第四列赋值
45、为 #。执行for循环将数组第一行和第四行的第二个到第三个元素赋值为 #,然后将剩余元素全部赋值为 o。此时矩阵为 #,#,#,#,#,o,o,#,#,o,o,#,#,#,#,#。之后输出矩阵第二行与第三行元素为: # o o #回车 # o o #, A选项正确。 25 【正确答案】 A 【试题解析】 函数的参数有两个,第一个是整型,第二个是字符类型,在调用函数时,实参必须一个是整型,一个是字符型。 A选项中 97为字 符 a的 ASCII码,可以作为字符传入函数, A选项正确。 B选项 97不是合法字符,字符单引号里面只能有一个字符, B 选项错误。函数 sub返回类型为空,即不返回任何值
46、,故 C选项中将函数返回值赋给 n 是不正确的调用方法, C选项错误。 D选项 “a“为字符串,也不是合法的字符, D选项错误。 26 【正确答案】 A 【试题解析】 程序的执行过程为:定义数组 m,并为其赋初值,数组长度为10。调用函数 fun(m,6,3)将数组首地址传入函数,函数实现将数组下标值从 6到 3的元素依次向下标值大的方向移动三个位置, for循环结束之后数组为m=0,1,2,3,4,5,3,4,5,6。依次输出数组元素,结果为 0123453456, B选项正确。 27 【正确答案】 A 【试题解析】 (*p)4是指向有 4个元素的数组指针, a为二位数组首地址,赋值给数组指
47、针 p。题目中表达式 *(*p+2)是对数组 a第 1行第 3列元素的引用。 a02是数组第 1行第 3列元素,与题目中等价, A选项正确。 *(a+2)0是对数组第 3行第 1列元素的引用, B选项错误。 (*a+2)0是对数组第 1行第 3列元素的引用, C选项错误。 a20是数组第 3行第 1列元素, D选项错误。 28 【正确答案】 A 【试题解析】 二维数组的初始化有两种方式,一种是分行初始化,方式为:数据类型数组名 行下标表达式 列下标表达式 =第 0行初值 ,第 1行初值表 , 最后1行初值表 ;,如果初值表只对部分元素赋初值,没有被赋初值的元素将被自动赋值为。另一种是按二维数组在内存中的排列顺序给各元素赋初值,这种方式就是不分行将所有数据依次列在一个花括号里,方式为:数据类型 数组名 行下标表达式 列下标表达式 =初值表