1、2003 年 9月国家二级( C语言)笔试真题试卷及答案与解析 1 在计算机中,一个字节所包含二进制位的个数是 ( A) 2 ( B) 4 ( C) 8 ( D) 16 2 在多媒体计算机中, CD-ROM属于 ( A)存储媒体 ( B)传输媒体 ( C)表现媒体 ( D)表示媒体 3 在 DOS系统中,带有通配符的文件名 *.*表示 ( A)硬盘上的全部文件 ( B)当前盘当前目录中的全部文件 ( C)当前盘上的全部文件 ( D)根目录中的全部文件 4 十六进制数 100转换为十进制数为 ( A) 256 ( B) 512 ( C) 1024 ( D) 64 5 能将高级语言编写的源程序转换
2、为目标程序的软件是 ( A)汇编程序 ( B)编辑程序 ( C)解释程序 ( D)编译程序 6 在 Internet中,用于在计算机之间传输文件的协议是 ( A) TELNET ( B) BBS ( C) FTP ( D) WWW 7 在 Windows环境下,资源管理器左窗口中的某文件夹左边标有 “+“标记表示 ( A)该文件夹为空 ( B)该文件夹中含有子文件夹 ( C)该文件夹中只包含有可执行文件 ( D)该文件夹中包含系统文件 8 在 Windows环境下,下列叙述中正确的是 ( A)在 “开始 “菜单中可以增加项目,也可以删除项目 ( B)在 “开始 “菜单中不能增加项目,也不能删除
3、项目 ( C)在 “开始 “菜单中可以增加项目,但不能删除项目 ( D)在 “开始 “菜单中不能增加项目,但可以删除项目 9 从 Windows环境进入 DOS方式后,返回 Windows环境的命令为 ( A) QUIT ( B) WIN ( C) EXIT ( D) ESC 10 下列叙述中正确的是 ( A)计算机病毒只感染可执行文件 ( B)计算机病毒只感染文本文件 ( C)计算机病毒只能通过软件复制的方式进行传播 ( D)计算机病毒可以通过读写磁盘或网络等方式进行传播 11 以下叙述中正确的是 ( A) C程序中注释部分可以出现在程序中任意合适的地方 ( B)花括号 “和 “只能作为函数
4、体的定界符 ( C)构成 C程序的基本单位是函数,所有函数名都可以由用户命名 ( D)分号是 C语句之间的分隔符,不是语句的一部分 12 以下选项中可作为 C语言合法整数的是 ( A) 10110B ( B) 386 ( C) 0Xffa ( D) x2a2 13 以下不能定义为用户 标识符的是 ( A) scanf ( B) Void ( C) _3com_ ( D) int 14 有以下程序 main( ) int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf(“%d %d %3.1f %3.1fn“,a,c,
5、f,x); 程序运行后的输出结果是 ( A) 1 65 1 6.5 ( B) 1 65 1.5 6.5 ( C) 1 65 1.0 6.5 ( D) 2 65 1.5 6.5 15 以下选项中非法的表达式是 ( A) 0a)|(m=a printf(“%d,%dn“,k,m); 程序运行后的输出结果是 ( A) 0,0 ( B) 0,1 ( C) 1,0 ( D) 1,1 17 有定义语句: int x, y;,若要通过 scanf(“%d,%d“,语句使变量 x得到数值 11,变量 y得到数值 12,下面四组输入形式中,错误的是 ( A) 11 12 ( B) 11, 12 ( C) 11,
6、12 ( D) 11,12 18 设有如下程序段: int x=2002, y=2003; printf(“%dn“,(x,y); 则以下叙述中正确的是 ( A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出 ( B)运行时产生出错信息 ( C)输出值为 2002 ( D)输出值为 2003 19 设变量 x为 float型且已赋值,则以下语句中能将 x中的数值保留到小数点后两位,并将第三位四舍五入的是 ( A) x=x*100+0.5/100.0; ( B) x=(x*100+0.5)/100.0; ( C) x=(int)(x*100+0.5)/100.0; ( D) x=(x/
7、100+0.5)*100.0; 20 有定义语句: int a=1,b=2,c=3,x;,则以下选项中各程序段执行后, x的值不为3的是 ( A) if (c a) x=1; else if (b a) x=2; else x=3; ( B) if (a 3) x=3; else if (b a) x=2; else x=1; ( C) if (a1;n-) s=s+1/n; printf(“%6.4fn“,s); 程序运行后输出结果错误,导致错误结果的程序行是 ( A) s=1.0; ( B) for(n=10;n1;n-) ( C) s=s+1/n; ( D) printf(“%6.4fn
8、“,s); 25 已定义 ch为字符型变量,以下赋值语句中错误的是 ( A) ch=; ( B) ch=62+3; ( C) ch=NULL; ( D) ch=xaa; 26 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 ( A)函数调用可以作为独立的语句存在 ( B)函数调用可以作为一个函数的实参 ( C)函数调用可以出现在表达式中 ( D)函数调用可以作为一个函数的形参 27 有以下函数定义: void fun(int n, double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun的正确调用语句是 ( A) fun(int y,double m); ( B
9、) k=fun(10,12.5); ( C) fun(x,n); ( D) void fun(n,x); 28 有以下程序 void fun(char *a, char *b) a=b; (*a)+; main() char c1=A,c2=a,*p1,*p2; p1= p2= fun(p1,p2); printf(“%c%cn“,c1,c2); 程序运行后的输出结果是 ( A) Ab ( B) aa ( C) Aa ( D) Bb 29 若程序中已包含头文件 stdio.h,以下选项中,正确运用指针 变量的程序段是 ( A) int *i=NULL; ( B) float *f=NULL;s
10、canf(“%d“,i); *f=10.5; ( C) char t=m, *c= ( D) long *L; 30 有以下程序 #include stdio.h main( ) printf(“%dn“,NULL); 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) -1 ( D) NULL没定义,出错 31 已定义 c为字符型变量,则下列语句中正确的是 ( A) c=97; ( B) c=“97“; ( C) c=97; ( D) c=“a“; 32 以下不能正确定义二维数组的选项是 ( A) int a22=1,2; ( B) int a 2=1,2,3,4; ( C) in
11、t a22=1,2,3; ( D) int a2 =1,2,3,4; 33 以下选项中不能正确把 cl定义成结构体变量的是 ( A) typedef struct int red; int green; int blue; COLOR; COLOR cl; ( B) struct color cl int red; int green; int blue; ( C) struct color int red; int green; int blue; cl; ( D) struct int red; int green; int blue; cl; 34 以下能正确定义一维数组的选项 是 (
12、A) int num ; ( B) #define N 100 int numN; ( C) int num0100; ( D) int N=100; int numN; 35 下列选项中正确的语句组是 ( A) char s8; s=“Beijing“; ( B) char s8; s=“Beijing“; ( C) char *s; s=“Beijing“; ( D) char *s; s=“Beijing“; 36 已定义以下函数 fun(int *p) return *p; 该函数的返回值是 ( A)不确定的值 ( B)形参 p中存放的值 ( C)形参 p所指存储单元中的值 ( D)形
13、参 p的地址值 37 下列函数定义中,会出现编译错误的是 ( A) max(int x,int y,int *z) *z=xy ? x:y; ( B) int max(int x,y) int z; z=x y ? x:y; return z; ( C) max(int x,int y) int z; z=xy?x:y; return(z); ( D) int max(int x,int y) return(x y?x:y); 38 有以下程序 #include stdio.h #define F(X,Y) (X)*(Y) main( ) int a=3, b=4; printf(“%dn“,
14、 F(a+, b+); 程序运行后的输出结果是 ( A) 12 ( B) 15 ( C) 16 ( D) 20 39 有以下程序 fun(int a, int b) if(ab) return(a); else return(b); main( ) int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(“%dn“, r); 程序运行后的输出结果是 ( A) 3 ( B) 6 ( C) 8 ( D) 12 40 若有定义: int *p3;,则以下叙述中正确的是 ( A)定义了一个基类型为 int的指针变量 p,该变量具有三个指针 ( B)定义了一
15、个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int的指针 ( C)定义了一个名为 *p的整型数组,该数组含有三个 int类型元素 ( D)定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int类型元素 41 以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串的首地址 #include stdio.h #include string.h char *scmp(char *s1, char *s2) if(strcmp(s1,s2)0 ? p/10 : p%3); 57 以下程序运行后的输出结果是【 】。 main() char m; m
16、=B+32; printf(“%cn“,m); 58 以下程序运行后的输出结果是【 】。 main( ) int a=1,b=3,c=5; if (c=a+b) printf(“yesn“); else printf(“non“); 59 以下程序运行后的输出结果是【 】。 main( ) int i,m=0,n=0,k=0; for(i=9; i =11;i+) switch(i/10) case 0: m+;n+;break; case 10: n+; break; default: k+;n+; printf(“%d %d %dn“,m,n,k); 60 执行以下程序后,输出 #号的个数
17、是【 】。 #include main() int i,j; for(i=1; i,则输出结果是【 】 #include string.h move(char *str, int n) char temp; int i; temp=strn-1; for(i=n-1;i 0;i-) stri=stri-1; str0=temp; main( ) char s50; int n, i, z; scanf(“%d,%s“, z=strlen(s); for(i=1; i =n; i+) move(s, z); printf(“%sn“,s); 66 以下程序运行后的输出结果是【 】 fun(int
18、 x) if(x/2 0) fun(x/2); printf(“%d “,x); main( ) fun(6); 67 已有定义如下: struct node int data; struct node *next; *p; 以下语句调用 malloc函数,使指针 p指向一个具有 struct node类型的动态存储空间。请填空。 p = (struct node *)malloc(【 】 ); 68 以下程序的功能是将字符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如,输入字符串: abc123edf456gh,执行程序后输出: 123456。请填空。 #include #i
19、nclude main() char s80, d80; int i,j; gets(s); for(i=j=0;si!=0;i+) if(【 】 ) dj=si; j+; dj=0; puts(d); 69 以下程序的功能是调用函数 fun计算: m=1-2+3-4+9 -10,并输出结果。请填空。 int fun( int n) int m=0,f=1,i; for(i=1; i =n; i+) m+=i*f; f=【 】 ; return m; main( ) printf(“m=%dn“,【 】 ); 2003 年 9月国家二级( C语言)笔试真题试卷答案与解析 1 【正确答案】 C
20、【试题解析】 在表示数据位数时,把 8位二进制数称为一个字节。 2 【正确答案】 A 【试题解析】 CD-ROM可用于存储数据,如文字、声音、图像等,属于存储媒体。 3 【正确答案】 B 【试题解析】 DOS 系统中,如果命令中使用了 * *,则表示主文件名任意,扩展名任意的文件,即所有文件。但如无特别限定,均指当前盘当前目录中的全部文件。 4 【正确答案】 A 【试题解析】 把非十进制数转换为十进制可采用按权展开求和的方法,此题为:1X162+oxl61+0x160,计算得到 256。 5 【正确答案】 D 【试题解析】 此题考查考生对几个常用术语的理解。汇编程序是把用汇编语言编写的程序翻译
21、成二进制目标程序;编辑程序是对源程序进行输入、修改的过程,解释程序逐语句执行,但 不生成目标程序。只有编译程序是把高级语言编写的源程序转换为目标程序。 6 【正确答案】 C 【试题解析】 FTP是文件传输协议的缩写,其他几个选项都与文件传输协议无关。 7 【正确答案】 B 【试题解析】 此题考查了 Windows 操作系统的基本知识,若文件夹前有 “+”,则表明该文件夹中包含子文件 夹。 8 【正确答案】 A 【试题解析】 在 “开始 ”菜单中右击某项子菜单,从快捷菜单中选择 “删除 ”命令即可删除某项子菜单,还可以通过 “开始 ”菜单的 “设置 ”命令向 “开始 ”菜单中添加项子菜 单。 9
22、 【正确答案】 C 【试题解析】 Windows 可进入系统自带的 DOS 方式。其中 QUTT 命令用于退出UCDOS 方式, WIN用于在纯 DOS 方式下进入 Windows, ESC用于中断当前程序的运行。 10 【正确答案】 D 【试题解析】 可执行文件和文本文件等都可能感染计算机病毒,而且计算机病毒不仅能通过软件复制的方式进行传播,还可以通过读写磁盘或网络等方式进行传播。 11 【正确答案】 A 【试题解析】 花括号既可以做函数的定界符,也可以表示复合语句。函数有用户自定函数和系 统函数两种,系统函数名称不能由用户命名。分号是语句间的分隔符,也是一条语句的终止符,是语句的一部分。
23、12 【正确答案】 C 【试题解析】 在 C语言中,整型常量分十进制、八进制、十六进制 3种,八进制、十六进制与十进制的区别是八进制以 “0”开头,基数为 0 7;十六进制以 0x开头,基数为 0 9及 a f。 13 【正确答案】 D 【试题解析】 int是 C语言中的一个关键字。关键字不能用做用户标识符, void是 C语言中的关键字,但 Void 却不是,因为 C语言中区分大小写。 14 【正确答案】 B 【试题解析】 本程序的执行顺序如下: (1)x=6 5, x值为 6 5; (2)c*=x,即c=c*x, c值为 65; (3)f =c,即 f=f c, f值为 1 538; (4
24、)a=f,因 a为整型变量,故只存储 f 值的整数部分 1;输出 f 值时,因限定其值域宽为 3,小数位为 1,故输出 1 5。 15 【正确答案】 D 【试题解析】 赋值语句中赋值符左边只能出现变量名的形式,而不允许出现表达式。 16 【正确答案】 C 【试题解析】 由于整个表达式中出现了 “”运算符,则先计算 “”前的表达式的值。若 非 0,则不再计算其后表达式的值,由于 ba为逻辑真 1, 1赋给 n, n为 1再赋给 k, k 值为 1,则 “”左边式子的值为 1,故不再计算其后的式子, m值不发生变化。 17 【正确答案】 A 【试题解析】 在输入函数中由于出现了非格式说明符 “,
25、”,则输人数据时,非格式说明符必须原样输入。 18 【正确答案】 D 【试题解析】 因为 (x, y)是一个逗号表达式,其值是最后一个式子的值,故本表达式值为 2003,然后输出表达式的值。 19 【正确答案】 C 【试题解析】 选项 A)中, x的值发生变化 ,近似为原先的 100倍,而选项 B),选项 D)均不能保证小数点后只保留两位小数。 20 【正确答案】 C 【试题解析】 选项 A), B)考查了多分支结构的用法,选项 A)中的程序段执行时, c a, b a条件均不成立,故执行 else后的语句, x值为 3;选项 B)中 a 3条件成立,执行 x=3;而选项 C), D)是单分支
26、结构的用法,选项 C)中程序段执行时, a1)的结果总为 0,而不是小数。 25 【正确答案】 A 【试题解析】 选项 A)中, ch 存储了字符反斜杠;选项 B)中存储了 ASCII码值是65对应的字符;选项 D)是单撇号括起 x后跟一到两位十六进制数,表示一个转义字符。 26 【正确答案】 D 【试题解析】 C语言规定,函数的形参要么为空,要么是变量。如果是变量则用以接收主函数传递 过来的数据。 27 【正确答案】 C 【试题解析】 选项 A)中的实参不能在调用时声明;选项 B)错误,因为无返回值的函数不能出现在表达式中;选项 D)错误,其调用格式不正确。 28 【正确答案】 A 【试题解
27、析】 本题考查了地址的调用。在子函数 fun()中, a, b 分别存储的是存放 “A”, “a,两个字符所在存储单元的地址。但在子函数中直接改变了指针变量a所指存储单元 (a=b,即 b 所指单元 )中的值,使其变为 “b”,故子函数执行结束时, c1 的值不变, c2的值改变。 29 【正确答案】 D 【试题解析】 选项 C)显然不对。选项 A), B), D)从语法上讲都是可以的,但内存中地址为 NULL,即地址 0的单元不能随意存放用户数据,因为这样可能会破坏其他程序。选项 D)中尽管用了, 0, (在内存中也为 0),但并未向该单元存放数据,故该项正确。 30 【正确答案】 A 【试
28、题解析】 因为在头文件 stdio h 中,已对 NULL 作了宏定义,其值为 0。 31 【正确答案】 C 【试题解析】 字符常量是用单撇号括起来的 个字符或一串字符,故选项 A)不正确。选项 B), D)均为字符串。而选项 C)是把 ASCII码值为 g7的字符赋给了变量 c。 32 【正确答案】 D 【试题解析】 C语言中明确规定,在定义二维数组时,后一个下标值不能省略,否则将无法判定数组中某一行的元素个数。 33 【正确答案】 B 【试题解析】 选项 A)是把结构体类型改名后定义为变量 cl。选项 C), D)则是在定义结构体类型时定义变量,而选项 B)不符合结构体类型定义的语法规则。
29、 34 【正确答案】 B 【试题解析】 定义一维数组时,其下标值必须为常量,故选项 A), C)和 D)均不符合语法规则,选项 B)是先定义了符号常量,后定义数组,这是允许的。 35 【正确答案】 D 【试题解析】 C语言不允许通过赋值语句给字符数组赋值,故选项 A), C)不正确,而 “”是在定义变量的同时对变量进行初始化时使用,在赋值时不能使用。 36 【正确答案】 C 【试题解析】 在表达式中出现 *p,表示引用指针变量所指存储单元的内容。 37 【正确答案】 B 【试题解析】 定义函数时,若需要声明形式参数时,则每个形式参数都必须单独声明类型。 38 【正确答案】 A 【试题解析】 本题考查了 带参数的宏定义。参数只是进行简单的替换而不是把其值求出后替换形式参数。本题中用 a+替换 X,用 b+替换 Y,再求 (a+)*(b+)的值。 39 【正确答案】 D 【试题解析】 此题考查了带返回值的函数的调用。 fun()函数的功能是求出两个数的最大数并返回主函数 r=fun(fun(x, y), 2*z)处。执行过程为先调用函数 fun(x,y)求得两数中的较大者,再进行自身的递归调用,此时函数中的两个参数为刚求得的数和 2*z(即 12)传递给子函数,找出两数中的大数。 40 【正确答案】 B
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1