1、国家二级( C语言)机试模拟试卷 75及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)程序可以作为算法的一种表达方式 ( B)算法的有穷性是指算法的规模不能太大 ( C)算法的复杂度用于衡量算法的控制结构 ( D)算法的效率与数据的存储结构无关 2 某循环队列的存储空间为 Q(1: m),初始状态为: front=rear=m。现经过一系列的入队操作和退队操作后, front=m-1, rear=m,则该循环队列中的元素个数为( )。 ( A) m-1 ( B) 1 ( C) m ( D) 0 3 能从任意一个结点开始没有重复地扫描到所有结点的数据结构是 ( )。 ( A)
2、循环链表 ( B)双向链表 ( C)二叉链表 ( D)有序链表 4 某棵树中共有 25个结点,且只有度为 3的结点和叶子结点,其中叶子结点有 7个,则该树中度为 3的结点数为 ( )。 ( A)不存在这样的树 ( B) 7 ( C) 8 ( D) 6 5 在最坏情况下,二分查找法的时间复杂度为 ( )。 ( A) log2n ( B) n 2 ( C) log2n ( D) n 6 某二叉树共有 730个结点,其中度 为 1的结点有 30个,则叶子结点个数为( )。 ( A)不存在这样的二叉树 ( B) 351 ( C) 1 ( D) 350 7 软件开发中需求分析的主要任务是 ( )。 (
3、A)定义和描述目标系统 “做什么 ” ( B)获取需求 ( C)给出软件解决方案 ( D)需求评审 8 软件按功能可以分为应用软件、系统软件和支撑软件 (或工具软件 )。下面属于系统软件的是 ( )。 ( A)学生成绩管理系统 ( B) ERP系统 ( C)办公自动化系统 ( D) UNIX系统 9 医生可以为病人开不同的药,而 同一种药也可由不同医生开给病人,则实体医生和实体药之间的联系是 ( )。 ( A)多对多 ( B)一对一 ( C)多对一 ( D)一对多 10 学生选课成绩表的关系模式是 SC(S#, C#, G),其中 S#为学号, C#为课号, G为成绩,检索课号为 2且成绩及格
4、的学生学号的表达式为 ( )。 ( A) S#(C#=2 G60(SC) ( B) G60(SC) ( C) C#=2 G60(SC) ( D) S#(C#=2(SC) 11 若想定义 int型变量 a, b, c, d并都赋值为 1,以下 写法中错误的是 ( )。 ( A) int a=b=c=d=1; ( B) int a=1, b=1, c=1, d=1; ( C) int a, b, c, d; a=b=c=d=1; ( D) int a, b, c, d=1; a=b=c=d; 12 若有定义: char c; double d;程序运行时输入: 1 2回车,能把字符 1输入给变量
5、c、数值 2输入给变量 d的输入语句是 ( )。 ( A) scanf(“ d lf“, &c, &d); ( B) scanf(“ c lf“, &c, &d); ( C) scanf(“ c f“, C, &d); ( D) scanf(“ d f“, &c, &d); 13 输出语句: printf(“ d n“, 11+011);的输出结果是 ( )。 ( A) 20 ( B) 22 ( C) 022 ( D) 021 14 以下叙述正确的是 ( )。 ( A)有些算法不能用三种基本结构来表达 ( B) C语言程序不编译也能直接运行 ( C)结构化程序的三种基本结构是循环结构、选择结构
6、、顺序结构 ( D)如果 C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序 15 若有定义: double x;,则表达式: x=0, x+10, x+的值是 ( )。 ( A) 11 0 ( B) 10 0 ( C) 0 0 ( D) 1 0 16 有以下程序: #include stdio h main() int x=1, y=0, a=0, b=0; switch(x) case1: switch(y) case0: a+; break; case1: b+; break; case2: a+; b+; break; case3: a+; b+; printf(“a=
7、 d, b= d n“, a, b); 程序的运行结果是 ( )。 ( A) a=2, b=2 ( B) a=2, b=1 ( C) a=1, b=1 ( D) a=1, b=0 17 以下程序段中的变量已正确定义 folr(i=0; i 4; i+, i+) for(k=1; k 3; k+); printf(“*“); 该程序段的输出结果是 ( )。 ( A) * ( B) * ( C) * ( D) * 18 有以下程序: #include stdio h main() char c; for(; (c=getchar( )!=#; ) if(c =a&c =z)c=c-a+A; put
8、char(+c); 执行时输入: aBcDefG#回车,则输出结果是 ( )。 ( A) AbCdEFg ( B) ABCDEFG ( C) BCDEFGH ( D) bodefgh 19 有以下程序: #include stdio h int f(int x); main() int n=1, m; m=f(f(f(n); printf(“ d n“, m); int f(int x) return x*2; 程序运行后的输出结果是 ( )。 ( A) 4 ( B) 2 ( C) 8 ( D) 1 20 关于地址和指针,以下叙述正确的是 ( )。 ( A)可以通过强制类型转换让 char型指
9、针指 double型变量 ( B)函数指针 p指向一个同类型的函数 f时,必须写成: p=&f; ( C)指针 p指向一个数组 f时,必须写成: p=&f; ( D)一个指针变量 p可以指向自身 21 有以下程序: #inchude sttdio h #define N4 int fun(int aN) int i, j, x=0; for(i=0; i N; i+) for(j=0; J N; J+) if(i=j) x+=aN-1-ji; return x; main() int xNN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
10、17, y; y=fun(x); printf(“ d n“, y); 程序运行后的输出结果是 ( )。 ( A) 34 ( B) 35 ( C) 28 ( D) 59 22 有以下程序: #include stdio h #define N3 void fun(int xN, int*r1, int*r2) int i, j; *r1=*r2=0: for(i=0; i N; i+) j=N-(i+1); if(x*r1*r2 xij)*r1=i; *r2=j; main() int aNN=1, 5, 7, 9, 2, 6, 4, 3, 8, i, j; fun(a, &i, &j); p
11、rintf(“ d n“, aij); 程序运行后的输出结果是 ( )。 ( A) 8 ( B) 6 ( C) 7 ( D) 9 23 对于以下函数声明 void fun(int array4, int*ptr); 以下叙述中正确的是 ( )。 ( A) array, ptr都是指针变量 ( B)调用 fun函数时,实参的值将逐一复制给 array ( C)调用 fun函数时, array按值传送, ptr按地址传送 ( D) array是数组, ptr是指针,它们的性质不同 24 设有定义: int x10, *p=x, i;,若要为数组 x读入数据,以下选项正确的是( )。 ( A) fo
12、r(i=0; i 10; i+)scanf(“ d“, p+i); ( B) for(i=0; i 10; i+)scanf(“ d“, *p+i); ( C) for(i=0; i 10; i+)scanf(“ d“, *(P+i); ( D) for(i: O; i 10; i+)scanf(“ d“, xi); 25 有以下程序: #include stdio h main() char s=“012xy 08s34f4w2“; int i, n=0; for(i=0; si!=0; i+) if(si =0&si =9)n+; printf(“ d n“, n); 程序运行后的输出结果
13、是 ( )。 ( A) 7 ( B) 0 ( C) 3 ( D) 8 26 有以下程序段: char str412=“aaa“, “bbb“, “ccc“, “ddd“, *p4; int i; for(i=0; i 4; i+)pi=stri; 以下选项中不能正确引用字符串的是 ( )。 ( A) *p3 ( B) p3 ( C) str2 ( D) *p 27 有以下程序: #include stdio h int mul(int val) static int init=1; return init*=val; main() int i; for(i=1; i =5; i+) print
14、f(“ d, “, mul(i); 程序运行后的输出结果是 ( )。 ( A) 1, 2, 6, 24, 120, ( B) 1, 2, 3, 4, 5, ( C) 1, 1, 1, 1, 1, ( D) 1, 2, 4, 6, 8, 28 有以下程序: #include stdio h void fun(int n) static int k=0; if(n 0)printf(“-“); n=-n; k+=n 10; printf(“ d, “, k); if(n 10)fun(n 10); main() int x=-12; fun(x); printf(“ n“); 程序运行后的输出结果
15、是 ( )。 ( A) -2, 3, ( B) -1, -2, ( C) -2, -3, ( D) -2, 1 29 有以下程序: #include stdio h stmct Sint n; int a20; ; void f(stmct S*p) int i, j, t; for(i=0; i p- n-1; i+) for(j=i+1; j p- n; j+) if(p- ai p- aj)t=p- ai; p- ai=p- aj; p- aj=t; main() int i; struct S s=10, 2, 3, 1, 6, 8, 7, 5, 4, 10, 9; f(&s); fo
16、r(i=0; i s n; i+)printf(“ d, “, s ai); 程序运行后的输出结果是 ( )。 ( A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ( B) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, ( C) 2, 3, 1, 6, 8, 7, 5, 4, 10, 9, ( D) 10, 9, 8, 7, 6, 1, 2, 3, 4, 5, 30 有以下程序: #include stdio h typedef struet stu char name10; char gender; int score; STU; void f(STU a
17、, STU*b, STU c) *b=c=a; printf(“ s, c, d, “, b- name, b- gender, b- score); printf(“ s, c, d, “, c name, c gender, c score); main() STU a=“Zhao“, m, 290, b=“Qian“, f, 350, c=“Sun“, m, 370; f(a, &b, c); printf(“ s, c, d, “, b name, b gender, b score); printf(“ s, c, d n“, c name, c gender, c score);
18、程序运行后的输出结果是 ( )。 ( A) Zhao, m, 290, Zhao, m, 290, Zhao, m, 290, Sun, m, 370 ( B) Zhao, m, 290, Zhao, m, 290, Zhao, m, 290, Zhao, m, 290 ( C) Zhao, m, 290, Zhao, m, 290, Qian, f, 350, Sun, in, 370 ( D) Zhao, m, 290, Zhao, m, 290, Qian, f, 350, Zhao, m, 290 31 有以下程序 #inelude stdio h #define SUB(x, y)(
19、x)*(y) main() int a=3, b=4; printf(“ d n“, SUB(a+, b+); 程序运行后的输出结果是 ( )。 ( A) 15 ( B) 12 ( C) 16 ( D) 20 32 有以下程序 #include stdio h main() struct cmint x; int y; a2=4, 3, 2, 1; printf(“ d n“, a0 y a0 x*a1 x); 程序运行后的输出结果是 ( )。 ( A) l ( B) 4 ( C) 0 ( D) 3 33 以下选项中的编译预处理命令行,正确的是 ( )。 ( A) #define E 2 38
20、 ( B) #define PI_2 1 56 ( C) #define int INT ( D) #DEFINE TRUE 34 设有以下程序段: struct book float price; char language; char title20; rec, *ptr; ptr=&rec; 要求输入字符串给结构体变量 rec的 title成员,错误的输入语句是 ( )。 ( A) scanf(“ s“, ptr title); ( B) scanf(“ s“, rec title); ( C) scanf(“ s“, (*ptr) title); ( D) scanf(“ s“, pt
21、r- title); 35 有以下程序: #include stdio h #include string h struet computer char CPU10; ; main() struet computer pc1, pc2; strepy(pc1 CPU, “3 2G“); strcpy(pc2 CPU, “?“); pc1=pc2; printf(“ s n“, pc1 CPU); 程序运行后的输出结果是 ( )。 ( A) ? ( B) 3 2G ( C) ? ( D) 7 2G 36 有以下程序: #include stdio h main() int a=2, b; b=(
22、a =1)+4; printf(“ d, d“, a, b); 程序运行后的输出结果是 ( )。 ( A) 1, 5 ( B) 2, 4 ( C) 2, 6 ( D) 2, 5 37 若要建立下图所示的存储结构,以下正确的程序段是 ( )。( A) char*q, *p, C; p=&c; q=&p; ( B) char*q, *p, C; p=&c; q=*p; ( C) char*q, *p, C; p=&c; *q=p; ( D) char*q, *p, C; q=p; p=*C; 38 有以下程序: #include stdio h struct tt int x; struct tt
23、*y; s3=1, 0, 2, 0, 3, 0; main() struct tt*p=s+1; p- y=s; printf(“ d, “, p- x); p=p- y; printf(“ d n“, p- x); 程序运行后的输出结果是 ( )。 ( A) 2, 3 ( B) 2, 1 ( C) 1, 2 ( D) 3, 1 39 有以下程序: #include stdio h main() int x=3, y=5; x=xy; y=xy; x=xy; printf(“ d, d n“, x, y); 程序运行后的输出结果是 ( )。 ( A) 3, 5 ( B) 5, 3 ( C) 3
24、5, 35 ( D) 8, 8 40 有以下程序: #include stdio h 8truet tt int x; struet tt*y; s2=1, 0, 2, 0; main() struct tt*p=s; p- y=s; printf(“ d“, +p- x); 程序运行后的输出结果是 ( )。 ( A) 2 ( B) 0 ( C) 1 ( D) 3 二、程序填空题 41 下列给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指的变量中。 ss所指字符串数组中共有 M个字符串,且串长小于 N。 请在程序
25、的下 划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include stdio h #include string h #define M5 #define N20 int fun(char(*ss)N, int*n) int i, k=0, len=N; *found* for(i=0; i 1; i+) len=strlen(ssi); if(i=0), *n=len; *found* if(len2*n) *n=len; k=i; *found* return(3); main() c
26、har ssMN=“shanghai“, “guangzhou“, “beijing“, “tianjin“, “chongqing“; int n, k, i; printf(“ nThe original strings are: n“); for(i=0; i M; i+)puts(ssi); k=fun(ss, &n); printf(“ nThe length of shortest string is: d n“, n); printf(“ nThe shortest string is: s n“, ssk); 三、程序修改题 42 给定程序 NODI1 C中,函数 fun的功能
27、是:在有 n名学生, 2门课成绩的结构体数组 std中,计算出第 1门课程的平均分,作为函数值返回。例如,主函数中给出了 4名学生的数据,则程序运行的结果为:第 1门课程的平均分是:76 125000 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdjo h typedef struct char num8; double score2; STU; double fun(STU std, int n) int i; *found* double sum; *found* for
28、(i=0; i 2; i+) *found* sum+=stdi scoEe1; return sum n; main() STU std=“N1001“, 76 5, 82 0, “N1002“, 66 5, 73 0, “N1005“, 80 5, 66 0, “N1006“, 81 0, 56 0; printf(“第 1门课程的平均分是: lf n“, fun(std, 4); 四、程序设计题 43 某学生的记录由学号、 8门课程成绩和平均分组成,学号和 8门课程的成绩已在主函数中给出,请编写函数 fun,其功能是:求出该学生的平均分,并放入记录的 ave成员中。 例如,学生的成绩是:
29、 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5,则他的平均分应为 78 875。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include stdio h #define N8 typedef struct char num10; double sN; double ave; STREC; void fun(STREC*a) main() STREC s=“GA005“, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5; int i
30、; void NONO(); fun(&s); printf(“The ss student data: n“, s num); for(i=0; i N; i+) printf(“ 4 1f n“, s si); printf(“ nave= 7 3f n“, s ave); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*out; int i, j; STREC s10= “GA005“, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5, “GA001“, 82 5, 66, 76 5, 7
31、6, 89, 76, 46 5, 78 5, “GA002“, 72 5, 56, 66 5, 66, 79, 68, 46 5, 58 5, “GA003“, 92 5, 76, 86 5, 86, 99, 86, 56 5, 88 5, “GA004“, 82, 66 5, 46 5, 56, 76, 75, 76 5, 63 5, “GA006“, 75 5, 74, 71 5, 85, 81, 79, 64 5, 71 5, “GA007“, 92 5, 61, 72 5, 84, 79, 75, 66 5, 72 5, “GA008“, 72 5, 86, 73 5, 80, 69,
32、 63, 76 5, 53 5, “GA009“, 66 5, 71, 74 5, 70, 61, 82, 86 5, 58 5, “GA010“, 76, 66 5, 75 5, 60, 76, 71, 96 5, 93 5, ; out=fopen(“out dat“, “w“); for(i=0; i 10; i+) fun( si); fprintf(out, “ 7 3f n“, si ave); felose(out); 国家二级( C语言)机试模拟试卷 75答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 算法的有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执
33、行耗费的时间太长,即使最终得出了正确结果,也是没有意义的。 B选项错误。一个算法复杂度的高低体现在运行该算法所需要的计算机资源的多少。 C选项错误。算法的 效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,这就与算法本身设计的优劣以及具体的编程实现有关,数据的存储结构会极大的影响程序的执行时间。 D选项错误。算法在实现时需要用具体的程序设计语言来实现,所以程序可以作为实现算法的一种表达方式。故选 A选项。 2 【正确答案】 B 【试题解析】 循环队列长度为 m,由初始状态为 front=rear=m可知此时循环队列为空。入队运算时,首先队尾指针
34、(rear)进 1(即 rear+1),然后在 rear指针指向的位置插入 新元素。特别的,当队尾指针 rear=m+1时,置 rear=1。退队运算时,排头指针 (front)进 1(即 front+1),然后删除 front指针指向的位置上的元素,当排头指针 front=m+1时,置 front=1。从排头指针 front指向的后一个位置直到队尾指针 rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为 m-(m-1)=1。故选择 B选项。 3 【正确答案】 A 【试题解析】 在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由
35、NUI上改为指向表头结点,这样的链表称为循环链表。在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发没有重复地扫描到表中其他所有的结点。双向链表与二叉链表都可以扫描到所有结点,但是会有重复。有序链表如果是单链表的情况下,不能扫描到所有结点。故A选项正确。 4 【正确答案】 A 【试题解析】 树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。首先假设这样的树是存在的,由于只有度为 3的结点和叶子结点, 可知最后一层都为叶子结点,倒数第二层一部分结点的度为 3,一部分结点为叶子结点。结点总
36、数为 25,叶子结点有 7个,则度为 3的结点有 18个,由于 (34-1-1) 2 18 (35-1-1) 2可知,树共有 5层,前三层有度为 3的结点 (34-1-1)2=13个,第四层有 34-1=27个结点,其中 5个是度为 3的结点, 22个是叶子结点,此时与题目给出的叶子结点有 7个相矛盾,故不存在这样的树。故选择 A选项。 5 【正确答案】 C 【试题解析】 二分法查找也称拆半查找,能使用二分法查找的线性表必须满足两个条件,用顺序 存储结构以及线性表有序。利用二分法查找元素 x的过程如下:将 x与线性表的中间项比较,如果 x的值与中间项的值相等,则查找成功,结束查找;如果 x小于
37、中间项的值,则在线性表的前半部分以二分法继续查找;如果 x大于中间项的值,则在线性表的后半部分以二分法继续查找。可以证明,对于长度为 n的有序线性表,在最坏情况下,二分法查找需比较 log2n次,故时间复杂度为 log2n。故选择 C选项。 6 【正确答案】 A 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵 二叉树,度为 0的结点总是比度为 2的结点多一个。如果有一棵二叉树,结点总数为 730,假设度为 0的结点个数为 n。则有 n+30+n-1=730, n=350 5,由于结点个数必须是整数,所以不可能存在题目中这样的二叉树。故
38、选 A选项。 7 【正确答案】 A 【试题解析】 需求分析阶段的工作可以分为 4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。需求分析的任务是发现需求、求精、建模和定义需求的过程,是描述 “做什么 ”的软件开发阶段。故选 A选项。 8 【正确答案】 D 【试题解析】 系统软件 是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。应用软件是为了应用于特定的领域而开发的软件。选项 D属于系统软件。选项 A、 B、 C属于应用软件。故选 D选项。 9 【正确答案】 A 【试题解析】 实体集之间通过联系来建立联接关系分为三类:一对一联系 (1:1)、一对多联系 (1: m)
39、、多对多联系 (m: n)。由于医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,所以两者的联系属于多对多。故选 A选项。 10 【正确答案】 A 【试题解析】 表示针对属性进行的投影运算, 表示针 对元组进行的选择运算, 表示交运算, 表示并运算。要求检索结果为关系模式中的学生学号 S撑,首先在几种属性中选择学生学号 S#,其次要在其中选择满足条件的元组 ,条件是课号为 2且成绩及格,即为 “C#=2 G60”,故完整表达式为S#(C#=2 G60(SC) )。本题选 A选项。 11 【正确答案】 A 【试题解析】 C语言赋值运算符的结合方向是从右向左,使用的变量必须已经定义了,
40、int a=b=c=d=1;本条语句首先执行赋值运算 d=1,由于 b并未定义,故编译不通过,提示没有定义标识符 b、 c、 d,故 A选项错误。答案为 A选项。 12 【正确答案】 B 【试题解析】 lf是针对 double类型,如果仅用 f,输入的数据可能没有被完全接收,数据的精度可能不足,选项 C, D错误。 f主要针对 float类型的变量的输入。 d主要针对整型数据的输入, c主要针对字符类型的数据的输入,选项A错误。故答案为 B选项。 13 【正确答案】 A 【试题解析】 printf(“ d n“, 11+011), 11为十进制, 011为八进制形式,打印格式 d表示十进制格式
41、输出,因此。先将八进制数转化 为十进制,011(8)=81*1+1*80=9。相当于 printf(“ d n“, 11+9),故答案为 20, A选项正确。 14 【正确答案】 C 【试题解析】 算法的三种基本结构可以表达任何算法,只是不同的实现复杂度不相同。因此选项 A错误。 C语言是编译型语言,程序必须先编译、链接才能运行,因此选项 B错误。 C语言是高级程序语言,计算机不能识别除了机器语言以外的任何语言,因此 C程序代码转换为机器语言才能在计算机上运行。因此选项D错误。答案为 C选项。 15 【正确答案】 C 【试题解析】 C语 言中,逗号运算符可以把两个以上 (包含两个 )的表达式连
42、接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。后置自增运算: k+表示先运算,后自加。前置自增运算: +k表示先自加,后运算。因此,表达式 x=0。x+10, x+的计算过程为首先赋值 x=0,然后将 x加 19,但是并不对 x进行赋值,最后计算 x+,并, 根据后置自增运算的计算结果,即为 x=0 0。故答案为 C选项。 16 【正确答案】 B 【试题解析】 C语言还提供了一种用于多
43、分支选择的 switch语句,计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后语句,然后不再进行判断,继续执行后面所有 case后语句。如表达式的值与所有 case后的常量表达式均不相同时,则执行 default后的语句。 x=1;进入第一层 switch, y=0;进入第二层 switch。执行 a+; break;后 a=1;在进入 case2, (这里 case1:没有 break, )执行了 a+, b+,由于存在 break,则跳出 switch,得到 a=2 b=1,因此答案为 B选项。 17 【正确答案】 A 【试题解析】 C语
44、言约定分号为一条语句的结束。因此 for(i=0; i 4; i+,i+)for(k=1; k 3; k+);是完整的语句,对 printf();没有任何影响,最后printf(“*“),执行一次。因此答案为 A选项。 18 【正确答案】 C 【试题解析】 循环的作用是将输入的字符串转化为大写, getchar()每次读入一个字符, putchar()每次输出一个字符,当遇到 #字符结束。 putchar(+c),表示将字符变量 c加 1后输出。因此,输入 aBcDefG#,得到的结果是 BCDEFGH。故答案为 C选项。 19 【正确答案】 C 【试题解析】 在 C语言中,需要在 main函
45、数后面定义函数,需要提前声明,否则调用报错,无法找到该函数。 m=f(f(f(n),一共调用 3次 f()函数, f()函数是对n*2,因此,结果是 n*2*2*2,得到结果为 8。故答案为 C选项。 20 【正确答案】 A 【试题解 析】 函数指针 p指向一个同类型的函数 f时,可以写成: p=f,而不能写成 &f,选项 B错误。函数名代表函数的人口地址,指针 p指向一个数组 f时,可以写成: p=f,也可写成 &f,数组名 f可以代表数组的首地址。选项 C错误。指针变量指向的是地址,是个常量,不能将地址指向另一个地址,选项 D错误。char型根据转化原则可以转化为 double类型,因此答
46、案为 A选项。 21 【正确答案】 A 【试题解析】 fun()函数求矩阵反对角线的元素之和。根据 fun()函数,当数组的行列下标相等时,对该行反对角线上的元素求和。 故结果为 4+7+11+13=34。答案为 A选项。 22 【正确答案】 C 【试题解析】 fun()获取矩阵正反对角线的元素的最大值, fun()中 for(i=0; iN; i+) j=N-(i+1);反对角线列位置 if(x*r*2 xij)*r1=i; *r2=j; 比较正反对角线的元素,使得 *r1, *r2始终只在最大元素的位置。 由数组元素可得,正反对角线的最大元素为 7。答案为 C选项。 23 【正确答案】 A 【试题解析】 void fun(int army4, int*ptr);第一个参数虽然是数组类型,但是会退化为指针,并且形参数组的个数没有用。第二个参数是指针,因此实际上二个形参都是指针,传递的都是地址,而不是值。可知选项 B、 c、 D错误。答案为A选项。 24 【正确答案】 A 【试题解析】 从 scanf(“格式化字符串 ”。地址表 );可知 scamfi()的第二个参敦是地址,因此,从四个答案中可以判断,