2013年西安电子科技大学计算机学院复试机试真题
- 格式:pdf
- 大小:62.53 KB
- 文档页数:4
西电机试题目Problems A.请写一个程序,判断给定整数序列能否构成等差数列输入说明:多组数据,每组输入数据由两行构成,第一行只有一个整数n(<1000),表示序列长度(即序列中整数的个数,0表示输入结束),第二行为n个整数,每个整数的取值区间都为[-32768----32767],整数之间以空格或挑格间隔。
输出说明:对于每一组数据,输出一个yes或no,表示该序列能否构成等差数列。
输入样本:623 15 4 18 35 1133 1 2输出样本:yesnoProblem B.判断给定正整数是不是“水仙花数”。
“水仙花数”是指一个三位数,其各位数字的立方和等于该数,例如153=13+53+33。
输入说明:有多组数据,每组数据为一个正整数n(0<n<65536,占一行),为0时表示输入结束。
输出说明:对于每一组数据,输出一个yes或no(表示该数是否为“水仙花数”)。
输入样本:153111370422输出样本:yesnoyesnoProblem C. Arnold变换是一种常用的图像置乱技术,Arnold变换的定义如下:对任意N*N矩阵(所有元素都相同的矩阵除外),设i,j为矩阵元素原始下标,经过Arnold 变换后新下标为i',j',且满足下式:i'=(i+j)mod Nj'=(i+2j)mod Ni,j:0,1,.........N-1Arnold变换具有周期性,即经过若干次变换后,矩阵回到最初状态,且周期T与N的大小有关。
对于任意N>2,TN<=N2/2,请编写程序输出给定的N(2<N<=10)对应的周期TN。
输入说明:有多组数据,每组数据只有一个整数N(2<N<=10,占一行),为0时表示输入结束。
输出说明:对输入的每一N,给出N*N矩阵的Arnold变换的周期T。
输入样本:38输出样本:46Problem D.对于一个正整数n,如果它的各位之和等于它的所有质因数的各位之和,则该数被称为Smith数。
电子科技大学2013年考研真题820计算机专业基础2013电子科技大学2013年考研真题考试科目:820计算机专业基础注:所有答案必须写在答题纸上,写在试卷或草稿纸上均无效。
《计算机操作系统》一、填空题(10分,每空2分)1.文件目录是__________的有序集合。
2.某计算机系统中有11台打印机,由k个进程竞争使用,每个进程最多需要4台打印机。
该系统可能会发生死锁的k的最小值是__________。
3.一个简单分段存储管理系统中,地址长度为32位,其中段号占12位,则最大段长是__________字节。
4.操作系统提供给应用程序的接口是__________。
5.现代操作系统实现了设备无关性,应用程序使用__________来请求使用某类设备。
二、选择题(14分,每题2分)1.进程调度时,下列进程状态的变化过程哪一项是不可能发生的?()A.阻塞挂起-〉阻塞B.就绪挂起->就绪C.就绪挂起->阻塞挂起D.阻塞挂起-〉就绪挂起2.关于线程和进程,下面说法正确的是()A.终止一个进程比终止一个线程花费的时间少。
B.进程切换比同一进程内部的线程切换花费的时间少。
C.线程提高了不同执行程序间的通信效率。
D.进程和线程都是资源分配和调度的基本单位。
3.下列事件最可能导致系统产生死锁的是()。
A.进程释放资源B.一个进程进入死循环C.多个进程竞争独占资源D.多个进程竞争共享资源4.关于子进程和父进程的说法,下面哪一个是正确的?()A.一个父进程可以创建若干个子进程,一个子进程可以从属于若干个父进程B.父进程被撤销时,其所有子进程也被相应撤销。
C.子进程被撤销时,其从属的父进程也被撤销。
D.一个进程可以没有父进程或子进程。
电子科技大学微机原理复试试题微机原理第一章练习题及解一:单项选择题●若二进制数为010111.101,则该数的十进制表示为( B )。
A:23.5 B:23.625C:23.75 D:23.5125●若无符号二进制数为11000110,则该数的十进制表示为( A )。
A:198 B:70C:126 D:49●十进制数81的8421BCD码为( A )。
A:81H B:51HC:18H D:15H●11000110为二进制原码,该数的真值为( A )。
A:-70 B:+70C:-198 D:+198●11000110为二进制补码,该数的真值为( D )。
A:+198 B:-198C:+58 D:-58●01000110为二进制补码, 该数的真值为( A )。
A:+70 B:-70C:+58 D:-58●字符A的ASCII码为41H,字符a的ASCII码为( C )。
A:41H B:42HC:61H D:62H●字符A的ASCII码为41H,字符B的ASCII码为( B )。
A:41H B:42HC:61H D:62H●字符9 的ASCII码为( C )。
因为9与A之间有7个字符A:09H B:9C:39H D:99●8位二进制数的原码表值范围为( C )。
A:0 ~ 255 B:-128 ~ +127C:-127 ~ +127 D:-128 ~ +128●8位二进制数的反码表值范围为( C )。
A:0 ~ 255 B:-128 ~ +127C:-127 ~ +127 D:-128 ~ +128●8位二进制数的补码表值范围为( B )。
A:0 ~ 255 B:-128 ~ +127C:-127 ~ +127 D:-128 ~ +128●8位二进制数的无符号数表值范围为( A )。
即无符号位A:0 ~ 255 B:-128 ~ +127C:-127 ~ +127 D:-128 ~ +128●n+1位符号数X的原码表值范围为( A )。
计算机复试问题锦集--答案仅供参案,没答案的问题请自己准备.不当之处敬请指出1. 什么是程序局部性,为什么会有程序的空间局部性?程序局部性是指程序在运行时呈现出局部性规律,在一段时间间隔内,程序的执行是局限在某个部份,所访问的存储空间也只局限在某个区域。
空间局部性是指若一个存储单元被访问,那么它附近的单元也可能被访问,这是由于程序的顺序执行引起的。
2. 比较TCP与UDPTCP与UDP都是传输层的协议,且都用端口号标识数据所达的进程。
TCP提供的是面向连接服务,提供可靠交付。
且具有流量控制和拥塞控制。
可用于可靠要求高的场合如:SMTP,FTP,HTTP等UDP提供的是无连接服务,提供不可靠交付,且无确认机制。
主要用于即时强的场合如:视频聊天,语音电话等。
3. 网络协议的三个核心要素,及概念.各起什么作用?语法,定义了数据与控制信息的格式;语义,定义了需要发出何种控制信息,完成何种响应动作以及作出何种响应;同步,定义了事件实现顺序的详细说明;4. 关系数据库都有那些操作,特点是什么?◇查询:选择、投影、连接、除、并、交、差◇数据更新:插入、删除、修改关系操作的特点:集合操作方式,即操作的对象和结果都是集合。
5. 解释一下网络体系结构,它得实现和理论有什么区别?是指通信系统的整体设计,它为网络硬件、软件、协议、存取控制和拓扑提供标准。
网络体系统结构采用分层结构,各层之间相互独立、较易维护、灵活性好。
国际标准化组织制定了OSI/RM标准,该标准采用了七层结构应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
七层协议体系结构既复杂又不实用,但其概念清楚,体系结构理论较完整。
而TCP/IP却成为了事实上的标准,它采用了四层结构即应用层、传输层、网络层和网络接口层。
6. 为了实现重定位需要哪些硬件?最简单的方式是在系统中增设一个重定位寄存器,用来存放正在执行作业的内存地址,每次访问数据时,由硬件自动将相对地址与重定位寄存器中的起始地址相加,形成实际的特理地址。
OS《1》填空题1.文件目录是()的集合。
2.11个打印机每个进程需要4台,最多()进程不死鎖。
3.4.5.虚拟设备管理中,用户用()来请求分配设备。
《2》选择题1.下列那个不会发生()就绪挂起-就绪阻塞挂起-阻塞就绪挂起-阻塞挂起阻塞挂起-就绪挂起2.二级目录可以解决什么问题()命名冲突~3.下列哪种情况可能发生死锁()多个进程抢夺独占设备~4.批处理设计需要考虑的东西()吞吐量~5.进程线程关系()引入线程减少开销~进程可无父子进程6.兼顾长短作业的调度算法()高响应比~《3》计算题(完整版)1。
32位地址1kb页长,页表项32位,分几级页,如何分,每级表长的确定?2。
父亲母亲向盘中放苹果橘子,儿子女儿从盘中取苹果橘子。
盘子容量为2。
(1)临界资源是谁?(2)写出相应PV操作。
《4》简答题(完整版)1。
虚拟存储器概念及优点?2。
就文件分配方式中的连续分配索引分配进行讨论?3。
DMA概念及其与中断操作比较?4。
位示图概念及优缺点?DS《1》填空题(完整版)1.二叉树叶子结点和度为2结点关系,空指针数?2.图邻接表存储和逆邻接表存储结点数关系?3.N个顶点无向图邻接矩阵非0个数,用压缩矩阵存储所需空间?4.N个数据二路归并排序时间复杂度5.有向无环图拓扑序列()是唯一的。
6.给定一组数字若采用线性探测法,则用什么存储结构?101。
16163计算163是第几个位置?add=H%7。
H0为第一个位置。
《2》选择题1.逻辑关系分为线性非线性~2.下列那个不是线性结构树~3.删除尾结点和增添尾结点适合的存储结构带头的双~4.队列特点先进先出~5.栈的输入顺序a3_其中存在几次输出可作为C语言标识符3~6.初始数据逆序,哪种排序法好插入,选择,冒泡,归并~《3》大题(完整版)1.A:1B:01C:000D:001给一串数字翻译成字母,并根据字母出现次数计算WPL。
2.给点数字构造AVL,并计算查找成功不成功等概率下平均次数3.100台电脑每台海量数据。
电子科技大学820计算机专业基础历年考研真题及详解最新资料,WORD格式,可编辑修改!目录2014年电子科技大学820计算机专业基础考研真题....................................... 2013年电子科技大学820计算机专业基础考研真题....................................... 2013年电子科技大学820计算机专业基础考研真题及详解................................. 2012年电子科技大学820计算机专业基础考研真题....................................... 2012年电子科技大学820计算机专业基础考研真题及详解................................. 2011年电子科技大学820计算机专业基础考研真题及详解................................. 2010年电子科技大学820计算机专业基础考研真题及详解................................. 2008年电子科技大学820计算机专业基础考研真题及详解................................. 2007年电子科技大学413计算机专业基础考研真题及详解................................. 2006年电子科技大学413计算机专业基础考研真题及详解................................. 2005年电子科技大学计算机专业基础考研真题及详解..................................... 2003年电子科技大学429计算机专业基础考研真题....................................... 说明:电子科技大学计算机专业基础专业的科目代码2003年是429,2005年不详,2006年改为413,2008年改为820。
《1》IPV4和IPV6的区别(1)IPV6地址长度为128比特,地址增大了296倍;(2)灵活的IP报文头部格式。
使用一系列固定格式的扩展头部取代了IPV4中可变长度的选项字段。
IPV6中选项部分的出现方式也有所变化,使路由器可以简单路过选项而不做任何处理,加快了报文处理速度。
(3)IPV6简化了报文头部格式,字段只有7个,加快报文转发,提高了吞吐量;(4)提高安全性。
身份认证和隐私权是IPV6的关键特性。
(5)支持更多的服务类型;(6)允许协议继续演变,增加新的功能,使之适应未来技术的发展。
《2》设备驱动器是否属于操作系统,他的作用是什么?不是,驱动程序是另外安装的软件,是操作系统控制并且和硬件之间通讯的桥梁(程序)《3》TCP的拥塞控制与流量控制的功能和区别?拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。
拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。
流量控制:指点对点通信量的控制,是端到端的问题。
流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收.《4》线程、进程、程序和任务的区别?任务是最抽象的,是一个一般性的术语,指由软件完成的一个活动。
一个任务既可以是一个进程,也可以是一个线程。
简而言之,它指的是一系列共同达到某一目的的操作。
例如,读取数据并将数据放入内存中。
这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。
进程常常被定义为程序的执行。
可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。
一个进程所拥有的数据和变量只属于它自己。
线程则是某一进程中一路单独运行的程序。
也就是说,线程存在于进程之中。
一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。
由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。
《微型计算机原理及接口技术》试题一. 单项选择题1. 8086CPU芯片的外部引线中,数据线的条数为○①6条②8条③16条④20条2. 8088CPU上READY信号为下面哪种信号有效?○①上升边②下降边③高电平④低电平3. 8088CPU中的CS寄存器是一个多少位的寄存器?○①8位②16位③24位④32位4. 当8086CPU 读写内存的一个规则(对准)字(16位)时,BHE和A0的状态必须是○①00 ②01 ③10 ④115. 当8086CPU读I/O接口时,信号M/IO和DT/R的状态必须是○①00 ②01 ③10 ④116. 在8088CPU中, 用于寄存器间接寻址输入输出指令的寄存器是○①AX ②BX ③CX ④DX7. ISA总线是一种多少位的内(系统)总线?○①8位②16位③32位④64位8. 属于只读存贮器的芯片是○①SRAM ②DRAM ③EPROM ④SDRAM9. 需要定时刷新的存贮器是○①SRAM ②DRAM ③EPROM ④EEPROM10. 内存从A4000H到CBFFFH,共有○①124K ②160K ③180K ④224K11. 擦除EPROM是用○①+5V电压②+15V电压③+21V电压④紫外光照射12. 采用查询方式来实现输入输出是因为它○①速度最快②CPU可以不介入③实现起来比较容易④在对多个事件查询工作时,能对突发事件做出实时响应13. 实现DMA传送,需要○①CPU通过执行指令来完成②CPU利用中断方式来完成③CPU利用查询方式来完成④不需要CPU参与即可完成14 下面哪种说法不正确○①内存地址也可做为接口地址使用②内存地址不可做为接口地址使用③接口地址不可做为内存地址使用④接口地址也可做为外存地址使用15. 8255工作在方式0时,下面哪种说法正确○①A、B、C三个口输入均有锁存能力②只有A口输入有锁存能力③只有C口输入有锁存能力④A、B、C三个口输入均无锁存能力二. 多项选择(在备选的答案中选出正确的答案,每小题2.5分, 本题共10分)1 . 在构成8 0 88最大模式下构成系统总线时,可用到下列哪些芯片?○①74LS373 ②8288 ③74LS245 ④74LS138 ⑤82892 . 8086CPU一个总线周期可以读(或写)的字节数为○①1个②2个③3个④4个⑤6个3. 当8255的A口工作在方式2,B口工作在方式0时,其C口可用作○①全部用作联络信号②5条用作联络信号③4条用作联络信号④3条用作I/O ⑤8条用作I/O4. 当8086CPU最大模式下读内存时,下列哪些信号的状态是正确的?○①MEMR=0 ②MEMW=0 ③IOW=1 ④IOR=0 ⑤DT/R=0三. 判断题1. 8086CPU的复位启动地址为0FFFFH。
共3页/第1页电子科技大学2013年攻读硕士学位研究生复试试题考试科目:微机原理及数字电路 成绩一、单项选择题(每空2分,共30分) 1. 下列无符号数中最大的数是( D )。
A 、(10010101)B B 、(227)O C 、(96)H D 、(152)D2. CPU 子系统主要包括( B )。
A. 运算器、控制器、存储器B. 运算器、控制器、寄存器C. MPU 、控制器、总线D. 运算器、输入输出缓冲 3. 在机器数中,( C )的零的表示形式不是唯一的。
A 、补码B 、原码和补码C 、原码和反码D 、反码和补码 4. 在把模拟量转换为数字量的过程中,由于数字量不能连续变化而造成的误差称为 ( B )。
A 、孔径误差B 、量化误差C 、偏移误差D 、非线性误差5. 虚拟存储器技术是将( A )的一部分虚拟为内存空间。
A .硬盘B .CacheC .SDRAMD .光盘6. ARM 中采用了4种堆栈类型,当为空递增堆栈时,若SP=0XA0000020,2次入栈后SP为( B )。
A 、0XA0000024B 、0XA0000028C 、0XA000001CD 、0XA0000010 7. CPU 执行指令时的最小操作周期是 ( C )。
A 、指令周期B 、总线周期C 、时钟周期D 、传输周期 8. 1片16k ×8的SRAM 芯片,其地址线有( C )位。
A 、8B 、16C 、14D 、24 9. 与并行总线带宽无关的是( C )A 、总线时钟频率B 、总线数据宽度C 、总线地址宽度D 、总线同步方式本科学校 姓 名 考生编号 联系方式 复试号 ……………………密……………封……………线……………以……………内……………答……………题……………无……………效……………………复试号 …………无……………效……………………共3页/第2页10. 系统数据通路宽度是指( A )。
A 、能一次并行传送的数据位数B 、可依次串行传送的数据位数C 、单位时间内可传送的数据位数D 、能一次并行传送的数据最大值11. 一般情况下,数据传输速率最快的传输方式是( C )。
电子科技大学二零一三年推免生复试笔试题微机原理考试题 (120)分钟考试形式:闭卷考试日期20 13 年9 月23得分一二三合计复核人签名得分签名一、选择题(每题2分,共40分)1. 在()中,机器数零的表示形式是不唯一的。
A.补码 B.原码C.补码和反码 D.原码和反码2. 以下对于RISC机器来说不正确的是( )。
A、指令编码等长B、寻址方式多C、不能访问存储器D、运算类指令只使用寄存器3. 片内AMBA总线中, APB桥是()A、支持突发传输数据的B、AHB高性能系统的中枢C、APB中的唯一总线主机D、一种总线仲裁器4. 超标量微处理器的特点有()。
A、不仅能进行32位运算,也能进行64位运算B、内部含有多条指令流水线和多个执行部件C、数据传输速度很快,每个总线周期最高能传送4个64位数据D、芯片内部集成的晶体管数超过100万个,功耗很大5. 总线上多个主设备同时发送信息导致的工作异常一般称为()。
A、冲突B、仲裁C、中断D、异常6. 下列关于DMA的说法错误的是()。
A.CPU只启动DMA,而不干预这一过程。
B.传输数据的过程只由硬件完成而不需软件介入。
C.DMA模式下完成数据传输不需要涉及到中断等操作。
D.在外设和内存之间直接地传输数据7. ARM处理器比较无符号数大小时是根据()标志位来判断的。
A、C和NB、C和ZC、C和VD、Z和V8. 微程序控制器中,机器指令与微指令的关系是()。
A、每一条机器指令由一条微指令来执行B、每一条机器指令由一段微指令编写的微程序来解释执行C、每一条机器指令组成的程序可由一条微指令来执行D、一条微指令由若干条机器指令组成9. 当CPU响应中断时,通常对正在执行的指令的处理方法是()。
A.执行完当前指令之后响应中断B.停止执行当前指令C.中断执行当前指令D.放弃执行当前指令10. 异步通信方式工作中,设置波特率因子为32,字符长度为8位(含1位奇校验位),起始位1位,停止位为2位,每秒传输200个字符,则它的传输速率和收/发时钟频率分别为()。
2008年Problems A.请写一个程序,判断给定整数序列能否构成等差数列输入说明:多组数据,每组输入数据由两行构成,第一行只有一个整数n(<1000),表示序列长度(即序列中整数的个数,0表示输入结束),第二行为n个整数,每个整数的取值区间都为[-32768----32767],整数之间以空格或挑格间隔。
输出说明:对于每一组数据,输出一个yes或no,表示该序列能否构成等差数列。
输入样本:623 15 4 18 35 1133 1 2输出样本:yesnoProblem B.判断给定正整数是不是“水仙花数”。
“水仙花数”是指一个三位数,其各位数字的立方和等于该数,例如153=13+53+33。
输入说明:有多组数据,每组数据为一个正整数n(0<n<65536,占一行),为0时表示输入结束。
输出说明:对于每一组数据,输出一个yes或no(表示该数是否为“水仙花数”)。
输入样本:153111370422输出样本:yesnoyesnoProblem C. Arnold变换是一种常用的图像置乱技术,Arnold变换的定义如下:对任意N*N矩阵(所有元素都相同的矩阵除外),设i,j为矩阵元素原始下标,经过Arnold变换后新下标为i',j',且满足下式:i'=(i+j)mod Nj'=(i+2j)mod Ni,j:0,1,.........N-1Arnold变换具有周期性,即经过若干次变换后,矩阵回到最初状态,且周期T与N的大小有关。
对于任意N>2,TN<=N2/2,请编写程序输出给定的N(2<N<=10)对应的周期TN。
输入说明:有多组数据,每组数据只有一个整数N(2<N<=10,占一行),为0时表示输入结束。
输出说明:对输入的每一N,给出N*N矩阵的Arnold变换的周期T。
输入样本:38输出样本:46Problem D.对于一个正整数n,如果它的各位之和等于它的所有质因数的各位之和,则该数被称为Smith数。
08 Problem A#include <stdio.h>void main(){int isarithmetic(int array[],int n);void bubble(int array[],int n);int num,m,i=0,array1[100],array2[100][1000];scanf("%d",&num);while(num>0){int j;array1[i]=num;for(j=0;j<num;j++){scanf("%d",&array2[i][j]);}i++;scanf("%d",&num);}for(m=0;m<i;m++){bubble(array2[m],array1[m]);if(isarithmetic(array2[m],array1[m]))printf("yes\n");elseprintf("no\n");}}int isarithmetic(int array[],int n){int i,differ;differ=array[0]-array[1];for(i=1;i<n-1;i++){if(differ!=array[i]-array[i+1])return 0;}return 1;}void bubble(int array[],int n){int i,j,temp;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++){if(array[j]>array[j+1]){temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}08 Problem B#include <stdio.h>void main(){int i=0,m,array[100];scanf("%d",&array[0]);while(array[i++]){scanf("%d",&array[i]);}for(m=0;m<i-1;m++){if(array[m]>99 && array[m]<1000){int digit,ten,hunder;hunder=array[m]/100;ten=array[m]%100/10;digit=array[m]%10;if(array[m]==hunder*hunder*hunder+ten*ten*ten+digit*digit*digit) printf("yes\n");elseprintf("no\n");}elseprintf("no\n");}}08 Problem C#include <stdio.h>void main(){int circle(int scalar);int n,i,number=0,array[10];scanf("%d",&n);while(n){array[number++]=n;scanf("%d",&n);}for(i=0;i<number;i++){printf("%d\n",circle(array[i]));}}int circle(int scalar){int newi=0,newj=1,oldi,oldj;int t=1;oldi=(newi+newj)%scalar;oldj=(newi+2*newj)%scalar;while(!(oldi==newi && oldj==newj)){int temp;temp=oldi;oldi=(oldi+oldj)%scalar;oldj=(temp+2*oldj)%scalar;t++;}if(scalar>2 && t<=scalar*scalar/2)return t;elsereturn 0;}08 Problem D#include <stdio.h>#include <math.h>void main(){int prime(int n);int sum(int n);int countprime(int n);int i,num,countsample=0,count=0,array[100];scanf("%d",&num);while(num) //输入各组整数以0结束{array[countsample++]=num;scanf("%d",&num);}for(i=0;i<countsample;i++){if(countprime(array[i])==sum(array[i]))printf("yes\n");elseprintf("no\n");}}int prime(int n) //判断一个整数是否是素数{int p,i;p=(int)sqrt(n);for(i=2;i<=p;i++){if(n%i==0)return 0;}return 1;}int sum(int n) //求一个整数各位数字之和{int i,count=0;for(i=1;n/i!=0;i=10*i){count+=n%(10*i)/i;}return count;}int countprime(int n) //求一个整数的质因数各位之和{int i,count=0;if(prime(n))return sum(n);for(i=2;i<=n;i++){if(prime(i) && n%i==0){count+=sum(i);n/=i;i=1;}}return count;}08 Problem E#include<cstdio>#include<stdlib.h>#include<string.h>//利用数组计算void jisuan(char a[], int n){int result[1001] = {0}; //结果的记录int i = 0;int j = 0; //用于记录整数的位置int flag = 0; //标志号int Len, dLen; //分别用于记录去掉小数点后,总长度与小数点的长度int inta, temp1; //用于存储数值与辅助值int temp2; //辅助值2int lastlen; //确认最后小数的数组长度int p, q;//找到小数点的位置while (a[i]){if (a[i] != '.' && !flag){j++;}//找到小数点,并且将小数点这一位开始,数值向前移动一位else{if (!flag){i++;flag = 1;continue;}else{a[i - 1] = a[i];}}i++;}Len = strlen(a); //记录去掉.的字符串多少dLen = Len - j - 1; //记录小数位的大小if (dLen < 0){dLen = 0;}if (i != 1){a[i - 1] = a[i];}inta = atoi(a); //将字符串中的数字转化位整形数值temp1 =inta;i = 0;//基本思路就是转换成整数数组运算,然后再来点小数点while (temp1 > 0) //将整形数值以数值的形式转化给数组{result[1000 - i] = temp1 % 10;temp1 = temp1 / 10;i++;}//开始计算,关键代码在于此://分数与分数之间的相乘,用一个固定值分别与数组中的每一个数值相乘temp2 = n;while (temp2 != 1){for (i = 1000; i > 0; i--){result[i] = result[i] * inta;}for(i = 1000; i > 0; i--){if (result[i] / 10 != 0){result[i - 1] = result[i - 1] + result[i] / 10;result[i] = result[i] % 10;}}temp2--;}//打印lastlen = dLen * n; //确认最后小数的数组长度//解决前后0的情况,并将前后不为0的情况记录p、qfor (p = 1; p <= 1000 && result[p] == 0; p++){;}if (p > 1000){printf("0");return;}for (q = 1000; q >= 1 && result[q] == 0; q--){;}if (1000 - p + 1 <= lastlen) //考虑到0.几的情况问题{printf(".");for (i = 1000 - lastlen + 1; i <= q; i++){printf("%d", result[i]);}printf("\n");}else{if (1000 - q >= lastlen) //考虑没有小数的情况{for (i = p; i <= 1000 - lastlen; i++){printf("%d", result[i]);}printf("\n");}else //正常的情况{for (i = p; i <= 1000 - lastlen; i++){printf("%d", result[i]);}printf(".");for (i = 1000 - lastlen + 1; i <= q; i++){printf("%d", result[i]);}printf("\n");}}}int main(){char s[7];int n;while (scanf("%s%d", s, &n) != EOF){jisuan(s, n);}return 0;}09 Problem A#include <stdio.h>int main(){int perfect(long n);long a,b,i;scanf("%ld %ld",&a,&b);for(i=a;i<=b;i++){if(perfect(i))printf("%ld\n",i);}return 0;}int perfect(long n){long i,count=0;for(i=1;i<n;i++){if(n%i==0)count+=i;}if(count==n)return 1;elsereturn 0;}09Problem B#include <stdio.h>int main(){void sort(int array[],int n);int i,j,num,p=0,array[9][9],result[20];scanf("%d",&num);for(i=0;i<20;i++)result[i]=0; //输出数组赋初值0 for(i=0;i<num;i++)for(j=0;j<num;j++)scanf("%d",*(array+i)+j);for(i=0;i<num;i++) //每行元素和{for(j=0;j<num;j++)result[p]+=*(*(array+i)+j);p++;}for(j=0;j<num;j++) //每列元素和{for(i=0;i<num;i++)result[p]+=*(*(array+i)+j);p++;}for(i=0;i<num;i++) //对角线元素和result[p]+=*(*(array+i)+i);p++;for(i=0;i<num;i++) //对角线元素和result[p]+=*(*(array+i)+3-i);sort(result,2*num+2);for(i=0;i<2*num+2;i++)printf("%d ",result[i]);printf("\n");return 0;}void sort(int array[],int n) //冒泡排序{int i,j,temp,no;for(i=0;i<n-1;i++){no=0;for(j=0;j<n-i-1;j++){if(array[j]<array[j+1]){temp=array[j];array[j]=array[j+1];array[j+1]=temp;no=1;}}if(no==0)break;}}09 Problem C#include <stdio.h>#include <stdlib.h>int main(){unsigned int getwholenum(char *array);int factor(unsigned int n);int num,i;char array[100];unsigned int wholenum;scanf("%d",&num);for(i=1;i<=num;i++){scanf("%s",array);wholenum=getwholenum(array);if(wholenum==0){printf("0\n");continue;}elseprintf("%d\n",factor(wholenum));}return 0;}unsigned int getwholenum(char *array){char resultarray[100];int i=0,j=0;while(*(array+i)!='\0'){if(*(array+i)>='0' && *(array+i)<='9')resultarray[j++]=*(array+i);i++;}*(array+i)='\0';return strtoul(resultarray,'\0',10);}int factor(unsigned int n){int i,result;for(i=1;i<(int)n;i++){if(n%i==0)result=i;}if(result==1)result=n;return result;}09 Problem D#include <stdio.h>#include <malloc.h>#include <string.h>#define NULL 0struct btree{char num;struct btree *lchild;struct btree *rchild;};struct stack{struct btree *base;struct btree *top;int satcksize;};int main(){struct btree *create(char *arrayfirst,char *arraymiddle,int len);void followvisit(struct btree *bt);char arrayfirst[20],arraymiddle[20];int len;struct btree *bt;scanf("%s\n%s",arrayfirst,arraymiddle);len=strlen(arrayfirst);bt=create(arrayfirst,arraymiddle,len);followvisit(bt);printf("\n");return 0;}struct btree *create(char *arrayfirst,char *arraymiddle,int len) //建立二叉树{struct btree *bt;bt=(struct btree *)malloc(sizeof(struct btree));if(len==1){bt->num=*arrayfirst;bt->lchild=NULL;bt->rchild=NULL;return bt;}else{int count=1,i=0;while(*arrayfirst!=*(arraymiddle+i)){i++;count++;}bt->num=*arrayfirst;if(count==1)bt->lchild = 0;elsebt->lchild=create(arrayfirst+1,arraymiddle,count-1);if(count==len)bt->rchild = 0;elsebt->rchild=create(arrayfirst+count,arraymiddle+count,len-count);return bt;}}void followvisit(struct btree *bt) //后续遍历二叉树(递归){if(!bt->lchild && !bt->rchild)printf("%c",bt->num);else{if(bt->lchild)followvisit(bt->lchild);if(bt->rchild)followvisit(bt->rchild);printf("%c",bt->num);}}/*void followvisit(struct btree *bt) {struct btree *p,array[20];int top=0;p=bt;while(top>=0 || *p){if(*p){array[top++]=*p;p=p->lchild;}else{p=&array[--top];if(!p->rchild){printf("%c",p->num);top--;p=array}else{top++;p=p->rchild;}}}}*/09 Problem E#include <stdio.h>int main(){int num,i,j,top;char array[100],stack[100];scanf("%d\n",&num);for(i=0;i<num;i++){j=top=0;gets(array);while(array[j]){if(array[j]=='(' || array[j]==')' || array[j]=='[' || array[j]==']' || array[j]=='{' || array[j]=='}'){stack[top++]=array[j];if(top>=2){if((stack[top-2]=='(' && stack[top-1]==')') || (stack[top-2]=='[' && stack[top-1]==']') || (stack[top-2]=='{' && stack[top-1]=='}'))top-=2;}}j++;}if(top==0)printf("yes\n");elseprintf("no\n");}return 0;}10 Problem A# include <stdio.h>int main(){int sum(int n);void bubble(int array[],int n);int i,countsample=0,num,array[1000];scanf("%d",&num);while(num){array[countsample++]=num;scanf("%d",&num);}for(i=0;i<countsample;i++){array[i]=sum(array[i]);}bubble(array,countsample);for(i=0;i<countsample;i++)printf("%d ",array[i]);printf("\n");return 0;}int sum(int n){int i=1,count=0;for(i;n/i!=0;i=10*i){count+=n%(10*i)/i;}return count;}void bubble(int array[],int n){int i,j,temp,change;for(i=0;i<n-1;i++){change=0;for(j=0;j<n-i-1;j++){if(array[j]>array[j+1]){temp=array[j];array[j]=array[j+1];array[j+1]=temp;change=1;}}if(change==0)break;}}10Problem B#include <stdio.h>int main(){int max(int (*array)[100],int m,int n,int i,int j);int m,n,i,j,no=0;int array[100][100];scanf("%d %d",&m,&n);for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&array[i][j]);}}for(i=0;i<m;i++){for(j=0;j<n;j++){if(max(array,m,n,i,j)){printf("%d %d %d\n",i,j,array[i][j]);no=1;}}}if(!no)printf("no\n");return 0;}int max(int (*array)[100],int m,int n,int i,int j) //m为矩阵行数,n为矩阵列数,i,j 为当前元素在矩阵中位置{int num,p,q; //p表示行,q表示列num=*(*(array+i)+j);for(q=0;q<n;q++){//int a=*(*(array+i)+q);if(*(*(array+i)+q)<num)return 0;}for(p=0;p<m;p++){if(*(*(array+p)+j)>num)return 0;//if(*(*array+j+100*p)>num)// return 0;}return 1;}10 Problem C#include <stdio.h>int main(){int isint(char n);char begin[50],end[100];int i=0,p=0;gets(begin);while(begin[i]!='\0'){int j=0,num=0;if(!isint(begin[i]) && !isint(begin[i+1]))end[p++]=begin[i++];else{int q,m=1;while(isint(begin[++i]))j++;for(q=0;q<j;q++){num+=((int)begin[--i]-48)*m;m=10*m;}for(q=0;q<num;q++){end[p++]=begin[i-1];}i+=j;}}end[p]='\0';puts(end);}int isint(char n){if(n>='0' && n<='9')return 1;elsereturn 0;}10 Problem D#include <stdio.h>#include <malloc.h>#define NULL 0struct huffmantree{int weight;struct huffmantree *lchild;struct huffmantree *rchild;};int main(){struct huffmantree *createhuffman(int array[],int n);int visithuffman(struct huffmantree *hm,int n);int n,i,array[30];struct huffmantree *hm;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&array[i]);}hm=createhuffman(array,n);printf("%d\n",visithuffman(hm,0));}struct huffmantree *createhuffman(int array[],int n){int sort(struct huffmantree *huffman[],int n);struct huffmantree *huffman[30];int i,j;for(i=0;i<n;i++){struct huffmantree *p;p=(struct huffmantree *)malloc(sizeof(struct huffmantree));p->lchild=NULL;p->rchild=NULL;p->weight=array[i];huffman[i]=p;}j=n;while(j>1){struct huffmantree *p;i=sort(huffman,j);p=(struct huffmantree *)malloc(sizeof(struct huffmantree));p->lchild=huffman[i-1];p->rchild=huffman[i];p->weight=huffman[i-1]->weight+huffman[i]->weight;huffman[i-1]=p;j--;}return huffman[0];}int sort(struct huffmantree *huffman[],int n){int i,j,ok;struct huffmantree *p,*q,*temp;for(i=0;i<2;i++){ok=0;for(j=0;j<n-i-1;j++){p=huffman[j];q=huffman[j+1];if(p->weight<q->weight){temp=huffman[j];huffman[j]=huffman[j+1];huffman[j+1]=temp;ok=1;}}if(ok==0)return n-1;}return n-1;}int visithuffman(struct huffmantree *hm,int n){struct huffmantree *p=hm;int count=0;if(!p->lchild && !p->rchild)return n*p->weight;else{count=visithuffman(p->lchild,n+1)+visithuffman(p->rchild,n+1);return count;}}。