1、二级 C 语言真题 2013 年 09 月-(3)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.设栈的顺序存储空间为 S(0:49),栈底指针 bottom=49,栈顶指针 top=30(指向栈顶元素)。则栈中的元素个数为_。(分数:1.00)A.30B.29C.20D.192.某二叉树的前序序列为 ABCDEFG,中序序列为 DCBAEFG,则该二叉树的深度(根节点在第 1 层)为_。(分数:1.00)A.2B.3C.4D.53.下列叙述中正确的是_。(分数:1.00)A.存储空间连续的数据结构一定是线性结构B.存储空间不连续的数据结构
2、一定是非线性结构C.没有根节点的非空数据结构一定是线性结构D.具有两个根节点的数据结构一定是非线性结构4.下列叙述中正确的是_。(分数:1.00)A.带链队列的存储空间可以不连续,但队头指针必须大于队尾指针B.带链队列的存储空间可以不连续,但队头指针必须小于队尾指针C.带链队列的存储空间可以不连续,且队头指针可以大于也可以小于队尾指针D.带链队列的存储空间一定是不连续的5.某系统结构图如下图所示: (分数:1.00)A.2B.3C.4D.n6.下面不能作为软件需求分析工具的是_。(分数:1.00)A.PAD 图B.数据字典(DD)C.数据流程图(DFD 图)D.判定树7.下面不属于对象基本特点
3、的是_。(分数:1.00)A.标识唯一性B.可复用性C.多态性D.封装性8.据库设计中,描述数据间内在语义联系得到 E-R 图的过程属于_。(分数:1.00)A.逻辑设计阶段B.需求分析阶段C.概念设计阶段D.物理设计阶段9.两个关系 R,S 如下,由关系 R 和 S 得到关系 T,则所使用的操作为_。 R B C D a 0 k1 S B C D f 3 k2 n 2 x1 T B C D a 0 k1 f 3 k2 n 2 x1 (分数:1.00)A.并B.自然连接C.差D.交10.关系数据模型_。(分数:1.00)A.只能表示实体间 1:1 联系B.只能表示实体间 1:m 联系C.可以表
4、示实体间 m:n 联系D.能表示实体间 1:n 联系而不能表示实体间 n:1 联系11.以下选项中叙述正确的是_。(分数:1.00)A.C 程序中的语句要经过编译才能转换成二进制机器指令B.算法需要包含所有三种基本结构C.有些算法不能用三种基本结构来表达D.简单算法的操作步骤不能超过 20 步12.以下选项中叙述正确的是_。(分数:1.00)A.复杂任务可以分解成简单子任务B.C 语言程序中的所有函数必须保存在同一个源文件中C.全部三种基本结构都包含的才是结构化程序D.C 语言程序可以定义多个不同内容的 main 函数13.以下选项中,合法的数值型常量是_。(分数:1.00)A.3.1415B
5、.“A“C.092D.0xDH14.以下选项中,合法的实数是_。(分数:1.00)A.4.5E2B.E1.3C.7.11ED.1.2E1.215.若有定义 int a,b,c;以下选项中的赋值语句正确的是_。(分数:1.00)A.a=(b=c)+1;B.(a=b)=c=1;C.a=(b=c)=1;D.a+b=c;16.有如下程序: #include stdio.h main() int x=0x13; printf(“%d/n“,x+1); 程序运行后的输出结果是_。(分数:1.00)A.12B.14C.20D.1317.对于 if(表达式)语句,以下叙述正确的是_。(分数:1.00)A.“表
6、达式”的值可以是任意合法的数值B.在“表达式”中不能出现变量C.在“表达式”中不能出现常量D.“表达式”的值必须是逻辑值18.以下程序段中,不能实现条件“如果 ab 则 x=10,否则 x=-10”的是_。(分数:1.00)A.x=(a=b)?-10:10;B.if(ab)x=10;else x=-10;C.x=-10;if(ab)x=10;D.if(ab)x=10;if(ba)x=-10;19.以下能够实现计算 5!的程序段是_。(分数:1.00)A.int fac=1,k=0;dok+;fac*=k; while(k5);B.int fac=0,k=1;dofac*=k;k+; while
7、(k5);C.int fac=1,k=1;dok+;fac*=k; while(k=5);D.int fac=1,k=0;dofac*=k;k+; while(k5);20.有以下程序: #include stdio.h main() int x=0,y=6; do while(-y)x+; while(y-); printf(“%d,%din“,x,y); 程序的运行结果是_。(分数:1.00)A.5,0B.6,0C.5,-1D.6,-121.有以下程序: #include stdio.h main() char*s=“120119110“; int n0,n1,n2,nn,i; n0=n1
8、=n2=nn=i=0; do switch(si+) default: nn+; case“0“: n0+; case“1“: n1+; case“2“: n2+; while(si); printf(“n0=%d,n1=%d,n2=%d,nn=%d/n“,n0,n1,n2,nn); 程序的运行结果是_。(分数:1.00)A.n0=3,n1=8,n2=9,nn=1B.n0=2,n1=5,n2=1,nn=1C.n0=2,n1=7,n2=10,nn=1D.n0=4,n1=8,n2=9,nn=122.有以下程序: #include stdio.h int m1(int x, int y) retur
9、n x=y?x:y; int m2(int x,int y) return x=y?y:x; int fun(int a,int b) return a+b; main() int x=2,y=3,z=1; printf(“%d/n“,fun(m1(x,y),m2(y,z); 程序的运行结果是_。(分数:1.00)A.6B.5C.4D.323.有如下程序: #include stdio.h int sub(double a,double b) return(int)(a-b); main() printf(“%d/n“,sub(3.8,2.1); 程序运行后的输出结果是_。(分数:1.00)A
10、.2.0B.1.7C.2D.124.有如下程序: #include stdio.h main() char*p1=0; int*p2=0; double*p3=0; printf(“%d,%d,%d/n“,sizeof(p1),sizeof(p2),sizeof(p3); 程序运行后的输出结果是_。(分数:1.00)A.4,4,4B.1,4,8C.0,0,0D.1,2,425.有如下程序: #include stdio.h main() int a = 0,*ptr; ptr = *ptr = 3; a = (*ptr)+; printf(“%d,%d/n“,a,*ptr); 程序运行后的输出
11、结果是_。(分数:1.00)A.4,4B.0,1C.1,4D.0,426.有如下程序: #include stdio.h main() int i,k; int array42 = 1,2,4,9,6; for(i=0;i2;i+) for(k=0;k4;k+) printf(“%d,“,arrayki); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1,2,4,9,6,B.1,4,6,0,2,9,0,0,C.2,9,0,0,1,4,6,0,D.2,9,6,1,4,27.有如下程序: #include stdio.h main() int i,*ptr; int
12、 array3 = 8,2,4; for(ptr=array,i=0; i2; i+) printf(“%d,“,*ptr+); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.8,2,B.8,8,C.2,4,D.4,8,28.有如下程序: #include stdio.h main() int i,*ptr; int array5 = 5,3,1; for(ptr=array, i=0; i5; i+, ptr+) if (*ptr = 0) putchar(“X“); else putchar(“A“+*ptr); printf(“/n“); 程序运行后的输出结
13、果是_。(分数:1.00)A.FDBXXB.FFFXXC.FDBBBD.ABCDE29.有如下程序: #include stdio.h #include string.h main() char name10= “c-book“; char*str = name; printf(“%d,%d,%d,%d/n“, sizeof(name), strlen(name), sized(str), strlen(str); 程序运行后的输出结果是_。(分数:1.00)A.10,6,4,6B.11,6,11,6C.11,6,1,6D.10,7,1,730.有如下程序: #include stdio.h
14、main() char name10=“S“,“T“,“R“,“I“,“N“,“G,; name3=“E“;name5 = 0; printf(“%s/n“,name); 程序运行后的输出结果是_。(分数:1.00)A.STRENGB.STRIEGC.STREND.STRENO31.有如下程序: #include stdio.h int disp(char*str) while(*str)putchar(*str+); return*str; main() printf(“%d/n“, disp(“NAME“); 程序运行后的输出结果是_。(分数:1.00)A.NAME0B.NAMEEC.NA
15、MED.NAME/032.有如下程序: #include stdio.h main() char*p,old_str10=“wind“; int password; scanf(“%d“, p = old_str; while(*p) printf(“%c“,*p + password); p+; printf(“/n“); 程序运行时,从键盘输入 2回车,输出结果是_。(分数:1.00)A.ykpfB.windC.xjoeD.222233.有如下程序: #include stdio.h int sum(int*array,int len) if(len = 0) return array0;
16、 else return array0+sum(array+1, len-1); main() int array5 = 1,2,3,4,5; int res = sum(array,4); printf(“%d/n“,res); 程序运行后的输出结果是_。(分数:1.00)A.15B.10C.8D.134.有如下程序: #include stdio.h int*sum(int data) static int init = 0; init += data; return main() int i,*p; for(i=1; i=4; i+) sum(i); p = sum(0); printf
17、(“%d/n“,*p); 程序运行后的输出结果是_。(分数:1.00)A.15B.0C.1D.1035.有如下程序: #include stdio.h #define D(x)4*x+1 main() int i = 2,j = 4; printf(“%d/n“, D(i+j); 程序运行后的输出结果是_。(分数:1.00)A.25B.13C.9D.1236.有如下程序: #include stdio.h struct S int x,y; ; main() struct S data2 = 4,3,1,9; int i; for(i=0; i2; i+) printf(“%d,%d;“,da
18、tai.x,datai.y1); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.4,1;1,4;B.4,1;2,4;C.4,3;1,9;D.4,3;2,3;37.有如下程序: #include stdio.h #include string.h struct S char name10; ; void change(struct S *data, int value) strcpy(data-name,“*“); value = 13; main() struct S input; int num = 4; strcpy(input.name,“THIS“); c
19、hange( printf(“%s,%d/n“,input.name,num); 程序运行后的输出结果是_。(分数:1.00)A.*,4B.*,13C.THIS,4D.THIS,1338.有如下程序: #include stdio.h #include string.h struct S char name10; ; main() struct S s1,s2; strcpy(s1.name,“12345“); strcpy(s2.name,“ABC“); s1 = s2; printf(“%s/n“,s1.name); 程序运行后的输出结果是_。(分数:1.00)A.ABC12B.ABC45
20、C.12345D.ABC39.有如下程序: #include stdio.h main() int i, array5 = 3,5,10,4; fbr(i=0; i5; i+) printf(“%d,“,arrayi printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.3,1,2,0,0,B.3,5,10,4,0,C.3,3,3,3,0,D.3,2,2,2,0,40.有如下程序: #include stdio.h main() int i; FILE* fp; for(i=0; i5; i+) fp = fopen(“output.txt“,“w“); fputc(“A
21、“+i,fp); fclose(fp); 程序运行后,在当前目录下会生成一个 output.txt 文件,其内容是_。(分数:1.00)A.EB.EOFC.ABCDED.A二、程序填空题(总题数:1,分数:20.00)41.程序通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数 fun 的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。 请在程序的下画线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include string.h struct
22、 student long sno; char name10; float score3; ; void fun(struct student a, int n) /*found*/ 1t; int i, j; /*found*/ for(i=0; i 2; i+) for(j=i+1; jn; j+) /*found*/ if(strcmp( 3)0) t = ai; ai = aj; aj = t; main() struct student s4=10001,“ZhangSan“,95,80,88,10002,“LiSi“,85,70,78,10003,“CaoKai“,75,60,88
23、,10004,“FangFang“,90,82,87; int i,j; printf(“/n/nThe original data:/n/n“); for(j=0; j4; j+) printf(“/nNo:%ld Name:%-8s Scores: “,sj.sno,sj.name); for(i=0; i3; i+) printf(“%6.2f“,sj.scorei); printf(“/n“); fun(s,4); printf(“/n/nThe data after soring:/n/n“); for(j=0; j4; j+) printf(“/nNo:%td Name:%-8s
24、Scores:“,sj.sno,sj.name); for(i=0; i3; i+) printf(“%6.2f“,sj.scorei); printf(“/n“); (分数:20.00)三、程序修改题(总题数:1,分数:20.00)42.下列给定程序中,函数 fun 的功能是:从 p 所指字符串中找出 ASCII 码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。 例如,调用 fun 函数之前给字符串输入“ABCDeFGH”,调用后字符串中的内容应为“eABCDFGH”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得
25、更改程序的结构! 试题程序: #include stdio.h void fun(char*p) char max,*q;int i=0; max=pi; while(pi!=0) if(maxpi) max=pi; /*found*/ q=p+i i+; /*found*/ while(qp) *q=*(q-1);q-; p0=max; void main() char str80; printf(“Enter a string:“);gets(str); printf(“/nThe original string:“); puts(str); fun(str); printf(“/nThe
26、 string after moving:“); puts(str);printf(“/n/n“); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.学生的记录由学号和成绩组成,N 名学生的数据已放入主函数中的结构体数组 s 中。请编写函数 fun,其功能是:把指定分数范围内的学生数据放在 b 所指的数组中,分数范围内的学生人数由函数值返回。 例如,输入的分数是 60、69,则应当把分数在 6069 的学生数据输出,包含 60 分和 69 分的学生数据。主函数中把 60 放在 low 中,把 69 放在 heigh 中。 注意:部分源程序给出如下。 请勿改动主函数 m
27、ain 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #include stdio.h #define N 16 typedef struct char num10; int s; STREC; int fun(STREC*a,STREC*b, int 1, int h) void main() STREC sN=“GA005“,85,“GA003“,76,“GA002“,69,“GA004“,85,“GA001“,96,“GA007“,72,“GA008“,64,“GA006“,87,“GA015“,85,“GA013“,94,“GA012“,64,
28、“GA014“,91,“GA011“,90,“GA017“,64,“GA018“,64,“GA016“,72; STREC hN; int i,n,low,heigh,t; printf(“Enter 2 integer number low scanf(“%d%d“, if(heighlow) t=heigh;heigh=low;low=t; n=fun(s,h,low,heigh); printf(“The student“s data between%d-%d:/n“,low,heigh); for(i=0;in;i+) printf(“%s%4d/n“,hi.num,hi.s); pr
29、intf(“/n“); (分数:20.00)_二级 C 语言真题 2013 年 09 月-(3)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.设栈的顺序存储空间为 S(0:49),栈底指针 bottom=49,栈顶指针 top=30(指向栈顶元素)。则栈中的元素个数为_。(分数:1.00)A.30B.29C.20 D.19解析:解析 栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。在内存中,栈的增大方向是递减,元素依次存储在单元 30:49 中,个数为
30、:49-30+1=20 个。 2.某二叉树的前序序列为 ABCDEFG,中序序列为 DCBAEFG,则该二叉树的深度(根节点在第 1 层)为_。(分数:1.00)A.2B.3C.4 D.5解析:解析 深度,定义一棵树的根节点所在的层次为 1,其他节点所在的层次等于它的父节点所在的层次加 1,树的最大层次称为树的深度。二叉树遍历可以分为 3 种:前序遍历(访问根节点再访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。二叉树的前序序列为 ABCDEFG,A 为根节点。中序序列为 DCBAEFG,可知 DCB 为
31、左子树节点,EFG 为右子树节点。同理 B 为 C 父节点,C 为 D 父节点。同理 E 为 F 根节点,F 为G 根节点。故二叉树深度为 4 层。故 C 选项正确。3.下列叙述中正确的是_。(分数:1.00)A.存储空间连续的数据结构一定是线性结构B.存储空间不连续的数据结构一定是非线性结构C.没有根节点的非空数据结构一定是线性结构D.具有两个根节点的数据结构一定是非线性结构 解析:解析 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,称为线性结构,也称为线性表,可以采用顺序存储和链式存储,其中顺序存储的空间连续而链式存储空间不连续。非
32、线性结构是指不满足以上两个条件的数据结构,非线性结构主要是指树形结构和网状结构。数据结构线性与否与存储空间是否连续没有直接关系,如二叉树可以用一片连续的空间来存储,但其为非线性结构,A 选项错误。线性表的链式存储结构可以用不连续的空间来存储,但其为线性结构,B 选项错误。没有根节点的非空数据结构一定不是线性结构,C 选项错误。具有两个根节点的结构一定是非线性结构,故 D 选项正确。4.下列叙述中正确的是_。(分数:1.00)A.带链队列的存储空间可以不连续,但队头指针必须大于队尾指针B.带链队列的存储空间可以不连续,但队头指针必须小于队尾指针C.带链队列的存储空间可以不连续,且队头指针可以大于
33、也可以小于队尾指针 D.带链队列的存储空间一定是不连续的解析:解析 带链的队列就是用一个单链表来表示队列,队列中的每一个元素对应链表中的一个节点,其存储结构既可以采用顺序存储也可以是链式存储,其中顺序存储的空间连续而链式存储空间不连续,故D 选项错误。循环队列中,由于指针超过队列地址最大值时会移动到队列最小地址处,所以队头指针可以大于也可以小于队尾指针,A、B 选项错误,故 C 选项正确。5.某系统结构图如下图所示: (分数:1.00)A.2B.3C.4D.n 解析:解析 宽度又称扇入是指最大模块数的层的控制跨度。题目中系统第一层只有 1 个模块,第二层有 n(n3)个模块,第三层有 4 个模
34、块,控制跨度为 n,故 D 选项正确。6.下面不能作为软件需求分析工具的是_。(分数:1.00)A.PAD 图 B.数据字典(DD)C.数据流程图(DFD 图)D.判定树解析:解析 需求分析方法可以分为结构化分析方法和面向对象的分析方法,结构化分析工具包括:数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等。PAD 图是过程设计工具,所以 A 选项正确。7.下面不属于对象基本特点的是_。(分数:1.00)A.标识唯一性B.可复用性 C.多态性D.封装性解析:解析 对象的基本特点如下: 特点 描述 标识唯一性 一个对象通常可由对象名、属性和操作三部分组成 分类性 指可以将具有相同
35、属性和操作的对象抽象成类 多态性 指同一个操作可以是不同对象的行为,不同对象执行同一操作产生不同的结果 封装性 从外面看只能看到对象的外部特性,对象的内部对外是不可见的 模块独立性好 由于完成对象功能所需的元素都被封装在对象内部,所以模块独立性好 可知 B 选项正确。8.据库设计中,描述数据间内在语义联系得到 E-R 图的过程属于_。(分数:1.00)A.逻辑设计阶段B.需求分析阶段C.概念设计阶段 D.物理设计阶段解析:解析 数据库设计的 4 个阶段为:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。概念设计最常用的方法是 E-R 方法,它采用 E-R 模型,将现实世界的信息结构统一
36、由实体、属性以及实体之间的联系来描述,故 C 选项正确。9.两个关系 R,S 如下,由关系 R 和 S 得到关系 T,则所使用的操作为_。 R B C D a 0 k1 S B C D f 3 k2 n 2 x1 T B C D a 0 k1 f 3 k2 n 2 x1 (分数:1.00)A.并 B.自然连接C.差D.交解析:解析 常用的扩充运算有交、除、连接及自然连接等。并:RS 是将 S 中的记录追加到 R 后面。自然连接:去掉重复属性的等值连接。差:R-S 结果是属于 R 但不属于 S 的记录组成的集合。交:RS 结果是既属于 R 又属于 S 的记录组成的集合。并:RS 的结果集为 T,
37、所以 A 选项正确。10.关系数据模型_。(分数:1.00)A.只能表示实体间 1:1 联系B.只能表示实体间 1:m 联系C.可以表示实体间 m:n 联系 D.能表示实体间 1:n 联系而不能表示实体间 n:1 联系解析:解析 关系模型是目前最常用的数据模型之一,现实世界的实体以及实体间的各种联系均用关系来表示。实体集之间通过联系来建立连接关系分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。故 C 选项正确。11.以下选项中叙述正确的是_。(分数:1.00)A.C 程序中的语句要经过编译才能转换成二进制机器指令 B.算法需要包含所有三种基本结构C.有些算法不能用三
38、种基本结构来表达D.简单算法的操作步骤不能超过 20 步解析:解析 编译就是把高级语言变成计算机可以识别的二进制语言,不经过编译的源程序是不能运行的,A 选项正确。算法不一定要包含所有三种基本结构,也可以只包含一种或两种,B 选项错误。结构化程序主要由 3 种基本控制结构组成,循环结构、选择结构、顺序结构,它们组成的算法结构可以解决任何复杂的问题,C 选项错误。算法的复杂程序不是由操作步骤多少决定的,而是按时间复杂度与空间复杂度来衡量,D 选项错误。12.以下选项中叙述正确的是_。(分数:1.00)A.复杂任务可以分解成简单子任务 B.C 语言程序中的所有函数必须保存在同一个源文件中C.全部三
39、种基本结构都包含的才是结构化程序D.C 语言程序可以定义多个不同内容的 main 函数解析:解析 结构化程序设计把一个复杂的问题的求解过程分成阶段进行,即复杂任务可以分解成简单子任务,A 选项正确。C 语言程序中的函数不一定要保存在同一个源文件中,外部函数可以被同程序中其他源文件中调用,B 选项错误。结构化程序主要由 3 种基本控制结构组成,循环结构、选择结构、顺序结构,它们组成的算法结构可以解决任何复杂的问题。算法不一定要包含所有三种基本结构,也可以只包含一种或两种,C 选项错误。C 程序由一个或若干个函数构成,程序中有且只能有一个主函数,即 main 函数,D 选项错误。13.以下选项中,
40、合法的数值型常量是_。(分数:1.00)A.3.1415 B.“A“C.092D.0xDH解析:解析 数值型常量包括整型常量和实型常量。整型常量有三种:十进制常量,用 09 表示,不能以 0 开头;八进制常量,用 07 表示,必须用 0 开头;十六进制常量,用 09 和 AF(af)表示,必须以 0x 或 0X 开头。实型常量:用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。3.1415 为实型常量,A 选项正确。“A”为长度为 1 的字符串常量,B 选项错误。092 按照格式来说是八进制整型常量,但是八进制不会出现 9,故 C 选项错误。0xDH 按照格式说是十六进
41、制整型常量,但是不应该出现 H,D 选项错误。14.以下选项中,合法的实数是_。(分数:1.00)A.4.5E2 B.E1.3C.7.11ED.1.2E1.2解析:解析 实型常量用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。十进制小数形式由数字和小数组成,必须有小数点,且小数点的位置不受限制。指数形式由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。4.5E2 为指数形式实数,A 选项正确。E1.3 阶码标志前缺少十进制数,并且阶数不是整数,B 选项错误。7.11E 缺少阶数,C 选项错误。1.2E1.2阶数不是整数,D 选项错误。15.若有
42、定义 int a,b,c;以下选项中的赋值语句正确的是_。(分数:1.00)A.a=(b=c)+1; B.(a=b)=c=1;C.a=(b=c)=1;D.a+b=c;解析:解析 赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。A 选项中,将 c 赋值给 b,然后将 b 加 1 赋值给 a,是正确的赋值语句,A选项正确。B 选项中,将 1 赋值给 c,赋值运算(a=b)=c 中左值为表达式,不是变量不能被赋值,B 选项错误。C 选项中赋值运算(b=c)=1 左值为逻辑表达式,不是变量不能被赋值,C 选项错误。D 选项左值(a+b)为表达式
43、,不是变量不能被赋值,D 选项错误。16.有如下程序: #include stdio.h main() int x=0x13; printf(“%d/n“,x+1); 程序运行后的输出结果是_。(分数:1.00)A.12B.14C.20 D.13解析:解析 整型常量有 3 种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。十进制整常量没有前缀,输出格式控制符为%d;八进制整常量以 0 作为前缀,输出格式控制符为%o;十六进制整常量以 0X 或 0x 作为前缀,输出格式控制符为%x。十六进制数 0x13 表示成十进制数为 19,以十进制格式输出 x+1=19+1=20,故 C
44、选项正确。17.对于 if(表达式)语句,以下叙述正确的是_。(分数:1.00)A.“表达式”的值可以是任意合法的数值 B.在“表达式”中不能出现变量C.在“表达式”中不能出现常量D.“表达式”的值必须是逻辑值解析:解析 单分支选择语句 if 语句格式如下:if(表达式)语句体。“表达式”可以是任意合法的 C 语言表达式,包括关系表达式和逻辑表达式等,也可以是任意的数值类型(包括整型、实型、字符型等),A选项正确。“表达式”中可以出现变量或者常量,也不一定必须是逻辑值,B、C、D 选项错误。18.以下程序段中,不能实现条件“如果 ab 则 x=10,否则 x=-10”的是_。(分数:1.00)
45、A.x=(a=b)?-10:10;B.if(ab)x=10;else x=-10;C.x=-10;if(ab)x=10;D.if(ab)x=10;if(ba)x=-10; 解析:解析 D 选项:如果 ab,则 x=10,如果 ba,则 x=-10,其中没有对 a=b 进行判断,A 选项不能实现题目中功能,选择 D 选项。B 选项:如果 ab,则 x=10,否则 x=-10,能实现题目中功能。C 选项:首先赋值 x=-10,如果 ab,则 x=10,即在 a=b 情况下有 x=-10,能实现题目中功能。A 选项:条件运算符?运算过程为:如果 a=b,x=-10,否则 x=10,能实现题目中功能。
46、故选择 D 选项。19.以下能够实现计算 5!的程序段是_。(分数:1.00)A.int fac=1,k=0;dok+;fac*=k; while(k5); B.int fac=0,k=1;dofac*=k;k+; while(k5);C.int fac=1,k=1;dok+;fac*=k; while(k=5);D.int fac=1,k=0;dofac*=k;k+; while(k5);解析:解析 dowhile 循环语句一般形式为:do循环体while(表达式),执行过程为:首先执行循环体,之后判断表达式,成立(非 0)则再一次执行循环体,不成立(0)则退出循环。A 选项:k=1,fac=1 * 1,判断 k5,条件