1、2004 年 4月国家二级( C语言)笔试真题试卷及答案与解析 1 1MB等于 ( ) ( A) 1000字节 ( B) 1024字节 ( C) 10001000字节 ( D) 10241024字节 2 与十六进制数 200等值得十进制数为 ( ) ( A) 256 ( B) 512 ( C) 1024 ( D) 2048 3 所谓 “裸机 ”是指 ( ) ( A)单片机 ( B)单板机 ( C)不装备任何软件的计算机 ( D)只装备操作系统的计算机 4 能将高级语言编写的源程序转换为目标程序的是 ( ) ( A)链接程 序 ( B)解释程序 ( C)编译程序 ( D)编辑程序 5 在 64为
2、计算机中,一个字长所占字节数为 ( ) ( A) 64 ( B) 8 ( C) 4 ( D) 1 6 在 Windows环境下,当一个应用程序窗口被最小化后,该应用程序 ( ) ( A)继续在后台运行 ( B)继续在前台运行 ( C)终止运行 ( D)暂停运行 7 在 Windows环境下,能实现窗口移动的操作是 ( ) ( A)用鼠标拖动窗口中的任何部位 ( B)用鼠标拖动窗口的边框 ( C)用鼠标拖动窗口的控制按钮 ( D)用鼠标拖动窗口的 标题栏。 8 在 Windows环境下, PrintScreen键的作用是 ( ) ( A)打印当前窗口的内容 ( B)打印屏幕内容 ( C)复制屏幕
3、到剪贴板 ( D)复制当前窗口到剪贴板 9 Internet的通信协议是 ( ) ( A) TCP/IP ( B) BBS ( C) WWW ( D) FTP 10 下列叙述中正确的是 ( ) ( A)计算机病毒只感染可执行文件 ( B)计算机病毒只感染文本文件 ( C)计算机病毒只能通过软件复制的方式进行传播 ( D)计算机病毒可以通过网络或读写磁盘方式进行传播 11 一个算法应该具有 “确定性 ”等 5个特性,下面对另外 4个特性的描述中错误的是 ( ) ( A)有零个或多个输入 ( B)有零个或多个输出 ( C)有穷性 ( D)可行性 12 以下叙述中正确的是 ( ) ( A) C语言的
4、源程序不必通过编译就可以直接运行 ( B) C语言中的每条可执行语句最终都将被转换成二进制的机器指令 ( C) C源程序经编译形成的二进制代码可以直接运行 ( D) C语言中的函数不可以单独进行编译 13 以下符合 C语言语法的实型常量是 ( ) ( A) 1.2 ( B) 3.14.159E ( C) 0.0005 ( D) E15 14 以下 4组用户定义标识符中,全部合法的一组是( ) ( A) _main enclude sin ( B) If -max turbo ( C) txt REAL 3COM ( D) int k_2 _001 15 若以下选项中的变量已正确定义,则正确的赋
5、值语句是( ) ( A) x1=26.8%3 ( B) 1+2=x2 ( C) x3=0x12 ( D) x4=1+2=3; 16 设有以下定义 int a=0; double b=1.25; char c=A; #define d 2 则下面语句中错误的是( ) ( A) a+; ( B) b+; ( C) c+; ( D) d+; 17 设有定义: float a=2,b=4,h=3;,以下 C语言表达式与代数式 1/2(a+b) 计算结果不相符的是( ) ( A) (a+b)*h/2 ( B) (1/2)*(a+b)*h ( C) (a+b)*h*1/2 ( D) h/2*(a+b) 1
6、8 有以下程序 main( ) int x=102, y=012; printf(“%2d,%2dn”,x,y); 执行后输出结果是( ) ( A) 10,01 ( B) 002,12 ( C) 102,10 ( D) 02,10 19 以下 4个选项中,不能看作一条语句的是( ) ( A) ; ( B) a=0,b=0,c=0; ( C) if(a0); ( D) if(b=0) m=1;n=2; 20 设有定义: int a,*pa=以下 scanf语句中能正确为变量 a读入数据的是( ) ( A) scanf(“%d”,pa); ( B) scanf(“%d”,a); ( C) scan
7、f(“%d”, ( D) scanf(“%d”,*pa); 21 以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( ) ( A) if(ab) else k=0; ( B) if(ab)|(bc) k=1 else k=0; ( C) if(ab) k=1; else if(bc) k=1; else k=0; 22 有以下程序 main( ) char k; int l; for(i=1;i3;i+) scanf(“%c”, switch(k) case 0: printf(“anothern”); case 1: printf(“numbern”); 程序运行时,从键盘输
8、入: 01,程序执行后的输出结果是( ) ( A) another number ( B) another number another ( C) another number number ( D) number number 23 下列程序的输出结果是( ) main( ) int x=0,y=5,z=3; while(z- 0i-) sp; sum( printf(“%dn”,aa0); ( A) 4 ( B) 3 ( C) 2 ( D) 1 34 有以下程序的输出结果是 int f(int b 4) int i,j,s=0; for(j=0;j2) i=3-j; s+=bij; ret
9、urn s; main( ) int a44=1,2,3,4,0,2,4,5,3,6,9,12,3,2,1,0; printf(“%dn”,f(a); ( A) 12 ( B) 11 ( C) 18 ( D) 16 35 有以下定义 #include stdio.h char a10,*b=a; 不能给数组 a输入字符串的语句是( ) ( A) gets(a) ( B) gets(a0) ( C) gets( ( D) gets(b); 36 有以下程序 main( ) char *p10=“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”; printf(“%dn”,str
10、len(p4); 执行后输出结果是( ) ( A) 2 ( B) 3 ( C) 4 ( D) 5 37 有以下程序 int a=2;int f(int *a)return (*a)+;main( ) int s=0; int a=5; s+=f( s+=f( printf(“%dn”,s); 执行后输出结果是() ( A) 10 ( B) 9 ( C) 7 ( D) 8 38 有以下程序 #define f(x) x*x main( ) int i; i=f(4+4)/f(2+2); printf(“%dn”,i); 执行后输出结果是( ) ( A) 28 ( B) 22 ( C) 16 (
11、D) 4 39 设有以下语句 typedef struct S int g; char h; T; 则下面叙述中正确的是( ) ( A)可用 S定义结构体变量 ( B)可以用 T定义结构体变量 ( C) S是 struct类型的变量 ( D) T是 struct S类型的变量 40 有以下程序 struc STU char name10; int num; ; void f1(struct STU c) struct STU b=“LiSiGuo”,2042; c=b; void f2(struct STU *c) struct STU b=“SunDan”,2044; *c=b; main(
12、 ) struct STU a=“YangSan”,2041,b=“WangYin”,2043 ; f1(a);f2( printf(“%d %dn”,a.num,b.num); 执行后的输出结果是( ) ( A) 2041 2044 ( B) 2041 2043 ( C) 2042 2044 ( D) 2042 2043 41 有以下程序 main( ) unsigned char a,b; a=4|3; b=4 printf(“%d %dn”,a,b(; 执行后输出结果是( ) ( A) 7 0 ( B) 0 7 ( C) 1 1 ( D) 43 0 42 下面程序的功能是输出以下形式的金
13、字塔图案是: * * * * * * * * * * * * * * * * main( ) int i,j; for(i=1;ipj- Score) t=pi;pi=pj;pj=t; printf(“%d %dn”,s1.Score,p1- Score); 执行后输出结果是( ) ( A) 550 550 ( B) 680 680 ( C) 580 550 ( D) 580 680 48 有以下程序 #include stdlib.h struct NODE int num; struct NODE *next; main( ) struct NODE *p,*q,*r; int sum=0
14、; p=(struct NODE *)malloc(sizeof(struct NODE); q=(struct NODE *)malloc(sizeof(struct NODE); r=(struct NODE *)malloc(sizeof(struct NODE); p- num=1;q- num=2;r- num=3; p- next=q;q- next=r;r- next=NULL; sum+=q- next- num;sum+=p- num; printf(“%dn”,sum); 执行后的输出结果是 ( A) 3 ( B) 4 ( C) 5 ( D) 6 49 有以下程序 #inc
15、lude stdio.h main( ) FILE *fp; int i,k=0,n=0; fp=fopen(“d1.dat”,”w”); for(i=1;i 4;i+) fprintf(fp,”%d”,i); fclose(fp); fp=fopen(“d1.dat”,”r”); fscanf(fp,”%d%d”, printf(“%d %dn”,k,n); fclose(fp); 执行后输出结果是( ) ( A) 1 2 ( B) 123 0 ( C) 1 23 ( D) 0 0 50 有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END);语句的作
16、用是使位置指针从文件尾向前移 2*sizeof(int)字节) #include stdio.h main( ) FILE *fp; int i,a4=1,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i=0;i,执行后输出结果是【 】。 61 有以下程序 void f( int y,int *x) y=y+*x; *x=*x+y; main( ) int x=2,y=4; f(y, printf(“%d %dn”,x,y); 执行后输出的结果是【 】 。 62 函数 fun的功能是计算 Xn double fun(double x,int n) int i;
17、 double y=1; for(i=1;i =n;i+) y=y*x; return y; 主函数中已经正确定义 m,a,b变量并赋值,并调用 fun函数计算: m=a4+b4-(a+b)3。实现这一计算的函数调用语句为 【 】 。 63 以下 sstrcpy( )函数实现字符串复制,即将 t所指字符串复制到 s所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+=【 】 ); main( ) char str1100,str2 =”abcdefgh”; sstrcpy(str1,str2); printf(“%s
18、n”,str1); 64 下列程序的运行结果是:【 】 #include string.h char *ss(char *s) return s+strlen(s)/2; main( ) char *p,*str=”abcdefgh”; p=ss(str); printf(“%sn”,p); 65 下面程序的运行结果是: 【 】 int f( int a , int n) if(n 1) return a0+f( else return a0; main ( ) int aa3=1,2,3,s; s=f( ; printf(“%dn”,s); 66 以下程序中给指针 p分配三个 double型
19、动态内存单元,请填空。 # include stdlib.h main ( ) double *p; p=(double *) malloc( 【 】 ); p0=1.5;p1=2.5;p2=3.5; printf(“%f%f%fn”,p0,p1,p2); 67 以下程序的运行结果是 【 】 #include string.h typedef struct student char name10; long sno; float score; STU; main( ) STU a=“zhangsan”,2001,95,b=“Shangxian”,2002,90, c=“Anhua”,2003,
20、95,d,*p= d=a; if(strcmp(a.name,b.name) 0) d=b; if(strcmp(c.name,d.name) 0) d=c; printf(“%ld%sn”,d.sno,p-name); 68 以下 sum函数的功能是计算下列级数之和。 请给函数中的各变量正确赋初值。 double sum( double x, int n ) int i; double a,b,s; 【 】 for( i=1;i =n;i+) a=a*x; b=b*i; s=s+a/b; return s; 69 下面 rotate函数的功能是:将 n行 n列的矩阵 A转置为 A,例如: #
21、define N 4 void rotate(int a N) int i,j,t; for(i=0;i N;i+) for(j=0;【 】 ;j+) t=aij; 【 】; aji=t; 2004 年 4月国家二级( C语言)笔试真题试卷答案与解析 1 【正确答案】 D 【试题解析】 在计算机的二进制表示中: 1KB=210B=1024B 1MB=220B=1024 X1024B 2 【正确答案】 B 【试题解析】 计算方法为:对于 16进制数 200末位有两位是零,因此是 162,最高位是 2,所以应为 162=512。 3 【正确答案】 C 【试题解析】 裸机是指不装备任何软件的计算机,
22、装备了操作系统的计算机不属于裸机。 4 【正确答案】 C 【试题解析】 编译程序是将高级语言编写的程序转换成目标程序。 5 【正确答案】 B 【试题解析】 在 64位计算机中,一个字节占 4位,一个字长占 8个字节。 6 【正确答案】 A 【试题解析】 在 Windows 操作系统下,一个应用程序窗口最小化后,该程序继续在后台运行,只有关闭该窗口时,才终止运行。 7 【正确答案】 D 【试题解析】 鼠标拖动窗口的标题栏,能实现窗口的移动;拖边框,实现窗体的大小调整。 8 【正确答案】 C 【试题解析】 PrintScreen 键的作用是复制屏幕到剪贴板,使用者就可以在其他地方利用粘贴命令将屏幕
23、复制过去。 9 【正确答案】 A 【试题解析】 TCP IP是 Intemet的通信协议, BBS 是网上论坛的简称, WWW是 World Wide Web(万维网 )的简称, FTP是 Intemet的文件传输协议。 10 【正确答案】 D 【试题解析】 不同类型的计 算机病毒可以感染不同类型的文件,它可以以多种方式进行传播,比如说可以通过网络或读写磁盘等方式。 11 【正确答案】 B 【试题解析】 算 法应具有的 5个特性:有穷性,确定性,可行性,有零个或多个输入,有一个或多个输出。 12 【正确答案】 B 【试题解析】 每条 C语句,经过编译 (Compile)最终都将转换成二进制的机
24、器指令。 C语言源程序经过 C语言编译程序编译之后生成一个后缀为 OBJ的二进制文件,最后还要由称为 “连接程序 ”的软件,把此 OBJ文件与 C语言提供的各种库函数连接起来生成一个可执行文件。 13 【正确答案】 C 【试题解析】 C语言的语法规定,字母 e(或 E)之前必须有数字,且 e(或 E)后面的指数必须为整数。选项 A)中, E后面不是整数;选项 B)中, E 后面没有数;选项 D)中, E前面没有数。 14 【正确答案】 A 【试题解析】 合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。而且在用户标识符中,如果与关键字相同,程序在编译时将出错,所以,用户定
25、义标识符不能为关键字。 15 【正确答案】 C 【试题解析】 在 C语言中, “ =”称为赋值运算符, “=”符号的左边必须是变量名, “=”符号的右边必须是 C 语言中合法的表达式。在选项 B)中, 0x12表示 16进制数;在选项 D)中, 1+2=3不是正确的表达式。选项 A)中, “ ”符号的运算对象为整型。 16 【正确答案】 D 【试题解析】 在 C语言中, +(自加 )运算对象可以是整型、实型变量,也可以是字符型变量。但不能是常量和表达式。 17 【正确答案】 D 【试题解析】 “*”的运算优先级高于 “ ”的运算优先级,因此,在选项 D)中,计算结果为 0 25。 18 【正确
26、答案】 C 【试题解析】 在 “ ”与格式字符之间插入一个整数来指定输出宽度,如果指定的输出宽度不够,并不影响数据的完整输出,系统会代之以隐含的输出宽度 。 19 【正确答案】 C 【试题解析】 选项 A)中, ; 是空语句;选项 B)是 条赋值语句;选项 D)也正确。 20 【正确答案】 A 【试题解析】 Pa 被声明为指针变量,并被赋值指向了变量 a,因此, scanf(“, 63 【正确答案】 *t+ 64 【正确答案】 efgh 【试题解析】 p=ss(str)执行后, p指针指向 e,因此输出结果为从 e开 始的子符串。 65 【正确答案】 6 【试题解析】 本题考查递归调用过程的方法。 66 【正确答案】 sizeof(double)*3 【试题解析】 sizeof 运算符的功能是求字节数。 67 【正确答案】 2002ShangXian 【试题解析】 由于 p是指针变量,它所指向的变量 d 发生变化,则 pnanle也发生变化。 68 【正确答案】 a=1;b=1;s=1 【试题解析】 给各变量赋初值,按题目的要求 a, b, s的初值都应为 1。 69 【正确答案】 j=N aij=aji