1、二级 C 语言笔试-107 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.以下程序段的执行结果为_。#define PLUS(X,Y)X+Ymain()int x=1,y=2,z=3,sum;sum=PLUS(x+y,z)*PLUS(y,z);printf(“SUM=%d“,sum);(分数:2.00)A.SUM=9B.SUM=12C.SUM=18D.SUM=282.下列说法中,正确的是_。(分数:2.00)A.指针是一个变量B.指针中存放的可以是任何类型的值C.指针变量是变量地址D.指针变量占用存储空间3.设有两个串 p 和 q,求 q
2、 在 p 中首次出现位置的运算称作_。(分数:2.00)A.连接B.模式匹配C.求子串D.求串长4.下列程序的执行结果是_。in(f(char*s)char*p=s;while(*p!=/0)p+;return(p-s);main()printf(“%d/n“,f(“goodbye!“); (分数:2.00)A.3B.6C.8D.05.C 语言规定,简单变量作实参时,它和对应形参之间的数据传递方式是_。(分数:2.00)A.由实参传给形参,再由形参传回给实参B.地址传递C.单向值传递D.由用户指定传递方式6.设有说明:int a=1,b=0;,则执行以下语句的输出结果是_。switch((分数
3、:2.00)A.case 1:switch(B.case 0:printf(“*0*/n“);break;case 1:printf(“*1*/n“);break;7.下列程序的输出结果是_。main()int x=0,a=0,b=2;if(x=a+b) printf(“*/n“);else printf(“#/n“);(分数:2.00)A.有语法错,不能通过编译B.通过编译,但不能连接C.*D.#8.执行下面程序的结果是_。main()int x=2;printf(“%d/n“,(x-,x1,xi6;i+)ai=4*(i-2*(i3)%5;printf(“%2d“,ai);(分数:2.00)
4、A.2 3 2 3B.1 2 1 2C.3 2 3 2D.2 2 2 210.fseek 函数是 C 语言系统提供的标准库函数,其实现的具体操作是_。(分数:2.00)A.实现文件的顺序读写B.实现文件的随机读写C.改变文件的位置指针D.以上答案均不正确11.下列用于 printf 函数的控制字符常量中,代表“竖向跳格”的转义字符常量是_。(分数:1.00)A./bB./tC./vD./f12.下列程序的输出结果是_。struct exmpleint x;int y;num2=1,2,3,2;main()printf(“%d/n“,num1.y*num0.x/num1.x);(分数:1.00)
5、A.0B.1C.3D.613.下列 4 项说法中,不正确的是_。(分数:1.00)A.数据库减少了数据冗余B.数据库中的数据可以共享C.数据库避免了一切数据的重复D.数据库具有较高的数据独立性14.若有下列语句:char a=“xyz“;char b=x,y,z;则下列叙述正确的是_。(分数:1.00)A.数组 a 和数组 b 不等价B.数组 a 和数组 b 的长度相同C.数组 a 占用空间大小等于数组 b 占用空间大小D.数组 a 占用空间大小大于数组 b 占用空间大小15.下列 4 项中,必须进行查询优化的是_。(分数:1.00)A.关系数据库B.网状数据库C.层次数据库D.非关系模型16
6、.分析下面的程序main()int*p1,*p2,*p;int x=4,y=6;p1=p2=p1=p2;p2=p;printf(“%d,%d,“,*p1,*p2);printf(“%d,%d/n“,x,y);程序的输出结果为_。(分数:1.00)A.6,4,4,6B.4,6,6,4C.4,6,4,6D.6,4,6,417.已知在 ASCII 字符集中,数字 0 的序号为 48,下列程序的输出结果为_。main()char a=0,b=9;printf(“%d,%c/n“,a,b) ; (分数:1.00)A.因输出格式不合法B.48,57C.0,9D.48,918.下列字符串是用户自定义标识符的
7、是_。(分数:1.00)A._w1B.3_xyC.intD.LINE-319.软件设计中,有利于提高模块独立性的一个准则是_。(分数:1.00)A.低内聚低耦合B.低内聚高耦合C.高内聚低耦合D.高内聚高耦合20.在 C 语言的循环语句 for、while、do-while 中,用于结束本次循环,继续执行下一次循环的语句是_。(分数:1.00)A.switchB.breakC.continueD.goto21.下面函数的功能是_。exchange(int*ptr1,*ptr2)int*ptr;ptr=-ptr1;ptr1=ptr2;ptr2=ptr;(分数:1.00)A.交换*ptr1 和*p
8、tr2 的值B.无法改变*ptr1 和*ptr2 的值C.可能造成系统故障,因为使用了空指针D.交换*ptr1 和*pb2 的地址22.下列程序段的输出结果是_。int *pp,*p;int a=10,b=20;p=i6;i+)printf(i%2)?(“*%d/n“):(“#%d/n“),i);上面程序段的输出结果是_。(分数:1.00)A.*4#5B.#4*5C.*4*5D.#4#528.下面程序的输出是_。main()int a=6,b=3;printf(“%d/n“,b=(a/b,a%b);(分数:1.00)A.0B.1C.2D.不确定的值29.若有说明语句:int x=3,y=4,z
9、=5;,则下面的表达式中,值为 0 的是_。(分数:1.00)A.xi4;i+) k=k*10+ai-48;B.int k=0,i;for(i=3;i=0;i-)k=k*10+ai-0;C.int k=0,i; for(i=3;i=0;i-) k=k+ai-0;D.int k,i;for(i=3;i=0;i-)k=k*10+ai-0;31.由两个栈共享一个存储空间的好处是_。(分数:1.00)A.减少存取时间,降低下溢发生的几率B.节省存储空间,降低上溢发生的几率C.减少存取时间,降低上溢发生的几率D.节省存储空间,降低下溢发生的几率32.下列程序的输出结果是_。main()unionint
10、a2;long k;char c4;un,*sp=i3;i+)ni=O;k=2;for(i=0;ik;i+)for(j=0;jk;j+)nj=ni-1;printf(“%d/n“,n0);(分数:1.00)A.-2B.-1C.0D.-334.对于下述说明,不能使变量 p-b 的值增 1 的表达式是_。struct exmint a;int b;float c*p;(分数:1.00)A.+p-bB.+(p+)-bC.p-b+D.(+p)-b+35.n 个顶点的连通图中边的条数至少为_。(分数:1.00)A.0B.1C.n-1D.n36.下列程序段的执行结果是_。int i;int x3=1,2,
11、3,4,5,6,7,8,9;for(i=0;i3;i+)printf(“%d“,xi2-i);(分数:1.00)A.1 59B.1 4 7C.3 5 7D.3 6 937.最常用的一种基本数据模型是关系数据模型,它的表示应采用_。(分数:1.00)A.树B.网络C.图D.二维表38.以下程序存在语法性错误,关于错误原因的正确说法是_。main()int a=5,b;void p_ch1();b=p_ch1((分数:1.00)A.;A) 语句“void p_ch1():”有错,它是函数调用语句,不能使用 void 说明B.变量名不能使用大写字母C.函数说明和函数调用语句之间有矛盾D.函数名中不能
12、使用下划线39.下列程序的输出结果是_。char*fun(char*str,int n)int i;char*p=str;for(i=0;i10;i+,str+)*str=a+i;return+p;main()char a10;printf(“%s/n“,fun(a,10);(分数:1.00)A.ABCDEFGHIJB.abcdefghijC.bcdefghijD.不确定的值40.以下程序的输出结果是_。fun(int*p,int a23)*p=a12;main()int a23=1,3,5,7,9,11,*p;p=(int*)malloc(sizeof(int);fun(t=“abcde“;
13、C.char t5=“abcde“;D.char t5;t=“abcd“;42.下列程序的输出结果是_。int m=10;int fun(int a,int B) int m=2;return(a*b-m);main()int x=7,y=5;printf(“%d/n“,fun(x,y)%m);(分数:1.00)A.1B.2C.7D.343.下列程序的执行结果是_。print(int*b,int m)int i;for(i=0;im;i+)*b=i; b+; printf(“%d/n“,*-B) ;main()int a5=1,2,3,4,5;print(a,5);(分数:1.00)A.5B.
14、4C.3D.244.下列程序的输出结果是_。main()int i=0x100,j=100,k=0100;printf(“%d%d%d/n“,i,j,k);(分数:1.00)A.100 100 100B.16 100 100C.256 100 64D.256 100 10045.下列叙述中,正确的是_。(分数:1.00)A.软件就是程序清单B.软件就是存放在计算机中的文件C.软件应包括程序清单及运行结果D.软件包括程序和文档46.软件生命周期中花费时间最多的阶段是_。(分数:1.00)A.详细设计B.软件编码C.软件测试D.软件维护47.下列程序的输出结果是_。main()int x,y;fo
15、r(x=1,y=1;x10;x+)if(y5)break;if(y%31)y+=3;continue;y-=5;printf(“%d/n“,x);(分数:1.00)A.2B.3C.4D.548.以下能正确对整型数组赋初值的语句是_。(分数:1.00)A.int a4=1,2,3,4,5;B.int a22=1,2,3,4,5;C.int a4=1,2,3,4);D.int a3=1,2,3,4,5,6;49.以下对一维实型数组 a 的正确定义的是_。(分数:1.00)A.float a(10);B.int n=10;float an;C.int n;float a n;scanf(“%d“,y
16、=8;m=+x,x;n=y+y+;printf(“%d,%d,%d,%d“,x,y,m,n);运行后,x,y,m,n 的值是_。(分数:2.00)填空项 1:_58.程序如下:main()int i=4;printf(“%d“,-+i);该程序执行后的输出结果以及 i 的值分别是_ 、_。(分数:4.00)填空项 1:_59.设 x、y、z 为整型变量,且 x=2,y=3,z=4,当执行以下语句后,x 的值是_。x*=(y+)+(-z);(分数:2.00)填空项 1:_60.以下程序的运行结果是_。struct Nodeint x;char ch;fun(struct Node*sn)stat
17、ic k=1;sn-x=20;Sn-ch=a+k+;main()int i;static struct Node st=10,a;for(i=0;i2;i+)fun(break;case 2:x+;y+;break;printf(“x=%d,y=%d/n“,x,y);运行程序的输出结果是_。(分数:2.00)填空项 1:_62.以下程序的功能是:从键盘输入一字符串,要求将每个单词中的第一个字母改成小写(如果原来已是小写字母,则不变),然后输出转换结果,补足所缺语句。main()char str200; int i=0;while(_=getchar()!=/n);stri-1)=/0;for(
18、i=0;stri!=/0;i+)if(stri-1= i=0)后,*p 指向的字符串是_。(分数:2.00)填空项 1:_65.以下程序的运行结果是_。struct exmpchar name 10;int number;struct exmp test3=“WangXi“,1,“QiYu“,2,“HuHua“,3;main()printf(“%c,%s/n“,test0.name1,test2.name+3);(分数:2.00)填空项 1:_66.以下程序的输出结果是_。main()char s=“abcdef“;s3=/0;printf(“%s/n“,s);(分数:2.00)填空项 1:_
19、67.下面程序把从终端读入的文本(用#作为文本结束标志)复制到一个名为 file.txt 的新文件中。补足所缺语句。main()char ch;FILE*fp;if(fp=fopen(_)NULL)exit(0);while(ch=getchar()!=#)fputc(ch,fp);_;(分数:4.00)填空项 1:_二级 C 语言笔试-107 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.以下程序段的执行结果为_。#define PLUS(X,Y)X+Ymain()int x=1,y=2,z=3,sum;sum=PLUS(x+y,z)*P
20、LUS(y,z);printf(“SUM=%d“,sum);(分数:2.00)A.SUM=9B.SUM=12 C.SUM=18D.SUM=28解析:分析 表达式 sum=PLUS(x+y,z)*PLUS(y,z)用带参的宏替换为 sum=x+y+z*y+z,sum 的值为12。2.下列说法中,正确的是_。(分数:2.00)A.指针是一个变量B.指针中存放的可以是任何类型的值C.指针变量是变量地址D.指针变量占用存储空间 解析:分析指针是地址,存放指针的变量是指针变量,不同类型的指针变量存放不同类型数据的地址,指针变量作为可存储指针的变量,也要占用一定的存储空间。3.设有两个串 p 和 q,求
21、q 在 p 中首次出现位置的运算称作_。(分数:2.00)A.连接B.模式匹配 C.求子串D.求串长解析:分析子串的定位操作通常称作串的模式匹配,是各种串处理系统中最重要的操作之一,算法的基本思想是:从主串的开始字符起,与模式的第一个字符比较,若相等,则继续比较后续字符,否则从主串的下一个字符起再重新与模式的字符比较,依次类推,直至模式中的每一个字符依次和主串中的一个连续的字符序列相等,称匹配成功,否则称匹配不成功。4.下列程序的执行结果是_。in(f(char*s)char*p=s;while(*p!=/0)p+;return(p-s);main()printf(“%d/n“,f(“good
22、bye!“); (分数:2.00)A.3B.6C.8 D.0解析:分析字符在内存中占一个字节的存储空间,按字符的存储顺序,其地址依次递增,在函数 f 中循环过后,p 指向字符串的结束位置,s 指向字符串首地址,p-s 即为字符串长度。5.C 语言规定,简单变量作实参时,它和对应形参之间的数据传递方式是_。(分数:2.00)A.由实参传给形参,再由形参传回给实参B.地址传递C.单向值传递 D.由用户指定传递方式解析:分析简单变量做实参时,相应的形参变量也是简单变量,它们之间的数据传递方式是单向值传递,即数据只能由实参传到形参,形参值的改变不影响实参值的变化。6.设有说明:int a=1,b=0;
23、,则执行以下语句的输出结果是_。switch((分数:2.00)A.case 1:switch(B.case 0:printf(“*0*/n“);break;case 1:printf(“*1*/n“);break; 解析:分析本题是 switch-case 语句的嵌套使用,外层 switch 语句的第一个分支(嵌套 switch 语句)执行完后,没有 break;语句,将继续执行第二个分支。7.下列程序的输出结果是_。main()int x=0,a=0,b=2;if(x=a+b) printf(“*/n“);else printf(“#/n“);(分数:2.00)A.有语法错,不能通过编译B
24、.通过编译,但不能连接C.* D.#解析:分析if 语句中的条件表达式是赋值表达式,a+b 值为 2,赋给 x,x 值非 0,输出*。8.执行下面程序的结果是_。main()int x=2;printf(“%d/n“,(x-,x1,xi6;i+)ai=4*(i-2*(i3)%5;printf(“%2d“,ai);(分数:2.00)A.2 3 2 3B.1 2 1 2C.3 2 3 2 D.2 2 2 2解析:分析本题程序的功能是对数组元素赋值,难点是对表达式 4*(i-2*(i3)%5 的分析。10.fseek 函数是 C 语言系统提供的标准库函数,其实现的具体操作是_。(分数:2.00)A.
25、实现文件的顺序读写B.实现文件的随机读写C.改变文件的位置指针 D.以上答案均不正确解析:分析fseek 函数的原形为 int fseek(FILE*fp,long offset,int base);函数的功能是将 fp 所指向的位置指针移到以 base 所指位置为基准、以 offset 为位移量的位置。可见,fseek 是改变文件的位置指针。11.下列用于 printf 函数的控制字符常量中,代表“竖向跳格”的转义字符常量是_。(分数:1.00)A./bB./tC./v D./f解析:分析转义字符/b/、/t、/v、/f的作用分别是退格、移到下一制表位、竖向跳格和换页。12.下列程序的输出结
26、果是_。struct exmpleint x;int y;num2=1,2,3,2;main()printf(“%d/n“,num1.y*num0.x/num1.x);(分数:1.00)A.0 B.1C.3D.6解析:分析结构体数组 num 初始化后,num0成员 x、y 的值分别为 1、2,num1成员 x、y 的值分别为 3、2,代入 num1y*num0x/num1x,解得值是 0。13.下列 4 项说法中,不正确的是_。(分数:1.00)A.数据库减少了数据冗余B.数据库中的数据可以共享C.数据库避免了一切数据的重复 D.数据库具有较高的数据独立性解析:分析数据库系统具有以下 4 个特
27、点:数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。14.若有下列语句:char a=“xyz“;char b=x,y,z;则下列叙述正确的是_。(分数:1.00)A.数组 a 和数组 b 不等价B.数组 a 和数组 b 的长度相同C.数组 a 占用空间大小等于数组 b 占用空间大小D.数组 a 占用空间大小大于数组 b 占用空间大小 解析:分析数组 a 的存储空间占 4 个字节(结束符/0占一字节),数组 a 的存储空间占 3 个字节。15.下列 4 项中,必须进行查询优化的是_。(分数:1.00)A.关系数据库 B.网状数据库C.层次数据库D.非关系模型解析:分析
28、关系数据模型诞生之后迅速发展,深受用户喜爱,但关系数据模型也有缺点,其最主要的缺点是由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此,为了提高性能,必须对用户的查询请求进行优化。16.分析下面的程序main()int*p1,*p2,*p;int x=4,y=6;p1=p2=p1=p2;p2=p;printf(“%d,%d,“,*p1,*p2);printf(“%d,%d/n“,x,y);程序的输出结果为_。(分数:1.00)A.6,4,4,6 B.4,6,6,4C.4,6,4,6D.6,4,6,4解析:分析if 语句执行前,指针变量 p1 指向变量 x,指针变量 p2 指向变量 y
29、。由于 xy 成立,p1、p2 分别指向变量 y 和变量 x,因此,程序输出结果是 6,4,4,6。17.已知在 ASCII 字符集中,数字 0 的序号为 48,下列程序的输出结果为_。main()char a=0,b=9;printf(“%d,%c/n“,a,b) ; (分数:1.00)A.因输出格式不合法B.48,57C.0,9D.48,9 解析:分析注意输出控制符%d,%c,分别表示以十进制形式输出字符的 ASCII 码值和字符。18.下列字符串是用户自定义标识符的是_。(分数:1.00)A._w1 B.3_xyC.intD.LINE-3解析:分析标识符是由字母或下划线打头,由字母、数字
30、、下划线组成的字符串,包括关键字、编译预处理命令和用户自定义标识符 3 种,选项 B、D 不是合法的标识符,选项 C 是关键字。19.软件设计中,有利于提高模块独立性的一个准则是_。(分数:1.00)A.低内聚低耦合B.低内聚高耦合C.高内聚低耦合 D.高内聚高耦合解析:分析模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。一般优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性,提高模块内的内聚性,有利于提高模块的独立性。20.在 C 语言的循环语句 for、while、do-while 中,用于结束本次循环,继续执行下一次循环
31、的语句是_。(分数:1.00)A.switchB.breakC.continue D.goto解析:分析循环辅助控制语句有 continue;和 break;,前者跳过本次循环,进行下一次循环,后者跳出整个循环语句。21.下面函数的功能是_。exchange(int*ptr1,*ptr2)int*ptr;ptr=-ptr1;ptr1=ptr2;ptr2=ptr;(分数:1.00)A.交换*ptr1 和*ptr2 的值B.无法改变*ptr1 和*ptr2 的值 C.可能造成系统故障,因为使用了空指针D.交换*ptr1 和*pb2 的地址解析:分析函数中将指针变量 ptr1 和 ptr2 中的值交
32、换,而不是交换指针 ptr1 和 ptr2 所指变量中的值。22.下列程序段的输出结果是_。int *pp,*p;int a=10,b=20;p=i6;i+)printf(i%2)?(“*%d/n“):(“#%d/n“),i);上面程序段的输出结果是_。(分数:1.00)A.*4#5B.#4*5 C.*4*5D.#4#5解析:分析函数 printf 中的参数是三目条件表达式,循环控制变量 i 值为 4 时, i%2 为 0,格式控制字符串为“#%d/n“,输出为#4;循环控制变量 i 值为 5 时,i%2 为 1,格式控制字符串为“*%d/n“,输出为*5,两次输出不在同一行。28.下面程序的
33、输出是_。main()int a=6,b=3;printf(“%d/n“,b=(a/b,a%b);(分数:1.00)A.0 B.1C.2D.不确定的值解析:分析逗号表达式的值为最后一个表达式的值,本题将 a%b 的值 0 赋给变量 b。29.若有说明语句:int x=3,y=4,z=5;,则下面的表达式中,值为 0 的是_。(分数:1.00)A.xi4;i+) k=k*10+ai-48;B.int k=0,i;for(i=3;i=0;i-)k=k*10+ai-0; C.int k=0,i; for(i=3;i=0;i-) k=k+ai-0;D.int k,i;for(i=3;i=0;i-)k=
34、k*10+ai-0;解析:分析将字符数组中的元素按反序转换成整数,数组第一个元素应当是四位整数的个位,依次类推,字符数字转换为数字的基本方法是将该字符的 ASCII 码值减去字符 0 的 ASCII 码值,程序的输出结果是3210。31.由两个栈共享一个存储空间的好处是_。(分数:1.00)A.减少存取时间,降低下溢发生的几率B.节省存储空间,降低上溢发生的几率 C.减少存取时间,降低上溢发生的几率D.节省存储空间,降低下溢发生的几率解析:分析常常一个程序中要用到多个栈,为了不发生上溢错误,就必须给每个栈分配一个足够大的存储空间。但实际中,很难准确地估计,若每个栈都分配过大的存储空间,势必造成
35、系统空间紧张;若让多个栈共用一个足够大的连续存储空间,则可利用栈的动态特性使它们的存储空间互补。32.下列程序的输出结果是_。main()unionint a2;long k;char c4;un,*sp=i3;i+)ni=O;k=2;for(i=0;ik;i+)for(j=0;jk;j+)nj=ni-1;printf(“%d/n“,n0);(分数:1.00)A.-2B.-1C.0D.-3 解析:分析当 i 为 0,内循环在 j 为 0 时,执行 nj=ni-1;,即 n0=n0-1, n0值变为-1:在j 为 1 时,执行 nj=ni-1;,即 n1=n0-1,将-2 赋给 n1。当 i 为
36、 1 时,内循环在 j 为 0 时,执行 nj=ni-1;,即 n0=n1-1,n0值变为-3;在 j 为 1 时,执行 nj=ni-1;,即 n1=n1-1,将-3 赋给 n1;最后 n0和 n1的值均为-3。34.对于下述说明,不能使变量 p-b 的值增 1 的表达式是_。struct exmint a;int b;float c*p;(分数:1.00)A.+p-bB.+(p+)-bC.p-b+D.(+p)-b+ 解析:分析p-b 应作为一个整体看待,+p-b 和 p-b+都使变量 b 增 1, +(p+)-b 先使 b 增1,再使 p 后移,D 中表达式的含义是使 p+1 所指结构体变量
37、中的成员 b 的值增 1。35.n 个顶点的连通图中边的条数至少为_。(分数:1.00)A.0B.1C.n-1 D.n解析:分析在无向图(边没有方向性的图)中,若从顶点 vi 到 vj 有路径,则称 vi 和 vj 是连通的,若该图中任意两个顶点都是连通的,则称该图为连通图。36.下列程序段的执行结果是_。int i;int x3=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)printf(“%d“,xi2-i);(分数:1.00)A.1 59B.1 4 7C.3 5 7 D.3 6 9解析:分析数组 x 在初始化时赋 9 个值,列值为 3,则行值为 3。i 为 0 时,xi
38、2-1指的是元素 x02(值为 3):i 为 1 时,xi2-i指的是元素 x11(值为 5):i 为 2 时,xi2-1指的是元素 x20(值为 7);输出结果是 3 5 7。37.最常用的一种基本数据模型是关系数据模型,它的表示应采用_。(分数:1.00)A.树B.网络C.图D.二维表 解析:分析关系数据模型用统一的二维表结构表示实体及实体之间的联系(即关系)。38.以下程序存在语法性错误,关于错误原因的正确说法是_。main()int a=5,b;void p_ch1();b=p_ch1((分数:1.00)A.;A) 语句“void p_ch1():”有错,它是函数调用语句,不能使用 v
39、oid 说明B.变量名不能使用大写字母C.函数说明和函数调用语句之间有矛盾 D.函数名中不能使用下划线解析:分析函数声明中指出函数没有参数,返回值为空类型,而调用语句却有参数,并将函数值赋给int 型变量 b,显然是不对的。39.下列程序的输出结果是_。char*fun(char*str,int n)int i;char*p=str;for(i=0;i10;i+,str+)*str=a+i;return+p;main()char a10;printf(“%s/n“,fun(a,10);(分数:1.00)A.ABCDEFGHIJB.abcdefghijC.bcdefghij D.不确定的值解析:
40、分析调用函数 fun 使字符数组中的内容是“abcdefghij“,函数的返回值是字符数据的地址,该地址指向数组的第二个字符,因此,主函数的输出结果是字符串 “bcdefghij“。40.以下程序的输出结果是_。fun(int*p,int a23)*p=a12;main()int a23=1,3,5,7,9,11,*p;p=(int*)malloc(sizeof(int);fun(t=“abcde“;C.char t5=“abcde“;D.char t5;t=“abcd“;解析:分析可以赋初值的字符串一定是用字符数组存储的,选项 B 不对,它是将字符指针变量指向一个字符串常量;选项 C 中字符
41、数组 t 需要 6 个字节的存储空间:选项 D 是错误的形式,数组名是常量。42.下列程序的输出结果是_。int m=10;int fun(int a,int B) int m=2;return(a*b-m);main()int x=7,y=5;printf(“%d/n“,fun(x,y)%m);(分数:1.00)A.1B.2C.7D.3 解析:分析本题考查全局变量和局部变量的区别。在函数 fun 中的 m 是局部变量,值为 2,在主函数中的 m 是全局变量,值为 10。43.下列程序的执行结果是_。print(int*b,int m)int i;for(i=0;im;i+)*b=i; b+;
42、 printf(“%d/n“,*-B) ;main()int a5=1,2,3,4,5;print(a,5);(分数:1.00)A.5B.4 C.3D.2解析:分析函数 print 中形参 b 指向数组 a 的首地址,for 循环将 04 依次赋给元素 a0a4,指针 b 指向数组后的地址,输出函数先将指针 b 自减,指向元素 a4,输出为 4。44.下列程序的输出结果是_。main()int i=0x100,j=100,k=0100;printf(“%d%d%d/n“,i,j,k);(分数:1.00)A.100 100 100B.16 100 100C.256 100 64 D.256 10
43、0 100解析:分析i,j 初始化时分别赋予十六进制数和八进制数,对应的十进制数是 256 和 64。45.下列叙述中,正确的是_。(分数:1.00)A.软件就是程序清单B.软件就是存放在计算机中的文件C.软件应包括程序清单及运行结果D.软件包括程序和文档 解析:分析软件(software)是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。46.软件生命周期中花费时间最多的阶段是_。(分数:1.00)A.详细设计B.软件编码C.软件测试D.软件维护 解析:分析软件生命周期分为软件定义、软件开发及软件运行维护 3 个阶段。本题中,详细设计、软件编码和软件测试都属于软件
44、开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。47.下列程序的输出结果是_。main()int x,y;for(x=1,y=1;x10;x+)if(y5)break;if(y%31)y+=3;continue;y-=5;printf(“%d/n“,x);(分数:1.00)A.2B.3 C.4D.5解析:分析本题考查循环辅助控制语句 break 和 continue,前者退出整个 for 循环,后者跳过本次循环没有执行完的若干条语句,开始下一次循环操作,建议读者采用本书推荐的列表法分析。48.以下
45、能正确对整型数组赋初值的语句是_。(分数:1.00)A.int a4=1,2,3,4,5;B.int a22=1,2,3,4,5;C.int a4=1,2,3,4); D.int a3=1,2,3,4,5,6;解析:分析A、B 定义的数组长度小于花括号中数据的个数,C 是将数字字符的 ASCII 码值作为整数赋给整型数组的各元素,D 是定义二维数组,第二维的长度不能缺省。49.以下对一维实型数组 a 的正确定义的是_。(分数:1.00)A.float a(10);B.int n=10;float an;C.int n;float a n;scanf(“%d“,y=8;m=+x,x;n=y+y+;printf(“%d,%d,%d,%d“,x,y,m,n);运行后,x,y,m,n 的值是_。(分数:2.00)填空项 1:_ (正确答案:6,9,6,16。)解析:分析赋值语句 m=+x,x;是将逗号表达式的值赋给 m,x 和 m 的值都是 6,赋值语句 n=y+y+;是将 y+y 的值 16 赋给 n,再执行 y 的自