1、二级 C语言笔试-389 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.线性表的顺序存储结构和线性表的链式存储结构分别是( )。A) 顺序存取的存储结构、顺序存取的存储结构B) 随机存取的存储结构、顺序存取的存储结构C) 随机存取的存储结构、随机存取的存储结构D) 任意存取的存储结构、任意存取的存储结构(分数:1.00)A.B.C.D.2.下列关于栈的描述中错误的是( )。A) 栈是先进后出的线性表 B) 栈只能顺序存储C) 栈具有记忆作用 D) 对栈的插入与删除操作中,不需要改变栈底指针(分数:1.00)A.B.C.D.3.设有下列二叉
2、树:(分数:1.00)A.B.C.D.4.下面关于对象概念的描述中,错误的是( )。A) 对象就是 C语言中的结构体变量B) 对象代表着正在创建的系统中的一个实体C) 对象是一个状态和操作(或方法) 的封装体D) 对象之间的信息传递是通过消息进行的(分数:1.00)A.B.C.D.5.软件开发的结构化生命周期方法将软件生命周期划分成( )。A) 定义、开发、运行维护 B) 设计阶段、编程阶段、测试阶段C) 总体设计、详细设计、编程调试 D) 需求分析、功能定义、系统设计(分数:1.00)A.B.C.D.6.在结构化方法中,用数据流程图(DFD) 作为描述工具的软件开发阶段是( )。A) 可行性
3、分析 B) 需求分析 C) 详细设计 D) 程序编码(分数:1.00)A.B.C.D.7.模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准则是模块的( )。A) 抽象和信息隐蔽 B) 局部化和封装化C) 内聚性和耦合性 D) 激活机制和控制方法(分数:1.00)A.B.C.D.8.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是( )。A) DB包含 DBS和 DBMS B) DBMS包含 DB和 DBSC) DBS包含 DB和 DBMS D) 没有任何关系(分数:1.00)A.B.C.D.9.关系数据模型( ) A) 只能表示实体间的 1:1联系 B) 只能
4、表示实体间的 1:n联系C) 只能表示实体间的 m:n联系 D) 可以表示实体间的上述 3种联系(分数:1.00)A.B.C.D.10.有三个关系 R、S 和 T如下:(分数:1.00)A.B.C.D.11.一个算法应该具有“确定性”等 5个特性,下面对另外 4个特性的描述中错误的是( )。A) 有零个或多个输入 B) 有零个或多个输出C) 有穷性 D) 可行性(分数:1.00)A.B.C.D.12.下列叙述中错误的是( )。A) 一个 C语言程序只能实现一种算法B) C程序可以由多个程序文件组成C) C程序可以由一个或多个函数组成D) 一个 C函数可以单独作为一个 C程序文件存在(分数:1.
5、00)A.B.C.D.13.若变量已正确定义为 int型,要通过语句 scanf(“%d, %d, %d“, a, b, C); 给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是( )。(u 代表一个空格符) A) uuu1, 2, 3回车 B) 1u2u3回车C) 1, uuu2, uuu3回车 D) 1, 2, 3回车(分数:1.00)A.B.C.D.14.以下 4个选项中,不能看成一条语句的是( )。A); B) a=5, b=2.5, c=3.6; C) ifa5); D) if(b!=5) x=2; y=6;(分数:1.00)A.B.C.D.15.已知字母 A的
6、 ASCII代码值为 65,若变量 kk为 char型,以下不能正确判断出 kk中的值为大写字母的表达式是( )。A) kk=Akk=Z B) !(kk=A|kk=Z) C) (kk+32) =a(kk+32) =z D) isalpha(kk) (kk91)(分数:1.00)A.B.C.D.16.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是( )。A) (c=2) |(c=4) |(c=6) B) (c=2c=6) |(c!=3) |(c!=5) C) (c=2c=6)!(c%2) D) (c=2c=6) (c%2!=1)(分数:1.00)A.B.C.D.17.有以下程序:#i
7、ncludestdio.hmain() int k=5, n=0; while(k0) switch(k) default; break; case 1: n+=k; case 2: case 3: n+=k; k-; printf(“%d/n“, n); 程序运行后的输出结果是( )。A) 0 B) 4 C) 6 D) 7(分数:1.00)A.B.C.D.18.有以下程序:#includestdio.hmain() int i, s=1; for(i=1; i50; i+) if!(i%5) !(i%3) ) s+=i; printf(“%d/n“,s); ) 程序的输出结果是( )。A)
8、409 B) 277 C) 1 D) 91(分数:1.00)A.B.C.D.19.当运行以下程序时,从键盘输入 AhaMA(空格)AhaCR,则下面程序的运行结果是( )。#includestdio.hmain() char s80, c=a; int i=0; scanf(“%s“, s); while(si!=/0) ifsi=c) si=si-32; else if(si=c-32) si=si+32; i+; puts(s); A) ahAMa B) AbAMa C) AhAMa空格ahA D) ahAMa空格ahA(分数:1.00)A.B.C.D.20.设变量均已正确定义,若要通过
9、scanf(“%d%c%d%c“, a1, c1, a2, c2); 语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是( )。(注:口代表空格字符) A) 10X 口 20口 Y回车 B) 10X20Y回车C) 10X回车 20Y回车 D) 10X回车20Y回车(分数:1.00)A.B.C.D.21.以下叙述中错误的是( )。A) 用户定义的函数中可以没有 return语句B) 用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值C) 用户定义的函数中若没有 return语句,则应当定义函数为 void类型
10、D) 函数的 return语句中可以没有表达式(分数:1.00)A.B.C.D.22.有以下程序:#includestdio.hfun(int x, int y) return(x+y); main() int a=1, b=2, c=3, sum; sum=fun(a+, b+, a+b), c+); printf(“%d/n“,sum); 执行后的输出结果是( )。A) 6 B) 7 C) 8 D) 9(分数:1.00)A.B.C.D.23.若有说明语句:double *p, a; ,则能通过 scanf语句正确给输入项读入数据的程序段是( )。A) *p=a; scanf(“%lf“,
11、p); B) *p=a; scanf(“%f“, p); C) p=a; scanf(“%lf“, *p); D) p=a; scanf(“%lf, p);(分数:1.00)A.B.C.D.24.已定义以下函数:int fun(int *p) return *p; fun函数返回值是( )。A) 不确定的值 B) 一个整数 C) 形参 p中存放的值 D) 形参 p的地址值(分数:1.00)A.B.C.D.25.有以下程序:#include stdio.hmain() int s12=f1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 2, 3, c5=0), i; for(i=0;
12、i1 2; i+) csi+; for (i=1; i5; i+) printf(“%d“, ci); printf(“/n“); 程序的运行结果是( )。A) 1234 B) 2344 C) 4332 D) 1123(分数:1.00)A.B.C.D.26.已有定义:int i, a10, *p; ,则合法的赋值语句是( )。A) p=100; B) p=a5 C) p=a2+2 D) p=a+2;(分数:1.00)A.B.C.D.27.有以下程序:#include stdio.hvoid fun(int *s, int n1, int n2) int i, j, t; i=n1; j=n2;
13、 while(ij) t=si; si=sj; sj=t; i+; j-; main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, k; fun(a, 0, 3); fun(a, 4, 9); fun(a, 0, 9); for(k=0; k10; k+) printf(“%d“, ak); printf(“/n“); 程序的运行结果是( )。A) 049382716 B) 05948372615 C) 5678901234 D) 0987651234(分数:1.00)A.B.C.D.28.有以下程序:#include stdio.hvoid sort(int
14、 a, int n) int i, j, t; for(i=0; in-1; i+) for(j=i+1; jn; j+) if(aiaj) t=ai; ai=ai; aj=t; main() int aa10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; sort(aa+2, 5); for(i=0; i10; i+) printf(“ %d, “, aai); A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, B) 1, 2, 7, 6, 3, 4, 5, 8, 9, 10, C) 1, 2, 7, 6, 5, 4, 3, 8, 9, 10, D)
15、1, 2, 9, 8, 7, 6, 5, 4, 3, 10,(分数:1.00)A.B.C.D.29.以下能正确定义二维数组的是( )。A) int a3; B) int a3=2*3; C) int a3=; D) int a23=1, 2, 3, 4;(分数:1.00)A.B.C.D.30.下列程序执行后的输出结果是( )。#include stdio.hvoid func1(int i); void func2(int i); char st=“hello, friend!“; void func1(int i) pnintf(“% c1, sti); if(i3) i+=2; func2
16、(i); void func2(int i) printf(“%c“, sti); if(i3) i+=2; func1(i); main() int i=0; func1(i); printf(“/n“); A) hllo B) heel C) hlo D) hlm(分数:1.00)A.B.C.D.31.有以下程序:#include stdio.hvoid fun(char *t, char *s) while(*t!=0) t+; while(*t+=*s+) !=0); main() char ss10=“acc“, aa10=“bbxxyy“; fun(ss, aA); printf(
17、“%s, %s/n“, ss, aA); 程序的运行结果是( )。A) accxyy, bbxxyy B) acc, bbxxyy C) accxxyy, bbxxyy D) accbbxxyy, bbxxyy(分数:1.00)A.B.C.D.32.以下正确的程序段是( )。A) char str20; scanf(“%s“, str); B) char *p; scanf(“%s“, p); C) char str20; scanf(“%s“, str2) D) char str20, *p=str; scanf(“%s“, p2);(分数:1.00)A.B.C.D.33.有以下程序:#in
18、clude stdio.hint fun(int n) if(n=1) return 1; elsereturn(n+fun(n-1); main() int x; scanf(“%d“, x); x=fun(x); printf(“%d/n“, x); 执行程序时,给变量 x输入 10,程序的输出结果是( )。A) 55 B) 54 C) 65 D) 45(分数:1.00)A.B.C.D.34.以下叙述中正确的是( )。A) 局部变量说明为 static存储类,其生存期将得到延长B) 全局变量说明为 static存储类,其作用域将被扩大C) 任何存储类的变量在未赋初值时,其值都是不确定的D)
19、 形参可以使用的存储类说明符与局部变量完全相同(分数:1.00)A.B.C.D.35.阅读下列程序段,程序的输出结果为( )。#include stdio.h#define M(X, Y) (X) *(Y) #define N(X, Y) (X)/(Y) main() int a=5, b=6, c=8, k; k=N(M(a, b), c); printf(“%d/n“, k); A) 3 B) 5 C) 6 D) 8(分数:1.00)A.B.C.D.36.以下 scanf函数调用语句中对结构体变量成员的引用不正确的是( )。struct pupi1char name20; int age;
20、 int sex; pup5, *p; p=pup; A) scanf(“%s“, pup0. name); B) scanf(“%d“, pup0. age); C) scanf(“%d“, (p-sex) ); D) scanf(“%d“, p-age);(分数:1.00)A.B.C.D.37.若有以下定义的语句:struct studentint age; int num; ; struct student stu3=1001, 20, 1002, 19, 1003, 21; main() struct student *p; p=stu; 则以下不正确的引用是()。A) (p+) -n
21、um B) p+C) (*p) .num D) p=stu.age(分数:1.00)A.B.C.D.38.以下程序的输出结果是( )。struct HARint x, y; struct HAR *p; h2; main() h0.x=1; h0.y=2; h1.x=3; h1.y=4; h0.p=h1; h1.p=h; printf(“%d%d/n“, (h0.p) -x, (h1.p) -y); A) 12 B) 23 C) 14 D) 32(分数:1.00)A.B.C.D.39.有以下程序:#include stdio.hmain() char a=4; printf(“%d/n“, a
22、=a1); 程序的运行结果是( )。A) 40 B) 16 C) 8 D) 4(分数:1.00)A.B.C.D.40.有以下程序:#include stdio.hmain() FILE *pf; char *s1=“China“, *s2=“Beijing“; pf=fopen(“123.dat“, “wb+“); fwrite(s2, 7, “, pf); rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1, 5, 1, pf); fclose(pf); 以上程序执行后 123.dat文件的内容是( )。A) China B) Chinang C) ChinaBeij
23、ing D) BeijingChina(分数:1.00)A.B.C.D.二、程序填空题(总题数:1,分数:18.00)下列给定程序中,函数 fun的功能是:统计带头结点的单向链表中结点的个数,并存放在形参 n所指的存储单元中。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include stdio.h#include stdlib.h#define N 8typedef struct listint data; struct list *next; SLIST; SLIST *creatlist(in
24、t *a); void outlist(SLIST *); void fun(SLIST *h, int *n)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) , num); printf(“/nnumber=%d/n“, num); SLIST *creatlist(in
25、t a)SLIST *h, *p, *q; int i; h=p=(SLIST *)malloc(sizeof(SUST); for(i=0; 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“); elseprintf(“/nHead“); doprintf(“-%d“, p-data); p=p-next; w
26、hile(p!=NULL); printf(“-End/n“); (分数:18.00)填空项 1:_填空项 1:_填空项 1:_三、程序改错题(总题数:1,分数:18.00)41.下列给定程序中,函数 fun的功能是:求出 s所指字符串中最后一次出现的 t所指字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为 NULL。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 mam函数,不得增行或删行,也不得更改程序的结构!试题程序:#include stdio.h#include string.hchar *fun(char *s, char *t)c
27、har*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; printf(“/nPlease enter string S:“); scanf(“%s“, s); printf(“/nPlease enter substring t:“); scanf(“%s“, t); p=fun(s, t); if(p)printf(“/nThe result
28、 is:%s/n“, p); elseprintf(“/nNot found!/n“); (分数:18.00)_四、程序设计题(总题数:1,分数:24.00)42.函数 fun的功能是:将 s所指字符串中除下标为偶数同时 ASCII码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在 t所指的数组中。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#include stdio.h#include string.hvoid fun(char *s, char t)void main()char
29、s100, t100; printf(“/nPlease enter string S:“); scanf(“%s“, s); fun(s, t); printf(“/nThe result is: %s/n“, t);(分数:24.00)_二级 C语言笔试-389 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.线性表的顺序存储结构和线性表的链式存储结构分别是( )。A) 顺序存取的存储结构、顺序存取的存储结构B) 随机存取的存储结构、顺序存取的存储结构C) 随机存取的存储结构、随机存取的存储结构D) 任意存取的存储结构、任意存取的存储结构
30、(分数:1.00)A.B. C.D.解析:解析 顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式 LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。2.下列关于栈的描述中错误的是( )。A) 栈是先进后出的线性表 B) 栈只能顺序存储C) 栈具有记忆作用 D) 对栈的插入与删除操作中,不需要改变栈底指针(分数:1.00)A.B. C.D.解析:解析 本题考查的是栈和队列。栈是一种特殊的线性表,线性表可以顺序存储,也可以链式存储,而栈是一种线
31、性表,也可以采用链式存储结构。故本题答案为 B)。3.设有下列二叉树:(分数:1.00)A.B. C.D.解析:解析 本题考查二叉树的遍历。所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子树与遍历右子树。这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树,并且,在遍历左右子树时,上述规则同样适用,即“根左右”,故该二叉树的前序遍历结果为“ATBZXCYP”。4.下面关于对象概念的描述中,错误的是( )。A) 对象就是 C语言中的结构体变量B) 对象代表着正在创建的系统中的一个实体C) 对象是一个状态和操作(或方法) 的封装体D) 对象之间的信息传递是通过消息进行的(分数:1.00
32、)A. B.C.D.解析:解析 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联系,从而模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,对象的思想广泛应用于 C+、Java 等语言中,因此 A)错误。5.软件开发的结构化生命周期方法将软件生命周期划分成( )。A) 定义、开发、运行维护 B) 设计阶段、编程阶段、测试阶段C) 总体设计、详细设计、编程调试 D) 需求分析、功能定义、系统设计(分数:1.00)A. B.C.D.解析:解析 通常将软件产品从提出、实现、使用维护到停止使用的过程称为软件生命周期。它可以分为软件定义、软件开发及
33、软件运行维护 3个阶段。6.在结构化方法中,用数据流程图(DFD) 作为描述工具的软件开发阶段是( )。A) 可行性分析 B) 需求分析 C) 详细设计 D) 程序编码(分数:1.00)A.B. C.D.解析:解析 软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流图和数据字典。本题答案为 B)。7.模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准则是模块的( )。A) 抽象和信息隐蔽 B) 局部化和封装化C) 内聚性和耦合性 D) 激活机制和控制方法(分数:1.00)A.B.C. D.解析:解析 模块的独立程序是评价设计好坏的重要
34、度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。一般较优秀的软件设计,应尽量做到高内聚,低耦合。8.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是( )。A) DB包含 DBS和 DBMS B) DBMS包含 DB和 DBSC) DBS包含 DB和 DBMS D) 没有任何关系(分数:1.00)A.B.C. D.解析:解析 数据库管理系统 DBMS是数据库系统中实现各种数据管理功能的核心软件。它负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制下进行的。所以,DBMS包含数据库 DB。操作系统、数据库管理系统与应用程
35、序在一定的硬件支持下就构成了数据库系统。所以,DBS包含 DBMS,也就包含 DB。综上所述,选项 C)正确。9.关系数据模型( ) A) 只能表示实体间的 1:1联系 B) 只能表示实体间的 1:n联系C) 只能表示实体间的 m:n联系 D) 可以表示实体间的上述 3种联系(分数:1.00)A.B.C.D. 解析:解析 数据模型用来表示实体间的联系,但不同的数据库管理系统支持不同的数据模型。常用的数据模型有层次模型、网状模型和关系模型,层次模型不能表示多对多联系,网状模型和关系模型都能表示任意一种联系。10.有三个关系 R、S 和 T如下:(分数:1.00)A.B.C.D. 解析:解析 关系
36、 R与 S经交运算后所得到的关系 T是由那些既在 R内又在 S内的有序组所组成。11.一个算法应该具有“确定性”等 5个特性,下面对另外 4个特性的描述中错误的是( )。A) 有零个或多个输入 B) 有零个或多个输出C) 有穷性 D) 可行性(分数:1.00)A.B. C.D.解析:解析 本题考核的知识点是算法的性质。算法是为解决某个特定问题而采取的确定的且有限的步骤,一个算法应当具有以下 5个基本特性:有穷性,就是指一个算法应当包含有限个操作步骤。确定性,就是说算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。有零个或多个输入。可行性,就是说算法中指定的操
37、作,都可以通过已经实现的基本运算执行有限次实现,有一个或多个输出。由此可知选项 B)不正确,所以,4 个选项中选项 B)符合题意。12.下列叙述中错误的是( )。A) 一个 C语言程序只能实现一种算法B) C程序可以由多个程序文件组成C) C程序可以由一个或多个函数组成D) 一个 C函数可以单独作为一个 C程序文件存在(分数:1.00)A. B.C.D.解析:解析 本题考查 C语言的特点。一个 C语言程序可以实现多种算法,因此本题应该选 A)。13.若变量已正确定义为 int型,要通过语句 scanf(“%d, %d, %d“, a, b, C); 给 a赋值 1、给 b赋值 2、给 c赋值
38、3,以下输入形式中错误的是( )。(u 代表一个空格符) A) uuu1, 2, 3回车 B) 1u2u3回车C) 1, uuu2, uuu3回车 D) 1, 2, 3回车(分数:1.00)A.B. C.D.解析:解析 本题考查的是输入函数 scanf()的基本用法。使用该语句时,要求除格式控制符以外的字符都要原样输入,“, ”为非格式符,要原样输入。选项 B)中没有输入非格式符“, ”,所以是不正确的。14.以下 4个选项中,不能看成一条语句的是( )。A); B) a=5, b=2.5, c=3.6; C) ifa5); D) if(b!=5) x=2; y=6;(分数:1.00)A.B.
39、C.D. 解析:解析 选项 D)为两条语句。15.已知字母 A的 ASCII代码值为 65,若变量 kk为 char型,以下不能正确判断出 kk中的值为大写字母的表达式是( )。A) kk=Akk=Z B) !(kk=A|kk=Z) C) (kk+32) =a(kk+32) =z D) isalpha(kk) (kk91)(分数:1.00)A.B. C.D.解析:解析 本题主要考查的是逻辑表达式。选项 A)中的表达式的意思是 kk大于等于A且小于等于Z,因此只有当 kk是一个大写字母的时候,该表达式才能被满足,所以选项 A)能够判断出 kk中的值为大写字母。我们知道(kk+32)=a等价于 k
40、k=a-32,又因为相同的大小写字母的 ASCII值,小写字母的要比大写字母大 32。所以a-32 等于A。故选项 C)和选项 A)是等价的。isalpha()函数的功能是判断一个参数是否为字母。又因为小写字母的 ASCII值范围是 97122,大写字母的 ASCII值范围是6590,当判断是字母且值小于 91时一定是大写字母,所以选项 D)能够判断出 kk中的值为大写字母。16.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是( )。A) (c=2) |(c=4) |(c=6) B) (c=2c=6) |(c!=3) |(c!=5) C) (c=2c=6)!(c%2) D) (c=
41、2c=6) (c%2!=1)(分数:1.00)A.B. C.D.解析:解析 本题主要考查的是逻辑表达式。选项 A)中表达式的意思是:当 c等于 2或 4或 6时,表达式的值为真,否则为假。所以不满足题意。选项 C)中表达式的意思是:当 c大于等于 2且小于等于 6,并且 c不是奇数时,表达式的值为真,否则为假。这样,满足该表达式的 c,只能取值为 2、4、6 了,所以也不满足题意。选项 D)中后面一个子表达式(c%2!=1)和选项 C)中的!(c%2)是等价的。都是判断 c不是奇数。因此也不满足题意。故本题正确答案为 B)。17.有以下程序:#includestdio.hmain() int
42、k=5, n=0; while(k0) switch(k) default; break; case 1: n+=k; case 2: case 3: n+=k; k-; printf(“%d/n“, n); 程序运行后的输出结果是( )。A) 0 B) 4 C) 6 D) 7(分数:1.00)A.B.C.D. 解析:解析 本题考查的是 switch语句。switch 语句中的 case或 default只是一种人口标号,它并不形成一种子句的概念。当满足其中某个标号的条件而进入 switch语句中时,如果没碰到 break语句,将一直执行到 switch语句的结尾。题目中使用了一个 while
43、循环使 k从 5递减到 1,当 k=5或 4的时候从default标号进入 switch,碰到 break;语句立即跳出,没有改变 n;当 k=3时,执行了一次 n+=k; ;当k=2时,也执行了一次 n+=k; ;当 k=1时,执行了两次 n+=k; 。所以最终 n的值为 3+2+1+1=7。18.有以下程序:#includestdio.hmain() int i, s=1; for(i=1; i50; i+) if!(i%5) !(i%3) ) s+=i; printf(“%d/n“,s); ) 程序的输出结果是( )。A) 409 B) 277 C) 1 D) 91(分数:1.00)A.
44、B.C.D. 解析:解析 本题是计算 50之内的自然数相加之和,题中 if语句括号中的条件表达式!(i%5)!(i%3)表明只有能同时被 5和 3整除的数才符合相加的条件,149 之间满足这个条件的只有 15、30 和 45,因为s的初始值为 1,所以 s=1+15+30+45=91。19.当运行以下程序时,从键盘输入 AhaMA(空格)AhaCR,则下面程序的运行结果是( )。#includestdio.hmain() char s80, c=a; int i=0; scanf(“%s“, s); while(si!=/0) ifsi=c) si=si-32; else if(si=c-32
45、) si=si+32; i+; puts(s); A) ahAMa B) AbAMa C) AhAMa空格ahA D) ahAMa空格ahA(分数:1.00)A. B.C.D.解析:解析 本题主要考查的知识点是大写字母比它对应的小写字母 ASCII码值小 32,并且字符可以看做整数进行算术运算等操作。20.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, a1, c1, a2, c2); 语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是( )。(注:口代表空格字符) A) 10X 口 20口 Y回车 B) 10X2
46、0Y回车C) 10X回车 20Y回车 D) 10X回车20Y回车(分数:1.00)A.B.C.D. 解析:解析 本题考查的知识点是数据输入。scanf 函数是 C语言提供的标准输入函数,作用是在终端设备(或系统隐含指定的输入设备)上输入数据。scanf()函数的一般形式为:scanf(格式控制,输入项表);,本题中的格式控制字符串是“%d%c%d%c”,其中%d 表示要输入的是整数;%c 则表示输入的是字符,且各控制符之间无任何分隔字符,故要求输入的数据之间也不能分开(若要求连续输入的都是数据类型,则必须以空格等空白字符分隔每个数据,因为系统不知道应该如何去分隔这一系列数据)。而选项 A)、B)、C)在 10和 X之间均插入空格,所以不正确。21.以下叙述中错误的是( )。A) 用户定义的函数中可以没有 return语句B) 用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值C) 用户定义的函数中若没有 return语句,则应当定义函数为 void类型D) 函数的 return语句中可以没有表达式(分数:1.00)A.B. C.D.解析:解析 本题考查的是 return语句。用户定义的函数有两种:一种是没有返回值的函