1、二级 C语言笔试-183 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.在数据库管理技术的发展中,数据独立性最高的是( )。(分数:2.00)A.人工管理B.文件系统C.数据库系统D.数据模型2.以下程序中函数 sort的功能足对 a数组中的数据进行由大到小的排序 void sort(int a,int n) int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj)t=ai;ai=aj;aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(B.
2、a=7+b+c,a+C.int(12.3%4)D.a=a+7=c+b10.以下( )不属于对象的基本特征。(分数:2.00)A.继承性B.封装性C.分类性D.多态性11.一棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的结果是( )。(分数:1.00)A.DBACEFB.CBEFDAC.FDAEBCD.DFABEC12.函数 rewind(fp)的作用是( )。(分数:1.00)A.使 fp指定的文件的位置指针重新定位到文件的开始位置B.将 fp指定的文件的位置指针指向文件中所要求的特定位置C.使 fp指定的文件的位置指针向文件的末尾D.使 fp指定的文件的
3、位置指针自动移至下一个字符位置13.设有定义:int k=0;,下列选项的 4个表达式中与其他 3个表达式的值不相同的是( )。(分数:1.00)A.k+B.k+=1C.+kD.k+114.下面程序的运行结果是( )。 for(i=3;i7;i+)printf(i%2)?(“*%d/a“):(“#%d/n“),i);(分数:1.00)A.*3 #4 *5 *6B.#3 *4 #5 *6C.#3 *4 #5 #6D.*3 #4 *5 #615.有以下程序: #includestdio.h #define X 5+6 main() int a=2,c; C=X*2: printf(“%d“,c);
4、 程序运行后的输出结果是( )。(分数:1.00)A.17B.22C.16D.1116.设有语句:if(a=1)b=2;c=3;,以下语句中与之等价的是( )。(分数:1.00)_17.下面程序的输出结果是( )。 typedefunion long x1; int y4; char z10; M; M t; main() printf(“%d/n“,sizeof(t); (分数:1.00)A.32B.26C.10D.418.当用“#define F 37.5f”定义后,下列叙述正确的是( )。(分数:1.00)A.F是 float型数B.F是 char型数C.F无类型D.F是字符串19.设有
5、定义:char s10;int i=0;,以下不能将一行(不超过 100个字符)带有空格的字符串正确读入的语句或语句组是( )。(分数:1.00)A.gets(s);B.scanf(“%s“,s);C.while(si+=getchar()!=/n);si=/0;D.doscanf(“%c“, else if(num9) s=2; else s=1; i=num/100; j=(num-i*100)/10; k=(num-i*100-j*10); switch(s) case 3:printf(“%d%d%d/n“,k,j,i); break; case 2:printf(“%d%d/n“,k
6、,j); case 1:printf(“%d/n“,k); (分数:2.00)A.123B.1,2,3C.321D.3,2,138.有以下程序段 char ch;int k; ch=a;k=12; printf(“%c,%d,“,ch,ch,k); printf(“k=%d/n“,k); 已知字符 a的 ASCII十进制代码为 97,则执行上述程序段后输出结果是( )。(分数:2.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=1239.以下说法正确的是( )。(分数:2.00)A.宏定义是 C
7、语句,要在行末加分号B.可以使用#undefine 提前结束宏名的使用C.在进行宏定义时,宏定义不能嵌套D.双引号中出现的宏名也要进行替换40.数据结构主要研究的是数据的逻辑结构、数据的运算和( )。(分数:2.00)A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储二、填空题(总题数:15,分数:29.00)41.在树形结构中,没有前件的结点是_。(分数:2.00)填空项 1:_42.软件工程研究的内容主要包括:软件开发技术和 1。(分数:2.00)填空项 1:_43.用树型结构表示实体类型及实体间联系的数据模型称为 1。(分数:2.00)填空项 1:_44.在数据流图的类型中
8、有两种类型,它们是变换型和 1。(分数:2.00)填空项 1:_45.当数据的物理结构(存储结构、存取方式等)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是指数据的_。(分数:2.00)填空项 1:_46.当 m=1,n=2,a=3,b=2,c=4 时,执行 d=(m=a!=b) for(;_;ss+) if(*ss=c)i+; return i; main() char aM,ch; printf(“/nPlease enter a string:“);gets(a); printf(“/nPlease enter a char:“);ch=getchar(); print
9、f(“/nThe number of the char is:%d/n“,fun(a,ch);(分数:2.00)填空项 1:_53.以下程序是求矩阵 a、b 的和,结果存入矩阵 c中,请填空。 #includestdio.h main() int a44=1,2,6,7,0,4,2,-8,1,4,5,2,2,4,6,8; int b44=-4,0,7,9,2,-7,7,4),6,9,0,1),8,8,6,5); int i,j,c44; for(i=0;i4;i+) for(j=0;j4;j+) cij=_; for(i=0;i4;i+) for(j=0;j4;j+) printf(“%d“,
10、cij); (分数:2.00)填空项 1:_54.以下程序的输出结果是_。 main() char *p=“ABC“,“DEF“,“GHI“,“JKL“; int i; for(i=3;i=0;i-,i-) printf(“%c“,*pi);(分数:2.00)填空项 1:_55.以下程序的功能是:从低位开始取出长整型变量 s中奇数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。请填空。 #includestdio.h main() long s,t,s1=10; pfintf(“/n.Please enter s:“); scanf(“%1d“,jn;j+) if(aiaj)
11、t=ai;ai=aj;aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(B.a=7+b+c,a+ C.int(12.3%4)D.a=a+7=c+b解析:解析 选项 A)是一个 C语句,不是表达式;选项 B)是利用一个逗号表达式给 a赋值;选项 C)中的“%”求余运算符要求两个运算对象都必须是整型;选项 D)中,不能用表达式给表达式赋值,但是变量可以给自身赋值,例如:a=a+1。10.以下( )不属于对象的基本特征。(分数:2.00)A.继承性 B.封装性C.分类性D.多态性解析:解析 对象具有如下特征: 标识惟一性。指对象是可区分的。 分类性
12、。指可以将具有相同属性和操作的对象抽象成类。 多态性。指同一个操作可以是不同对象的行为。 封装性。从外面看只能看到对象的外部特征,而不知道也无需知道数据的具体结构以及实现操作的算法。模块独立性好。对象是面向对象的软件的基本模块,对象内部各种元素彼此结合得很紧密,内聚性强。11.一棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的结果是( )。(分数:1.00)A.DBACEFB.CBEFDA C.FDAEBCD.DFABEC解析:解析 由于该二叉树的前序遍历结果是 ABCEDF,显然 A结点为根结点,所以后序遍历时 A结点是最后遍历的,其后序遍历的结果为 CB
13、EFDA。12.函数 rewind(fp)的作用是( )。(分数:1.00)A.使 fp指定的文件的位置指针重新定位到文件的开始位置 B.将 fp指定的文件的位置指针指向文件中所要求的特定位置C.使 fp指定的文件的位置指针向文件的末尾D.使 fp指定的文件的位置指针自动移至下一个字符位置解析:解析 位置指针重返文件头函数 rewind()的调用形式为:rewind(fp)。其中,“fp”是指向文件的文件型指针。 rewind(fp)的功能是:使 fp指定的文件的位置指针重新定位到文件的开始位置。13.设有定义:int k=0;,下列选项的 4个表达式中与其他 3个表达式的值不相同的是( )。
14、(分数:1.00)A.k+ B.k+=1C.+kD.k+1解析:解析 因为题中有语句“int k=0;”,所以选项 B)、C)、D)都是对 k的值加 1,选项 A)的语句k+表示先利用 k的值进行运算,然后 k的值才加 1。14.下面程序的运行结果是( )。 for(i=3;i7;i+)printf(i%2)?(“*%d/a“):(“#%d/n“),i);(分数:1.00)A.*3 #4 *5 *6B.#3 *4 #5 *6C.#3 *4 #5 #6D.*3 #4 *5 #6 解析:解析 本题考查 printf函数的输出格式和条件表达式“?:”的使用。printf 函数输出时“*%d/n”和“
15、#%d/n”中的“#”和“*”都是直接输出。条件表达式的基本格式为:“a?b:c”。它的运算规则为:当 a为非 0时,整个表达式的值取 b的值,当 a为 0时,整个表达式取 c的值。15.有以下程序: #includestdio.h #define X 5+6 main() int a=2,c; C=X*2: printf(“%d“,c); 程序运行后的输出结果是( )。(分数:1.00)A.17 B.22C.16D.11解析:解析 define 语句仅进行简单替换,因此 e=5+6*2=17。16.设有语句:if(a=1)b=2;c=3;,以下语句中与之等价的是( )。(分数:1.00)_解
16、析:解析 在 C语言中,用分号表示一条语句的结束,用17.下面程序的输出结果是( )。 typedefunion long x1; int y4; char z10; M; M t; main() printf(“%d/n“,sizeof(t); (分数:1.00)A.32B.26C.10 D.4解析:解析 “联合体”所占用的内存空间为最长的成员所占用的空间。题中联合体的 z10成员联合体中占空间最长的成员。18.当用“#define F 37.5f”定义后,下列叙述正确的是( )。(分数:1.00)A.F是 float型数B.F是 char型数C.F无类型D.F是字符串 解析:解析 字符替换
17、定义格式为:#define 标识符(形参表)形参表达式。题中 F是代表形参表达式的标识符(字符串)。19.设有定义:char s10;int i=0;,以下不能将一行(不超过 100个字符)带有空格的字符串正确读入的语句或语句组是( )。(分数:1.00)A.gets(s);B.scanf(“%s“,s); C.while(si+=getchar()!=/n);si=/0;D.doscanf(“%c“,fun(2*a,6)即 fun(8,6),8!=6,所以返回 6。34.关系表中的每一行记录称为一个( )。(分数:2.00)A.字段B.元组 C.属性D.关键码解析:解析 在关系表中,每一列称
18、为一个属性,对应表中的一个字段;每一行称为一个元组,对应表中的一条记录。35.判断 char型变量 c1是否为小写字母的正确表达式为( )。(分数:2.00)A.a=c1=zB.(c1=a) else if(num9) s=2; else s=1; i=num/100; j=(num-i*100)/10; k=(num-i*100-j*10); switch(s) case 3:printf(“%d%d%d/n“,k,j,i); break; case 2:printf(“%d%d/n“,k,j); case 1:printf(“%d/n“,k); (分数:2.00)A.123 B.1,2,3
19、C.321D.3,2,1解析:解析 本题考查 if-else语句和 switch语句。scan 函数通过键盘读入 nUm的值。因为num=32199,所以 s=3,i=3,i=2k=1。因为 s=3,所以执行 case 3,输出 k,j,i 的值,然后通过breed结束程序。38.有以下程序段 char ch;int k; ch=a;k=12; printf(“%c,%d,“,ch,ch,k); printf(“k=%d/n“,k); 已知字符 a的 ASCII十进制代码为 97,则执行上述程序段后输出结果是( )。(分数:2.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与
20、格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=12 解析:解析 在用基本输出函数 printf时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明个数多于输出项个数,则对于多余的格式项输出不定值或 0。39.以下说法正确的是( )。(分数:2.00)A.宏定义是 C语句,要在行末加分号B.可以使用#undefine 提前结束宏名的使用 C.在进行宏定义时,宏定义不能嵌套D.双引号中出现的宏名也要进行替换解析:解析 本题考查宏的使用规则:字符替换格式:#define 标识符字符串,行末不加分号;双引号中出现
21、的宏名不替换;如果提前结束宏名的使用,程序中可以使用#ndefine;在进行宏定义时,宏定义能层层置换,能够嵌套。40.数据结构主要研究的是数据的逻辑结构、数据的运算和( )。(分数:2.00)A.数据的方法B.数据的存储结构 C.数据的对象D.数据的逻辑存储解析:解析 数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含 3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。二、填空题(总题数:15,分数:29.00)41.在树形结构中,没有前件的结点是_。(分数:2.00)填空项 1:_ (正确答案:根结点)解析:解析 树型结构具有如下特点: 每个结点只有一个前件,称为父
22、结点,没有前件的结点只有一个,称为树的根结点,简称为树的根; 每一个结点可以有多个后件,它们都称为该结点的子结点。没有后件的结点称为叶子结点; 一个结点所拥有的后件个数称为树的结点度; 树的最大层次称为树的深度。42.软件工程研究的内容主要包括:软件开发技术和 1。(分数:2.00)填空项 1:_ (正确答案:软件工程管理)解析:解析 软件工程研究的内容主要包括:软件开发技术和软件工程管理。软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件工程管理包括软件管理学、软件工程经济学、软件心理学等内容。43.用树型结构表示实体类型及实体间联系的数据模
23、型称为 1。(分数:2.00)填空项 1:_ (正确答案:层次模型)解析:解析 在数据模型中,用二维表表示关系模型,用有向图表示网状模型,用树型结构表示层次模型。44.在数据流图的类型中有两种类型,它们是变换型和 1。(分数:2.00)填空项 1:_ (正确答案:事务型)解析:解析 典型的数据流类型有两种:变换型和事务型。45.当数据的物理结构(存储结构、存取方式等)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是指数据的_。(分数:2.00)填空项 1:_ (正确答案:物理独立性)解析:解析 数据的独立性一般分为物理独立性与逻辑独立性两种。 物理独立性:指用户的应用程序与存储
24、在磁盘上的数据库中数据是相互独立的。当数据的物理结构包括存储结构、存取方式等改变时,如存储设备的更换、物理存储的更换、存取方式改变等,应用程序都不用改变。 逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,如修改数据模式、增加新的数据类型、改变数据间联系等,用户程序都可以不变。46.当 m=1,n=2,a=3,b=2,c=4 时,执行 d=(m=a!=b) for(;_;ss+) if(*ss=c)i+; return i; main() char aM,ch; printf(“/nPlease enter a string:“);gets(a); printf
25、(“/nPlease enter a char:“);ch=getchar(); printf(“/nThe number of the char is:%d/n“,fun(a,ch);(分数:2.00)填空项 1:_ (正确答案:*ss!=/0)解析:解析 本题考查的是指针的应用。题目要求求出字符串 ss中指定字符的个数。分析整个程序,空缺处是检验指针 ss是否指向了字符串的末尾,如没有,即执行下面语句,判断指针 ss指向的字符是否字符 c,若是,i 自加 1;所以空缺处填入*ss!=/0,作为循环终止的条件。53.以下程序是求矩阵 a、b 的和,结果存入矩阵 c中,请填空。 #includ
26、estdio.h main() int a44=1,2,6,7,0,4,2,-8,1,4,5,2,2,4,6,8; int b44=-4,0,7,9,2,-7,7,4),6,9,0,1),8,8,6,5); int i,j,c44; for(i=0;i4;i+) for(j=0;j4;j+) cij=_; for(i=0;i4;i+) for(j=0;j4;j+) printf(“%d“,cij); (分数:2.00)填空项 1:_ (正确答案:aij+bij)解析:解析 求两个矩阵的和只要将对应元素相加即可。54.以下程序的输出结果是_。 main() char *p=“ABC“,“DEF“
27、,“GHI“,“JKL“; int i; for(i=3;i=0;i-,i-) printf(“%c“,*pi);(分数:2.00)填空项 1:_ (正确答案:JD)解析:解析 第一次循环,i=3,*p3=“JKL“,但因为是以“%c“格式输出,只能输出一个字符,所以只能输出 J。第二次循环,i=1,*p1=“DEF“,同样也只能输出 D。55.以下程序的功能是:从低位开始取出长整型变量 s中奇数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。请填空。 #includestdio.h main() long s,t,s1=10; pfintf(“/n.Please enter
28、 s:“); scanf(“%1d“,&s); t=s%10; while(s0) s=s/100; t=_; s1=s1*10; printf(“The result is:%1d/n“,t); (分数:2.00)填空项 1:_ (正确答案:s%10*s1+t)解析:解析 题目要求从低位开始取出长整型变量 s中奇数位上的数,设 s为 7654321,所要去除的为7531。s 在每次循环均除以 100,因此它的作用是将本次循环所需要得到的奇数位数放到最末一位,而要获得该数仅需在此后将 s对 10取余,s1 初始值为 10,且在每次循环后均乘以 10,因此可想到是为了将本次循环所获得的奇数位数放到已有数的“前面”,即将上一步所得之数乘以 s1,由于是逐次获得奇次位数,所以每次还要加上 t的原债。