1、二级 C 语言笔试-468 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.按照“先进后出”原则组织数据的数据结构是( )。A) 队列 B) 栈C) 双向链表 D) 二叉树(分数:1.00)A.B.C.D.2.下列叙述中正确的是( )。A) 算法的执行效率与数据的存储结构无关B) 算法的空间复杂度是指算法程序中指令(或语句)的条数C) 算法的有穷性是指算法必须能在执行有限个步骤之后终止D) 以上 3 种描述都不对(分数:2.00)A.B.C.D.3.下列关于线性链表的描述中,正确的是( )。、只含有一个指针域来存放下一个元素地址、指针域中的
2、指针用于指向该结点的前一个或后一个结点(即前件或后件)、结点由两部分组成:数据域和指针域。A) 仅、 B) 仅、 C) 仅、 D) 全部(分数:2.00)A.B.C.D.4.下列叙述中正确的是A) 程序执行的效率与数据的存储结构密切相关B) 程序执行的效率只取决于程序的控制结构C) 程序执行的效率只取决于所处理的数据量D) 以上三种说法都不对(分数:2.00)A.B.C.D.5.下列选项中不属于结构化程序设计方法的是_。(A) 自顶向下(B) 逐步求精(C) 模块化(D) 可复用(分数:2.00)A.B.C.D.6.有以下程序:int*f(int*x,int*y)if(*x*y)return
3、x;elsereturn y;main()int a=7,b=8,*P,*q,*r;P=x=y=1;z=x+,y+,+y;printf(“%d,%d,%d/n“,x,y,z);程序运行后的输出结果是_。(A) 2,3,3(B) 2,3,2(C) 2,3,1(D) 2,2,1(分数:1.00)A.B.C.D.14.下列叙述中正确的是( )。A) 在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B) 实型变量中允许存放整型数C) 若 a 和 b 类型相同,在执行了赋值 a=b 后,b 中的值将放入 a 中,但 b 中的值不变D) 在 C 程序中,求余运算符“%”两边的类型相同时才能进行
4、运算(分数:2.00)A.B.C.D.15.若有定义语句:int x=10;,则表达式 x-=x+x 的值为A) -20 B) -10 C) 0 D) 10(分数:1.00)A.B.C.D.16.有以下程序main()int a,b,d=25;a=d/10%9;b=a(-1);printf(“%d,%d/n“,a,b);程序运行后的输出结果是_。(A) 6,1(B) 2,1(C) 6,0(D) 2,0(分数:1.00)A.B.C.D.17.下列说法不正确的足( )。 A) int*ptr;/指针指向整形数据 B) char*ptr;/指针的类型是字符型指针 C) int*ptr;/指针的类型是
5、双重指针 D) int(*ptr)3;/是一一个指针数组,数组共有三个元素,而三个元素是 int 型指针(分数:1.00)A.B.C.D.18.以下不构成无限循环的语句或者语句组是_。A) n=0; B) n=0;do+n;while(n=0); while(1)n+C) n=10; D) for(n=0,i=1;i+)n+=i;while(n);n-;)(分数:2.00)A.B.C.D.19.有以下程序:main()int k=5;while(-k)printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是_。A) 1 B) 2 C) 4 D) 死循环(分数:2.00)
6、A.B.C.D.20.以下程序段的输出结果是int a,b,c;a=10;b=50;c=30;if(ab)a=b,b=c;c=a;printf(“a=%d b=%d c=%d/n“,a,b,c);A) a=10 b=50 c=10 B) a=10 b=50 c=30C) a=10 b=30 c=10 D) a=50 b=30 c=50(分数:1.00)A.B.C.D.21.执行下面的程序后,a 的值为main()int a,b;for(a=1,b=1;a=10;a+)if(b%3=1)b+=3;continue;b-=5;A) 7 B) 8 C) 9 D) 10(分数:2.00)A.B.C.D
7、.22.下列程序的输出结果是( )。#includestdiohmain()int a=2,b=3,p;p=f(a,B) ;pdntf(“%d“,p);int f(a,B) int c;if(aB) c=1;else if(a=B) c=0;elSe c=-1;return(C) ;A) -1 B) 0 C) 1 D) 2(分数:2.00)A.B.C.D.23.下列程序的输出结果是( )。#includestdio.hint fun(int x)int a;if(x=0x=1) return 3;elsea=x-fun(x-2) ;return a;void main()printf(“%d“
8、,fun(7) );A) 2 B) 8 C) 9 D) 5(分数:2.00)A.B.C.D.24.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。(A) 函数的实参和其对应的形参共占同一存储单元(B) 形参只是形式上的存在,不会占用具体存储单元(C) 同名的实参和形参占同一存储单元(D) 函数的形参和实参分别占用不同的存储单元(分数:2.00)A.B.C.D.25.以下程序的输出结果是_。main()int i,a10;for(i=9;i=0;i-)ai=10-i;printf(“%d%d%d“,aa,a5,a8);A) 258 B) 741 C) 852 D) 369(
9、分数:2.00)A.B.C.D.26.有以下程序:int fun(int n)if(n=1)return 1;else return(n+fun(n-1);main()int x;scanf(“%if“,x);x=fun(x);printf(“%d/n“,x);执行程序时,给变量 X 输入 10,程序的输出结果是_。A) 55 B) 54 C) 65 D) 45(分数:2.00)A.B.C.D.27.若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp)的返回值是A) EOF B) -1 C) 1 D) NULL(分数:2.00)A.B.C.D.28.有以下程序void f
10、(int *x,int *y)int t;t=*x;*x=*y;*y=t;main()int a8=(1,2,3,4,5,6,7,8),i,*p,*q;p=a,q=while(pf(p,q); p+; q-; for(i=0;i8;i+)printf(“%d,“,ai);程序运行后的输出结果是_。A) 8,2,3,4,5,6,7,1, B) 5,6,7,8,1,2,3,4, C) 1,2,3,4,5,6,7,8, D) 8,7,6,5,4,3,2,1,(分数:1.00)A.B.C.D.29.有以下程序:# includestring.hmain()char str20=“Hello“,“Bei
11、jing“,*p=str;printf(“%d/n“,strlen(p+20);程序运行后的输出结果是 _。A) 0 B) 5 C) 7 D) 20(分数:2.00)A.B.C.D.30.下面程序的输出是_。mare()int x=3 y=6,a=0;while(x+!=(y=1)a+=1;if(yx)break;printf(“x=%d,y=%d,a=%d/n“,x,y,a);A) x=4,y=4,a=1 B) x=5,y=5,a=1C) x=5,y=4,a=3 D) x=5,y=4,a=1(分数:2.00)A.B.C.D.31.下述程序的输出结果是( )。 #includestdio.h
12、void main() int a20,*p4; int i,k=0; for(i=0;i20;i+) ai=i; for(i=0;i4;i+) pi=A) 没有错 B) 第 1 行有错 C) 第 6 行有错 D) 第 7 行有错(分数:2.00)A.B.C.D.33.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是( )。A) 整型表达式 B) 整型常量C) 整型常量或整型表达式 D) 任何类型的表达式(分数:2.00)A.B.C.D.34.有以下程序:#include stdio.hvoid swap1(int c)int t;t=c0; c0=c1; c1=t;void swa
13、p2(int c0,int c1)int t;t=c0; c0=c1; c1=t;main()int a2=3,5,b2=3,5;swap1(a); swap2(b0,b1);printf(“%d%d%d%d/n“,a0,a1,b0,b1);其输出结果是( )。A) 5 3 5 3 B) 5 3 3 5 C) 3 5 3 5 D) 3 5 5 3(分数:1.00)A.B.C.D.35.在 16 位 IBM-PC 机上使用 C 语言,若有如下定义:struct dataint i;char ch;double r;b;则结构变量 b 占用内存的字节数是A) 1 B) 2 C) 7 D) 11(分
14、数:2.00)A.B.C.D.36.有以下程序#include stdio.h#define f(x)x*x*xmain()int a=3,s,t;s=f(a+1);t=f(a+1);printf(“%d,%d/n“,s,t);程序运行后的输出结果是A) 10,64 B) 10,10C) 64,10 D) 64,64(分数:2.00)A.B.C.D.37.有以下定义和语句:struct workersint num; char name20; char c;struct int day; int month; int year; s;struct workers w, *pw;pw=能给 w
15、中 year 成员赋值 1980 的语句是A) *pw.year=1980; B) w.year=1980;C) pw-year=1980; D) w.s.year=1980;(分数:2.00)A.B.C.D.38.有以下程序:int a=4;int f(int n)int t=0;static int a=5;if(n%2) int a=6;t+=a+;elseint a;7;t+=a+;return t+a+;main()int s=a,i=0;for(;i2;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输出结果是_。A) 24 B) 28 C) 32 D) 36(
16、分数:2.00)A.B.C.D.39.以下程序的功能是进行位运算:main()unsigned char a,b;a=73;b=43;printf(“%d%d/n“,a,b);程序运行后的输出结果是_。A) 4 3 B) 7 3C) 7 0 D) 4 0(分数:2.00)A.B.C.D.40.以下能正确定义一维数组的选项是( )。A) int a5 =0,1,2,3,4,5; B) char a = 0,1,2,3,4,5;C) char a = A,B,C ; D) int a5 = “0123“;(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:31.00)41.在程序设计
17、阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:1.50)填空项 1:_42.在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间 1 的信息。(分数:2.00)填空项 1:_43.注释一般分为序言性注释和 1 注释。(分数:1.50)填空项 1:_44.在长度为 n 的有序线性表中进行二分查找,最坏的情况下,需要的比较次数为 1。(分数:2.00)填空项 1:_45.在一个容量为 32 的循环队列中,若头指针 front=3,尾指针 rear=2,则该循环队列中共有 1 个元素。(分数:2.00)填
18、空项 1:_46.在数据库系统中,实现各种数据管理功能的核心软件称为 1。(分数:2.00)填空项 1:_47.在二维表中,元组的U /U不能再分成更小的数据项。(分数:2.00)填空项 1:_48.有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模式选课可定义为:选课(学号, 1,成绩)。(分数:4.00)填空项 1:_49.数据模型包括数据结构、 1 和数据条件。(分数:2.00)填空项 1:_50.定义 int a=5,b;,则执行表达式 b=+a*-a 之后,变量 b
19、的值为 1。(分数:2.00)填空项 1:_51.表达式 pow(2.8,sqrt(float(x)值的数据类型为 1 型。(分数:2.00)填空项 1:_52.设 int a=5,b=6,表达式(+a=b-)?+a:-b 的值是 1。(分数:2.00)填空项 1:_53.以下程序运行后的输出结果是_。 struct NODE int k; struct NODE*link; ; main() struct NODEm5,*p=m,*q=m+4; int i=0: while(p!=q) p-k=+i;p+;q-k=1+;q-; q-k=i: for(i=0;i5;i+)printf(“%d“
20、,mi.k); printf(“/n“); (分数:2.00)填空项 1:_54.下列程序的输出结果是_。#includestdiohint(int x,int y,int cp,int dp)cp=x*x+y*y;dp=x*x-y*y;main()int a=1,b=8,c=7,d=9;t(a,b,c,d);printf(“%d%d/n“,c,d);(分数:2.00)填空项 1:_55.以下程序运行后的输出结果是_。#includestdio.hmain()char a;for(a=0;a15;a+=5)putchar(a+A);printf(“/n“);(分数:2.00)填空项 1:_二级
21、 C 语言笔试-468 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.按照“先进后出”原则组织数据的数据结构是( )。A) 队列 B) 栈C) 双向链表 D) 二叉树(分数:1.00)A.B. C.D.解析:解析栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另端是封闭的。进行插入、删除的端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,也是最后被删除的,是按先进后出的原则组织数据的。2.下列叙述中正确的是( )。A) 算法的执行效率与数据的存储结构无关B) 算法的空间复杂度是指算法程序中指令(或语句)的条数C)
22、算法的有穷性是指算法必须能在执行有限个步骤之后终止D) 以上 3 种描述都不对(分数:2.00)A.B.C. D.解析:解析 算法的执行效率与数据的存储结构密切相关。算法的空间复杂度是指算法执行过程中所需的存储空间。3.下列关于线性链表的描述中,正确的是( )。、只含有一个指针域来存放下一个元素地址、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)、结点由两部分组成:数据域和指针域。A) 仅、 B) 仅、 C) 仅、 D) 全部(分数:2.00)A.B.C.D. 解析:解析 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中
23、,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。4.下列叙述中正确的是A) 程序执行的效率与数据的存储结构密切相关B) 程序执行的效率只取决于程序的控制结构C) 程序执行的效率只取决于所处理的数据量D) 以上三种说法都不对(分数:2.00)A. B.C.D.解析:解析 程序执行的效率与很多因素有关,如数据的存储结构、程序所处理的数据量、程序所采用的算法等。顺序存储结构在数据插入和删除操作上的效率比链式存储结构的效率低。5.下列选项中不属于结构化程序设计方法的是_。(A) 自顶向下(B
24、) 逐步求精(C) 模块化(D) 可复用(分数:2.00)A.B.C.D. 解析:6.有以下程序:int*f(int*x,int*y)if(*x*y)return x;elsereturn y;main()int a=7,b=8,*P,*q,*r;P=x=y=1;z=x+,y+,+y;printf(“%d,%d,%d/n“,x,y,z);程序运行后的输出结果是_。(A) 2,3,3(B) 2,3,2(C) 2,3,1(D) 2,2,1(分数:1.00)A.B.C. D.解析:14.下列叙述中正确的是( )。A) 在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B) 实型变量中允许存
25、放整型数C) 若 a 和 b 类型相同,在执行了赋值 a=b 后,b 中的值将放入 a 中,但 b 中的值不变D) 在 C 程序中,求余运算符“%”两边的类型相同时才能进行运算(分数:2.00)A.B. C.D.解析:解析选项 A),在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式。在判断选项 B)时首先应该建立这杆的概念,整型变量中只能存放整型数,实型变量中能存放实型数,也能存放整型数。选项 C),执行表达式 a=b 后,将把变量 b 存储单元中的值赋给变量 a,从而覆盖 a 中原有的值,但 b 中原有的值并不改变。选项 D),在 C 程序中,求余运算符
26、“%”两边的类型均为整型数据。15.若有定义语句:int x=10;,则表达式 x-=x+x 的值为A) -20 B) -10 C) 0 D) 10(分数:1.00)A.B. C.D.解析:解析 表达式 x-=x+x 等价于 x=x-(x+x)=10-20=-10。16.有以下程序main()int a,b,d=25;a=d/10%9;b=a(-1);printf(“%d,%d/n“,a,b);程序运行后的输出结果是_。(A) 6,1(B) 2,1(C) 6,0(D) 2,0(分数:1.00)A.B. C.D.解析:17.下列说法不正确的足( )。 A) int*ptr;/指针指向整形数据 B
27、) char*ptr;/指针的类型是字符型指针 C) int*ptr;/指针的类型是双重指针 D) int(*ptr)3;/是一一个指针数组,数组共有三个元素,而三个元素是 int 型指针(分数:1.00)A.B.C.D. 解析:解析 int(*ptr)3是一个数组指针,指针指向一个有 3 个 int 型变量的数组。18.以下不构成无限循环的语句或者语句组是_。A) n=0; B) n=0;do+n;while(n=0); while(1)n+C) n=10; D) for(n=0,i=1;i+)n+=i;while(n);n-;)(分数:2.00)A. B.C.D.解析:解析 本题主要考查各
28、种循环语句的掌握情况。选项 A 中为 dowhile 循环语句,首先执行 do 后面的语句+n;得 n=1,while 条件表达式为假,退出循环。选项 B 中,while 条件表达式的值始终为 1,条件为真,构成无限循环。选项 C 中 while(n);语句循环体为空,n 的值在循环中一直保持不变,构成无限循环。选项 D 中,i=1,for 语句中条件判断语句为空,永远为真,构成无限循环。19.有以下程序:main()int k=5;while(-k)printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是_。A) 1 B) 2 C) 4 D) 死循环(分数:2.00)
29、A. B.C.D.解析:解析 while(-k)执行后 k=4,k-=3 等价于 k=k-3。20.以下程序段的输出结果是int a,b,c;a=10;b=50;c=30;if(ab)a=b,b=c;c=a;printf(“a=%d b=%d c=%d/n“,a,b,c);A) a=10 b=50 c=10 B) a=10 b=50 c=30C) a=10 b=30 c=10 D) a=50 b=30 c=50(分数:1.00)A. B.C.D.解析:解析 当 if 语句条件为真时,执行 a=b;b=c;,退出 if 结构,顺序执行 c=a;,最后输出a、b、c 的值;当 if 语句条件为假时
30、,退出 if 结构,顺序执行 c=a;,输出 a、b、c 的值。因此,a、b未被改变,c 的值为 10。21.执行下面的程序后,a 的值为main()int a,b;for(a=1,b=1;a=10;a+)if(b%3=1)b+=3;continue;b-=5;A) 7 B) 8 C) 9 D) 10(分数:2.00)A.B.C.D. 解析:命题目的 考查 continue 语句的使用。解题要点 continue 语句的作用是结束本次循环,直接进入下次循环。22.下列程序的输出结果是( )。#includestdiohmain()int a=2,b=3,p;p=f(a,B) ;pdntf(“%
31、d“,p);int f(a,B) int c;if(aB) c=1;else if(a=B) c=0;elSe c=-1;return(C) ;A) -1 B) 0 C) 1 D) 2(分数:2.00)A. B.C.D.解析:解析 本题考查 if else 语句。在 int f(a,b)中:第一个 if 语句,先判断条件,发现 ab 条件不成立,则执行与其配对的 else 语句:第二个 if 语句,先判断条件,发现 a=b 条件不成立,则执行与其配对的 else 语句,c=-1。23.下列程序的输出结果是( )。#includestdio.hint fun(int x)int a;if(x=0
32、x=1) return 3;elsea=x-fun(x-2) ;return a;void main()printf(“%d“,fun(7) );A) 2 B) 8 C) 9 D) 5(分数:2.00)A. B.C.D.解析:解析 本题考查函数的递归调用。在函数递归调用时,fun(7):a=7-fun(5)fun(5):a=5-fun(3) fun3:a=3-fun(1)fun(1):a=3,反推回去 fun(3):a=3-3=0 fun(5):a=5-0=5fun(7):a=7-5=2,最后的计算结果为 2。24.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。(A)
33、函数的实参和其对应的形参共占同一存储单元(B) 形参只是形式上的存在,不会占用具体存储单元(C) 同名的实参和形参占同一存储单元(D) 函数的形参和实参分别占用不同的存储单元(分数:2.00)A.B.C.D. 解析:25.以下程序的输出结果是_。main()int i,a10;for(i=9;i=0;i-)ai=10-i;printf(“%d%d%d“,aa,a5,a8);A) 258 B) 741 C) 852 D) 369(分数:2.00)A.B.C. D.解析:评析 在本题运行时主要注意的是当 i=9 时,ai=10-9=1;i=8 时,ai=10-8=2;i=7 时,ai=10-7=3
34、;依此类推,直到 i=0 时,ai=10-0=10;此时,i 的值已变为-1,判断 for 的循环条件,不成立,然后输出 a2,a5,a8分别为 8,5,2。26.有以下程序:int fun(int n)if(n=1)return 1;else return(n+fun(n-1);main()int x;scanf(“%if“,x);x=fun(x);printf(“%d/n“,x);执行程序时,给变量 X 输入 10,程序的输出结果是_。A) 55 B) 54 C) 65 D) 45(分数:2.00)A. B.C.D.解析:解析 函数 fun()通过递归调用实现的功能为 n+(n-1)+1,
35、故程序的输出结果为 55。27.若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp)的返回值是A) EOF B) -1 C) 1 D) NULL(分数:2.00)A.B.C. D.解析:解析 EOF 是文本文件的文件结束标志,NULL 是打开文件错误的时候返回值。foef(fp)用来判断文件位置指针是否在文件末尾,文本文件和二进制文件均可以使用此函数。如果遇到文件结束就返回 1,否则返回 0。28.有以下程序void f(int *x,int *y)int t;t=*x;*x=*y;*y=t;main()int a8=(1,2,3,4,5,6,7,8),i,*p,*q;p
36、=a,q=while(pf(p,q); p+; q-; for(i=0;i8;i+)printf(“%d,“,ai);程序运行后的输出结果是_。A) 8,2,3,4,5,6,7,1, B) 5,6,7,8,1,2,3,4, C) 1,2,3,4,5,6,7,8, D) 8,7,6,5,4,3,2,1,(分数:1.00)A.B.C.D. 解析:解析 本题考查函数的传址调用。在 C 语言中,函数参数的默认传递方式是传值,函数内部的形参只是调用时实参的一个副本,形参改变后,实参不会变。另一种参数传递方式是传址,利用指针作为函数的参数,无论是形参指针还是实参指针,所指的都是同一个内存地址,所以如果形参
37、改变了这个地址中的内容,实参所指的地址内容也会改变。本题程序中的函数 f()就是利用传址的方式实现交换两个参数所指地址中的值。在主函数中,用 p、q 分别指向数组 a 的首和尾两个元素,然后在 while 循环中不断交换p、q 所指的内容,每次交换后,p、q 分别往后、往前移动一个元素,直到 q 不大于 p,即两个指针在数组 a 的中间相遇。所以程序的运行结果是使 a 中的所有元素反序排列,选项 D 正确。29.有以下程序:# includestring.hmain()char str20=“Hello“,“Beijing“,*p=str;printf(“%d/n“,strlen(p+20);
38、程序运行后的输出结果是 _。A) 0 B) 5 C) 7 D) 20(分数:2.00)A.B.C. D.解析:解析 本题中定义了一个 220 的二维字符数组 str,并且初始化为 str0=“Hello“,str1=“Beijing“,p 是指向 char 型的指针变量,并指向 str 数组的首地址,strlen(p+20)=strlen(str1)=7。30.下面程序的输出是_。mare()int x=3 y=6,a=0;while(x+!=(y=1)a+=1;if(yx)break;printf(“x=%d,y=%d,a=%d/n“,x,y,a);A) x=4,y=4,a=1 B) x=5
39、,y=5,a=1C) x=5,y=4,a=3 D) x=5,y=4,a=1(分数:2.00)A.B.C.D. 解析:评析 注意的是 x+中 x 值的引用时,这里应当是先引用,后自加,具体执行过程如下:第一次while 循环:条件为真,执行 a=a+1=1 此时,x 的值已为 4,判断 yx 不成立,继续抽行循环;第二次while 循环:条件为假,此时 x 的值已为 5,退出 while 循环,执行 printf。31.下述程序的输出结果是( )。 #includestdio.h void main() int a20,*p4; int i,k=0; for(i=0;i20;i+) ai=i;
40、for(i=0;i4;i+) pi=A) 没有错 B) 第 1 行有错 C) 第 6 行有错 D) 第 7 行有错(分数:2.00)A.B. C.D.解析:评析 字符串复制函数 strcpy 包含在头文件 string.h 中,因此,程序中的第 1 行文件包含命令是错误的。33.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是( )。A) 整型表达式 B) 整型常量C) 整型常量或整型表达式 D) 任何类型的表达式(分数:2.00)A.B.C. D.解析:解析 在 C 语言中,引用数组元素时,其数组下标的数据类型可以是整型常量,也可以是整型表达式。34.有以下程序:#include
41、stdio.hvoid swap1(int c)int t;t=c0; c0=c1; c1=t;void swap2(int c0,int c1)int t;t=c0; c0=c1; c1=t;main()int a2=3,5,b2=3,5;swap1(a); swap2(b0,b1);printf(“%d%d%d%d/n“,a0,a1,b0,b1);其输出结果是( )。A) 5 3 5 3 B) 5 3 3 5 C) 3 5 3 5 D) 3 5 5 3(分数:1.00)A.B. C.D.解析:解析 swap1 函数传递的是变量的地址,可以实现两个数的交换;而 swap2 函数传递的是值,执
42、行完 swap2 后,c0,c1 的值互换了,但 main 函数中的 b0 和 b1 并未互换,即形参值的改变无法传给实参。35.在 16 位 IBM-PC 机上使用 C 语言,若有如下定义:struct dataint i;char ch;double r;b;则结构变量 b 占用内存的字节数是A) 1 B) 2 C) 7 D) 11(分数:2.00)A.B.C.D. 解析:解析 结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和。本题中整型变量 i所占用的内存是 2 字节,字符型变量 ch 所占用的内存是 1 字节,双精度型变量 f 所占用的内存是 8 字节,三者相加为 11。3
43、6.有以下程序#include stdio.h#define f(x)x*x*xmain()int a=3,s,t;s=f(a+1);t=f(a+1);printf(“%d,%d/n“,s,t);程序运行后的输出结果是A) 10,64 B) 10,10C) 64,10 D) 64,64(分数:2.00)A. B.C.D.解析:解析 s=f(a+1)=a+1*a+1*a+1=10;s =f(a+1)=(a+1)*(a+1)*(a+1)=64。37.有以下定义和语句:struct workersint num; char name20; char c;struct int day; int mon
44、th; int year; s;struct workers w, *pw;pw=能给 w 中 year 成员赋值 1980 的语句是A) *pw.year=1980; B) w.year=1980;C) pw-year=1980; D) w.s.year=1980;(分数:2.00)A.B.C.D. 解析:解析 本题考查结构体成员的引用。通过 pw 和 w 都不能直接引用结构成员 day、month、year,必须通过成员变量 s 才能引用。38.有以下程序:int a=4;int f(int n)int t=0;static int a=5;if(n%2) int a=6;t+=a+;el
45、seint a;7;t+=a+;return t+a+;main()int s=a,i=0;for(;i2;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输出结果是_。A) 24 B) 28 C) 32 D) 36(分数:2.00)A.B. C.D.解析:解析 在主函数 main()中定义了两个变量 s 和 i,同时给 s 赋初值 a4,i 赋初值 0。当 i=0 时。执行“s+f(i);”语句,调用 f()并将 i 的初值 0 传递给形参 n。首先执行 if 语句中内条件:n%2,若条件为假。则执行 else 下的语句,a7,t7+07,使用 return 返回 t,t
46、7+(a+)7+512,此时a 运算完后自增 1,变为 6;返回主函数中,s4+1216。当 i=1 时,执行“s+=f(i);”语句,调用 f()并将 i 的初值 1 传递给形参 n。首先执行 if 语句中的条件:n%2,条件为真,执行 if 下面的语句,t0,a6 t0+66,使用 return 返回 t,t=6+6=12,返回主函数中,s16+12=28。最后输出的结果为 28。39.以下程序的功能是进行位运算:main()unsigned char a,b;a=73;b=43;printf(“%d%d/n“,a,b);程序运行后的输出结果是_。A) 4 3 B) 7 3C) 7 0 D
47、) 4 0(分数:2.00)A. B.C.D.解析:解析 本题考查位运算。位运算的对象应为二进制的形式。7 的二进制表示为 00000111,3 的二进制表示为 00000011,7 与 3 相异或得 00000100,即十进制数 4,表达式“43”先进行位反操作,冉进行位与,即 1111101100000011=00000011,即十进制数 3。所以应输出为 4 和 3。40.以下能正确定义一维数组的选项是( )。A) int a5 =0,1,2,3,4,5; B) char a = 0,1,2,3,4,5;C) char a = A,B,C ; D) int a5 = “0123“;(分数:1.00)A.B. C.D.解析:解析