1、国家二级( C语言)笔试模拟试卷 80及答案与解析 1 在数据结构中,从逻辑上可以把数据结构分为 _。 ( A)动态结构和静态结构 ( B)紧凑结构和非紧凑结构 ( C)线性结构和非线性结构 ( D)内部结构和外部结构 2 若进栈序列为 1, 2, 3, 4,进栈过程中可以出栈,则下列不可能的一个出栈序列是 _。 ( A) 1, 4, 3, 2 ( B) 2, 3, 4, 1 ( C) 3, 1, 4, 2 ( D) 3, 4, 2, 1 3 排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为 _。 ( A)希尔排序 ( B)冒泡排序 ( C)插入排序 ( D)选择排
2、序 4 在顺序表 (3, 6, 8, 10, 12, 15, 16, 18, 21, 25, 30)中,用二分法查找关键码值 11,所需的关键码比较次数为 _。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 5 对于 n个结点的单向链表 (无表头结点 ),需要指针单元的个数至少为 _。 ( A) n-1 ( B) n ( C) n+1 ( D) 2n 6 在软件开发过程中,软件结构设计是描述 _。 ( A)数据存储结构 ( B) 软件体系结构 ( C)软件结构测试。 ( D)软件控制过程 7 模块本身的内聚是模块独立性的重要性度量因素之一。在 7类内聚中,具有最强内聚的一类是 _。
3、( A)顺序性内聚 ( B)过程性内聚 ( C)逻辑性内聚 ( D)功能性内聚 8 数据存储和数据流都是 _,仅仅是所处的状态不同。 ( A)分析结果 ( B)事件 ( C)动作 ( D)数据 9 数据的完整性是指数据的正确性、有效性和 _。 ( A)可维护性 ( B)独立性 ( C)安全性 ( D)相容性 10 关系代数运算是以 _为基础的运算。 ( A)关系运算 ( B)谓词运算 ( C)集合运算 ( D)代数运算 11 请读程序: #include stdio.h main() int a; float b,c; scanf(“%2d%3f%4f“, 若运行时从键盘上输入 9876543
4、210,则上面程序的输出结果是 _。 ( A) a=98,b=765,c=4321 ( B) a=10,b=432,c=8765 ( C) a=98, b=765.000000, c=4321.000000 ( D) a=98,b=765.0, c=4321.0 12 一个良好的算法由下面的基本结构组成,但不包括 _。 ( A)顺序结构 ( B)选择结构 ( C)循环结构 ( D)跳转结构 13 请选出以下程序的输出结果 _。 #include stdio.h sub(x,y,z) int x,y, *z; *z=y-x; main() int a,b,c; sub(10,5, ( A) 5,
5、2,3 ( B) -5,-12,-7 ( C) -5,-12,-17 ( D) 5,-2,-7 14 下面程序在屏幕上的输出是 _。 main() printf(“abbbc“); ( A) abbbc ( B) ac ( C) abc ( D) ab c 15 若 x是整型变量, pb是基类型为整型的指针变量,则正确的赋值表达式是_。 ( A) pb= ( C) *pb=的输出为 _。 ( A) 10 ( B) 11 ( C) 12 ( D)语法错误 17 若要用下面的程序片段使指针变量 p指向一个存储整型变量的动态存储单元 int *p; p=_malloc(sizeof(int); 则应
6、填入 _。 ( A) int ( B) int* ( C) (*int) ( D) (int*) 18 下面程序输出的结果是 _。 main() int i=5,j=9.x; x=(i=j?i:(j=7); printf(“n%d,%d“,i,j); ( A) 5,7 ( B) 5,5 ( C)语法错误 ( D) 7,5 19 若执行下面程序时从键盘上输入 5, main() int x; scanf(“%d“, 则输出是_。 ( A) 7 ( B) 6 ( C) 5 ( D) 4 20 若有以下定义和语句: int a=1,2,3,4,5,6,7,8,9,10,*p=a; 则值为 3的表达式
7、是 _。 ( A) p+=2,*(p+) ( B) p+=2,*+p ( C) p+=3,*p+ ( D) p+=2,+*p 21 以下程序段中与语句 k=a b?(b c?1:0):0;功能等价的是 ( )。 ( A) if(a b) if(a b) if(b c) printf(“%d“,d+ +1); else printf(“%d“,+d +1); printf(“%dn“,d); 程序运行后的输出结果是 ( )。 ( A) 2 ( B) 3 ( C) 43 ( D) 44 23 有以下程序: main() int p7=11,13,14,15,16,17,18);i=0,k=0; w
8、hile(i 7 i+; printf(“%dn“,k); 执行后输出结果是 ( )。 ( A) 58 ( B) 56 ( C) 45 ( D) 24 24 若有如下程序: main() int a=1,b=1; for(;a =10;a+) if(b =9) break; if(b%3=1) b+=3;continue; b+; printf(“%d,%d“,b,a); 则程序运行后的输出结果是 ( )。 ( A) 10, 4 ( B) 7, 3 ( C) 10, 3 ( D) 11, 3 25 已定义 ch为字符型变量,以下赋值语句中错误的是 ( )。 ( A) ch= ( B) ch=6
9、2+3; ( C) ch=NULL; ( D) ch=xaa; 26 有以下程序 main() char a,b,c,d; scanf(“%c,%c,%d,%d“, printf(%c,%c,%c,%cn“,a,b,c,d); 若运行时从键盘上输入 6,5,65,66回车。则输出结果是 ( )。 ( A) 6,5,A,B ( B) 6,5,65,66 ( C) 6,5,6,5 ( D) 6,5,6,6 27 有以下函数定义: void fun(int n double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun的正确调用语句是 ( )。 ( A) fun(int y, dou
10、ble m); ( B) k=fun(10,12.5); ( C) fun(x,n); ( D) void fun(n,x); 28 有以下程序: void fun (char *a,char *b) a=b;(*a)+; main() char cl=A,c2=a,*p1,*p2; p1=p2=fun (p1,p2); printf(“%c,%cn“,c1,c2); 程序运行后的输出结果是 ( )。 ( A) Ab ( B) aa ( C) Aa ( D) Bb 29 有以下定义: int a4 3=1,2,3,4,5,6,7,8,9.10,11,12; int(*ptr)3=a,*p=a0
11、; 则下列能够正确表示数组元素 a12的表达式是 ( )。 ( A) *(*ptr+1+2) ( B) *(*(p+5) ( C) (*ptr+1)+2 ( D) *(*(a+1)+2) 30 有以下程序: 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); 程序运行后的输出结果是 ( )。 ( A) 8,7,8,7 ( B) 7,8,7,8 ( C) 8,7,7,8 ( D) 7,8,8,7 31 有以下程序: main() chara=“abcdefg“,b10=“abcde
12、fg“; printf(“%d %dn“,sizeof(a),sizeof(b); 执行后 输出结果是 ( )。 ( A) 7 7 ( B) 8 8 ( C) 8 10 ( D) 10 10 32 设有定义语句: int x6=2,4,6,8,5,7), *p=x, i; 要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是 ( )。 ( A) for(i=0;i ;i+) printf(“%2d“,*(p+); ( B) for(i=0;i 6;i+) printf(“%2d“,*(p+i); ( C) for(i=0;i 6;i+) printf(“%2d“,*p+); ( D)
13、for(i=0;i 6;i+) printf(“%2d“,(*p)+); 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 以下能正确定义一维数组的选项是 ( )。 ( A) int num; ( B) #define N 100 int numN ( C) int num0100; ( D) int N=100 int
14、 numN; 35 下列选项中正确的语句是 ( )。 ( A) char s8; s=“Beijng“; ( B) char *s; s=“Beijng“; ( C) char s8; s=“Beijing“; ( D) char *s; s=“Beijing; 36 已定义以下函数: fun (int *p) return *P; 该函数的返回值是 ( )。 ( A)不确定的值 ( B)形参 p中存放的值 ( C)形参 p所指存储单元中的值 ( D)形参 p的地址值 37 有以下程序: int a=2; int f(int *a) return (*a)+;) main() int s=0;
15、 int a=5; s+=f( s+=f( printf(“%dn,s); 执行后输出结果是 ( )。 ( A) 10 ( B) 9 ( C) 7 ( D) 8 38 有以下程序: #define f(x) x*x main() int i; i=f(4+4)/f(2+2); printf(“%dn“,i); 执行后输出结果是 ( )。 ( A) 28 ( B) 22 ( C) 16 ( D) 4 39 下面程序的输出结果是 ( )。 #include“stdio.h“ int sub(int m) static a=4; a+=m; return a; void main() int i=2
16、,j=1,k; k=sub(i); k=sub(j); printf(“%d“,k); ( A) 6 ( B) 7 ( C) 8 ( D) 9 40 设有定义语句 ;char c1=92,c2=92;,则以下表达式中值为零的是 ( )。 ( A) c1c2 ( B) c1 while(*ps) ps+; for(ps-;ps-str =O;ps-) puts(ps); 执行后的输出结果是 ( )。 ( A) yz xyz ( B) z yz ( C) z yz xyz ( D) x xy xyz 42 有以下程序: main() int a3=1,2,3),4,5,0),(*pa)3,i; p
17、a=a; for(i=0;i 3;i+) if(i 2) pa1i=pa1i-1; else pa1i=1; printf(“%dn“,a01+a1 1+a1 2); 执行后输出结果是 ( )。 ( A) 7 ( B) 6 ( C) 8 ( D)无确定值 43 有以下程序: main() unsigned int a; int b=-1; a=b; printf(“%u“,a); 程序运行后的输出结果是 ( )。 ( A) -1 ( B) 65535 ( C) 32767 ( D) -32768 44 有以下程序: void fun(int *a,int i,int i) int t; if(
18、i j) t=ai;ai=aj;ai=t; i+; j-; fun(a,i,j); main() int x=2,6,1,8),i; fun(x,0,3), for(i=0;i 4;i+) printf(“%2d“,xi); printf(“n“); 程序运行后的输出结果是 ( )。 ( A) 1268 ( B) 8621 ( C) 8162 ( D) 8612 45 以下程序段中,能够通过调用函数 fun(),使 main()函数中的指针变量 p指向一个合法的整型单元的是 ( )。 ( A) main() int*p; fun(p); int fun(int*p) int s; p= ( B
19、) main int*p fun( iht fun(int*p) int s; *p= ( C) main() int*p; fun( int fun(int*p) *p=(int*)malloc(2); ( D) main() int*p; fun(p); int fun(int*p) p=(int*)malloc(sizeo(int); 46 有以下程序: main() int x=1,3,5,7,2,4,6,0),i,j,k; for(i=0;i 3;i+) for(j=2;i =i;j-) if( xj+1 xj) k=xj;xj=xj+1;xj+1=k; for(i=0;i 3;i+
20、) for(j=4;j 7-i;j+) if(xj xj+1) k=xj;xj=xj+1;xj+1=k; for(i=0;i 8;i+) printf(“%d“,xi); printf(“n“); 程序运行后的输出结果是 ( )。 ( A) 7.53102e+007 ( B) 01234567 ( C) 7.63105e+007 ( D) 1.35702e+007 47 若 fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数 feof(fp)的值为 ( )。 ( A) 0 ( B) 1 ( C) -1 ( D)一个非 0值 48 下列关于 C语言数据文件的叙述中正确的是 ( )。 (
21、A)文件由 ASCII码字符序列组成, C语言只能读写文本文件 ( B)文件由二进制数据序列组成, C语言只能读写二进制文件 ( C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 ( D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 49 有以下程序: main() int a33,*p,i; p= for(i=0;i 9;i+) pi=i+1; printf(“%dn“,a12); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 6 ( C) 9 ( D) 2 50 有以下结构体说明和变量定义,如下图所示,指针 p、 q、 r分别指向一个链表中
22、的 3个连续结点。 struct node int data; struct node *next; *p,*q,*r; 现要将 q和 r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 ( )。 ( A) r- next=q;q- next=r- next;p- next=r; ( B) q- next=r- neaxt;p- next=r;r- next=q; ( C) p- next=r;q- next=r- next;r- next=q; ( D) q- next=r- next;r- next=q;p- next=r; 51 如下图所示的二叉树后序遍历序列是【 】。
23、52 数据结构分为逻辑结构与存储结构,带链的栈属于【 】。 53 在软件开发中,结构化方法包括结构化分析方法、结构化设计方法和结构化程序设计方法。可行性研究阶段采用的是【 】。 54 数据库是指按照一定的规则存储在计算机中的【 】的集合,它能被各种用户共享。 55 实体联系模型是一种常用的高级概念数据模型,而【 】是实体联系模型中的核心。 56 下面程序执行后 k的值为【 】。 int a=1,b=2,c=3,d=4,k; k=a b? a: c d? c: d 57 下面程序的功能是输出数组中最大的数,由 a指针指向该元素。请填空。 main() int s=6,7,2,13,9,1,12,
24、10,5,8,4,3,11),*a,*b; for(【 】 ) if(*a *b) a=b; printf(“%d“,*a); 58 下面程序段的输出结果是【 】。 int x=5; doprintf(“%d “,x-=4); while (!(-x); 59 用下面语句调用库函数 malloc,使单精度型指针 p指向具有 40个字节的动态存储空间,请填空。 p=(float*)【 】 ; 60 在对文件进行操作的过程中,若要求指针的位置回到文件的开头,应当调用的函数是【 】。 61 以下程序运行后的输出结果是【 】。 main() int i,n=0,0,0,0,0; for(i=1;i =
25、4;i+) ni=ni-1*2+1; printf(“%d “,ni); 62 以下程序运行后的输出结果是【 】。 main() int i,j,a 3=1,2,3,4,5,6,7,8,9); for(i=0;i 3;i+) for(j=i+1;j 3;j+) aj i=0; for(i=0;i 3;i+) for(j=0;j 3;j+) printf(“%d “,aij); printf(“n“); 63 以下程序运行后的输出结果 是【 】。 int a=5; fun (int b) static int a=10; a+=b+; printf(“%d “,a); main() int c=
26、20; fun(c); a+=c+; Printf(“%dn“,a); 64 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 【 】 (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); 65 下面程序的运行结果是【 】。 typedef union student char name10; long sno; char sex; float score4; STU; main() ST
27、U a5; printf(“%dn“,sizeof(a); 66 以下程序运行后的输出结果是【 】。 fun(int x) if(x/2 0)fun(x/2); printf(“%d “,x); main() fun(6); 67 已有定义如下: struct node int data; struct node *next; *p; 以下语句调用 malloc函数,使 指针 p指向一个具有 struct node类型的动态存储空间。请填空。 p=(struct node *)malloc(【 】 ); 68 以下程序的功能是将字符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如
28、,输入字符串 :abcl23edf456gh,执行程序后输出: 123456。请填空。 #include stdioo.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); 69 以下程序的功能是调用函数 fun计算: m=1-2+3-4+9 -10,并输出结果。请填空。 int fun(int n) int m=0,f=1,i; for(i=1;i =n;i+) m+=i*f; f=【 】 ; return m; main()
29、 printf(“m=%dn“, 【 】 ); 国家二级( C语言)笔试模拟试卷 80答案与解析 1 【正确答案】 C 【试题解析】 逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。 2 【正确答案】 C 【试题解析】 栈是一种后进先出表,选项 C中,先出栈的是 3,说明此时栈内必然有 1, 2,由于 1先于 2进栈,所以 1不可能在 2之前出栈,故选项 C这种出栈序列是不可能的。 3 【正确答案】 A 【 试题解析】 希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。 4 【正确答案】 C 【
30、试题解析】 二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。本题中,与 11比较的关键码分别为 15, 8, 10, 12四个。 5 【正确答案】 C 【试题解析】 在 n个结点的单向链表 (无表头结点 )中,每个结点都有一个指针单元 (即指针域 ),加上头指针,至少需要 n+1个指针单元。 6 【正确答案】 B 【试题解析】 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计 (又称结构设计 )将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。 7 【正确答案】 D 【试题解析】
31、 内聚性是一个模块内部各元素间彼此结合的紧密程度的度量。内聚共有 7类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。 8 【正确答案】 D 【试题解析】 数据流图有 4种成分:源点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。 9 【正确答案】 D 【试题解析】 数据模型的完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性,有效性和相容性。 10 【正确答案】 C 【试题解析】 关系代数运算是以关系代数作为运算对
32、象的一组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包垂直分割 (投影 )、水平分 割 (选择 )、关系的结合 (连接 )等。 11 【正确答案】 C 【试题解析】 scanf()把用户从键盘录入的数字的第 1、 2位存入整型变量 a;把第3、 4、 5位存入单精度实型变量 b,把第 6、 7、 8、 9位存入单精度实型变量 c,用户录入的第 10位被 scanf()遗弃。这时变量 a、 b、 c的值分别为: 98、765.000000、 4321.000000。 12 【正确答案】 D 【试题解析】 1966年, Bohra和 Jacopini提出了以下三种基本结构,用这三种基
33、本结构作为表示一个良好算法的基本单 元: 1、顺序结构; 2、选择结构: 3、循环结构。 13 【正确答案】 B 【试题解析】 sub()函数的作用是将形参 y和 x的差赋给了 z指向的那个内存地址,所以在 sub(10,5, &A) , 10和 5届于值传递, a是属于地址传递,也就是 a与z指向了同一个存储单元,在执行函数后, a的值随 *z变化,所以此次函数被调用后, a的值为 y-x=-5,同理可知,在 sub(7,a,&B) 后, b的值发生变化,其值为 -5-7=-12,在 sub(a,b, &c) 后, c的值发生变化,其值为 -12-(-5)=-7。 14 【正确答案】 B 【
34、试题解析】 C语言中允许使用一种特殊形式的字符常量,就是以一个 “”开头的字符序列,这样的字符称为 “转义字符 ”。常用的转义字符有: n,换行; t,水平制表; b,退格; r,回车。 15 【正确答案】 A 【试题解析】 选项 A将变量 x的地址赋给指针变量 pb,使 pb指向 x选项 B是将 x的值当作地址赋给指针 pb, pb指向一个地址等于 x值的内存单元;选项 C将x的地址赋给指针 pb指向的地址等于 x的内存单元。 16 【正确答案】 D 【试题解析】 C语言中有基本的算术运算 符 (+、 -、 *、 /)还包括自增自减运算符(+、 -),在 C语言解析表达式时,它总是进行贪婪咀
35、嚼,这样,该表达式就被解析为 i+i,显然该表达式不合 C语言语法。 17 【正确答案】 D 【试题解析】 不论 p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为 (数据类型 *)。 18 【正确答案】 A 【试题解析】 条件表达式的一般形式为:表达式 1?表达式 2:表达式 3;先求解表达式 1,若为真则求解表达式 2;若表达式 1的值为假,则求解表达式 3。本题中先 判断 i=j不等,执行 j=7。然后执行 x=7。故本题为 A。 19 【正确答案】 B 【试题解析】 根据 C语言的语法, x+是在使用 x之后,再将 x的值加 1,在 if语句中,
36、 x的值为 5,条件不成立,执行 else后面的语句,因为 x的值已经加 1,为 6,所以打印结果为 6。 20 【正确答案】 A 【试题解析】 引用一个数组元素,可以用: (1)下标法,如 ai形式: (2)指针法,如 *(a+i)或 *(p+i)。数组的下标从 0开始,值为 3的数组元素是 a2。 B、 C的内容为 a3, D将 a2前自加, 结果为 4。 21 【正确答案】 A 【试题解析】 条件运算符 “?:”是三目运算符,运算规则为如果 ?前面的表达式的值为真,则取:前表达式的值,否则,取:后面表达式的值。分析题目中给出的表达式可知,如果 a b成立则表达式的值为表达式 b c?1:
37、0的值,如果 b c成立,则该表达式的值为 1,即 a b和 b c同时成立时, k=1。当 b c不成立时,k=0;当 a b不成立时, k=0,即 a b和 b c不能同时成立时, k=0。选项 A符合题意。 22 【正确答案】 A 【试题解析】 首先看程序中 if-else的匹配,由于 C语言中规定 else总是与最近的 if搭配,因此程序中 else与第二个 if搭配,即该 if-else语句为第一个 if语句的执行部分,接着判断第一个 if后面括号里的表达式的值 a b为假 (3 4为假 ),因此不执行后面 if-else语句,程序将执行下面的输出语句输出 d,而 d一直未被改变故为
38、原来的值 2,所以, 4个选项中选项 A符合题意。 23 【正确答案】 D 【试题解析】 在主函数中首先定义了一个数组 p并初始化,在 while后面括号里的表达式中, i初值为 0,当 pi为偶数时, pi%2等 于 0;当 i=2时, pi=14为偶数,此时 while后面括号里的表达式的值为假,退出循环,此时 k=p0+p1,即 k=11+13。所以最后输出 k为 24。 24 【正确答案】 A 【试题解析】 本题中 for循环循环 10次。如果 b =9结束循环。如果 b能被 3整除结束本次循坏。都不成立 b加 1。 for循环执行过程为:当 a=1, b=1时,b%3=1, b=b+
39、3=1+3=4,进入下一次循环:当 a=2, b=4时, b%3=1,b=b+3=4+3=7,进入下一次循环;当 a=3, b=7时, b%3=1, b=b+3=7+3=10,进入下一次循环;当 a=4, b=10时,因 b =9成立,执行 “break; ”退出循环。 25 【正确答案】 A 【试题解析】 选项 A中 为转义字符应该用 来表示,故选项 A错误。字符变量中的值就是该字符的 ASCII码值,因此字符变量可以作为整型变量宋处理,可以用整型常量给字符变量赋值,选项 B正确。选项 C是将一个空值赋值给字符变量,正确。选项 D将一个用十六进制数表示的转义字符赋值给字符变量,正确。 26
40、【正确答案】 A 【试题解析】 主函数中首先定义了 4个字符变量 a、 b、 c、 d,然后通过 scanf()函数输入 a、 b、 c、 d。 a和 b是按字符格式输入, c和 d是按带符号整型格式输入,并要求 a、 b、 c、 d都按字符输出。故 a和 b原样输出为 6、 5, c和 d将把ASCII码值分别为 65和 66的字符输出, A的 ASCII码值为 65, B的 ASCII码值为 66,故最后的输出为 6, 5, A, B。所以, 4个选项中选项 A符合题意。 27 【正确答案】 C 【试题解析】 选项 A中应将 y和 m前面的函数类型说明符去掉,故选项 A不正确。 fun函数
41、没有返回值,不能对 k赋值,所以选项 B不正确。选项 D在调用函数时,不用声明其返回类型,故选项 D不正确。当函数不返回函数值时,函数的调用可作为一条独立的语句,故选项 C符合题意。 28 【正确答案】 A 【试题解析】 经过分析得知 fun()函数的功能:将形参 a指向形参 b所指的存储空间,然后使形参 a指向变量的值加 1。在主函数中定义了字符型指针变量 p1和p2,并让它们分别指向 c1和 c2。将 p1、 p2作为实参传递给形参 a、 b。在 fun()函数中,首先让指针变量 p1指向 p2,然后 p1指向的存储空间的值加 1,即让变量 c2加 1为 b,而 c1的值没有被改变,仍然是
42、 A。所以, 4个选项中选项 A符合题意。 29 【正确答案】 C 【试题解析】 本题定义了一个二维数组 a,一个含有 3个元素的指针数组 ptr和一个指针变量 p,并使指针数组和指针变量 p指向数组 a。 30 【正确答案】 C 【试题解析】 程序中定义了两个变量 a和 b,并分别赋初值为 7和 8,定义了 3个指针变量 p、 q、 r,并让指针 p指向变量 a,让 q指向变量 b,然后通过一个中间指针变量 r,使指针变量 p和 q互换,互换后 p指向 b, q指向 a,因此最后输出的 *p、 *q的值为 8、 7、 a、 b的值没有改变仍为 7、 8。所以 , 4个选项中选项 C符合题意。
43、 31 【正确答案】 C 【试题解析】 本题中定义两个字符型数组并都用字符串常量赋初值,其中 a省略了长度,定义了 b的长度为 10。所以 a的长度为赋值给它的字符串的字符个数 7加上一个结束转义字符,即 a的长度 7+1为 8。定义时 b的长度定义为 10,故 b的长度为 10,因此最后通过函数 sizeof()求得的数组 a和数组 b的长度分别为 8和10,所以, 4个选项中选项 C符合题意。 32 【正确答案】 D 【试题解析】 本题中首先定义了一个了维数组并初始化,接着定义了一个指针变量 p指向数组 x。因此可以通过指针 p的下移,即每次加 1引用数组 x中的元素,来指向数组中的每个元
44、素,这样循环 6次即可引用数组的每个元素。选项 A和C, *和 +的优先级相同且都具有右结合性, p+是先使用 p的值再对 p加 1,即先输出 *p的值,再将指针下移一位。选项 B是取 *(p+i)所对应的存储单元中的数据输出,随着 i的递增输出 x数组的 6个元素。选项 D中表达式为 (*p)+,该表达式是先取 *p的值然后将其值加 1,而没有将指针下移一位,故选项 D不正确。所以, 4个选项中选项 D符合题意。 33 【正确答案】 A 【试 题解析】 主函数中定义一个长度为 10的整型数组并赋初值,接着执行一个for循环,该循环共执行了 3次。当 i=2时,调用函数 sum(&aa2),主
45、函数中将&aa2作为实参传给行参 a,所以此时形参 a所指的数组第一个元素和第二个元素分别为 aa2和 aa3,故执行完该函数后将 aa3的值赋给 aa2,即aa2=aa3=4,当 i=1时,调用函数 sam(&aa1),主函数中将 &aa1作为实参传给行参 a,所以此时形参 a所指的数组第一个元素和第二个元素分别为 aa1和aa2,故执行完该 函数后将 aa2的值赋给 aa1,即 aa1=aa2=4:当 i=0时:调用函数 sum(&aa0),主函数中将 &aa0作为实参传给行参 a,所以此时形参 a所指的数组第一个元素和第二个元素分别为 aa0和 aa1,故执行完该函数后将aa1的值赋给
46、aa0,即 “aa0=aa1=4; ”最后输出的 aa0的值为 4,所以, 4个选项中选项 A符合题意。 34 【正确答案】 B 【试题解析】 选项 A定义数组时省略了长度,而 C语言中规定,只有在定义并同时进行初始化时,数组的长度才 可以省略,数组的长度为初始化时候的成员个数,故选项 A错误。在 C语言中规定,数组的长度必须是一个整数或整型常量表达式,故选项 C不正确。定义时数组的长度不能使用变量表示,故选项 D不正确,所以, 4个选项中选项 B符合题意。 35 【正确答案】 D 【试题解析】 用字符串常量给数组赋值的形式有 “char s8=“Beijng“; ”或“char s8=“Beijing“”,而没有选项 A中的形式。选项 C中的 s是数组名为地址常量,不能