1、国家计算机二级(C)4 及答案解析(总分:124.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:50,分数:100.00)1.对于一个正常运行的 C 程序,以下叙述中正确的是【 】。(分数:2.00)A.程序的执行总是从 main 函数开始,在 main 函数结束B.程序的执行总是从程序的第一个函数开始,在 main 函数结束C.程序的执行总是从 main 函数开始,在程序的最后一个函数中结束D.程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束2.在 Windows 环境下,下列叙述中正确的是( )。(分数:2.00)A.在“开始
2、“菜单中可以增加项目,也可以删除项目B.在“开始“菜单中不能增加项目,也不能删除项目C.在“开始“菜单中可以增加项目,但不能删除项目D.在“开始“菜单中不能增加项目,但可以删除项目3.有以下程序: main() int i=1,j=2,k=3; if(i+=15.在 Internet 中,用于在计算机之间传输文件的协议是( )。(分数:2.00)A.TELNETB.BBSC.FTPD.WWW6.下列程序的输出结果是( )。 main( ) int i,s=0; for(i=1;i10;i+=2) s+=i+1; printf(“%d/n”,s); (分数:2.00)A.自然数 19 的累加和B
3、.自然数 110 的累加和C.自然数 19 中的奇数之和D.自然数 110 中的偶数之和7.有以下程序,其中u 表示按无符号整数输出 main() unsigned int X=OXIFFF;* X 的初值为十六进制数 * printf(“un“,X); 程序运行后的输出结果是【 】。 (分数:2.00)A.-1B.65535C.32767D.0XFFFF8.现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中连续 的三个结点。 struct node char data; struct node *next; *p,*q,*r; (分数:2.00)A.q-next=r
4、-next; p-next=r;r-next=q;B.p-next=r; q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;p-next=r;q-next=r-next;9.有三个关系 R、S 和 T 如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交10.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是(分数:2.00)A.12345ABCDEB.EDCBA54321C.ABCDEl2345D.5432lEDCBA11.若变量
5、x、y 已正确定义并赋值,以下符合 C 语言语法的表达式是【 】。(分数:2.00)A.+x,y=x-B.x+l=yC.x=x+10=x+yD.double(x)1012.下列条件语句中,功能与其他语句不同的是( )。(分数:2.00)A.if(a)printf(“%d/n“,x); else printf(“%d/n“,y);B.if(a=0)printf(“%d/n“,y); else printf(“%d/n“,x);C.if (a!=0)printf(“%d/n“,x); else printf(“%d/n“,y);D.if(a=0)printf(“%d/n“,x); else pri
6、ntf(“%d/n“,y);13.有以下程序: main( ) char s “Yes/n/No“,*ps=s; puts(ps+4); *(ps+4)=0; puts(s); 程序运行后的输出结果是(选项 D 中的第一行是空行)( )。 (分数:2.00)A.n/No Yes /NoB./No YesC.n/NO Yes /NoD./No Yes14.1MB 等于( )。(分数:2.00)A.1000 字节B.1024 字节C.10001000 字节D.10241024 字节15.有以下程序: main() int a=1,b; for(b=1;b=10;b+) if(a=8)break;
7、if(a%21)a+=5;continue; a-=3; printf(“%d/n“,b); 程序运行后的输出结果是【 】。(分数:2.00)A.3B.4C.5D.616.在 Internet 中,用于在计算机之间传输文件的协议是( )。(分数:2.00)A.TELNETB.BBSC.FTPD.WWW17.有以下程序: #define f(x) x*x main( ) int i; i=f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (分数:2.00)A.28B.22C.16D.418.有以下程序: void sort(int a,int n) in
8、t i,j,t; for(i=0;in;i+) for(j=i+1;n;j+) if(aiaj) t=ai; ai=aj; 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,“,aa i); printf(“/n“); 程序运行后的输出结果是【 】。 (分数:2.00)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.1,2,9,8,7,6,5,4,3,10,19.有以下程序: ma
9、in() char s=“159“,*p; p=s; printf(“%c“,*p+);printf(“%c“,*p+); 程序运行后的输出结果是【 】。(分数:2.00)A.15B.16C.12D.5920.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于(分数:2.00)A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段21.以下叙述中错误的是【 】。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句22.有以下程序 main( ) int k=4,n=0;
10、for( ; nk ; ) n+; if(n%3!=0) continue; k-; printf(“%d,%d/n“,k,n); 程序运行后的输出结果是( )。 (分数:2.00)A.1,1B.2,2C.3,3D.4,423.若 fp 已正确定义并指向某个文件,当未遇到该文件结束标志时函数 feof(fp)的值为( )。 (分数:2.00)A.0B.1C.-1D.一个非 0 值24.以下数组定义中错误的是【 】。(分数:2.00)A.int x 3:0;B.int x23=l,2,3,4,5,6;C.int X 3=l,2,3,4,5,6;D.int x23=l,2,3,4,5,6;25.在
11、 Internet 中,用于在计算机之间传输文件的协议是( )。(分数:2.00)A.TELNETB.BBSC.FTPD.WWW26. 有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中的三个连续结点。 struct node int data; struct node *next; *p, *q, *r; (分数:2.00)A.r-next=q; q-next=r-next; p-next=r;B.q-next=r-next; p-next=r; r-next=q;C.p-next=r; q-next=r-next; r-next=q;D.q-next=r-next;
12、 r-next=q; p-next=r;27.下列定义变量的语句中错误的是【 】。(分数:2.00)A.int_int;B.double int_;C.char For;D.float US$;28.以下选项中非法的表达式是( )。(分数:2.00)A.0c,a+cb,b+ca。请填空。 main1 float a,b,c; scanf(“%f%f%f“, if(= 2)printf(“YES/n“); /*a、b、c 能构成三角形*/ else printf(“NO/n“); /*a、b、c 不能构成三角形*/ (分数:2.00)填空项 1:_53.数据独立性分为逻辑独立性与物理独立性。当数
13、据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为 1。(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是 1。 main2 char c1,c2; for(c1=0,c2=9;c1填空项 1:_55. E-mail 地址由域名和用户名两部分组成,它们之间用分隔,其中在后面的部分是 1。(分数:2.00)填空项 1:_56.以下程序运行后的输出结果是 1。 main2 char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(“%d %f/n“,n,x); (分数:2.00)填空
14、项 1:_57.设函数 findbig( )已定义为求 3 个数中的最大值。以下程序将利用函数指针调用 findbig 函数。请填空。 main( ) int findbig(int,int,int); int (*f)( ),x,y,z,big; f= 1; scanf(“%d%d%d“, big=(*f)(x,y,z); printf(“big=%d/n“,big); (分数:2.00)填空项 1:_58.支持 Internet 基本服务的协议是 1。(分数:2.00)填空项 1:_59.以下函数 sstrcat1 的功能是实现字符串的连接,即将 t 所指字符串复制到 s 所指字符串的尾部
15、。例如:s 所指字符串为 abcd,t 所指字符串为 efgh,函数调用后 s 所指字符串为 abcdefgh。请填空。 #include string.h void sstrcat(char *s,char *t) int n; n=strlen(s); while(*(s+n)= 2s+;t+; (分数:2.00)填空项 1:_60.某微型机的运算速度为 2MIPS,则该微型机每秒执行 1 条指令。(分数:2.00)填空项 1:_61.以下程序运行后的输出结果是 1 。 main2 struct NODE s3=1,/0,2,/0,3,/0,*p,*q,*r; int sum=0; s0.
16、next=s+1; s1.next=s+2; s2.next=s; p=s; q=p-next; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:2.00)填空项 1:_62.下面程序和运行运行结果是 1。 typedef union student char name 10; long sno; char sex; float score 4; STU; main ( ) STU a5; prinff( “% d/n“, sizeof(a) ); (分数:2.00)填空项 1:_国家计算机二级(
17、C)4 答案解析(总分:124.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:50,分数:100.00)1.对于一个正常运行的 C 程序,以下叙述中正确的是【 】。(分数:2.00)A.程序的执行总是从 main 函数开始,在 main 函数结束 B.程序的执行总是从程序的第一个函数开始,在 main 函数结束C.程序的执行总是从 main 函数开始,在程序的最后一个函数中结束D.程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束解析:一个 C 程序总是从 main 函数开始执行,而不论其在程序中的位置。在 main 函数中可以调用
18、程序中的其他函数,而其他函数却不可以调用 main 函数。程序最后再从 main 函数中结束。2.在 Windows 环境下,下列叙述中正确的是( )。(分数:2.00)A.在“开始“菜单中可以增加项目,也可以删除项目 B.在“开始“菜单中不能增加项目,也不能删除项目C.在“开始“菜单中可以增加项目,但不能删除项目D.在“开始“菜单中不能增加项目,但可以删除项目解析:3.有以下程序: main() int i=1,j=2,k=3; if(i+=1解析:5.在 Internet 中,用于在计算机之间传输文件的协议是( )。(分数:2.00)A.TELNETB.BBSC.FTP D.WWW解析:6
19、.下列程序的输出结果是( )。 main( ) int i,s=0; for(i=1;i10;i+=2) s+=i+1; printf(“%d/n”,s); (分数:2.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中的奇数之和D.自然数 110 中的偶数之和 解析:7.有以下程序,其中u 表示按无符号整数输出 main() unsigned int X=OXIFFF;* X 的初值为十六进制数 * printf(“un“,X); 程序运行后的输出结果是【 】。 (分数:2.00)A.-1B.65535 C.32767D.0XFFFF解析:“u“格式符用来以十进
20、制形式输出无符号整型变量,其取值范围是 065535。,本题中无符号整型变量 x=OXFFFF(十六进制)表示的是无符号整型变量的最大值 65535。8.现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中连续 的三个结点。 struct node char data; struct node *next; *p,*q,*r; (分数:2.00)A.q-next=r-next; p-next=r;r-next=q;B.p-next=r; q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q
21、;p-next=r;q-next=r-next; 解析:选项 D 中首先将 q 赋给 r-next,也就是将结点 q 的地址存放在结点 r 的指针域中;接着将 r 赋给 p-next, 也就是将结点 r 的地址存放在结点 p 的指针域中,此时完成了 q 和 r 所指结点的交换。q-next=r-next 的目 的是想将 q 的指针域指向下一个结点的数据地址,但由于一开始执行了 r-next= q,即已将 r 的指针域中存 放了 q 结点的地址,所以再做操作“q-next=r-next”就相当于将 q 指向了其本身,也就是和下一个结点断开了,所以选项 D 操作错误。9.有三个关系 R、S 和 T
22、 如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交 解析:在关系运算中,交的定义如下:设 R1 和 R2 为参加运算的两个关系,它们具有相同的度 n,且相对应的属性值取自同一个域,则 R1R2 为交运算,结果仍为度等于 n 的关系,其中,交运算的结果既属于R1 又属于 R2。10.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是(分数:2.00)A.12345ABCDEB.EDCBA54321 C.ABCDEl2345D.5432lEDCBA解析:栈的特点是先进后出,所以全部入栈后再全部出栈所得的序列顺序必然与入
23、栈序列的顺序相反。11.若变量 x、y 已正确定义并赋值,以下符合 C 语言语法的表达式是【 】。(分数:2.00)A.+x,y=x- B.x+l=yC.x=x+10=x+yD.double(x)10解析:选项 A)为 C 语言中的逗号表达式。赋值表达式的左侧不能是表达式。在进行强制类型转换时,数据类型两边的圆括号不能省略。12.下列条件语句中,功能与其他语句不同的是( )。(分数:2.00)A.if(a)printf(“%d/n“,x); else printf(“%d/n“,y);B.if(a=0)printf(“%d/n“,y); else printf(“%d/n“,x);C.if (
24、a!=0)printf(“%d/n“,x); else printf(“%d/n“,y);D.if(a=0)printf(“%d/n“,x); else printf(“%d/n“,y); 解析:13.有以下程序: main( ) char s “Yes/n/No“,*ps=s; puts(ps+4); *(ps+4)=0; puts(s); 程序运行后的输出结果是(选项 D 中的第一行是空行)( )。 (分数:2.00)A.n/No Yes /NoB./No Yes C.n/NO Yes /NoD./No Yes解析:14.1MB 等于( )。(分数:2.00)A.1000 字节B.1024
25、 字节C.10001000 字节D.10241024 字节 解析:15.有以下程序: main() int a=1,b; for(b=1;b=10;b+) if(a=8)break; if(a%21)a+=5;continue; a-=3; printf(“%d/n“,b); 程序运行后的输出结果是【 】。(分数:2.00)A.3B.4 C.5D.6解析:break 和 continue 的区别是:continue 语句只结束本次循环,而不是终止整个循环的执行;而break 语句则是结束整个循环过程,不再判断执行的条件是否成立。 16.在 Internet 中,用于在计算机之间传输文件的协议是
26、( )。(分数:2.00)A.TELNETB.BBSC.FTP D.WWW解析:17.有以下程序: #define f(x) x*x main( ) int i; i=f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (分数:2.00)A.28 B.22C.16D.4解析:18.有以下程序: void sort(int a,int n) int i,j,t; for(i=0;in;i+) for(j=i+1;n;j+) if(aiaj) t=ai; ai=aj; aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i;
27、 sort(aa+2,5); for(i=0;i10;i+)printf(“%d,“,aa i); printf(“/n“); 程序运行后的输出结果是【 】。 (分数:2.00)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.1,2,9,8,7,6,5,4,3,10,解析:本题 sort 函数的作用是将指定的数由大到小排序。主调函数“sort(aa+2,5);“中的实参 aa+2 是指aa2的地址,将其传给了形参 a,使得形参中 a0的值为主函数中 aa2的值,即 3;实参中的 5 传绐形参中的 n
28、,在 sort 函数中起着限制循环次数的作用,即使得参加排序的只有 5 个数,从 aa2到 aa6,所以本题输出的结果是 1,2,7,6,5,4,3,8,9,10,。 19.有以下程序: main() char s=“159“,*p; p=s; printf(“%c“,*p+);printf(“%c“,*p+); 程序运行后的输出结果是【 】。(分数:2.00)A.15 B.16C.12D.59解析:本题通过“p=s“将指针变量 p 指向字符数组 s,在第一次输出时,由于+和*为同一优先级,“*p+“相于“*(p+)“。 p 指向 s1,输出为 s1的值。 20.在数据库设计中,将 E-R 图
29、转换成关系数据模型的过程属于(分数:2.00)A.需求分析阶段B.概念设计阶段C.逻辑设计阶段 D.物理设计阶段解析:数据库的逻辑设计分为:将概念模型转换成一般的数据模型;将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。把概念模型转换成关系数据模型就是把 E-R 图转换成一组关系模式。21.以下叙述中错误的是【 】。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:“空语句出现在任何位置都不会影响程序运行“这句话是错误的,例如在 for 循环中,循环条件语句为空时,则
30、不判断循环条件,循环将无终止地进行下去,导致了此循环为死循环。 22.有以下程序 main( ) int k=4,n=0; for( ; nk ; ) n+; if(n%3!=0) continue; k-; printf(“%d,%d/n“,k,n); 程序运行后的输出结果是( )。 (分数:2.00)A.1,1B.2,2C.3,3 D.4,4解析:23.若 fp 已正确定义并指向某个文件,当未遇到该文件结束标志时函数 feof(fp)的值为( )。 (分数:2.00)A.0 B.1C.-1D.一个非 0 值解析:24.以下数组定义中错误的是【 】。(分数:2.00)A.int x 3:0;
31、B.int x23=l,2,3,4,5,6; C.int X 3=l,2,3,4,5,6;D.int x23=l,2,3,4,5,6;解析:二维数组的初始化有以下几种形式:分行进行初始化。不分行的初始化。部分数组元素初始化。省略第一维的定义,不省略第二维的定义。选项 B 等号右边分了 3 行,大于等号左边数组的行数 2。25.在 Internet 中,用于在计算机之间传输文件的协议是( )。(分数:2.00)A.TELNETB.BBSC.FTP D.WWW解析:26. 有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中的三个连续结点。 struct node int d
32、ata; struct node *next; *p, *q, *r; (分数:2.00)A.r-next=q; q-next=r-next; p-next=r; B.q-next=r-next; p-next=r; r-next=q;C.p-next=r; q-next=r-next; r-next=q;D.q-next=r-next; r-next=q; p-next=r;解析:27.下列定义变量的语句中错误的是【 】。(分数:2.00)A.int_int;B.double int_;C.char For;D.float US$; 解析:C 语言规定,变量的标识符只能由字母、数字或下划线
33、3 种字符组成,且第一个字符必须为字母或下划线。在 C 语言中大写字母和小写字母被认为是两个不同的字符。据此规定 A)、B)、C)三个选项是正确的,而 D)选项因为包含有特殊字符$,因而其不是合法的变量名称。28.以下选项中非法的表达式是( )。(分数:2.00)A.0c,a+cb,b+ca。请填空。 main1 float a,b,c; scanf(“%f%f%f“, if(= 2)printf(“YES/n“); /*a、b、c 能构成三角形*/ else printf(“NO/n“); /*a、b、c 不能构成三角形*/ (分数:2.00)填空项 1:_ (正确答案:(a+bc) for
34、(c1=0,c2=9;c1填空项 1:_ (正确答案:918273645)解析:本题程序的作用是通过 for 循环将 0-9 这 10 个数字从前向后,同时也从后向前依次输出。55. E-mail 地址由域名和用户名两部分组成,它们之间用分隔,其中在后面的部分是 1。(分数:2.00)填空项 1:_ (正确答案:域名)解析:56.以下程序运行后的输出结果是 1。 main2 char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(“%d %f/n“,n,x); (分数:2.00)填空项 1:_ (正确答案:2 20.000
35、000)解析:由于赋值运算符按照“自右而左“的结合顺序,题中赋值表达式“x=f*=n/=(c=50)“的求解步骤如下:首先,进行“n/=(c=50)“的运算,相当于 n=n/c=100/50=2;其次,进行“f*=n“的运算,相当于“f=f*n“,故f=20.000000;最后,得出 x 的值为 20.000000。 57.设函数 findbig( )已定义为求 3 个数中的最大值。以下程序将利用函数指针调用 findbig 函数。请填空。 main( ) int findbig(int,int,int); int (*f)( ),x,y,z,big; f= 1; scanf(“%d%d%d“
36、, big=(*f)(x,y,z); printf(“big=%d/n“,big); (分数:2.00)填空项 1:_ (正确答案:findbig)解析:58.支持 Internet 基本服务的协议是 1。(分数:2.00)填空项 1:_ (正确答案:TCP/IP)解析:59.以下函数 sstrcat1 的功能是实现字符串的连接,即将 t 所指字符串复制到 s 所指字符串的尾部。例如:s 所指字符串为 abcd,t 所指字符串为 efgh,函数调用后 s 所指字符串为 abcdefgh。请填空。 #include string.h void sstrcat(char *s,char *t) i
37、nt n; n=strlen(s); while(*(s+n)= 2s+;t+; (分数:2.00)填空项 1:_ (正确答案:*t)解析:本题解题的关键在理解“*(s+n)“,其中 s 代表字符串 s 的首地址,n 是字符串 s 的长度,*(s+n)代表了字符串 s 最后一个字符的后一个字符,即“/0“,根据题意, “/0“所在位置应该赋值为字符串 t 的第一个字符,字符串 t 的其他字符根据循环,依次赋值到 s 所指字符串的尾部,所以本题应填“*t。 60.某微型机的运算速度为 2MIPS,则该微型机每秒执行 1 条指令。(分数:2.00)填空项 1:_ (正确答案:2000000)解析:
38、MIPS 的意思为每秒百万条指令(Million Instructions Per Second)。61.以下程序运行后的输出结果是 1 。 main2 struct NODE s3=1,/0,2,/0,3,/0,*p,*q,*r; int sum=0; s0.next=s+1; s1.next=s+2; s2.next=s; p=s; q=p-next; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:2.00)填空项 1:_ (正确答案:5)解析:程序通过语句“s0.next=s+1; s1.
39、next=s+2; s2.next=s;”将结构体变量 s 中各结点链接成了一个 循环链表,即最后一个结点的指针域指向了头结点(s2.next=s;),整个链表形成一个环,并通过语句“p=s; q=p-next; r=q-next;”将结构体指针变量 p、q、r 指向了各结点,故本题输出的 sum=3+2=5。62.下面程序和运行运行结果是 1。 typedef union student char name 10; long sno; char sex; float score 4; STU; main ( ) STU a5; prinff( “% d/n“, sizeof(a) ); (分数:2.00)填空项 1:_ (正确答案:80)解析: