1、二级 C语言真题 2013年 03月-(3)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.设数据元素的集合 D=1,2,3,4,5,则满足下列关系 R的数据结构中为线性结构的是_。(分数:1.00)A.R=(1,2),(3,4),(5,1)B.R=(1,3),(4,1),(3,2),(5,4)C.R=(1,2),(2,3),(4,5)D.R=(1,3),(2,4),(3,5)2.下列叙述中正确的是_。(分数:1.00)A.链表节点中具有两个指针域的数据结构可以是线性结构,也可以是非线性结构B.线性表的链式存储结构中,每个节点必须有指向前件
2、和指向后件的两个指针C.线性表的链式存储结构中,每个节点只能有一个指向后件的指针D.线性表的链式存储结构中,叶子节点的指针只能是空3.一个栈的初始状态为空。现将元素 A,B,C,D,E 依次入栈,然后依次退栈三次,并将退栈的三个元素依次入队(原队列为空),最后将队列中的元素全部退出。则元素退队的顺序为_。(分数:1.00)A.ABCB.CBAC.EDCD.CDE4.某二叉树的中序序列为 DCBAEFG,后序序列为 DCBGFEA,则该二叉树的深度(根节点在第 1层)为_。(分数:1.00)A.5B.4C.3D.25.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用、维护到停
3、止使用、退役的过程B.软件的需求分析、设计与实现C.软件的开发与管理D.软件的实现和维护6.某系统结构图如下图所示 (分数:1.00)A.1B.2C.3D.47.下面属于应用软件的是_。(分数:1.00)A.学生成绩管理系统B.UNIX操作系统C.汇编程序D.编译程序8.将 E-R图转换为关系模式时,E-R 图中的属性可以表示为_。(分数:1.00)A.属性B键C.关系D域9.有两个关系 R与 S如下,由关系 R和 S得到关系 T,则所使用的操作为_。 R A A1 B B1 a 0 f 3 a 0 n 2 b 1 f 3 b 1 n 2 a 1 f 4 S A A1 a 0 b 1 T B
4、B1 f 3 n 2 (分数:1.00)A并B.自然连接C除D交10.优化数据库系统查询性能的索引设计属于数据库设计的_。(分数:1.00)A.需求分析B.概念设计C.逻辑设计D.物理设计11.结构化程序由顺序、选择、循环三种基本结构组成,以下相关叙述错误的是_。(分数:1.00)A.三种基本结构不可以嵌套使用B.顺序结构是按语句在程序中的先后顺序逐条执行,没有分支,没有转移C.选择结构是根据不同的条件执行不同分支中的语句D.循环结构是根据条件决定是否重复、重复执行多少次循环体语句12.以下能正确表述算式 sin(2r+30)的 C语言表达式是_。(分数:1.00)A.sin(2*3.14*r
5、+3.14*30/180.0)B.sin(2*r+30)C.sin(2*3.14*r+30)D.sin(2*3.14*r+30*3.14/360.0)13.设有定义:int x=11,y=12,z=0;,以下表达式值不等于 12的是_。(分数:1.00)A.(z,x,y)B.(z=x,y)C.z=(x,y)D.z=(x=y)14.以下可以将任意一个两位整数 n的个位数与十位数对换的表达式为_。(分数:1.00)A.(n-n/1010)10+n/10B.n-n/1010+n/10C.n/10+(n-n/10)D.(n-n/10)10+(n/10)15.设有以下程序段: int y; y=rand
6、()%30+1; 则变量 y的取值范围是_。(分数:1.00)A.0y30B.0y30C.1y30D.1y3016.以下程序段中,循环次数不超过 10的是_。(分数:1.00)A.int i=10;doi=i+1;while(i0);B.int i=5;doi+=1;while(i0);C.int i=1;doi+=2;while(i!=10);D.int i=6;doi-=2;while(i!=1);17.有以下程序: #include stdio.h main() int x; scanf(“%d“, if(x10) printf(“1“); else if(x20) printf(“2“
7、); else if(x30) printf(“3“); 若运行时输入:35回车,则输出结果是_。(分数:1.00)A.123B.2C.3D.118.若要实现 total=1+2+3+4+5求和,以下程序段错误的是_。(分数:1.00)A.int i=1,total=1;while(i5) total+=i;i+=1;B.int i=1,total=0;while(i=5) total+=i;i+=1;C.int i=0,total=0;while(i5) i+=1;total+=i;D.int i=0,total=0;while(i=5) total+=i;i+=1;19.有以下程序: #i
8、nclude stdio.h main() int i=1,k=0; for( ; i6; ) switch(i%3) case 0: k+; case 1: k+; break; case 2: k+; continue; i+=1; printf(“%d/n“,k); 程序的运行情况是_。(分数:1.00)A.形成无限循环B.输出 6C.输出 5D.输出 420.以下不能输出小写字母 a的选项是_。(分数:1.00)A.printf(“%c/n“,“a“);B.printf(“%c/n“,“A“+32);C.putchar(97);D.putchar(“a“);21.有以下程序段: cha
9、r c1,c2,c3; scanf(“%c%c%c“, 若要给 c1、c2、c3 分别输入字母 A、B、C,则以下对输入形式的描述正确的是_。(分数:1.00)A.字母 A、B、C 之间可以用空格分隔B.字母 A、B、C 之间不能有分隔符C.字母 A、B、C 之间可以用回车符分隔D.字母 A、B、C 之间可以用 Tab键分隔22.有以下程序段: scanf(“%d%d%d“, if(ab)a=b; if(ac)a=c; printf(“%d/n“,a); 该程序段的功能是_。(分数:1.00)A.输出 a、b、c 中值相等的数值B.输出 a、b、c 中的最大值C.输出 a、b、c 中的最小值D
10、.输出 a的原始值23.以下程序的功能是:通过调用 calc函数,把所求得的两数之和值放入变量 add中,并在主函数中输出。#include stdio.h void calc(float x,float y,float *sum) _ = x+y; main() float x,y,add; scanf(“%f%f“, calc(x,y, printf(“x+y=%f/n“,add); calc函数中下划线处应填入的是_。(分数:1.00)A.*sumB.sumC. int i,j; for(i=0;i4; i+) ai0=ai3=“#“; for(j=1; j3; j+) a0j=a 3j
11、=“#“; if(i!=0) for(i=1;i3;i+) for(j=0; j4;j+) printf(“%2c“ ,aij); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.#o o#o o#B.# # # # o o #C.# o o # # # #D.# # # # # # #25.设有函数定义:void sub(int k,char ch) 则以下对函数 sub的调用语句中,正确的是_。(分数:1.00)A.sub(1,97);B.sub(2,“97“);C.n=sub(3,“a“);D.sub(4,“a“);26.有以下程序: #include stdio.
12、h void fun(int *x,int s,int n) int i; for(i=s; i=n; i-) *(x+i+3) = * (x+i); main() int m = 0,1,2,3,4,5,6,7,8,9,k; fun(m,10-4,3); for(k=0; k10;k+) printf(“%d“,mk); 程序的运行结果是_。(分数:1.00)A.0123456345B.0123453456C.0123456666D.012345456927.若有定义语句:int m3=1,2,3,4,5,6,7;,则与该语句等价的是_。(分数:1.00)A.int m3=1,2,3,4,5
13、,6,7;B.int m3=1,2,3,4,5,6,7;C.int m3=1,2,3,4,5,6,7;D.int m3=1,2,3,4,5,6,7;28.设有以下说明和语句:int x34,(*p)4;p=a;,则与表达式*(* p+2)等价的选项是_。(分数:1.00)A.a02B.*(a+2)0C.(*a+2)0D.a2029.以下不能将键盘输入的字符串:This is a string回车读入到 str中的程序段是_。(分数:1.00)A.char str80;scanf(“%s“,str);B.char str80;int i=0;while(stri+=getchar()!=“/n“
14、);stri=0;C.char str80;gets(str);D.char str80,*ps=str;doscanf(“%c“,ps);while(*ps+ !=“/n“);*(ps)=0;30.有以下程序: #include stdio.h main() char s10=“verygood“, *ps=s; ps+=4; ps=“nice“; puts(s); 程序的运行结果是_。(分数:1.00)A.niceB.veryniceC.nicegoodD.verygood31.有以下程序: #include stdio.h int fun(char *s) char *p=s; whil
15、e(*p !=“/0“)p+; return(p-s); main() char *p=“01234“; printf(“%d/n“,fun(p); 程序的运行结果是_。(分数:1.00)A.3B.6C.4D.532.有以下程序: #include stdio.h main() int findmax(int,int,int),m; m=findmax(a,b,e); int findmax(int x,int y,int z) 则以下叙述正确的是_。(分数:1.00)A.在 main函数中声明了 findmax函数B.在 main函数中定义了 findmax函数C.在 main函数中两次调用
16、了 findmax函数D.在 main函数内、外重复定义了 findmax函数33.有以下程序: #include stdio.h void fun(int n) int i; if(i=n/10)!=0) fun(i); putchar(n%10+“0“); main() fun(256); 程序运行后的输出结果是_。(分数:1.00)A.256B.652C.2560D.5234.有以下程序: #include stdio.h #include stdlib.h void fun(int*p1, int *s) int *t; t=(int *)malloc(2 * sizeof(int);
17、 *t=*p1 + *p1 +; *(t+1)=*p1+ *p1; s=t; main() int a2=1,2,b2=0; fun(a,b); printf(“%d,%d/n“,b0,b1); 程序运行后的输出结果是_。(分数:1.00)A.2,6B.0,0C.2,4D.1,235.有以下程序: #include stdio.h #define FNA(x) x*x #define FNB(x) x+z main() int a=2,b=4; printf(“%d,%d/n“,FNA(FNB(a),FNB(FNA(b); 程序运行后的输出结果是_。(分数:1.00)A.8,16B.16,32
18、C.8,32D.16,1636.设有如下语句: typedef struct Date int year; int month; int day; DATE; 则以下叙述中错误的是_。(分数:1.00)A.DATE是用户定义的结构体变量B.struct Date是用户定义的结构体类型C.DATE是用户说明的新结构体类型名D.struct是结构体类型的关键字37.设有如下定义: struct int n; char c; a2,*p=a; 则以下错误引用结构体成员 n的是_。(分数:1.00)A.(* a)-nB.a0.nC.p-nD.(* p).n38.有以下程序: #include stdi
19、o.h #include string.h typedef struct char name10; char sex; int age; STU; void fun(STU t) strcpy(t.name,“Tong“); t.age+; main() STU s2=t“Hua“,“m“,18,“Qin“,“f“,19; fun(s1); printf(“%s,%d,%s,%d/n“,s0.name,s0.age,s1.name,s1.age); 程序运行后的输出结果是_。(分数:1.00)A.Hua,19,Tong,19B.Hua,18,Tong,20C.Tong,19,Qin,19D.H
20、ua,18,Qin,1939.设有定义:int a=64,b=8;,则表达式(a if(fp=fopen(“test.txt“,“w“)= NULL) printf(“不能打开文件!“); exit(0); else printf(“成功打开文件!“); 若文件 test.txt已存在,则以下叙述正确的是_。(分数:1.00)A.程序运行后,文件 test.txt中的原有内容将全部消失B.程序运行时,会因文件存在而出错C.对文件 test.txt进行写操作后,可以随机进行读取D.对文件 test.txt写入的内容总是被添加到文件尾部二、程序填空题(总题数:1,分数:20.00)41.下列给定程
21、序中,函数 fun的功能是:统计带头节点的单向链表中节点的个数,并存放在形参 n所指的存储单元中。 请在程序的下画线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include stdlib.h #define N 8 typedef struct list int data; struct list * next; SLIST; SLIST * creatlist(int *a); void outlist(SLIST*); vom fun(SLIST * h, int * n)
22、SLIST *p; /*found*/ 1 =0; p=h-next; while(p) (* n)+; /*found*/ p=p- 2 ; main() SLIST * head; int aN=12,87,45,32,91,16,20,48, num; head=creatlist(a); outlist(head); /*found*/ fun( 3, printf(“/nnumber=%d/n“,num); SLIST * creatlist(int a) SLIST *h,*p,*q; int i; h=p=(SLIST*)malloc(sizeof(SLIST); for(i=0
23、;iN;i+) q=(SLIST*)malloc(sizeof(SLIST); q-data=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST*h) SLIST * p; p=h-next; if(p=NULL) printf(“The list is NULL!/n“); else printf(“/nHead“); do printf(“-%d“,p-data); p=p-next; while(p! = NULL); printf(“-End/n“); (分数:20.00)三、程序修改题(总题数:1,分数:20.00)42
24、.下列给定程序中,函数 fun的功能是:求出 S所指字符串中最后一次出现的 t所指字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为 NULL。 例如,当字符串中的内容为“abcdabfabcdx”,t 中内容为“ab”时,输出结果应是“abcdx”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include stdlib.h #include stdio.h #include conio.h #include string.h char * fun(char*s,cha
25、r * t) char * p, *r, *a; /*found*/ a=Null; while(*s) p=s;r=t; while(*r) /*found*/ if(r=p) r+;p+; else break; if(*r=“/0“)a=s; s+; return a; void main() char s100,t100,*p; system(“CLS“); printf(“/nPlease enter string S:“); scanf(“%s“,s); printf(“/nPlease enter substring t:“); scanf(“%s“,t); p=fun(s,t)
26、; if(p) printf(“/nThe result is:%s/n“,p); else printf(“/nNot found!/n“); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.编写函数 fun,其功能是:将两个两位数的正整数 a、b 合并成一个整数放在 c中。合并的方式是:将a数的十位和个位数依次放在 c数的十位和千位上,b 数的十位和个位数依次放在 c数的百位和个位上。 例如,当 a=45,b=12 时,调用该函数后,c=5142。 注意:部分源程序给出如下。数据文件 IN.DAT中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,
27、仅在函数 fun的花括号中填入编写的若干语句。 试题程序: #include stdlib.h #include stdio.h #include conic.h void fun(int a,int b,long*c) void main() int a,b; long c; system(“CLS“); printf(“Input a,b;“); scanf(“%d%d“, fun(a,b, printf(“The result is:%ld/n“,c); (分数:20.00)_二级 C语言真题 2013年 03月-(3)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题
28、数:40,分数:40.00)1.设数据元素的集合 D=1,2,3,4,5,则满足下列关系 R的数据结构中为线性结构的是_。(分数:1.00)A.R=(1,2),(3,4),(5,1)B.R=(1,3),(4,1),(3,2),(5,4) C.R=(1,2),(2,3),(4,5)D.R=(1,3),(2,4),(3,5)解析:解析 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,称为线性结构。不同时满足以上两个条件的数据结构就称为非线性结构。A选项中有两个根节点 3和 5故错误。B 选项根节点为 5,排列顺序为 54132,B 选项正确。
29、C 选项有两个根节点 1和 4,故错误。D 选项有两个根节点 1和 2,故错误。2.下列叙述中正确的是_。(分数:1.00)A.链表节点中具有两个指针域的数据结构可以是线性结构,也可以是非线性结构 B.线性表的链式存储结构中,每个节点必须有指向前件和指向后件的两个指针C.线性表的链式存储结构中,每个节点只能有一个指向后件的指针D.线性表的链式存储结构中,叶子节点的指针只能是空解析:解析 双向链表与树形结构的节点均可以包含两个指针域,但前者为线性结构,后者为非线性结构,故 A选项正确。双向链表含有指向前件和指向后件的两个指针,故 C选项错误。线性链表就是指线性表的链式存储结构。由于这种链表中,每
30、个节点只有一个指针域,故又称为单链表,故 B选项错误。二叉树为非线结构,叶子节点没有后件,但是可以有指向前件的指针,故 D选项错误。3.一个栈的初始状态为空。现将元素 A,B,C,D,E 依次入栈,然后依次退栈三次,并将退栈的三个元素依次入队(原队列为空),最后将队列中的元素全部退出。则元素退队的顺序为_。(分数:1.00)A.ABCB.CBAC.EDC D.CDE解析:解析 栈所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。队列指允许在一端进行插入,而在另一端进行删除的线性表。习惯上称往队列的队尾插入一个元素为入队运算,称从队
31、列的队头删除一个元素为退队运算。元素入栈后为 ABCDE,退栈并入队后,队中元素为 EDC。退队时从队头开始,顺序为 EDC,故 C选项正确。4.某二叉树的中序序列为 DCBAEFG,后序序列为 DCBGFEA,则该二叉树的深度(根节点在第 1层)为_。(分数:1.00)A.5B.4 C.3D.2解析:解析 深度,定义一棵树的根节点所在的层次为 1,其他节点所在的层次等于它的父节点所在的层次加 1,树的最大层次称为树的深度。二叉树遍历可以分为 3种:前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问
32、右子树之后)。二叉树的后序序列为 DCBGFEA,A 为根节点。中序序列为 DCBAEFC,可知 DCB为左子树节点,EFG 为右子树节点。同理 B为 C父节点,C 为 D父节点。根据分析,可画出左子树,同理 E为 F根节点,F 为 G根节点。根据分析,可画出右子树,观察得,树的深度为 4。故二叉树深度为4层,故 B选项正确。5.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用、维护到停止使用、退役的过程 B.软件的需求分析、设计与实现C.软件的开发与管理D.软件的实现和维护解析:解析 通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期,故 A选项
33、正确。6.某系统结构图如下图所示 (分数:1.00)A.1B.2C.3 D.4解析:解析 深度表示控制的层数。题目中系统共有 3层,故 C选项正确。7.下面属于应用软件的是_。(分数:1.00)A.学生成绩管理系统 B.UNIX操作系统C.汇编程序D.编译程序解析:解析 计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件,如操作系统、数据库管理系统、编译程序、汇编程序和网络软件等,B、C、D 均为系统软件。应用软件为了应用于特定的领域而开发的软件,故 A选项正确。8.将 E-R图转换为关系模式时,E-R 图
34、中的属性可以表示为_。(分数:1.00)A.属性 B键C.关系D域解析:解析 采用 E-R方法得到的全局概念模型是对信息世界的描述,并不适用于计算机处理,为了适合关系数据库系统的处理,必须将 E-R图转换成关系模式。下表为 E-R模型和关系模型的对照表。由表中可知 A选项正确。 E-R模型 关系模型 E-R模型 关系模型 实体 元组 属性 属性 实体集 关系 联系 关系 9.有两个关系 R与 S如下,由关系 R和 S得到关系 T,则所使用的操作为_。 R A A1 B B1 a 0 f 3 a 0 n 2 b 1 f 3 b 1 n 2 a 1 f 4 S A A1 a 0 b 1 T B B
35、1 f 3 n 2 (分数:1.00)A并B.自然连接C除 D交解析:解析 常用的扩充运算有交、除、连接及自然连接等。并:RS 是将 S中的记录追加到 R后面。交:RS结果是既属于 R又属于 S的记录组成的集合。上述两种操作中,关系 R与 S要求有相同的结构,故A、D 选项错误。自然连接:去掉重复属性的等值连接。自然连接要求两个关系中进行比较的是相同的属性,并且进行等值连接,可知 B选项错误。除运算可以近似地看作笛卡尔积的逆运算。当 ST=R时,则必有 RS=T,T 称为 R除以 S的商。设关系 R有属性 M1,M2,Mn,关系 S有属性 Mn-s+1,Mn-s+2,Mn,此时有:RS=M1,
36、M2,Mn-S(R)-M1,M2,Mn-s(M1,M2,Mn-s(R)S)。由 S中有属性 A和 A1,T 中属性为 B和 B1,在 R元组中找到对应于 s中两个元组的 T中元组为 f3与n2。R 中最后一个元组与 S中无对应关系,所以在 T中也不会出现。故 C选项正确。10.优化数据库系统查询性能的索引设计属于数据库设计的_。(分数:1.00)A.需求分析B.概念设计C.逻辑设计D.物理设计 解析:解析 数据库设计的 4个阶段为:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。为一个给定的逻辑模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。数据库物理设计的主要目标是
37、对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有效利用存储空间。一般 RDBMS中留给用户参与物理设计的内容大致有索引设计、集簇设计和分区设计。故 D选项正确。11.结构化程序由顺序、选择、循环三种基本结构组成,以下相关叙述错误的是_。(分数:1.00)A.三种基本结构不可以嵌套使用 B.顺序结构是按语句在程序中的先后顺序逐条执行,没有分支,没有转移C.选择结构是根据不同的条件执行不同分支中的语句D.循环结构是根据条件决定是否重复、重复执行多少次循环体语句解析:解析 结构化程序主要由 3种基本控制结构组成,顺序结构是最基本的算法结构,当执行由这些语句构成的程序时,将按这些
38、语句在程序中的先后顺序逐条执行,没有分支,没有转移,没有步骤之间的相互约束,没有对某一步骤的多次使用,完全按照步骤的原有次序依次执行,B 选项叙述正确。选择结构根据不同的条件去执行不同分支中的语句,C 选项叙述正确。循环结构就是根据各自的条件,使同一组语句重复执行多次,D 选项叙述正确。三种结构可以嵌套使用,A 选项叙述错误,选择 A选项。12.以下能正确表述算式 sin(2r+30)的 C语言表达式是_。(分数:1.00)A.sin(2*3.14*r+3.14*30/180.0) B.sin(2*r+30)C.sin(2*3.14*r+30)D.sin(2*3.14*r+30*3.14/36
39、0.0)解析:解析 sin 是库函数,在使用时应包含 math.h,其参数应该为被求角度的弧度制表示。C 语言中 不是已定义的常量,需要用户自定义或者直接使用 3.14代替 。B 选项没有替换 也没有将 30度换算成弧度,错误。C 选项没有将 30度换算成弧度,错误。D 选项弧度换算错误, 对应于 180,应该除以 180.0而不是 360.0。A 选项 被正确替换,弧度换算正确,故 A选项正确。13.设有定义:int x=11,y=12,z=0;,以下表达式值不等于 12的是_。(分数:1.00)A.(z,x,y)B.(z=x,y)C.z=(x,y)D.z=(x=y) 解析:解析 逗号表达式
40、的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回 1,不成立返回 0。D 选项逻辑表达式 x=y不成立,则 z=0,表达式值为 0。B 选项逗号表达式 x,y 取 y值为表达式值,然后赋值给 z=12,表达式值为 12。C 选项逗号表达式(x,y)取 y值为表达式值,然后赋值给 z=12,表达式值为 12。A 选项逗号表达式(z,x,y)取 y值为表达式值 12。故选择 D选项。14.以下可以将任意一个
41、两位整数 n的个位数与十位数对换的表达式为_。(分数:1.00)A.(n-n/1010)10+n/10 B.n-n/1010+n/10C.n/10+(n-n/10)D.(n-n/10)10+(n/10)解析:解析 A 选项 n/10得到十位数字,n-n/10 得到个位数字,将个位数乘以 10加上十位数字,(n-n/1010)10+n/10实现将任意一个两位整数个位数与十位数对换,A 选项正确。B 选项 n-n/1010得到个位数字,n/10 为十位数字,n-n/1010+n/10 实现两位整数个位数与十位数之和,B 选项错误。C 选项 n/10+(n-n/10)=n,不能实现题目中要求,C 选
42、项错误。D 选项 n/10是十位数字,n-n/10 为原两位整数减去十位数字,不是个位数字,D 选项错误。15.设有以下程序段: int y; y=rand()%30+1; 则变量 y的取值范围是_。(分数:1.00)A.0y30B.0y30 C.1y30D.1y30解析:解析 本题考点为“%”求余符号。rand()产生随机整数,任何整数对 30求余得到的整数范围为029,则 y的取值范围为 1y30 或者说 0y30,故 B选项正确。16.以下程序段中,循环次数不超过 10的是_。(分数:1.00)A.int i=10;doi=i+1;while(i0); B.int i=5;doi+=1;
43、while(i0);C.int i=1;doi+=2;while(i!=10);D.int i=6;doi-=2;while(i!=1);解析:解析 dowhile 循环语句一般形式为:do循环体while(表达式),执行过程为:首先执行循环体,之后判断表达式,成立(非 0)则再一次执行循环体,不成立(0)则退出循环。A 选项,执行函数体i=11,判断条件 110 不成立,退出循环,循环次数为 1,不超过 10次,A 选项正确。B 选项执行函数体i=6,判断条件为 i0,由于执行函数体时 j在增加,i0 一直成立,程序陷入无限循环,循环次数大于10,B 选项错误。C 选项执行函数体 i=3,判
44、断条件为 i!=10,由于函数体中 i每次增加 2,所以永远小可能等于 10,故程序会陷入无限循环,循环次数大于 10,C 选项错误。D 选项执行函数体 i=4,判断条件为i!=1,由于函数体中 i每次减少 2,所以永远不可能等于 1,故程序会陷入无限循环,循环次数大于10,D 选项错误。17.有以下程序: #include stdio.h main() int x; scanf(“%d“, if(x10) printf(“1“); else if(x20) printf(“2“); else if(x30) printf(“3“); 若运行时输入:35回车,则输出结果是_。(分数:1.00)
45、A.123B.2C.3D.1 解析:解析 程序执行过程为:输入 35回车,scanf 函数从键盘读入 35赋值给 x=35,对 if条件进行判断,3510,条件成立,输出 1,不再执行下面的 else if语句,程序结束,输出结果为 1,故 D选项正确。18.若要实现 total=1+2+3+4+5求和,以下程序段错误的是_。(分数:1.00)A.int i=1,total=1;while(i5) total+=i;i+=1; B.int i=1,total=0;while(i=5) total+=i;i+=1;C.int i=0,total=0;while(i5) i+=1;total+=i;D.int i=0,total=0;while(i=5) total+=i;i+=1;解析:解析 while 循环语句一般形式为:while(表达式)循环体,执行过程为:首先判断表达式,成立(非 0)则执行循环体,不成立(0)则退出循环。A 选项执行过程为:i=1,total=1,判断 while循环条件15 成立,total=1+1,i=2;判断循环条件执行函数体,直到 i=4,total=1+1+2+3+4,i=5;i=5 循环条件不成立,退出循环,A 选项不能实现题目要求,错误,选择 A选项。B 选项执行过程:i=1,total=0,1=5 成立,total=0+1=1,i=2;