1、二级 C 语言笔试-122 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.有以下程序:main()int i=1,j=2,k=3;if(i+=1(+j=3|k+=3)printf(“%d%d%d/n“,i,j,k);程序运行后的输出结果是_。(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 32.以下叙述中正确的是_。(分数:2.00)A.用 C 语言实现的算法必须要有输入和输出操作B.用 C 语言实现的算法可以没有输出但必须要有输入C.用 C 语言程序实现的算法可以没有输入但必须要有输出D.用 C 语言程序实现的算
2、法可以既没有输入也没有输出3.以下选项中可作为 C 语言合法常量的是_。(分数:2.00)A.-80.B.-080C.-8e1.0D.-80.0e4.若有定义语句:int a23,*p3;,则以下语句中正确的是_。(分数:2.00)A.p=a;B.p0=a;C.p0=a12;D.p1=a;5.有以下程序:#includestdio.hvoid fun(char*p)+p;printf(“%s/n“,*p);main()char *a=“Morning“,“Afternoon“,“Evening“,“Night“;fun((分数:2.00)A.;程序的运行结果是_。A) Af6.数据库技术的根本
3、目标是要解决数据的_。(分数:2.00)A.存储问题B.共享问题C.安全问题D.保护问题7.有以下程序:void fun2(char a,char b)printf(“%c%c“,a,b);char a=A,b=B;void fun1()a=C;b=D;main()fun1();printf(“%c%c“,a,b);un2(E,F);程序的运行结果是_。(分数:2.00)A.C D E FB.A B E FC.A B C DD.C D A B8.下列叙述中正确的是_。(分数:2.00)A.为了建立一个关系,首先要构造数据的逻辑关系B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项C.
4、一个关系的属性名表称为关系模式D.一个关系可以包括多个二维表9.下列叙述中正确的是_。(分数:2.00)A.程序的执行效率与数据的存储结构密切相关B.程序的执行效率只取决于程序的控制结构C.程序的执行效率只取决于所处理的数据量D.以上三种说法都不对10.有以下程序:#includestdio.hmain()int y=9;for(; y0; y-)if(y%3=0)printf(“%d“,-y);程序的运行结果是_。(分数:2.00)A.741B.963C.852D.87542111.有以下程序:# define f(x) (x*x)main()int i1,i2;i1=f(8)/f(4);i
5、2=f(4+4)/f(2+2);printf(“%d,%d/n“,i1,i2);程序运行后的输出结果是_。(分数:1.00)A.64,28B.4,4C.4,3D.64,6412.下列关于栈的描述正确的是_。(分数:1.00)A.在栈中只能插入元素而不能删除元索B.在栈中只能删除元素而不能插入元素C.栈是特殊的线性表,只能在一端插入或删除元素D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素13.有以下程序:main()int k=5;while(-k)printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是_。(分数:1.00)A.1B.2C.4D.死循环14
6、.以下关于函数的叙述中正确的是_。(分数:1.00)A.每个函数都可以被其他函数调用(包括 main 函数)B.每个函数都可以被单独编译C.每个函数都可以单独运行D.在一个函数内部可以定义另一个函数15.以下合法的字符型常量是_。(分数:1.00)A./x13B./081C.65D.“/n“16.以下语句或语句组中,能正确进行字符串赋值的是_。(分数:1.00)A.char*sp;*sp=“right!“;B.char s10;s=“right!“;C.char s10;*s=“right!“;D.char*sp=“right!“;17.有以下程序:main()int i,t3=9,8,7,6
7、,5,4,3,2,1;for(i=0;i3;i+)printf(“%d“,t2-ii);程序执行后的输出结果是_。(分数:1.00)A.7 5 3B.3 5 7C.3 6 9D.7 5 118.有以下程序:void f(int*q)int i=0;for(; i5;i+)(*q)+;main()(int a5=1,2,3,4,5,i;f((分数:1.00)A.;for(i=0;i5;i+)printf(“%d“,a19.有以下程序:main()int e=2,4,6,8,10,y=0,x,*p;p=a1;for(x=1;x3;x+)y+=px;printf(“%d/n“,y);程序运行后的输出
8、结果是_。(分数:1.00)A.10B.11C.14D.1520.下列描述中正确的是_。(分数:1.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据与相关文档的集合21.有以下程序:#includestdio.hmain()int i,j;for(i=3;i=1;i-)for(j=1;j=2;j+)printf(“%d“,i+j);printf(“/n“);程序运行的结果是_。(分数:2.00)A.2 3 43 4 54 5B.4 3 2C.2 35 4 32 3D.4 53 4 3 422.有以下程序:#inlucdestdio.h
9、main()int n,*P=NULL;*p=n;printf(“input n:“);scanf(“%d“,p);printf(“output n:“);printf(“%d/n“,p);该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,以下语句正确的是_。(分数:2.00)A.int n,*p=NULL;B.*p=n;C.scanf(“%d“,p)D.printf(“%d/n“,p);23.以下程序的功能是进行位运算:main()unsigned char a,b;a=73;b=43;printf(“%d%d/n“,a,b);程序运行后的输出结果是_。(分数:2.00)
10、A.4 3B.7 3C.7 0D.4 024.有以下计算公式:(分数:2.00)A.B.C.D.25.有以下程序:int fun(int n)if(n=1)return 1;else return(n+fun(n-1);main()int x;scanf(“%d“,x);x=fun(x);printf(“%d/n“,x);执行程序时,给变量 X 输入 10,程序的输出结果是_。(分数:2.00)A.55B.54C.85D.4526.算法的有穷性是指_。(分数:2.00)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用27.若
11、有定义 int x, y;,并已正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。(分数:2.00)A.(x-y0)B.(x-y0)C.(x-y0|x-y0)D.(x-y=0)28.软件是指_。(分数:2.00)A.程序B.程序和文档C.算法加数据结构D.程序、数据与相关文档的完整集合29.有以下程序:main(int argc,char * argv)int n=0,i;for(i=1;iargc;i+)n=n*10+argvi-0;printf(“%d/n“,n);编译连接后生成可执行文件 tt.exe. 若运行时输入以下命令行tt 12
12、 345 678程序运行后的输出结果是_。(分数:2.00)A.12B.12345C.12345678D.13630.以下定义语句中正确的是_。(分数:2.00)A.int a=b=0;B.char A=65+1,b=b;C.float a=1,*b=a,*c=b;D.double a=0.0;b=1.1;31.软件设计中模块划分应遵循的准则是_。(分数:2.00)A.低内聚、低耦合B.高内聚、低耦合C.低内聚、高耦合D.高内聚、高耦合32.有以下程序:#includestring.hmain()char p20=a,d,c,d,q=“abc“,r=“abcde“strcat(p,r);str
13、cpy(p+strlen(q),q);printf(“%d/n“,sizeof(p);程序运行后的输出结果是_。(分数:2.00)_33.读取二进制文件的函数调用形式为:fread(buffer, size, count, pf);,其中 buffer 代表的是_。(分数:2.00)A.一个文件指针,指向待读取的文件B.一个整型变量,代表待读取的数据的字节数C.一个内存块的首地址,代表读入数据存放的地址D.一个内存块的字节数34.在 C 语言中,函数返回值的类型最终取决于_。(分数:2.00)A.函数定义时的函数首部所说明的函数类型B.return 语句中表达式值的类型C.调用函数时主调函数所
14、传递的实参类型D.函数定义时形参的类型35.有以下程序:struct STUchar name10;int num;float TotalScore;void f(struct STU *p)struct STU s2=“SunDan“,20044,550,“Penghua“,20045,537,*q=s;+p; +q; *p=*q;main()struct STU s3=“YangSan“,20041,703,“LiSiGuo“,20042,580;f(s);printf(“%s%d% 3.Of/n“,s1.name,s1.num,s1.TotalScore);程序运行后的输出结果是_。(分
15、数:2.00)A.SunDan 20044 550B.Penghua 20045 537C.LiSiGuo 20042 580D.SunDan 20041 70336.有以下程序:#includestdio.hmain()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%d/n“,a,b);程序的运行结果是_。(分数:2.00)A.a=1,b=0B.a=2,b=2C.a=1,b=1D.a=2,b=
16、137.“商品”与“顾客”两个实体集之间的联系一般是_。(分数:2.00)A.一对一B.一对多C.多对一D.多对多38.某二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点为_。(分数:2.00)A.n+1B.n-1C.2nD.n/239.若有说明语句:double*p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是_。(分数:2.00)A.*p=a;scanf(“%1f“,p);B.*p=a;scanf(“%f“,p);C.P=a;scanf(“%1f“,*p);D.p=a;scanf(“%1f“,p);40.以下结构体类型说明和变量定义中正确的是_。(分数:2.00)
17、A.typedef structint n;char c;);REC t1,t2;B.struct REC;int n;char c;)REC;REC t1,t2;C.typedef struct REC;int n;char c;REC;D.structint n=0;char c=A;t1,t2;REC t1,t2;二、填空题(总题数:14,分数:30.00)41.线性表的存储结构主要分为顺序存储结构和链式存储结构,队列是一种特殊的线性表,循环队列是队列的 1 存储结构。(分数:2.00)填空项 1:_42.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_43.两种基本
18、测试方法中, 1 测试的原因之一是保证所测试模块中每一个独立路径至少要执行一次。(分数:2.00)填空项 1:_44.在关系模型中,把数据看成是二维表,每一个二维表称为一个 1。(分数:2.00)填空项 1:_45.E-R 图中,矩形表示 1。(分数:2.00)填空项 1:_46.执行以下程序后的输出结果是_。main()int a=10;a=(3*5,a+4);printf(“a=%d/n“,a);(分数:2.00)填空项 1:_47.以下程序运行后的输出结果是_。main()char c;int n=100;loat f=10;double x;x=f*=n/=(c=50);printf(
19、“%d%f/n“,n,x);(分数:2.00)填空项 1:_48.以下程序运行后的输出结果是_。main()int a=1,b=2,c=3;if(c=a)printf(“%d/n“,c);else printf(“%d/n“,b);(分数:2.00)填空项 1:_49.有以下程序,若运行时从键盘输入:18,11回车,则程序的输出结果是_。main()int a,b;printf(“Enter a, b:“);scanf(“%d, %d“,a,b);while(a!=b)while(ab)a-=b;while(ba)b-=a;printf(“%3d%3d“,a,b);(分数:2.00)填空项 1
20、:_50.以下程序的功能是:求出数组 x 中各相邻两个元素的和,依次存放到 a 数组中,然后输出请填空。main()int x10,a9,I;for(i=0;i10;i+)scanf(“%d“,x(i);for(i=1;i10;i+)ai-1=xi+_;for(i=0;i9;i+)printf(“%d“,ai);printf(“/n“);(分数:2.00)填空项 1:_下面程序的功能是:将 N 行 N 列二维数组中每一行的元素进行排序,第 0 行从小到大排序,第 1 行从大到小排序,第 2 行从小到大排序,第 3 行从大到小排序,例如:(分数:4.00)填空项 1:_填空项 1:_51.以下程
21、序运行后的输出结果是_。#includechar*ss(char*s)char*p,t;P=s+1;t=*s;while(*p) *(p-1)=*p;p+;*(p-1)=t;return s;main()char*p,str10=“abcdefgh“;p=ss(str);printf(“%s/n“,p);(分数:2.00)填空项 1:_52.执行以下程序的输出结果是_。#includestdio.h#define M 5#define N M+Mmain()int k;k=N*N*5;printf(“%d/n“,k);(分数:2.00)填空项 1:_53.以下程序中函数 fun 的功能是:统计
22、 person 所指结构体数组中所有性别(sex)为 M 的记录的个数,存入变量 n 中,并作为函数值返回。请填空:#includestdio.h#define N 3typedef structint num;char name10;char sex;)SS;int fun(SS person)int i,n=0;for(i=0;iN;i+)if(_=M)n+;return n;main()(SS WN=1,AA,F,2,BB,M,3,CC,M;int n;n=fun(W);printf(“n=%d/n“,n);(分数:2.00)填空项 1:_二级 C 语言笔试-122 答案解析(总分:10
23、0.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.有以下程序:main()int i=1,j=2,k=3;if(i+=1(+j=3|k+=3)printf(“%d%d%d/n“,i,j,k);程序运行后的输出结果是_。(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 本题的考点是关于 C 语言的逻辑表达式的计算规则。对于逻辑表达式“i+=1 (+j=3|k+=3)”,首先判断“i+=1”,由于 i 初值为 1,“i+=1”为真,同时 i 加 1 值为2。由于第一项为真,对于“”运算符,结果取决于后一项“(+j=3|k+=3)”
24、。而逻辑表达式“(+j=3|k+=3)”计算时,首先判断“+j=3”,由于 j 初值为 2,+j 后 j 值为 3,“+j=3”为真,对于“|”运算符不需要判断后一项表达式的结果就可以断定此逻辑表达式结果为真,因此“k+=3”并没有进行判断,k+也未执行,k 仍是初值 3,输出结果应该是:2 3 3。正确选项是 D。2.以下叙述中正确的是_。(分数:2.00)A.用 C 语言实现的算法必须要有输入和输出操作B.用 C 语言实现的算法可以没有输出但必须要有输入C.用 C 语言程序实现的算法可以没有输入但必须要有输出 D.用 C 语言程序实现的算法可以既没有输入也没有输出解析:解析 一个算法应该具
25、有以下 5 个特性:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。因此一个算法可以没有输入(程序的功能确定),但必须要有输出,没有输出的算法是没有意义的。3.以下选项中可作为 C 语言合法常量的是_。(分数:2.00)A.-80. B.-080C.-8e1.0D.-80.0e解析:解析 C 语言中实数常数的科学表示法规定格式为:“实数 e 整数”或“实数 E 整数”,其中幂是整数,不能写成实数。e(或 E)前后的实数和整数都不能省略掉,因此选项 C 和 D 都是错误的。选项 B的-080,由于 C 语言规定 0 开头的是八进制数,0x(0X)开头的是十六进制数。而八进制数数字是
26、07,出现 8 是错误的,因此选项 B 也是错误的。只有选项 A 是正确的。实数的小数点前后的数字都可以不写。4.若有定义语句:int a23,*p3;,则以下语句中正确的是_。(分数:2.00)A.p=a;B.p0=a; C.p0=a12;D.p1=a;解析:解析 本题考查的重点是指针数组与二维数组的关系。因为*p3定义成指针数组,从而指针数组中的任何元素都是一个地址,因此,选项 B 是正确的。5.有以下程序:#includestdio.hvoid fun(char*p)+p;printf(“%s/n“,*p);main()char *a=“Morning“,“Afternoon“,“Eve
27、ning“,“Night“;fun((分数:2.00)A.;程序的运行结果是_。A) Af 解析:解析 本题考查的重点是二级指针的用法。函数 fun(cha * * p)定义了一个二级指针,而实参 a为一个指针数组,当执行+p 时,实际上指向指针数组的第二个元素,因此,输出的是 Afternoon。6.数据库技术的根本目标是要解决数据的_。(分数:2.00)A.存储问题B.共享问题 C.安全问题D.保护问题解析:解析 数据库技术的根本目标是解决数据的共享问题。7.有以下程序:void fun2(char a,char b)printf(“%c%c“,a,b);char a=A,b=B;void
28、 fun1()a=C;b=D;main()fun1();printf(“%c%c“,a,b);un2(E,F);程序的运行结果是_。(分数:2.00)A.C D E F B.A B E FC.A B C DD.C D A B解析:解析 调用函数 fun1()后,全局变量被赋值 a=C,b=D,故答案为 A。8.下列叙述中正确的是_。(分数:2.00)A.为了建立一个关系,首先要构造数据的逻辑关系 B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项C.一个关系的属性名表称为关系模式D.一个关系可以包括多个二维表解析:解析 关系中的每一个属性都是不可分解的,所以表示关系的二维表中各元组的
29、每一个分量不能分成若干数据项。关系模式是命名的属性集合。一个关系就是一张二维表。为了建立一个关系,首先需要构造数据的逻辑关系。9.下列叙述中正确的是_。(分数:2.00)A.程序的执行效率与数据的存储结构密切相关 B.程序的执行效率只取决于程序的控制结构C.程序的执行效率只取决于所处理的数据量D.以上三种说法都不对解析:解析 程序的执行效率是与数据的存储结构密切联系的。10.有以下程序:#includestdio.hmain()int y=9;for(; y0; y-)if(y%3=0)printf(“%d“,-y);程序的运行结果是_。(分数:2.00)A.741B.963C.852 D.8
30、75421解析:解析 本题考查的重点是 printF()函数和 for 循环的执行方式。在循环体内,若 y 为的倍数,则执行 print(“%d“,-y)语句。所以,当 y 为 9 时,输出-y 为 8;当 y 为 6 时,输出-y 为 5;当 y 为 3时,输出-y 为 2;当 y 为零时,for 循环结束。因此,选项 C 是正确的。11.有以下程序:# define f(x) (x*x)main()int i1,i2;i1=f(8)/f(4);i2=f(4+4)/f(2+2);printf(“%d,%d/n“,i1,i2);程序运行后的输出结果是_。(分数:1.00)A.64,28B.4,
31、4C.4,3 D.64,64解析:解析 根据题意,i1=f(8)/f(4)进行宏替换后,11=(8*8)/(4*4)=4,i2=f(4+4)/f(2+2)=(4+4*4+4)/(2+2*2+2)=24/8=3。所以输出结果为 4、3。12.下列关于栈的描述正确的是_。(分数:1.00)A.在栈中只能插入元素而不能删除元索B.在栈中只能删除元素而不能插入元素C.栈是特殊的线性表,只能在一端插入或删除元素 D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素解析:解析 栈是特殊的线性表,只能在栈顶插入或删除元素。13.有以下程序:main()int k=5;while(-k)printf(
32、“%d“,k-=3);printf(“/n“);执行后的输出结果是_。(分数:1.00)A.1 B.2C.4D.死循环解析:解析 while(-k)执行后 k=4,k-=3 等价于 k=k-3。14.以下关于函数的叙述中正确的是_。(分数:1.00)A.每个函数都可以被其他函数调用(包括 main 函数)B.每个函数都可以被单独编译 C.每个函数都可以单独运行D.在一个函数内部可以定义另一个函数解析:解析 C 语言中,除了主函数外,用户定义的函数或库函数都可以互相进行调用,甚至可以自己调用自己。所以选项 A 错误。每个函数可以单独被编译成二进制代码,但不是所有的函数都可以单独运行,程序的运行需
33、要从主函数 main 开始,缺少 main 函数,则无法运行。所以选项 C 错误。C 语言规定,不能在一个函数内部再定义函数,所以选项 D 错误。15.以下合法的字符型常量是_。(分数:1.00)A./x13 B./081C.65D.“/n“解析:解析 字符常量只能包含一个字符,因此 C 选项错误。字符常量只能用单引号括起来,不能用双引号,因此 D 选项错误。转义字符常量是一个反斜线开头后跟一个特定的字符,用来代表某个特定的ASCII 字符,反斜线后面直接跟数字表示八进制(八进制不用 0 开头),所以 B 错误。反斜线后面以小写字母 x 开头的用来表示十六进制数。16.以下语句或语句组中,能正
34、确进行字符串赋值的是_。(分数:1.00)A.char*sp;*sp=“right!“;B.char s10;s=“right!“;C.char s10;*s=“right!“;D.char*sp=“right!“; 解析:解析 本题的考点是 C 语言的数组和指针。C 的数组名是一个特殊类型的指针,固定指向数组第一个元素的位置,运行过程中不能再改变其指向。因此选项 B、C 都是错误的。指针可以指向任何单元,但选项 A 是错误的,因为赋值语句“*sp=“right!“;”是错误的,正确写法是“sp=“right!“;”。而对于选项 D,由于“char * sp=“right!“;”是定义指针同时
35、赋初值,因此是正确的。17.有以下程序:main()int i,t3=9,8,7,6,5,4,3,2,1;for(i=0;i3;i+)printf(“%d“,t2-ii);程序执行后的输出结果是_。(分数:1.00)A.7 5 3B.3 5 7 C.3 6 9D.7 5 1解析:解析 定义二维数组时第一维的长度可以不指定,该程序中 t3通过赋初值等价于 t33,并且其数组按行进行赋值,敞通过 for 循环输出的分别是 t20、t11和 t02。18.有以下程序:void f(int*q)int i=0;for(; i5;i+)(*q)+;main()(int a5=1,2,3,4,5,i;f(
36、(分数:1.00)A.;for(i=0;i5;i+)printf(“%d“,a解析:解析 题目中定义了一个指针变量作为函数 f()的参数。主函数 main()中调用 f()函数,当 i=0时,执行语句“(*q)+;”,此处*q 就代表数组 a0的地址,也即将 q 进行加 1 操作;当 i=1 时,q 仍指向数组元素 a0的地址,因为在函数 f()中并未对指针变量 q 做任何变动,即*q 仍代表数组元素 a0的值,所以此次(*q)+即为 2+1,a0的值变为 3;直到 i=4 时,执行(*q)+后 a0的值变为 6,最后输出数组 a 的结果为 6、2、3、4、5。19.有以下程序:main()i
37、nt e=2,4,6,8,10,y=0,x,*p;p=a1;for(x=1;x3;x+)y+=px;printf(“%d/n“,y);程序运行后的输出结果是_。(分数:1.00)A.10B.11C.14 D.15解析:解析 指针变量 p 指向数组元素 a1,则 p1即为 a2,p2即为 a3,执行第一次 for 循环时,y=y+p1=0+a2=6,第二次执行 for 循环,y=y+p2=6+a3=14,此时 x 为 3,for 循环条件不满足,退出循环,输出 y 的值为 14。20.下列描述中正确的是_。(分数:1.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又
38、是物理实体D.软件是程序、数据与相关文档的集合 解析:解析 计算机软件是包括程序、数据及相关文档的完整集合,软件是一种逻辑实体,软件的开发、运行对计算机系统具有依赖性受计算机系统的限制。21.有以下程序:#includestdio.hmain()int i,j;for(i=3;i=1;i-)for(j=1;j=2;j+)printf(“%d“,i+j);printf(“/n“);程序运行的结果是_。(分数:2.00)A.2 3 43 4 54 5B.4 3 2C.2 35 4 32 3D.4 53 4 3 4 解析:解析 本题主要考查 for 循环语句的嵌套。外层主循环执行了 3 次,嵌套的循
39、环语句每轮执行 2次,每次输出 i+j 的值,推出嵌套循环语句后换行。22.有以下程序:#inlucdestdio.hmain()int n,*P=NULL;*p=n;printf(“input n:“);scanf(“%d“,p);printf(“output n:“);printf(“%d/n“,p);该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,以下语句正确的是_。(分数:2.00)A.int n,*p=NULL; B.*p=n;C.scanf(“%d“,p)D.printf(“%d/n“,p);解析:解析 *p 代表存储单元的值,而n 代表变量 n 的地址,将一
40、个地址赋给一个值是不正确的,所以选项 B 是错误的;指针 p 代表存储单元的地址,前面不需要加,所以选项 C 错误;选项 D 是将一个地址输出,所以也是错误的。除了给指针变量赋地址值以外,还可以给指针变量赋 NULL 值,所以选项 A 正确。23.以下程序的功能是进行位运算:main()unsigned char a,b;a=73;b=43;printf(“%d%d/n“,a,b);程序运行后的输出结果是_。(分数:2.00)A.4 3 B.7 3C.7 0D.4 0解析:解析 本题考查位运算。位运算的对象应为二进制的形式。7 的二进制表示为 00000111,3 的二进制表示为 000000
41、11,7 与 3 相异或得 00000100,即十进制数 4,表达式“43”先进行位反操作,冉进行位与,即 1111101100000011=00000011,即十进制数 3。所以应输出为 4 和 3。24.有以下计算公式:(分数:2.00)A.B.C. D.解析:解析 本题考查的重点是分段数学公式的求解。选项 D 是正确的,它是用问号表达式“exp1? exp2: exp3”来代替 ifelse 语句,其运算过程是:先对 exp1 求值,如果 exp1 值为真时,对 exp2 求值并将所求结果作为整个问号表达式的值。若 exp1 的值为假时,对 exp3 求值并将结果作为整个问号表达式的值。
42、因而程序“y=sqrt(x=0:-x)”是先判断 x=0,若为真,则计算结果为 sqrt(X),否则计算结果为sqrt(-X),且该函数包含于 math.h 头文件中。选项 A 和 B 也是对的,只有选项 C 不能正确计算上述功能。25.有以下程序:int fun(int n)if(n=1)return 1;else return(n+fun(n-1);main()int x;scanf(“%d“,x);x=fun(x);printf(“%d/n“,x);执行程序时,给变量 X 输入 10,程序的输出结果是_。(分数:2.00)A.55 B.54C.85D.45解析:解析 函数 fun()通过
43、递归调用实现的功能为 n+(n-1)+1,故程序的输出结果为 55。26.算法的有穷性是指_。(分数:2.00)A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用解析:解析 算法的基本特征包括可行性、确定性、有穷性、拥有足够的情报,其中算法的有穷性是指算法必须能在有限的时间内做完执行有限个步骤之后终止,即算法程序的运行时间是有限的。27.若有定义 int x, y;,并已正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。(分数:2.00)A.(x-y0)B.(x-y0)C.
44、(x-y0|x-y0) D.(x-y=0)解析:解析 条件运算表达式:“表达式 1?表达式 2:表达式 3”,但表达式 1 的值为非 0 时,此时表达式 2 的值就是整个条件表达式的值,反之为表达式 3 的值。故其等价于选项 C 中的逻辑或表达式。28.软件是指_。(分数:2.00)A.程序B.程序和文档C.算法加数据结构D.程序、数据与相关文档的完整集合 解析:解析 计算机软件是包括程序、数据及相关文档的完整集合。29.有以下程序:main(int argc,char * argv)int n=0,i;for(i=1;iargc;i+)n=n*10+argvi-0;printf(“%d/n“
45、,n);编译连接后生成可执行文件 tt.exe. 若运行时输入以下命令行tt 12 345 678程序运行后的输出结果是_。(分数:2.00)A.12B.12345C.12345678D.136 解析:解析 main()函数可以带参数,并且只能有两个,第一个参数(argc)类型为整数,用来记下命令行的参数个数,第二个参数(argv)为一个字符型指针数组,其各个元素用来记下命令行各参数字符串的首地址。题目中 argc 的值是 4,循环中依次求出 argv1、argv2、argv3指向的字符串(“12“、“345“、“678“)首字符。其中*argvi用于指向求出的字符串的首地址的值,即分别是:1、3、6;“n=n*10+argvi-0”语句用于连接各字符串首字符。30.以下定义语句中正确的是_。(分数:2.00)A.int a=b=0;B.char A=65+1,b=b; C.float a=1,*b=a,*c=b;D.double a=0.0;b=1.1;解析:解析 变量定义的时候不能用连等,故 A 选项错误。C 选项中变量 C 和b 的类型不匹配。D 选项中,变量前为分号“;”表示前而的语句定义完毕,并没有为变量 b 定义