1、二级 C 语言真题 7 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.设数据结构 B=(D,R),其中 D=a,b,c,d,e,f R=(f,A),(d,B),(e,D),(c,e),(a,c) 该数据结构为_。(分数:1.00)A.线性结构B.循环队列C.循环链表D.非线性结构2.下列叙述中错误的是_。(分数:1.00)A.循环队列空的条件是队头指针与队尾指针相同B.若二叉树没有叶子结点,则为空二叉树C.带链栈的栈底指针是随栈的操作而动态变化的D.若带链队列中只有一个元素,则队头指针与队尾指针必定相同3.某带链栈的初始状态为 top=b
2、ottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为_。 A1 B0 c)20 D不确定 (分数:1.00)A.B.C.D.4.设一棵度为 3 的树,其中度为 2,1,0 的结点数分别为 3,1,6。该树中度为 3 的结点数为_。(分数:1.00)A.1B.2C.3D.不可能有这样的树5.下面描述错误的是_。(分数:1.00)A.模块的独立性与模块的信息隐蔽和局部化无关B.内聚性和耦合性是模块独立程度的定性度量标准C.一个模块的内聚性越高则该模块的独立性越强D.一个模块的耦合性越高则该模块的独立性越弱6.下面属于黑盒测试方法的是_。(分数:1.
3、00)A.错误推测法B.基本路径测试C.判定覆盖D.条件覆盖7.下面模型中为概念模型的是_。(分数:1.00)A.实体-联系模型B.层次模型C.关系模型D.网状模型8.学生关系模式中有 D(D#,Dn,Dl,DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#,Sn,SG,Date,Maj,D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系,关系 S 的主键(码)是 S#,关系 S 的外键(码)是_。(分数:1.00)AD#B.MajC.DlD.Dn9.关系的实体完整性要求关系中不能为空的属性是_。(分数:1.00)A.主键属性B.外键属性C.全部属性D.候
4、选键属性10.学生选修课程的关系模式为 SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是_。(分数:1.00)A.S#SdB.(S#,C#)GC.C#CnD.C#P#11.以下叙述中错误的是_。(分数:1.00)A.main()是 C 语言主函数的起始B.main()作为主函数必须位于源程序的起始位置行C.main()是 C 程序执行的起始行D.main 是不可替代的主函数名12.以下叙述中错误的是_。(分数:1.00)A.在一个程序中,每个模块均可以
5、独立编译运行B.程序“模块化”有利于任务的分解简化C.允许对函数单独进行编译,是 C 语言实现“模块化”的基础D.采用模块化结构,可以提高编程效率13.以下关于注释的叙述中错误的是_。(分数:1.00)A.注释的边界符号“/”和“*”之间不允许加入空格B.C 语言允许注释出现在程序中任意合适的地方C.注释的内容仅用于阅读,对程序的运行不起作用D.注释的边界符号“/*”和“*/”必须成对出现且可以嵌套14.以下是正确 C 语言标识符的是_。(分数:1.00)A._8_B.8C.8D.-8-15.算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于执行顺序,以下说法正确的
6、是_。(分数:1.00)A.先执行(d+e)得 r2,再执行 c*r2 得 r3,再执行 a+b 得 r1,最后执行 r1+r3 得表达式最后结果B.先执行 a+b 得 r1,再执行(d+e)得 r2,再执行 c*r2 得 r3,最后执行 r1+r3 得表达式最后结果C.先执行(d+e)得 r2,再执行 c*r2 得 r3,再执行 b+r3 得 14,最后执行 a+r4 得表达式最后结果D.先执行 a+b 得 r1,再执行 r1+c 得 r5,再执行(d+e)得 r2,最后执行 r5*r2 得表达式最后结果16.设有定义语句: double x=123.456; 则语句 printf(“%6.
7、2f,%3.0f/n“,x,x); 的输出结果是_。(分数:1.00)A.123.46,123.0B.123.45,123C.123.46,123D.123.45,123.17.有如下程序 #includestdio.h main() int x=072; printf(“%d/n“,x+1); 程序运行后的输出结果是_。(分数:1.00)A.073B.73C.142D.5918.有以下程序 #includestdio.h void main() double x=3.14159; printf(“%f/n“,(int)(x*1000+0.5)/(double)1000); 程序运行后的输出结
8、果是_。(分数:1.00)A.3.142000B.3.141000C.3.143000D.3.14000019.以下选项中错误的是_。(分数:1.00)A.printf(“%s/n“,“s“);B.printf(“%d%c/n“,“s“,“s“);C.printf(“%c/n“,“s“-32);D.printf(“%c/n“,65);20.若有定义:int a,b,c;,想通过语句:scanf(“%d,%d%d“, if(a!=1)r=1; if(b=2)r=2; else if(c!=3)r=3; else if(d=4)r=4; printf(“%d/n“,r); 执行后的输出结果是_。(
9、分数:1.00)A.0B.4C.1D.222.若有如下形式的函数 int fun(int a,int*p,int n) 调用函数之前需要对函数进行声明,则以下选项中错误的是_。(分数:1.00)A.int fun(int,int,int);B.int fun(int a,int*p,int n);C.int fun(int a,int*,int);D.int fun(int,int*,int);23.有以下程序 #includestdio.h main() int i,j=0; char a=“ab123c4d56ef7gh89“; for(i=0;ai;i+) if(ai=“0“ aj=“/
10、0“; printf(“%s“,a); 程序执行后的输出结果是_。(分数:1.00)A.123456789abcdefghB.abcdefghC.123456789D.1234567896ef7gh8924.有以下程序 #includestdio.h main() int a=-2,b=2; for(;+a) printf(“%d,%d,“,a,b); 程序执行后的输出结果是_。(分数:1.00)A.0,1,B.-1,1,0,1,C.-1,1,0,0,D.-1,1,25.若有以下程序 #includestdio.h int fun(int x) int y; y=x+; return y; m
11、ain() int k; for(k=0;k3;k+)printf(“%d,“,fun(k)+k);k+; 执行后的输出结果是_。(分数:1.00)A.1,5,B.0,6,C.0,4,D.1,7,26.有以下程序 #includestdio.h int*f(int*s) s+=2; s1+=6; *s=7; return s; main() int a5=1,2,3,4,5,*p=a; p=f(p); printf(“%d,%d,%d,%d“,a0,a1,*p,p1); 程序执行后的输出结果是_。(分数:1.00)A.1,2,7,10B.7,8,7,8C.1,2,1,2D.7,10,7,102
12、7.有以下程序 #includestdio.h main() int a=6,i; for(i=1;i=3;i+) if(a=5)break; if(a%2)a+=2;continue; a=(a-3,a+4); printf(“%d,%d“,i,a); 程序执行后的输出结果是_。(分数:1.00)A.0,6B.1,6C.8,6D.4,228.以下表达式中,其值不等于数值 3 的是_。(分数:1.00)A.0+“3“B.“D“-“A“C.“3“-“0“D.“d“-“a“29.有以下程序 #includestdio.h void fun(int a,int n,int flag) int i=0
13、,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(flag) if(aiaj) t=ai;ai=aj;aj=t; else if(aiaj) t=ai;ai=aj;aj=t; main() int c10=7,9,10,8,3,5,1,6,2,4,i; fun(c,10,0); fun(c,5,1); for(i=0;i10;i+) printf(“%d,“,ci); 程序运行结果正确的是_。(分数:1.00)A.6,7,8,9,10,5,4,3,2,1,B.5,4,3,2,1,6,7,8,9,10,C.6,7,8,9,10,1,2,3,4,5,D.1,2,
14、3,4,5,6,7,8,9,10,30.下面关于编译预处理的命令行中,正确的是_。(分数:1.00)A.#define int INTB.#define eps 0.001C.#DEFINE TRUED.#define E 2.8831.有如下程序 #includestdio.h main() int i,data; scanf(“%d“, for(i=0;i5;i+) if(idata printf(“%d,“,i); 程序运行时,从键盘输入:13回车后,程序输出结果为_。(分数:1.00)A.0,2,4,B.1,3,5,C.0,1,2,3,4,5,D.0,1,2,3,32.设变量 n 已正
15、确定义并赋值,以下不能实现自然数 1 到 n 累加求和的程序段是_。(分数:1.00)A.int sum=1,i=0;while(i=n)i+;sum+=i;B.int sum=0,i=1;while(i=n)sum+=i;i+;C.int sum=0,i=0;while(in)i+;sum+=i;D.int sum=1,i=1;while(in)i+;sum+=i;33.关于数组和指针,以下说法错误的是_。(分数:1.00)A.数组名本身就是一个指针,指向数组内存的起始位置B.既可以读入数据到数组中,也可以读入数据到未赋初值的指针中C.可以让一个指针指向一个同类型的数组D.指针可以指向同类型
16、的数组中的任意一个元素34.有下列程序 #includestdio.h int*f(int*s) s+=1; s1+=6; *s+=7; return s; main() int a 5=1,2,3,4,5,*p; p=f( printf(“%d,%d,%d,%d“,a1,a 2,*p,p1); 程序执行后的输出结果是_。(分数:1.00)A.3,9,10,5B.2,16,4,5C.2,10,10,5D.10,9,4,535.有以下程序 #includestdio.h double fun1(double a,int n) int i;double sum=0.0; for(i=0;in;i+
17、) sum+=ai/n; return sum; void fun2(double a,int n,double*p,double*q) int i; *p=*q=a0; for(i=1;in;i+) if(ai*p)*p=ai; else if(ai*q)*q=ai; void main() double a=1,2,3,4,5; double mx,mn,av; av=fun1(a,5); fun2(a,5, printf(“%f%f%f/n“,av,mx,mn); 程序的运行结果是_。(分数:1.00)A.5.000000 3.000000 1.000000B.3.000000 5.00
18、0000 1.000000C.1.000000 5.000000 3.000000D.3.000000 1.000000 5.00000036.设有函数说明语句: int fun(int,int); 以及函数指针定义语句: int(*f)(int,int); 若要使函数指针指向函数 fun 的入口地址,以下选项中正确的是_。(分数:1.00)A.f=fun();B.*f=fun;C.f=fun;D.*f=fun();37.有如下程序 #includestdio.h struct group int first,second,third; ; struet group get_min_max_s
19、um(int*array,int len) int i; struct group res; res.first=array0; res.second=array0; res.third=array0; for(i=1;ilen;i+) if(arrayires.first) res.first=arrayi; if(arrayires.second) res.second=arrayi; res.third+=arrayi; return res; main() int array5=9,1,3,4; struct group res=get_min_max_sum(array,5); pr
20、intf(“min=%d,max=%d,sum=%d/n“,res.first,res.second,res.third); 程序运行后的输出结果是_。(分数:1.00)A.min=0,max=9,sum=17B.min=1,max=9,sum=16C.min=1,max=4,sum=15D.min=0,max=4,sum=1638.若有语句:void*p=malloe(80);,则以下叙述错误的是_。(分数:1.00)A.可以通过指针 p 直接访问用 malloc 开辟的这块内存B.p 所指内存可以通过强制类型转换当作具有 20 个 int 型元素的一维数组来使用C.p 所指内存可以通过强制
21、类型转换当作具有 10 个 double 型元素的一维数组来使用D.p 所指内存可以通过强制类型转换当作具有 80 个 char 型元素的一维数组来使用39.设有如下类型说明语句 typedef struct int num; structint y,m,d;date; PER; 则以下定义结构体数组并赋初值的语句中错误的是_。(分数:1.00)A.PER st2=1001,2008,8,1,1002,2006,5,20;B.PER st2=1001,2008,8,1,1002,2006,5,20;C.PER st2=1001,2008,8,1,1002,2006,5,20;D.PER st2
22、=1001,2008,8,1,1002,2006,5,20;40.C 语言中标准库函数 fputs(str,fp)的功能是_。(分数:1.00)A.从 str 指向的文件中读一个字符串存入 fp 指向的内存B.把 str 所指的字符串输出到 fp 所指的文件中C.从 fp 指向的文件中读一个字符串存入 str 指向的内存D.把 fp 指向的内存中的一个字符串输出到 str 指向的文件二、(共 18 分)(总题数:1,分数:18.00)41.给定程序中,函数 fun 的作用是:不断从终端读入整数,由变量 a 统计大于 0 的个数,用变量 c 来统计小于 0 的个数,当输入 0 时结束输入,并通过
23、形参 pa 和 pb 把统计的数据传回主函数进行输出。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h void fun(int*px,int*py) /*found*/ int 1; scanf(“%d“, /*found*/ while 2 if(k0)a+; if(k0)b+; /*found*/ 3; *px=a;*py=b; main() int x,y; fun( printf(“x=%d y=%d/n“,x,y); (分数:18.00)三、(共 18 分)(总题数:1
24、,分数:18.00)42.给定程序 modi1.c 的主函数中,将 a、b、c 三个结点链成一个单向链表,并给各结点的数据域赋值,函数 fun()的作用是:累加链表结点数据域中的数据作为函数值返回。 请改正函数 fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h typedef struct list int data; struct list*next; LIST; int fun(LIST*h) LIST*p; /*found*/ int t; p=h; /*found*/ w
25、hile(*p) /*found*/ t=t+p.data; p=(*p).next; return t; main() LIST a,b,c,*h; Adata=34;b.data=51;c.data=87;c.next=“/0“; h=A)next=b.next= printf(“总和=%d/n“,fun(h); (分数:18.00)_四、(共 24 分)(总题数:1,分数:24.00)43.请编写函数 fun,其功能是分别统计形参 t 所指二维数组中字母 A 和 C 的个数。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程
26、序: #includestdio.h #includestdlib.h #define M 14 void NONO(); void fun(char(*t)M,int*a,int*c) void get(char(*s)M) int i,j; for(i=0;iM;i+) for(j=0;jM;j+) sij=65+rand()%12;printf(“%c“,sij); printf(“/n“); main() char aMM; int x,y; get(a); fun(a, printf(“A=%d C=%d/n“,x,y); NONO(); void NONO() /*本函数用于打开文
27、件,输入数据,调用函数,输出数据,关闭文件。*/ FILE *fp,*wf; int i,j,x,y; char aMM; fp=fopen(“c:/test/in.dat“,“r“); wf=fopen(“c:/test/out.dat“,“w“); for(i=0;iM;i+) for(j=0;jM;j+) fscanf(fp,“%c“, fun(a, fprintf(wf,“A=%d/n“,x); fprintf(wf,“C=%d/n“,y); fclose(fp); fclose(wf); (分数:24.00)_二级 C 语言真题 7 答案解析(总分:100.00,做题时间:90 分钟
28、)一、选择题(总题数:40,分数:40.00)1.设数据结构 B=(D,R),其中 D=a,b,c,d,e,f R=(f,A),(d,B),(e,D),(c,e),(a,c) 该数据结构为_。(分数:1.00)A.线性结构 B.循环队列C.循环链表D.非线性结构解析:解析 数据的逻辑结构有两个要素:一是数据元素的集合,通常记为 D;二是 D 上的关系,它反映了 D 中各数据元素之间的前后件关系,通常记为 R。即一个数据结构可以表示成 B=(D,R)。其中 B 表示数据结构。为了反映 D 中各数据元素之间的前后件关系,一般用二元组来表示。例如,假设 a 与 b 是 D 中的两个数据,则二元组(a
29、,b)表示 a 是 b 的前件,b 是 a 的后件。如果一个非空的数据结构满足下列两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构。根据上述理论,本题中 f 为根结点,每个结点有一个前件和一个后件,符合线性结构的定义。故本题答案为 A 选项。2.下列叙述中错误的是_。(分数:1.00)A.循环队列空的条件是队头指针与队尾指针相同 B.若二叉树没有叶子结点,则为空二叉树C.带链栈的栈底指针是随栈的操作而动态变化的D.若带链队列中只有一个元素,则队头指针与队尾指针必定相同解析:解析 在循环队列中,当
30、 front=rear 时,不能确定是队列满还是队列空。在实际使用循环队列时,为了能区分队列满还是队列空,通常还需要增加一个标志 s。当 s=0 时表示队列空,当 s=1 且 front=rear时表示队列满。故本题答案为 A 选项。3.某带链栈的初始状态为 top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为_。 A1 B0 c)20 D不确定 (分数:1.00)A. B.C.D.解析:解析 带链的栈是具有栈属性的链表。线性链表的存储单元是不连续的,为把存储空间中一些离散的空闲存储结点利用起来,把所有空闲的结点组织成一个带链的栈,称
31、为可利用栈。线性链表执行删除操作运算时,被删除的结点可以“回收”到可利用栈,对应于可利用栈的入栈运算,线性链表执行插入运算时,需要一个新的结点,可以在可利用栈中取栈顶结点,对应于可利用栈的退栈运算。可利用栈的入栈运算和退栈运算只需要改动 top 指针即可。当 top=bottom=20 时链栈中的元素个数为 1。故本题答案为 A选项。4.设一棵度为 3 的树,其中度为 2,1,0 的结点数分别为 3,1,6。该树中度为 3 的结点数为_。(分数:1.00)A.1 B.2C.3D.不可能有这样的树解析:解析 根据题目有 6 个度为 0 的结点: 1 个度为 1 的结点: 3 个度为 2 的结点:
32、因此最后度为 3 的结点有 1 个:5.下面描述错误的是_。(分数:1.00)A.模块的独立性与模块的信息隐蔽和局部化无关 B.内聚性和耦合性是模块独立程度的定性度量标准C.一个模块的内聚性越高则该模块的独立性越强D.一个模块的耦合性越高则该模块的独立性越弱解析:解析 模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。模块的独立性是指软件模块的编写和修改应使其具有独立功能,且与其他模块的关联尽可能少。故本题答案为 A 选项。6.下面属于黑盒测试方法的是_。(分数:1.00)A.错误推测法 B.基本路径测试C.判定覆盖D.条件覆盖解析:解析 黑盒测试方法也称为功能测试或数据驱动测试。黑
33、盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。白盒测试方法主要有逻辑覆盖测试(语句覆盖、路径覆盖、判断覆盖、条件覆盖)、基本路径测试等。故本题答案为 A 选项。7.下面模型中为概念模型的是_。(分数:1.00)A.实体-联系模型 B.层次模型C.关系模型D.网状模型解析:解析 数据模型按照不同的应用层次分为 3 种类型:概念数据模型、逻辑数据模型、物理数据模型。概念数据模型有实体联系模型(E-R 模型)、面向对象模型及谓词模型;逻辑数据模型有层次模型、网状模型、关系模型和面向对象模型。故本题答案为 A 选项。8.学生
34、关系模式中有 D(D#,Dn,Dl,DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#,Sn,SG,Date,Maj,D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系,关系 S 的主键(码)是 S#,关系 S 的外键(码)是_。(分数:1.00)AD# B.MajC.DlD.Dn解析:解析 在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。表 A 中的某属性集是某表B 的键,则称该属性集为 A 的外键或外码。故本题答案为 A 选项。9.关系的实体完整性要求关系中不能为空的属性是_。(分数:1.00)A.主键属性 B.外键属性C.全部属性D.候选键属
35、性解析:解析 关系模型中可以有 3 类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指若属性 M 是关系的主键,则属性 M 中的属性值不能为空值。故本题答案为 A选项。10.学生选修课程的关系模式为 SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是_。(分数:1.00)A.S#Sd B.(S#,C#)GC.C#CnD.C#P#解析:解析 若 XY,但 Y 不完全函数依赖于 X,则称 Y 对 X 部分依赖。关系模式 S
36、c 中,主键为(S#,C#),但显然有 S#Sd,S#Sa,存在非主属性对主属性的部分依赖。故本题答案为 A 选项。11.以下叙述中错误的是_。(分数:1.00)A.main()是 C 语言主函数的起始B.main()作为主函数必须位于源程序的起始位置行 C.main()是 C 程序执行的起始行D.main 是不可替代的主函数名解析:解析 C 语言规定必须用 main 作为主函数名,选项 D 正确;main()是 C 语言中主函数的起始行,也是 C 程序执行的起始行,选项 A、C 正确;main()作为主函数可以在源程序的任意位置,但是程序执行必须从 main()函数开始,选项 B 错误,本题
37、答案为 B12.以下叙述中错误的是_。(分数:1.00)A.在一个程序中,每个模块均可以独立编译运行 B.程序“模块化”有利于任务的分解简化C.允许对函数单独进行编译,是 C 语言实现“模块化”的基础D.采用模块化结构,可以提高编程效率解析:解析 在程序设计时,用一个个小模块来实现不同的功能,每个程序设计人员分别完成一个或多个小模块,称这样的程序设计方法为“模块化”。由一个个功能模块构成的程序结构称为模块化结构,使用模块化结构程序设计,有利于任务的分解简化,选项 B 正确;C 语言允许对函数单独进行编译,从而可以实现模块化,选项 C 正确;采用模块化结构,可以使不同模块的程序员分别编写和调试,
38、大大提高了编程效率,选项 D 正确;在 C 语言程序中,每个模块并不一定能够单独编译运行,选项 A 错误,本题答案A。13.以下关于注释的叙述中错误的是_。(分数:1.00)A.注释的边界符号“/”和“*”之间不允许加入空格B.C 语言允许注释出现在程序中任意合适的地方C.注释的内容仅用于阅读,对程序的运行不起作用D.注释的边界符号“/*”和“*/”必须成对出现且可以嵌套 解析:解析 在编写程序时可以在程序中加入注释,以说明变量的含义,在添加注释时,注释内容必须放在符号“/*”和“*/”之间,“/*”和“*/”必须成对出现,“/”与“*”之间不可以有空格,选项 A正确;注释可以用英文,可以用中
39、文,可以出现在程序中任意合适的地方,选项 B 正确;注释部分只是用于阅读,对程序的运行不起作用,选项 C 正确;使用“/*”和“*/”的注释之间不可再嵌套“/*”和“*/”,选项 D 错误,本题答案为 D。14.以下是正确 C 语言标识符的是_。(分数:1.00)A._8_ B.8C.8D.-8-解析:解析 合法 C 语言的标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线,选项 A 正确;符号不合法,选项 B 错误;符号不合法,选项 C 错误;-符号不合法,选项 D 错误;本题答案为 A。15.算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c
40、*(d+e),关于执行顺序,以下说法正确的是_。(分数:1.00)A.先执行(d+e)得 r2,再执行 c*r2 得 r3,再执行 a+b 得 r1,最后执行 r1+r3 得表达式最后结果B.先执行 a+b 得 r1,再执行(d+e)得 r2,再执行 c*r2 得 r3,最后执行 r1+r3 得表达式最后结果 C.先执行(d+e)得 r2,再执行 c*r2 得 r3,再执行 b+r3 得 14,最后执行 a+r4 得表达式最后结果D.先执行 a+b 得 r1,再执行 r1+c 得 r5,再执行(d+e)得 r2,最后执行 r5*r2 得表达式最后结果解析:解析 题意表达式中,圆括号的优先级最高
41、,乘法运算符次之,加法运算符最低,同优先级中,加法运算符的结合性从左向右结合,所以题意中的表达式执行顺序是:先执行 a+b 得 r1,再执行(d+e)得r2,再执行 c*r2 得 r3,最后执行 r1+r3 得表达式最后结果,本题答案为 B。16.设有定义语句: double x=123.456; 则语句 printf(“%6.2f,%3.0f/n“,x,x); 的输出结果是_。(分数:1.00)A.123.46,123.0B.123.45,123C.123.46,123 D.123.45,123.解析:解析 对于 double 类型的实数,可以在 printf()函数的格式化字符串中使用“n
42、 1 .n 2 ”的形式来指定输出宽度(n 1 和 n 2 分别代表一个整常数),其中 n 1 指定输出数据的宽度(包括小数点),n 2 指定小数点后小数位的位数,n 2 也称为精度;对于格式字符%f,当输出数据的小数位多余 n 2 位时,截取右边多余的小数,并对截取部分的第一位小数做四舍五入处理;当输出数据小数位少于 n 2 时,在小数的最右边补 0,使得输出数据的小数部分宽度为 n 2 ;如果指定“n 1 .0”格式,则不输出小数点和小数部分;题意中,%6.2f 表示输出 6 位宽度,2 位小数,所以被截取的小数位:0.006 四舍五入,结果为123.46;%3.0f 表示输出 3 位宽度
43、,0 位小数,结果为 123,本题答案为 C17.有如下程序 #includestdio.h main() int x=072; printf(“%d/n“,x+1); 程序运行后的输出结果是_。(分数:1.00)A.073B.73C.142D.59 解析:解析 题意中 x 是一个整型变量,赋值为 072,以 0 开头的整数是八进制的表示形式,printf()函数中,格式字符%d 表示以十进制形式输出 x+1,所以需要将 072 转换成十进制数:7*8+2=58,输出 x+1为 59,所以本题答案为 D。18.有以下程序 #includestdio.h void main() double x
44、=3.14159; printf(“%f/n“,(int)(x*1000+0.5)/(double)1000); 程序运行后的输出结果是_。(分数:1.00)A.3.142000 B.3.141000C.3.143000D.3.140000解析:解析 根据算术表达式和运算符的优先级与结合性,对于题意表达式:int(x*1000+0.5)/(double)1000,首先计算 x*1000,由于 x 是 double 类型,1000 是整型,所以 x*1000 的结果默认是 double 类型:3141.59;再加 0.5 后执行 int 的强制转换,结果为 3142;分母(double)1000
45、 强制转换为 double 类型,此时 3142/(double)1000 中,3142 需要转换成 double 类型,然后除以 1000,结果为 3.142000,保留小数点后 6 位,本题答案为 A。19.以下选项中错误的是_。(分数:1.00)A.printf(“%s/n“,“s“); B.printf(“%d%c/n“,“s“,“s“);C.printf(“%c/n“,“s“-32);D.printf(“%c/n“,65);解析:解析 单引号括起来的单个字符,属于字符常量,对应的格式字符是%c,双引号括起来的若干字符,属于字符串常量,对应的格式字符是%s,选项 A 错误;%d 是整型
46、数据的格式字符,由于字符常量或变量也可以作为整型数,也可以作为整数参与算术运算,所以选项 B、C 正确;同理,整数也可以作为字符常量,选项 D 正确;本题答案为 A。20.若有定义:int a,b,c;,想通过语句:scanf(“%d,%d%d“, if(a!=1)r=1; if(b=2)r=2; else if(c!=3)r=3; else if(d=4)r=4; printf(“%d/n“,r); 执行后的输出结果是_。(分数:1.00)A.0B.4C.1D.2 解析:解析 第一个 if 语句是单独的语句,所以执行完第一个 if 语句后,r 的值仍为初值 0;第二个if 语句与后续的两个 else if 都是嵌套的,所以只会执行其中的一个语句,即 if(b=2)r=2;这条语句,所以本题答案为 D。22.若有如下形式的函数 int fun(int a