文档库 最新最全的文档下载
当前位置:文档库 › 江苏历年二级C语言笔试试卷参考答案及解析

江苏历年二级C语言笔试试卷参考答案及解析

2007 年(春)笔试试卷参考答案及解析

第一部分计算机基础知识

(1)B)【解析】摩尔定律是指IC 上可容纳的晶体管数目,约每隔18 个月便会增加一倍,性能也将提升一倍。摩尔定律是由英特尔(Intel)名誉董事长戈登·\u25705X尔(Gordon Moore)经过长期观察发现

得之。

(2)C)【解析】光纤一般在校园网和企业网中使用,因为速度快。

(3)B)【解析】二进制数(1010)=十进制(10),十六进制数(B2)16=十进制(178),所以

188 用八进制表示为(274)8。

(4)D)【解析】GB2312 中,一个汉字字符由两个字符构成,特征是高位大于127(即十六进制的7F),低位不计。看看字符串:第一个字符:BO,明显大于7F,所以这是一个汉字的高位,与下一个

字符组成一个汉字。那么这里就去掉了两个字符:BOA1 第三个字符:57,很明显,小于7F,这是一个西文字符。第四个字符:69,同上,第五个字符:6E,同上,第六个字符:D6,这里又遇到一个大于7F 的,又是一个汉字的高位,同第一个字符处理。第八个字符依次类推,必须从第一个字符开始,一个字符一个字符的计算。那就是4 个汉字和3 个西文字符。

(5)D)【解析】现在使用最多的CPU 有Intel 和AMD。

(6)A)【解析】PC 在加电启动过程中会运行P OST 程序、引导系统、系统自举程序等。若在启动过程中,用户按某一热键(通常是Del 键)则可以启动CMOS 设置程序。这些程序运行的顺序是POST 程序→CMOS 设置程序→系统自举程序→引导程序。

(7)B)【解析】1394 卡的全称是IEEE1394 Interface Card,它是IEEE 标准化组织制定的一项具有视频数据传输速度的串行接口标准。它支持外接设备热插拔,同时可为外设提供电源,省去了外设自带的电源、支持同步数据传输。IEEE1394 接口最初由苹果公司开发,据说早期是为了取代并不普及的SCSI 接口而设计的,英文取名为FIREWIRE。

(8)C)【解析】优盘能起到引导操作系统的作用。

(9)C)【解析】虚拟存储器采用的页面调度算法有几种:“先进先出”(FIFO)算法、随机算法、近期最少使用算法、最优算法。

(10)C)【解析】算法是问题求解规则的一种过程描述,一个算法有0 个或多个输入,以刻画运算对象的初始情况,所谓0 个输入是指算法本身定除了初始条件,一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。

(11)D)【解析】以太网(IEEE 802.3 标准)是最常用的局域网组网方式。

(12)B)【解析】C 类IP 地址中网络的标识长度为21 位,主机标识的长度为8 位,C 类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254 台计算机。

(13)A)【解析】DNS 的中文意思是域名服务。域名服务是提供[主机名]到[IP 地址]转换的一段计算机程序。

(14)C)【解析】通常ADSL 在不影响正常电话通信的情况下可以提供最高3.5Mbps 的上传速度和最高24Mbps 的下载速度。

(15)C)【解析】BIG5 是台湾计算机界实行的汉字编码字符集,在汉字编码标准中,它不支持简体汉字,Big5 也是繁体的意思,GB 是简体的意思。

(16)C)【解析】JPEG 是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10∶1 到40∶1 之间,压缩比越大,品质就越低;

压缩比越小,品质就越好。

(17)D)【解析】播放MIDI 音乐时,发出的声音是通过播放软件或者音源的转换而成的,可以把MIDI 理解成是一种协议、一种标准或一种技术,但不要把它看作是某个硬件设备。

(18)A)【解析】“五笔字型”汉字输入法不是Windows 内置的输入法之一,可以通过安装Office 自定安装或下载安装。

(19)D)【解析】格式刷既可以复制字符格式,也可以复制段落格式;如需要多次复印,双击格

参考答案及解析第 1 页共 3 页

式刷即可。在Word 中提供了“格式复制”按钮,它不复制内容,只复制格式。

(20)D)【解析】演示文稿中不仅可以插入声音文件,而且可以录制旁白。

第二部分 C 语言程序设计

一、选择题

(21)C)【解析】函数的定义中不能定义其他的函数,只能应用其他的函数。

(22)B)【解析】形式错误,应该用123L 形式。

(23)D)【解析】sizeof 本身就是一个函数,不能用来定义其他的函数或者变量。

(24)A)【解析】A 是数学式的形式,不能直接用作c 中的逻辑表达式。

(25)B)【解析】注意:sizeof 表示的是字符串数组的长度,而strlen 求的是字符串数组中字符的

个数,也就是'\0'之前的字符的个数。

(26)D)【解析】如果循环体只有一条语句,可以不用花括号。三种循环体都不能缺少循环终止

的条件,否则循环就一直进行,称为死循环。中有do_while 循环体中的循环语句可以被无条件的执行一次,其他的循环体都不可以。

(27)D)【解析】D 中的花括号不成对出现,显然不符合语法。

(28)B)【解析】p 是指针型变量,不能作为数组的索引,程序不能执行。不能输出。

(29)A)【解析】ptr->a 实际上是结构体数组的第一个元素的a 成员值是5。

(30)B)【解析】w+:只写打开或建立一个文本文件,只允许写数据;r+:读写打开一个文本文

件,允许读和写;a+:读写打开一个文本文件,允许读,或在文件末追加数据;r:只允许进行“读”操作。

二、填空题

●基本概念题

(1)【1】extern

【解析】extern 用于声明外部变量。

(2)【2】sqrt(abs(a-b))/(3*(a+b)) 或者sqrt(fabs(a-b))/(3*(a+b))

【解析】绝对值函数是fabs,平方根函数是sqrt。

(3)【3】第一个元素地址或者起始地址

【解析】数组名实际上是一个地址常量,其值是数组的一个元素的地址。

(4)【4】(%d)%ld

【解析】scanf 是格式化输入函数,a 应该放在()中表示区号,b 放到()后面表示电话号码,所以用(%d)%ld。

(5)【5】char *p

【解析】用花括号给字符串数组赋初值必须是在定义的时候,若是指针,则可以任意时候用花括号赋值。

●阅读程序题

(6)【6】3

【解析】m(m(2)):先调用m(2):返回1(++s,s 当前值是0)+ 1(++a)=2,再调用m(2):返回2(++s,s 当前值是1)+1(++a)=3。(注意:在 C 语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char,空指针分别为0,0.0,'\0',0。除了全局变量和静态变量以外,其他变量如果没有赋初值,则默认初始值

为内存中的垃圾内容,对于垃圾内容不能有任何假设。这些规则对于数组\结构体和联合体也同样适用)。

(7)【7】4

【解析】enum days {mon=1, tue, wed, thu, fri, sat, sun}定义了一个枚举型常量,mon=1, tue=2, wed=3,

thu=4, fri=5, sat=6, sun=7, today=tue=2,所以(today+2)%7)=4%7=4。

(8)【8】15

【解析】mystery(5,3)-> mystery(5,2)-> mystery(5,1)->return 5-> return 10-> return 15。

(9)【9】2 【10】0

【解析】do_while 循环:首先i%2=5%2=1,i=4,continue,做下一次的switch 循环语句,i%2=0,i--.i=3,

跳出switch 运行下面一条语句:打印3。

3%2=1,i=2,2%2=0,i=1,跳出switch 语句。执行下一条语句:i 先自减一再打印i,i=0。

(10)【11】-8 4 【12】1 2

【解析】n 是x 数组的长度,函数fun:查找a 中的同样的字符,在数组y 中依次记录其个数(取反)和该数字(当该数字只出现一次,则不记录其个数,只记录该数字本身),打印y 时候的格式是:一行打

印两个数字。

1 2 两个数字,只有一个,不记录个数,只记录数字。

(11)【13】1 3 13 【14】1 5 21 【15】2 8 34

【解析】第一个for 循环:b 数组设置为:1 1 2 3 5 8 13 21 34 (当前项=前面两项的和)。第二个for 循环:i=0,j=0,a[0][0]=b[0];i=0,j=1,a[1][0]=b[1];i=0,j=2,a[2][0]=b[2];i=1,j=0,a[0][1]=b[3];i=1,

j=1,a[1][1]=b[4];i=1,j=2,a[2][1]=b[5];i=2,j=0,a[0][2]=b[6];i=2,j=1,a[1][2]=b[7];i=2,j=2,a[2][2]=b[8];

a 数组:1 3 13,1 5 21,2 8 34。

(12)【16】32659 【17】23569 【18】256

【解析】puts(p)打印p 指针指向的字符串数组。

insert 函数:创建一个链表,其中结构体变量把32559 按照由小到大的顺序重新排列了。

函数del 功能:把2 的倍数的结点后面的一个结点删除。

●完善程序题

(13)【19】x1=x0

【解析】由程序可以看出:x1=cos(x);x0=x。

【20】fabs(x1-x0)>=1e-6

【解析】循环结束的条件,显然:cos(x)与x 之间的误差即:x1 与x0 之间的误差小于10-6循环就结束。

【21】root(0)

【解析】显然要调用root 函数求根,初值是0。x=0 的时候,初始误差最大等于1,即在[0 1]之间找根。

(14)【22】p

【解析】题干中已知条件:该数字的末尾是p。该数字个位存放在a[0]当中。所以a[0]=p,c 是进位标志位。

【23】a[i-1]*p+c

【解析】由题设的第二个条件“对于i=1,2,3,…,计算“a[i-1]×p+a[i-1]向a[i]的进位值”得到t。

若t=p 则A 已找到,否则将t 的个位数保存到a[i],t 的十位数作为a[i]向a[i+1]的进位值”。可知该空应该是:a[i-1]×p+a[i-1]向a[i]的进位值。即a[i-1]*p+c。

【24】n-1

【解析】输出这个数,一共有n 位。从零开始标号,所以i 的初值是n-1。

(15)【25】*n=*m=0

【解析】m,n 没有初始值,必须赋值为0。不然原来内存中的数值会有不可预计的数。

【26】av+=x[i]

【解析】由下面的语句可以看出:av 是数组的平均值,所以之前的av 应该是数组的元素的和,再取

平均即可得到均值。

【27】x[i]>=av

【解析】由题干可知:n 是那些大于等于均值的数的个数,所以条件应该是x[i]>=av。

(16)【28】a[i]

【解析】语句“index[i].x=a[i][0];”是把数组每行的第一个元素赋值给index[i].x,显然,数组每一行

的第一个元素的地址赋值给index[i].y。

【29】index[j].x> index[k].x

【解析】第二个for 循环:把当前结点后面第一个大于当前结点的结点移动到当前结点的前面。即把结构体数组,按照从小到大的顺序排列。If 的条件是:大于(如果大于,记录这个结点的序号,然后作交换)。

【30】*(p+j)或者*( index[i].y+j)

【解析】按照首地址输出该行的每一个数字。

2007 年(秋)笔试试卷参考答案及解析

第一部分计算机基础知识

(1)D)【解析】1 bit 是单个的二进制数值,0 或1。虽然计算机可以提供指令测试和操作比特,但通常以多个比特的集合——字节来存储数据和执行指令。在大多数计算机系统中,1B 由8bit 构成。1bit 数值在存储器中用单个电容器充放电高于或低于某个电平来表示,比特是最小单位,字节是比特的集合也是一个单位。

(2)D)【解析】根据美国半导体协会预测,到2010 年将能达到18 英寸、0.07~0.05 微米的工艺水平。

(3)B)【解析】通信可分为模拟通信和数字通信,计算机网络属于数字通信。

(4)A)【解析】主存储器的基本编址单位是位,也就是它只能存储一个二进制的0 或1。目前市场上销售的PC 机,其内存容量可达数几百GB。不是所有PC 的内存条都是通用的,DDR1 和DDR2 是不可以互换的。

(5)D)【解析】现行PC 机中,IDE(或SATA)接口标准主要用于硬盘与主机的连接。

(6)A)【解析】Pentium 系列微机的内存条不相同,比如接口有些都不一样。主板上芯片组的作用提供存储器控制功能和I/O 控制。主板上CMOS 芯片用于存储BIOS 设置程序和一些软硬件设置信息。

(7)A)【解析】目前的主流硬盘容量为60~160GB,影响硬盘容量的因素有单碟容量和碟片数量。

(8)C)【解析】在Windows 操作系统(95 以后版本)中文件名最长可以使用255 个字符。

(9)B)【解析】一个算法应该具有以下五个重要的特征。有穷性:一个算法必须保证执行有限步之后结束;确切性:算法的每一步骤必须有确切的定义;输入:一个算法有0 个或多个输入,以刻画

运算对象的初始情况;输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

(10)B)【解析】目前IP 地址都是 4 组数,每组都是由二进制换算所得,IP 是0~255 的数字。

原因在于计算机最本质的通信还是要归结到0、1 的二进制上,一个11111111 换算成十进制就是255,所以255 是最大的可取值。

(11)B)【解析】FDDI 网和以太网不可以直接进行互连,局域网交换机可以在以太网或令牌环网与FDDI 主干网之间起着网桥的作用,专注于简单的帧格式的转换而避开了所有网络层复杂的处理。交换机仅以路由器一小部分的代价达到与FDDI 主干网连接的目的。

(12)C)【解析】一个URIL“http://https://www.wendangku.net/doc/3b12965901.html,/ index.htm”,其中的“/index.htm”代表路径及文件名。

(13)B)【解析】交换式以太网与总线式以太网本来就是以结构不同来区分的。

(14)C)【解析】GB2312、GBK、GB18030 这三个才是汉字标准,收录的汉字数依次从少到多,GB18030 最多。GB2312 收录了6763 个汉字,GBK 收录了21003 个汉字,GB18030—2000 收录了27533 个汉字,GB18030—2005 收录了70244 个汉字,Unicode 5.0 收录了70217 个汉字,目前看来GB18030—2005 收录了最多汉字。GB18030 和Unicode 都有足够的码位容纳更多的汉字。

(15)B)【解析】GIF 格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。最初的GIF 只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术的发展,可以同时存储若干幅静止图象进而形成连续的动画,使之成为当时支持2D 动画为数不多的格式之一(称为GIF89a),而在GIF89a 图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF 风光十足。

目前Internet 上大量采用的彩色动画文件多为这种格式的文件,也称为GIF89a 格式文件。

(16)D)【解析】在不同类型的声卡中,集成式产品价格低廉,技术日趋成熟,占据了较大的市场份额。随着技术进步,这类产品在中低端市场还拥有非常大的前景;PCI 声卡将继续成为中高端声卡领域的中坚力量,毕竟独立板卡在设计布线等方面具有优势,更适于音质的发挥;而外置式声卡的优势与成本对于家用PC 来说并不明显,仍是一个填补空缺的边缘产品。

(17)A)【解析】PAL 制彩色电视:YUV;NTSC 制彩色电视:YIQ ;计算机图像显示设备:RGB。

(18)B)【解析】在信息系统的结构化生命周期开发方法中,绘制E-R 图属于系统分析阶段的工作。

(19)D)【解析】在Microsoft Word 2000/2003(中文版)的表格中数据可排序,也能利用公式进行统计计算。

(20)B)【解析】幻灯片的大小一般是固定的,但用户也可以对其进行设置。

第二部分 C 语言程序设计

一、选择题

(21)C)【解析】编译程序把一个源程序翻译成目标程序的工作过程,分为五个阶段:词法分析;

语法分析;语义检查;中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称

为源程序分析,分析过程中发现有语法错误,给出提示信息。数组元素下标值越界不是语法或者句法错误,

所以不能发现。

(22)A)【解析】变量名由数字、下划线或者字母组成,且第一个不可以是数字。变量名不可以

是关键字。

(23)D)【解析】scanf 函数的一般形式为:scanf(“格式控制字符串”,地址表列);(前面多次考查scanf 的用法)。

(24)C)【解析】c 是字符串,其值为256(没有对应的码字,ASCII 码最大是127)所以c=0。

(25)B)【解析】for(el;;e3)S;显然:el 是循环起始条件,e3 是循环条件,S 中一定有循环终止条件,不然会出现死循环现象。用while 循环来表示循环条件是常数,循环体中先是循环终止条件判断,

然后是循环条件。

(26)B)【解析】p 指向一维数组,q 指向二维数组。显然p[2][3]是不对的。

(27)A)【解析】结构类型定义中typedef 后面就是结构体的类型名。

(28)D)【解析】long fun(int *x,int n,long *s);函数的参数分别是:地址(整型),整型数字,

地址(长整型)。数组变量名就是数组的首地址,所以a 就是地址,b 是长整型变量名,要用&取地址符号来取其地址。

(29)B)【解析】枚举类型:枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定

义为0,1,2…。若中间有元素被赋值,那它之后的元素的值,是从该值开始一次加1。x1=0,x2=1,x3=2,

x4=6,x5=7,x6=8。

(30)C)【解析】默认类型的形参在函数返回之后,其空间被释放,下次调用的时候,没有上次

存储的数据。而static 型的数据,其存储空间不被释放,所以上次调用时候的数据,可以保留下来。

二、填空题

●基本概念题

(1)【1】5

【解析】不同数据运算时,强制转换类型的顺序是:short,char->int-> unsigned->long->double。该题中,(float)(a+b)/2=3.5,b=b+3.5=2+3=5。

(2)【2】mind

【解析】puts(s)函数,用于输出易s 为首地址的字符串。puts(s+2)地址向后移动了两位,所以从字符串数组的第3 个字符开始打印。

(3)【3】pow(x,y)或pow(10,5)

【解析】pow(x,y)函数就是求x 的y 次幂。

(4)【4】FILE *zx

【解析】操作之前要定义文件指针。

●阅读程序题

(5)【5】Odd

【解析】EVEN(5+1)经预处理之后是:5+1%2==0? l:0,表达式5+1%2!=0,所以if 括号中运算结果是0,运行else 语句打印Odd。

(6)【6】30

【解析】do_while 循环:s=s*235%10=1*5=5,n=23;s=s*23% 10=5*3=15,n=2;s=s*2%10=15*2=30

n=0,跳出循环;所以s=30。

(7)【7】2 6

【解析】sub(1):s=2,t=t+2=2,返回值是2,打印输出。因为形参是地址,i 中的值已经改变,此时

i=2,for 循环,i++,所以i=3。sub(3):s=4,t=2+4=6,返回6,此时i=4,不满足循环条件,跳出循环。

(8)【8】135

【解析】f(123456):不满足if 条件:调用f(1234),不满足if 条件,调用f(12)->打印1->回溯到

f(1234),

打印3,(1234%100/10= 34/10=3)->回溯到f(123456),打印5(123456%100/10=5)。

(9)【9】1 5 3 【10】3 9 7

【解析】函数 fun:i=0,j=0,1%2!=0;*x=1,j=1;i=1,j=1,5%2!=0;*(x+1)=5,j=2;i=2,j=2,

2%2=0;i=3,j=2,3%2!=0;*(x+2)=3.j=3 i=4,j=3,8%2=0;i=5,j=3,3%2!=0;*(x+3)=3,j=4 i=6,j=4,

9%2!=0;*(x+4)=9,j=5 i=7,j=5,7%2!=0;*(x+5)=7,j=6;i=8,j=6,4%2=0;i=9,j=6,10%2=0;返

回j=6,分两行打印a 数组的前六个元素:1 5 3,3 9 7。

(10)【11】2 1 1 【12】3 2 1 【13】5 3 2

【解析】i=0,j=0,i-j+2=2,a[0][0]=2;i=0,j=1,i-j+2=1,a[0][1]=1;i=0,j=2,i-j+2=0,a[0][2]=1;

i=1,j=0,i-j+2=3,a[1][0]=3;i=1,j=1,i-j+2=2,a[1][1]=2;i=1,j=2,i-j+2=1,a[1][2]=1;i=2,j=0,i-j+2=4,

a[2][0]=5;i=2,j=1,i-j+2=3,a[2][1]=3;i=2,j=2,i-j+2=2,a[2][2]=2;分三行打印a 数组。

(11)【14】BASIC 【15】C

【解析】fun(char str[][20], int n): i=0,j=1, strcmp(str[1], str[0])<0, k=1, str[1],str[0]做一个交换。i=0,j=2, strcmp(str[2], str[1])<0, k=2 , str[2],str[0]做一个交换。i=0,j=3, strcmp(str[3],str[2])>0 , str[2],str[0]做一个

交换。i=0,j=4, strcmp(str[4],str[2])<0, k=4, str[4],str[0]做一个交换。i=0,j=5, strcmp(str[5],str[4])>0 , str[4],

str[0] 做一个交换。可以看出,该操作是将二维数组按照由大到小的顺序进行排列,最后的结果是"BASIC","C","COBOL","FORTRAN","PASCAL", "Smalltalk"。

(12)【16】6 【17】1 2 3 【18】6 5 4

【解析】merge 函数:i=0,k=m[0][0]=0!=2,j=m[1][0]=0,k=0,c[0]=a[0]=1;i=1,k=m[0][1]=1!=2,

j=m[1][1]=0,k=1,c[1]=b[0]=2;i=2,k=m[0][2]=0!=2,j=m[1][2]=1,k=0,c[2]=a[1]=3;i=3,k=m[0][3]=

1!=2,j=m[1][3]=2,k=1,c[3]=b[2]=6;i=4,k=m[0][4]=0!=2,j=m[1][4]=2,k=0,c[4]=a[2]=5;i=5,k=m[0][5]=1!=2,j=m[1][5]=1,k=1,c[5]=b[1]=4;i=6,k=m[0][6]=2。跳出循环。返回i=6。Main 函数打

印n(=i=6)。

打印c 数组的前三个元素。

打印c 数组的后三个元素。

●完善程序题

(13)【19】k%10

【解析】由下面的if 的条件可以看出:a 数组是n 的各个数位上的数字,其中a[0]是最低一位。for 循环:依次取出数字n 的每一位上的数字,k%10 是最低位,k/10 是去掉最低位之后的数字。

【20】a[2]==0 或!a[2]

【解析】该数字满足要求的条件是:百位数为0 并且去掉百位数0 之后得到的三位正整数乘以9 等于原四位正整数。“(a[3]*100+ a[1]*l0+a[0]*9==n)”语句是第二个条件,显然该空就是第一个条件,即该数字

的百位是0。

(14)【21】x0=x

【解析】下面的语句用到了x0,但是x0 定义的时候没有初值,现在该空是给x0 赋初值。

【22】x0-f/fl 或x0-F(x0)/Fl(x0)

【解析】该空用牛顿迭代法求方程的根,x=x0-(f(0)/f1(x0))用 C 语句表示就是:x0-F(x0)/Fl(x0)。

(15)【23】COUNT st[]或COUNT *st

【解析】n=count(S,10,stat);由函数的调用形式可以得知:最后一个形参是COUNT 型的结构体数

组变量。

【24】i

【解析】for 循环是统计要求,显然次数是S 数组中的字符串的个数n。

【25】st[j].count++

【解析】if 条件是如果字符串x(待统计的选票)与前面已统计的第j 个人名相同,则,第j 个人名对应的个数应该加1。

【26】strcpy(st[k].name,x[i])

【解析】if 条可以看出:x(待统计的选票)与已统计的不匹配,应该为该选票重新建立一个选项:把x 数组赋值到st 的第k 个。

(16)【27】(P)

【解析】print 函数输出p 指向的链表中所有结点的x 值。While 循环的条件是:p 指针非空(非空的指针不为零,空指针式"\0",不满足循环条件)。

【28】P->x

【解析】输出p 指针指向的数字,即P->x。

【29】p2->next 或p3->next

【解析】fun 函数从h 指向的链表第二个结点开始遍历所有结点,当遇到x 值为奇数的结点时,将该结点移到h 链表第一个结点之前,函数返回链表首结点地址。该空格的操作是:将该结点之后的下一个结

点,移到该结点的位置:即将该结点前面的结点的nest 指针指向该结点的下一个结点(p2= p3 是该结点的

下一个结点)。

【30】h=p3

【解析】该部分的操作是:将该结点移到h 链表第一个结点之前,函数返回链表首结点地址。前一个

语句是将该奇数结点的nest 指向h,所以当前操作就是将该奇数结点设置成头指针

2008 年(春)笔试试卷参考答案及解析

第一部分计算机基础知识

(1)D)【解析】IC 卡又称集成电路卡,它是一个塑料卡片,其大小与磁卡一样,但比磁卡要厚且硬。在卡片的正面可以看到一块小金属片,在金属片的下面是一块半导体芯片。这种芯片可以是存储器

或微处理器(CPU)。带着存储器的IC 卡又称存储卡,带着CPU 的IC 卡又称智能卡或CPU。

(2)C)【解析】数据传输速率是描述数据传输系统的重要技术指标之一。数据传输速率在数值上等于每秒钟传输构成数据代码的二进制比特数,单位为比特/秒(bit/second),记作bps。

(3)B)【解析】CPIJ 的运算速度与许多因素有关,提高CPIJ 速度的有效措施有增加CPU 中寄存器的数目;提高CPU 的主频;增加CPU 中高速缓存(Cache)的容量。

(4)C)【解析】PC 机常用的 4 种外设接口,其中键盘、鼠标、数码相机和移动硬盘等均能连接的接口是USB。

(5)B)【解析】对于一般家用和业余外景拍摄,200 万~300 万像素的相机就足够了,可以输出1984×1448 高精密的图像,(按300 万奥林巴斯720UZ)冲印的话,200 万相机冲印 5 寸和 6 寸的照片是

没有问题的,300 万冲印7 寸也是很棒的。

(6)A)【解析】转速是指硬盘内电机主轴的转动速度,单位是rpm(每分钟旋转次数)。其转速越高,内部传输速率就越高。目前一般的硬盘转速为5400 转/分和7200 转/分最高的转速则可达到10000

转/分以上。

(7)C)【解析】自由软件,根据自由软件基金会的定义,是一种可以不受限制地自由使用、复制、研究、修改和分发的软件。

(8)C)【解析】在Windows 操作系统多任务处理中,前台任务和后台任务都能得到CPU 的响

应。

(9)A)【解析】从算法需要占用的计算机资源角度分析其优劣时,应考虑的两个主要方面是空间代价和时间代价。

(10)C)【解析】接入因特网的每台计算机的IP 地址由网络管理员或因特网服务提供商(ISP)分配。

(11)B)【解析】局域网中的每个节点都有一个惟一的物理地址,称为介质访问地址(MAC 地址)。

(12)A)【解析】目前在网络互连中用得最广泛的是TCP/IP 协议。事实上,TCP/IP 是一个协议系列,它已经包含了100 多个协议。在TCP/IP 协议中,远程登录使用的协议是Telnet。

(13)D)【解析】发邮件者和收邮件者如果同时在线,都要通过邮件服务器进行通信。

(14)A)【解析】国际标准化组织(ISO)将世界各国和地区使用的主要文字符号进行统一编码

的方案称为UCS/Unicode。

(15)B)【解析】存放一幅1024×768 像素的未经压缩的真彩色(24 位)图像,大约需要

1024×768×(24/8)字节的存储空间。图像每个点需要1bit,1024×768 的就需要1024×768 个bit,但是我们常说的KB,MB 的单位是字节,1B=8bit。

(16)A)【解析】根据奈奎斯特(Nyquist)的采样定理:设模拟信号f(t)的最高频率为fm(Hz),

如果对该模拟信号进行周期性采样,只要采样的频率 f 满足f≥2fm,则这些离散采样值可以无失真地恢复

成原来的模拟信号。由题意,知fm=3400Hz,f=1/T=8000Hz,故满足f≥2fm,由S=(1/T) ×log

2N 式中,T

为传输信息的电信号脉冲宽度,N 为一个码元所取的有效离散值个数。S=1/(125×0.000001)×log

2(128)= 56000b/s 即56KB/s。

(17)C)【解析】彩色图像所使用的颜色描述方法称为颜色模型。在下列颜色模型中,主要用于

彩色喷墨打印机的是CMYK 在PS 中,在准备用印刷颜色打印图像时,应使用CMYK 模式。如果由RGB 图像开始,最好先编辑,然后再转换为CMYK 模式。如以RGB 模式输出图片直接打印,印刷品实际颜色将与RGB 预览颜色有较大差异。

(18)B)【解析】信息检索系统的主要目标是实现文本索引的快速构建,动态文档集的索引维护(Index Maintenance),短语查询(Phrase Query),Top-k 查询的快速处理(Top-k Query Process)以及各种检索模型(IR Model)等。

(19)B)【解析】对数据清单进行排序时,可以选择3 个关键字是“主要关键字”、“次要关键字”

和“第三关键字”。

(20)D)【解析】Microsoft FrontPage 2000(中文版)系统提供了“绘图”工具栏,便于用户在

网页中修改图。

第二部分 C 语言程序设计

一、选择题

(21)C)【解析】C 源程序是由函数组成的。程序中大都只有一个主函数main(),而且程序总是

从main 函数的第一条语句开始执行。但实际中程序往往由多个函数组成。函数是C 源程序的基本模块,

通过对函数模块的调用实现特定的功能。C 语言中的函数相当于其他高级语言的子程序。main()函数是主函数,是所有程序运行的入口。但是main 函数可以在 C 源程序的任意位置,并不一定在所有函数的前面。

(22)B)【解析】①十进制整常数没有前缀。其数码为0~9。八进制整常数必须以0 开头,即以

0 作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。十六进制整常数的前缀为0X 或0x。

其数码取值为0~9,A~F 或a~f。②整型常数的后缀:长整型数是用后缀“L”或“l”来表示的。无符号数

也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。③浮点数的后缀为“f”或“F”即表示该

数为浮点数。④转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。转

义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。C 语言字符集中的任何一个字符均

可用转义字符来表示。表中的\ddd 和\xhh 正是为此而提出的。ddd 和hh 分别为八进制和十六进制的ASCII 代码。如\101 表示字母“A”,\102 表示字母“B”,\134 表示反斜线,\XOA 表示换行等。选项C)是想表

示一个字符串常量,但是字符串常量是由一对双引号括起的字符序列,此处缺少一个双引号。

(23)D)【解析】选项A)是一个打印语句,printf 里是一个选择语句:如果i 等于 4 的话,输出4 和回车;否则输出一个i,没有回车。选项B)是一个选择语句,和A 的运行结果是一样的。选项C)是for 循环,break 语句就是循环的结束,结束的条件是i=1。选项D)没有循环的条件也没有循环结束的条件,所以是错误的语句。

(24)B)【解析】printf 函数的格式控制中关于精度:精度格式符以“.”开头,后跟十进制整数。

本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际

位数大于所定义的精度数,则截去超过的部分。显然这里小数点后面保留3 位数。

(25)A)【解析】选项 A)中出现了一个赋值语句,根据优先级,先做“x>y”得到的是一个常

数,然后把 2 赋值给这个常数,显然是不正确的。B)是普通的关系表达式,先判断“z>y”,得到-1,再

判断-1>x,显然也是-1。选项C)先判断大小再比较判断值与 1 是否相等。选项D)括号中是逗号表达式,

其值是最后一个表达式的值2,然后再判断2 与x 是否相等。

(26)C)【解析】选项A)、B)、D)都是将数组当前的指针向后移动四位,都是数组第五个元素的值,就是4。选项C)是将数组当前的指针向后移动三位,其值是3。

(27)A)【解析】选项A)用j 作为控制循环的指针,在前面定义的j 是一个无符号的整型数字,

所以会一直大于0,永远符合循环的条件,所以循环不会结束,即出现无限次循环。选项B)也是用j 的

递增控制循环,但是循环结束的条件是一个正数,所以循环可以结束。最后两个选项都是用i(有符号整

型)的递增和递减控制循环,循环可以结束。

(28)C)【解析】fopen 函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件

名,使用文件方式);其中,“文件指针名”必须是被说明为F ILE 类型的指针变量;“文件名”是被打开文

件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。其中

“r+”表示读写打开一个文本文件,允许读和写。

(29)B)【解析】一维数组的定义方式为:类型说明符数组名[常量表达式];其中:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示

数据元素的个数,也称为数组的长度。选项B)数组的长度用了一个变量,所以选项B)错误。

(30)D)【解析】C 语言允许用typedef 说明一种新类型名。格式:typedef 类型名标识符;“类

型名”必须是在此语句之前已定义的类型标识符;“标识符”是一个用户定义标识符,用作新的类型名;typedef 语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名

依然有效。如:

typedef struct stu

{ char name[20];

int age;

char sex;

} STU;

定义STU 表示stu 的结构类型,然后可用STU 来说明结构变量:

STU body1,body2;

有时也可用宏定义来代替typedef 的功能,但是宏定义是由预处理完成的,而typedef 则是在编译时完

成的,后者更为灵活方便。

二、填空题

●基本概念题

(1)【1】double

【解析】实型也称为浮点型。实型常量也称为实数或者浮点数。在C 语言中,实数只采用十进制。它

有两种形式:十进制小数形式和指数形式。

实型变量分为:单精度(float 型)、双精度(double 型)和长双精度(long double 型)三类。在Turbo C 中单精度型占4 个字节(32 位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64 位)内存空间,其数值范围为 1.7E-308~1.7E+308,可提供16 位有效数字。

(2)【2】3

【解析】strcpy(s1, s2)是把s2 中的内容复制到s1 中,在结尾处加上一个“\0”。返回s1 的首地址。这一操作之后s1 中的内容是“A\\0”。

(3)【3】static

【解析】存储类说明符有auto、register、static、extern 和typedef。

①auto 和register 将声明的对象说明为自动存储类对象,这些对象仅可用在函数中。

这种声明也具有定义的作用,并将预留存储空间。register 说明的声明等价于auto 说明的声明,所不

同的是,register 暗示了声明的对象将被频繁地访问,将尽可能存储在寄存器中。如果一个对象被声明为register,则将不能对它应用一元运算符&,声明为register 但实际按照auto 类型处理的对象的地址进行计

算是非法的。

②static 将声明的对象说明为静态存储类。这种对象可以用在函数内部或者函数外部。在函数内部,

该说明符将引起存储空间的分配,具有定义的作用。在函数外部,该说明符将引起声明对象为具有内部链

接。另外,若将其定义为static 类型,则其初值默认为0。

③函数内部的 extern 声明表明,被声明的对象的存储空间定义在其他地方。在函数外部,说明声明

的对象具有外部链接。

④typedef 说明符并不会为对象预留存留空间。

显然这里应该是静态存储类型。

(4)【4】#

【解析】所有的预处理命令都是以“#”开头的。C 语言有以下12 种预处理命令:#define;#undef;

#include;

#if;#else;#elif;#endif;#ifdef;#ifndef;#line;#pragma;#error。

(5)【5】26

【解析】语句:e=a>b? --c:++c;e 最后的值就是这个if 语句的结果,先判断a>b,显然不成立,所以

执行++c,这里c=26,所以e 的值也是26。

●阅读程序题

(6)【6】6

【解析】程序的关键是这个while 循环,循环的条件是Count(x)即++x 不等于零。先做自加运算循环中

所有自加之后的x 的值依次是:-2,-1。所以n--只进行两次。n 最后的结果是6。

(7)【7】2

【解析】程序从main 函数开始执行,到“k=fun(fun(w+1,w),w);”这一语句时,进入函数fun(w+1,w)即

fun(2,1),返回-1;跳出fun(w+1,w),进入fun(-1,1),返回1-(-1)=2。返回值赋值给变量k,最后打印输出。

(8)【8】23 【9】other

【解析】for 循环中的循环控制变量i 可能的取值是0,1。所以switch 语句执行2 次。switch 中的常量表达式是一个逗号表达式,其值是最后一个表达式a*c 的值。第一次执行switch 语句,++a=1,a*c=2,进入“ case 2:printf("2");” 语句,打印输出 2 ,注意,这语句后面没有

break 语句,所以进入“ case

3:printf("3\n");break;”语句,打印输出3 之后,跳出switch 语句,进入下一次循环,即进入下一个switch 语句。第二次执行switch 语句,++a=2,a*c=4 进入default:printf("other\n");打印输出other 后,跳出switch 语句,和for 循环语句,函数运行结束。

(9)【10】963

【解析】程序首先定义了一个字符串常量 a,接着定义了一个指针变量指向 a。接着程序进入语句“while(*++P)t*=10;”,如果++p 指向的内容不为空的话,t=t*10,这里p 指针向后移动2 次指向字符串结束

标志,所以循环进行两次,得到t=100,p 指向字符串结束标志。下一个语句“p--”是的指针p 指向字符

串的最后一个字符“9”。进入下一个while 循环,循环的条件是t/10 不等于0,t 的初值是100,所以循环

进行三次。第一次循环:s=s+当前p 指针指向的字符的ASCII 与字符…0?的ASCII 码的差值×\u24403X前t 的

值,所以s=0+9×100=900。同样的第二次循环得到的s=900+6×10=960。第三次循环得到的s=960+3*1=963。跳出循环,打印输出s,即输出963。

(10)【11】10 【12】20

【解析】在main 函数之前定义了一个包含两个整型的变量的结构体,紧接着定义了三个大小分别为5,

2,2 的结构体数组,并对第一个数组初始化。main 函数定义完变量之后,进入for 循环,满足循环条件的是st 数组的x 变量不是-1,即对数组的前四个元素进行分类操作,如果st 数组的x 变量可以被 2 整除的话,

放到s1 数组中,否则放到s2 数组中。所以s1 数组包括st 的第一个和第三个元素,s2 数组包括st 的第二

个和第四个元素。在main 函数的最后打印输出s1 和s2 的第一个元素的变量y 的值,即st 数组中第一个和第二个元素中变量y 的值:10,20。

(11)【13】4321

【解析】main 函数只有一个print(4);语句,进入print(int n)函数,n=4,进入print_n(int n)函数,n=4,n 不等于0,运行下一条语句,打印n,即打印4;n>1 条件满足,进入print_n(int n)函数,此时n=3,打印3。

n>1 条件满足,进入print_n(int n)函数,此时n=2,打印2。n>1 条件满足,进入print_n(int n)函数,此时

n=1,打印1。n>1 条件不满足,打印回车。至此程序输出的第一行打印完毕。即4321 回车。

(12)【14】7 8 9 【15】4 5 6 【16】1 2 3

【解析】子函数sot 的第一个嵌套的for 循环,实现找到a 数组的最大值和最小值,最小值的行序号保存到i0 中,最大值的列序号保存到j1 中。第二个for 循环实现数组的第i0 行和最后一行的交换,第三个for 循环实现第j1 列和最后一列的交换。第四个for 循环实现数组的按照行优先的三行三列格式的输出。main 函数中定义了一个3×3 的数组,根据上面的sot 函数的分析:i0=0,j1=0。所以第0 行和第 2 行交换,

然后第0 列和第2 列交换。得到的数组是:{{7,8,9},{4,5,6},{1,2,3}}。

(13)【17】k=7 【18】not found

【解析】函数strch 功能是查找字符串数组s 中有没有字符ch,如果有,则返回其在s 中的位置序号;如果没有,则返回0。main 函数中定义了一个字符串s1 作为函数中的字符串s,字符ch 由用户输入,如果找到了ch 则打印输出k,如果没有找到,打印输出not found。由题干可知,第一次输入的2,在字符串中的第7 位,所以打印输出k=7。第二次的输入的i,字符串s 中并没有,所以打印输出“not found”。

●完善程序题

(14)【19】char * 【20】apple 或0

【解析】数组fruits 是一个字符串数组,所以定义的时候用char*来表示其类型。

程序代码中首先定义了一个自定义类型,用Fruit 代表一个枚举类型。然后用这个自定义类型,定义

了三个变量xyz。枚举的定义枚举类型定义的一般形式为:enum 枚举名{ 枚举值表};在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。枚举类型在使用中有以下规定:枚举值是常量,不是变量。不

能在程序中用赋值语句再对它赋值。枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义

为0,1,2…。所以这里的x 可以是数字0,也可以是定义中的第一个枚举元素“apple”。

(15)【21】t1 * odd/even 【22】t3 * 0.5 * 0.5 【23】sum * 6

【解析】根据公式可以看出每一项的第 1 个括号中数值的变化规律是每次增加 1 个乘数其分母和分子

的值比前一个数多2,两个括号中间的数则分母每次加2,第 3 个括号中的数则每次多2,则次可以得出t1

和t2 的表达式分别为t1 * odd/even 和t3 * 0.5 * 0.5。最后输出结果乘6 即可得出π的值。

(16)【24】i<8 【25】k * 10 【26】P++

【解析】根据题目的要求“组成一个不超过8 位的十进制整数”,所以这里数字的位数应该是小于8 的,从下面的语句中可以看出,i 是控制位数的,所以循环的结束条件应该包含一条i<8。

这里如果p 指向的是一个数字,则应该将该数字添加到前面的数字的后面,即前面的数字乘10 再加

上当前的数字k。

实现操作之后,应该将指针p 指向下一个数组元素。即p++。

(17)【27】p=pt 【28】pr=pr*>next

【29】NULL 或0 【30】head=p

【解析】首先定义了一个用户自定义类型,用linklist 声明结构体变量。create 函数的返回值是linklist

类型的指针,功能是创建一个链表,返回这个链表的头指针。for 循环,首先开辟一个结构体类型的存储空间,如果p 是空指针,说明这个链表还没有头指针,所以,把新开辟的pt 付给p,(最后可以返回p 作为头指针)所以第27 题p=pt。

接着,如果p 不是空,说明链表已经建立,只要把当前的结点放到链表的最后就可,pr 是当前的最后

一个结点,第28 题应该是当前结点的更新,把新开辟的pt 作为当前的pr,即pr=pr*>next,或者pr= pt。

函数revlist 的功能是“将head 链表变换为倒序链表”按照题目中链表倒序算法的提示,第29 题之前

的一条语句完成的是“使hp 指向head 链表”所以本空应该完成的是:“置head 为0(head 链表为空链表)”

所以,本空格应该填写的是:NULL 或0。

根据前面算法的说明本空格应该完成是:“将所删除的结点再依次插入到head 链表第一个结点之前”。

即head=p。

2008 年(秋)笔试试卷参考答案及解析

第一部分计算机基础知识

(1)D)【解析】现代通信往往被理解为单一的电信通信、数字通信、IT 产业及电子产品制造业

等高新技术通信而忽略了通信的本质。邮政通信也是现代通信的一部分,邮政通信是以实物传递为基础通

过对文字、图片、实物的空间转移传递信息,是国家安全建设基础个人通信自由及隐私保护的体现。

(2)C)【解析】二进制数10111000 和11001010 进行逻辑“与”运算结果为10001000,结果再

与10100110 进行逻辑“或”运算结果为10101110,最终结果的十六进制形式为AE。

(3)A)【解析】目前PC 机所使用的大多数CPU 均是Intel 公司的产品。

(4)C)【解析】BIOS 芯片是特殊的ROM(Read Only Memory,只读存储器)芯片,其中的内

容只能读取,若要改变,必须采用专用的软件(就是通常我们说的刷BIOS,使用诸如

AWDFLSH 等)。

CMOS 采用互补金属氧化物半导体制作的一块RAM(Random Access Memory,随机存取存储器)芯片,

它也是固定在计算机主板上的。它用来保存当前系统的硬件配置和用户对某些参数的设定。由于是RAM

芯片,它必须由主板上的电池供电来保持芯片中的数据。

(5)D)【解析】硬盘容量的增加主要是靠碟片数增加和单碟容量的增加来改变。

(6)A)【解析】可用于连接键盘或鼠标器的PS/2 接口是一种串行数据传输接口。

(7)A)【解析】任何软件都具有版权,但是自由软件是能随意复制和使用。

(8)C)【解析】Access 2000 是Office 办公软件中的数据库软件。

(9)D)【解析】在Windows XP 中,作为虚拟内存使用的交换文件的文件是Win386.swp。

(10)C)【解析】数据结构与算法主要研究内容有:数据的逻辑结构,即数据关系之间的逻辑关系;数据的存储结构,即数据的逻辑结构在计算机中的表示;操作算法,即插入、删除、修改、查询、排

序等。

(11)D)【解析】FDDI 网和以太网不可以直接进行互连,局域网交换机可以在以太网或令牌环

网与FDDI 主干网之间起着网桥的作用,专注于简单的帧格式的转换而避开了所有网络层复杂的处理。交

换机仅以路由器一小部分的代价达到与FDDI 主干网连接的目的。

(12)D)【解析】路由器用于连接多个异构的计算机网络。网络中路由器应分配两个或两个以上

的IP 地址。

(13)A)【解析】CableModem 与以往的Modem 在原理上都是将数据进行调制后在Cable(电缆)的一个频率范围内传输,接收时进行解调,传输机理与普通Modem 相同,不同之处在于它是通过有线电

视CATV 的某个传输频带进行调制解调的。而普通Modem 的传输介质在用户与交换机之间是独立的,即用户独享通信介质。CableModem 属于共享介质系统,其他空闲频段仍然可用于有线电视信号的传输。

(14)B)【解析】Web 浏览器和Web 服务器都遵循HTTP 协议,该协议定义了浏览器和服务器的网页请求格式及应答格式。

(15)B)【解析】访问控制的任务是对每个文件或信息资源规定各个(类)用户对它的操作权限。

(16)B)【解析】ASCII 码只占用1 个字节,而汉字机内码要占用2 字节,十六进制7451 不可能是 1 个汉字的机内码。

(17)A)【解析】Unicode 是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode 用数字0~0x10FFFF 来映射这些字符,最多可以容纳1114112 个字符,或者说有1114112 个码位。

码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32 都是将数字转换到程序数据的编码方案。

GB18030 标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分采用GB/T 11383 的编码结

构与规则,使用0×00 至0×7F 码位(对应于ASCII 码的相应码位)。双字节部分,首字节码位从0×81 至0×FE,尾字节码位分别是0×40 至0×7E 和0×80 至0×FE。四字节部分采用GB/T 11383 未采用的0×30 到0×39 作

为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130 到0×FE39FE39。其中第一、三个字节编码码位均为0×81 至0×FE,第二、四个字节编码码位均为0×30 至0×39。

(18)B)【解析】GIF 格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到

了广泛的应用。最初的GIF 只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术的发展

以同时存储若干幅静止图象进而形成连续的动画,使之成为当时支持2D 动画为数不多的格式之一(称为

GIF89a),而在GIF89a 图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF 风光十足。目前Internet 上大量采用的彩色动画文件多为这种格式的文件,也称为GIF89a 格式文件。

(19)C)【解析】首席执行官(Chief Executive Officer,CEO)是在一个企业中负责日常经营管

理的最高级管理人员,又称作行政总裁(香港和东南亚的称呼)或最高执行长(日本的称呼)。

(20)D)【解析】在信息系统的结构化生命周期开发方法中,具体的程序编写属于系统实施阶段

的工作。

第二部分 C 语言程序设计

一、选择题

(21)D)【解析】在一个C 程序中放在符号“/*”和“*/”之间的内容,称为对程序的注释。注

释是对程序的说明。注释从“/*”开始到最近的一个“*/”结束,其间的任何内容都被编译程序忽略。换

句话说,注释只是为了更好地看懂程序而做的标记,不对程序产生任何影响。C 程序书写格式的基本习惯

有:①一行内可以写几个语句,一个语句可以分写在多行上。②每个语句和数据定义的最后必须由一个分号“;”结束(分号是C 语句的一部分,不是语句之间的分隔符)。一个C 程序总是从主函数开始执行,

到main 函数体执行完后结束,而不论main 函数在整个程序中的位置如何。程序中可以有多个函数,但是main 函数只能有一个。

(22)B)【解析】C 语言合法标识符的命名规则是:①标识符由字母、数字和下划线组成;②第

一个字符必须为字母或下划线;③大写字母与小写字母被认为是两个不同的字符——区分大小写;④ C 语言规定了一个标识符允许的字符个数,即标识符的前若干个字符有效,超过的字符将不被识别。C 语言

预先规定了一批标识符,它们在程序中都代表着固定的含义,不能另作他用。这些字符称为关键字。变量

的命名不能包括关键字。选项B)中的switch 就是一个C 语言的关键字,不能作为变量名。

(23)A

显而易见,变量f 只能是长整型的,即声明为long int 型。

(24)C)【解析】本小题考查的是指针变量的运算,指针变量可以进行相减,取数值运算,不能

进行取地址的运算,只能对非指针变量进行取地址的运算,所以C)是不正确的。

(25)B)【解析】C 语言中的加减乘除运算符分别是:+,-,*,/。选项A)错误在于2*b 应该

用括号括起来,选项C)的错误:*和括号不能省略,选项D)的错误在于sqrt 没有括号,求根函数是 C

的库函数,和普通的函数一样,实际参数应该用括号括起来。

(26)A)【解析】printf 语句中,变量的参数列表,指针向后移动了10 个位置,即指向了第二个

字符串,所以输出:“Beijing”。选择选项A)。

(27)C)【解析】选项A)定义了一个长度是2 的一维数组,没有初始化。选项B)定义了一个

整型的数组,虽然没有定义数组的长度,但是在初始化的过程中,给出了数组的长度。选项C)定义了一

个整型数组,但是初始化错误,正确的应该是:int a[3]={0}。

(28)C)【解析】结构体变量的指针可以指向结构体变量,所以选项A)和选项D)是正确的。

选项C)想要打印输出结构体变量stu 中的两个变量的值。正确的输出方式是:scanf("%s%d",&stu.

name,&stu.score);。

(29)A)【解析】选项A)是与运算,第一项!a 的值就是0,所以整个表达式的值也是零。B 是

或运算,只要有一项不为零,结果就不是零,显然最后一项C 是非零的数,所以B 非零,同样可以得到C 和选项D)的结果,都是非零。

参考答案及解析第 2 页共 5 页

(30)A)【解析】注意sizeof 函数返回的值是数组的大小,定义时是多大,返回值就是多大。与strlen 函数是有很大区别的,strlen 求出字符串中字符的多少,确切的说是第一个…\0?之前的字符的多少。

本题中,strlen(ss)的值是3。

二、填空题

●基本概念题

(1)【1】4

【解析】return 语句后面跟着的是一个逗号表达式,逗号表达式的结果是其最后一项的结果,所以,(3,

4)的值等于4,所以fun 函数的返回值是4。

(2)【2】4.5

【解析】考查的知识点是强制转换类型。在C 语言的表达式中,如果运算符两边的整型类型不相同,

将进行类型之间的转换。转换规则如下:①当赋值运算符左边的变量为短整型变量,右边的值为长整型变量,短整型变量只能接受长整型变量低位上两个字节中的数据,高位上两个字节中的数据将丢失。②当赋值运算符左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边数值

的范围不应超出左边变量可以接受的数值范围。同时注意,这时负数将转换为正数。③当赋值运算符左边的变量为有符号整型,右边的值为无符号整型时,复制的机制同上。这时若符号位为1,将按负数处理。

第一项(float)(a+b)/2 结果是 3.5,第二项(int)x%(int)y=4%3=1,所以最后的结果是4.5。

(3)【3】1

【解析】枚举的定义枚举类型定义的一般形式为:enum 枚举名{ 枚举值表};在枚举值表中应罗列出

所有可用值。这些值也称为枚举元素。枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定

义为0,1,2…。

这里A 的值是0,所以A+1=1。所以打印输出1。

(4)【4】"a+"或"at+"或"ab+"

【解析】主要考查的是常用文件使用方式及其含义。

●阅读程序题

(5)【5】3/5,5/8

【解析】main 函数的for 循环中,i 只能等于1 或者2。i=1 时,输出2/1,2/3(回车)。i=2 时,输出3/5,

5/8(回车)。即最后一行输出的是:3/5,5/8。

(6)【6】1

【解析】第一次for 循环,i=0,从case0 开始的操作:sum++;sum++;sum--;最后的sum=1。

第二次for 循环,i=1,从case1 始的操作:sum++;sum++;sum--;最后的sum=2。

第三次for 循环,i=2,没有符合的语句,没有操作。

第四次for 循环,i=3,从case3 始的操作:sum++;sum--;最后的sum=2。

参考答案及解析第 3 页共 5 页

第五次for 循环,i=4,从case4 开始的操作:sum--;最后的sum=1。

所以最后的结果是输出1。

(7)【7】10,20

【解析】main 函数对a 和 b 变量赋以初值,进入func 函数,函数中对a 和b 分别赋以数值,但是func

函数返回main 函数的时候,形式参数的空间得以释放,所以func 函数中对a 和 b 的赋值并没有保留下来。

所以main 函数最后打印a,b 的时候,还是原来main 函数中定义的a 和b 的值,即10,20。

(8)【8】3 【9】2

【解析】main 函数中只有两个printf 函数,打印函数f1 和函数f2 的返回值。分析f1 函数,定义了一个静态的变量i,第一次调用f1,返回值f=f*(++i)=f*1=1。第二次调用f1 函数,f=f*(++i)=f*2=2。所以第

一个printf 函数的输出结果是f1()+f1()=1+2=3.

函数f2 中定义的变量没有静态变量,所以每次调用的结果是相同的,返回值f= f*(++i)=f*1=1,所以

第二个printf 函数的输出结果是:f2()+f2()=1+1=2。

(9)【10】ABCxyz

【解析】main 函数中定义了两个字符串数组,a 是字符串数组的首地址,指向…A?,a+strlen(a)指向的

是 C 后面的第一个...\0?。sf 函数的功能是把字符串b 复制到a 中,直到字符串a 结束即遇到第一个 0

为止。所以之后的a 就是“ABCxyz”。打印输出。

(10)【11】1 1 1 【12】3 2 1

【解析】main 函数定义了一个3×3 的数组,行号小于列号的元素都赋值1,其他的元素是行号减去列

号加一。所以数组成为:1 1 1,2 1 1,3 2 1。最后一个嵌套的for 循环是按照3×3 的格式输出这个数组,

所以第一行和第三行就是数组的第一行和第三行,即:1 1 1, 3 2 1。

(11)【13】8 3 4 1

【解析】main 函数中调用了sort 函数。子函数中的外层for 循环只能循环一次,i 只能等于1,p=1,内层的for 循环也只能运行一次,j 只能等于3。a[j]=3>a[P]=1,if 条件满足,所以p=3。因为p 不等于i,所以a[i]与a[P]做一次交换,也就是a[1]与a[3]交换。所以数组变成8 3 4 1。打印输出即可。

(12)【14】100 101 【15】10 20

【解析】首先定义了一个结构体s,包含一个整型的变量和一个指向整型变量的指针。接着定义了一个

指向结构体的指针p,在main 函数的外部定义了一个大小为 5 的整型的数组 d 和一个大小为 5 的结构体数

组a。main 函数中是的指针p 指向结构体数组a,然后打印一系列的数据。第一个printf 函数打印输出结构体数组的第一个元素的x 值100,之后x 做加加运算。第二个printf 函数打印输出结构体数组的第一个元素的x 值101(第一个printf 操作之后第一个元素的x 的值做了变化)和回车,输出结果的第一行结束。

第三个printf 函数打印输出结构体数组的第一个元素的y 指向的数字,*p->y= &d[0],所以打印输出d[0]=10。

第四个 printf 函数打印输出结构体数组的第二个元素的y 指向的数字,* ++p->y= &d[1],所以打印输出

d[1]=20。

(13)【16】3 6 1 【17】5 2 8 【18】4 7

【解析】main 函数先用一个for 循环给num 数组的前13 个元素赋以初值(1~13)。进入while 循环,

此时n=8,所以循环的条件是m<7。循环体中如果当前数组元素不为零,则打印输出,然后对当前数组元

素置零,k 置零,如果已经输出了三个元素,则输出一个回车。数组元素指针i 向后移动一位,如果i 增加到n 则i 等于0。

第一次输出,i=3,也就是数组的第三个元素,即3。hum[2]=0。同理第二次输出i=6,,hum[5]=0。数

组的第6 个元素,即6。第三次输出,i=1(i=8 时,最后一个if 语句把i 置零),hum[0]=0。输出回车,第一行输出完毕,m=2。

第二行的第一次输出:从hum[0]开始的不为零的第三个数字,显然是hum[4]=5。之后hum[4]=0。同

理第二次输出从hum[4]开始的第三个不为零的数,注意i=8 的时候i 跳回零,所以此次输出hum[1]=2。之后hum[1]=0。第三次输出,i=7,hum[7]=8,另以hum[7]=0。输出回车,第二行输出完毕。m=5。

第三行输出:第一次,上一次循环中i=8,置零,所以i 从0 开始查找第三个不为零的数字:4(i=3),

此时m=6。第二次,i 从3 开始查找第三个不为零的数字:7,此时m=7,while 的循环条件不满足,循环

结束,输出。

完善程序题

(14)【19】i

【解析】main 函数中的“sumh=fsum(a,4);”语句,实现的功能是求a 数组中前4 个元素之和。所以函数fsum 中的n 是所要求和的元素的个数,for 循环实现的就是元素的相加,总共n 个,所以循环结束的条

件是:i

参照上面一行语句:“sumh=fsum(a,4);”可以看出下面的一行语句要实现的是:数组的后6 个元素之和,fsum 函数中的第一个参数是所要求和的首地址,这里后六个元素的和,所以首地址应该是数组的倒数第六个元素的地址,即&a[9]或者a+9,第二个参数所求数组元素的个数,这里=6。所以这里应该填写的是:fsum (&a[9],6)或fsum(a+9,6)。

(15)【21】col=j 【22】x[i][i]=x[i][col] 【23】x[i][i]>x[j][j]

【解析】main 函数中定义了一个5×5 的二维数组,并对其初始化。紧接着调用了函数fun 实现题目中所要求的功能。分析fun 函数:用一个嵌套的for 循环实现“将每一行中值最大的元素与该行位于主对角线处的元素交换”内层for 循环中找到一个比当前数大的值,保存在arc 中,if 语句之后,做对角线上元素与最大元素的交换,所以if 语句中必须记录最大元素的位置,即列号。所以第21 题应该是col=j。

第22 题和其上下两行实现的是最大值与对角线上元素的交换,显然应该写:x[i][i]=x[i][col]。

第22 题之后的这一个嵌套的for 循环实现的是:“对主对角线上的所有元素排序使其自左上角到右下角升序排列”if 语句是两个对角线的元素的相互交换,显然if 的条件应该是相互交换的两个对角线元素中,第一个大于第二。即:x[i][i]>x[j][j]。

(16)【24】*p!= * s 【25】*(s2+p-s1)

【26】replace(s,s1,s2)

【解析】函数replace 的功能是:将字符串s 中所有属于字符串s1 中的字符都用s2 中的对应位置的字符替换。for 循环终止条件是字符串s 指向的不是…\0?,循环体中包含一个while 循环,实现的是找到s1 指向的字符在s 中的位置,if 语句实现替换操作。

第24 题,while 语句条件是p 指针不是…\0?并且p 与s 指向的字符不相同。所以应该填写:*p!= * s。

第25 题,实现替换功能。“用s2 中的对应位置的字符替换”。p-s1 就是当前的字符偏离s1 的长度,加s2 就得出对应的字符的地址。对应位置的字符就是:*(s2+p-s1)。

第26 题,就是调用子函数的语句,把相应的形式参数换成实际参数即可。即:replace(s,s1,s2)。

(17)【27】p->c 【28】head=insert(head,p)

【29】p=p->next;【30】p->next=head

【解析】由题目可以看出:“每接收一个字符后,申请一个新结点保存该字符”第一个while 循环条件是把输入的不是回车的字符放到ch 中,作为结点,循环体中首先为结点p 开辟了一个空间,显然ch 应该放到结构体变量的c 中。即p->c=ch。

把字符放到结构体中之后,要做的是把这个结构体插入到链表的里头。用insert 函数可以实现,即

head=insert(head,p)。

第29 题是把结构体链表中的字符都输出来。while 循环的条件是p 指向的不是空指针,但是循环体中应该有p 的更新,也就是指向下一个结点,即p=p->next。

由题目知函数insert 实现的功能是:“将P 指向的结点作为首结点插入head 指向的链表中。”if 语句是:当前的head 是空,把p 作为head 结点。

如果head 不是空的,也就是说链表已经建立了的话,那么这个head 结点就应该作为p 的后续结点。

而p 作为head 结点返回。所以第30 题要填写的是p->next=head。

2009 年(春)笔试试卷参考答案及解析

第一部分计算机基础知识

(1)D)【解析】光纤主要用于数字通信,它采用波分多路复用技术以增大信道容量。

(2)B)【解析】最大的10 位无符号二进制整数为1111111111,转换成八进制为1777,3 位二

进制表示1 位八进制。

(3)B)【解析】“双核”是指PC 机主板上不是含有两个独立的CPU 芯片。双核处理器是指在

一个处理器上集成两个运算核心,从而提高计算能力。

(4)D)【解析】主板上的BIOS 芯片是一种只读存储器,其内容可以通过特殊软件改写;绝大

多数主板上仅有一个内存插座,但并不表示PC 机只能安装一根内存条,内存分为DRAM 和ROM 两种,

前者又叫动态随机存储器,它的一个主要特征是断电后数据会丢失,平时说的内存就是指这一种;后者又

叫只读存储器,平时开机首先启动的是存于主板上ROM 中的BIOS 程序,然后再由它去调用硬盘中的

Windows,ROM 的一个主要特征是断电后数据不会丢失。

(5)B)【解析】对于光盘刻录机来说,其刻录信息的速度一般小于读取信息的速度。

(6)D)【解析】从其发展计划来看,未来的SATA 也将通过提升时钟频率来提高接口传输速率,让硬盘也能够超频。

(7)A)【解析】通常用户需要付费才能得到商品软件的使用权,这类软件的升级在一定时间内

是免费的。

(8)C)【解析】Oracle 是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名。

Oracle 数据库产品为财富排行榜上的前 1000 家公司所采用,许多大型网站也选用了Oracle 系统。Oracle

的关系数据库是世界第一个支持SQL 语言的数据库。

(9)D)【解析】硬盘可使用FAT 文件系统或者NTFS 文件系统格式。

(10)A)【解析】一个算法应该具有以下五个重要的特征:有穷性:一个算法必须保证执行有限

步之后结束;确切性:算法的每一步骤必须有确切的定义;输入:一个算法有0 个或多个输入,以刻画

运算对象的初始情况;输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的

算法是毫无意义的;可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

(11)B)【解析】IP 地址分为A、B、C、D、E5 类,常用的是B 和 C 两类。IP 地址由两部分组

(12)A

供上行

(13)A

的“10M”

(14)C

(15)C

(16)B127(即十六进制

的7F

(17)C)

GB18030

(18)A)【解析】若波形声音未进行压缩时的码率为64kb/s,已知取样频率为8kHz,量化位数为8,那么它的声道数是64/8/8=1。

(19)A)【解析】决策支持系统(Decision Support System,DSS)是辅助决策者通过数据、模型

和知识,以人机交互方式进行半结构化或非结构化决策的计算机应用系统。它是管理信息系统(MIS)向

更高一级发展而产生的先进信息管理系统。它为决策者提供分析问题、建立模型、模拟决策过程和方案的

环境,调用各种信息资源和分析工具,帮助决策者提高决策水平和质量。

(20)C)【解析】实体-联系模型(简称E-R 模型)是由P.P.Chen 于1976 年首先提出的。它提供

不受任何DBMS 约束的面向用户的表达方法,在数据库设计中被广泛用作数据建模的工具。E-R 数据模型问世后,经历了许多修改和扩充。

第二部分 C 语言程序设计

一、选择题

(21)B)【解析】函数的定义应该注意下面几点:①函数名和形式参数都是由用户命名的标识

符,在同一程序中,函数名必须惟一,形式参数名只要在同一函数中惟一即可,与其他函数中的变量可以

同名。②不能在函数的内部再定义函数。③若在函数的首部省略了函数返回值的类型名,可把函数首部

写成:函数名(类型名形式参数1,类型名形式参数2,…)则默认函数返回值的类型为int 类型。④除了返

回值类型为int 类型的函数外,函数必须先定义(或说明)后调用。⑤若函数只是用于完成某些操作,没

有函数值返回,则必须把函数定义成void 类型。

(22)D)【解析】使用自加运算符时应注意以下 5 个事项:①自加运算符“++”的运算结果是

使运算对象增1。例如,i++相当于i=i+1。②运算符“++”是单目运算符,运算对象可以是整型变量也可

以是实型变量,不能是常量或表达式。所以像++3、(i+j)++是不合法的。③用自加运算符构成表达式时,既可以是前缀形式,也可以是后缀形式。这两种形式对于变量来说,其结果都是加1,但对表达式来说其值是不同的。注意:前缀形式和后缀形式表达式值的不同。④运算符“++”的结合方向是“自右向左”。

⑤不要在一个表达式中对同一个变量进行多次诸如i++或++i 等运算。选项D)的错误之处在于d 是字符常量不能用变量的操作。

(23)C)【解析】条件运算符由“?”和“:”两个运算符组成。注意:条件运算符是C 语言提供

的惟一的三目运算符,即要求有 3 个运算对象。由条件运算符构成的条件表达式。格式如下:表达式1 表达式 2 : 表达式3

函数sign 用三种情况,可以使用 2 个条件表达式:s=x<=0?-1:(x==0?0:1),即选项C)。

(24)A)【解析】printf 函数调用的一般形式为:printf(“格式控制字符串”,输出表列)

类型字符用以表示输出数据的类型,其格式符和意义如下表所示:

格式字符

d

o

x,X

u

f

e,E

g,G

c

s

显而易见选项A)是错误的。

意义

以十进制形式输出带符号整数(正数不输出符号)

以八进制形式输出无符号整数(不输出前缀0)

以十六进制形式输出无符号整数(不输出前缀Ox) 以十进制形式输出无符号整数

以小数形式输出单、双精度实数

以指数形式输出单、双精度实数

以%f 或%e 中较短的输出宽度输出单、双精度实数输出单个字符

输出字符串

(25)A)【解析】参见第21 题,函数定义中,参数之间用逗号隔开。所以选项B)和D)错误,C)的错误之处在于函数的定义和语句体之间不能用分号隔离。所以只有选项A)是正确的。

(26)C)【解析】本小题考查函数按值传递的特性:调用函数的时候,为函数中的参数开辟一块

存储空间,当函数调用结束之后,为其参数开辟的空间也随之释放,而不是保留下来。选项C)中的参数a,b 在函数调用结束,即函数返回的同时,其空间也被释放。数值的改变没有被保留下来,所以选项C)

不能实现求平方的运算。

(27)D)【解析】语句“P[i]=P[i+1],i++;”是把i 后面的数赋值给i,然后i 指向后面一个数字。

显然等号左面应该是i,所以排除选项B)、C)。选项A)p[i]中的数值没变化,注意,p[i++]是先把p[i]复制给等号左面的变量,然后i 再做++运算。选项D)可以实现和题目中语句相同的功能。

(28)B)【解析】当作字符串变量使用的字符数组,不能由赋值语句直接赋字符串常量。例如,char mark[10]; mark="C program";。注意:以上赋值形式是不允许的。因为字符串常量给出的是地址值,而

数组名mark 是一个地址常量,不能被重新赋值。

参考答案及解析第 2 页共 5 页

所以选项B)是错误的。

(29)B)【解析】声明中的p1 指向的是一个一维的数组,而p2 指向的是一个二维的字符串数组。

选项B)把指向一维数组的指针用作二维数组,显然是错误的。

(30)D)【解析】y 是结构体数组,y 就是结构体数组的第一个元素的地址,确切的说就是结果

体数组第一个元素的第一个成员的地址。(*y)就是code[0]。选项D)中,( * y)->price 本身就是错误的。

二、填空题

●基本概念题

(1)【1】main 函数定义

【解析】任何一个有效的程序都有且只能有一个main()函数,它的地位相当于程序的主体,而其他函

数都是为main()服务的,就像大树树干分出的枝干。main 函数具有以下3 个特点:① C 语言规定必须用main 作为主函数名。其后的一对圆括号中间可以是空的,但不能省略。②程序中的main()是主函数的起始行,也是C 程序执行的起始行。每一个程序都必须有且只有一个主函数。③一个C 程序总是从主函数

开始执行,到main 函数体执行完后结束,而不论main 函数在整个程序中的位置如何。

(2)【2】32767

【解析】整型在内存中占两个字节的存储空间,其数值范围是-32768~32767 即-215~(215-1)。

“x+1>x”为假的条件是两边的x 不相同,也就是说x+1 导致x 的溢出。所以x=32767。

(3)【3】3.15

【解析】y * 100+0.5=315.119,赋给整型变量x,类型要进行强制转换,所以x=315。

y=x/100.0=315/100.0=

3.15。所以y 的值是3.15。

(4)【4】6

【解析】在C 语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识

符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为

“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。

本题中的宏替换的过程是:k=M*M+1=N+1*N+1+1=2+1*2+1+ 1=6。

●阅读程序题

(5)【5】3.3

【解析】本题考查的是文件的读写操作,语句fwrite(x,sizeof (double),3,fp);完成的是把数组x 写入到文

件 a.out 中。fseek(fp,2L* sizeof(double),SEEK_SET); fp 是文件指针;2L* sizeof(double)是位移量(为长整型数);SEEK_SET 是起始点,也就是从文件的开始出开始。这一语句的含义是从文件的开始处移动两个单

位的长度,即指针指向了第三个数字。语句

fread(&y,sizeof(double),1,fp);是从当前的文件读入一个double

型的数据到变量y 中。然后按照指定的格式打印输出y,最后关闭文件。

(6)【6】2 3 5 6

【解析】分析 while 循环。首先k=5,跳到语句default:n=0;k--;n=0,k=4,执行下面的语句,得到

n=2,k=3,打印2。第二次循环,k=3,执行语句“case 3:n+=1;k--;break;”n=3,k=2,打印输出3。第三

次循环:k=2,执行“case 2: case 4:n+=2;k--;break;”n=5,k=1。打印输出1。第四次循环:k=1 执行“case 1: case 3:n+=1;k--;break;”n=6,k=0,打印输出6,跳出循环。所以最后输出的结果是:2 3 5 6。

(7)【7】x=18,y=27,z=18

【解析】main 函数中,定义了三个变量:x,y,z。调用函数change 实现三个数的交换,根据函数按

值传递的特性,子函数中的变量x 和y 的存储空间在函数返回的时候都被释放了,只有z 变量的改变被保留了下来,所以x 和y 的值不变化,z=x,打印输出就是:x=18,y=27,z=18。

(8)【8】7

【解析】main 函数中定义了变量a 和b 的值,调用f 函数并且打印输出结果。f 函数返回的是x 和y 相

加的结果,注意这里实际参数和形式参数的类型不相同,在函数参数传递的时候,实际参数要进行类型的

强制转换。所以在函数f 中x=5,y=2。返回值是7。最后打印输出:7。

(9)【9】11111 【10】12321

【解析】首先定义了一个5×5 的二维字符串数组。

进入外层for 循环:第一次:ch=…1?,内层的第一个for 循环实现第一列的前四行是…1?,内层的

二个for 循环实现的是第五行的前四列都是1,内层的第三个for 循环实现的是第五行的倒数后四列都是1,

内层的第四个for 循环实现的是第1 列的后四行都是1。外层的第一次for 循环之后,数组的最外面一圈都是…1?。此时start=1,end=3。

外层第二次for 循环:ch=…2?,内层的第一个for 循环实现第二列的2~3 行是…2?。内层的第二个

for 循环实现的是第4 行的第2,3 列都是…2?。内层的第三个for 循环实现的是第四列的第3、4 行是2。内层的第四个for 循环实现的是第二行的第3、4 列是…2?。所以外层的第一次for 循环之后,数组的此次

外面一圈都是…2?。此时start=2,end=2。

外层的第三次for 循环,由于start=end=2,所以四个for 循环实现的都是:a[2][2]=3。

最后得到的数组是:1 1 1 1 1

1 2 2 2 1

1 2 3 2 1

1 2 2 2 1

1 1 1 1 1

打印输出第一行和第三行就是:11111 和12321。

(10)【11】1 3 9 【12】3

【解析】调用fun 函数时,实参x=27,进入for 循环,找到x%i=0 的所有的i 放到数组p 中。能整除27 的数字是:1,3,9。所以j=3。函数返回。main 函数中打印数组a 和n,即第一行:1 3 9。第二行:3。

(11)【13】4

【解析】mian 中定义了一个字符串数组line,调用count 函数,并打印输出结果。

库函数:int isalpha (int c):检查参数c 是否为英文字母,在标准c 中相当于使用“isupper(c)||islower(c)”做测试。若参数c 为英文字母,则返回TRUE,否则返回NULL(0)。

函数count 是一个递归函数。首先判断当前的字符是不是字符串结束标志,如果是,返回0。如果不是,判断当前的字符是不是英文字母,如果是,i++。如果i 自加之后指向的字符不是字符串结束标志而是

英文字符,则i 再一次自加。返回值是一加上一次count 得到的结果。

main 函数中的line="one world,one dream."根据上面的分析,显然结果是“4”。

(12)【14】5 【15】yesno

【解析】fun 函数:第一个while 循环是找到字符串a 有多少位,即 a 的长度是m。第二个while 循环:

如果b[n]不是字符串结束标志的话,把b[n]赋值给a[m],m 和n 自加。显然m 是字符串a 和b 的长度之和。

main 函数中定义的两个字符串可以看出a 和b 的长度之和是5。最后打印输出s1 就是把字符串b 连接到字

符串a 之后的字符串。

(13)【16】1,2 【17】2,3 【18】2,4

【解析】程序中首先定义了一个包含两个整型变量结构体,接着定义了一个结构体变量s。

分析fun 函数:两个参数分别是结构体数组pp 和数组长度n。for 循环实现的是排序的操作,如果外

层for 循环指向的结构体的第一个元素大于内层for 循环指向的元素,或者两个结构体的第一个元素相同,但是第二个元素小于。则交换两个结构体变量。即fun 函数实现按照结构体的第一个元素由小到大的排序。

main 函数中调用fun 函数之后的结果是:{1,2},{2,3},{2,4}, {3,1},{3,2}。打印输出前三行就是

{1,2},{ 2,3},{2,4}。

●完善程序题

(14)【19】b 或b!=0 【20】b=r 【21】a[0] 【22】x

【解析】main 函数中的最后一行语句,printf 函数的参数列表中最后一个变量x,可以得出x 是最大公约数。上面的for 循环是求解x 的过程:先给x 付初值(第一个数组元素)for 循环中依次求出x 与后面一

个元素的公约数。所以第21 空填写x 的初值a[0],第22 空是x 本身。

函数gcd 的功能是求出参数a,b 的最大公约数。采用的是辗除法。假定两个整数分别为num1 和num2,

最大公约数应当是不超过其中较小数的一个整数。辗转法的思想是:用num1 除以num2,求出余数resd,如果resd==0,则当前num2 就是最大公约数,否则(resd!=0),num1=num2,num2=resd,重复以上过程,

历年二级C语言笔试真题及答案

1 2009年9月全国计算机等级考试二级笔试 试卷 1)下列数据结构中,属于非线性结构的是 A )循环队列 B) 带链队列 C) 二叉树 D )带链栈 2)下列数据结果中,能够按照“先进后出”原则存取数据的是 A) 循环队列 B) 栈 C)队列 D)二叉树 3)对于循环队列,下列叙述中正确的是 A )队头指针是固定不变的 B )队头指针一定大于队尾指针 C )队头指针一定小于队尾指针 D )队头指针可以大于队尾指针,也可以小于队尾指针 4)算法的空间复杂度是指 A )算法在执行过程中所需要的计算机存储空间 B )算法所处理的数据量 C )算法程序中的语句或指令条数 D )算法在执行过程中所需要的临时工作单元数 5)软件设计中划分模块的一个准则是 A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合 6)下列选项中不属于结构化程序设计原则的是 A) 可封装 B) 自顶向下 C) 模块化 D) 逐步求精 7)软件详细设计产生的图如下: 该图是 A) N-S 图 B) PAD 图 C) 程序流程图 D) E-R 图 8)数据库管理系统是 A )操作系统的一部分B) 在操作系统支持下的系统软件C) 一种编译系统 D) 一种操作系统 9)在E-R 图中,用来表示实体联系的图形是 A) 椭圆图B) 矩形C) 菱形D) 三角形 10)有三个关系R ,S 和T 如下: 其中关系T 由关系R 和S 通过某种操作得到,该操作为 A) 选择 B) 投影 C) 交 D) 并 11)以下叙述中正确的是 A )程序设计的任务就是编写程序代码并上机 B )程序设计的任务就是确定所用数据结 构 C )程序设计的任务就是确定所用算法 D )以上三种说法都不完整 12)以下选项中,能用作用户标识符的是 A )void B )8_8 C )_0_ D )unsigned 13)阅读以下程序 #include main() { int case; float printF; printf(“请输入2个数:”); scanf(“%d %f”,&case,&pjrintF); printf(“%d %f \n”,case,printF); } 该程序编译时产生错误,其出错原因是 A )定义语句出错,case 是关键字,不能 用作用户自定义标识符B )定义语句出错,printF 不能用作用户自定义标识符 C )定义语句无错,scanf 不能作为输入函 数使用 D )定义语句无错,printf 不能输出case 的值 14)表达式:(int)((double)9/2)-(9)%2的值是 A )0 B )3 C )4 D )5 15)若有定义语句:int x=10;,则表达式 x-=x+x 的值为 A )-20 B )-10 C )0 D )10 16)有以下程序 #include main() { int a=1,b=0; printf(“%d,”,b=a+b); printf(“%d \n”,a=2*b); } 程序运行后的输出结果是 A )0,0 B )1,0 C )3,2 D )1,2 17)设有定义:int a=1,b=2,c=3;,以下语 句中执行效果与其它三个不同的是 A )if(a>b) c=a,a=b,b=c; B )if(a>b) {c=a,a=b,b=c;} C ) if(a>b) c=a;a=b;b=c; D ) if(a>b) {c=a;a=b;b =c;} 18)有以下程序 #include main() { int c=0,k; for (k=1;k<3;k++) switch (k) {default: c+=k case 2: c++;break; case 4: c+=2;break; } printf(“%d \n”,c); } 程序运行后的输出结果是 A )3 B )5 C )7 D )9 19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是 A )if((a>b)&&(b>c)) k=1;else k=0; B )if((a>b)||(b>c) k=1;else k=0; C )if(a<=b) k=0;else if(b<=c) k=1; D )if(a>b) k=1;else if(b>c) k=1; else k=0; 20)有以下程序 #include main() { char s[]={“012xy”};int i,n=0; for(i=0;s[i]!=0;i++) if(s[i]>=?a?&&s[i]<=?z?) n++; printf(“%d \n”,n); } 程序运行后的输出结果是 A )0 B )2 C )3 D )5 21)有以下程序 #include main() { int n=2,k=0; while(k++&&n++>2); printf(“%d %d \n”,k,n); } 程序运行后的输出结果是 A )0 2 B )1 3 C )5 7 D )1 2 22)有以下定义语句,编译时会出现编译错误的是 A )char a=?a? B )char a=?\n?; C )char a=?aa?; D )char a=?\x2d?; 23)有以下程序 #include main() { char c1,c2; c1=?A?+?8?-…4?; c2=?A?+?8?-…5?; printf(“%c,%d \n”,c1,c2); } 已知字母A 的ASCII 码为65,程序运行后的输出结果是

c语言期末测试题附答案

c语言期末测试题附答 案 集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

课程代码:A100002 座位号: 《计算机技术基础(C 语言)》试卷A 姓名: 学号: 专业: 学院: 班级: 20 年 月 日 第一 部分 选择题(共 30 分) 一、单项选择题(本大题共 15 小题,每题只有一个正确答 案,答对一题得 2 分,共 30 分) 1、以下关于C 语言标识符的描述中,正确的是 【 】。 A )标 识符可以由汉字组成 B )标识符只能以字母开头 C )关键字可以作为用户标识符 D )Area 与area 是不同的标识符 2、使下列程序段输出“123,456,78”,键盘输入数据,正确的输入是【 】。 int i,j,k; scanf(“%d,%3d%d”,&i,&j,&k); printf(“%d,%d,%d \n”,i,j,k); 3、判断char 类型的变量c1是否为数字字符的正确表达式为 【 】。 A) (c1>=0)&&(c1<=9) B) (c1>=’0’)&&(c1<=’9’) C) ’0’<=c1<=’9’ D) (c1>=’0’)||(c1<=’9’) 4、若有语句int a=1,b=2,c=3;则以下值为0的表达式是 【 】。 A )’a’&&’b’ B )a<=b C )((a>b)||(b0;i--);后,变量i 的值为 【 】。 A )10 B )9 C )0 D )1 8、若有int *p1, *p2,k; 不正确的语句是 【 】 A. p1=&k B. p2=p1 C. *p1=k+12 D. k=p1+p2 9、在函数中未指定存储类别的局部变量,其隐含的存储类别是 【 】

C语言考试题库及答案复习整理

C 语言理论上机考试选择题部分(共200题) 1、下面程序的输出是___D______ #include void main() { int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xb D) k=11,k=13,k=b 2、在下列选项中,不正确的赋值语句是__D______. A) ++t; B) n1=(n2=(n3=0)); C) k=i=j; D) a=b+c=1; 3、下面合法的C 语言字符常量是______A____. A) '\t' B) "A" C) 65 D) A 4、表达式: 10!=9的值是 ________D____. A) true B) 非零值 C) 0 D) 1 5、C 语言提供的合法的数据类型关键字是_____B____. A) Double B) short C) integer D) Char 6、字符(char)型数据在微机内存中的存储形式是__D__. A) 反码 B) 补码 C) EBCDIC 码 D) ASCII 码 7、C 语言程序的基本单位是_____C______. A) 程序行 B) 语句 C) 函数 D) 字符 8、设 int a=12,则执行完语句

a+=a-=a*a 后,a 的值是____D____ A) 552 B) 264 C) 144 D) -264 9、执行下面程序中的输出语句后,输出结果是____B__. #include void main() {int a; printf("%d\n",(a=3*5,a*4,a+5)); } A) 65 B) 20 C) 15 D) 10 10、下面程序的输出是____B______. #include void main() {int x=023; printf("%d\n",--x); } A) 17 B) 18 C) 23 D) 24 11、下面程序的输出的是_____C____. #include void main() {int x=10,y=3; printf("%d\n",y=x/y); } A) 0 B) 1 C) 3 D) 不确定的值 12、已知字母A 的ASCII 码为十进制的65,下面程序的输出是______A_____. #include void main() {char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c\n",ch1,ch2); } A) 67,D B) B,C C) C,D D) 不确定的值 13、若要求在if 后一对圆括号中表示a 不等于0的关系,则能正确表示这一关系的表达式为____D__. A) a<>0 B) !a C) a=0 D) a

c语言期末考试及答案讲解

C语言考试模拟试卷 1.若有定义:char c;int d;程序运行时输入:c=1,d=2<回车>,能把字符1输入给变量c、整数2输入给变量d的输入语句是 A、scanf("c=%d d=%d",&c,&d); B、scanf("c=%c d=%d",&c,&d); C、scanf("c=%d,d=%d",&c,&d); D、scanf("c=%c,d=%d",&c,&d); 【答案】D 【解析】scanf()函数中,%d对应的参数是整数型地址,%c对应参数为char 型地址,C,A选项错误;如果输入地址有多个,应该用逗号隔开,B选项错误,故答案为D选项。 2.以下叙述错误的是 A、在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法 B、同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率 C、模块化的程序设计是采用自顶向下、逐步细化的原则 D、程序的每个模块都可通过三种基本结构实现 【答案】A 【解析】结构化程序设计把一个复杂问题的求解过程分阶段进行,需要保证自顶向下、逐步细化、模块化设计、结构化编码。进行模块化设计时,首先设计框架,并定义和调试好各个模块之间的输入输出关系,然后完成各个模块的编写调试后

再集中编译,模块化的程序设计采用自顶向下、逐步细化的原则,A选项叙述错误,C选项叙述正确。各个模块可以由不同人员同时进行编写调试,提高编写程序的效率,B选项叙述正确。结构化程序主要由3种基本控制结构组成,顺序结构、选择结构、循环结构,这三种基本结构可以解决任何复杂的问题,D选项叙述正确。故选择A选项。 3.设有定义:int a=0,b=1,c=1; 以下选项中,表达式值与其它三个不同的是 A、b=a==c B、a=b=c C、a=c==b D、c=a!=c 【答案】A 【解析】赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回1,不成立返回0。A选项逻辑表达式a==c不成立(0),则 b=0,表达式值为0。B选项中将c赋值给b,b=1,再将b赋给a,a=1,表达式值为1。C选项逻辑表达式c==b成立(1),则a=1,表达式值为1。D选项逻辑表达式a!=c成立(1),则c=1,表达式值为1。A选项与其他选项不同,A选项正确。 4.设有两行定义语句:

C语言期末双面试卷B (1)

三亚学院 2012/2013 学年春季学期 《C语言与程序设计》期末考试B卷 适用对象:12级信息管理与信息系统专业 答题时间:120 分钟考试形式:闭卷 (共40分,每题2分) 1.一个C语言程序是由( C )组成的。 A主程序 B 子程序 C 函数 D 过程 2.执行下面语句的结果为( C )。 y=10;x=y++; A x=10,y=10 B x=11,y=11 C x=10,y=11 D x=11,y=10 3.下列程序的输出结果是( A )。 #include void main() {int x=2,y=3; printf("x=%d,y=%d",x,y); } A.x=2,y=3 B.x=%2,y=%3 C.x=%%d,y=%%d D.x=%d,y=%d 4.不是C语言中基本数据类型为(C)。 A.整型B.实型 C.集合型D.字符型 5.表示关系12<=x<=y的C语言表达式为:( A ) A.(x>=12)&(x<=y) B.(x>=12)&&(x<=y) C.(12<=x)|(x<=y)D.(12<=x)||(x<=y) 6.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式是( B )。A.a<>0 B.!a C.a=0 D.a 7.配合switch语句使用,作用是控制结束某个case分支的执行的语句是( A )。 A.break B.if C.end D.exit 8.执行语句:for(i=1;i++<4;);后,变量i的值是(B)。 A.3 B.4 C.5 D.不定 9.如下程序段执行后输出(B )。 #include void main() { int num=0; while(num<=2) { num++; printf("%d ",num); } } A.1 2 3 4 B.1 2 3 C.1 2 D.1 10.设x=1,y=2,m=4,n=3,则表达式x>y?x:m

C语言期末考试题(含答案)

《C 语言程序设计》期末试卷 一、单项选择题(10x2’=20’) 1、以下叙述正确的是() A )C 语言的源程序不必通过编译就可以直接运行。 B ) C 语言中的每条可执行语句最终都将被转换成二进制的机器指令。 C )C 语言源程序经编译形成的二进制代码可以直接运行。 D )C 语言中的函数不可以单独进行编译。 2、一个C 语言的源程序中() A )必须有一个主函数 B )可能有多个主函数 C )必须有除主函数外其它函数 D )可以没有主函数 3、以下不能定义为用户标识符的是() A )scanf B )Void C )_3com D )int 4、若以下选项中的变量已正确定义,则正确的赋值语句是() A )x1=26.8%3; B )1+2=x2; C )x3=0x12; D )x4=1+2=3; 5、设有定义:floata=2,b=4,h=3;以下C 语言表达式中与代数式h b a *)(2 1 的计算结果不.相符的是() A )(a+b)*h/2 B )(1/2)*(a+b)*h C )(a+b)*h*1/2 D )h/2*(a+b) 6、C 语言中用于结构化程序设计的3种基本结构是() A )顺序结构、选择结构、循环结构 B )if 、switch 、break C )for 、while 、do-while D )if 、for 、continue 7.在while (!x )语句中的!x 与下面条件表达式等价的是() A)x!=0B)x==1C)x!=1D)x==0

8、有以下程序: #include voidmain(){ inti=1,j=1,k=2; if((j++||k++)&&i++) printf(“%d,%d,%d\n”,i,j,k);} 执行后的输出结果是() A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 9、有以下程序: #include voidmain(){ inti,s=0; for(i=1;i<10;i+=2) s+=i+1; printf(“%d\n”,s);} 程序执行后的输出结果是() A)自然数1~9的累加和B)自然数1~10的累加和 C)自然数1~9中奇数之和D)自然数1~10中偶数之和 10、有以下函数定义: voidfun(intn,doublex){……} 若以下选项中的变量都已经正确定义并赋值,则对函数fun的正确调用语句是()A)fun(inty,doublem); B)k=fun(10,12.5); C)fun(x,n);D)voidfun(n,x); 二、填空题(10x2’=20’) 11、C语言描述“x和y都大于或等于z”的表达式是:。 12、函数定义时涉及的基本要素是:、、。

C语言期末试卷题及答案

一、选择题(共20分,每小题2分) 1. 在C语言类型说明中,int, char, short等类型数据的长度是( D )。 A. 固定的 B. 由用户自己定义的 C. 任意的 D. 与机器字的长度有关 2. 若已正确说明为int类型,要给abc输入数据,则正确的输入语句是( D )。 A. read(a,b,c); B. scanf(“%d%d%d”,a,b,c); C. scanf(“%D%D%D”,&a,&b,&c); D. scanf(“%d%d%d”,&a,&b,&c); 3. C语言中对嵌套if语句的规定是:else总是与( D )配对。 A. 其之前最近的if B. 第一个if C. 缩进位置相同的if D. 其之前最近且不带else的if 4. 以下语句中,( C )是不可能做到提前退出循环语句的。 A. goto B. break C. continue D. return 5. 假设有两个字符数组a、b,则以下正确的输入语句是( B )。 A. gets(a, b) B. scan f(“%s %s”,a,b) C. scanf(“%s%s”, D. gets(“a”); gets(“b”) 6. 以下正确的描述是( B )。在C语言程序中, A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和含糊的调用均可以嵌套 7. 在宏定义#define PI 3.1415926中,用宏名PI代替一个( D )。 A. 单精度数 B. 双精度数 C. 常量 D. 字符串 8. 以下选项中,对指针变量p不正确的操作是( C )。 A. int a[6], *p; p = &a; B. int a[6], *p; p = a; C. int a[6]; int *p = a = 1000; D. int a[6]; int *p1, *p2 = a; *p1 = *p2; 9. 设有以下说明,已知int类型占2个字节,则下列叙述正确的是( D )。 struct st { int a; int b[2]; } a; A. 结构体变量名a和结构体成员a同名,不合法 B. 程序运行时将为结构体st分配6个字节的内存单元 C. 程序运行时不为结构体st分配内存单元 D. 程序运行时将为结构体变量a分配6个字节的内存单元 10. 当文件顺利关闭时,fclose()的返回值是( C )。 A.-1 B. EOF C. 0 D. 1 二、填空题(共20分,每小题2分) 1. C程序中定义的一个变量,代表内存中的一个存储单元。 2. …\72?在内存中占一个字节,”\72”在内存中占二个字节。 3. 结构化程序设计的3种基本结构是顺序结构、选择结构、循环结构。 4. 下列for循环执行 4 次。For (x =0 , y = 0; y != 99 && x < 4; x++) ;

大学C语言考试题库(含标准答案)

单项选择 ================================================== 题号:1482 执行以下程序段后,输出结果和a的值是()。int a=10 。printf("%d",a++) 。 A、11 和10 B、11 和11 C、10 和11 D、10 和10 答案: C 题号:2100 已知字符'A' 的ASCⅡ代码值是65, 字符变量c1的值是'A',c2 的值是'D'. 执行语句printf("%d,%d",c1,c2-2) 。后, 输出结果是 A、65,66 B、A,B C、 65,68 D、A,68 答案: A 题号:5055 相同结构体类型的变量之间,可以()。 A、比较大小 B、地址相同 C、赋值 D、相加 答案: C 题号:3217 int a[10] 。合法的数组元素的最小下标值为()。 A、1 B、0 C、10 D、9 答案: B 题号:45 能正确表示逻辑关系:" a ≥10或a≤0 " 的C语言表达式是 A、a>=0 | a<=10 B、a>=10 or a<=0 C、a>=10 && a<=0 D、a>=10 || a<=0

D 题号:157 main() {int x=1,a=0,b=0 。 switch (x) { case 0: b++ 。 case 1: a++ 。 case 2: a++ 。b++。} printf("a=%d,b=%d",a,b) 。} 该程序的输出结果是( ) A、2,2 B、2,1 C、1,1 D、1,0 答案: B 题号:4784 设变量a是整型,f 是实型,i 是双精度型,则表达式10+'a'+i*f 值的 数据类型为()。 A、不确定 B、double C、int D、 float 答案: B 题号:1647 以下程序中,while 循环的循环次数是______ main() { int i=0 。 while(i<10) { if(i<1) continue 。 if(i==5) break 。 i++ 。 } } A、死循环,不能确定次数 B、6 C、4 D、1

大学C语言期末考试习题集(带详解答案)

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从 C开始执行。 A) 程序中第一条可执行语句 B) 程序中第一个函数 C) 程序中的main函数 D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B)。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点:标识符的命名规则 (1)只能由字母、数字、下划线构成 (2)数字不能作为标识符的开头 (3)关键字不能作为标识符 选项A中的“-”,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3) 6.下列C语言用户标识符中合法的是( B)。 A)3ax B)x C)case D)-e2 E)union 选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1); 7.下列四组选项中,正确的C语言标识符是(C)。 A) %x B) a+b C) a123 D) 123 选项A中的“%”,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2) 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai

C语言期末考试试卷附参考答案

一、单项选择题(请将答案填在下面表格中20×1) 1. 以下叙述中正确的是()。 A. C语言比其他语言高级 B. C语言可以不用编译就能被计算机识别执行 C. C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D. C语言出现的最晚,具有其他语言的一切优点 2. 以下叙述中正确的是()。 A.构成C程序的基本单位是函数 B.可在一个函数中定义另一个函数 C. main函数必须放在其他函数之前 D.所有被调用的函数一定要在调用之前进行定义3. 以下叙述中正确的是()。 A. C语言程序总是从第一个函数开始执行 B.在C语言程序中,要调用函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行 D. C语言程序中的main()函数必须放在程序的开始部分 4. 以下有关for循环的正确描述是()。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判断表达式 C.在for循环中,不能用break语句跳出循环体 D. for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 5. 对下面程序段的描述,正确的是()。 x=-1; do {x=x*x;}while(!x); A.是死循环 B. 循环执行一次 C. 循环执行两次 D. 有语法错误 6. 以下有关C语言数组说法正确的是()。 A.数组元素的数据类型可以不一致 B.数组元素的个数可以不确定,允许随机变动 C.可以使用动态内存分配技术,定义元素个数可变的数组 D.定义一个数组后,就确定了它所容纳的具有相同数据类型元素的个数 7.以下数组定义正确的是()。 A. int a(20); B. int a[ ]={1,2,5,7,0}; C. int a[n]; D. int a[2]={1,2,4,6}; 8.在定义int b[2][10];之后,对b数组元素引用正确的是( )。 A. b[0][9] B. b[2,3] C. b(1)(5) D. b[10] [0] 9. 如有定义语句int c[ ]={1,5,3,4,6,7,0};,则数组c有()个元素。 A.0 B.不定 C. 6 D. 7 10.以下叙述中不正确的是( )。 A.字符数组中可以存放字符串 B.可以对字符型数组进行整体输入、输出 C.可以对整型数组进行整体输入、输出 D.不能通过“=”对字符型数组进行整体赋值 11.已知char d[ ]={”543210”};,则数组d的长度是( )。 A.5 B.6 C. 7 D. 8 12.已知char s3[ ]=”China”;,则下列程序段的输出结果是()。 printf(“%d”,sizeof(s3)); A.5 B. 6 C. 7 D.8 13.已知char s1[10],s2[ ]={”China”};则在程序中能将字符串” China”赋给数组s1的是()。 A.s1={“China”}; B.strcpy(s1,s2); C. s1=s2; D. strcpy(s2,s1);

C语言试题及答案

第1章 C语言概述习题 1. 单项选择题 (1) C 语言是在 B 语言的基础上产生的。 A. A B. B C. D D. E (2) 在 C 语言中,每个语句必须以 D 结束。 A. 回车符 B. 冒号 C. 逗号 D. 分号 (3) 标识符和关键字间,要用 C 隔开。 A. 回车符 B. 冒号 C. 空格 D. 分号 (4) 用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( B )。 A. 生成可执行目标文件 B. 生成目标文件 C. 输出运行结果 D.自动保存源文件 (5) 下列说法中正确的是( B )。 A. 由于 C 源程序是高级语言程序,因此一定要在 TC 软件中输入 B. 由 C 源程序是字符流组成,因此可以作为文本文件在任何文本编辑的软件中输入 C. 由于C 程序是高级语言程序,因此输入后即可执行 D. 由于 C 程序是高级语言程序,因此它由命令组成 (6) 下列说法中正确的是( A )。 A. C 语言程序由主函数和 0 个或多个函数组成 B. C 语言程序由主程序和子程序组成 C. C 语言程序由子程序组成 D. C 语言程序由过程组成 (7) 下列说法中错误的是( D )。 A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其他函数 C. 任何非主函数可以调用其他任何非主函数 D. 程序可以从任何非主函数开始执行 2. 填空题 (1) C 语言只有 32 个关键字和 9 种控制语句。 (2) C 语言是一种“中级语言”,既具有高级语言的特点又具有低级语言的特点;既适合于开发系统软件又适合于编写应用程序。 (3) 每个源程序有且只有一个主函数,系统总是从该函数开始执行C语言程序。 (4) 在 C 语言程序中允许出现的字符集是 ASCII码字符集。 (5) C 语言的程序中有特殊含义的英语单词称为保留字。 (6) C 语言标识符的长度是前 8 位有效。 (7) C 语言中,标识符的定义规则是以字母或下划线为开头。 (8) C 语言程序的注释可以出现在程序中的任何地方,它总是以 /* 符号作为开始标记,以 */ 符号作为结束标记。 第2章数据类型运算符和表达式习题 1. 单项选择题 (1) 以下选项中,正确的 C 语言整型常量是 D 。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中, D 是不正确的 C 语言字符型常量。

C语言期末考试试题及答案

个人收集整理-仅供参考 2008-2009学年第一学期期末考试试卷 考试说明:本课程为闭卷考试,可携带书写与修正文具,满分为:100 分. 考试结束后请将后页答题卡与试卷分开上交 ..... 一、单选题<每题2分,共30分) 1.以下叙述正确地是 ______ . A)C程序地每行只能写一条语句 B>语言本身没有输入输出语句 C)在C程序中,注释说明只能位于一条语句地后面 D)在多函数地程序中,main函数必须放在其它子函数地定义之前 2.以下不正确地常量表示形式是 ______ . A> 0.45 B>0XF5 C>‘\85’D> 32.67E-5 3. 以下不正确地变量名是 ______ . A)R&B B> _max C>INT D> SUM3 4. 以下正确地一组语句是 ________. A> int x=y=5; B> int n; scanf("%d",&n>;int a[n]; C> char a,*p; p=&a; D> char s[10]; s="hello"; 5. 若以下变量均已正确定义和赋值,则正确地语句是 ________. A> a=b==5; B> y=x%2.0; C> x+y=10; D> n=8=2*4; 6.下面各组中与给出地程序段功能不等价地是 ________. if(a>0> b=1; else if(a==0> b=0; else b=-1; A>if(a>0> b=1; B>if(a>0> b=1; C>if(a>0> b=1; D>if(a>=0> if(a==0> b=0; else if(a==0> b=0; if(a>0> b=1; if(a<0> b=-1; if(a<0> b=-1; else b=-1; if(a==0> b=0; else b=0; if(a<0> b=-1; 7. 运行下面程序段,若输入abc#,则程序输出是:________. char c;int v1=0,v2=0; while((c=getchar(>>!='#'> { switch(c> { case 'a':v1++; default :v1++;v2++; case 'c':v2++; } } printf("v1=%d,v2=%d\n",v1,v2>; A>2,2 B>3,5 C> 3,4 D>2,5

c语言期末试卷

《C语言程序设计A》试卷(B卷) 班级学号姓名 一、选择题:(每题1分,共计20分) 1、C语言规定:在一个源程序中,main函数的位置( C)。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 2、设a为5,执行下列语句后,b的值不为2的是(C)。 A)b=a/2 B)b=6-(--a) C)b=a%2D)b=a>32:1 3、若a=-14,b=3,则条件表达式a

C语言上机作业试题5套含答案

第一次上机作业(2014): 要求: ?独立完成,上机调试通过后上交 ?作业提交邮箱: ?邮件主题命名:班级学号姓名(第1次作业), 例如:电1301班2王鹏(第1次作业) ?以附件形式将每次作业的所有程序源程序压缩打包后提交,压缩文件命名格式同上。 ?程序必须采用缩进格式 1.大写字母转换成小写字母 从键盘输入一个大写英文字母,输出相应的小写字母。 例:输入G 输出g 2.求平方根 输入一个实数x,计算并输出其平方根(保留1 位小数)。 例:输入17 输出The square root of 17.0 is 4.1 3.温度转换 设计一个程序将华氏温度转换成摄氏温度c = 5/9(f-32) a)输入华氏温度(实型) b)输出的摄氏温度结果保留两位小数 例:Please input Fahrenheit temperature: 76.8 The corresponding Celsius temperature is 24.89 4. 计算旅途时间 输入二个整数time1 和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。 (输入的有效的时间范围是0000 到2359,不需要考虑出发时间晚于到达时间的情况。) 例:输入712 1411 (出发时间是7:12,到达时间是14:11) 输出The train journey time is 6 hours 59 minutes. 5. 数字加密 输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10 取余,做为该位上的新数字,最后将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。 例:输入1257 输出The encrypted number is 4601 思考题:你能否编程找出谁做的好事? 有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 ?A说:不是我。 ?B说:是C。 ?C说:是D。 ?D说:他胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。 第二次上机作业(2014): 要求: ?独立完成,程序必须采用缩进格式,上机调试通过后上交

C语言期末考试复习题及答案

C语言期末考试复习题及答案 一、选择题:下列各题A)、B)、C)、D)四个选项中只有一个是正 确的,请将正确的选项涂写在答案纸上。答在试卷上不得分。 (1)C语言规定:在一个源程序中,main函数的位置 D 。 A)必须在最后B)必须在系统调用的库函数的后面。 C)必须在最开始。。D)可以任意 (2) C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 A 。 A)必须为字母或下划线。。B)必须为下划线。 C)必须为字母D)可以是字母、数字和下划线中的任一种字符。 (3)下面四个选项中,均是正确的八进制数或十六进制数的选项是 B 。 A)-10 0x8f -011 B) 010 -0x11 0xf1 C) 0abc -017 0xc D) 0a12 -0x123 -0xa (4) C语言中int型数据在内存中占两个字节,则unsegned int取值范围是 A 。 A)0 ~ 65535 B)0 ~ 32767 C)-32767 ~ 32768 D)-32768 ~ 327687 (5) 若有定义:int a = 7; floa x = , y = ; 则表达式x + a % 3 * (int) (x + y) % 2/4 的值是 D 。 A) B) 0.00000 C) D) (6)已知ch是字符型变量,下面不正确的赋值语句是 B 。 A)ch = 5 + 9 ; B) ch= ' a + b '; C) ch = ' \ 0 '; D) ch= '7' + '6' ; (7) 设x , y和z是int型变量,且x = 3, y = 4 , z = 5 则下面表达式中值为0的

c语言期中考试试题及答案

《C语言程序设计》期中考试试卷 课程编号:03402513试卷类型:A卷考试形式:笔试考试日期: 注意事项:1.请将试卷最后一页的答题纸撕下,将答案填写在其中;2.交卷时请确认答题纸是否按要求写好姓名等信息并与试题一起上交;3.不准携带任何书籍、资料、纸张等。4.草稿纸用试卷的背面。 一、单项选择题(1空1分,共20分) 1、C语言程序的基本结构是(【1】) 。 【1】A) 函数B) 语句C) 字符D) 程序行 2、一个C程序的执行是(【2】) 。 【2】A) 从本程序的主函数开始,到本程序的主函数结束 B)从本程序的第一个函数开始,到本程序的最后一个函数结束 C) 从本程序的主函数开始,到本程序的最后一个函数结束 D)从本程序的第一个函数开始,到本程序的主函数结束 3、下列四个叙述中,错误的是(【3】) 。 【3】A) 一个C源程序必须有且只能有一个主函数 B) 一个C源程序可以含一个或多个子函数 C) 在C源程序中注释说明必须位于语句之后 D) C源程序的基本结构是函数 4、下面不属于C语言保留字的是(【4】) 。 【4】A) short B) ELSE C) extern D) for 5、下列四个叙述中,正确的是(【5】) 。 【5】A) 库函数也是C语言本身的组成部分 B) C语言中的输入输出操作是由相应语句完成的 C) 库函数是C编译系统提供的功能函数 D) 标题文件(头文件)可以在程序的函数内部调用 6、下列四组数据类型中,C语言允许的一组是(【6】)。 【6】A) 整型、实型、逻辑型B) 整型、实型、字符型 C) 整型、双精度型、布尔型D) 整型、实型、复型 7、在C语言中不同数据类型的的长度是(【7】)。 【7】A) 固定的B) 由用户自己定义的 C) 任意的D) 与机器字长有关

相关文档