1、二级 C 语言真题 2013 年 09 月-(4)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.栈与队列都只能顺序存储B.循环队列是队列的顺序存储结构C.循环链表是循环队列的链式存储结构D.栈是顺序存储结构而队列是链式存储结构2.设某二叉树的前序序列为 ABC,中序序列为 CBA,则该二叉树的后序序列为_。(分数:1.00)A.BCAB.CBAC.ABCD.CAB3.下列排序方法中,最坏情况下时间复杂度最小的是_。(分数:1.00)A.冒泡排序B.快速排序C.堆排序D.直接插入排序4.为了对有序
2、表进行对分查找,则要求有序表_。(分数:1.00)A.只能顺序存储B.只能链式存储C.可以顺序存储也可以链式存储D.任何存储方式5.软件设计中模块划分应遵循的准则是_。(分数:1.00)A.低耦合低内聚B.高耦合高内聚C.低耦合高内聚D.内聚与耦合无关6.下面属于整数类的实例是_。(分数:1.00)A.0x518B.0.518C.“-518“D.518E-27.下面属于白盒测试方法的是_。(分数:1.00)A.边界值分析法B.基本路径测试C.等价类划分法D.错误推测法8.设有一个商店的数据库,记录客户及其购物情况,由三个关系组成:商品(商品号,商品名,单价,商品类别,供应商),客户(客户号,姓
3、名,地址,电邮,性别,身份证号),购买(客户号,商品号,购买数量),则关系购买的键为_。(分数:1.00)A.客户号B.商品号C.客户号,商品号D.客户号,商品号,购买数量9.有两个关系 R,S 如下,由关系 R 和 S 通过运算得到关系 T,则所使用的操作为_。 R B C D a 0 k1 b 1 n1 S B C D f 3 k2 a 0 k1 n 2 x1 T B C D a 0 k1 (分数:1.00)A.并B.自然连接C.差D.交10.在数据库管理系统提供的数据语言中,负责数据的查询、增加、删除和修改等操作的是_。(分数:1.00)A.数据定义语言B.数据管理语言C.数据操纵语言D
4、.数据控制语言11.流程图是描述算法的很好的工具,一般的流程图中由几种基本图形组成。其中判断框的图形是_。(分数:1.00)A.菱形B.长方形C.平行四边形D.椭圆型12.以下叙述错误的是_。(分数:1.00)A.在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法B.同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率C.模块化的程序设计是采用自顶向下、逐步细化的原则D.程序的每个模块都可通过三种基本结构实现13.关于 C 语言的变量名,以下叙述正确的是_。(分数:1.00)A.变量名不可以与关键字同名B.变量名不可以与预定义标识符同名C.变量名必须
5、以字母开头D.变量名是没有长度限制的14.有以下程序: #include stdio.h main() int a; a = (int)1.99*3; printf(“%d/n“,a); 程序的运行结果是_。(分数:1.00)A.3B.5C.6D.结果不确定15.有以下程序: #include stdio.h main() int k=-17; printf(“%d,%o,%x/n“,k,1-k,1-k); 程序的运行结果是_。(分数:1.00)A.-17,22,12B.-17,12,22C.-17,-22,-12D.17,22,1216.若有定义:int a;float b;double c
6、;,程序运行时输入:a=1,b=2,c=3回车,能把值 1 输入给变量 a、值 2 输入给变量 b、值 3 输入给变量 c 的输入语句是_。(分数:1.00)A.scanf(“a=%d,b=%f,c=%lf“,B.scanf(“%d%f%lf“,C.scanf(“a=%d,b=%lf,c=%lf“,D.scanf(“a=%d,b=%f,c=%f“,17.有以下程序: #include stdio.h main() int a=0,b=0,c=0,d=0; (+a+b)?+c : +d; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序的运行结果是_。(分数:1.00)A.
7、1,0,1,0B.1,1,0,1C.1,0,0,1D.1,1,1,018.有以下程序: #include stdio.h main() int a,b; for(a=0;a3;a+) scanf(“%d“, switch(b) case 1: printf(“%d,“, b+); case 2: printf(“%d,“, b+); default: printf(“%d,“, b+); printf(“/n“); 执行时输入:1 2 3回车,则输出结果是_。(分数:1.00)A.1,2,3,2,3,3,B.1,2,3,C.2,3,4,3,4,4,D.1,1,1,2,2,319.有以下程序:
8、#include stdio.h main() int a=1,b=1; while(a-) b-; printf(“%d,%d/n“,a,b); 程序的运行结果是_。(分数:1.00)A.-1,0B.0,0C.-1,-1D.1,120.有以下程序: #include stdio.h main() int a=1,b=0; for(;a5;a+) if(a%2=0)break; b+=a; printf(“%d/n“,b); 程序的运行结果是_。(分数:1.00)A.1B.10C.0D.421.以下能正确输出字符 a 的语句是_。(分数:1.00)A.printf(“%s“,“a“);B.pr
9、intf(“%s“,“a“);C.printf(“%c“,“a“);D.printf(“%d“,“a“);22.有以下程序: #include stdio.h main() char c; do c=getchar(); putchar(c); while(c !=“#“); printf(“/n“); 执行时如输入:abcdefg#回车,则输出结果是_。(分数:1.00)A.abcdefg#B.abcdefgC.abcdefg#D.#23.以下关于 C 语言函数参数传递方式的叙述正确的是_。(分数:1.00)A.数据只能从实参单向传递给形参B.数据可以在实参和形参之间双向传递C.数据只能从形
10、参单向传递给实参D.C 语言的函数,参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用24.以下关于指针的叙述正确是_。(分数:1.00)A.所有类型的指针变量所占内存的大小是一样的B.指针变量所占内存的大小与其类型有关,char 型指针变量只占 1 个字节,double 型指针变量占 8 个字节C.指针变量可直接指向任何类型的变量,而不会出现编译或运行错误D.指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误25.有以下程序: #include stdio.h int k=5; void f(int *s) s= main()
11、int m=3,*p= f(P); printf(“%d,%d/n“,m,*p); 程序的运行结果是_。(分数:1.00)A.3,3B.5,5C.3,5D.5,326.有以下程序: #include stdio.h int *f(int *s,int*t) if(*s *t) *s=*t; return s; main() int i=3, j=5, *p= r=f(p,q); printf(“%d,%d,%d,%d,%d/n“,i,j,*p,*q, *r); 程序的运行结果是_。(分数:1.00)A.5,5,5,5,5B.3,5,5,5,5C.5,3,3,3,5D.3,5,3,5,527.有
12、以下程序: #include stdio.h #define N 4 void fun(int aN) int bNN,i,j; for(i=0; iN; i+) for(j=0; jN; j+) bij=aN-1-ji; for(i=0; iN; i+) for(j=0; jN; j+) aij = bij; main() int xNN=1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16 ,i; fun(x); fun(x); for(i=0; iN; i+) printf(“%d,“,xii); printf(“/n“); 程序的运行结果是_。(分数:1.
13、00)A.16,11,6,1,B.1,6,11,16,C.4,7,10,13,D.13,10,7,4,28.有以下程序: #include stdio.h void fun(int a, int n) int i,j=0,k=n/2,b10; for(i=n/2-1;i=0; i-) bi=aj; bk=aj+1; j+=2; k+; for(i=0; in; i+) ai = bi; main() int c10 = 10,9,8,7,6,5,4,3,2,1,i; fun(c,10); for(i=0;i10;i+) printf(“%d,“,ci); printf(“/n“); 程序的运行
14、结果是_。(分数:1.00)A.2,4,6,8,10,9,7,5,3,1,B.10,8,6,4,2,1,3,5,7,9,C.1,2,3,4,5,6,7,8,9,10,D.1,3,5,7,9,10,8,6,4,2,29.有以下程序: #include stdio.h #include string.h main() int i; char a=“How are you!“; for(i=0;ai;i+) if(ai=“) strcpy(a, i=0; printf(“%s/n“,a); 程序的运行结果是_。(分数:1.00)A.you!B.Howareyou!C.areyou!D.are you
15、!30.有以下程序(其中的 strstr()函数头部格式为:char*strstr(char*p1,char*p2)确定 p2 字符串是否在 p1 中出现,并返回 p2 第一次出现的字符串首地址): #include stdio.h #include string.h char*a=“you“; char*b=“Welcome you to Beijing!“; main() char*p; p=strstr(b,a)+strlen(a)+1; printf(“%s/n“,p); 程序的运行结果是_。(分数:1.00)A.to Beijing!B.you to Beijing!C.Welcom
16、e you to Beijing!D.Beijing!31.有以下程序: #include stdio.h main() char b410; int i; for(i=0; i4; i+) scanf(“%s“, bi); printf(“%s%s%s%s/n“,b0,b1,b2,b3); 执行时若输入:Fig fower is red回车则输出结果是_。(分数:1.00)A.FigflowerisredB.Figfloweris redC.Figflower is redD.Fig flower is red32.有以下程序: #include stdio.h #include strin
17、g.h main() char w20, a510=“abcdef“,“ghijkl“,“mnopq“,“rstuv“,“wxyz.“; int i; for(i=0; i5; i+) wi = aistrlen(ai)-1; w5=“/0“; puts(w); 程序的运行结果是_。(分数:1.00)A.flqvB.agmrwC.ekpuyD.flqvz33.有以下程序: #include stdio.h void f(int x,int n) if(n1) f( printf(“%d,“,x0); else printf(“%d,“,x 0); main() int z6=1,2,3,4,5
18、,6; f(z,6); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.6,5,4,3,2,1,B.1,1C.1,1,1,1,1,1,D.1,2,3,4,5,6,34.有以下程序: #include stdio.h int a=2; int f() static int n; int m; m=n=0; n+;a+;m+; return n+m+a; main() int k; for(k=0; k3; k+) printf(“%d,“,f(); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.5,6,7,B.5,7,9,C.5,8,11,D.5,5
19、,5,35.有以下程序: #include stdio.h #define S(x)x*x main() int k=5, j=2; printf(“%d,%d/n“,S(k+j+2),S(j+k+2); 程序的运行结果是_。(分数:1.00)A.21,18B.81,81C.21,21D.18,1836.有以下程序: #include stdio.h typedef struct stu char name10; char gender; int score; STU; void f(STU *a, STU *b) *b = *a; print(“%s,%c,%d,“,b-name,b-gen
20、der,b-score); main() STU a=“Zhao“,“m“,290, b=“Qian“,“f“,350; f( printf(“%s,%c,%d/n“,b.name,b.gender,b.score); 程序的运行结果是_。(分数:1.00)A.Zhao,m,290,Zhao,m,290B.Zhao,m,290,Qian,f,350C.Qian,f,350,Qian,f,350D.Qian,f,350,Zhao,m,29037.有以下程序: #include stdio.h #include string.h typedef struct stu char name10; ch
21、ar gender; int score; STU; void f(char*name, char gender, int score) strcpy(name,“Qian“); gende r = “f“; score = 350; main() STU a=“Zhao“,“m“,290,b; b=a; f(b.name,b.gender,b.score); printf(“%s,%c,%d,“, a.name, a.gender, a.score); printf(“%s,%c,%d/n“,b.name,b.gender,b.score); 程序的运行结果是_。(分数:1.00)A.Zha
22、o,m,290,Qian,m,290B.Zhao,m,290,Zhao,m,290C.Zhao,m,290,Qian,m,350D.Zhao,m,290,Qian,f,35038.若有定义: typedef int T10; T * a20; 则与上述定义完全等价的说明语句是_。(分数:1.00)A.int *a2010;B.int *a20;C.int *a10;D.int *a1020;39.有以下程序: #include stdio.h main() int c,d; c=13d=10 printf(“%d,%d/n“,c,d); 程序的运行结果是_。(分数:1.00)A.5,1B.1,
23、1C.18,1D.13,140.有以下程序: #include stdio.h main() FILE*fp; int i,a6 = 1,2,3,4,5,6,k; fp = fopen(“data.dat“, “w+b“); fwrite( for(i=1; i6; i+) fseek(fp, 0L, 0); fread( fseek(fp, 0L, 0); ai +=k; fwrite( rewind(fp); fread( fclose(fp); printf(“%d/n“,k); 程序的运行结果是_。(分数:1.00)A.21B.6C.123456D.11二、程序填空题(总题数:1,分数
24、:20.00)41.下列给定程序中,函数 fun 的功能是:把形参 a 所指数组中的偶数按原顺序依次存放到 a0、a1、a2中,把奇数从数组中删除,偶数的个数通过函数值返回。 例如,若 a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a 所指数组中的数据为:4、2、6、8,返回值为 4。 请在程序的下画线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #define N 9 int fun(int a, int n) int i,j; j=0; for(i
25、=0; in; i+) /*found*/ if( 1=0) /*found*/ 2 = ai; j+; /*found*/ return 3 ; main() int bN=9,1,4,2,3,6,5,8,7,i,n; printf(“/nThe original data;/n“); for(i=0; iN; i+) printf(“%4d“,bi); printf(“/n“); n = fun(b,N); printf(“/nThe number of even:%d/n“, n); printf(“/nThe even:/n“); for(i=0; in; i+) printf(“%4
26、d“, bi); printf(“/n“); (分数:20.00)三、程序修改题(总题数:1,分数:20.00)42.下列给定程序中,函数 fun 的功能是:按以下递归公式求函数的值。 (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:使字符串中尾部的*号不多于 n个,若多于 n 个,则删除多余的*号;若少于或等于 n 个,则不做任何操作,字符串中间和前面的*号不删除。 例如,字符串中的内容为“*A*BC*DEF*G*”,若 n 的值为 4,删除后,字符串中的内容应为“*A*BC*DEF*G*”;若 n
27、的值为 7,则字符串中的内容仍为“*A*BC*DEF*G*”。n 的值在主函数中输入。编写函数时,不得使用 C 语言提供的字符串函数。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #include stdio.h void fun(char*a,int n) main() char s81; int n; printf(“Enter a string:/n“); gets(s); printf(“Enter n:“); scanf(“%d“, fun(s,n); printf(“The strin
28、g after deleted:/n“); puts(s); (分数:20.00)_二级 C 语言真题 2013 年 09 月-(4)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.栈与队列都只能顺序存储B.循环队列是队列的顺序存储结构 C.循环链表是循环队列的链式存储结构D.栈是顺序存储结构而队列是链式存储结构解析:解析 栈是所有的插入与删除都限定在表的同一端进行的线性表;队列是指允许在一端进行插入,而在另一端进行删除的线性表,二者均即可以顺序存储也可以链式存储。为了充分地利用数组的存储空间,把数
29、组的前端和后端连接起来,形成一个环形的表,称为循环队列,因此循环队列是队列的一种顺序存储结构,故 B 选项正确。2.设某二叉树的前序序列为 ABC,中序序列为 CBA,则该二叉树的后序序列为_。(分数:1.00)A.BCAB.CBA C.ABCD.CAB解析:解析 二叉树遍历可以分为 3 种:前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。前序序列为 ABC,则 A 为根节点。中序序列为 CBA,则 C 和 B 均为左子树节点或右子树节点,且C 为 B 父节点,可知后序序列为 CBA
30、,故 B 选项正确。3.下列排序方法中,最坏情况下时间复杂度最小的是_。(分数:1.00)A.冒泡排序B.快速排序C.堆排序 D.直接插入排序解析:解析 在最坏情况下,对长度为 n 的线性表排序,冒泡排序、快速排序、直接插入排序的时间复杂度均为 O(n2),堆排序时间复杂度为 O(nlog 2 n),复杂度最小。故 C 选项正确。4.为了对有序表进行对分查找,则要求有序表_。(分数:1.00)A.只能顺序存储 B.只能链式存储C.可以顺序存储也可以链式存储D.任何存储方式解析:解析 二分法查找也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足两个条件:用顺序存储结构;线性表是
31、有序表。故 A 选项正确。5.软件设计中模块划分应遵循的准则是_。(分数:1.00)A.低耦合低内聚B.高耦合高内聚C.低耦合高内聚 D.内聚与耦合无关解析:解析 模块的独立程度可以由两个定性标准度量:内聚性和耦合性。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。内聚衡量一个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能弱,即模块尽可能独立,且要求模块的内聚程度尽可能高。内聚性和耦合性是一个问题的两个方面,耦合性程度弱的模块,其内聚程度一定高。故 C 选项正确。6.下面属于整数类的实例是_。(分数:1.00)A.0x518 B.0.518C.“-518“D.518E
32、-2解析:解析 整数类实例包括:十进制常量用 09 表示,不能以 0 开头;八进制常量用 07 表示,必须用 0 开头;十六进制常量用 09 和 AF(af)表示,必须以 0x 或 0X 开头。A 选项正确。B 选项是浮点数实例,C 选项是字符串实例,D 选项为科学计数法表示的浮点数实例。7.下面属于白盒测试方法的是_。(分数:1.00)A.边界值分析法B.基本路径测试 C.等价类划分法D.错误推测法解析:解析 白盒测试是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来没计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。白盒测试的主要技术
33、有逻辑覆盖测试、基本路径测试等,B 选项正确。常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图等,A、C、D 选项错误。8.设有一个商店的数据库,记录客户及其购物情况,由三个关系组成:商品(商品号,商品名,单价,商品类别,供应商),客户(客户号,姓名,地址,电邮,性别,身份证号),购买(客户号,商品号,购买数量),则关系购买的键为_。(分数:1.00)A.客户号B.商品号C.客户号,商品号 D.客户号,商品号,购买数量解析:解析 候选键(码)是二维表中能唯一标识元组的最小属性集。一个二维表有多个候选码,则选定其中一个作为主键(码)供用户使用。在购买关系中,商品号、客户
34、号、购买数量均不能唯一标识元组,每一个单独的属性集都不能作为键,但商品号与客户号构成的集合与三者构成的集合都可以唯一标识购买关系,而前者为最小属性集,故商品号与客户号构成的集合为候选键,故 C 选项正确。9.有两个关系 R,S 如下,由关系 R 和 S 通过运算得到关系 T,则所使用的操作为_。 R B C D a 0 k1 b 1 n1 S B C D f 3 k2 a 0 k1 n 2 x1 T B C D a 0 k1 (分数:1.00)A.并B.自然连接C.差D.交 解析:解析 常用的扩充运算有交、除、连接及自然连接等。并:RS 是将 S 中的记录追加到 R 后面。差:R-S 结果是属
35、于 R 但不属于 S 的记录组成的集合。交:RS 结果是既属于 R 又属于 S 的记录组成的集合。自然连接:去掉重复属性的等值连接。交运算结果为 a 0 k1,故 D 选项正确。10.在数据库管理系统提供的数据语言中,负责数据的查询、增加、删除和修改等操作的是_。(分数:1.00)A.数据定义语言B.数据管理语言C.数据操纵语言 D.数据控制语言解析:解析 数据库管理系统提供了相应的数据语言,它们是:数据定义语言,该语言负责数据的模式定义与数据的物理存取构建;数据操纵语言,该语言负责数据的操纵,包括查询与增、删、改等操作;数据控制语言,该语言负责数据完整性、安全性的定义与检查以及并发控制、故障
36、恢复等功能。故 C 选项正确。11.流程图是描述算法的很好的工具,一般的流程图中由几种基本图形组成。其中判断框的图形是_。(分数:1.00)A.菱形 B.长方形C.平行四边形D.椭圆型解析:解析 算法可以用各种方法进行描述,目前最常用的有 3 种:伪代码、流程图和 N-S 结构图。传统的流程图由下图所示的几种基本图形组成。故 A 选项正确。 12.以下叙述错误的是_。(分数:1.00)A.在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法 B.同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率C.模块化的程序设计是采用自顶向下、逐步细化的原则D.程
37、序的每个模块都可通过三种基本结构实现解析:解析 结构化程序设汁把一个复杂问题的求解过程分阶段进行,需要保证自顶向下、逐步细化、模块化设计、结构化编码。进行模块化设计时,首先设计框架,并定义和调试好各个模块之间的输入输出关系,然后完成各个模块的编写调试后再集中编译,模块化的程序设计采用自顶向下、逐步细化的原则,A 选项叙述错误,C 选项叙述正确。各个模块可以由不同人员同时进行编写调试,提高编写程序的效率,B 选项叙述正确。结构化程序主要由 3 种基本控制结构组成,顺序结构、选择结构、循环结构,这三种基本结构可以解决任何复杂的问题,D 选项叙述正确。故选择 A 选项。13.关于 C 语言的变量名,
38、以下叙述正确的是_。(分数:1.00)A.变量名不可以与关键字同名 B.变量名不可以与预定义标识符同名C.变量名必须以字母开头D.变量名是没有长度限制的解析:解析 合法的标识符由字母(大、小写均可)、数字和下划线组成,并且必须以字母或下划线开头。关键字是指被 C 语言保留的,不能用作其他用途的标识符,它们在程序中都代表着固定的含义,用户不可重新定义,A 选项正确。预定义标识符是系统已经有过定义的标识符,用户可以重新定义,所以可以作为变量名,B 选项错误。变量名除了以字母开头以外,还可以以下划线开头,C 选项错误。变量名没有长度限制,但不可超过编译器可以辨识的范围,D 选项错误。14.有以下程序
39、: #include stdio.h main() int a; a = (int)1.99*3; printf(“%d/n“,a); 程序的运行结果是_。(分数:1.00)A.3 B.5C.6D.结果不确定解析:解析 ()的优先级大于*,故先将 1.99 强制转化为 1,即浮点数 1.99 被强制转换成 1,执行语句a=(int)1.99*3;计算得 a=13=3,故 A 选项正确。15.有以下程序: #include stdio.h main() int k=-17; printf(“%d,%o,%x/n“,k,1-k,1-k); 程序的运行结果是_。(分数:1.00)A.-17,22,1
40、2 B.-17,12,22C.-17,-22,-12D.17,22,12解析:解析 整型常量有 3 种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。十进制整常量没有前缀,输出格式控制符为%d;八进制整常量以 0 作为前缀,输出格式控制符为%o;十六进制整常量以 0X 或 0x 作为前缀,输出格式控制符为%x。1-k=18,整型常量 18 用八进制表示为 22,十六进制表示为 12,故 A 选项正确。16.若有定义:int a;float b;double c;,程序运行时输入:a=1,b=2,c=3回车,能把值 1 输入给变量 a、值 2 输入给变量 b、值 3 输入给变量
41、 c 的输入语句是_。(分数:1.00)A.scanf(“a=%d,b=%f,c=%lf“, B.scanf(“%d%f%lf“,C.scanf(“a=%d,b=%lf,c=%lf“,D.scanf(“a=%d,b=%f,c=%f“,解析:解析 格式字符 d,输入十进制整数;格式字符 f,输入浮点数;格式字符 lf,输入双精度浮点数。除了格式说明字符和附加格式字符外,如果还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符。程序运行时输入:a=1,b=2,c=3,则 scanf 函数格式控制串对应的应该是“a=%d,b=%f,c=%lf”,故 A 选项正确。17.有以下程序: #i
42、nclude stdio.h main() int a=0,b=0,c=0,d=0; (+a+b)?+c : +d; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序的运行结果是_。(分数:1.00)A.1,0,1,0 B.1,1,0,1C.1,0,0,1D.1,1,1,0解析:解析 条件表达式一般形式:exp1? exp2:exp3,执行规则为:若 exp1 为真,求解 exp2,输出exp2 的值,不计算 exp3 的值;若为假,求解 exp3,输出 exp3 的值,不计算 exp2 的值。本题程序执行过程为:求解逻辑表达式(+a +b),先求解+a,a=1,则整个表
43、达式为真,不计算+b,然后求解+c,不计算+d,最后得到 a=1,b=0,c=1,d=0,故 A 选项正确。18.有以下程序: #include stdio.h main() int a,b; for(a=0;a3;a+) scanf(“%d“, switch(b) case 1: printf(“%d,“, b+); case 2: printf(“%d,“, b+); default: printf(“%d,“, b+); printf(“/n“); 执行时输入:1 2 3回车,则输出结果是_。(分数:1.00)A.1,2,3,2,3,3, B.1,2,3,C.2,3,4,3,4,4,D.
44、1,1,1,2,2,3解析:解析 本题执行过程为,输入 1,匹配 case1,输出 1,然后执行 b+得 b=2,再执行下一个 case的语句输出 2,然后执行 b+得 b=3,继续执行 default,输出 3;输入 2,执行 case2,输出 2,然后执行b+得 b=3,执行 default 输出 3;输入 3,执行 default 输出 3。故 A 选项正确。19.有以下程序: #include stdio.h main() int a=1,b=1; while(a-) b-; printf(“%d,%d/n“,a,b); 程序的运行结果是_。(分数:1.00)A.-1,0 B.0,0C
45、.-1,-1D.1,1解析:解析 本题执行过程为:先取 a 值为 1,执行循环,a=0,执行 b-,b=0,再取 a 值为 0,判断条件不成立,退出循环,再执行 a-得到 a=-1,最后输出 a=-1,b=0。故 A 选项正确。20.有以下程序: #include stdio.h main() int a=1,b=0; for(;a5;a+) if(a%2=0)break; b+=a; printf(“%d/n“,b); 程序的运行结果是_。(分数:1.00)A.1 B.10C.0D.4解析:解析 程序的执行过程为:a=1 时,a%2:1 条件不成立,执行语句 b+=a;得到 b=1;a=2
46、时,a%2=0 条件成立,执行语句 break;跳出循环。输出 b=1,故 A 选项正确。21.以下能正确输出字符 a 的语句是_。(分数:1.00)A.printf(“%s“,“a“); B.printf(“%s“,“a“);C.printf(“%c“,“a“);D.printf(“%d“,“a“);解析:解析 “格式控制串”用来指定每个输出项的输出格式,%s 对应字符串,%c 对应字符,%d 对应整型。双引号里面的内容为字符串“a”,单引号里面的内容为字符“a“,A 选项正确。B、C、D 选项语句本身就有问题。22.有以下程序: #include stdio.h main() char c; do c=