1、(A)二级公共基础知识-1 及答案解析(总分:100.01,做题时间:90 分钟)一、单项选择题(总题数:40,分数:40.00)1.在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是_。A逻辑设计 B需求分析C详细设计 D物理设计(分数:1.00)A.B.C.D.2.对序线性表(23,29,34,55,60,70,78)用二分法查找值为 60 的元素时,需要比较次数为_。A1 B2 C3 D4(分数:1.00)A.B.C.D.3.下列描述中,正确的是_。A线性链表是线性表的链式存储结构B栈与队列是非线性结构C双向链表是非线性结构D只有根结点的二叉树是线性结构(分数:1.00)
2、A.B.C.D.4.开发大型软件时,产生困难的根本原因是_。A大型系统的复杂性 B人员知识不足C客观世界千变万化 D时间紧、任务重(分数:1.00)A.B.C.D.5.两个或两个以上的模块之间关联的紧密程度称为_。A耦合度 B内聚度C复杂度 D连接度(分数:1.00)A.B.C.D.6.下列关于线性表的叙述中,不正确的是_。A线性表可以是空表B线性表是一种线性结构C线性表的所有结点有且仅有一个前件和后件D线性表是由 n 个元素组成的一个有限序列(分数:1.00)A.B.C.D.7.设有如下关系表:(分数:1.00)A.B.C.D.8.以下描述中,不是线性表顺序存储结构特征的是_。A可随机访问
3、B需要连续的存储空间C不便于插入和删除 D逻辑相邻的数据物理位置上不相邻(分数:1.00)A.B.C.D.9.在三级模式之间引入两层映像,其主要功能之一是_。A使数据与程序具有较高的独立性 B使系统具有较高的通道能力C保持数据与程序的一致性 D提高存储空间的利用率(分数:1.00)A.B.C.D.10.下列方法中,属于白盒法设计测试用例的方法的是_。A错误推测 B因果图C基本路径测试 D边界值分析(分数:1.00)A.B.C.D.11.在 C 语言中,以下说法不正确的是_。A在 C 程序中,整数和实数都能被准确无误地表示出来B在 C 程序中,任何一个变量名都代表存储器中的一个位置C静态变量的生
4、存期与整个程序的运行期相同DC 语言中,任何变量都必须先声明才能进行引用(分数:1.00)A.B.C.D.12.以下关于 C 语言数据类型的叙述中正确的是_。AC 基本数据类型包括:分为整型、实型、浮点型、字符型四种B实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式C若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D若只处理“真”和“假”两种逻辑值,应使用逻辑类型(分数:1.00)A.B.C.D.13.以下标识符不是关键字的是_。Abreak BcharCswitch Dreturn(分数:1.00)A.B.C.D.14.下列选项中,不能作为合
5、法常量的是_。A1.234e04 B1.234e0.4C1.234e+4 D1.234e0(分数:1.00)A.B.C.D.15.有以下程序:#includestdio.hmain()while(getchar()!=/n);(分数:1.00)A.B.C.D.16.下列叙述中正确的是_。A调用 printf()函数时,必须要有输出项B使用 putchar()函数时,必须在之前包含头文件 stdio.hC在 C 语言中,整数可以以二进制、八进制或十六进制的形式输出D调节 getchar()函数读入字符时,可以从键盘上输入字符所对应的 ASC码(分数:1.00)A.B.C.D.17.执行以下程序段
6、后,w 的值为_。int w=A,x=14,y=15;w=(xy)(wa);A-1 BNULL C1 D0(分数:1.00)A.B.C.D.18.设有定义:“long x=123450L;”,则以下能够正确输出变量 x 的是_。Aprintf(“x=%d/n“,x); Bprintf(“x=%id/n“,x);Cprintf(“x=%d/n“,x); Dprintf(“x=%ld/n“,x);(分数:1.00)A.B.C.D.19.已有定义 int a=3;和输出语句 printf(“%8x“,a);以下正确的叙述是_。A整型变量的输出格式符只有%d 一种B%x 是格式符的一种,它可以适用于任
7、何一种类型的数据C%x 是格式符的一种,其变量的值按十六进制数输出,但%8x 是错误的D%8x 是正确的格式符,其中数字 8 规定了输出字段的宽度(分数:1.00)A.B.C.D.20.若有定义 int x,y;并已正确给变量赋值,则下列选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。A(x-y0) B(x-y0)C(x-y0x-y0) D(x-y=0)(分数:1.00)A.B.C.D.21.若 a、b、c、d 都是 int 型变量且都已经正确赋初值,则以下不正确的赋值语句是_。Aa+d; Ba+;Ca=b=c=d=100; Da=(b=3)+(d=5);(分数
8、:1.00)A.B.C.D.22.有以下程序#define F(X,Y)(X)*(Y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是_。A12 B15 C16 D20(分数:1.00)A.B.C.D.23.以下是 while 语句的基本形式:while(表达式)语句;其中“表达式”_。A必须是逻辑表达式 B必须是关系表达式C必须是逻辑表达式或关系表达式 D可以是任意合法的表达式(分数:1.00)A.B.C.D.24.有以下程序:#includestdio.hmain()int a=6,b=7,m=1;switch(a%2)case 0:
9、m+;break;case 1:m+;switch(b%2)deflaut:m+;case 0:m+;break;printf(“%d/n“,m);程序运行后的输出结果是_。A1 B2 C3 D4(分数:1.00)A.B.C.D.25.有以下程序#includestdio.hint fun(int a,int b)if(b=0) retum a;else return(fun(-a,-b);main()printf(“%d/n“,fun(4,2);程序的运行结果是_。A1 B2 C3 D4(分数:1.00)A.B.C.D.26.关于字符常量,以下叙述正确的是_。A空格不是一个字符常量B字符常量
10、能包含大于一个的字符C单引号中的大写字母和小写字母代表的是相同的字符常量D所有的字符常量都可以作为整型量来处理(分数:1.00)A.B.C.D.27.下面函数调用语句含有实参的个数为_。func(exp1,exp2),(exp3,exp4,exp5);A1 B2 C3 D5(分数:1.00)A.B.C.D.28.有以下程序#includestdio.hvoid main()int n=2,k=1;while(!(k0n+);printf(“%d %d/n“,k,n);程序运行后的输出结果是_。A0 2 B1 3 C5 7 D1 2(分数:1.00)A.B.C.D.29.以下不正确的定义语句是_
11、。Adouble x5=1.0,2.0,3.0,4.0,5.0; Bint y5=0,1,2,3,4,5;Cchar c1=1,2,3,4,5; Dchar c2=a,b,c;(分数:1.00)A.B.C.D.30.若有以下定义,则对数组元素的正确引用是_。int a5,*p=a;A*a5 B(*a)+2 C*p+4 D*(a+2)(分数:1.00)A.B.C.D.31.下列字符数组初始化语句中,不正确的是_。Achar c=goodmoming; Bchar c201=“goodmoming“;Cchar c=a,b,c,d; Dchar c=“goodmorning“;(分数:1.00)A
12、.B.C.D.32.下列程序的运行结果为_。#includestdio.hvoid abc(char *str)int a,b,i,j;for(i=j=0;stri!=/0;i+)if(stri!=a)strj+=stri;strj=/0;void main()char str=“abcdef“;abc(str);printf(“str=%s“,str);Astr=bcdef Bstr=abcdefCstr=a Dstr=ab(分数:1.00)A.B.C.D.33.阅读下面程序,程序执行后的结果为_。#include “stdio.h“main()char *str=“abcdefghijkl
13、mnopq“;while(*str+!=e);printf(“%c/n“,*str);Af Ba Ce Dq(分数:1.00)A.B.C.D.34.设有如下的程序段:char str=“HelloWorld“;char *ptr;ptr=str;执行上面的程序段后,*(ptr+10)的值为_。A/0 B0C不确定的值 D0的地址(分数:1.00)A.B.C.D.35.下述语句中,在字符串 s1 和 s2 相等时显示“they are Equa1”的是_。Aif(*s1=*s2)puts(“they are Equa1“);Bif(!strcmp(s1,s2)puts(“they are Equ
14、a1“);Cif(s1=s2)Puts(“they are Equa1“);Dif(strcmp(s1,s2)puts(“they are Equa1“);(分数:1.00)A.B.C.D.36.设有定义:Struct complexint real,unreal;data1=1,8,data2;则以下赋值语句中错误的是_。Adata2=data1.real,data1.unreal;Bdata2=(2,6);Cdata2.real=data1-real;Ddata2-real=data1.unreal;(分数:1.00)A.B.C.D.37.以下程序的输出结果是_。#includestdio
15、.hvoid prt(int *x,int *y,int *z)printf(“%d,%d,%d/n“,+*x,+*y,*(z+);main()int a=10,b=40,c=20;prt(a,b,c);prt(a,b,c);A11,42,3112,22,41B11,41,2012,42,20C11,21,4011,21,21D11,41,2112,42,22(分数:1.00)A.B.C.D.38.设有以下说明,则不正确的叙述是_。union unint a;char b;float c;arr;Aarr 所占的内存长度等于成员 c 的长度Barr 的地址和它的各成员的地址都是同一地址Carr
16、 可以作为函数参数D不能在定义 arr 时对它初始化(分数:1.00)A.B.C.D.39.若 x=4,y=5,则 xy 的结果是_。A0 B4 C3 D5(分数:1.00)A.B.C.D.40.下列关于 C 语言数据文件的叙述中正确的是_。A文件由 ASC码字符序列组成,C 语言只能读写文本文件B文件由二进制数据序列组成,C 语言只能读写二进制文件C文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件(分数:1.00)A.B.C.D.二、操作题(总题数:0,分数:0.00)三、程序填空题(总题数:1,分数:20.00
17、)用筛选法可得到 2n(n10000)之间的所有素数,方法是:首先从素数 2 开始,将所有 2 的倍数的数从数表中删去(把数表中相应位置的值置成 0);接着从数表中找下一个非 0 数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于 n 为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,函数 fun 用筛选法找出所有小于等于 n 的素数,并统计素数的个数作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!(分数:20.01)填空项
18、1:_填空项 1:_填空项 1:_四、程序修改题(总题数:1,分数:20.00)41.给定程序 MODI1.C 中函数 fun 的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。请改正函数 fun 中指定部位的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!(分数:20.00)填空项 1:_五、程序设计题(总题数:1,分数:20.00)42.请编写函数 fun,它的功能是:计算并输出 n(包括 n)以内能被 5 或 9 整除的所有自然数的倒数之和。例如,在主函数中从键盘给 n 输入 20 后,输出
19、为:s=0.583333。注意:要求 n 的值不大于 100。部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。(分数:20.00)_(A)二级公共基础知识-1 答案解析(总分:100.01,做题时间:90 分钟)一、单项选择题(总题数:40,分数:40.00)1.在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是_。A逻辑设计 B需求分析C详细设计 D物理设计(分数:1.00)A.B. C.D.解析:解析 软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常
20、用的工具是数据流图和数据字典。2.对序线性表(23,29,34,55,60,70,78)用二分法查找值为 60 的元素时,需要比较次数为_。A1 B2 C3 D4(分数:1.00)A.B.C. D.解析:解析 根据二分法查找法需要两次:首先将 60 与表中间的元素 55 进行比较,由于 60 大于55,所以在线性表的后半部分查找。第二次比较的元素是后半部分的中间元素,将 60 与表中间的元素70 进行比较,由于 60 小于 70,所以在线性表的前半部分查找。第三次比较的元素是前半部分的中间元素,即 60,这时两者相等,即查找成功。3.下列描述中,正确的是_。A线性链表是线性表的链式存储结构B栈
21、与队列是非线性结构C双向链表是非线性结构D只有根结点的二叉树是线性结构(分数:1.00)A. B.C.D.解析:解析 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:有且只有一个根结点;每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。4.开发大型软件时,产生困难的根本原因是_。A大型系统的复杂性 B人员知识不足C客观世界千变万化 D时间紧、任务重(分数:1.00)A. B.C.D.解析:解析 随着计算机软件规
22、模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。5.两个或两个以上的模块之间关联的紧密程度称为_。A耦合度 B内聚度C复杂度 D连接度(分数:1.00)A. B.C.D.解析:解析 耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。6.下列关于线性表的叙述中,不正确的是_。A线性表可以是空表B线性表是一种线性结构C线性表的所有结点有且仅有一个前件和后件D线性表是由 n 个元素组成的一个有限序列(分数:1.00)A.B.C. D.解析
23、:解析 线性表是一种线性结构,由 n(n0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以选项 C 是错误的。7.设有如下关系表:(分数:1.00)A.B.C. D.解析:解析 T 就是关系 R 中有的,同时 S 中也有的有序组(4、5、6),即交运算()。8.以下描述中,不是线性表顺序存储结构特征的是_。A可随机访问 B需要连续的存储空间C不便于插入和删除 D逻辑相邻的数据物理位置上不相邻(分数:1.00)A.B.C.D. 解析:解析 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在
24、物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。9.在三级模式之间引入两层映像,其主要功能之一是_。A使数据与程序具有较高的独立性 B使系统具有较高的通道能力C保持数据与程序的一致性 D提高存储空间的利用率(分数:1.00)A. B.C.D.解析:解析 数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。10.下列方法中,属于白盒法设计测试用例的方法的是_。A错误推测 B因果图C基本路径测试 D边界值分析(分数:1.00)A.B.C. D.解析:解析 白盒测试方法也称为
25、结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。11.在 C 语言中,以下说法不正确的是_。A在 C 程序中,整数和实数都能被准确无误地表示出来B在 C 程序中,任何一个变量名都代表存储器中的一个位置C静态变量的生存期与整个程序的运行期相同DC 语言中,任何变量都必须先声明才能进行引用(分数:1.00)A. B.C.D.解析:解析 此题考查 C 语言的基本概念。变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改;整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。12.以下关于 C 语言数据类型的叙述中正确的是_。AC
26、基本数据类型包括:分为整型、实型、浮点型、字符型四种B实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式C若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D若只处理“真”和“假”两种逻辑值,应使用逻辑类型(分数:1.00)A.B.C. D.解析:解析 C 基本数据类型包括:分为整型、实型、枚举型、字符型四种,实型就是浮点型,实型数据只有十进制,没有 2,8,16 进制表达,在 C 语言中没有定义逻辑类型,而是一般用 0 代表假,用非零代表真。13.以下标识符不是关键字的是_。Abreak BcharCswitch Dreturn(分数:1.00)
27、A.B.C. D.解析:解析 此题考查标识符和关键字的概念。需要注意的是 C 语言是区分大小写的,switch 是关键字,但 Switch 不是关键字。14.下列选项中,不能作为合法常量的是_。A1.234e04 B1.234e0.4C1.234e+4 D1.234e0(分数:1.00)A.B. C.D.解析:解析 用指数形式表示的实型常量需注意两点:e 或 E 后面的指数必须是整数:指数必须是不超过数据表示范围的正负整数,并且在 e 或 E 前必须有数字。15.有以下程序:#includestdio.hmain()while(getchar()!=/n);(分数:1.00)A.B.C. D.
28、解析:解析 根据程序顺序执行的次序,当程序执行到 while 这条语句,根据 while 语句中的结束循环的条件是“输入回车键时,结束循环”,所以当按回车键后,程序才执行 while 语句的下一条语句。16.下列叙述中正确的是_。A调用 printf()函数时,必须要有输出项B使用 putchar()函数时,必须在之前包含头文件 stdio.hC在 C 语言中,整数可以以二进制、八进制或十六进制的形式输出D调节 getchar()函数读入字符时,可以从键盘上输入字符所对应的 ASC码(分数:1.00)A.B. C.D.解析:解析 选项 A,若 printf 函数没有输出项,且格式字符串中不含格
29、式信息,则输出的是格式字符串本身,若格式字符串含有格式信息,运行时则出现错误提示;选项 C,在 C 语言中,整数可以十进制、八进制或十六进制的形式输出;选项 D,getchar 函数是从标准输入设备读取一个字符。17.执行以下程序段后,w 的值为_。int w=A,x=14,y=15;w=(xy)(wa);A-1 BNULL C1 D0(分数:1.00)A.B.C. D.解析:解析 字符变量 w 的初值为字符A,其 ASC码值为 65,字符a的 ASC码值为 97,所以关系表达式 wa的值为 1;变量 x=14,变量 y=15,xy 为或,x、y 均为真,所以 xy 的结果 1。因而逻辑表达式
30、(xy)(wa)的值为 1。18.设有定义:“long x=123450L;”,则以下能够正确输出变量 x 的是_。Aprintf(“x=%d/n“,x); Bprintf(“x=%id/n“,x);Cprintf(“x=%d/n“,x); Dprintf(“x=%ld/n“,x);(分数:1.00)A.B.C.D. 解析:解析 C 语言规定,输出 long 型数值的格式符为%ld。19.已有定义 int a=3;和输出语句 printf(“%8x“,a);以下正确的叙述是_。A整型变量的输出格式符只有%d 一种B%x 是格式符的一种,它可以适用于任何一种类型的数据C%x 是格式符的一种,其变
31、量的值按十六进制数输出,但%8x 是错误的D%8x 是正确的格式符,其中数字 8 规定了输出字段的宽度(分数:1.00)A.B.C.D. 解析:解析 本题考查 printf 函数的格式。“%8x”表示以十六进制无符号形式输出整型数据。“8”表示指定输出数据的宽度为 8 位。20.若有定义 int x,y;并已正确给变量赋值,则下列选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。A(x-y0) B(x-y0)C(x-y0x-y0) D(x-y=0)(分数:1.00)A.B.C. D.解析:解析 条件表达式的形式如下:“表达式 1?表达式 2:表达式 3”。其含义为
32、当“表达式 1”的值为非零时,求出“表达式 2”的值,此时“表达式 2”的值就是整个条件表达式的值;当“表达式 1”的值为零时,则求“表达式 3”的值,这时“表达式 3”的值就是整个表达式的值。本题条件表达式的执行顺序是先求解表达式“x-y”的值,若其值为非 0(可以是正数,也可以是负数),则再求表达式“x+”的值,其值就是条件表达式的值;若表达式“x-y”的值为 0,则再求表达式“y+”的值,其值就是条件表达式的值。因此,本题的答案为选项 C。21.若 a、b、c、d 都是 int 型变量且都已经正确赋初值,则以下不正确的赋值语句是_。Aa+d; Ba+;Ca=b=c=d=100; Da=(
33、b=3)+(d=5);(分数:1.00)A. B.C.D.解析:解析 C 语言规定,赋值号的右边可以是一个赋值表达式,因此选项 C、选项 D 正确;在选项 B 中,a+是一个自加 1 的表达式,a 被重新赋值,因此它是一个合法的赋值表达式;选项 A 中,a+d 是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。22.有以下程序#define F(X,Y)(X)*(Y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是_。A12 B15 C16 D20(分数:1.00)A. B.C.D.解析:解析 此题
34、考查的是编译预处理命令以及自加运算符。F(a+,b+)先取 a 和 b 的值,参加运算,再把 a 和 b 的值分别加 1,所以 F(a+,b+)=F(3,4)=3*4=12。23.以下是 while 语句的基本形式:while(表达式)语句;其中“表达式”_。A必须是逻辑表达式 B必须是关系表达式C必须是逻辑表达式或关系表达式 D可以是任意合法的表达式(分数:1.00)A.B.C.D. 解析:解析 本题考查 while 表达式。while(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(=)误写为赋值号(=)时不会报错的,但是其值恒为 1。24.有
35、以下程序:#includestdio.hmain()int a=6,b=7,m=1;switch(a%2)case 0:m+;break;case 1:m+;switch(b%2)deflaut:m+;case 0:m+;break;printf(“%d/n“,m);程序运行后的输出结果是_。A1 B2 C3 D4(分数:1.00)A.B. C.D.解析:解析 本题考查 switch 语句。因为 a=6,所以 a%2=0,因此第一个 switch 语句,执行 case 0,将 m 加 1,遇到 break 语句跳出 switch 语句,输出 m 值为 2。25.有以下程序#includestd
36、io.hint fun(int a,int b)if(b=0) retum a;else return(fun(-a,-b);main()printf(“%d/n“,fun(4,2);程序的运行结果是_。A1 B2 C3 D4(分数:1.00)A.B. C.D.解析:解析 由程序可知,函数 fun(int a,int b)是一个递归函数。所以当主函数中调用 fun(4,2)时,其执行过程如下:fun(4,2)-fun(3,1)-fun(2,0),其返回值为 2。所以正确答案为选项 B。26.关于字符常量,以下叙述正确的是_。A空格不是一个字符常量B字符常量能包含大于一个的字符C单引号中的大写字
37、母和小写字母代表的是相同的字符常量D所有的字符常量都可以作为整型量来处理(分数:1.00)A.B.C.D. 解析:解析 本题考查字符常量的 4 个知识点:空格是一个字符常量,而且单引号中的空格不可以省略;字符常量只能包含一个字符;单引号中的大写字母和小写字母代表的是不相同的字符常量;所有的字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是 ASC码值。27.下面函数调用语句含有实参的个数为_。func(exp1,exp2),(exp3,exp4,exp5);A1 B2 C3 D5(分数:1.00)A.B. C.D.解析:解析 本题考查函数调用时的实参形式。这里有一个逗号运算的考查,(
38、a,b)的运算结果为 b,因而只有一个值,结合 func 的调用形式,可以知道实参的个数只有 2 个。28.有以下程序#includestdio.hvoid main()int n=2,k=1;while(!(k0n+);printf(“%d %d/n“,k,n);程序运行后的输出结果是_。A0 2 B1 3 C5 7 D1 2(分数:1.00)A.B.C.D. 解析:解析 在程序中整型变量 n 的初始值等于 2,整型变量 k 的初始值等于 1,在执行 while 语句时,由于表达式 k 的值大于 0 为真,所以不再需要判断 n+是否为真,(k0n+)表达式的值为真。!(k0n+)表达式的值为
39、假,所以 while 语句中的条件不满足,循环语句不会执行,变量 n 的值也不会加 1,所在输出变量 k 和 n 的值是 1 和 2。29.以下不正确的定义语句是_。Adouble x5=1.0,2.0,3.0,4.0,5.0; Bint y5=0,1,2,3,4,5;Cchar c1=1,2,3,4,5; Dchar c2=a,b,c;(分数:1.00)A.B. C.D.解析:解析 本题考查对一维数组的赋值。选项 B 中,y5说明数组中有 5 个元素,但却给它赋了 6 个值,数组溢出所以是错误的。30.若有以下定义,则对数组元素的正确引用是_。int a5,*p=a;A*a5 B(*a)+2
40、 C*p+4 D*(a+2)(分数:1.00)A.B.C.D. 解析:解析 本题考查通过指针引用数组元素。选项 A、C 没有这种引用形式;选项 B,(*a)+2 与*a+2相同,表示第一个元素的值加 2;选项 D,*(a+2)引用数组的第 3 个元素。31.下列字符数组初始化语句中,不正确的是_。Achar c=goodmoming; Bchar c201=“goodmoming“;Cchar c=a,b,c,d; Dchar c=“goodmorning“;(分数:1.00)A. B.C.D.解析:解析 本题考查两个概念。用单引号括起来的一个字符常量只能存放一个字符;C 语言中没有字符串变量
41、,只能用字符数组来存储字符串。选项 A 中一个单引号内存放了若干个字符,是错误的;选项 B 利选项 D 中将一个字符串赋值给一个字符数组是允许的。32.下列程序的运行结果为_。#includestdio.hvoid abc(char *str)int a,b,i,j;for(i=j=0;stri!=/0;i+)if(stri!=a)strj+=stri;strj=/0;void main()char str=“abcdef“;abc(str);printf(“str=%s“,str);Astr=bcdef Bstr=abcdefCstr=a Dstr=ab(分数:1.00)A. B.C.D.解
42、析:解析 本题考查函数调用是的参数传递。通过函数 abc 的执行,将字符串中的字母 a 去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。33.阅读下面程序,程序执行后的结果为_。#include “stdio.h“main()char *str=“abcdefghijklmnopq“;while(*str+!=e);printf(“%c/n“,*str);Af Ba Ce Dq(分数:1.00)A. B.C.D.解析:解析 本题考查的是取内容运算符“*”和自加运算符“+”的优先级问题。由于“+”的优先级高于“*”,所以题干中*str+!=e,即*(str+)!=e,当 str 指向
43、字符e时,while 循环的条件不成立,但 str 已经进行了自加指向了字符f,所以*str 输出字符f。34.设有如下的程序段:char str=“HelloWorld“;char *ptr;ptr=str;执行上面的程序段后,*(ptr+10)的值为_。A/0 B0C不确定的值 D0的地址(分数:1.00)A. B.C.D.解析:解析 本题涉及字符数组和指针两个知识点:在 C 语言中,字符数组在存放字符串时会自动在末尾加上/0,所以题中数组 str 有 11 个元素;ptr 指向数组 str 的首地址,ptr+10 是指向 str10,*(ptr+10)是引用 str10的值(即结束符/0
44、)。35.下述语句中,在字符串 s1 和 s2 相等时显示“they are Equa1”的是_。Aif(*s1=*s2)puts(“they are Equa1“);Bif(!strcmp(s1,s2)puts(“they are Equa1“);Cif(s1=s2)Puts(“they are Equa1“);Dif(strcmp(s1,s2)puts(“they are Equa1“);(分数:1.00)A.B. C.D.解析:解析 字符串比较不能用两个等号(=)来进行比较,应使用 strcmp(s1,s2)函数来比较。strcmp(s1,s2)函数的功能是:当字符串 s1 和 s2 相
45、等时,返回值为 0,因此,当表达式!strcmp(s1,s2)=1 时,条件成立,执行后面的语句,输出 they are Equa1。36.设有定义:Struct complexint real,unreal;data1=1,8,data2;则以下赋值语句中错误的是_。Adata2=data1.real,data1.unreal;Bdata2=(2,6);Cdata2.real=data1-real;Ddata2-real=data1.unreal;(分数:1.00)A.B. C.D.解析:解析 本题主要考查结构体变量的定义与初始化。题目中定义了 complex 类型的结构体变量data1 和 data2,并对 data1 进行了初始化。选项 A、C、D 都是正确的,可以用一个结构体变量对另一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋值。37.以下程序的输出结果是_。#includestdio.hvoid prt(int *x,int *y,int *z)printf(“%d,%d,%d/n“,+*x,+*y,*(z+);main()int a=10