1、二级 C语言笔试-402 及答案解析(总分: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.算法的有穷性是指A) 算法程序的运行时间
2、是有限的 B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的 D) 算法只能被有限的用户使用(分数:1.00)A.B.C.D.4.下面的描述中,不属于软件危机表现的是A) 软件过程不规范 B) 软件质量难以控制C) 软件开发生产率低 D) 软件成本不断提高(分数:1.00)A.B.C.D.5.软件的_设计又称总体结构设计,其主要任务是建立软件系统的总体结构。A) 概要 B) 抽象 C) 逻辑 D) 规划(分数:1.00)A.B.C.D.6.下列叙述中,正确的是A) 用 E-R图能够表示实体集之间一对一的联系、一对多的联系和多对多的联系B) 用 E-R图只能表示实体集之间一对一的联
3、系C) 用 E-R图只能表示实体集之间一对多的联系D) 用 E-R图表示的概念数据模型只能转换为关系数据模型(分数:1.00)A.B.C.D.7.结构化程序设计主要强调的是A) 程序的规模 B) 程序的效率C) 程序设计语言的先进性 D) 程序的易读性(分数:1.00)A.B.C.D.8.下面关于数据库系统的叙述中正确的是A) 数据库系统减少了数据冗余B) 数据库系统避免了一切冗余C) 数据库系统中数据的一致性是指数据类型的一致D) 数据库系统比文件系统能管理更多的数据(分数:1.00)A.B.C.D.9.层次型、网状型和关系型数据库的划分原则是A) 数据之间的联系方式 B) 记录长度C) 联
4、系的复杂程度 D) 文件的大小(分数:1.00)A.B.C.D.10.有两个关系 R和 T如下图,则由关系 R得到关系 T的操作是(分数:1.00)A.B.C.D.11.下列叙述中错误的是A) 一个 C语言程序只能实现一种算法B) C程序可以由多个程序文件组成C) C程序可以由一个或多个函数组成D) 一个 C函数可以单独作为一个 C程序文件存在(分数:1.00)A.B.C.D.12.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是A) 大写字母 B) 连接符 C) 数字字符 D) 下划线(分数:1.00)A.B.C.D.13.以下选项中不属于字符常量的是A) “E“ B) E C)
5、 /xCC D) /072(分数:1.00)A.B.C.D.14.以下定义语句中正确的是A) int a=b=0; B) char A=65+1, b=b;C) float a=1,*b=。以下选项的 4个表达式中与其他 3个表达式的值不相同的是A) +m B) m+=1 C) m+ D) m+1(分数:1.00)A.B.C.D.17.若变量已正确定义,有以下程序段:int a=3,b=5,C=7;if(ab) a=b;c=a;if(c!=a) c=b;printf(“%d, %d, %d/n“,a,b,c);其输出结果是A) 程序段有语法错误 B) 3,5,3 C) 3,5,5 D) 3,5
6、,7(分数:1.00)A.B.C.D.18.若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的 switch语句是A) switch(x) case 1.0: printf(“*/n“); case 2.0: printf(“*/n“); B) switch (int)x); case1: printf(“*/n“);case 2: printf(“*/n“);C) switch(a+b) case 1: printf(“*/n“); case 2+1: printf(“*/n“);D) switch(a+b)case 1: printf(“*/n“);case c:
7、 printf(“*/n“);(分数:1.00)A.B.C.D.19.设有以下程序段:int x=0,s=0;while(!x!=0) s+=+x;printf(“%d“,s);则A) 运行程序段后输出 0 B) 运行程序段后输出 1C) 程序段中的控制表达式是非法的 D) 程序段执行无限次(分数:1.00)A.B.C.D.20.有以下程序:#include stdio.hmain()int n=2,k=0;while(k+ 程序运行后的输出结果是A) 0 2 B) 1 3 C) 5 7 D) 1 2(分数:1.00)A.B.C.D.21.若有定义:int x=0,*p=y=x*x-f(x-2
8、);return y;main()int z;z=f(3);printf(“%d/n“,z);程序的运行结果是A) 0 B) 9 C) 6 D) 8(分数:1.00)A.B.C.D.24.在 C语言中,运算对象必须是整型数的运算符是A) % B) / C) %和/ D) *(分数:1.00)A.B.C.D.25.设有定义语句 int(*f)(int);,则以下叙述正确的是A) f是基类型为 int的指针变量B) f是指向函数的指针变量,该函数具有一个 int类型的形参C) f是指向 int类型一维数组的指针变量D) f是函数名,该函数的返回值是基类型为 int类型的地址(分数:1.00)A.B
9、.C.D.26.以下不能正确定义二维数组的选项是A) int a22=1,2; B) int a2=1,2,3,4;C) int a22=1,2,3; D) int a2=1,2,3,4(分数:1.00)A.B.C.D.27.若要求从键盘读入含有空格字符的字符串,应使用函数A) getc() B) gets() C) getchar() D) scanf()(分数:1.00)A.B.C.D.28.以下程序运行后的输出结果是main()char c;int n=100;float f=10;double x;x=f*=n/=(c=50);printf(“%d %f/n“, n, x);A) 2
10、20.000000 B) 100,20.000000 C) 2 40.000000 D) 100 40.000000(分数:1.00)A.B.C.D.29.以下叙述中错误的是A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在程序的开头包含头文件“stdio.h”时,可以给指针变量赋 NULL(分数:1.00)A.B.C.D.30.以下是 if语句的基本形式:if(表达式)语句其中“表达式”_。A) 必须是逻辑表达式 B) 必须是关系表达式C) 必须是逻辑表达式或关系表达式 D) 可以是任意合法的表达式(分数:1.00)A.B.
11、C.D.31.现有如下程序段:#include “stdio.h“main()int a56=23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1;int i=0,j=5;printf(“%d/n“,*(strcpy(str+2,strcat(p1,p2);printf(“%s/n“,str);A) xyzabcABC B) zabcABC C) xyabcABC D) yzabcABC(分数:1.00)A.B.C.D.33.有以下程序,程序中库函数 islower(ch)用以判断 ch中的字母是否为小写字
12、母。#include stdio.h#include ctype.hvoid fun (char*p)int i=0;while(pi)if(pi=“main()char s1100=“ab cd EFG!“;fun(s1); printf(“%s/n“, s1);程序运行后的输出结果是A) ab cd EFG! B) Ab Cd EFg! C) aB cD EFG! D) ab cd EFg!(分数:1.00)A.B.C.D.34.以下程序运行后的输出结果是void swap(int x,int y)int t;t=x;x=y;y=t;main()int a=15,b=16;swap(a,b
13、);printf(“%d%d”,a,b);A) 15,16 B) 16,15 C) 15,15 D) 16,16(分数:1.00)A.B.C.D.35.有以下程序:#include string.hstruct STUchar name10;int num;;void f(char *name, int num)struct STU s2=“SunDan“, 20044,“Penghua“, 20045;num=s0.num;strcpy(name, s0.name);main()struct STU s2=“YangSan“, 20041,“LiSiGuo“, 20042,*p;p= f(p
14、-name, p -num);printf(“%s %d/n“, p-name,p-num);程序运行后的输出结果是A) SunDan 20042 B) SunDan 20044C) LiSiGuo 20042 D) YangSan 20041(分数:1.00)A.B.C.D.36.以下程序的输出结果是#include stdio.hint a33=1,3,5,7,9,11,13,15,17,,*p;main()p=(int*)malloc(sizeof(int);f(p,a);printf(“%d/n“,*p);free(p);f(int*s,int p3)*s=p11;A) 1 B) 7
15、C) 9 D) 13(分数:1.00)A.B.C.D.37.在 C语言中,变量的隐含存储类别是A) auto B) static C) extern D) 无存储类别(分数:1.00)A.B.C.D.38.以下选项中,能定义 s为合法的结构体变量的是A) typedef struct ABC B) structdouble a; double a;char b10; char b10;s; s;C) struct ABC D) typedef ABCdouble a; double a;char b10; char b10;ABC s; ABC s;(分数:1.00)A.B.C.D.39.以下
16、程序运行后的输出结果是#include string.hmain()char m20=a,b,c,d,n=“abc“,k=“abcde“;strcpy(m+strlen(n),k); strcat(m,n);printf(“%d%d/n“, sizeof(m), strlen(m);A) 2011 B) 99 C) 209 D) 1111(分数:1.00)A.B.C.D.40.以下程序的运行结果是#include stdio.hmain()int a=1,b=2,c=3,x;x=(ab)printf(“%d/n“,x);A) 0 B) 1 C) 2 D) 3(分数:1.00)A.B.C.D.二
17、、填空题(总题数:12,分数:60.00)41.设有下列二叉树:(分数:4.00)填空项 1:_42.软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修改性等特性,其中最重要的是 1。(分数:4.00)填空项 1:_43.数据库系统在三级模式之间提供了两层映射,这两层映射是 1 和模式/内模式映射。(分数:4.00)填空项 1:_44.测试的目的是暴露错误,评价程序的可靠性;而 1 的目的是发现错误的位置并改正错误。(分数:4.00)填空项 1:_45.关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、 1 和自定义完整性。(分数:4.00)填空项 1:_46.已知字符
18、 A的 ASC代码值为 65,以下程序运行时若从键盘输入:B33回车,则输出结果是_。#include stdio.hmain()char a,b;a=getchar();scanf(“%d“,a=a-A+0;b=b*2;printf(“%c%c/n“,a,b);(分数:4.00)填空项 1:_以下程序的定义语句中,x1的初值是_,程序运行后输出的内容是_。#include stdio.hmain()int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*p4,i;for(i=0;i4;i+)pi=printf(“/n“);(分数:8.00)填空项 1:_填
19、空项 1:_以下函数 rotade的功能是:将 a所指 N行 N列的二维数组中的最后一行放到 b所指二维数组的第 0列中,把 a所指二维数组中的第 0行放到 b所指二维数组的最后一列中,b 所指二维数组中其他数据不变,请填空。#define N 4void rotade(int aN, int bN)int I,j;for(I=0;IN;I+)bIN-1=_; _=aN-1I;(分数:8.00)填空项 1:_填空项 1:_47.以下程序的运行结果是_。#include stdio.hmain()int fun();fun();fun()static int a3=0,1,2;int i;for
20、(i=0;i3;i+) ai+=ai;for(i=0;i3;i+) printf(“%d,“,ai);printf(“/n“);(分数:4.00)填空项 1:_48.以下程序的输出结果是_。int fun(int *x,int n)if(n=0) return x0;else return x0+fun(x+1,n-1);main()int a=1,2,3,4,5,6,7; printf(“%d/n“ , fun(a,3);(分数:4.00)_49.以下程序用来输出结构体变量 ex所占存储单元的字节数,请填空。struct stchar name20; double score;main()s
21、truct st ex;printf(“ex size:%d/n“, sizeof(_);(分数:4.00)填空项 1:_以下程序的功能是从名为“filea.dat”的文本文件中逐个读入字符并显示在屏幕上,请填空。#include stdio.hmain()FILE *fp; char ch;fp=fopen(_);ch=fgetc(fp);while(_ (fp) putchar(ch);ch=fgetc(fp);putchar(/n);fclose(fp);(分数:8.00)填空项 1:_填空项 1:_二级 C语言笔试-402 答案解析(总分:100.00,做题时间:90 分钟)一、选择题
22、(总题数:40,分数:40.00)1.下列关于队列的叙述中正确的是A) 在队列中只能插入数据 B) 在队列中只能删除数据C) 队列是先进先出的线性表 D) 队列是先进后出的线性表(分数:1.00)A.B.C. D.解析:解析 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。2.对于存储同样的一组数据元素而言A) 顺序结构比链接结构易于扩充空间B) 顺序结构与链接结构相比,更有利于对元素进行插入、删除运算C) 顺序结构占用
23、整块空间,而链接结构不要求整块空间D) 顺序结构比链接结构多占存储空间(分数:1.00)A.B.C. D.解析:解析 顺序结构中,元素之间的关系通过存储单元的邻接关系来表示,其存储空间必须占用整块空间;链接结构中,结点之间的关系通过指针来表示,不要求整块空间。3.算法的有穷性是指A) 算法程序的运行时间是有限的 B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的 D) 算法只能被有限的用户使用(分数:1.00)A. B.C.D.解析:解析 算法具有 5个特性:有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;确定性:
24、算法中每一条指令必须有确切的含义,读者理解时不会产生歧义;可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现;输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;输出:一个算法有一个或多个输出。4.下面的描述中,不属于软件危机表现的是A) 软件过程不规范 B) 软件质量难以控制C) 软件开发生产率低 D) 软件成本不断提高(分数:1.00)A. B.C.D.解析:解析 软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。主要表现在以下 6个方面:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件可维
25、护性差;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。5.软件的_设计又称总体结构设计,其主要任务是建立软件系统的总体结构。A) 概要 B) 抽象 C) 逻辑 D) 规划(分数:1.00)A. B.C.D.解析:解析 软件设计分为概要设计和详细设计。概要设计又称总体结构设计,其主要任务是建立软件系统的总体结构。6.下列叙述中,正确的是A) 用 E-R图能够表示实体集之间一对一的联系、一对多的联系和多对多的联系B) 用 E-R图只能表示实体集之间一对一的联系C) 用 E-R图只能表示实体集之间一对多的联系D) 用 E-R图表示的概念数据模型只能转换为关系数据模型(分数
26、:1.00)A. B.C.D.解析:解析 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。7.结构化程序设计主要强调的是A) 程序的规模 B) 程序的效率C) 程序设计语言的先进性 D) 程序的易读性(分数:1.00)A.B.C.D. 解析:解析 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用 goto语句,总的来说可使程序结构良好、易读、易理解、易维护。8.下
27、面关于数据库系统的叙述中正确的是A) 数据库系统减少了数据冗余B) 数据库系统避免了一切冗余C) 数据库系统中数据的一致性是指数据类型的一致D) 数据库系统比文件系统能管理更多的数据(分数:1.00)A. B.C.D.解析:解析 数据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据在不同位置出现时应保持相同的值。9.层次型、网状型和关系型数据库的划分原则是A) 数据之间的联系方式 B) 记录长度C) 联系的复杂程度 D) 文件的大小(分数:1.00)A. B.C.D.解析:解析 数据库按数据模型分为层次型数
28、据库、网状型数据库、关系型数据库,数据模型即数据之间的联系方式。因此正确选项为 A)。10.有两个关系 R和 T如下图,则由关系 R得到关系 T的操作是(分数:1.00)A. B.C.D.解析:解析 从关系中找出满足给定条件元组的操作称为选择。选择是从行的角度进行的运算,即从水平方向抽取记录。由图可知关系 R通过运算得到关系 T,关系 T与关系 R相比,属性的个数没有发生变化,记录的条数发生了变化。因此所使用的运算应该是选择,故本题答案为 A)。11.下列叙述中错误的是A) 一个 C语言程序只能实现一种算法B) C程序可以由多个程序文件组成C) C程序可以由一个或多个函数组成D) 一个 C函数
29、可以单独作为一个 C程序文件存在(分数:1.00)A. B.C.D.解析:解析 一个 C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法。12.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是A) 大写字母 B) 连接符 C) 数字字符 D) 下划线(分数:1.00)A.B. C.D.解析:解析 本题考查的是标识符。C 语言规定标识符只能由字母、数字和下划线 3种字符组成,且第一个字符必须为字母或下划线。13.以下选项中不属于字符常量的是A) “E“ B) E C) /xCC D) /072(分数:1.00)A. B.C.D.解析:解析 在
30、 C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项 B)、C)和 D)为正确的字符常量,而选项 A)是用双引号括起来的字符,表示一个字符串常量。14.以下定义语句中正确的是A) int a=b=0; B) char A=65+1, b=b;C) float a=1,*b=。以下选项的 4个表达式中与其他 3个表达式的值不相同的是A) +m B) m+=1 C) m+ D) m+1(分数:1.00)A.B.C. D.解析:解析 选项中的 4个表达式执行后,m 的值都递增 1。选项 C)中,表达式的值是 m递增前的值,为 0。选项 A)、B)、D)中,表达式的
31、值都是 m递增后的值,为 1。17.若变量已正确定义,有以下程序段:int a=3,b=5,C=7;if(ab) a=b;c=a;if(c!=a) c=b;printf(“%d, %d, %d/n“,a,b,c);其输出结果是A) 程序段有语法错误 B) 3,5,3 C) 3,5,5 D) 3,5,7(分数:1.00)A.B. C.D.解析:解析 两个 if语句的判断条件都不满足,程序只执行了 c=a这条语句,所以变量 c的值等于 3,变量 b的值没有变化,程序输出的结果为 3,5,3。18.若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的 switch语句是A)
32、switch(x) case 1.0: printf(“*/n“); case 2.0: printf(“*/n“); B) switch (int)x); case1: printf(“*/n“);case 2: printf(“*/n“);C) switch(a+b) case 1: printf(“*/n“); case 2+1: printf(“*/n“);D) switch(a+b)case 1: printf(“*/n“);case c: printf(“*/n“);(分数:1.00)A.B. C.D.解析:解析 C 语言中,switch 语句专用于实现多分支结构程序,其特点是各分
33、支清晰且直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。19.设有以下程序段:int x=0,s=0;while(!x!=0) s+=+x;printf(“%d“,s);则A) 运行程序段后输出 0 B) 运行程序段后输出 1C) 程序段中的控制表达式是非法的 D) 程序段执行无限次(分数:1.00)A.B. C.D.解析:解析 考查 while语句的使用,逻辑非运算符和不等于运算符的区别,逻辑非运算符“!”的优先级大于不等于运算符“!=”的优先级。20.有以下程序:#inclu
34、de stdio.hmain()int n=2,k=0;while(k+ 程序运行后的输出结果是A) 0 2 B) 1 3 C) 5 7 D) 1 2(分数:1.00)A.B.C.D. 解析:解析 本题考查逻辑运算符的“短路”现象,由于 k的值为 0,表达式首先去求 k+的值,因为表达式 k+的值为 0,系统完全可以确定逻辑表达式的运算结果总是为 0,因此将跳过 n+2,不再对它进行求值,即 k的值加 1,n 的值不变。21.若有定义:int x=0,*p=y=x*x-f(x-2);return y;main()int z;z=f(3);printf(“%d/n“,z);程序的运行结果是A)
35、0 B) 9 C) 6 D) 8(分数:1.00)A.B.C. D.解析:解析 函数 int f(int x)是一个递归函数调用,当 x的值等于 0或 1时,函数值等于 3,其他情况下 y=x*2-f(x-2),所以在主函数中执行语句 z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。24.在 C语言中,运算对象必须是整型数的运算符是A) % B) / C) %和/ D) *(分数:1.00)A. B.C.D.解析:解析 在 C语言中,“%”运算符两侧的运算数必须是整型。25.设有定义语句 int(*f)(int);,则以下叙述正确的是A) f是基类型为 int的指针变量B)
36、 f是指向函数的指针变量,该函数具有一个 int类型的形参C) f是指向 int类型一维数组的指针变量D) f是函数名,该函数的返回值是基类型为 int类型的地址(分数:1.00)A.B. C.D.解析:解析 本题考查的是指向函数的指针。语句 int(*f)(int);是对一个函数的声明,其中 f是指向该函数的指针,该函数有一个整型参数,函数返回值类型为整型。26.以下不能正确定义二维数组的选项是A) int a22=1,2; B) int a2=1,2,3,4;C) int a22=1,2,3; D) int a2=1,2,3,4(分数:1.00)A.B.C.D. 解析:解析 本题的考查点是
37、二维数组的定义和初始化。选项 A)定义的数组中各元素实际上是这样的:1,02,0选项 B)定义的数组中各元素实际上是这样的:1,23,4选项 C)定义的数组中各元素实际上是这样的:1,02,3选项 D)错在省略了第 2维的长度。C 语言中在对数组进行初始化时,如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第 1维的长度可以不指定,但第 2维的长度不能省略。27.若要求从键盘读入含有空格字符的字符串,应使用函数A) getc() B) gets() C) getchar() D) scanf()(分数:1.00)A.B. C.D.解析:解析 scanf()语句用“空格”区别不同的字
38、符串,遇到空格结束,所以不能读入空格;getc()与 getchar()语句不能用于字符串的读入。28.以下程序运行后的输出结果是main()char c;int n=100;float f=10;double x;x=f*=n/=(c=50);printf(“%d %f/n“, n, x);A) 2 20.000000 B) 100,20.000000 C) 2 40.000000 D) 100 40.000000(分数:1.00)A. B.C.D.解析:解析 对于 C语言中的赋值运算符,必须遵循以下规则:赋值运算符的优先级别只高于逗号运算符,比其他任何运算符的优先级都低,并且具有自右向左的
39、结合性。因此先得到变量 c的值为 50,变量n经过计算结果为 2,最后通过变量 f的值 10和 n的值 2相乘得到变量 x的值,为 20.000000。因此选项A)正确。29.以下叙述中错误的是A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在程序的开头包含头文件“stdio.h”时,可以给指针变量赋 NULL(分数:1.00)A.B.C. D.解析:解析 函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项 A)正确。指针类型的函数可以返回地址值,选项 B)正确。在文件 stdio.h中,NULL 被
40、定义为 void型的指针,选项 D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项 C)错误。30.以下是 if语句的基本形式:if(表达式)语句其中“表达式”_。A) 必须是逻辑表达式 B) 必须是关系表达式C) 必须是逻辑表达式或关系表达式 D) 可以是任意合法的表达式(分数:1.00)A.B.C.D. 解析:解析 C 语言中 if(表达式)中表达式的值可以是任意合法的表达式,如果表达式的值为 0,表示条件为假,如果表达式的值非 0,表示条件为真。31.现有如下程序段:#include “stdio.h“main()int a56=23,3,65,21,6,78,28,5,
41、67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1;int i=0,j=5;printf(“%d/n“,*(strcpy(str+2,strcat(p1,p2);printf(“%s/n“,str);A) xyzabcABC B) zabcABC C) xyabcABC D) yzabcABC(分数:1.00)A.B.C. D.解析:解析 本题考查的重点是拷贝字符串一使用 strcpy()函数,该函数的调用方式是:strcpy(字符数组,字符串),其中“字符串”可以是字符串常量,也可以是字符数组。函数的功能是:将“字符串”完整地复制到“字符数组”
42、中,字符数组中原有的内容被覆盖。使用该函数时注意:字符数组必须定义得足够大,以便容纳复制过来的字符串,复制时,连同结束标志/0-起复制;不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用 strcpy()函数处理。另外,本题还考查连接字符串的 strcat()函数,其调用方式是:strcat(字符数组,字符串)。功能是把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。使用该函数时注意:由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;
43、否则,会因长度不够而产生问题。连接前两个字符串都有结束标志/0,连接后“字符数组”中存储的字符串的结束标志/0被舍弃,只在目标串的最后保留一个/0。33.有以下程序,程序中库函数 islower(ch)用以判断 ch中的字母是否为小写字母。#include stdio.h#include ctype.hvoid fun (char*p)int i=0;while(pi)if(pi=“main()char s1100=“ab cd EFG!“;fun(s1); printf(“%s/n“, s1);程序运行后的输出结果是A) ab cd EFG! B) Ab Cd EFg! C) aB cD E
44、FG! D) ab cd EFg!(分数:1.00)A.B.C. D.解析:解析 int islower(char ch)的功能是判断字符 c是否为小写英文字母,当 ch为小写英文字母(az)时,返回非 0值,否则返回 0。后面语句 pi-1=pi-1-a+A的作用是把小写字母转化为大写字母。根据判断条件可知,只有当空格字符的前一个字符为小写字母时才把该小写字母变成大写,所以选择 C)。34.以下程序运行后的输出结果是void swap(int x,int y)int t;t=x;x=y;y=t;main()int a=15,b=16;swap(a,b);printf(“%d%d”,a,b);
45、A) 15,16 B) 16,15 C) 15,15 D) 16,16(分数:1.00)A. B.C.D.解析:解析 函数 swap采用传值传递方式,无论形参 x和 y的数值发生多大变化,实参 a和 b的值都不变。因此选项 A)正确。35.有以下程序:#include string.hstruct STUchar name10;int num;;void f(char *name, int num)struct STU s2=“SunDan“, 20044,“Penghua“, 20045;num=s0.num;strcpy(name, s0.name);main()struct STU s2
46、=“YangSan“, 20041,“LiSiGuo“, 20042,*p;p= f(p-name, p -num);printf(“%s %d/n“, p-name,p-num);程序运行后的输出结果是A) SunDan 20042 B) SunDan 20044C) LiSiGuo 20042 D) YangSan 20041(分数:1.00)A. B.C.D.解析:解析 本题考查的是结构体。主函数中定义了结构体类型的指针变量 p,并使其指向结构体类型的数组 s1,并通过调用函数 f改变指针变量 p所指向的结构体中成员变量 name的值,但并未改变其num的值。这是因为函数 f中的形参 n
47、ame是一个字符型指针变量,它指向主函数中指针变量 p所指向的结构体的成员变量 name,所以对函数 f中的形参*name 的改变也就是对主函数中 p-name的改变,而函数f中对形参 num的改变并不会影响主函数中 p-num的值,因为此时传递给 num的是一个值,而不是地址。36.以下程序的输出结果是#include stdio.hint a33=1,3,5,7,9,11,13,15,17,,*p;main()p=(int*)malloc(sizeof(int);f(p,a);printf(“%d/n“,*p);free(p);f(int*s,int p3)*s=p11;A) 1 B) 7 C) 9 D) 13(分数:1.00)A.B.C. D.解析:解析 本题考查了二维数组元素引用的方法。题中用动态存储分配函数 malloc分配了一个 int型数据长度大小的内存,然后指针 p指向这段内存,函数 f()中对 p所指向的数据进行了