1、二级 C语言笔试-431 及答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.下列二叉树描述中,正确的是( )。 A) 任何一棵二叉树必须有一个度为 2的结点 B) 二叉树的度可以小于 2 C) 非空二叉树有 0个或 1个根结点 D) 至少有 2个根结点(分数:2.00)A.B.C.D.2.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法。A) 对象 B) 数据结构 C) 数据流 D) 目标(分数:2.00)A.B.C.D.3.在单链表中,增加头结点的目的是( )。A) 方便运算的实现B) 使单链表至少有一个结点C) 标识表结点中
2、首结点的位置D) 说明单键表是线性表的链式存储实现(分数:1.00)A.B.C.D.4.软件设计中模块划分应遵循的准则是( )。A低内聚、低耦合 B高内聚、低耦合C低内聚、高耦合 D高内聚、高耦合(分数:1.00)A.B.C.D.5.在计算机中,算法是指( )。A) 查询方法 B) 加工方法C) 解题方案的准确而完整的描述 D) 排序方法(分数:1.00)A.B.C.D.6.检查软件产品是否符合需求定义的过程称为( )。 A) 确认测试 B) 需求测试 C) 验证测试 D) 路径测试(分数:2.00)A.B.C.D.7.某二叉树共有 60个叶子结点与 50个度为 1的结点,则该二叉树中的总结点
3、数为( )。A) 148 B) 169 C) 182 D) 198(分数:2.00)A.B.C.D.8.数据厍系统的核心是( )。 A) 数据模型 B) 软件开发 C) 数据库设计 D) 数据库管理系统(分数:2.00)A.B.C.D.9.在 16位 C编译系统上,若定义 long a;,则能给变量 a赋值 40000的正确语句是 _。A) a=20000+20000; B) a=4000*10;C) a=30000+10000; D) a=4000L*1OL;(分数:2.00)A.B.C.D.10.下述关于数据库系统的叙述中正确的是_。A) 数据库系统减少了数据冗余 B) 数据库系统避免了切
4、冗余C) 数据库系统中数据的致性是指数据类型的致D) 数据库系统比文件系统能管理更多的数据(分数:2.00)A.B.C.D.11.以下叙述中错误的是( )。A)C语言编写的函数源程序,其文件名后缀可以是.CB)C语言编写的函数都可以作为一个独立的源程序文件C)C语言编写的每个函数都可以进行独立的编译并执行D)一个 C语言程序只能有一个主函数(分数:2.00)A.B.C.D.12.以下程序段中与语句 k=ab? (bc? 1:0):0;功能等价的是( )。A) if(ab)else k=0;B)if(ab)|(bc) k=1;else k=0;C) if(a=b) k=0;else if(b=c
5、) k=1;D) if(ab) k=1;else if(bc) k=1;else k=0;(分数:1.00)A.B.C.D.13.以下叙述中错误的是( )。A) C语句必须以分号结束B) 复合语句在语法上被看做一条语句C) 空语句出现在任何位置都不会影响程序运行D) 赋值表达式末尾加分号就构成赋值语句(分数:1.00)A.B.C.D.14.设在 C语言中,float 类型数据占 4个字节,则 double类型数据占( )个字节。A) 1 B) 2 C) 8 D) 4(分数:2.00)A.B.C.D.15.下列是合法的用户自定义标识符的是( )。A) _w1 B) 3_xy C) int D)
6、LINE-3(分数:1.00)A.B.C.D.16.下列关于逻辑运算符两侧运算对象的叙述中正确的是( )。 A) 只能是整数 0或 1 B) 只能是整数 0或非 0整数 C) 可以是结构体类型的数据 D) 可以是任意合法的表达式(分数:1.00)A.B.C.D.17.假设下面四个选项中所有的数都是 8进制数或 16进制数,均是不正确的选项是 ( )。A) 016 0x8f 018 B) 0abc 017 0xaC) 010 -0x11 0x16 D) 0al2 7ff -123(分数:1.00)A.B.C.D.18.语句“printf(“a/bhow/are/y/bou/n“);”的输出结果是
7、( )。A) a/bhow/are/y/bou B) a/bhow/are/y/bouC) howareyou D) ahowarey/bou(分数:2.00)A.B.C.D.19.运行下列程序时,若输入的数据为“1,2,3”,则输出结果是( )。main()float a,b,C,t;scanf(“%f,%f,%of“,if(aB) t=a;a=b;b=t;if(aC) t=a;a=c;c=t;if(bC) t=b;b=c;c=t;printf(“%f/n%f/n%f/n“,a,b,C) ;A) 1.002.003.00B) 1.003.002.00C) 132D) 3.0000002.00
8、00001.000000(分数:2.00)A.B.C.D.20.若有定义:int *p3;则以下叙述中正确的是( )。A) 定义了一个基类型为 int的指针变量 p,该变量具有三个指针B) 定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int的指针C) 定义了一个名为*p 的整型数组,该数组含有三个 int类型元素D) 定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int类型元素(分数:1.00)A.B.C.D.21.已定义下列函数:int fun(int *p)return *p;)fun函数返回值是( )。A) 不确定的值 B) 一个整数C) 形参 p
9、中存放的值 D) 形参 p的地址值(分数:1.00)A.B.C.D.22.若各选项中所用变量已正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的程序是_。A) main()x=fun(2,10);float fun(int a,int b)B) float fun(int a,int b)main()x=fun(i,j);C) float fun(int,int);main()x=fun(2,10);float fun(int a,int b)D) main()float fun(int i,int j);x=fun(i,j);float fun(int a,int
10、 b)(分数:2.00)A.B.C.D.23.有以下程序(说明:字母 A的 ASCII码值是 65) #includestdio.hvoid fun(char *s)while(*s)if(*s%2) printf (“%c“, *s);s+;main()char a=“BYTE“;fun(a); printf(“/n“);程序运行后的输出结果是_。A) BY B) BT C) YT D) YE(分数:1.00)A.B.C.D.24.下列函数值的类型是( )。fun(double x)float y;y=3*x-4;return y;A) int B) 不确定 C) void D) float
11、(分数:2.00)A.B.C.D.25.以下对枚举类型名的定义中正确的是_。A) enum a=one,two,three; B) enum aone=9,two=-1,three);C) enum a=“one“two“three“; D) enum a“one“two“three“;(分数:2.00)A.B.C.D.26.有以下程序main()int i,s=0,t=1,2,3,4,5,6,7,8,9;for(i=0;i9;i+=2)s+=*(t+i);printf(“%d/n“,s);程序执行后的输出结果是A) 45 B) 20 C) 25 D) 36(分数:2.00)A.B.C.D.2
12、7.以下程序运行后的输出结果是_。int d=1;fun(int p)static int d=5;d+=pprintf(“%d,d“);retum d;main()int a=3;printf(“%d/n“,fun(a+fun(d) );A) 699 B) 9 C) 61515 D) 6615(分数:2.00)A.B.C.D.28.以下结构体类型说明和变量定义中正确的是A) typedef structint n;char c;REC;REC t1,t2;B) struct REC;int n;char c;REC t1,t2;C) typedef struct REC;int n=0;ch
13、ar c=A;t1,t2;D) structint n;char c;REC;REC t1,t2;(分数:2.00)A.B.C.D.29.设变量已正确定义,则下列能正确计算 f=n!的程序段是( )。A) f=0;for(i=1 ;i=n;i+ +) f*=i;B) f=1;for(i=1;in;i+ +) f*=i;C) f=1;for(i=n;i1;i+ +)f*=i;D) f=1;for(i=n;i=2;i-)f*=i;(分数:2.00)A.B.C.D.30.若已包括头文件string.h且已有定义 char s118,s2=“ABCDE“和 int i,现要将字符串 “ABCDE“赋给
14、 s1,下列语句错误的是( )A) strcpy(s1,s2)B) strcpy(s1,“ABCDE“);C) s1=“ABCDE“;D) for(i=0;i6;i+)s1i=s2i;(分数:1.00)A.B.C.D.31.有下列函数:int fun(char*S)char*t=s;while(*t+ +);return(t-s);该函数的功能是( )。A) 比较两个字符串的大小 B) 计算 s所指字符串占用内存字节的个数C) 计算 s所指字符串的长度 D) 将 s所指字符串复制到字符串 t中(分数:1.00)A.B.C.D.32.下列程序的输出结果是#include“stdio.h“#def
15、ine N3#define M3void fun(int aMN)printf(“%d/n“,*(a1+2);main()int aMN;int i,j;for(i=0;iM;i+)for(j=0;jN;j+)aij=i+j-(i-j);fun(a);A) 3 B) 4 C) 5 D) 6(分数:2.00)A.B.C.D.33.下列程序段的输出结果为( )。#includestdio.hmain()static char a=“language“;char*p;p=a;for(p=a;pa+8;p+=2)putchar(*p);A) language B) lnug C) 有语法错误 D) l
16、ang(分数:2.00)A.B.C.D.34.以下程序的输出结果是char cchar(char ch)if(ch=A strcpy(str,strcat(p1,p2);printf(%s,str);A) xyzabcABC B) abcABC C) xyzabc D) xyzABC(分数:2.00)A.B.C.D.36.有以下程序:#include stdio.hmain( )int m,n,p;seanf( “m = % dn = % dp = % d“, 若想从键盘上输入数据,使变量 m中的值为 123,n中的值为 456, p中的值为 789,则下列选项中正确的输入是( )。 A) m
17、 = 123n =456p =789 B) m = 123 n =456 p =789C) m= 123,n =456,p =789 D) 123 456 789(分数:1.00)A.B.C.D.37.以下程序的功能是进行位运算:main()unsigned char a,b;a=73;b=43;printf(“%d%d/n“,a,b);程序运行后的输出结果是_。A) 4 3 B) 7 3C) 7 0 D) 4 0(分数:2.00)A.B.C.D.38.下面程序的运行结果是( )。#include stdiohmain()int a=1,b=10;dob-=a;a+;while(b-0);pr
18、intf(“a=%d,b=%d/n“,a,b);A) a=3,b=11 B) a=2,b=8 C) a=1,b=-1 D) a=4,b=9(分数:2.00)A.B.C.D.39.有以下程序#includestdio.hint a=1:int f(int c)static int a=2;c=c+1:return(a+)+c;main()int i,k=0;for(i=0;i2;i+)(int a=3;k+=f(a);k+=a;printf(“%d/n“,k);程序运行结果是( )。A14 B15 C16 D17(分数:1.00)A.B.C.D.40.若有下面的说明和定义,则 sizeof(st
19、ruct aa)的值是( )。struct aaint r1; double r2; float r3;union uuchar u15;long u22;ua;mya;A) 30 B) 29 C) 24 D) 22(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:34.00)41.结构化分析方法是面向_进行分析的方法。(分数:2.00)填空项 1:_42.数据字典是各类数据描述的集合,它通常包括 5个部分,即数据项、数据结构、数据流;U /U和处理过程。(分数:2.00)填空项 1:_43.执行以下程序后的输出结果是_。main( )int a=10;a=(3*5,a+4);
20、printf(“a=%d/n“,a);(分数:2.00)填空项 1:_44.在以下程序运行时若从键盘输入:10 20 30回车。输出结果是_。#includestdio.hmain()int i=0,j=0,k=0;scanf(“%d%*d%d“, int y;,当执行 y=(int)(x/5)%2;之后 y的值为 1。(分数:2.00)填空项 1:_46.下列程序段是从键盘输入的字符中统计小写字母的个数,用换行符结束循环。请填空。int n=0,c;c=getchar();while(c!=/n)if(_)n+;(分数:2.00)填空项 1:_47.已定义 char ch=$;int i=1
21、,j;,执行 j!=ch,则 a数组元素下标的上限为 1。(分数:2.00)填空项 1:_50.以下程序的输出结果是_。#includestdlibhmain()char*s1,*s2,m;s1=s2=(char*)malloc(sizeof(char);*s1=15;*s2=20;m=*s1+*s2;printf(“%d/n“,m);(分数:2.00)填空项 1:_51.下列程序的输出结果是_。long fun5(int n)long s;if(n=1)(n=2)s=2;elses=n+fun5(n-1);return(s);main()long x;x=fun5(4);printf(“%1
22、d/n“,x);(分数:2.00)填空项 1:_52.下面程序的运行结果是_。 #includestdio.h #define SIZE 12 main() char sSIZE;int i; for(i=0;iSIZE;i+)si=A+i+32; sub(s,5,SIZE-1); for(i=0;iSIZE;i+)printf(“%c“,si); printf(“/n“); sub(char*a,int t1,int t2) char ch; while(t1t2) ch=*(a+t1); *(a+t1)=*(a+t2); *(a+t2)=ch; t1+;t2-; (分数:2.00)填空项
23、1:_53.下列程序的输出结果是_。main()inta=31,27,20,12,6,1,*p=a;p+;printf(“%d/n“,*(p+2);(分数:2.00)填空项 1:_54.有以下程序#include stdio.hmain()char a20= “How are you? “,b20;scanf(“%s“,b);printf(“%s%s/n“,a,b);程序运行时从键盘输入:How are you?回车则输出结果为_。(分数:2.00)填空项 1:_55.阅读下列程序,则程序的输出结果为_。#include “stdio.h“struet tyint data;char c;ma
24、in( )street ty a=30,x;fun(a);printf(“%d%c“,a.data,a.c);fun(struct ty b)b.data=20;b.c=y;(分数:2.00)填空项 1:_二级 C语言笔试-431 答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.下列二叉树描述中,正确的是( )。 A) 任何一棵二叉树必须有一个度为 2的结点 B) 二叉树的度可以小于 2 C) 非空二叉树有 0个或 1个根结点 D) 至少有 2个根结点(分数:2.00)A.B. C.D.解析:解析 二叉树是由 n0 个结点的有限集合构成,此集合
25、或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。 二叉树具有如下两个特点: 非空二叉树只有一个根结点。 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。2.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法。A) 对象 B) 数据结构 C) 数据流 D) 目标(分数:2.00)A.B.C. D.解析:解析 结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型
26、。3.在单链表中,增加头结点的目的是( )。A) 方便运算的实现B) 使单链表至少有一个结点C) 标识表结点中首结点的位置D) 说明单键表是线性表的链式存储实现(分数:1.00)A. B.C.D.解析:解析 头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点的目的是为了便于运算的实现。4.软件设计中模块划分应遵循的准则是( )。A低内聚、低耦合 B高内聚、低耦合C低内聚、高耦合 D高内聚、高耦合(分数:1.00)A.B. C.D.解析:解析 在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则。其中,内聚性是对一个模块内部
27、各个元素间彼此结合的紧密程度的度量,耦合性是对模块间互相连接的紧密程度的度量。5.在计算机中,算法是指( )。A) 查询方法 B) 加工方法C) 解题方案的准确而完整的描述 D) 排序方法(分数:1.00)A.B.C. D.解析:解析 计算机算法是指解题方案的准确而完整的描述,它具有的基本特征有:可行性、确定性、有穷性和拥有足够的情报。6.检查软件产品是否符合需求定义的过程称为( )。 A) 确认测试 B) 需求测试 C) 验证测试 D) 路径测试(分数:2.00)A. B.C.D.解析:解析 确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求。7.某二叉树
28、共有 60个叶子结点与 50个度为 1的结点,则该二叉树中的总结点数为( )。A) 148 B) 169 C) 182 D) 198(分数:2.00)A.B. C.D.解析:解析 叶子结点总是比度为 2的结点多一个。所以,具有 60个叶子结点的二叉树有 59个度为 2的结点。总结点数=60 个叶子结点+59 个度为 2的结点+50 个度为 1的结点=169 个结点。8.数据厍系统的核心是( )。 A) 数据模型 B) 软件开发 C) 数据库设计 D) 数据库管理系统(分数:2.00)A.B.C.D. 解析:解析 数据库管理系统 DBMS是数据库系统的核心。DBMS 是负责数据库的建立、使用和维
29、护的软件。DBMS 建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过 DBMS。另外,DBMS 还承担着数据库的安全保护工作,按照 DBA所规定的要求,保证数据库的完整性和安全性。9.在 16位 C编译系统上,若定义 long a;,则能给变量 a赋值 40000的正确语句是 _。A) a=20000+20000; B) a=4000*10;C) a=30000+10000; D) a=4000L*1OL;(分数:2.00)A.B.C.D. 解析:解析 本题中 a是长整型变量,故应将一个长整型常量赋值给 a,选项 A、B、C 中的数值
30、的末尾都没有加 L或 1,所以不正确。10.下述关于数据库系统的叙述中正确的是_。A) 数据库系统减少了数据冗余 B) 数据库系统避免了切冗余C) 数据库系统中数据的致性是指数据类型的致D) 数据库系统比文件系统能管理更多的数据(分数:2.00)A. B.C.D.解析:评析 由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。数据的共享自身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不致性。所谓数据的致性是指在系统中同数据的不同出现应保持相同的值,而数据的不致性指的是同个数据在系统的不同拷贝处有不同
31、的值。11.以下叙述中错误的是( )。A)C语言编写的函数源程序,其文件名后缀可以是.CB)C语言编写的函数都可以作为一个独立的源程序文件C)C语言编写的每个函数都可以进行独立的编译并执行D)一个 C语言程序只能有一个主函数(分数:2.00)A.B.C. D.解析:解析 C 语言程序是从 main函数开始执行的,每一个函数可以进行独立的编译。12.以下程序段中与语句 k=ab? (bc? 1:0):0;功能等价的是( )。A) if(ab)else k=0;B)if(ab)|(bc) k=1;else k=0;C) if(a=b) k=0;else if(b=c) k=1;D) if(ab)
32、k=1;else if(bc) k=1;else k=0;(分数:1.00)A. B.C.D.解析:解析 本题是先比较 a,b,如果 ab 成立则执行(bc? 1:0),如果 bc 成立则结果为 1,否则为 0。也就是说只有 ab 与 bc 同时成立时 k值才能为 1。选项 A)正确。选项 B)是 a b 与 bc 之一成立时 k=1;选项 C)是 b=c 时 k=1;选项 D)与 B)类似。所以 B)、C)、D)均不对。13.以下叙述中错误的是( )。A) C语句必须以分号结束B) 复合语句在语法上被看做一条语句C) 空语句出现在任何位置都不会影响程序运行D) 赋值表达式末尾加分号就构成赋值
33、语句(分数:1.00)A.B.C. D.解析:解析 选项 C)是错误的。例如,对于 for(;)语句,如果循环体中没有结束循环的语句,循环将无限地进行下去,导致死循环出现。14.设在 C语言中,float 类型数据占 4个字节,则 double类型数据占( )个字节。A) 1 B) 2 C) 8 D) 4(分数:2.00)A.B.C. D.解析:解析 在 C语言中各种数据类型在内存中所占的字节数和机器的指令周期有关,若 int类型占 2个字节,则 float类型数据占 4个字节,double 类型数据占 8个字节。15.下列是合法的用户自定义标识符的是( )。A) _w1 B) 3_xy C)
34、 int D) LINE-3(分数:1.00)A. B.C.D.解析:解析 C 语言规定用户标识符由英文字母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项 B),D)是错的;此外,C 语言不允许用户将关键字作为标识符,而选项 C)中的 int是C语言的关键字。16.下列关于逻辑运算符两侧运算对象的叙述中正确的是( )。 A) 只能是整数 0或 1 B) 只能是整数 0或非 0整数 C) 可以是结构体类型的数据 D) 可以是任意合法的表达式(分数:1.00)A.B.C.D. 解析:解析 逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者
35、为 0(“假”)。17.假设下面四个选项中所有的数都是 8进制数或 16进制数,均是不正确的选项是 ( )。A) 016 0x8f 018 B) 0abc 017 0xaC) 010 -0x11 0x16 D) 0al2 7ff -123(分数:1.00)A.B.C.D. 解析:解析 在 8进制中,不可能包括 8以亡的数字,它的范围只在 07 之间,以 0开头。同样,十六进制是以 0x开头,数字在 09 和 af 之间。18.语句“printf(“a/bhow/are/y/bou/n“);”的输出结果是( )。A) a/bhow/are/y/bou B) a/bhow/are/y/bouC)
36、howareyou D) ahowarey/bou(分数:2.00)A.B.C. D.解析:解析 “/b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致“/b 格式符前面的字母不能输出;“/”格式符表示输出单引号字符;“/”格式符表示输出反斜线字符。19.运行下列程序时,若输入的数据为“1,2,3”,则输出结果是( )。main()float a,b,C,t;scanf(“%f,%f,%of“,if(aB) t=a;a=b;b=t;if(aC) t=a;a=c;c=t;if(bC) t=b;b=c;c=t;printf(“%f/n%f/n%f/n“,a,b,C) ;A) 1.00
37、2.003.00B) 1.003.002.00C) 132D) 3.0000002.0000001.000000(分数:2.00)A.B.C.D. 解析:解析 本题考查 if语句。第 1个 if语句,实现如果 ab,则交换 a、b 值的功能;第 2个 if语句,实现如果 ac,则交换 a、c 的值的功能;第 3个 if语句,实现如果 bc,则交换 b、c 的值的功能。3个 if语句结合起来实现的功能就是将 a、b、c 按从大到小排序。20.若有定义:int *p3;则以下叙述中正确的是( )。A) 定义了一个基类型为 int的指针变量 p,该变量具有三个指针B) 定义了一个指针数组 p,该数组
38、含有三个元素,每个元素都是基类型为 int的指针C) 定义了一个名为*p 的整型数组,该数组含有三个 int类型元素D) 定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int类型元素(分数:1.00)A.B. C.D.解析:解析 当一个数组中的元素均为指针类型数据时,该数组就称为指针数组。int *p3表示此数组是指针类型的,每个数组元素(指针变量)都是指向一个整型的指针变量。21.已定义下列函数:int fun(int *p)return *p;)fun函数返回值是( )。A) 不确定的值 B) 一个整数C) 形参 p中存放的值 D) 形参 p的地址值(分数:1.00)A.
39、B. C.D.解析:解析 由函数 int fun(int *p)return *p;的定义可知,返回值为整型指针变量 p所指向的数据。22.若各选项中所用变量已正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的程序是_。A) main()x=fun(2,10);float fun(int a,int b)B) float fun(int a,int b)main()x=fun(i,j);C) float fun(int,int);main()x=fun(2,10);float fun(int a,int b)D) main()float fun(int i,int
40、j);x=fun(i,j);float fun(int a,int b)(分数:2.00)A. B.C.D.解析:解析 在调用函数时,此函数必须被声明或定义过。A 选项中 fun在调用时并未声明,因此是错误的。23.有以下程序(说明:字母 A的 ASCII码值是 65) #includestdio.hvoid fun(char *s)while(*s)if(*s%2) printf (“%c“, *s);s+;main()char a=“BYTE“;fun(a); printf(“/n“);程序运行后的输出结果是_。A) BY B) BT C) YT D) YE(分数:1.00)A.B.C.D
41、. 解析:解析 阅读程序可知,函数只会输出 ASCII码值为奇数的字母,执行 fun(a)时,依次取出 a中的字母,当取第一个字母 B时,因为 B的 ASCII码值为 66,所以不会输出 B,字母 Y的 ASCII码为 89,字母 T的 ASCII码值为 84,字母 E的 ASCII码值为 69,所以最后输出字母 YE。正确答案为 D。24.下列函数值的类型是( )。fun(double x)float y;y=3*x-4;return y;A) int B) 不确定 C) void D) float(分数:2.00)A. B.C.D.解析:解析 本题考查默认函数的函数值的类型。在函数调用时,
42、尽管 y的类型是 float,x 的类型是double,但是因为函数定义时省去类型说明,系统默认函数值的类型为 int型,所以计算后的 y的类型是int型。25.以下对枚举类型名的定义中正确的是_。A) enum a=one,two,three; B) enum aone=9,two=-1,three);C) enum a=“one“two“three“; D) enum a“one“two“three“;(分数:2.00)A.B. C.D.解析:评析 声明枚举类型用 enum开头。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat);说明:1、在 C编译中
43、,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给个枚举变量。26.有以下程序main()int i,s=0,t=1,2,3,4,5,6,7,8,9;for(i=0;i9;i+=2)s+=*(t+i);printf(“%d/n“,s);程序执行后的输出结果是A) 45 B) 20 C) 25 D) 36(分数:2.00)A.B.C. D.解析:解题要点 统计 19 九个数中的奇数和,此题考查指向数组的指针。C 语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i 代表数组的第 i+1个元素。程序运行的结果是1+2+3+4+5+
44、6+7+8+9=25。27.以下程序运行后的输出结果是_。int d=1;fun(int p)static int d=5;d+=pprintf(“%d,d“);retum d;main()int a=3;printf(“%d/n“,fun(a+fun(d) );A) 699 B) 9 C) 61515 D) 6615(分数:2.00)A.B.C. D.解析:评析 静态局部变量在编译时赋初值,即只赋初值次,在程序运行时它已有初值。以后每次调用时不再重新赋初值而只是保留上次函数调用结束时的值,而对自动变量赋初值,不是在编译时进行的,而在函数调用时进行,每调用次函数重新给次初值,相当于执行次赋值语
45、句。本题在程序开头定义了全局变量 d并赋初值 1,在被调函数 fun()中,定义了静态局部变量 d,初值为 5。在第次调用函数fun时,d 初值为 5,p 由主函数传递过来的值为 1,则 d=d+p=5+1=6,由于 d是静态局部变量,在函数调用结束后,它仍保留 d=6。再次调用 fun函数,d 的初值为 6,而由主函数传递的 p的值为 9,则此时d=d+p=6+9=15,最后打印输出 d的值并返回主函数。28.以下结构体类型说明和变量定义中正确的是A) typedef structint n;char c;REC;REC t1,t2;B) struct REC;int n;char c;RE
46、C t1,t2;C) typedef struct REC;int n=0;char c=A;t1,t2;D) structint n;char c;REC;REC t1,t2;(分数:2.00)A. B.C.D.解析:解析 对于选项 B、C,在进行结构体类型声明时,REC 后不应该有分号;对于选项 D,REC 是结构体变量而不是结构体类型名,不能用来定义变量 t1和 t2。29.设变量已正确定义,则下列能正确计算 f=n!的程序段是( )。A) f=0;for(i=1 ;i=n;i+ +) f*=i;B) f=1;for(i=1;in;i+ +) f*=i;C) f=1;for(i=n;i1
47、;i+ +)f*=i;D) f=1;for(i=n;i=2;i-)f*=i;(分数:2.00)A.B.C.D. 解析:解析 要正确计算函数 f=n!,由 n!的数学定义可知 n!=n*(n-1)*(n-2)*1。在选项 A)中,由于 f的初值为 0,在 for循环语句中, f 依次乘以 1,2,3,n。最后计算 f=n!=O,所以选项 A)不正确。在选项 B)中,f 的初值为 1,在 for循环语句中,f 依次乘以 1,2,3,(n-1)。最后计算得到 f=(n-1)!,所以选项 B)不正确。在选项 C)中,f 的初值为 1,在 for循环语句中,f 依次乘以n,n+1, n+2,所以选项 C)不正确。在选项 D)中,f 的初值为 1,在 for循环语句中,f 依次乘以n,n-1,n-2,2。最后计算 f=n!,所以选项 D)正确。30.若已包括头文件string.h且已有定义 char s118,s2=“ABCDE“和 int i,现要将字符串 “ABCDE“赋给 s1,下列语句错误的是( )A) strcpy(s1,s2)B) strc