1、计算机二级(C)13 及答案解析(总分:645.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:40,分数:60.00)1.有以下程序: main( ) unsigned char a,b; a=4|3; b=4 printf(“%d %d/n”,a,b(; 执行后输出结果是( )。 (分数:1.50)A.7 0B.0 7C.1 1D.43 02.以下程序中函数 f( )的功能是将 n 个字符串按由大到小的顺序进行排序。 #includestring.h void f(char p 10,int n) char t20; int i,j; for(i
2、 =O;i n-1 ;i + ) for(j =i + 1 ;j n;j + ) if(strcmp(p i ,pj ) 0) strcpy(t,pi);strcpy(pi ,pj );strcpy(pj ,t); main ( ) char p 10 = “abc“,“aabdfg“,“abbd“,“dcdbe“, “cd“ ; int i; f(p,5); printf(“%d/n“,strlen(pO ) ); 程序运行后的输出结果是( )。 (分数:1.50)A.6B.4C.3D.53.有以下程序: main( ) int i,n=0; for(i=2;iA.n=5B.n=2C.n=3
3、D.n=44.以下不能定义为用户标识符的是_。 (分数:1.50)A.MainB._0C._intD.sizeof5.有以下程序: main( ) char str 10=“China“,“Beijing“,*p=str; printf(“%s/n“,p+10); 程序运行后的输出结果是( )。 (分数:1.50)A.ChinaB.BejingC.ngD.ing6.下列叙述中正确的是_。 (分数:1.50)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对7.下列关于单目运算符+、-的叙述中正确的是( )。(分数:1.50
4、)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D.它们的运算对象可以是 char 型变量、int 型变量和 float 型变量8.在 Windows 环境下,下列叙述中正确的是( )。(分数:1.50)A.在“开始“菜单中可以增加项目,也可以删除项目B.在“开始“菜单中不能增加项目,也不能删除项目C.在“开始“菜单中可以增加项目,但不能删除项目D.在“开始“菜单中不能增加项目,但可以删除项目9.当把以下四个表达式用作
5、if 语句的控制表达式时,有一个选项与其他三个选项含义 不同,这个选项是_。 (分数:1.50)A.k%2B.k%2=1C.(k%2)!=0D.!k%2=110.在函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 又调用了函数 funA,则( )。(分数:1.50)A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C 语言中不允许这样的递归调用11.以下叙述中错误的是_。 (分数:1.50)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句12.若有如下
6、程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;b0;26.程序中头文件 typel.h 的内容是: #define N 5 #define M1 N*3 程序如下: #include“typel.h“ #define M2 N *2 main( ) int i; i=M1+M2; printf(“%d/n“,i); 程序编译后运行的输出结果是( )。 (分数:1.50)A.10B.20C.25D.3027.有以下程序: main( ) int a=3,b=4,c=5,d=2; if(ab) if(bc) printf(“%d“
7、,d+ +1); else printf(“%d“,+d +1); printf(“%d/n“,d); 程序运行后的输出结果是( )。 (分数:1.50)A.2B.3C.43D.4428.以下能正确定义二维数组的是( )。(分数:1.50)A.int a 3;B.int a 3=22*3;C.int a 3=;D.int a23=1,2,3,4;29.以下叙述中错误的是( )。(分数:1.50)A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以B.在程序结束时,应当用函数 fclose( )关闭已打开的文件C.在利用函数 fread( )从二进制文件中读数据时,可以用数组名给数组中所有元
8、素读入数据D.不可以用 FILE 定义指向二进制文件的文件指针30.有以下程序: struct STU char name10; int num; float TotalScore; ; void f(struct STU *p) struct STU s2=“SunDan“,20044,550,“Penghua“,20045,537,*q=s; +p; +q; *p=*q; main() struct STU s3= “YangSan“,20041,703,“LiSiGuo“,20042,580; f(s); printf(“%s %d %3.0f/n“,s1.name, s1.num,s1
9、.TotalScore); 程序运行后的输出结果是_。 (分数:1.50)A.SunDan 20044 550B.Penghua 20045 537C.LiSiGuo 20042 580D.SunDan 20041 70331. 有以下程序 main( ) int i=10,j=1; printf(“%d,%d/n“,i-,+j); 执行后输出的结果是( )。 (分数:1.50)A.9,2B.10,2C.9,1D.10,132.以下选项中非法的表达式是( )。(分数:1.50)A.0next; while(= 1 ) printf(“%s/n“,p-sub);p= 2 ; main3 Node
10、 *hd; hd=fun4; disp(hd);printf(“/n“); (分数:40.00)填空项 1:_53.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数 据独立性最高的阶段是 1。(分数:40.00)填空项 1:_54.以下程序运行后的输出结果是 1 main( ) int i,j,a 3=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) for(j=i+1;j3;j+) aji=0; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%d “,aij); printf(“/n“); (分数:40.00)填空项 1:
11、_55.从 Windows 环境进入 MS-DOS 方式后,返回 Windows 环境的 DOS 命令为 1。(分数:40.00)填空项 1:_56.以下程序运行后的输出结果是 1。 main2 int a,b,c; a=10; b=20; c=(a%b1); printf(“%d %d %d/n“,a,b,c); (分数:40.00)填空项 1:_57.已有文本文件 test.txt,其中的内容为:Hello,everyone!。以下程序中,文件 test.txt 已正确为“读”而打开,由此文件指针 fr 指向文件,则程序的输出结果是 1。 #include stdio.h main( )
12、FILE *fr; char str40; fgets(str,5,fr); printf(“%s/n“,str); fclose(fr); (分数:40.00)填空项 1:_58.函数 strcmp1 的功能是对两个字符串进行比较,当 s 所指字符串和 t 所指字符串相等时,返回值为0; 当 s 所指字符串大于 t 所指字符串时,返回值大于 0;当 s 所指字符串小于 t 所指字符串时,返回值小于 0(功能等同于库函数 strcmp2 ),请填空。 #include stdio.h int strcmp ( chat * s, char * t) while( * s * t * s= 3
13、s+;t+; return 4; ) (分数:40.00)填空项 1:_填空项 1:_59.计算机软件分为系统软件和应用软件,操作系统属于 1。(分数:40.00)填空项 1:_60.以下函数 rotate 的功能是:将 a 所指 N 行 N 列的二维数组中的最后一行放到 b 所指二维数组的第 0 列中,把 a 所指二维数组中的第 0 行放到 b 所指二维数组的 最后一列中,b 所指二维数组中的其他数据不变。 # define N 4 void rotate(int aN,int bN) int i,j; for(i=0;i1 ; 2 =aN-1i; (分数:40.00)填空项 1:_61.以
14、下程序通过函数 sunFun 求 (分数:40.00)填空项 1:_62.某微型机的运算速度为 2MIPS,则该微型机每秒执行 1 条指令。(分数:40.00)填空项 1:_63.计算机软件分为系统软件和应用软件,UNIX 系统属于 1。(分数:40.00)填空项 1:_64.当运行以下程序时,输入 abcd,程序的输出结果是: 1。 insert(char str) int i; i=strlen(str); while(i0) str2*i=stri; str2*i-1= *; i-; printf(“%s/n“,str); main2 char str40; scanf(“%s/n“,s
15、tr); insert(str); (分数:40.00)填空项 1:_65.有以下语句段 int n1=10,n2=20; printf(“ 1”,n1.n2); 要求按以下格式输出 n1 和 n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20 (分数:40.00)填空项 1:_66.面向对象的模型中,最基本的概念是对象和 1。(分数:-1.00)填空项 1:_67.在面向对象的程序设计中,类描述的是具有相似性质的一组 1。(分数:-1.00)填空项 1:_68.类是一个支持集成的抽象数据类型,而对象是类的 1。(分数:-1.00)填空项 1:_69.数据的基本单位是 1。(分
16、数:-1.00)填空项 1:_70.用树型结构表示实体类型及实体间联系的数据模型称为 1(分数:-1.00)填空项 1:_计算机二级(C)13 答案解析(总分:645.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:40,分数:60.00)1.有以下程序: main( ) unsigned char a,b; a=4|3; b=4 printf(“%d %d/n”,a,b(; 执行后输出结果是( )。 (分数:1.50)A.7 0 B.0 7C.1 1D.43 0解析:2.以下程序中函数 f( )的功能是将 n 个字符串按由大到小的顺序进行排序。 #
17、includestring.h void f(char p 10,int n) char t20; int i,j; for(i =O;i n-1 ;i + ) for(j =i + 1 ;j n;j + ) if(strcmp(p i ,pj ) 0) strcpy(t,pi);strcpy(pi ,pj );strcpy(pj ,t); main ( ) char p 10 = “abc“,“aabdfg“,“abbd“,“dcdbe“, “cd“ ; int i; f(p,5); printf(“%d/n“,strlen(pO ) ); 程序运行后的输出结果是( )。 (分数:1.50)
18、A.6B.4C.3 D.5解析:对字符串比较的方法是依次对两字符串对应位置上的字符两两比较,当出现第一对不相同的字符 时,即由这两个字符(ASCII 码值)决定所在串的大小。3.有以下程序: main( ) int i,n=0; for(i=2;iA.n=5B.n=2C.n=3D.n=4 解析:4.以下不能定义为用户标识符的是_。 (分数:1.50)A.MainB._0C._intD.sizeof 解析: C 语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 注意:大写字母和小写字母被认为是两个不同的字符。A 中 Main 与主函数名 main 不同。5.
19、有以下程序: main( ) char str 10=“China“,“Beijing“,*p=str; printf(“%s/n“,p+10); 程序运行后的输出结果是( )。 (分数:1.50)A.ChinaB.Bejing C.ngD.ing解析:6.下列叙述中正确的是_。 (分数:1.50)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对 解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件 中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软
20、件测试贯穿 整个软件生命期,调试主要在开发阶段。为了达到更好的测试效果,应该由独立的第三方来构造测试。因 为从心理学角度讲,程序人员或设计方在测试自己的程序时,要采取客观的态度是程度不同地存在障碍的。软件的运行和维护是指将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必 要而且可能的扩充和删改。7.下列关于单目运算符+、-的叙述中正确的是( )。(分数:1.50)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 double 型变量和 floa
21、t 型变量D.它们的运算对象可以是 char 型变量、int 型变量和 float 型变量 解析:8.在 Windows 环境下,下列叙述中正确的是( )。(分数:1.50)A.在“开始“菜单中可以增加项目,也可以删除项目 B.在“开始“菜单中不能增加项目,也不能删除项目C.在“开始“菜单中可以增加项目,但不能删除项目D.在“开始“菜单中不能增加项目,但可以删除项目解析:9.当把以下四个表达式用作 if 语句的控制表达式时,有一个选项与其他三个选项含义 不同,这个选项是_。 (分数:1.50)A.k%2B.k%2=1C.(k%2)!=0D.!k%2=1 解析:本题选项 A、B、C 中表达式用作
22、 if 语句控制表达式时,其值一致,即判断 k 的值是否为奇数,若 为奇数,其表达式为真,否则为假;而选项 D 的表达式“!k%2=1”相当于“!(k%2)=1”,若 k 的值为奇 数,则此表达式的值为假。10.在函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 又调用了函数 funA,则( )。(分数:1.50)A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C 语言中不允许这样的递归调用 解析:11.以下叙述中错误的是_。 (分数:1.50)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程
23、序运行 D.赋值表达式末尾加分号就构成赋值语句解析:“空语句出现在任何位置都不会影响程序运行”这句话是错误的,例如在 for 循环中,循环条件语 句为空时,则不判断循环条件,循环将无终止地进行下去,导致了此循环为死循环。12.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;b0;解析:自加或自减运算的操作数不能是表达式。26.程序中头文件 typel.h 的内容是: #define N 5 #define M1 N*3 程序如下: #include“typel.h“ #define M2 N *2 main( ) int
24、 i; i=M1+M2; printf(“%d/n“,i); 程序编译后运行的输出结果是( )。 (分数:1.50)A.10B.20C.25 D.30解析:27.有以下程序: main( ) int a=3,b=4,c=5,d=2; if(ab) if(bc) printf(“%d“,d+ +1); else printf(“%d“,+d +1); printf(“%d/n“,d); 程序运行后的输出结果是( )。 (分数:1.50)A.2 B.3C.43D.44解析:28.以下能正确定义二维数组的是( )。(分数:1.50)A.int a 3;B.int a 3=22*3; C.int a
25、3=;D.int a23=1,2,3,4;解析:29.以下叙述中错误的是( )。(分数:1.50)A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以B.在程序结束时,应当用函数 fclose( )关闭已打开的文件C.在利用函数 fread( )从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D.不可以用 FILE 定义指向二进制文件的文件指针 解析:30.有以下程序: struct STU char name10; int num; float TotalScore; ; void f(struct STU *p) struct STU s2=“SunDan“,20044,5
26、50,“Penghua“,20045,537,*q=s; +p; +q; *p=*q; main() struct STU s3= “YangSan“,20041,703,“LiSiGuo“,20042,580; f(s); printf(“%s %d %3.0f/n“,s1.name, s1.num,s1.TotalScore); 程序运行后的输出结果是_。 (分数:1.50)A.SunDan 20044 550B.Penghua 20045 537 C.LiSiGuo 20042 580D.SunDan 20041 703解析:本题将结构体数组 s 的首地址传递给了结构体指针变量 p,并在
27、函数 f 中改变了指针变量 p 所指向的 第二个结构体中的成员变量,这一改变,也就是改变了主函数中 s1的成员变量,故程序输出的值为 Penghua 20045 537。31. 有以下程序 main( ) int i=10,j=1; printf(“%d,%d/n“,i-,+j); 执行后输出的结果是( )。 (分数:1.50)A.9,2B.10,2 C.9,1D.10,1解析:32.以下选项中非法的表达式是( )。(分数:1.50)A.0)按位与( struct node *next; Node; Node fun(char s) /* 建立链表*/ void disp(Node *h) N
28、ode *p; p=h-next; while(= 1 ) printf(“%s/n“,p-sub);p= 2 ; main3 Node *hd; hd=fun4; disp(hd);printf(“/n“); (分数:40.00)填空项 1:_ (正确答案:p!=NULL 或 p 或 p!=0 或 p!=/0 , p-next 或 (*p).next)解析:此题主要考核的是用指针处理链表。自定义结构体类型名为 Node,并定义一个指向结点类型的指针 next。用 Node 来定义头结点指针变量 h,并定义另一个指针变量 p 指向了第一个结点,在满足 p 未指向最 后一个结点的空指针时,输出
29、p 所指向结点的字符串,所以第一个空填 p!=NULL 或 p 或 p!=0 或 p!=/0, 然后将 p 指向下一个非空结点,所以第二个空填 p-next 或与其等效的形式,反复执行直到所有的结点都输 出,即遇到 p 的值为 NULL。53.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数 据独立性最高的阶段是 1。(分数:40.00)填空项 1:_ (正确答案:数据库系统)解析:在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据 独立性最高的阶段是数据库系统。54.以下程序运行后的输出结果是 1 main( ) int i,j,a
30、3=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) for(j=i+1;j3;j+) aji=0; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%d “,aij); printf(“/n“); (分数:40.00)填空项 1:_ (正确答案:1 2 3 0 5 6 0 0 9)解析:55.从 Windows 环境进入 MS-DOS 方式后,返回 Windows 环境的 DOS 命令为 1。(分数:40.00)填空项 1:_ (正确答案:EXIT)解析:56.以下程序运行后的输出结果是 1。 main2 int a,b,c; a=10; b=2
31、0; c=(a%b1); printf(“%d %d %d/n“,a,b,c); (分数:40.00)填空项 1:_ (正确答案:10 20 0)解析:本题中“(a%b1)”的运算顺序为先算括号算术运算符关系运算符逻辑运算符。其中 a%b=10,a/b=0,所以 a%b1 值也是 0,故整个表达式的结果为 0,所以输出的 a,b,c 的值为 10 20 0。57.已有文本文件 test.txt,其中的内容为:Hello,everyone!。以下程序中,文件 test.txt 已正确为“读”而打开,由此文件指针 fr 指向文件,则程序的输出结果是 1。 #include stdio.h main
32、( ) FILE *fr; char str40; fgets(str,5,fr); printf(“%s/n“,str); fclose(fr); (分数:40.00)填空项 1:_ (正确答案:Hell)解析:58.函数 strcmp1 的功能是对两个字符串进行比较,当 s 所指字符串和 t 所指字符串相等时,返回值为0; 当 s 所指字符串大于 t 所指字符串时,返回值大于 0;当 s 所指字符串小于 t 所指字符串时,返回值小于 0(功能等同于库函数 strcmp2 ),请填空。 #include stdio.h int strcmp ( chat * s, char * t) whi
33、le( * s * t * s= 3 s+;t+; return 4; ) (分数:40.00)填空项 1:_ (正确答案:*)填空项 1:_ (正确答案:或 t0)解析:对字符串比较的方法是依次对两字符串对应位置上的字符两两比较,当出现第一对不相同的 字符时,即由这两个字符(ASC码值)决定所在串的大小。 59.计算机软件分为系统软件和应用软件,操作系统属于 1。(分数:40.00)填空项 1:_ (正确答案:系统软件)解析:计算机软件可分为系统软件和应用软件,操作系统属于系统软件。60.以下函数 rotate 的功能是:将 a 所指 N 行 N 列的二维数组中的最后一行放到 b 所指二维数
34、组的第 0 列中,把 a 所指二维数组中的第 0 行放到 b 所指二维数组的 最后一列中,b 所指二维数组中的其他数据不变。 # define N 4 void rotate(int aN,int bN) int i,j; for(i=0;i1 ; 2 =aN-1i; (分数:40.00)填空项 1:_ (正确答案:a0i , bi0)解析:根据题意,语句“biN-1= -|_|-;”的作用是把 a 所指二维数组中的第 0 行放到 b 所指二维数组的 最后一列中,在 a 数组中,第 0 行用 a0来表示,所以第 19 空填 a0i;语句“ -|_|- =aN-1i;”的作用 是将 a 所指二维
35、数组中的最后一行放到 b 所指二维数组的第 0 列中,b 数组中第 0 列用 b0来表示,所以,第 20 空填 bi0。61.以下程序通过函数 sunFun 求 (分数:40.00)填空项 1:_ (正确答案:x)解析:62.某微型机的运算速度为 2MIPS,则该微型机每秒执行 1 条指令。(分数:40.00)填空项 1:_ (正确答案:2000000)解析:MIPS 的意思为每秒百万条指令(Million Instructions Per Second)。63.计算机软件分为系统软件和应用软件,UNIX 系统属于 1。(分数:40.00)填空项 1:_ (正确答案:系统软件)解析:64.当运
36、行以下程序时,输入 abcd,程序的输出结果是: 1。 insert(char str) int i; i=strlen(str); while(i0) str2*i=stri; str2*i-1= *; i-; printf(“%s/n“,str); main2 char str40; scanf(“%s/n“,str); insert(str); (分数:40.00)填空项 1:_ (正确答案:a*b*c*d*)解析:此题主要考核的是函数与一个简单算法结合在一起的应用。首先定义一个 int 型变量来存放字符串 str 的长度,执行 while 条件语句,通过分析可知,字符串第 2*i 项的
37、值可由第 i 项的值得到;第 2*i-1 项直 接赋值为*号,i 减 1,如此反复直到不满足 i0 的条件时,输出运行后的字符串。65.有以下语句段 int n1=10,n2=20; printf(“ 1”,n1.n2); 要求按以下格式输出 n1 和 n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20 (分数:40.00)填空项 1:_ (正确答案:n1=%d/nn2=%d)解析:66.面向对象的模型中,最基本的概念是对象和 1。(分数:-1.00)填空项 1:_ (正确答案:类)解析:面向对象模型中,最基本的概念是对象和类。对象是现实世界中实体的模型化;将属性集和方法集相同
38、的所有对象组合在一起,可以构成一个类。67.在面向对象的程序设计中,类描述的是具有相似性质的一组 1。(分数:-1.00)填空项 1:_ (正确答案:对象)解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。68.类是一个支持集成的抽象数据类型,而对象是类的 1。(分数:-1.00)填空项 1:_ (正确答案:实例)解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,对象则是其对应类的一个实例。69.数据的基本单位是 1。(分数:-1.00)填空项 1:_ (正确答案:数据元素)解析:数据(Data)实际上就是描述事物的符号记录。70.用树型结构表示实体类型及实体间联系的数据模型称为 1(分数:-1.00)填空项 1:_ (正确答案:层次模型)解析:用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状 模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。