1、国家二级( C语言)笔试模拟试卷 133及答案与解析 1 算法的空间复杂度是指 ( )。 ( A)算法程序的长度 ( B)算法程序中的指令条数 ( C)算法程序所占的存储空间 ( D)算法执行过程中所需要的存储空间 2 按照 “先进先出 ”组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 3 下列叙述中正确的是 ( )。 ( A)线性链表的各元素在存储空间中的位置必须是连续的 ( B)线性链表的头元素一定存储在其他元素的前面 ( C)线性链表中的各元 素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面 ( D)线性链表中的各元素在存
2、储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的 4 有下列二叉树,对此二叉树前序遍历的结果为 ( )。 ( A) XZCYAB ( B) XYZABC ( C) XYABCZ ( D) XYAZBC 5 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序的易读性 6 下列叙述中正确的是 ( )。 ( A)在面向对象的 程序设计中,各个对象之间具有密切的关系 ( B)在面向对象的程序设计中,各个对象都是公用的 ( C)在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小 ( D)上述 3种说法都不对 7 结构
3、化分析方法是面向 ( )的自顶向下逐步求精进行需求分析的方法。 ( A)对象 ( B)数据结构 ( C)数据流 ( D)目标 8 下列所述中,是软件调试技术的是 ( )。 ( A)错误推断 ( B)集成测试 ( C)回溯法 ( D)边界值分析 9 数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是 ( )。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D)没有任何关系 10 简单的交换排序方法是 ( )。 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 11 下列说法正确的
4、是 ( )。 ( A)一个 C程序可以有多个主函数 ( B)一个 C语言的函数中只允许有一对花括号 ( C) C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内 ( D)在对 C程序进行编译时,可以发现注 释行中的拼写错误 12 下列程序的输出结果是 ( )。 #include stdio.h main() int a=4; print f(“%dn“, (a+=a-=a*a); ( A) -8 ( B) 14 ( C) 0 ( D) -24 13 表示关系 abc的 C语言表达式为 ( )。 ( A) (a =b) ( B) a+; ( C) a=b=c=d=100; ( D
5、) a=(b=3)+(d=5); 16 若有 “double a;“,则正确的输入语句是 ( )。 ( A) scanf(“%1f“,a); ( B) scanf(“%f“, ( C) scanf(“%1f“, 17 下列程序的输出结果是 ( )。 #include stdio.h void main() int a=0,b=1,c=2; if(+a 0+b 0) +c; printf(“%d,%d,%d“,a,b,c); ( A) 0,1,2 ( B) 1,2,3 ( C) 1,1,3 ( D) 1,2,2 18 有以下程序: #include stdio.h main() int a=6,
6、b=7,m=1; switch(a%2) case 0:m+;break; case 1 :m+; switch(b%2) defaut:m+; case0:m+;break; printf(“%dn“,m); ( A) 1 ( B) 2 ( C) 3 ( D) 4 19 下列程序的运行结果是 ( )。 main() int x=1,y=3,a=0; while(x+!=(y-=1) a+=1; if(y x)break; printf(“%d,%d,%dn“,x,y,a); ( A) 2,3,2 ( B) 2,3,1 ( C) 1,3,3 ( D) 3,1,2 20 有下列程序: main(
7、) int x=5; do printf(“%d“,x-=4); while (!(-x); 程序的输出结果是 ( )。 ( A) 1 ( B) 20 ( C) 1 4 ( D)死循环 21 有以下程序 #include stdio h main0 int y=9; for( ; y 0; y-) if(y%3=0) printf(“%d“, -y); 程序的运行结果是 ( A) 741 ( B) 963 ( C) 852 ( D) 875421 22 现有如下程序段 #include “stdio.h“ main() int k30=12, 324, 45, 6,768, 98, 21, 3
8、4, 453, 456; int count=0, i=0; while(Li) if(ki%2=0|ki%5=0)count+; i+; printf(“%d, %dn“, count,i); 则程序段的输出结果为 ( A) 7, 8 ( B) 8, 8 ( C) 7, 10 ( D) 8, 10 23 有以下程序 #include stdio h main() int a=1, 2, 3, 4, y,*p= printf(“%dn“, m); 程序的运行结果是 ( A) 0 ( B) 1 ( C) 2 ( D) 3 25 下面说明不正确的是 ( A) char a10=“china“; (
9、 B) char a10, *p=a; p=“china“ ( C) char*a; a=“china“; ( D) char a10, *P; p=a=“china“ 26 下列程序是用来判断数组中特定元素的位置所在的。 #include conic.h #include stdio.h int fun(int *s, int t, int *k) int i; *k=0; for(i=0; i t; i+) if(s*k si)*k=i; returns*k; main() int a10=876,675, 896, 101, 301, 401, 980, 431, 451, 777, k
10、; fun(a, 10, char ch; double f; b; 则结构变量 b占用内存的字节数是 ( A) 1 ( B) 2 ( C) 7 ( D) 11 30 下面程序的输出结果是 #include stdio.h main() int a=1, 2, 3, 4,5, 6, 7, 8, 9, 0, *p; p=a; printf(“%dn“, *p+9); ( A) 0 ( B) 1 ( C) 10 ( D) 9 31 有以下程序 #include stdio h main() int s12=1, 2, 3, 4, 4,3, 2, 1, 1, 1, 2, 3, c5=0, i; fo
11、r(i=0; i 12; i+) csi+; for(i=l; i 5; i+) printf(“%d“, ci); printf(“n“); 程序的运行结果是 ( A) 1 2 3 4 ( B) 2 3 44 ( C) 4 3 3 2 ( D) 1 1 2 3 32 若有定义: char *st=“how are you“;,下列程序段中正确的是 ( A) chara11; *p; strcpy(p=a+1, i 5;i+) do if(i%3) continue; n+; while(! i); n+; printf(“n=%dn“,n); 程序执行后输出结果是【 】。 42 有以下程序:
12、 void f(int v,int w) int t; t=v;v=w;w=t; main() int x=1,y=3,z=2 if(x y) f(x,y); else if(y z) f(y,z); else f (x,z); printf(“%d,%d,%dn“,x,y,z); 执行后的输出结果是【 】。 43 函数 YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: 第 0列元素和主对角线元素均为 1; 其余元素为其左上方和正上方元素之和; 数据的个数每行递增 1。 请将程序补充完整。 #
13、define N 6 void YangHui(int xNN) inti,j;x00=1; for(i=1;i N;i+) xi0=xii=1; for(j=1;j i;j+) xij=【 】 ; 44 以下程序运行后的输出结果是【 】。 main() char c; int n=100; float f=10; double x; x=f* =n/=(c=50); printf(“%d %fn“,n,x); 45 有以下程序: main() int a=7,b=8,*p,*q,*r; p= q= r=p; p=q; q=r; printf(“%d,%d,%d,%dn“,*p,*q,a,b)
14、; 程序运行后的输出结果是【 】。 46 以下程序运行后的输出结果是【 】。 # include string.h main() char ch=“abc“,x34;int i for(i=0;i 3;i+) strcpy(xi,ch); for(i=0;i 3;i+)printf(“%s“, printf(“n“); 47 有以下程序: fun(int a,int b) if(a b)return(a); else return(b); main() int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf(“%dn“,r); 程序运行后的输出的结果是【
15、】。 48 有以下程序: # include string.h struct STU char name10; int num; void f(char *name, int num) struct STU s2=“SunDan“,20044,“Penghua“,20045; num=s0.num; strcpy(name,s0.name); main() struct STU s2=“YangSan“,20041,“LiSiGuo“,20042,*p; p=f(p- name,p- num); printf(“%s %dn“,p- name,p- num); 程 序运行后的输出结果是【 】。
16、 49 有以下程序: main() int a33,*p,i; p= for(i=0;i 9;i+)pi=i+1; printf(“%dn“,a12); 程序运行后的输出结果是【 】。 50 有以下程序: # include stdio.h main() int a=1,2,3,4,5,6,7,8,9,10,11,12, *p=a+5, *q=NULL; *q=*(p+5); printf(“%d%dn“,*p,*q); 程序运行后的输出结果是【 】。 51 有以下程序: void f(int*x,iht * y) int t; t=*x;*x;=*y;*y=t; main() int a8=
17、1,2,3,4,5,6,7,8,i,*p,*q; p=a;q= while(p) f(p,q);p+;q-; for(i=0;i 8;i+)printf(“%d,“,ai); 程序运行后的输出结果是【 】。 52 有以下程序: prt(int *m,int n) int i; for(i=0;i n;i+)mi+; main() int a=1,2,3,4,5,i; prt(a,5); for(i=0;i 5;i+)printf(“%d,“,ai; 程序运行后的输出结果是【 】。 53 有以下程序: float f1(float n) return n*n; float f2(float n)
18、 return 2*n; main() float(*p1)(float),(*p2)(float),(*t)(float),y1,y2; p1=f1;p2=f2; y1=p2(p1(2.0); t=P1;p1=p2;p2=t; y2=p2(p1(2.0); printf(“%3.0f,%3.0fn“,y1,y2); 程序运行后的输出结果是【 】。 54 设有以下定义和语句: int a32=1,2,3,4,5,*p3; p0=a1; 则 *(p0+1)所代表的数组元素是【 】。 55 设函数 findbig已定义为求 3个数中的最大值,以下程序将利用函数指针调用findbig函数。请填空。
19、main() int findbig(int,int,int); int(*f)(),x,y,z,big; f=【 】。 scanf(“%d %d %d“, big=(*f)(x,y,z); printf(“big=%dn“,big); 56 以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组 中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10 请填空。 #include stdio h #
20、define N 80 int fun(int a, int n) int i, j=1; for(i=1; i n;i+) if(aj-1 【 】 ai) aj+=ai; 【 】; main() int aN=2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10,10, i, n=19; printf(“The original data :n“); for(i=0; i n; i+)printf(“%3d“, ai); n=fun(a, n); printf(“nThe data after deleted :n“); for(i=0
21、; i n; i+)printf(“%3d“, ai); printf(“nn“); 57 以下程序的定义语句中, x1的初值是【 】,程序运行后输出的内容是【 】。 #include stdio.h main() int x=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 161,*p4, i; for(i=0; i 4; i+) pi &x2*i+1; printf(“%d“, pi0); printf(“n“); 国家二级( C语言)笔试模拟试卷 133答案与解析 1 【正确答案】 D 【试题解析】 一个算法的空间复杂度,一般是指执行
22、这个算法所需的存储空间。一个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。 2 【正确答案】 A 【试题解析】 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫 “队尾 ”,删除元素的一端叫 “队头 ”,先插入的元素先被删 除,是按 “先进先出 ”的原则组织数据的。 3 【正确答案】 D 【试题解析】 在线性链表中,各元素在存储空间中的位置是任意的,各元素的顺序也是任意的,依靠指针来实现数据元素的前后件关系。 4 【正确答案】 D 【试题解析】 对二叉树的前序遍历是指;先访问根结点,然后访问
23、左子树,最后访问右子树,并且,在访问左,右子树时,先访问根结点,再依次访问其左、右子树。 5 【正确答案】 D 【试题解析】 程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此,程序设 计的风格应该强调简单和清晰,即程序的易读性, “清晰第一,效率第二 ”。 6 【正确答案】 C 【试题解析】 面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。 7 【正确答案】 C 【试题解析】 结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具
24、,建立系统的逻辑模型。 8 【正确答案】 C 【试题解析】 软件调试技术包括强行排错法、回溯法和原因排 除法。边界值分析、错误推断都是黑盒测试的方法。 9 【正确答案】 C 【试题解析】 数据库系统 (DBS)由数据库 (DBS)、数据库管理系统 (DBMS)、数据库管理员、硬件平台和软件平台 5个部分组成,可见 DB和 DBMS都是 DBS的组成部分。 10 【正确答案】 D 【试题解析】 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。 11 【正确答案】 C 【试
25、 题解析】 本题涉及 C语言基本的 3个知识点, C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号; C语言的标识符是由字母、数字、下画线组成的,可以是大写字母,而且标识符区分字母的大小写: C程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释行中的错误。 12 【正确答案】 D 【试题解析】 表达式 a+=a-=a*a看起来复杂,其实将它分成两个表达式来计算就简单了: 第一个表达式 (a-=a*a)=(a-a-a*a=-2): 第二个表达式 (a+=a-=a*a)=(a=a+a=-24)。 13 【正确答案】
26、A 【试题解析】 本题考查逻辑与运算符 &。在 C语言中使用运算符 “&”连接两个表达式,也可以表示逻辑与运算符。在 C语言中不允许出现 a =b =c这种格式。 14 【正确答案】 A 【试题解析】 “%u”表示输出无符号的整数 (注意:如果输出值前有符号,将自动转化为相应的无符号数输出 )。 15 【正确答案】 A 【试题解析】 C语言规定,赋值号的右边可以是一个赋值表达式,因此选项C)、选项 D)正确;在选项 B)中, a+是一个自加 1的表达式, a被重新赋值,因此它是一个合法的赋值表达式:选项 A)中, a+d是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不
27、是一条赋值语句。 16 【正确答案】 D 【试题解析】 函数 scanf()的调用形式是: scanf(格式字符串,输入项地址表 )。其中, “格式字符串 ”是要输入的变量的格式符; “输入项地址表 ”是要输入的变量的地址。本题中定义变量 a为双精度型变量,双精度变量的格式符为 “1e”;变量的地址用取地址符 “&”加变量名表示,如变量 a的地址为 “&a”。 17 【正确答案】 C 【试题解析】 本题考查 if语句。先判断 if语句的条件是否成立, +a=1 0,此条件成立,又因为是进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算符的真假,即不进行 +b操作,就可以直
28、接得出整个表达式的值为逻辑 1,执行下列的 +c。 18 【正确答案】 B 【试题解析】 本题考查 swish语句。第一个 switch语句,因为 a=6, a%2=0,所以执行 case 0,将 m加 1,遇到 break语句跳出 switch语句,结束循 环。 19 【正确答案】 D 【试题解析】 本题考查 while循环。第一次循环,先拿 x的值和 (y-1)比较,此时x=1, y-1-2,循环条件成立,比较完将 x的值加 1,此时 x=2,进入循环, a-a+1=1,判断 if语句的控制条件是否成立, y x不成立,接着执行下一次循环。第二欲循环,先拿 x的值和 (y-1)比较,此时
29、x-2, y-1=1,循环条件成立,比较完将 x的值加 1,此时 x=3,进入循环, a=a+1=2,判断 if语句的控制条件是否成立, y x成立,执行 break语句退出循环。 20 【正确答案】 C 【试题解析】 本题考查 dowhile 循环。 执行 printf语句, x=x-4 1,输出 1,判断 while循环的控制条件, -x=0,则 (!(-x)非零,循环条件成立,执行下一次循环; 执行 printf语句, x=x-4=-4,输出 -4,判断 while循环的控制条件, -x=-5,则 (!(-x)为零,循环条件不成立,结束循环。 21 【正确答案】 C 【试题解析】 本题考
30、查变量的自加 “+”和自减 “-”问题。当 y的值为 9、 6或 3时, if语句的条件成立,执行输出语句,输出表达式 -y的值, y的自减要先于输出语句执行,故输出结果为 8 5 2。 22 【正确答案】 D 【试题解析】 在 C语言中,定义一维数组的语句一般形式如下: 类型名 数组名 常量表达式 ; 一维数组的引用形式为:数组名 下标表达式 。 count表示能被 2整除或被 5整除的个数, i则计算有多少个数组元素。 23 【正确答案】 D 【试题解析】 在程序中指针变量 p初始指向 a3,执行 p减 1后, p指向 a2,语句 y *p的作用是把 a2的值赋给变量 y,所以输出为 y
31、3。 24 【正确答案】 B 【试题解析】 本题考查循环语句的嵌套以及条件的判断问题。在程序中,内层循环判断条件为 “j i”,而 j的初值为 3,故当 i的值为 1和 2时,内层循环体都不会被执行。只有当 i和 j都等于 3时才会执行一次。 m的值为 55对 3取模,计算结果为 1。 25 【正确答案】 D 【试题解析】 C语言中操作一个字符串常量的方法有: 将字符串常量存放在一个字符数组之中; 用字符指针指向字符串,然后通过字符指针来访问字符串存储区域。当字符串常量在表达式中出现时,根据数组的类型转换规则,将其转换成字符指 针。 本题 D) 项中错误的关键是对数组初始化时,可以在变量定义时
32、整体赋初值,但不能在赋值语句中整体赋值。 26 【正确答案】 D 【试题解析】 本题中直接使用指针变量 k,但在使用时要注意对 k的指针运算。此外,一开始应知道 *k的值为数组中的某一下标值,即。 k 0,本函数的功能是找出数组中的最大元素的位置及最大元素的值。 27 【正确答案】 B 【试题解析】 scanf()语句用 “空格 ”区别不同的字符串; getc()与 getchar()语句不能用于字符串的读入。 28 【正确答案】 C 【试题解析】 p &a3将指针指向数组 a的第 4个元素, p5指向数组 a的第 9个元素,而 a8 9,所以 b 9。 29 【正确答案】 D 【试题解析】
33、结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和。本题中整型变量 i所占用的内存是 2字节,字符型变量 ch所占用的内存是 1字节,双精度型变量 f所占用的内存是 8字节,三者相加即可。 30 【正确答案】 C 【试题解析】 此题考查了指针引用一维数组元素的方法。 *p+9因为运算符 “*”的优先级高于 “+”,所以输出结果为 p指向的元素 1,然后加 9,值为 10。 31 【正确答案】 C 【试题解析】 在 for(i 0; i 12; i+)csi+中,数组元素 si的值作为数组 c的下标,当退出循环时,数组 c的 4个元素的值分别为 4、 3、 3、 2。 32 【正确答案
34、】 A 【试题解析】 本题综合考查字符数组的赋值和 strcpy函数的用法。 C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的: strl “China”,如果想把 “China”这 5个字符放到数组 strl中,除了逐个输入外,还能使用 strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如: strcpy(strl,“China”)或 strcpy(str1, str2);注意,不能企图用以下语句来实行赋值 (将 str2的值传给 str1): str1 str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。 strcpy函数的结构是: strc
35、py(字符数组 1,字符串 2) 其中,需要注意的是,字符数组 1的长度不应小于字符串 2的长度, “字符数组1”必须写成数组名形式,如 (str1), “字符串 2”可以是字符数组名,也可以 是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。 33 【正确答案】 C 【试题解析】 本题考查的重点是拷贝字符串 使用 strcpy()函数,该函数的调用方式是: strcpy(字符数组,字符串 ),其中 “字符串 ”可以是字符串常量,也可以是字符数组。函数的功能是:将 “字符串 ”完整地复制到 “字符数组 ”中,字符数组中原有的内容被覆盖。使用该函数时注意: 字符数组必须定
36、义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志 “0”一起复制; 不能用赋值运算符 “ ”将一个字符串 直接赋值给一个字符数组,只能用 strcpy()函数处理。另外,本题还考查连接字符串的 strcat()函数,其调用方式是: strcat(字符数组,字符串 )。功能是把 “字符串 ”连接到 “字符数组 ”中的字符串尾端,并存储于 “字符数组 ”中。 “字符数组 ”中原来的结束标志,被 “字符串 ”的第一个字符覆盖,而 “字符串 ”在操作中未被修改。使用该函数时注意: 由于没有边界检查,编程者要注意保证 “字符数组 ”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而
37、产生问题; 连接前两个字符串都有结束标志 “0”,连接后 “字符数 组 ”中存储的字符串的结束标志 “0”被舍弃,只在目标串的最后保留一个 “0”。 34 【正确答案】 A 【试题解析】 在本题中, p和 q同为指向字符类型数据的指针。 *q和 p0同为字符型数据。选项 B) 、 C) 和 D) 都符合题目的要求;选项 A) 计算得出的是指针类型数据所占的内存字节数。 35 【正确答案】 A 【试题解析】 本题考查了用字符指针引用字符数组中的字符及对字符的操作。函数 abc()的 for语句执行过程是:从字符指针 str所指向的字符数组的第一个元素开始,逐一判断字符是否为 “c”,若不是就执行
38、一次数组元素的赋值过程,若字符为“c”就不执行。 36 【正确答案】 C 【试题解析】 本题综合考查了输入函数的使用。 scanf函数会将空格视为分隔符, getchar函数只能输入单个字符, getc函数是文件操作函数,显然都不符合题意。通过 gets函数输入字符串时,输入的空格被认为是字符串的一个字符。 37 【正确答案】 B 【试题解析】 在函数中首先把整型数组 a10中的每个元素写入文件 d1.dat中,然后再次打开这个文件,把文件 d1 dat中的内容读入到整型变量 n中,最后输出变量 n的值。 38 【正确答案】 D 【试题解析】 函数的静态局部变量在编译时就赋初值,即只赋初值一次
39、,在程序运行时它已有初值;以后每次调用函数时不再重新赋值,而只是保留上次函数调用结束时的值。 39 【正确答案】 D 【试题解析】 在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久的存储单元,即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来的存储单元,静态局部变量的初值是在编译的时候赋予的,在程序执行期间不再赋予初值。本题由于连续三次调用函数 fun(),三次对静态变量 x进行操作, x的值应依次为 6, 7, 8。 40 【正确答案】 A 【试题解析】 本题的功能是顺序的读两个文本文件;依次输出。当打开文件时出现错误, fopen函数将返回 NULL。 41 【正确
40、答案】 n=4 【试题解析】 continue语句是结束本次循环。 i=2时因 i%3条件为真,故不执行do-while语句中的 n+,只执行一次 n+得 n=1; i=3时, i%3条件为假,执行两次 n+得 n=3; i=4时, i%3条件为真,执行一次 n+得 n=4。 42 【正确答案】 1,3,2 【试题解析】 函数 f的形参是简单变量,形参的改变不能影响实参,所以正确答案为 1,3,2。 43 【正确答案】 xi-1j-1+xi-1j 【试题解析】 在程序外层 i循环中先将数组的第 0列元素和主对角线元素置 1,内层 j循环的功能是给其余元素赋值,根据题意,空格内应填入 xi-1
41、j-1)+xi-1j。 44 【正确答案】 2 20.000000 【试题解析】 注意区分运算符的优先级。先是给 c赋值,然后计算 x f*=n/=50,得 x=f*=2,最 后有 x=20。 x输出是按浮点数的形式输出的,小数点后的 0不能少。 45 【正确答案】 8,7,7,8 【试题解析】 本题中执行语句 p=&a和 q=&b后 *p=7, *q=8;执行完语句r=p,p=q,q=r后 *p=8, *q=7。故正确答案为选项 8,7,7,8。 46 【正确答案】 abebcc 【试题解析】 strcpy(xi,ch),使得 x数组的第 i行存放 “abc“,第一个循环就使数组 x的每一行
42、都存放了 “abc“, printf(“%s“,&xii)输出从 xi i开始的字 符串,因此第一次输出 “abc”,第二次输出 “bc”,第三次输出 “c”。 47 【正确答案】 12 【试题解析】 函数 fun的功能是求两个数当中的最大值。语句 rfun(fun(x,y),2*z)的执行过程为:首先计算 fun(x,y),因 x=3、 y=8,所以结果为8;然后计算 fun(8,2,*z),即计算 fun(8,12),所以 r=12。 48 【正确答案】 SunDan 20042 【试题解析】 f函数中形参 1用的是显式传地址的方式,因此 p- name的值发生改变,而形参 2用的传值的方
43、式 ,在调用时不改变实参的值,因此 p- num的值不发生变化。 49 【正确答案】 6 【试题解析】 本题定义了二维数组 a和指针变量 p,p指向数组的首地址, for循环语句的功能是给数组元素赋值,结果为 a 00=1、 a01=2、 a 02=3、a10=4、 a11=5、 a12=6、 a20=7、 a21=8、 a22=9。故 print函数的输出结果为 6。 50 【正确答案】 运行后报错 【试题解析】 指针 q没有指向确定的存储单元 ,故不能赋值。 51 【正确答案】 8,7,6,5,4,3,2,1 【试题解析】 函数 f是将 x、 y指针的内容互换,整个 while循环是将 a
44、0与 a7互换, a2与 a5互换, a3与 a4互换。 52 【正确答案】 2,3,4,5,6 【试题解析】 函数 prt(a,5)的功能是使得 a数组中,从 a0 a4中元素均增 1。 53 【正确答案】 8,16 【试题解析】 float(*p1)(float)是定义 p1为指向函数的 float型的指针变量。因此p1=f1; p2=f2;表示 p1指向函数 f1, p2指向函数 f2,故所有 y1=p2 (p1(2.0)=f2(f1(2.0)=8;后面将 p1与 p2互换, y2=f1(f2(2.0)=16。 54 【正确答案】 a11 【试题解析】 p是一个指针数组, p0指向数组
45、a10。 *(p0+1)代表数组a11。 55 【正确答案】 findbig 【试题解析】 f是指向函数的指针变量,根据题意要求,空格处应填入 findbig。 本题目考查: C语言中指向函数的指针变量定义的一 般形式为; 数据类型标识符 (*指针变量名 )(); “数据类型标识符 ”表示函数返回值的类型。 函数的调用可以通过函数名调用,也可以通过函数指针调用。在给函数指针变量赋值时,只需给出函数名而不必给出参数。 (*p)()表示定义一个指向函数的指针变量,专门用来存放函数的入口地址,可以先后指向不同的指针变量。用函数指针调用函数时,只需要将 (*p)代替函数名即可,在 (*p)之后的括号中
46、,根据需要写上参数。 56 【正确答案】 ! return j 【试题解析】 本题程序的流程是:让 i, j都从 1开始,其中 j用于控制删除后剩下的数中的下标, i用于搜索原数组中的元素。 j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以 if()中的条件是 aj-1! ai,其中 aj-1就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以 ai要留到新数组中。注意本题中 i、 j的初值都要从 1开始,该算法只能用于数组已排序的题目中。 57 【正确答案】 2 2 4 6 8 【试题解析】 在主函数中根据整型数组 x的定义可知, x1的初值等于 2。在for循环语句中,当 i 0时, p0 &x1, p0 0 2;当 i 1时, p1=&x3, p10 4;当 i 2时, p2 &x5, p20 6;