查看: 11203|回复: 94
使用XCOM V2.0更新外部flash的中文字库的方法 [战舰板或者Mini板
字库错误 即font error解决办法!]
主题帖子精华
在线时间18 小时
外部FLASH更新字库指导说明
本文档分为如下几部分:
1、适用范围
&&&&&&&&本文档仅适用于ALIENTEK战舰STM32F103开发板和MINI STM32开发板更新中文字库的应用。为了方便大家在没有SD卡的前提下更新外部flash的中文字库,我们使用串口助手XCOM将带有中文字库的完整bin文件发送给STM32,再由STM32将接收到的文件解码后存入外部flash中,从而达到了更新字库的目的。由于两块开发板更新字库的步骤相同,但是所需要的文件不同,这里我们仅以战舰板为例讲解,两者不同之处会有提示。
2、使用说明
&&&&&&&& 首先,无论用户使用的是战舰STM32F103开发板,还是MINI STM32F103开发板,都需要使用。请解压“ALIENTEK 开发板字库更新”(请在下载附件)。对于战舰STM32F103的用户,先打开工程:战舰板字库更新,然后下载该代码到您的开发板中(对于MINI STM32F103开发板的用户,打开工程:mini板字库更新,然后下载代码到您的开发板中)。如果用户的外部flash中缺少中文字库,则显示屏会自己显示:Please
press the key0 to erase the memory,and then update the font by XCOM.以此来提示用户按下KEY0按键先擦除存储器。如下图2.1所示:
f24fd626a4eea00e31bf1_817.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.1 &缺少字库提示
如果用户的外部flash中带有完整的字库,则显示器依然会提示:字库完整。大家可以由此确认存储器中是否含有完整字库。如下图所示2.2所示:
3b4d64f6d940e7ee06a33a6ec.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.2 完整字库提示
如果缺少字库,则此时按下KEY0按键,触摸屏界面会提示“Erase W25Q64…”表示正在擦除外部flash,即擦除W25Q64。如下图2.3所示:
c304d81a5fbd574ef2a19_718.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.3 擦除flash
擦除完毕之后,显示器会显示:Erase
finish!!!,如下图2.4所示:
feb64c3a75_611.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.4 擦除完成
当触摸屏显示“Erase finish!!!”,则表示擦除完毕,可以继续往下操作。打开刚才解压的文件夹,打开串口调试助手XCOM,设置好串口号,由于我的电脑连接单片机的是COM5,所以这里选择对应的COM5端口。切记这里的波特率必须选择460800。选择“协议传输”,启动协议传输,设置最大数据长度255,帧周期1000,其他的参数值取默认即可。如下图2.5所示:
db3b87cec098dd6eb5a9b4ad5.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.5 串口设置
设置好上述参数之后,如下图2.6,选择步骤①打开文件,这里注意了:对于战舰STM32开发板板用户请在步骤②中选择需要写入的WarShip_Flash.bin文件,文件路径在之前解压的文件中(如果是MINI STM32开发板的用户,请在步骤②中选择需要写入的mini_Flash.bin文件)。步骤③打开,步骤④发送文件。
fccb403c8d70feeb72f48_308.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.6 选择文件
刷写过程中,可以看到触摸屏和串口助手上都有进度显示。如下图2.7所示:
870d81b4a70d8cb2d9abf27ad663b447_957.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.7 刷写过程显示
为了保证数据的完整性,上位机发送的数据需要经过复杂的计算和编码工作,在发给下位机单片机接收后,由STM32解码和CRC校验,得到实际需要的数据,再将此数据写入W25Q64中,最后才返回应答给上位机,上位机接收应答,经过CRC校验、计算、编码和发送。因此,计算量变得非常大,所以需要等待20~25分钟才能写完,请耐心等候。刷写完成之后,会通过闪屏和显示12号、16号字体的中文文字(显示:字库更新完成)提醒大家,MINI STM32开发板支持24号字体也会显示。刷写完成之后,战舰板用户和MINI板用户的界面分别如下图2.8和图2.9所示:
ccb51df27466baefe079f7e_297.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.8 战舰板刷写完成
607d17c65ef_459.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图2.9 MINI板刷写完成
由于刷写时间较长,波特率较快,屏幕可能会出现显示乱码的现象,这表示在这漫长的刷写过程中出现了错误,但这种可能性非常非常小。如果最后无法显示中文字体,请按下KEY0按键重新擦除外部flash,复位之后,再重复上述步骤刷写WarShip_Flash.bin文件(或者MINI STM32开发板用户重新刷写mini_Flash.bin文件)。
至此,关于使用串口助手XCOM刷写外部flash的中文字库的应用就讲完了,由于时间仓促,有BUG还希望大家及时反馈。
广州市星翼电子科技有限公司
22:50 上传
点击文件名下载附件
8.39 MB, 下载次数: 9368
22:50 上传
点击文件名下载附件
8.24 MB, 下载次数: 5951
22:55 上传
点击文件名下载附件
13.83 MB, 下载次数: 13611
22:55 上传
点击文件名下载附件
396.5 KB, 下载次数: 1545
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
哎,,图片好大啊,,,各位还是下载下面的附件看word文档好些。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间195 小时
老师真给力,这个方法灰常好
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
在线时间17 小时
well&done!
站在巨人的肩膀上不断的前进。。。
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
兄弟,这个真的牛逼!
手艺人要内外兼修。
主题帖子精华
在线时间654 小时
楼主做的不错&&&以前做过类似的功能&&&&&直接从串口发字库&&写进flash
道不同,不相与为谋
主题帖子精华
在线时间18 小时
回复【3楼】Badu_Space:
---------------------------------
呵呵,,多谢支持。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【4楼】xiaoyan:
---------------------------------
这就是用你那个搞的哦&&呵呵
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【5楼】wangyan915205:
---------------------------------
额,,多谢多谢。。呵呵
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间195 小时
我还停留在SD卡更新字库呢,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
金钱103952
在线时间638 小时
回复【10楼】Badu_Space:
---------------------------------
那是比较快捷的方法。
这个方法更新一次字库,少则20多分钟,多则一堂课也搞不定。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
在线时间195 小时
回复【11楼】正点原子:
---------------------------------
这么慢啊,哎,看来还是SD卡快点
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
新手上路, 积分 25, 距离下一级还需 25 积分
在线时间0 小时
怎么下载代码到开发板中?
主题帖子精华
在线时间18 小时
回复【13楼】y彼岸鸢尾:
---------------------------------
什么意思???直接下载啊,,串口、JTAG
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【13楼】y彼岸鸢尾:
---------------------------------
下载好代码之后,,按下KEY0按键,清除外部flash,,然后使用串口助手XCOM&V2.0的协议传输,打开对应板子的bin文件传输即可,,这种方法时间有点长,20~25分钟不等
避免犯错本是错误所在,我错故我在……
主题帖子精华
新手上路, 积分 25, 距离下一级还需 25 积分
在线时间0 小时
回复【15楼】zhang164534:
---------------------------------
说设备无响应,unoacked&fail&,是什么原因
主题帖子精华
在线时间18 小时
怎么在搞哦,代码程序都没有下载进去啊,那怎么&能刷新flash呢。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间423 小时
回复【16楼】y彼岸鸢尾:
---------------------------------
你好请问是你发的返修板子么?
主题帖子精华
新手上路, 积分 25, 距离下一级还需 25 积分
在线时间0 小时
回复【18楼】login_FAE:
---------------------------------
是的,板子字库更新成功了,但是我烧综合实验的程序进去还是出现了font&error!是什么情况?谢谢
主题帖子精华
在线时间18 小时
回复【19楼】y彼岸鸢尾:
---------------------------------
好的,,你等一下,,我再测试一下,,请稍等
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间423 小时
你更新下这个试试
10:25 上传
点击文件名下载附件
8 MB, 下载次数: 1071
主题帖子精华
在线时间18 小时
回复【19楼】y彼岸鸢尾:
---------------------------------
现在bin文件更新了,操作与之前是完全一样的,,实际测试是可以使用综合例程的了,,你再试试。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
新手上路, 积分 27, 距离下一级还需 23 积分
在线时间0 小时
到最后发送文件的时候一直出现重发完成&设备无响应
主题帖子精华
在线时间18 小时
什么啊???是你操作不对吧,,要不加个QQ远程我给你看看。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【23楼】水墨江南:
---------------------------------
什么啊???是你操作不对吧,,要不加个QQ远程我给你看看。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
大师,屏幕出现“unpacked&fail!”,是怎么回事?谢谢!
主题帖子精华
在线时间18 小时
回复【26楼】闪电:
---------------------------------
不会吧。。。你咋操作的??
避免犯错本是错误所在,我错故我在……
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【27楼】zhang164534:
---------------------------------
我是往自己做的系统里写的修改之后的您的程序,按您的步骤操作的,结果最后屏幕背景色变化,有英文,但是没有中文
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
回复【6楼】jermy_z:
---------------------------------
请问你从串口发字库是发到外部的FLASH吗,我现在想通过串口发送一个比较大的文件到外部FLASH,但是思路比较混乱,你的思路可以给我讲解下吗,谢谢
主题帖子精华
在线时间654 小时
回复【29楼】xiongrenzhi:
---------------------------------
串口接收&&然后写flash
道不同,不相与为谋
主题帖子精华
在线时间654 小时
回复【29楼】xiongrenzhi:
---------------------------------
我当初是接收到一个字节,写一个字节的
不过有人是建立一个buf,一次性写一个buf的
道不同,不相与为谋
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
回复【30楼】jermy_z:
---------------------------------
是啊,我是准备这么写的,但是文件比较大,只能在分多次发,发一次写一次,只有当本次写完才能发下一次,但是我怎么能确保我这次已经写完了,保证数据不丢失
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
回复【31楼】jermy_z:
---------------------------------
你是直接通过读取串口的寄存器来写的吗,没有通过buf?可以把代码参考下吗,谢谢
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
回复【9楼】zhang164534:
---------------------------------
您好,您弄得这个例程很给力,我现在也在做相似的功能,通过串口将文件发送到外部的FLASH,但是有些地方比较模糊,可以请教下你吗,我也是武汉这边的,谢谢
主题帖子精华
在线时间18 小时
回复【29楼】xiongrenzhi:
---------------------------------
29楼正解
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【34楼】xiongrenzhi:
---------------------------------
可以啊,,哪里不明白的,,,可以在论坛里面问的。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
新手上路, 积分 15, 距离下一级还需 35 积分
在线时间52 小时
原子哥是不是又要出黑科技了呀。^_^...
主题帖子精华
初级会员, 积分 113, 距离下一级还需 87 积分
在线时间2 小时
回复【36楼】zhang164534:
---------------------------------
里面有两个串口,串口2的作用是?
主题帖子精华
在线时间18 小时
回复【38楼】xiongrenzhi:
---------------------------------
是调试用的,,,串口1接收数据
避免犯错本是错误所在,我错故我在……
主题帖子精华
中级会员, 积分 452, 距离下一级还需 48 积分
在线时间0 小时
请问下大神门,bin文件怎么生成的呢?是不是把字库生成后,转成C源码,然后通过C2B转换助手转换成bin文件?
酱油团队--
主题帖子精华
中级会员, 积分 206, 距离下一级还需 294 积分
在线时间37 小时
回复【39楼】zhang164534:
---------------------------------
这个程序是不是必须用USB串口啊,用别的串口,行吗?
主题帖子精华
中级会员, 积分 206, 距离下一级还需 294 积分
在线时间37 小时
回复【39楼】zhang164534:
---------------------------------
我做了个板子,没有USB串口
主题帖子精华
在线时间18 小时
回复【42楼】bjtmh:
---------------------------------
要有串口的啊,,使用串口通信的,,看你用的什么芯片,其它的也行,,但是波特率要可以达到那么高,可否把你的电路图贴上来看看。。。
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【40楼】xiaolong12:
---------------------------------
我是&直接把那个Flash的文件读取出来之后,存为txt文件,,再改一下后缀名为bin即可。。不知道你这是想干嘛哟
避免犯错本是错误所在,我错故我在……
主题帖子精华
中级会员, 积分 452, 距离下一级还需 48 积分
在线时间0 小时
回复【44楼】zhang164534:
---------------------------------
回复【44楼】zhang164534:
---------------------------------
我想通过串口向FLASH烧写字库,但是知道怎么把(字库取摸软件)生成的字库文件转成bin文件。
酱油团队--
主题帖子精华
在线时间18 小时
回复【45楼】xiaolong12:
---------------------------------
应该也是改一下后缀名就可以了
避免犯错本是错误所在,我错故我在……
主题帖子精华
中级会员, 积分 206, 距离下一级还需 294 积分
在线时间37 小时
f8cb2a99f9be46b25b4f_761.jpg (0 Bytes, 下载次数: 0)
22:54 上传
有串口,但不知怎么虚拟到计算机上?
主题帖子精华
在线时间18 小时
回复【47楼】bjtmh:
---------------------------------
买个串口试试
避免犯错本是错误所在,我错故我在……
主题帖子精华
在线时间18 小时
回复【47楼】bjtmh:
---------------------------------
买个串口试试
避免犯错本是错误所在,我错故我在……
主题帖子精华
初级会员, 积分 116, 距离下一级还需 84 积分
在线时间7 小时
升级字库不成功~
Powered byflash试题及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
flash试题及答案
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩60页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢C考试系统题库判断和选择
一、判断题(正确的填A,错误的填B) 第一章 C语言基础知识 (C语言概述、算法、数据类型 运算符 表达式、位运算) 1.在C语言中,逗号运算符的优先级最低。(A) 2.在C语言可执行程序的开始执行点是程序中第一个函数。(B) 3.“5ch”是合法的变量名。(B) 4.C语言程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。(A) 5.当输入数据时,必须指明变量的地址,如scanf(&%f&,&f) (A) 6.表达式i++与++i在任何场合功能完全相同。(B) 7.在赋值表达式中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同。(A) 8.C语言程序中,语句以逗号结尾。( B ) 9.在 C 程序中,APH 和aph 代表不同的变量。( A ) 10. a-=7等价于a=a-7。( A ) 11. printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按原字符长从左向右全部输出。(A ) 12.如果x>y为真或ay)&&(a 13.C语言程序的变量必须先定义再使用。( A ) 14.若a和b是同类型变量,在执行了赋值语句a=b;后b中的值将放入a中,b中的值将丢失。( B ) 1 15.程序的执行总是从main函数开始,在程序的最后一个函数中结束。(B ) 16.变量的三个属性是指变量的名字、变量的值和变量在内存中的地址。(A) 17. 运算符优先顺序:赋值运算符<逻辑运算符<关系运算符<算术运算符(b) 18.对应float类型的变量,也可以用等号“==”进行数值的判断。(B) 19.表达式:1 && 3.14 和 1 & 3 的值一样大。(B) 20. 为了正确计算表达式既要考虑运算符的优先级,也要考虑其结合性。(A) 21、任何C程序都是从main函数开始和结束;(A) 22. 在C程序中,使用分号“;”表示语句的结束。(A ) 23. C程序中的必须要有至少一个main的函数,可以有多个。( B ) 24. 在C程序中,无论是整数还是实数,都能准确无误的表示。( B ) 25. 在C程序中,赋值运算符的优先级最低。(B ) 26. 当输入数值数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值。( B ) 27. 在C程序中,变量可以一边定义一边使用。( B ) 28. C程序中的注释部分可有可无,可以省略。( A) 29.字符型变量可以存放多个字符。( B ) 30.在对一个C程序进行编译的过程中,可发现注释中的拼写错误。( B ) 5.在C程序中,无论是整数还是实数,都能被准确无误地表示。(B ) 1.一个C程序的执行是从本程序的main函数开始,到main函数结束。(A) 3.() 4.运算符优先顺序:赋值运算符<逻辑运算符<关系运算符<算术运算符(b) 第二章判断题(正确的填A,错误的填B) 2 1. do-while语句中的条件为非0时,就结束该循环。(B) 2.在switch-case语句中,不是每个case后都要使用break语句。( A ) 3.Break语句只能用于循环结构中。(B ) 48. 未给变量赋初值,只是运行结果不正确,不会有其他不良影响。(B) 5、switch语句中,可以不使用break语句;(A) 6、for语句中,三个表达式都可以省略;(A) 7(7)在for循环中使用break语句的目的是使流程跳出循环体,终止当前循环 (A) 8. continue语句只能用于循环语句中。( A ) 9. while语句中的条件为0时,就结束该循环。(A) 10.在循环体内使用break语句或continue语句的作用相同。(B) 在C语言中,逻辑值“真”用 表示。 11) 1 12) 大于0的数 13) 非0的整数 14) 非0的数 在循环语句的循环体中,continue语句的作用是( )。 15) 立即终止整个循环 16) 继续执行continue语句之后的循环体 17) 结束本次循环 18) 结束本次循环并跳出循环 语句while(!e);中,条件!e等价于( ) 19.e==0 20 .e!=0 21.e!=1 22.e==1 设int c=5和 a=2+(c+=c++,c+8,++c), 则a=__________ 3 23) 15 24) 14 25) 13 26) 16 若要表示if( a不等于0 )这一关系式,则能正确表示这一关系的表达式为if ( ) 27) a0 28) !a 29) a=0 30) a 第三章判断题 1.字符串“girl”大于字符串“good”。(B) 2.C语言中有字符串变量,与字符数组等价。( B ) R3.同一数组可以存储不同类型的值。( B ) N4.若有:int a[2][3]; 则 a+1 和 a[1] 的值以及类型都一样。(B) R5.字符 \0 的值就是 0 。(A) 6.C语言中是用字符串变量来存放字符串。( B) 7. 表达式sizeof(&abc&)的值是 4 。(B) A N8. 同数组的名字一样,函数的名字也是一种指针。(A) 9、C语言中在定义数组时,一个数组的数组元素的数据类型可以不相同;(B) 10、char a[10];a[10]=9;上述语句编译不会出错;(A) B R11.数组元素的下标是从1开始标号的。( B ) N12.若a为一维数组名,则*(a+i)与a[i]等价。( A ) 13.循环语句中的continue语句的作用是结束整个循环。( B ) 14.字符串&That&小于字符串&the&。( A ) 15.字符个数多的字符串比字符个数少的字符串大。( B ) 有以下语句:char c[10];,则正确的输入语句是 16) scanf(&%d%s&,&b,&c); 18) scanf(&%d%s&,b,c); 17) scanf(&%d%s&,&b,c); 19) scanf(&%d%s&,b,&c); 4 已有定义:char a[]=&xyz&,b[]={x,y,z};,以下叙述中正确的是 20 数组a和b的长度相同 21 a数组长度小于b数组长度 22 a数组长度大于b数组长度 节. 23 4 24 5 25 6 26 7 若定义int x[10];则Turbo C编译系统为该数组分配 个字节存储单元。 27 .10 28 .11 29 .20 30 .21 设有数组定义:char array[]=&China&;则数组array所占的存贮空间为 个字 第四章判断题(正确的填A,错误的填B) R1.C程序中,函数的定义和函数的调用均可以嵌套。(B) R2.C程序中,若对函数类型未加显示说明,则函数的隐含类型为“int”。(A) 3.在调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参。(A) R4.函数的返回值是通过函数中的return语句获得的。(A) 5. 用数组名作函数参数时传递的是数组的值。(B) 6. 全局变量可以被任何一个函数中的任何一个表达式使用。(B) 7. 一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据。 (A) 8.C函数既可以嵌套定义又可以递归调用.( B ) 5 9. C语言规定,函数的实参应与其对应的形参类型一致。( A ) 10.若全局变量和局部变量同名,则全局变量被遮蔽。(A) 11.若要在函数 f 中修改变量 a 的值,应该把 a 的地址传递给 f 。(A) 12. 当数组做为参数传递给函数时,是把数组中的所有元素都传递给了该函数。 (B) N13. 给局部变量加上static属性后,其生存期和作用域都扩展了。(B) 14、在某个变量前用extern声明,可以扩展变量的作用域;(B) 15、外部变量采用静态存储,内部变量采用动态存储;(B) 16、静态外部变量只能在 17(1)不同函数内的变量,可以用相同的名字(A) N18(2)设函数调用表达式为:fun(fun(a,b),c),则函数fun带3个参数。(B) 19(4)C语言中,函数返回值的类型是由定义函数时所指定的函数类型决定的 (A) 20(5)在main函数内定义的变量在整个程序范围内有效(B) 21(10)静态外部变量,不允许其它文件中的函数访问(A) 22(1)不同函数内的变量,可以用相同的名字(A) N23(2)设函数调用表达式为:add(sub(a,b),c),则函数add带3个参数。(B) 24. 在C程序中return语句最多可以返回一个值。( A ) 25.若函数类型和return语句中表达式类型不一致时,返回类型以函数类型为准。( A ) 26.在C语言中实参和与其对应的形参各占用独立的存储单元。(A) 27 由一个函数调用另一个函数,被调用的函数又调用其他函数的关系,称为函数的嵌套调用。(T) 28 一个函数直接或者间接地自己调用自己的过程成为递归调用。(T) 29 使用递归方法解决问题,必须要有一个明确的结束递归的条件。(T) 6 30 递归调用也称为循环定义,即用其自身来定义自己的过程。(T) 第五章判断题(正确的填A,错误的填B) R1.变量的指针,其含义是指该变量的地址。(A) N2.有以下语句 static int a[]={0,1,2,3,4},*p; p=&a[2]; 则表达式(*p)++执行后,指针p指向的元素值是2。( B ) 3 R3.变量的指针,其含义是指该变量的数值。( B ) 4. 有以下语句 static int a[]={0,1,2,3,4},*p; p=&a[1]; 则表达式(*p)++执行后,指针p指向的元素值是2。( A ) B 5.若 p 是指向结构体 s 的指针,则 (*p).n 和 (&s)->n 等效。(B) 6、char *p[10];p是指向数组的指针。(B) (9)设:char *则赋值表达式px=&a&正确(A) N(10)设:int a[3]={1,2,3},*则赋值表达式px=&a正确(B) 7. int *p[5]定义的是一个指针数组。( A) 8. int (*p)[5]定义的是一个指针数组。( B ) 9.当main函数带有形参时,传给形参的值只能从命令行中得到。(A) 下列说法中不正确的是( ) R10.指针是一个变量 11.指针中存放的是地址值 7 12.指针可以进行加、减等算术运算 13.指针变量不占用存储空间 设变量定义为“int x, *p=&x;”,则&*p相当于___________。 N18)p 19)*p 20)x 21)*&x 设变量定义为“int a[4];”,则表达式 不符合C语言语法。 22)*a 23)a[0] 24)a 25)a++ 已知:int *p,则语句“p=&a; ”中的运算符“&”的含义是( ) 26、位与运算 27、逻辑与运算 28、取指针内容 29、取变量地址 int n=0,*p=&n,**q=&p;则正确的赋值语句是 30 p=1; 31) *q=2; 32) q=p; 33) *p=5; 第六章判断题 (正确的填A,错误的填B) R1.共用体类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在共用体类型定义中。(B) N2. 为了获得结构体变量 s 中成员 n 的地址,可以用表达式:s.(&n)。(B) R3、结构体和共用体都是构造数据类型,没有区别;(B) N4(3)设有宏定义:#define MY(x,y) x*y, 则宏调用MY(2+3,5)的结果为25。(B) 5(4)结构体中的所有元素,共用存储单元(B) 6.结构体变量所占的内存长度等于最长的成员的长度。( B ) 8 7.当定义一个共用体变量时系统分配给它的内存是各成员所需内存量的总和。(B) R8.宏名必须用大写字母表示。(B) 9.在C语言中预处理命令都以“#”开头。(A) N10(3)设有宏定义:#define MUL(x,y) x*y, 则宏调用MUL(2+3,5)的结果为25。(B) 11.在&文件包含&预处理语句的使用形式中,当#include后面的文件名用 (尖括号)括起时,寻找被包含文件的方式是直接按系统设定的标准方式搜索目录。(A) 以下叙述正确的是_________.预编译之宏替换 (12)可以把define和if 定义为用户标识符 13)可以把define定义为用户标识符,但不能把if定义为用户标识符 (14)可以把if定义为用户标识符,但不能把define定义为用户标识符 (15)define和if都不能定义为用户标识符 正确答案:B .设有以下说明语句 typedef struct { char ch[8]; }PER; 则下面叙述中正确的是__________.数据类型重新命名 (16)PER是结构体变量名 (17)PER是结构体类型名 (18)typedef struct是结构体类型 (19)struct 是结构体类型名 正确答案:B 9 如果有struct wage {char name[30]; }; 则struct wage worker1,worker2;定义了两个( )。 20.结构数据类型 21.结构类型变量 22. 以下说法正确的是 。 (24)结构体成员变量可以用作函数的形式参数。 (25)结构体数组名可以用作函数参数,发生函数调用时传递的是地址数据。 (26)结构体数组的元素不能用作函数的实际参数。 (27)结构体成员变量的指针不能用作函数的实际参数。 以下关于typedef的叙述中,错误的是 。 (28)使用typedef为固定长度的数组定义一个新的类型名 (29)用typedef可以在C语言中创建新的数据类型 (30)用typedef只是将已存在的类型用一个新的标识符来代表 (31)使用typedef有利于程序的移植 32.文件包含是指一个源文件可以将另一个源文件的全部内容包含进来。(A) 33.文件包含处理命令的格式为 #include “包含文件名” 或 #include (A) 23.一般变量 10 34.一条包含命令可以指定多个被包含文件(B) 35.文件包含可以嵌套,即被包含文件中又包含另一个文件。(A) 36.可以把define和if定义为用户标识符 37.可以把define定义为用户标识符,但不能把if定义为用户标识符 38.可以把if定义为用户标识符,但不能把define定义不用户标识符 39.define和if都不能定义为用户标识符 第七章判断题(正确的填A,错误的填B) R1.利用ftell函数关闭已打开的文件( B ) R2.文件操作中 fopen 是必须的,而 fclose 则可省略。(B) 3. 任何文件都可以看做是“流”式文件。(B) 4(8)设:FILE *则ch=fgetc(fout)表示将字符ch写入由fout指针所指向的文件中去。(B) 5(5)在文件末尾定义的外部变量在本源程序文件范围内有效(B) 6(6)若文件位置指针指向文件末尾,则feof(fp)返回值为非0值(A) 7. 数据文件一般分为两种,分别是二进制文件和字符文件。( A ) R8在C语言中,以“r”方式不能打开并不存在的文件。(A) 9在C语言中,以“w”方式不能打开并不存在的文件。(B) 10在C语言中,以“r”方式能打开并不存在的文件。(B) 11在C语言中,以“w”方式能打开并不存在的文件。(A) 下列语句中,将C定义为文件型指针的是 12.FILE 13.FILE *c; 11 14. 15.file *c; 若有定义FILE *fp,则打开与关闭文件的命令是 16.fopen(fp),fclose(fp) 18.open(fp),close(fp) C语言中,组成数据文件的成分是 20. 记录 24.文件由ASCII码字符序列组成,C语言只能读写文 25.文件由二进制数据序列组成,C语言只能读写二进制文件 26.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文 27.文件由记录序列组成,可按数据的存放形式分为二进制文件和文 若要打开A盘上的user子目录下名为abc.txt的文 N 28.fopen(&A:\\user\\abc.txt&,&r+&) N29.fopen(&A:\user\abc.txt&,&r&) N30.fopen(&A:\user\abc.txt&,&rb&) 21.数据行 22.数据块 23.字符(字节)序列 17.fopen(fp,“w”),fclose(fp) 19.open(fp,“W”),close(fp) 31.fopen(&A:\user\abc.txt&,&w&) 12 二、单项选择题 第一章单项选择题 R1、以下标识符中,不能作为合法的C用户定义标识符的是:( ) A .a3_b3 B.void C._123 D.abc R2、C语言规定:在一个源程序中,main函数的位置( )。 A.必须在最后 B.必须在系统调用的库函数的后面。 D.可以任意 C.必须在最开始。 R3、下列说法中正确的是( )。 A. C程序书写时,不区分大小写字母 B. C程序书写时,一行只能写一个语句 C. C程序书写时,一个语句可分成几行书写 D. C程序书写时每行必须有行号 4、 已知ch是字符型变量,下面不正确的赋值语句是 ( )。 A.ch = 5 + 9 ; B.ch= a + C. ch = \ 0 ; D. ch= 7 + 6 ; 5、 若有定义:int a = 7; float x = 2.5 , y = 4.7 ; 则表达式 x + a % 3 * (int) (x + y) % 2/4 的值是( )。 A. 2.750000 B. 0.00000 C. 3.500000 D. 2.500000 6.已知ch是字符型变量,下面正确的赋值语句是( )。 A.ch = 123 ; B. ch= \08 ; C. ch = \ D.ch =& \ &; 1. 以下标识符中,不能作为合法的C用户定义标识符的是:____________。 A)a3_b3 B)void C)_123 D)abc 13 2.C语言中,运算对象必须是整型的运算符是__________。 A) % B) / C) %和/ D) * 7. 在 C 程序中,用___________表示逻辑值“真”。 A)1 B)非 0 的数 C)非 1 的数 D) 大于 0 的数 N8.设int c=5和 a=2+(c+=c,c+8,++c), 则a=__________ A) 15 B) 14 C) 13 D) 16 9.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符________。 A)必须为字母或下划线。 B)必须为下划线。 C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。 10. 若变量已正确定义并赋值,表达式____________不符合C语言语法。 A)a*b/c; B)3.14%2 C)2, b D)a/b/c 11. 下列说法中正确的是___________。 A) C程序书写时,不区分大表达式小写字母 B) C程序书写时,一行只能写一个语句 C) C程序书写时,一个语句可分成几行书写 D) C程序书写时每行必须有行号 12.为表示数学关系x≥y≥z,正确的C语言表达式是__________。 A) (x>=y)&&(y>=z) B) (x>=y)AND(y>=z) C) (x>=y>=z) D) (x>=y)&(y>=z) 13.不合法的八进制数是________ A) 0 B) 028 C) 077 D)01 14、以下不能定义为用户标识符是 14 A Main B _0 C _int D sizeof 15.若x=5,y=4 则y*=x+5; y的值为( )。 A. 40 B. 20 C B. 15 D. 30 16、组成C语言程序的基本单位是( )。 A) 过程 B) 子程序 C) 函数 D) 主程序和子程序 17.下列哪个标识符是C语言合法的标识符( )。 A) a*b B) -xyz C) ba2 D) 5i N18.若有定义:int a=7; float x=2.5, y=4.7; 则表达式x+a%3*(int)(x+y)/4的值是( )。 A) 2.75 B) 3.5 C) 2.5 D) 0 19.设int m=1,n=2;则++m= =n的结果是( ) A、0 B、1 C、2 D、3 N20. 若变量已定义并赋值,下列符合C语法的表达式是:( A、a:=b+1 B、a=b=c+2 ) C、int 18.5%3 D、a=a+7=c+b R(3)在C程序中,设一表达式中包含有int,long, unsigned和char类型的变 量和数据,则表达式最后的运算结果类型是( ) A.int B.char C.unsigned D.long 15 R21.C语言中基本的数据类型包括__________。 A) 整型、实型、逻辑型 B) 整型、实型、字符型 C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型 N22. 若定义x和y为double类型,则表达式:x=2,y=x+5/2的值是__________ A) 4 B) 4.5 C) 4.0 D) 3.0 23. 在以下运算符中,优先级最高的运算符是__________ A) ? : B) ++ C) && D) += 24.C语言中基本的数据类型不包括__________。 A) 整型 B)字符串型 C)字符型 D)实型 25. 若定义int x=7,y=5,z;则表达式:z=x+5/2*y的值是__________ A) 7 B) 7.5 C) 17 D) 19.5 6.以下说法中正确的是( ) A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行 D、C语言程序中的main()函数必须放在程序的开始部分 (1)设int a=2,b;则执行b=a&&1;语句后,b的结果是( ) A.0 B.1 C.2 D.3 16 N(2)逗号表达式(a=3*5,a*4),a+15的值是( ) A.15 B.60 C.30 D.75 7. 若已经定义了一个字符型变量为a,下面哪个表达式的含义跟其余表达式不同: A) a!=0 B) a!=’\0’ C) a D) !a 8. 在以下运算符中,优先级最高的运算符是__________ A) , B) [ ] C) && D) += 9. 在C语言中,逻辑值“真”用__________表示。 A) true B) 大于0的数 C) 非0的整数 D) 非0的数 10. 表达式__________是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式 A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5) C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5) 1.C语言中,int类型数据占2个字节,则long类型数据占( ) A、1个字节 B、2 个字节 C、3个字节 D、4个字节 1.下列字符串是合法的标识符的是( )。 A、_HJ B、9_student C、 long D、LINE 1 2.下列说法中正确的是( )。 A、 C程序书写时,不区分大小写字母 B、 C程序书写时,一行只能写一个语句 C、 C 程序书写时,一个语句可分成几行书写 D、 C程序书写时每行必须有行号 3.在C语言中,要求参加运算的数必须是整数的运算符是( )。 17 A、/ B、! C、% D、= = 4.C语言中,逻辑“真“等价于( )。 A、大于零的数 B、大于零的整数 C、非零的数 D、非零的整数 6.假设在程序中a,b,c均被定义为整型,并且已赋大于1的值,则下列能正确表示 代数式1/abc的表达式是( )。 A、1/a*b*c B、1/(a*b*c) C、1/a/b/(float) c D、1.0/a/b/c 1.下列合法的字符常量是( )。 A、\084 B、\x43 C、ab ) D、sturct D、&\0& 2.在C语言提供的合法的关键字是( A、switch B、cher C、Case 3.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 A、 2 B、 1 C、 2.0 D、2.5 第二章 C语言程序结构 单项选择题 1、以下不是死循环的语句是_______。 for( ; ; x+i ); while (1) {x++;} for( i=10; ; i- -) sum+= for( ; (c=get)) != ‘\n’ ; ) printf(“%c” , c) ; 2.设有程序段 int k = 10 ; while ( k = 0 ) k = k - 1 ; 18 以下描述正确的是 ( )。 A. 循环体语句一次也不执行。 C. while 循环语句执行十次。 B. 循环是无限循环。 D. 循环体语句执行一次。 3.对下述程序,正确的判断是( )。 main( ) { int a,b; scanf (&%d,%d&,&a,&b); if(a>b)a=b; b=a; else a++; b++; printf(&%d,%d&,a,b); } A. 有语法错误不能通过编译 B. 若输入4,5则输出5,6 C. 若输入5,4则输出4,5 D. 若输入5,4则输出5,5 R4. 以下程序 main() { int i=010,j=10,k=0x10; printf(&%d,%d,%d\n&,i,j,k); }有语法错误不能通过编译 输出结果是( ) A.8,10,16 B.8,10,10 C.10,10,10 D.10,10,16 R5. 若变量已正确说明为int类型,要给a,b,c输入数据,以下语句正确的是 19 __________ 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); R6.已知在ASCII字符集中,数字0的序号为48,下面程序的输出结果为__________。 main() { char x,y; x=’0’;y=’9’; pirntf(“%d,%d\n”,x,y); } A)因输出格式不合法,输出错误信息 B)48,57 C)0,9 D)48,58 7. 语句 for(k=0;k<5;++k) { if(k= = 3) printf(“%d,”k); }的输出结果为_________。 A)012 B) 0124 C) 01234 D) 没有输出结果 8.为表示关系x>=y>=z,应使用C语言表达式___________。 A)(y=z) B)(x>=y)AND(y>=z) C)(x>=y>=z) D)(x>=y)&(y>=z) 20 6. 若变量已正确定义,语句“if(a>b) k=0; else k=1;”和___________等价。 A、k=(a>b)?1:0; B、k=a>b; C、k=a<=b; D、a<=b ? 0 : 1; 9.以下程序的输出结果是__________ void main() { int a = 2,b = 5; printf(“a=%%%d,b=%%%d”,a,b); } A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d N10.以下程序的输出结果是__________ void main() { int x=10,y=10; printf(“%d %d\n”,x--,--y); } A) 10 10 B) 9 9 C) 9 10 D) 10 9 11.若要表示if( a不等于0 )这一关系式,则能正确表示这一关系的表达式为 if (__________) A) a0 B) !a C) a=0 D) a R12对于循环语句while(1);下面( )是正确的 A、死循环 B、循环一次 C、不进入循环体 D、编译有错 13.下面程序的输出是(假设 int 数据是 2 个字节) void main() { int a = 32768; printf(“a=%d\n”,a); } A) a=32768 B) a=32767 C) a=-32768 D) a=-1 14.表达式__________是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式 A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5) 21 C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5) N15. 以下程序段的输出结果是_____ int x=3; do { printf(&%3d&,x-=2;} while (!(--x)); A) 1 B) 3 0 C) 1 -2 D) 死循环 16、数字字符0的ASCII值为48,若有以下程序 main() { char a=1,b=2; printf(&%c,&,b++); printf(&%d\n&,b-a); } 程序运行后的输出结果是 A 3,2 B 50,2 C 2,2 D 2,50 17、有以下程序 main() { int a,b,d=25; a = d/10 & (-1); b = a && (-1); 22 printf(&%d,%d\n&,a,b); } 程序运行后的输出结果是 A 6,1 B 2,1 C 6,0 D 2,0 18.若定义现要从键盘输入a的数据,其整数位为3位,小数位为2位,则选用( )。 A)scanf(&%f&,&a); B) scanf(&%5.2f&,a); C) scanf(&%6.2f&,&a); D) scanf(&%f&,a); 19.若定义 则以下循环语句的循环执行次数是( )。 for(i=2; i==0;) printf(&%d&, i--); A) 无限次 B) 0次 C) 1次 D) 2次 20.下面程序段___ x=3; do { y=x--; if(!y){printf(&x&);} printf(&#&); } while(1<=x<=2); 23 A) 将输出## B) 将输出##* C) 是死循环 D) 含有不合法的控制表达式 21.以下程序中,while循环的循环次数是( )。 #include “stdio.h” main( ) {int i=0; while(i<10) {if(i<1) if(i= =5) i++; } } A、1 B、10 数 N 22.有以下程序: #include “stdio.h” int a=3; main( ) { int s=0; { int a=5; C、6 24 D、死循环,不能确定次 s+=a++; } s+=a++;printf(&%d\n&,s); } 程序运行后的输出结果是( )。 A、8 B、10 C、7 D、11 23(4)下面程序段的运行结果是( ) main ( ) {int a=11,b=10,c=0; a/=b+(b&&c); printf(″%d\n″a);} A.0 B.1 C.1.1 D.11 24(5)两次运行下面程序,如果从键盘上分别输入6和4,则程序的输出结果 是( ) main ( ) { scanf(″%d″,&x); if(x++>5) printf(″%d″,x); else printf(″%d\n″,x-1);} A.7和5 B.6和3 C.7和4 D.6和4 25 (6)语句while(!e);中,条件!e等价于( ) A.e=0 B.e!=0 C.e!=1 D.e==0 R25下面程序的输出是______ main() { int k=11; printf(&k=%d,k=%o,k=%x\n&,k,k,k); } A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oXb D) k=11,k=13,k=b 26(7)下面程序的运行结果是( ) main( ) {int i=1,sum=0; lop:sum=sum+ i=i+2; if(i<6) printf (″sum=%d\n″,sum);} A.sum=4 B.sum=9 C.sum=16 27. 以下程序的输出结果是__________ void main(){ int a = 2,b = 5; 26 D.sum=25 printf(“a=%%%d,b=%%%d”,a,b); } A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d 28执行下面的程序后,a的值为_____ main() { int a,b; for (a=1,b=1;a<100;a++) { if (b>=20) if (b%3==1) { b+=3; } b-=5; } } A) 7 B) 8 C) 9 D) 10 29 30.下面的程序会( ) main() { int x=3,y=0,z=0; if(x=y+z) printf(“****”); 27 else printf(“####”); } A、有语法错误不能通过编译 B、输出**** C、可以通过编译,但不能通过连接,因而不能运行 D、输出#### 4.以下程序的输出结果是( ) main() { int x=10,y=10,i; for(i=0;x>8;y=++i) printf(“%d %d”,x--,y); } A、10 1 9 2 B、9 8 7 6 C、10 9 9 0 D、10 10 1 1.下面程序的输出是______ main() { int k=11; printf(&k=%d,k=%o,k=%x\n&,k,k,k); } A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oXb D) k=11,k=13,k=b 2.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是____ main() 28 9 { scanf(&%d&,&x&); if (x++>5) printf(&%d&,x) else printf(&%d\n&,x--); } A) 7和5 B) 6和3 C) 7和4 D) 6和4 3.读程序 #include”stdio.h” main() { float b,c; scanf(&%2d%3f%4f&,&a,&b,&c); printf(&\na=%d,b=%f,c=%f\n&,a,b,c); } 若运行时从键盘上输入(表示回车),则上面程序的输出结果是 C A) a=98,b=765,c=4321 B) a=1,b=432,c=8765 C) a=98,b=765.000000,c= D) a=98,b=765.0,c=4321.0 5.下面程序的输出是____ 29 main() {int x=3,y=6,a=0; while (x++!=(y-=1)) { a+=1; if (y } printf(&x=%d,y=%d,a=%d\n&,x,y,a); } A) x=4,y=4,a=1 B) x=5,y=5,a=1 C) x=5,y=4,a=3 D) x=5,y=4,a=1 6. 7. 8. 8. 第三章 数组 单项选择题 R1、对两个数组a和b进行如下初始化 char a[]=&ABCDEF&; char b[]={’A’,’B’,’C’,’D’,’E’,’F’}; 则以下叙述正确的是 ( ) 30 A) a与b数组完全相同 B) a与b长度相同 C) a和b中都存放字符串 D) a数组比b数组长度长 R2.若有说明:int a[3][4];则对a数组元素的正确引用是( ) A.a[2][4] B.a[1,3] C.a[1+1][0] D.a(2)(1) R3.合法的数组定义是 ( ) A、int a[]=&string&; C、vhst s=&string&; B、int a[5]={0,1,2,3,4,5}; D、char a[]={0,1,2,3,4,5}; 4.以下正确的声明是( )。 A. int a[1][4]={1,2,3,4,5}; B. float x[3][]={{1},{2},{3}}; D. double y[][3]={0}; C. long b[2][3]={{1},{1,2},{1,2,3}}; 5下列语句的执行结果是( )。 static char str[10]={“china”}; printf(“%d”,strlen(str)); A.10 B.6 C.5 D.0 R6、以下能正确定义一维数组的选项是 A int a[5]={0,1,2,3,4,5}; C char a={A,B,C}; B char a[]={0,1,2,3,4,5}; D int a[5]=&0123&; 7.下面程序段的运行结果是( )。 char a[7]=”abcdef”; char b[4]=”ABC”; strcpy(a,b); printf(“%c”,a[5]); A.空格 B.\0 C.e D.f 8定义如下变量和数组,则输出结果是( )。 31 int x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(&%d&,x[i][2-i]); A.1 5 9 B.1 4 7 C.3 5 7 D.3 6 9 9.下列对一维数组a的正确说明语句为( A) int a(10); B) int n=10, a[n]; C) scanf(&%d&,&n);int a[n]; D) #define SIZE 10 int a[SIZE]; 10.下列二维数组的说明中,不正确的是( A、float a[3*8][7-3] C、#define L 3 D、int a[6],[7] 11. 执行以下程序段后,s的值是 int a[]={5,3,7,2,1,5,4,10}; int s=0,k; for(k=0;k<8;k+=2) s+=*(a+k); 32 )。 B、float a[][3]={0,1,8}; float a[L][3] ) A、17 B、27 C、13 D、无定值 12. 若有定义:char c[10];从键盘输入“LiFang”,则正确的函数引用是( ) A.scanf(“%c”,&c[10]); B.gets(c); C.scanf(“%s”,&c); D.gets(c[10]); N13. 以下程序的输出结果是_________。 main() { char s1[20]=“China”,s2[20]=“for”,s[10]; if(strcmp(s1,s2)) printf(“%s\n”, strcat(s2,s1)); else printf(“%d\n”,strlen(s1)); } A) Chinafor B) 5 C) forChina 14选择下面程序运行的结果: #include “stdio.h” int m[3][3]={{1},{2},{3}}; int n[3][3]={1,2,3}; main() { printf(&%d\n&,m[1][0]+n[0][0]); printf(&%d\n&,m[0][1]+n[1][0]); } 第1条printf语句行输出的结果为( ) A、0 B、1 C、3 D、2 33 D) 3 R15(9)以下对一维数组a中的所有元素进行正确初始化的是( ) A.int a[10]==(0,0,0,0); B.int a[10]={ }; C.int a[]={0}; D.int a[10]={10*2}; 16(10) (8)若定义int x[10];则Turbo C编译系统为该数组分配( )个字节存储单 元。 A.10 B.11 C.20 D.21 N18.有如下程序 main() { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf(“%d”,s); } 该程序的输出结果是 A、18 B、19 C、20 D、21 N19.执行下列程序时输入123456789,输出结果是( )。 #include “stdio.h” main( ) {char s[100]; int c, 34 scanf(&%c&,&c); scanf(&%d&,&i); scanf(&%s&,s); printf(&%c,%d,%s\n&,c,i,s); } A、123,456,789 B、1,456,789 C、1,23,456,789 D、1,23,456 20.以下程序的输出结果是_____ main() {char str[12]={s,t,r,i,n,g}; printf(&%d\n&,strlen(str));(strlen不算\0,sizeof算\0) } A) 6 B) 7 C) 11 D) 12 21.合法的数组定义是 ( ) A、int a[]=&string&; C、vhst s=&string&; B、int a[5]={0,1,2,3,4,5}; D、char a[]={0,1,2,3,4,5}; 22.以下正确的声明是______。 A. int a[1][4]={1,2,3,4,5}; B. float x[3][]={{1},{2},{3}}; D. double y[][3]={0}; C. long b[2][3]={{1},{1,2},{1,2,3}}; N23.阅读下面程序,回答问题。 #include “stdio.h& 35 void main() { int i,j row,column,m; static int array[3][3] = {{100,200,300},{28,72,-30},{-850,2,6}}; m = array[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) { m = array[i][j]; row = column = } printf(“%d,%d,%d”,m.row.column); } 该程序的功能是()。 A、计算二维数组的元素和 if(array[i][j] B、求二维数组的最小值及其下标 C、对二维数组进行排序 D、求二维数组的最大值及其下标 24. 若有以下程序段: int a[]={4,0,2,3,1},k,j,t; 36 for(j=1;j<5;j++) { t=a[j]; k=j-1; while(k>=0&&t>a[k]) {a[k+1]=a[k];k--;} a[k+1]=t; } 则该程序段的功能是___(8)____ A) 对数组a进行插入排序(升序)。 B) 对数组a进行插入排序(降序)。 C) 对数组a进行选择排序(升序)。 D) 对数组a进行选择排序(降序)。 N25. 执行如下程序段,当输入为I am时,输出的结果是_________。 char str[80]; scanf(“%s”,str); strcat(str,” sad!”); printf(“%s”,str); A)I am sad! B)Isad! C)I sad! D)sad! 3. main() 37 { int a[10]={1,2,3,-4,5,6,7,-8,9,10},s=0; for(int i=0;i<10;i++) { if (a[i]<0) s+=a[i]; } printf(&%d&,s);//s=6 } (3)下面程序的输出是 # include “stdio.h” # include “stdlib.h” main() { char str1[20],str2[20]; scanf(“%s”,str1); //从键盘输入hello world printf(&%s&,str1);//输出结果1 fflush(stdin); gets(str2); //从键盘输入crazy english printf(&%s&,str2);//输出结果2 输出crazy english} 输出结果1是: (A)Hello (B)World (C)Hello World 38 D)World Hello ( 输出结果2是: (A)Hello (B)World (C)Hello World (D)World Hello 7. 1. 选择下面程序运行的结果: #include “stdio.h” int m[3][3]={{1},{2},{3}}; int n[3][3]={1,2,3}; main() { printf(&%d\n&,m[1][0]+n[0][0]); printf(&%d\n&,m[0][1]+n[1][0]); } 第1条printf语句行输出的结果为( ) A、0 B、1 C、3 D、2 2. 还是刚才1题那个程序,第2条printf语句行输出的结果为( ) A、2 B、4 C、6 D、0 5.函数调用:strcat( strcpy( str1,str2 ),str3 )的功能是( ) A、将串str1复制到串str2中后再连接到串str3之后; B、将串str1连接到串str2之后再复制到串str3之后; C、将串str2复制到串str1中后再将串str3连接到串str1之后; C、将串str1复制到串str2中后再将串str3连接到串str2之后; 第四章 函数 一、 单项选择题 1、 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( A.地址传递 B.单向值传递 39 ) C.由实参传给形参,再由形参传回给实参 D.由用户指定传递方式 R2、若调用一个函数,且此函数 中没有return语句,则正确的说法是() 该函数 A.没有返回值 B.返回若干个系统默认值 C.能返回一个用户所希望的函数值 D.返回一个不确定的值 R3、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( A.float型 B.int型 C.long型 D.double型 R4、在C语言程序中,以下描述正确的是( ) A.函数的定义可以嵌套,但函数的调用不可以嵌套 B .函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的调用均可以嵌套 5. void main() { int f(int); int w = 2,k; for(k=0;k<3;k++) { w=f(w); printf(“%d\n”,w); } 40 ) } int f(int x) { int y=0; static int z=3; y++; z++; return (x+y+z) ; } 程序结束后,z的值为_______。 (1) A) 3 B) 4 C) 5 D) 6 R6.在一个被调用函数中,关于return语句使用的描述,错误的是( A、被调用函数中可以不用return语句 B、被调用函数中可以使用多个return语句 C、被调用函数中,如果有返回值,就一定要有return语句 D、被调用函数中,一个return语句可返回多个值给调用函数 7.以下程序输出的结果是( )。 #include int func(int a,int b) {return(a+b);} main( ) 41 ) {int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(&%d\n&,r); } A、12 B、13 C、14 D、15 8(2)若有如下函数定义: add(float x, float y) {……} 则下列说法正确的是( ) A.函数返回值类型不确定 B.函数返回值是float型 C.函数返回值是int型 D.函数返回值是void型 9 int x1=30,x2=40;// x1 x2是全局变量 void main() { int x3=10,x4=20 ; sub(x3,x4) ; sub(x2,x1); L1:printf(“%d,%d,%d,%d\n”,x3,x4,x1,x2); } void sub(int x, int y) { x1=x=y=x1 ; 42 L2 :printf(“%d,%d\n”,x,y) ; } L1行输出结果为______ B_________。 (3) A) 10,20,30,40 B) 10,20,40,10 C) 20,10,40,30 D) 10,20,40,40 R10.以下对C语言函数的描述中,正确的是( )。 A、C程序由一个或一个以上的函数组成 B、C函数既可以嵌套定义又可以递归调用 C、函数必须有返回值,否则不能使用函数 D、C程序中调用关系的所有函数必须放在同一个程序文件中 11.以下函数值的类型是( )。 fun ( float x ) { y= 3*x-4; } A、int B、不确定 C、void D、float 12.一个C程序由函数A(),B(),C()和函数P()构成,在函数A()中分别调用了函数 B()和函数C(),在函数B()中调用了函数A(),且在函数P()中也调用了函数A(),则可以说( )。 A、函数B()中调用的函数A()是函数A()的间接递归调用 B、函数A()被函数B()调用是直接递归调用 43 C、函数P()直接递归调用了函数A() D、函数P()中调用的函数A()是函数P()的嵌套 13.下面函数调用语句含有实参的个数为( )。 func((a,b,c,d),(e,f,g)); A、1 B、2 C、4 D、以上都不对 14.已有函数max(a,b)为了让函数指针变量p指向函数max正确的赋值方法是 ( )。 A、p= B、*p= C、p=max(a,b); D、*p=max(a,b); N15.下面程序运行的结果为: #include void swap(int a,int b) { t=a;a=b;b=t; } main() { int m=3,n=4; printf(“The old:m=%d,n=%d\n”,m,n); swap(m,n); Printf(“The new:m=%d,n=%d\n”,m,n); } A、3,4 B、m=3,n=4 C、3,4 3,4 m=3,n=4 4,3 N16、选择程序的运行结果 。 main( ) { x=try(5); printf (&%d\n&, x); 44 D、m=3,n=4 m=4,n=3 } try ( int n ) { if ( n>0 ) return ( n * try (n-2) ); else return(1); } A) 1 B) 15 C) 120 D) 答案均是错误的 17.有以下程序 viod fun (int a,int b,int c) { a=456; b=567; c=678;} main() { int x=10, y=20,z=30; fun (x,y,z); printf(&%d,%d,%d\n&,x,y,z); } 输出结果是( )。 A.30,20,10 B.10,20,30 C.456,567,678 18.下列语句的执行结果是( )。 static char str[10]={“china”}; printf(“%d”,strlen(str)); A.10 B.6 C.5 N19.读程序,回答问题。 45 D.678,567,456 D.0 #includeint a = 2; int f(int n) { static int a = 3; int t = 0; if(n%2) { static int a = 4; t+=a++; } else { static int a= 5; t+=a++; } return t+a++; } void main() { int s=a,i; for(i=0;i<3;i++) s+=f(i); printf(&%d\n&,s); } 46 程序运行结果是(C)。 A、26 B、28 C、29 D、25 20.有如下程序 int func(int a,int b) { return(a+b); } main0 { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%d\n”,r); } 该程序的输出的结果是 __________。 A)12 B) 13 C) 14 21.有以下程序 viod fun (int a,int b,int c) { a=456; b=567; c=678;} main() { int x=10, y=20,z=30; 47 D) 15 fun (x,y,z); printf(&%d,%d,%d\n&,x,y,z); } 输出结果是_________。 A)30,20,10 B)、10,20,30 C)456,567,678 D)678,567,456 22.以下程序执行之后sum的值是_________。 main() { int i , for(i=1;i<6;i++) sum+=i; printf(&%d\n&, sum); } A)15 B)14 C) 不确定 D)0 N23.void main() { int f(int); int w = 2,k; for(k=0;k<3;k++) { w=f(w); printf(“%d\n”,w); } } 48 int f(int x) { int y=0; static int z=3; y++; z++; return (x+y+z) ; } 程序结束后,w的值为______。 (2) A) 20 B) 7 C) 28 D) 13 N24.int x1=30,x2=40;// x1 x2是全局变量 void main() { int x3=10,x4=20 ; sub(x3,x4) ; sub(x2,x1); L1:printf(“%d,%d,%d,%d\n”,x3,x4,x1,x2); } void sub(int x, int y) { x1=x=y=x1 ; 49 L2 :printf(“%d,%d\n”,x,y) ; } L2行输出结果为____________。 (4) A) 10,20 B) 20,10 C) 10,20 D) 20,10 40,10 10,40 10,40 40,10 25、有以下程序 void ss(char *s,char t) {while(*s) {if(*s==t) *s=t-a+A; s++; } } main() {char str1[100]=&abcddfefdbd&,c=d; ss(str1,c); printf(&%s\n&,str1);//? } 程序运行后的输出结果是______。 A) ABCDDEFEDBD B) abcDDfefDbD C) abcAAfefAbA D) Abcddfefdbd 50 第五章 指针 单项选择题 1有以下程序(设其文件名为2-5.c) #include void main(int argc,char *argv[]) { char *p; printf(&%d\n&,argc); if(argc>2) p=argv[1]; puts(p+1); } 若运行该程序时,在命令行提示符后输入 2-5 file1 file2 file3 则执行printf(“%d”,argc);时,输出结果为( A 1 B 2 C 3 D 4 2有以下程序(设其文件名为2-5.c) #include void main(int argc,char *argv[]) 51 4) { } char *p; printf(&%d\n&,argc); if(argc>2) p=argv[1]; puts(p+1); 若运行该程序时,在命令行提示符后输入 2-5 file1 file2 file3 则执行puts(p+1);时,输出结果为( ile1) A file1 B file2 C ile1 D ile2 R3. 变量I的值为3,I的地址为1000,若欲使p为指向I的指针变量,则下列赋值正确的是___________。 A)&I=3 B)*p=3 C)*p=1000 D)p=&I 4. 有如下程序 #include void fun(int *x,int *y) { int *z; z=x;x=y;y=z; } 52 void fun2(int *x,int *y) { z=*x; *x=*y; *y=z; (*x)++; (*y)++; } void main() { int a=5,b=9; fun1(&a,&b); printf(“a=%d,b=%d\n”,a,b); fun2(&a,&b); printf(“a=%d,b=%d\n”,a,b); } main函数中第一个printf输出结果为() (A)a=9,b=5 (B)a=5,b=9 (C)a=10,b=6 R5、 若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10};*p=a;则不能表示a数组元素的表达式是( )。 A、*p B、a[10] C、*a D、a[p-a] 53 D)a=6,b=10 ( 6、有以下程序 main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++)p[i]=i; for(i=0;i<3;i++)printf(&%d&,a[1][i]); } 程序运行后的输出结果是 A 0 1 2 B 1 2 3 C 2 3 4 D 3 4 5 7以下程序的输出结果为_________。 char *alpha[6]={“ABCD”,”EFGH”,”IJKL”,”MNOP”,”QRST”,”UVWX”}; char **p; main() { p = for(i=0;i<4;i++) printf(“%c”,*(p[i])); printf(“\n”); } A) AEIM B) BFJN C) ABCD D) DHLP 54 8.下面程序输出数组中的最大值,由s指针指向该元素。 main() { int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s; for(p=a,s=a;p-a<10;p++) if( ) s=p; printf(“The max:%d”,*s); } 则在if语句中的判断表达式应是( ) A、p>s B、*p>*s C、a[p]>a[s] D、p-a>p-s R9(3)若有定义int *x[3],b[10];则正确的赋值语句是( ) A.x=b[0]; B.x=b; C.x[0]=b[0]; D.x[0]=&b[0]; R10若有以下定义,则______是对数组元素的正确引用。 int a[5],*p=a A). *&a[4] B、*(p+5) C、*++a D、*(p-1) 11.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是 A) char s[10]=”abcdefg”; B) char t[]=”abcdefg”,*s=t; C) char s[10];s=”abcdefg”; D) char s[10];strcpy(s,”abcdefg”); 55 N12.#include int find(char *s1, char *s2) { char *p1,*p2; for(t=0 ;s1[t] ;t++) { p1=&s1[t] ; p2=s2 ; while(*p2&&*p2==*p1)//先算*p2==*p1 56 { p1++; p2++; } if(!*p2) return(t); } return -1 ; } main() { if(find(“c is fun”,”is”)!=-1) L1: printf(“is”); if(find(“c is fun”,”Basic”)!=-1) L2:printf(“basic\n”); } (11)行L1输出的结果为_________。 A is B i C c is fun D没有输出 (12)行L2输出的结果为________。 A Basic B c is fun C basic D没有输出 13.阅读下面程序,回答问题。 #include #include 57 void main() { int i = 0,n = 0; char s[80],*p; p = strcpy(p,”This is test!”); for(;*p!=’\0’;p++) if(*p= =’ ’) i = 0; else if(i= =0) { n++; i=1; } printf(“n=%d\n”,n); } 该程序的功能是()。 A、统计字符串的单词个数 B、统计字符串的空格个数 C、统计字符串的字母个数 D、统计字符串全部字符个数 N14.读程序并回答问题。 58 #include #include void fun(char *s,char *t) { k = *s; *s = *t; *t = s++; t--; if(*s) fun(s,t); } void main() { char str[10] = &abcdefg&,*p; p = str + strlen(str)/2+1; fun(p,p-2); printf(&%s\n&,str); } 程序的运行结果为( )。 A、abcdefgB、defgabc C、acegbdf 15.读程序,回答问题。 #include #include void main(int argc,char *argv[] ) 59 D、gfedcba { int i=1,n=0; while(i { n = n+strlen(argv[i]); i++; } printf(“%d\n”,n); } 若该程序生成的可执行文件名为2-4.exe,运行时输入命令行: 2-4 123 45 67 则程序的运行结果是( )。 A、3 B、5 C、7 16.读程序,回答问题。 下面程序的输出是 # include void test(int *u,int v) { *u=*u+v; ; } main() { int m=3,n=6; D、11 60 test(&m,n); printf(&%d %d&, m,n);//输出结果1 test(&n,m); printf(&%d %d&, m,n);// 输出结果2 } 输出结果1是: (A)9 6 (B)6 9 (C)3 6 (D)6 17.若有以下定义和语句,则值为12的表达式是_________。 struct wc{int *b;}*p; int x0[]={11,12},x1[]={31,32}; static struct wc x[2]={100,x0,300,x1}; p=x; A) *++p->b B) ++p->a C) p->b D) *(p++)->b 18. 以下程序的运行结果是______ void main() { int flag=1; do{ ch=get); flag=chang(&ch,flag); 61 3 putch); }while(ch!=\n); } chang(char *c, int fg) { if(*c== ) return 1; else if( fg && *c=a) *c+=A-a; return 0; } 程序运行时,从第一列开始输入以下字符,代表换行符。 This is a book! B) this Is A Book! D) This Is a Book! A) This is a book! C) This Is A Book! 19. 读下列程序: void main() { static char str[50]=&485057ehk105101&,*p= int sum1 = 0,sum2=0; while(*p!=\0) { 62 if(*p>=48&&*p<=57) sum1++; else if(*p>=101&&*p<=107) sum2++; p++; } printf(&%d,%d\n&,sum1,sum2); } 程序的运行结果是______ A) 3,2 B) 2,3 C) 3,12 D) 12,3 R20、下面程序输出数组中的最大值,由s指针指向该元素。 main() { int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s; for(p=a,s=a;p-a<10;p++) if( ) s=p; printf(“The max:%d”,*s); } 则在if语句中的判断表达式应是( ) A、p>s B、*p>*s C、a[p]>a[s] D、p-a>p-s N21、下列程序: int *f(int *px, int *py) 63 { } void main() { int a=2, b=3, c=9; *f(&a,&b) = return *px>*py?px: printf(&%d\n&, b); } 执行后的结果是: A) 10 B)5 C) 9 D)程序有错,不能运行 22(1)下面程序的输出是 # include void test(int *u,int v) { *u=*u+v; ; } main() { int m=3,n=6; test(&m,n); printf(&%d %d&, m,n);//输出结果1 test(&n,m); 64 printf(&%d %d&, m,n);// 输出结果2 } 输出结果1是: (A)9 6 (B)6 9 (C)3 6 (D)6 3 输出结果2是: (A)15 9 (B)6 15 (C)9 15 (D)15 6 23(2)下面程序的输出是 # include main() { char *str[2]={“Hello”, ”World”}; printf(&%d&,strlen(str[0]));//输出结果1 应该是5 printf(&%d&,strlen(str[1]));//输出结果2 应该是5 } 输出结果2是: (A)Hello (B)World (C)Hello World (D)World Hello 24.下面的程序: #include Main() { char s[30],*p1,*p2; 65 p1=s; gets(p1); p2=s; gets(p2) puts(p1);puts(p2); } 如果程序运行时的输入为: abc efgh 那么程序输出的结果为(注: 表示回车): A、abc B、abc C、efgh abc efgh efgh 25.有以下程序 void fun(char *a, char *b) { a=b; (*a)++; } main() { char c1=A,c2=a,*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf(&%c%c\n&,c1,c2); } 程序运行后的输出结果是 A) Ab B) aa C) Aa D) Bb 66 D、efgh abc 第六章 预编译、结构体与共用体 一、 单项选择题 N1.以下程序的输出的结果是( ) main() { union { char i[2]; } r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } A、 2 B、 1 R2.以下程序的输出结果是 main( ) { struct { } printf(”%d\n”, sizeof(test)); } C、 0 67 D、 不确定 A、4 B、5 C、6 D、7 3 7.1 若有以下声明和语句: struct sk { } struct sk *p=& 则对data中成员a的正确引用形式是 。 (A)(*p).data.a (B)(*p).a (C)p->data.a (D)p.a 4 7.3 根据下面的结构体类型定义和数组定义,值等于A的表达式是 。 struct season {char name[10]; }; struct s[4]={&Spring&,90,&Summer&,91,&Autumn&,92,&Winter&,92}; (A)s[3].name[0] s[2].name[0] R5 7.4 对于下面的程序段: int *p; p= malloc(sizof(int)); (B)s[3].name (C)s[2].name (D)season 68 要使指针变量p能正确赋值,在空白处应写上 。 (A)int 6 已知 struct { char *y; } tab[2] = { {1,&ab&}, {2,&cd&} }, *p= 则表达式*p->y++的值为 。 (A)1 (B)a (C)&ab& (D)c (B)int * (C)(int *) (D)(int) 7条件与上题相同,则表达式*(++p)->y的值为 。 (A)2 8 已知 union { struct {char c1, c2; } }a; 执行语句 a.x=0x1234; 之后,a.b.c1的值为 。 (A)0x12 (B)4 (C)34 (D)4 (B)a (C)&ab& (D)c 69 R 9 若结构体struct person定义如下: struct person {char name[20]; }; 则下列声明和语句正确的是 。 (A)struct person p1; scanf(&%s%d&, p1.name, p1.&age); (B)struct person p1; p1={&Zhang&, 20}; (C)struct person p1; scanf(&%s%d&, p1->name, &p1->age); (D)struct person p1={&Zhang&, 20}; 10已知函数原型为: struct tree *f (int x1, int *x2, struct tree x3, struct tree *x4); 其中tree为已定义过的结构,且有下列变量定义: struct tree pt, *p; 请选择正确的函数调用语句 。 (A)&pt=f(10,&i,pt,p); (B)p=f(i++, (int *)p, pt, &pt); (C)p=f(i+1, &(i+2), *p, p); (D)f(i+1, &i, p, p); 11以下程序的输出结果为 。 #include main() {struct c { 70 } cn[2]={1,3,2,7}; printf(&%d\n&, cn[0].v/cn[0].r*cn[1].r); } (A)0 (B)1 (C)3 (D)6 R12.以下程序的输出结果为 。 #include main() {union data { float f,x; }a; a.i=1; a.ch=a; a.f=1.5; printf(&%4.1f,%4.1f\n&, a.f, a.x ); } (A)1.5,97.0 (B)1.5,1.0 (C)1.5,1.51.0,1.5 13 以下程序的输出结果为 。 #include 71 D) ( union un { struct {int x,y,z; }i; }u1; main() { u1.i.x=4; u1.i.y=5; u1.i.z=6; u1.k=0; printf(&%d,%d,%d\n&, u1.i.x, u1.i.y, u1.i.z); } (A)4,5,6 (B)6,5,4 (C)0,5,6N14以下程序的输出结果为 。 #include union bt { char b[2]; } void f(union bt *p) { 72 D)0,6,5 ( p->a=-7; p->b[0]=9; p->b[1]=8; } main() { f(&c); printf(&%d\n&, c.a); } (A)2057 (B)9 (C)-7 R15以下程序的运行结果是__________。 # include & stdio.h & main ( ) {struct { } printf ( & %d \ n &, sizeof (m)) ; } A) 7 B) 4 C) 1 16 以下程序的输出结果为 。 73 D)8 D)8 ( #include enum season {Spring, Summer=2, Autumn, Winter}; main() {enum season s1,s2; s1=S s2=A printf(&%d,%d\n&, s1, s2); } (A)1,3 (B)0,2 (C)0,3 17以下程序的运行结果为( )。 #define PT 3.5 #define S(x) PT*x*x main() { int a=1, b=2; printf(&%4.1f \n&,S(a+b)); } A) 7.5 B) 10.5 C) 14.0 D) 31.5 18.请读程序: # define AD(x) x + x 74 D)1,2 ( main ( ) {int m = 1, n = 2 , k = 3 ; int sum = AD( m + n )* printf ( & sum = % d &, sum ); } 上面程序的运行结果是 __________。 A) sum = 9 B) sum = 10 C) sum = 12 D)sum = 18 19对下面程序段正确的判断__________。 # define A 3 # define B(a) (( A + 1 )*a ) ? x = 3*( A + B( 7 ) ) ; A) 程序错误,不许嵌套宏定义 B) x = 21 C) x = 93 D) 程序错误,宏定义不许有参数。 20以下程序的输出结果为_________。 #define N 2 #define M N+2 #define CUBE(x) (x*x*x) #include &stdio.h& main( ) { int i=M; i=CUBE(i); printf(&%d\n&,i); } A) 17 B) 64 C) 125 D) 53 75 N21.下面程序运行的结果为: #include #define M 3 #define N M+1 #define NN N*N/2 main() { printf(“%d\n”,NN); } A、3 B、6 C、4 D、8 22以下程序中for 循环执行的次数是( )。 #define N 2 #define M N+1 #define NUM(M+1)*M/2 main() {int I; for(I=1;I<=i++) printf(“%d\n”,I); } A.5 B.6 C.8 N23以下程序的运行结果为_________ #define PT 3.5 #define S(x) PT*x*x main() { 76 D.9 int a=1,b=2; printf(“%4.1f\n”,S(a+b)) } A) 14.0 B) 31.5 C) 7.5 D) 10.5 24.若有如下程序: # define S(x,y) x/y main() {int x=5,y=4; printf(“%d\n”,S(x+y,x-y)); } 则程序运行后的输出结果是()。预编译之宏替换(原样替换) (A)-1 (B)0 (C)1 (D)9 正确答案:c 25、下列程序运行结果是( ) #define X 5 #define Y X+1 #define Z Y*X/2 void main() { a=Y; printf(&%d &,Z); printf(&%d\n&,--a); } A、 7 6 B、12 6 C、12 5 26、下列程序的输出结果是( ) #include”stdio.h” #define GOOD(y) 2.84+y #define PR(a) printf(“\n%d”, (int)(a)) #define PRINT(a) PR(a); put‘\n’) void main( ) { int x=2; PRINT(GOOD(5)*x); 77 D、7 5 } A、11 B、15 C、13 D、12 21.读程序,回答问题。 #include struct mod {int a,b,c;}; void main() { struct mod st[3] = {{1,2,3},{4,5,6},{7,8,9}}; total = st[0].a + st[1].b; printf(&total=%d\n&,total); } 程序运行结果是()。 A、total = 5 B、total = 6 C、total = 7 22.以下程序的运行结果是__________。 # include & stdio.h & main ( ) {struct { 78 D、total = 8 } printf ( & %d \ n &, sizeof (m)) ; } A) 7 B) 4 C) 1 D) 8 23.以下程序的运行结果是__________。 # include & stdio.h & main ( ) {union { } printf ( & %d \ n &, sizeof (m)) ; } A) 4 B) 2 24 、以下程序的输出的结果是( ) A、 2 B、 1 main() { union { char i[2]; } r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } N25 、有以下程序 C) 6 C、 0 79 D) 8 D、 不确定 struct STU {char num[10]; float score[3]; } main() {struct STU s[3]={{&2,85}, {&2,75}, {&2,90}},*p=s; float sum=0; for(i=0;i<3;i++) sum=sum+p->score[i]; printf(&%6.2f\n&,sum); } 程序运行后的输出结果是______。 A) 260.00 B) 270.00 C) 280.00 D) 285.00 12.以下程序的运行结果是( )。 # include & stdio.h & main ( ) {struct { 80 } printf ( & %d \ n &, sizeof (m)) ; } A. 7 13.以下程序中for 循环执行的次数是( )。 #define N 2 #define M N+1 #define NUM(M+1)*M/2 main() {int I; for(I=1;I<=i++) printf(“%d\n”,I); } A.5 B.6 C.8 D.9 B.4 C.1 D.8 第七章 文件 单项选择题 R1、在C程序中,可以把整型数以二进制形式存放到文件中的函数是( ) A、fprintf函数 B、fread函数 C、fwrite函数 D、fputc函数 R2(4)由FILE *ch=fgetc(fp);可以推知fgetc函数的原型可以是 ( ) A.void fgetc( ); B.char fgetc( ) 81 C.char fgetc(int); D.int fgetc(FILE *fp); R3 8.1 在C语言程序中, 。 (A)文件只能顺序读写 (B)文件只能随机读写 (C)只能从文件的开头进行读写 (D)可以从文件开头进行读写,也可以在其它位置进行读写 R4 8.2 以下可作为函数fopen中第一个参数的正确格式是 。 (A)c:\user\text.txt &c:\\user\\text.txt& R5 8.3 要打开一个已存在的非空文件&file&用于修改,则正确的fopen函数调用形式是 。 (A)fp=fopen(&file&, &r&); (C)fp=fopen(&file&, &w&); (B)fp=fopen(&file&, &a+&); (D)fp=fopen(file&, &r+&); (B)c:\user\text.txt (C)&c:\user\text.txt& (D) 6 8.4 为了显示一个文 (A)&r+& (B)&a& (C)&wb+& (D)&ab+& 7 8.5 若调用fputc函数输出字符成功,则其返回值是 。 (A)EOF (B)1 (C)0 (D)被输出的字符 8 8.6 设文件指针fp指向以读写方式打开的文件f1.txt,要写入一个字符ch写入到文件f1.txt,可以通过调用函数 来实现。 (A)fgetc(fp,ch) (B)fputc(ch,&f1.txt&) (C)fputc(ch,fp) (D) 82 fputc(fp,ch) 9 8.7 调用函数fgets(str, n, fp)如果成功,其功能是 。 (A)从fp所指定的文件中读出n个字符并存放到字符数组str中。 (B)从fp所指定的文件中读出(n-1)个字符并存放到字符数组str中。 (C)从fp所指定的文件中读出(n-1)个字符并存放到字符数组str中,并使str[n]的值为\0。 (D)从fp所指定的文件中读出(n-1)个字符并存放到字符数组str中,并使str[n-1]的值为\0。 10 8.8 若文 fseek(fp, 0, SEEK_END); i=ftell(fp); printf(&%d&, i); (A)0 (B)4 (C)1 (D)-1 11 8.9 函数调用语句 printf(&%d&, A); 的功能与语句 的功能等价。 (A)fprintf(stdin, &%d&, A); (B)fprintf(stdout, &%c&, A); (C)fprintf(stdout, &%d&, 65); (D)fprintf(stdin, &%d&, 65); 12 8.10 设fp指向已打开的文件,则执行函数调用语句 rewind(fp); 之后, 。 83 (A)fp所指文件的位置指针移至文件末尾 (C)错误标记位的值被设置为1 0 (B)fp所指文件被关闭 (D)错误标记位的值被设置为 N13 8.11 以下程序正常运行后,文件test中的内容为 。 #include #include void fun(char *fname, char *st) {FILE * fp=fopen(fname, &w&); for(i=0; i fputc(st[i], fp); fclose(fp); } main() {fun(&test&, &world&); fun(&test&, &hello&); } (A)world (B)worldhello (C)helloword N14 8.12 设以下程序的文件名为e8-12.c。 #include 84 D)hello ( #include main(int argc, char *argv[]) { FILE *fp1, *fp2; if(argc!=3) {printf(&Command line input error.\n&); exit(0); } if((fp1=fopen(argv[1], &r&))==NULL) {printf(&File open error.\n&); exit(0); } if((fp2=fopen(argv[2], &w&))==NULL) {printf(&File open error.\n&); fclose(fp1); exit(0); } while((ch=fgetc(fp1))!=EOF) {if(ch>=a && ch<=z) ch=ch+A-a; fputc(ch, fp2); } fclose(fp1); 85 fclose(fp2); } 上述程序经编译、连接得到可执行文件e8-12.exe后应在DOS命令提示符 下运行。若文件file1.txt存在,其内容为一行字符“This is an example”,则以下 是正确的命令行运行方式(表示按回车键)。 (A)e8-12 file1.txt file2.txt(B)e8-12 file1.txt (C)e8-12 file2.txt (D)e8-12 N15 题8.12中的程序如果按选项中正确的命令行运行方式成功运行, 则运行后文件file1.txt中的内容为 。 (A)This is an example (C)this is an example (B)THIS IS AN EXAMPLE (D)This Is An Example N16 题8.12中的程序如果按选项中正确的命令行运行方式成功运行,则 运行后文件file2.txt 。 (A)不会被创建 AN EXAMPLE (C)被创建,且其内容为this is an example (D)被创建,且其内容为 This Is An Example N17 在题8.12中的程序中,语句 fputc(ch, fp2); 可以改写为 。 (A)fputs(&ch&,fp2) (B)fwrite(ch,1,1,fp2) (C)printf(&%c&, ch) (D)fprintf(fp2,&%c&,ch); (B)被创建,且其内容为THIS IS 86 18.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是() 文件之文件结束标识函数 (A)EOF (B)0 (C)非零值 (D)NULL 正确答案:C 19.若要打开C盘上C1子目录下名为CAB.txt的文 (A) fopen(“CAB.txt”,“r”) (B)fopen(“C:\C1\CAB.txt”,“r+”) (C) fopen(“CAB.txt”,“w”) (D)fopen(“C:\C1\CAB.txt”,“r”) 20、以下可以作为函数fopen中第一个参数的正确格式是( ) A、c:prog\file1.dat B、c:\\prog\\file1.dat C、”c:\prog\file1.dat” D”c:\\prog\\file1.dat” 正确答案:D 21.若要打开A盘上user子目录下名为abc.txt的文 (A)fopen(“A:\user\abc.txt,”,”r”) (B)fopen(“A:\\user\\abc.txt”,”r+”) (C)fopen(“A:\user\abc.txt”,”rb”) (D)fopen(“A:\\abc.txt”,”w”) 正确答案:B 22在下面程序中,若file.dat文件中原有内容为:abc,则运行程序后file.dat文件中的内容为 #include 87 void main() { FILE * fp=fopen(“file.dat”,”w”); fprintf(fp,”def”); fclose(fp); } (A) abcdef (B) abc (C)def (D) NULL 23若执行fopen函数时发生错误,则函数返回值是( )。 A) 地址值 B) 1 C) 0 D) EOF 24当顺利执行了文件关闭操作时,函数fclose的返回值为( )。 A) -1 B) 0 C)TRUE D) 1 25当已存在一个abc.txt文件时,执行函数fopen (“abc.txt”, “r+”)的功能是( A.打开abc.txt文件,清除原有的内容 B.打开abc.txt文件,只能读取原有内容 C.打开abc.txt文件,可以读取和写入新的内容 D.打开abc.txt文件,只能写入新的内容 88 D)。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
12345678910
12345678910