1、国家二级( C语言)笔试模拟试卷 6及答案与解析 1 数据的存储结构是指 ( )。 ( A)存储在外存中的数据 ( B)数据所占的存储空间量 ( C)数据在计算机中的顺序存储方式 ( D)数据的逻辑结构在计算机中的表示 2 下列关于栈的描述中错误的是 ( )。 ( A)栈是先进后出的线性表 ( B)栈只能顺序存储 ( C)栈具有记忆作用 ( D)对栈的插入与删除操作中,不需要改变栈底指针 3 在一棵二叉树上第 5层的结点数最多是 ( )。 ( A) 8 ( B) 16 ( C) 32 ( D) 15 4 按照 “后进先出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)
2、双向链表 ( D)二叉树 5 下列叙述中 j下确的是 ( )。 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上 3种说法都不对 6 下列叙述中正确的是 ( )。 ( A)数据的逻辑结构与存储结构必定是一一对应的 ( B)由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构 ( C)程序设计语言中 的数组一般是顺序存储结构,因此,利用数组只能处理线性结构 ( D)以上 3种说法都不对 7 软件需求分析阶段的工作,可以分为四个方面:需求获取,需求分析,编写需求规格说明书,以
3、及 ( ) ( A)阶段性报告 ( B)需求评审 ( C)总结 ( D)以上都不正确 8 数据库系统的核心是 ( )。 ( A)数据模型 ( B)数据库管理系统 ( C)软件工具 ( D)数据库 9 在数据库系统中,用户所见的数据模式为 ( )。 ( A)概念模式 ( B)外模式 ( C)内模式 ( D)物理模式, 10 对以下二叉树 进行中序遍历的结果是 ( )。 ( A) ACBDFEG ( B) ACBDFGE ( C) ABDCGEF ( D) FCADBEG 11 指出下面不正确的赋值语句 ( A) a+; ( B) a=b; ( C) a+=b; ( D) a=1, b=1; 12
4、 设有以下定义 int a=0; double b=1.25; char c=A; #define d 2 则下面语句中错误的是 ( A) a+; ( B) b+; ( C) c+; ( D) d+; 13 若变量 a是 int类型,并执行了语句: a=A+1.6;,则正确的叙述是 ( A) a的值是字符 C ( B) a的值是浮点型 ( C)不允许字符型和浮点型相加 ( D) a的值是字符 A的 ASCII值加上 1 14 有以下程序 main ( ) int x=102, y=012; print f ( “%2d, %2dn“ ,x,y); 执行后输出结果是 ( A) 10,01 ( B
5、) 02,12 ( C) 102,10 ( D) 02,10 15 有以下程序段 int m=0,n=0; char c=a; scanf (“%d%c%d“, printf (“%d, %c, %dn“, m, c, n); 若从键盘上输入: 10A10回车,则输出结果是 ( A) 10,A,10 ( B) 10,a,10 ( C) 1O,a,0 ( D) 10,A,0 16 有定义语句 : “int a=1, b=2, c=3, x;“ , 则以下选项中各程序段执行后, x的值不为3 ( A) if(c a)x=1; else if(b a)x=2: else x=3; ( B) if(a
6、 3)x=3: else if(a 2)x=2; else x=1; ( C) if(a 3) x=3; if(a 2) x=2; if(a l)x=1; ( D) if(a b) x=b; if(b c) x=c if(c a) x=a; 17 有以下程序 main() int s=0, a=1, n; scanf ( “%d“, do s+=l; a=a-2; while (a! =n); print f ( “%dn“ , s ); 若要使程序的输出值为 2,则应该从键盘给 n输入不敷出值是 ( A) -1 ( B) -3 ( C) -5 ( D) 0 18 若有如下程序段,其中 s.
7、a. b. c均已定义为整型变量,且 a. c均已赋值 (c大于 0) s=a; for (b=1;b =c;b+) s=s+1; 则与上述程序段功能等价的赋值语句是 ( A) s=a+b; ( B) s=a+c; ( C) s=s+c; ( D) s=b+c; 19 有以下程序 main ( ) int k=4, n=0; for ( ; n k;) n+; if (n%3 !=0) continue; k- ; print f ( “%d, %dn“, k, n); 程序运行后的输出结果是 ( A) 1, 1 ( B) 2, 2 ( C) 3, 3 ( D) 4, 4 20 有以下程序 m
8、ain ( ) int i,s=0; for (i=1;i 10; i+=2) s+=i+1; print f ( “%dn“, s); 程序执行后的输出结果是 ( A)自然数 1 9的累加和 ( B)自然数 1 10的累加和 ( C)自然数 1 9中奇数之和 ( D)自然数 1 10中偶数之和 21 若 x和 y代表整型数,以下表达式中不能正确表示数学关系 x-y 10的是( )。 ( A) abs(x-y) 10 ( B) x-y -10 printf(“n“); 执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 23 以下选项中,与 k=n+完全等价
9、的表达式是 ( )。 ( A) k=n, n=n+1 ( B) n=n+1,k=n ( C) k=+n ( D) k+=n+1 24 有以下程序: main () int i, s=0; for(i=1; i 10; i+=2) s+=i+1; printf(“%dn“, s); 程序执行后的输出结果是 ( )。 ( A)自然数 1 9的累加和 ( B)自然数 1 10的累加和 ( C)自然数 1 9中奇 数之和 ( D)自然数 1 10中偶数之和 25 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。 ( A)函数的实参和其对应的形参共占同一存储单元 ( B)形参只
10、是形式上的存在,不占用具体存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的形参和实参分别占用不同的存储单元 26 有以下程序段: struct stint x; int *y; *pt;int a=1,2, b=3,4;struct st c2=10,a,20,b;pt=c; 以下选项中表达式的值为 11的是 ( )。 ( A) *pt- y ( B) pt- x ( C) +pt- x ( D) (pt+)- x 27 设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof (fp)的返回值为 ( )。 ( A) EOF ( B)非 0值 ( C) 0 (
11、D) NULL 28 有以下函数 :int fun(char *s) char *t = s; while (*t+); return (t-s); 该函数的功能是 ( ) ( A)比较两个字符串的大小 ( B)计算 s所指字符串占用内存字节个数 ( C)计算 s所指字符串的长度 ( D)将 s所指字符串自制到字符串 t中 29 若有定义 :int x=0, *p=, 则语句 printf(“%dn“,*p);的输出结果是 ( )。 ( A)随机值 ( B) 0 ( C) x 的地址 ( D) p的地址 30 有以下程序 :int *flint *x, int *y) if(*x *y) re
12、turn x; else return y;main() int a=7,b=8,*p,*q,*r; p= q= r=f(p, q); printf(“%d, %d, %dn“,*p,*q,*r);执行后输出结果是 ( )。 ( A) 7,8,8 ( B) 7,8,7 ( C) 8,7,7 ( D) 8,7,8 31 以下程序中函数 f的功能是 : 当 flag 为 1时,进行由小到大排序 ;当 flag 为 0时 ,进行由大到小排序。 void f(int b, int n, int flag)int i, j, t; for (i=0; i n-1; i+) for (j=i+1; j n
13、; j+) if(flag ? b! j: bi bj) t=bi; bi=bj; bj=t; main () int a10=5,4,3,2,1,6,7,8,9,10, i; f( f(a, 5, 1), for (i=0; i 10; i+) printf(“%d,“, ai);程序运行后输出结果是 ( )。 ( A) 1,2,3,4,5,6,7,8,9,10, ( B) 3,4,5,6,7,2,1,8,9,10, ( C) 5,4,3,2,1,6,7,8,9,10, ( D) 10,9,8,7,6,5,4,3,2,1, 32 有以下程序 :main()int i, j, x=0; for
14、(i=0; i 2; i+) x+; for( j=0; j =3; j+) if(j%2) continue; x+; x+; printf(“x=%dn“, x);程序执行后输出结果是 ( )。 ( A) x=4 ( B) x=8 ( C) x=6 ( D) x=12 33 有以下程序 :void sum(int *a) a0=a1; main() int aa10=1,2,3,4,5,6,7,8,9,10, i; for(i=2;i =0;i-) sum( printf(“%dn“, aa0);执行后的输出结果是 ( )。 ( A) 4 ( B) 3 ( C) 2 ( D) 1 34 有
15、以下程序 :int f(int b4) int i, j, s=0; for(j=0j 4;j+) i=j; if(i 2) i=3-j; s+=bij; return s;main() int a44= 1,2,3,4, 0,2,4,6,3,6,9,12 , 3,2,1,0 ; printf(“%dn“, f(a); 执行后的输出结果是 ( )。 ( A) 12 ( B) 11 ( C) 18 ( D) 16 35 下列选项中正确的语句是 ( )。 ( A) chars 8; s=“Beijing“; ( B) char*s: s=Bei jing“); ( C) chars 8: s=“B
16、ei jing“; ( D) char*s: s=“Bei jing“; 36 有以下程序: mare()int i, s=0,t=1, 2, 3, 4, 5, 6, 7,8,9; for(i=0;i 9;i+=2) s+=* (t+ i); printf (“%dn“, s); 程序执行后的输出结果是 ( )。 ( A) 45 ( B) 20 ( C) 25 ( D) 36 37 程序中头文件 type1.h 的内容是 #define N 5#define M1 N*3程序如下 :#define “type1.h“#define M2 N*2main () int i; i=M1+M2; p
17、rintf(“%dn“, i); ) 程序编译后运行的输出结果是 ( )。 ( A) 10 ( B) 20 ( C) 25 ( D) 30 38 有以下程序: void swap (char *x, char *y)char t; t=*x, *x=*y;*y=t; main()char* s1=“abc“, *s2=“123“; swap(s1,s2); printf(“%s, %sn“, s1,s2);程序执行后的输出结果是 ( )。 ( A) 123,abc ( B) abc,123 ( C) 1bc,a23 ( D) 321,cba 39 以下叙述中正确的是 ( )。 ( A)周部变量
18、说明为 static存储类,其生存期将碍到延长 ( B)全局变量说明为 static 存储类,其作用域将被扩大 ( C)任何存储类的变量在未赋初值时,其值都是不确定的 ( D)形参可以使用的存储类说明符与局部变量完全相同 40 有以下程序 :main() union unsigned int n; unsigned char c; u1; u1.c=A; printf(“%cn“,u1.n);执行后输出结果是 ( )。 ( A)产生语法错 ( B)随机值 ( C) A ( D) 65 41 有以下程序 : main() int a=1,b; for(b=1 ;b =10;b+) if(a =8
19、) break; if(a%2=1) a+=5; continue; a-=3; printf(“%dn“, b); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 42 有以下程序 :main() char *p=“3697“,“2584“; int i, j; long num=0; for(i=0;i 2;i+) j=0; while(pij!=0) if(pilj -0)%2) num=10*num+ pij -0; j+=2; printf(“%dn“, num);程序执行后的输 出结果是 ( )。 ( A) 35 ( B) 37 ( C)
20、39 ( D) 3975 43 有以下程序 :#include string .h void f(char *s, char *t) char k; k=*s; *s=*t; *t=k; s+; t- -; if(*s) f(s, t);main() char str10=“abcdefg“,*p; p=str+strlen(str)/2+ 1; f(p,p-2); printf(“%sn“, str);程序运行后的输出结果是 ( )。 ( A) abcdcfg ( B) gfedcba ( C) gbcdefa ( D) abedcfg 44 有以下程序 :street STU char n
21、um10; float score3; ;main() struct STU s3= “20021“,90,95,85, “20022“,95,80,75 , “20023“,100, 95, 90 ,*p=s, int i; float sum=0; for(i=0;i 3 ,i+) sum=sum+ p- scorei; printf(“%6.2fn“,sum);程序运行后的输出结果是 ( )。 ( A) 260 ( B) 270 ( C) 280 ( D) 285 45 已定义以下函数 :fun (Char* p2, char* p1) while (*p2=*p1) != 0) p1+
22、;p2+; 函数的功能是 ( )。 ( A)将 p1所指字符串复制到 p2所指内存空间 ( B)将 p1所指字符串的地址赋给指针 p2 ( C)对 p1和 p2两个指针所指字符串进行比较 ( D)检查 p1和 p2两个指针所指字符串中是否有 0, 46 若要说明一个类型名 STP,使得定义语句 STP 轧等价于 char*s;,以下选项中正确的是 ( )。 ( A) typedef STP char*s; ( B) typedef *char STP; ( C) typedef STP *char; ( D) typedef char* STP; 47 有如下程序: #include stdi
23、o. h main () FILE *fp1; fp1=fopen (“fl.txt“, “w“); fprintf(fp1,“abc“); fclose (fp1); 若文本文件 f1.txt 中原有内容为:good,则运行以上程序后文件 f1 txt 中的内容为 ( )。 ( A) goodabc ( B) abed ( C) abc ( D) abcgood 48 以下程序的输出的结果是 ( )。 int x=3; main() int i; for(i=1;i x;i+)incre();incre() staic int x=1; x*=x+1; printf(“ %d“, x); (
24、 A) 33 ( B) 22 ( C) 26 ( D) 25 49 若以下定义: struct link int data; struck link *next; a, b, c, *p, *q;且变量a和 b之间已有下图所示的链表结构: 指针 p指向变量 a, q指向变量 c,则能够把 c插入到 a和 b之间并形成新的链表的语句组 是 ( )。 ( A) a. next=c; c. next=b; ( B) p. next=q; q. next=p. next; ( C) p- next= q- next=p next; ( D) (*p).next=q;(*q).next= for(i=0
25、; i n-1; i+) for(j=i+1;j n; j+) if(strcmp(pi, pj 0) strcpy(t, pi); strcpy(pi,pj); strcpy(pj,t); main() char p10=“abc“, “aabdfg“, “abbd“, “dcdbe“, “cd“; int i; f(p,5); printf(“%dn“, strlen(p0); 程序运行后的输出结果是 ( )。 ( A) 6 ( B) 4 ( C) 5 ( D) 3 51 数据管理技术发展过程经过人工管理、文件系统和数据库系统这 3个阶段,其中数据独立性最高的阶段是【 】。 52 在面向对
26、象方法中,允许作用于某个对象上的操作称为【 】。 53 软件生命周期包括 2今阶段。为了使各时期的任务更明确,又可分为 3个时期:软件定义期、软件开发期、软件维护期。编码和测试属于【 】期。 54 在关系运算中,【 】运算是对两个具有公共属性的关系所进行的运算。 55 实体之间的联系可以归结为一对一的联系,一对多的联系与多对多的联系 。如果一个学校有许多学生,而一个学生只归属于一个学校,则实体集学校与实体集学生之间的联系属于【 】的联系。 56 执行以下程序后的输出结果是【 】。 main() int a=10; a=(3*5,a+4); printf(“a=%dn“,a); 57 以下程序运
27、行后的输出结果是【 】。 main() int m=011,n=11; printf(“%d %dn“,+m,n+); 58 有以下程序: main() int t=1,i=5; for(; i =0;i-) t*=i; printf(“%dn“,t); 执行后输出结果是【 】。 59 以下程序的运行结果是【 】。 main() int a=2,b=7,c=5; switch(a 0) case 1: switch (b 0) case 1:printf(“); break; case 2:pnntf(“!“); break; case 0: switch (c=5) case 0:pnntf
28、(“*“); break; case 1:printf(“#“); break; case 2:printf(“$“); break; default: printf(“ printf(“n“); 60 以 下程序的输出结果是【 】。 #include stdio.h main() int i; for(i-a; i f; i+,i+) printf(“%c“,i-a+A); printf(“n“); 61 以下 sstrcpy()函数实现字符串复制,即将 t所指字符串复制到 s所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) wh
29、ile(*s+=【 】 ); main() char str1100,str2=“abcdefgh“; sstrcpy(str1,str2); printf(“%sn“,str1); 62 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 【 】 (double,double); main() double x,y; scanf(“%1f%1f“, printf(“%1fn“,max(x,y); double max(double a,double B) return(a b ? a:b); 63 设有说明; struct DATE int year; int month; int
30、 day; 请写出一条定义语句,该语句定义 d为上述结构体类型变量,并同时为其成员year、 month、 day依次赋初值 2006、 10、 1:【 】。 64 以下程序的功能是将宁符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如,输 入字符串: abcl23edf4568h,执行程序后输出: 123456。请填空。 #include stdio.h #include ctype.h main() char s80,d80; int i,j; gets(s); for(i=j=0;si!=0;i+) if(【 】 ) dj=si;j+; dj=0; puts(d); 65
31、有以下程序段,且变量已正确定义和赋值。 for(s=1.0, k=1; k =n;k+) s=s+1.0/(k*(k/1); printf(“s=%fn“,s); 请填空,使下面程序段的功能与之完全相同。 s=1.0; k=1; while(【 】 ) s=s+1.0/(k*(k+1);【 】 ; printf(“s-=%fnn“,s); 66 函数 YangHui的功能是把杨辉三角形 的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: 第 0列元素和主对角线元素均为 1。 其余元素为其左上方和正上方元素之和。 数据的个数每行递
32、增 1。 请将程序补充完整。 #define N 6 void yanghui(int xNN) int i,j; xO0=1; for(i=1;i N;i+) xi0=【 】 =1; for(j=1;j i;j+) xij=【 】 ; ) 67 以下程序的功能是输入任意整数给 n后,输出 n行由大写字母 A开始构成的三角形字符阵列图形。例如,输入整数 5时 (注意: n不得大于 10),程序运行结果如下: ABCDE FGHI JKL MN O 请填空完成该程序。 main() int i,j,n; char ch=A; scanf(“%d“, if(n 11) for(i=1;i =n;i
33、+) for(j=1;j =n-i+1;j+) printf(“%2c“,ch); 【 】 ; 【 】 ; else printf(“n is too large!n“) printf(“n“0); 国家二级( C语言)笔试模拟试卷 6答案与解析 1 【正确答案 】 D 【试题解析】 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数据的物理结构,所以选项 D正确。 2 【正确答案】 B 【试题解析】 本题考核栈的基本概念,我们叫可以通过排除法来确定本题的答案。栈是限止在一端进行插入与删除的线性表,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插
34、入的元素,从而也是最后才能被删除的元素,即栈是按照 ”先进后出 ”或 ”后进先出 ”的原则组织数据的,这便是栈的记忆作用,所以选项 A和选项 C正确。对栈进行插入和删除操作时 ,栈顶位置是动态变化的,栈底指针不变,选项 D正确。由此可见,选项 B错误。 3 【正确答案】 B 【试题解析】 根据二叉树的性质,在二叉树的第 K层上,最多有 2k-1个结点。所以,第五层的结点数最多为 16。 4 【正确答案】 B 【试题解析】 “后进先出 ”表示最后被插入的元素最先能被删除。选项 A中,队列是指允许在 端进行插入、而在另一端进行删除的线性表,在队列这种数据结构中,最先插入的元素将最先能够被删除,反之
35、,最后插入的元素将最后才能被删除,队列又称为 “先进先出 ”的线性表,它体现了 “先来先 服务 ”的原则:选项 B中,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素,栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。队列和栈都届于线性表,它们具有顺序存储的特点,所以才有 “先进先出 ”和 “后进先出 ”的数据组织方式。双向链表使用链式存储方式,二叉树也通常采用链式存储方式,它们的存储数据的空间可以是不连续的,各个数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。所以选项 C和选项 D错误。本题的正确答案为选项 B。 5 【正确答案】 A 【试题解析】 程序执行的实际计算
36、工作量与不 仅与程序的控制结构有一定的关系,与处理的数据量有关,而民还与数据的存储结构密切相关。所以,选项 A正确,选项 B和选项 C错误。 6 【正确答案】 D 【试题解析】 本题考查数据结构的基本知识。数据之间的相耳关系称为逻辑结构。通常分为 4类基本逻辑结构,即集合、线性结构、树形结构、图状结构或网状结构。存储结构是逻辑结构在存储器中的映象,它包含数据元素的映象和关系的映象。存储结构在计算机中有两种,即顺序存储结构和链式存储结构。顺序存储结构是把数据元素存储在一块连续地址空间的内存中;链式存储结构是使用指针把相 互直接关联的节点链接起来。因此,这两种存储结构都是线性的。可见,逻辑结构和存
37、储结构不是一一对应的。因此,选项 A和选项 B的说法都是错误的。无论数据的逻辑结构是线性的还是非线性的,只能选择顺序存储结构或链式存储结构来实现存储。程序设计语言中,数组是内存中一段连续的地址空间,可看作是顺序存储结构。可以用数组来实现树型逻辑结构的存储,比如二叉树。因此,选项 C的说法是错误的。 7 【正确答案】 B 【试题解析】 需求分析阶段的工作,可以概括为以下 4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。本 题的正确答案为选项 B。 8 【正确答案】 B 【试题解析】 数据库管理系统是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,因此
38、数据库管理系统是数据库系统的核心。 9 【正确答案】 B 【试题解析】 数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式也称子模式或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。 10 【正确答案】 A 【试题解析】 二叉树的中序遍历递归算法为:如果根不空,则 按中序次 序访问左子树, 访问跟结点, 按中序次序访问右子树;否则返回。本题中,根据中序遍历算法,应首先按照中序次序访问以 C为根结点的左子树,然后再访问根结点 P,最后才访问以 E为根结点的右子树。遍历以 C为根结点的左子树同样要遵循中序遍历算法,因此中序遍历结果为 ACBD;然后遍历根结点 P;遍历以
39、 E为根结点的右子树,同样要遵循中序遍历算法,因此中序遍历结果为 EG。最后把这三部分的遍历结果按顺序连接起来,中序遍历结果为 ACBDFEG。因此,本题的正确答案是选项 A。 11 【正确答案】 B 【试题解析】 本题考核的 知识点是赋值语句的正确使用。 C语言中赋值语句是由赋值表达式加 “; ”构成的赋值表达式的形式为:变量:表达式;。选项 A中a+相当于 a+1,是赋值语句;选项 C和选项 D也是赋值语句只有选项 B不是,因为选项 B中 “=”符号是等于的意思,并不是赋值运算符,所以, 4个选项中 B符合题意。 12 【正确答案】 D 【试题解析】 本题考核的知识点是在自加运算符的运算对
40、象。自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中, #defined2定义了 d为常数 2,不能在对 d进行自加运算故选项 D是个不正确的语句,所以, 4个选项中选项 D符合题意。 13 【正确答案】 D 【试题解析】 本题考核的知识点是不同变量的类型的混合运算。在 C语言中规定允许不同类型的量进行运算,但在运算时需转换成高级的类型进行运算。在表达式中有字符型和实型参加运算时,统一转换为实型再运算,当运算结果存入变量时再转换为该变量的类型。所以, 4个选项中 D为所选。 14 【正确答案】 C 【试题解析】 本题考核的知识点是输出函数 printf()的应用。 本题
41、中, printf(%2d,%2dn”, x,y)表示 输出形式是十进制整数,域宽是 2,而在 C语言中规定:当域宽小于实际宽度时域宽不起作用,按实际宽度输出因此最后的输出值为 102和 10,所以, 4个选项中选项 C符合题意。 15 【正确答案】 A 【试题解析】 本题考核的知识点是 scallf()函数输入格式。格式字符 “%d”用于输入整数, “%C”用来输入字符。在输入时,系统把第一个 10作为整数 10赋给 m,把随后的 A作为字符赋值给 c,后面的 10作为整数赋给 n,最后输出的结果为10, A, 10所以, A选项为所选。 16 【正确答案】 C 【试题解析】 本题考核的知识
42、点是 if-else语句的程序分析。 选项 A首先判断 if语句条件中表达式的值 “3 1”为假,然后执行最近的 else后面的语句,该 else后面又为 if-else语句,在这个 if-else语句中首先判断该 if语句条件中表达式的值 “2 1”为假,程序执行其最近的 else后面的语句,将 3赋值给x。 选项 B中首先判断 if语句条件中表达式的值 “1 3”为真,然后执行最近的 else后面的语句 “x=3”,后面的 else不再执行,最后 x的值为 3。 选项 C中,首先选执行第一条 if,由于 “1 3”为真,执行此 if后面的语句“x=3”,接着执行第二条 if语句,由于 “1
43、 2”为真,执行此 if后面的语句 “x=2”,接着执行第三条语句,由于 “1 1”为假,后面的语句不执行,所以最后的 x值为 2不为 3。 选项 D中,首先选执行第一条 if语句,由于 “a b”为真,执行此 if后面的语句“x=b”;接着执行第二条 if语句,由于 “b c”,为真,执行此 if后面的语句“x=c”,接着执行第三条 if语句,由于 “c a”为假,后面的语句不执行,所以最后的 x值为 c即为 3所以, 4个选项中选项 c符合题意。 17 【正确答 案】 B 【试题解析】 本题考核的知识点是 do-while循环的简单应用。根据题目要求,最后要使输出的 s值为 2,在程序中改
44、变 s的值语句只有循环体中的 s+=1;语句,而初始 s的值为 0,显然要使 s的值变为 2,该语句必须执行两次,即 do-while循环中的循环体要执行两次,而在 do-while中,首先不进行条件而执行 do后面的循环体语句,然后在判断 while循环条件。所以说不管循环判断条件是否为真s+=1;语句至少执行一次,根据分析,只需要 while后面括号的循环判断表达式的值为真成立一次且只能为真一次,将 四个选项中的内容依次代入该程序中不难得到只有 n=-3刚好使循环判断条件 a!=n为真一次故 4个选项中选项 B符合题意。 18 【正确答案】 B 【试题解析】 本题考核的知识点是 for循环
45、次数的计算本程序中 for循环的次数为 c-1+1共循环了 c次,而每循环一次 s的值加 1,所以 s的值为 s+c而最开始s的值为 a,故 4个选项中选项 B符合题意 19 【正确答案】 C 【试题解析】 本题考核的知识点是 for语句和 continue语句的综合应用。在本程序的 for循环中,用到了一个 continue语句, continue语句的作用是停止本次循环,即不执行循环体内 continue语句后面的其他语句,继续下次循环的条件判断。首先在 for循环中 n自加 1(值变为 1),然后执行后面的 if语句, 由于 if语句后面括号的表达式 (1%3!=0)的值为真,程序执行
46、continue语句,回到 for循环的开始部分,并且判断 for循环中的条件表达式 (n k)为真,重复执行 “n+; ”语句,如此循环直到 n=3时, if语句判定条件中表达式 (3%3!0)的值为假,程序执行if语句后面的 “k-”语句,此时 k的值为 3,不满足 “n k”,退出 for循环。故最后的 k和 n的值为 3和 3,选项 C符合题意。 20 【正确答案】 D 【试题解析】 本题考核的知识点是 for循环语句和复合赋值 +=运算符的应用。本题中, i赋初值为 1,并对其每次进行加 2操作,即 i每次均为 1 10之间的奇数, s+=i+1,即 s=s+i+1,相当于 s等于原来的 s每次加上 1 10之间的偶数,直到 i 10不成立当 i=1时, s=0+1+1=2; 当 i=3时, s=2+3+1=2+4;当 i=5时,s=2+4+5+1=2+4+6;当 i=7时, s=2+4+6+7+1=2+4+6+8;当 i=9时, s=2+4+6+8+9+1=2+4+6+8+10; 当 i=11时, i 10不成立,结束循环。所以, 4个选项中选项 D符合题意。 21 【正确答案】 C 【试