三级数据库背诵资料
第一章 计算机基础知识
1、冯.诺依曼计算机以“存储程序”原理为基础,由运算器、存储器、控制器、输入设备和输出设备等五大部件组成。
2、计算机指令系统:
系列计算机:指令系统向下兼容。
复杂指令系统计算机:CISC (Complex Instruction Set Computer) 精简指令系统计算机:RISC (Reduced Instruction Set Computer)
指令系统的类型:数据传送类指令、算术逻辑类指令和判定控制类指令。 指令系统的寻址方式:立即寻址(立即数寻址),指令中直接给出操作数。
寄存器寻址:操作数在寄存器中。直接寻址:指令中直接给出操作数地址。寄存器间接寻址:寄存器给出操作数地址。
寄存器相对寻址:指令中给出操作数的地址偏移量
3、微型处理器分类:通用微处理器、嵌入式微处理器和数字信号处理器等 4、总线:
PCI:不依附具体处理器的局部总线。 USB:通用串行总线。
1394总线:FireWire,为家用电器研制的一种高速串行总线。1394总线在数字视频设备(数字摄像机)中广泛应用。 5、计算机的技术指标:
运算速度MIPS(每秒百万条指令)
影响计算机运算速度的因素很多,主要是CPU的主频和存储器的存取周期。
存储器容量:基本单位B(Byte) 1KB=1024Byte 1MB=1024KB 1GB=1024MB 1TB=1024GB 数据传输率:基本单位bps(每秒传输多少位) 1Kbps=103bps 1Mbps=103Kbps 1Gbps=103Mbps 6、计算机中的信息表示
非数字信息的表示:ASCII码 汉字的表示:三类代码体系:输入码,如:拼音码、五笔字形码等;机内码;交换码,如GB2312-80; 7、计算机网络基础
计算机网络的基本特征:资源共享。广域网与广域网的互联是通过路由器实现的。
传输技术分为: 广播式网络(通过一条公共信道实现)点--点式网络(通过存储转发实现)。采用分组存储转发与路由选择是点-点式网络与广播网络的重要区别之一 按规模分类:局域网(LAN)、城域网(MAN)、广域网(WAN)
广域网(远程网)以下特点:1 适应大容量与突发性通信的要求。2 适应综合业务服务的要求。3 开放的设备接口与规范化的协议。4 完善的通信服务与网络管理。 几种常见的广域网的特点:
X.25:建立在速率低、误码率高的电缆介质上,X.25协议包括差错控制、流量控制和拥塞控制等,由通信子网完成,有时间延迟。
FR(帧中继):建立在速率高、误码率低的光纤上,对X.25协议进行简化,差错控制由用户终端完成。 B-ISDN(宽带综合业务数字网)、N-ISDN(窄带综合业务数字网)
ATM(异步传输模式,一种数据传输与分组交换技术,能满足多媒体应用的高速率与低延迟的要求,具有线路交换实时性好和分组交换灵活性好的双重优点。
各种城域网建设方案有几个相同点:传输介质采用光纤,交换接点采用基于IP交换的高速路由交换机或ATM交换机,在体系结构上采用核心交换层,业务汇聚层与接入层三层模式。城域网MAN介于广域网与局域网之间的一种高速网络。
8、网络协议为三部分:(1)语法,即用户数据与控制信息的结构和格式; (2)语义,即需要发出何种控制信息,以及完成的动作与做出的响应;(3)时序,即对事件实现顺序的详细说明.
9、Internet的结构和组成 协议:TCP/IP协议组
TCP/IP参考模型可以分为:应用层,传输层(TCP、UDP协议),互连层(IP协议),主机-网络层 应用层协议分为:
a、依赖于面向连接的TCP协议:主要有: 文件传送协议FTP、电子邮件协议SMTP以及超文本传输协议HTTP等。
b、依赖于面向连接的UDP协议:主要有简单网络管理协议SNMP;简单文件传输协议TFTP。
c、既依赖于TCP协议,也可以依赖于UDP协议:域名服务DNS等。 d、网络终端协议:Telnet;网络文件系统 NFS;路由信息协议RIP。 10、域名与IP地址:IP地址由网络地址和机器地址组成:IP地址长度为32位,X.X.X.X表示,X为8为,表示0-255,(点分十进制地址)。主要分为A类(网络地址7位,机器地址24位)、B类(网络地址14位,机器地址16位)、C类(网络地址21位,机器地址8位);域名 格式 主机名.组名.网点名 www.sina.com 11、Internet 提供的服务
(1)WWW服务:采用客户机/服务器模式a、超文本和超媒体是WWW的信息组织形式 b、HTML(超文本标记语言,网页语言)和HTTP(超文本传输协议)是WWW工作的基础 c、URL(统一资源定位器):查找主页。由三部分组成:协议类型,主机名和文件名及路径
比如:http://www.swpu.edu/index.htm,其中http为协议类型,www.swpu.edu.cn为主机名,index.htm为文件名及路径 (2)电子邮件服务:
电子邮件发送接收协议:发送协议,简单邮件传送协议(SMTP),接收协议,可以使用邮局协议(POP3)和交互式邮件存取协议(Interactive Mail Access Protocol,IMAP)
电子邮件内容协议 MIME(Multipurpose Internet Mail Extensions),可以传送图像、声音等多媒体信息 12、Internet的接入:ISP(Internet Service Provider,ISP)Internet服务提供商 局部网接入、电话线接入
ADSL(Asymmetrical Digital Subscriber Loop)非对称数字用户环路,基于电话线,上、下行传输速率不同,上行可达1Mbps;下行可达8Mbps。 13信息安全基础
信息安全包括四方面内容: 信息保密、 完整性、 可用性、 可控性 (1)密码:加密或密码由5部分组成:明文空间(明文的集合)、密文空间(密文集合)、加密密钥空间、解密密钥空间、加密和解密算法集
单钥加密分为两类:流密码(明文逐位加密)和分组密码(明文分组,逐组加密)。 密钥的分配和存储是最关键和困难的问题。 (2)信息认证
有关认证的实用技术中,主要的有数字签名技术、身份识别技术和信息的完整性校验技术(消息认证) (3)恶意软件:特洛依木马、登录陷阱(网络钓鱼,虚假页面)、逻辑(在程序中设置的破环代码) 后门陷阱(在程序中设置的绕开登录进入系统)、缓冲区溢出、僵尸网络:一对多进行控制 网络防病毒软件:允许用户设置3中扫描方式: 实时扫描、预置扫描、人工扫描 (4)网络安全
网络安全服务的主要内容:安全攻击、安全机制、安全服务 网络服务攻击分类: 服务攻击和非服务攻击
服务攻击:对服务器发起攻击,丧失服务能力,比如对WWW服务器攻击,主页被篡改。拒绝服务DoS或DdoS分布式拒绝服务。
非服务攻击:对通信设备攻击,使设备瘫痪
网络信息攻击: 攻击类型:截获、窃听、篡改和伪造等 14、操作系统安全
操作系统的安全措施一般可以从隔离、分层和内控3个方面来进行考虑。 隔离可分为:(注意后面的解释)
①物理隔离:使不同安全要求的进程使用不同物理实体。 ②时间隔离:使不同进程在不同时间运行。 ③逻辑隔离:程序存取。
④密码隔离:进程以其他进程不知的方式隐蔽数据和计算。 操作系统安全措施:访问控制、存储保护及文件保护与保密。
访问控制:认证、访问权限、文件保护、审计。存储保护:防止地址越界、防止操作越权。
第二章 数据结构算法
1、数据:数据的基本单位是数据元素。数据元素可由一个或多个数据项组成。数据项是数据的不可分割的最小单位
2、数据结构:数据的逻辑结构、数据的存储结构、数据的运算
3、主要的数据存储方式:顺序存储结构(逻辑和物理相邻,存储密度大)和链式存储结构
顺序存储结构:
顺序存储计算公式 Li=L0+(i-1)×K 顺序结构可以进行随机存取;插人、删除运算会引起相应节点的大量移动 链式存储结构:a、指针域可以有多个,可以指向空,比比顺序存储结构的存储密度小
b、逻辑上相邻的节点物理上不一定相邻。 c、插人、删除等不需要大量移动节点 4、顺序表:一般情况下,若长度为n的顺序表,在任何位置插入或删除的概率相等,元素移动的平均次数为n/2(插入)和(n-1)/2(删除)。
5、链表:线性链表(单链表和双向链表等等)和非线性链表
线性链表也称为单链表,其每个一节点中只包含一个指针域,双链表中,每个节点中设置有两个指针域。(注意结点的插入和删除操作) 6、栈:“后进先出”(LIFO)表。栈的应用:表达式求解、二叉树对称序周游、快速排序算法、递归过程的实现等 7、队列:“先进先出”线性表。应用:树的层次遍历 8、串:由零个或多个字符组成的有限序列。 9、数组的顺序存储:
10、稀疏矩阵的存储:下三角矩阵顺序存储
其他常见的存储方法还有三元组法和十字链表法
11、广义表:由零个或多个单元素或子表所组成的有限序列。广义表的元素可以是子表,而子表的元素还可以是子表
12、树型结构:非线性结构。常用的树型结构有树和二叉树。
二叉树与树的区别:二叉树不是树的特殊情况,树和二叉树之间最主要的区别是:二叉树的节点的子树要区分左子树和右子树,即使在节点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。 13、树(森林)与二叉树之间的转换(要会转换) 14、二叉树和树的周游(遍历)
二叉树的周游主要有以下3种方式:前序法(NLR)、对称序法(LNR)、后序法(LRN)
周游树和树林:深度优先和按广度优先两种方式进行。深度优先方式又可分为按先根次序和按后根次序周游 树与二叉树周游之间的对应关系:按先根次序周游树正好与按前序法周游树对应的二叉树等同,后根次序周游
树正好与按对称序法周游对应的二叉树等同 按广度优先方式就是层次次序周游 15、二叉树的存储和线索
二叉树的存储结构:二叉树的llink一rlink法存储表示
线索二叉树:在有n个节点的二叉树的且llink - rlink法存储表示中,必定有n+1个空指针域
16、哈夫曼树:一类带权路径长度最短的树。树的带权路径长度为树中所有叶子节点的带权路径长度之和WPL。 17、查找:
(1)顺序查找:平均查找长度为(n +1 )/2次,时间复杂度为O(n) (2)二分法查找:线性表节点必须按关键码值排序,且线性表是以顺序存储方式存储的。查找成功比较次数log2n,查找失败比较次数log2n+1
(3)分块查找:先是块间查找,然后块内查找。
(4)散列表(哈希表Hash)的存储和查找:处理冲突的方法:开地址法(线性探测法)、拉链法等 负载因子(装填因子)=表实际存储的结点个数/表的最大能存储结点个数(即表长)
二叉排序树:每个结点左子树的所有关键码值都小于该结点关键码值,右子树所有结点关键码值都大于该结点关键码值。对称周游二叉排序树,得到一个有序序列,时间复杂度O(log2n)
B树和B+树:M阶树,每个结点至多有M-1个关键码,至少有M/2(取上界)-1个关键码。B树适合随机查找,不适合顺序查找。B+树适合顺序查找。 18、排序
直接插人排序、希尔排序、直接选择排序、堆排序、起泡排序、快速排序等排序算法要了解。
直接选择排序、希尔排序、快速排序和堆排序是不稳定排序,其他排序为稳定排序
第三章 操作系统
1、操作系统概念:一是管理系统中的各种资源;二是给用户提供一个友好的界面。 2、操作系统包括以下3个基本特征:并发性、共享性、随机性。 3、功能:进程管理、存储管理、作业管理、文件管理、设备管理 4、操作系统类型
(1)批处理操作系统:成批、多道,交互性不强。系统目标:提高资源利用率、作业吞吐量和作业流程自动化。 (2)分时操作系统:多路、交互性、性、及时性 (3)实时系统(实时控制、实时信息处理):及时、可靠
(4)嵌入式操作系统:高可靠性、实时性、占资源少、智能化、易连接、低成本等。 5、操作系统与用户的接口:程序级接口:系统调用命令组成。操作级接口:提供操作命令 6、操作系统的硬件环境(CPU、存储体系、中断系统、I/O控制和时钟)
(1)CPU:CPU状态:管态(CPU执行操作系统程序)和目态(CPU执行用户程序) 目态到管态的转变的唯一途径是中断,通过修改程序状态字实现管态和目态的转换 (2)中断机制:
中断的实现需要硬件和软件结合完成。中断类型:强迫性中断和自愿性中断。
强迫性中断:不期望或不可预料的中断.如:输入输出中断、硬件故障中断、时钟中断、程序性中断。
自愿性中断:程序有意安排的访管指令或系统调用。
中断向量:中断处理程序的入口地址及运行环境(程序状态字PSW)
中断优先级由硬件规定,中断屏蔽由程序状态字的中断屏蔽位决定。通过中断屏蔽可以调整中断事件的
响应次序
(3)定时装置:定时装置硬件时钟通常分为两类:即绝对时钟和相对时钟。 CPU对外部设备的控制方式:
1、循环测试I/O 2、中断 3、DMA(直接内存存取):高速外设与内存批量处理数据 4、通道处理(I/O处理机)
7、进程管理
(1)进程与程序的区别与联系:a.进程是程序的执行,是动态的;而程序是指令的集合,是静态的。 b.进程有生命周期,即进程的存在是有限的,从运行到结束,是暂时的;而程序则是永久存在的。 c.进程包括程序、数据和进程控制块(PCB)。
d.一个程序可以有多个进程,一个进程也可以包含多个程序。 进程控制块PCB是一个数据结构,进程在内存中存在的唯一标志 (2)进程状态:运行态, 就绪态,等待状态(阻塞状态) (3)线程:CPU调度和分派的基本单位。共享进程资源。 (4)进程的通信
临界资源是指一次只允许一个进程使用的资源:一个进程中访问临界资源的那段程序代码称为临界区。它们不允许两个及以上的进程同时访问或修改。
进程同步:多个进程协同完成任务。进程互斥:多个进程使用同一资源(临界资源)。 低级通信:少量信息的交换(P操作和V操作)
高级通信:大信息交换(消息机制(消息缓冲、信箱通信)、共享内存,管道) 进程(线程)调度:先来先服务、时间片轮转、最高优先级(紧迫度高的进程)、 多级队列反馈算法:综合了FCFS、时间片轮转和可抢占最高优先数算法。 (5)死锁:
产生死锁的必要条件:互斥条件、不可剥夺条件、部分分配、循环等待 死锁的预防: 破环必要条件之一:静态预分配(破坏部分分配)、资源有序分配(破坏环路等待)、 可剥夺资源(破坏不可剥夺性)
死锁的避免:银行家算法
死锁的检测:进程等待时检测、定时检测、系统利用率降低时检测 死锁的解除:资源剥夺和撤销进程 8、存储管理
(1)功能:内存的分配和回收、内存共享、存储保护(防止地址越界和操作越权)、地址映射(地址重定位)
内存扩充:让外存当作内存来使用
(2)碎片管理:解决碎片的方法是移动技术或紧凑(拼接)技术
(3)静态地址重定位:程序装入内存时,进行逻辑地址转换物理地址转换
动态地址重地位:程序运行过程中,要访问指令和数据才进行地址转换,需要硬件地址映射机制(基址
寄存器和限长寄存器)
(4)空闲分区的分配策略:最先适应算法(地址从小到大找第一个满足进程空间大小的分区) 最佳适应算法:分区表按容量从小到排序;最坏适应算法:分区按容量从大到小排序。
(5)虚拟存储管理:虚拟存储得以实现是由程序的局部性原理来决定的。程序的局部性原理包括时间局部性和空间局部
(6)页面淘汰算法包括以下几种:最佳淘汰算法(OPT)、先进先出淘汰算法(FIFO)、最近最久末使用淘汰算法(LRU)
最近使用最少淘汰算法(LFU)(访问次数少)
(7)影响缺页中断次数因素:a、分配给进程的物理页面数 b.页面大小 c.程序本身的编制方法
c、页面淘汰算法:最佳淘汰算法(OPT)能使缺页中断率最低
(8)颠簸(抖动):缺页率高引起。工作集模型解决颠簸(抖动) 9、文件管理
(1)逻辑结构:流式文件(基本单位字符)(如:源程序文件、目标代码文件,Unix的文件)和记录文件(定长和不定长记录),记录包含一个记录键和其他属性
(2)文件的物理结构:连续结钩、链接结构、索引结构及Hash结构等,文件的存取方式与物理结构有关。 UNIX三级索引表的计算:如果一个物理块可以存放256个块号,则三级索引表表示文件的大小 2563+2562+256+10
(3)文件目录:文件系统的最大特点就是“按名”存取
(4)文件控制块FCB是文件在内存中存在的唯一标志,文件目录是文件控制块的有序集合。
(5)多级目录结构,有利于避免文件重名;当前目录:可以提高检索速度。目录项分解法,它可以提高文件检索速度
(6)记录的成组:若干个逻辑记录合成在一个物理块中,每个块中的逻辑记录个数为块因子。 10、设备管理
(1)按设备的工作特性可以分为存储设备和输人/输出设备两种 (2)按照资源分配方式可以分为独享设备、共享设备和虚拟设备3种
虚设备技术,一类设备模拟另一类设备的技术。在高速设备(如高速大容量磁盘)上模拟低速设备 :SPOOLING是典型的虚设备技术,被模拟的设备称为虚拟设备。
(3)按设备的数据组织分类:块设备(磁盘、磁带)和字符设备(打印机)。 (4)通道可以分为以下3种类型:字节多路通道、选择通道和成组多路通道。 (5)单缓冲区,双缓冲区,多缓冲区和缓冲池:解决外设与CPU速度不匹配问题 (6)磁盘调度: 访问磁盘时间:寻道时间、旋转定位时间和数据传输时间。
磁盘调度由移臂调度和旋转调度组成。移臂调度:先来先服务FCFS(大幅度移动)、最短寻道时间优先(饥饿,
考虑了寻道优化),扫描算法(考虑方向和距离,考虑了寻道优化) 旋转调度:目的较少旋转延迟时间。
第四章 数据库系统技术基础
1、信息与数据的关系:数据是信息的符号表示,或称载体;信息是数据的内涵,是数据的语释
2、数据库系统:一般由数据库、操作系统、数据库管理系统(及其工具)、应用系统、数据库管理人员和用户构成。 3、数据模型: 数据模型是数据库系统的数学形式框架,是数据库系统的核心和基础.
4、数据模型的分类:概念模型,也称信息模型;逻辑模型,主要包括网状模型、层次模型和关系模型等;物理模型 。
5、数据模型的三要素:数据结构、数据操作和完整性约束。
6、概念模型,信息世界建模,E-R模型是常用的概念模型。EER扩充E-R模型,面向对象模型、谓词模型。
E-R图提供了表示实体型、属性和联系的方法。 (1)实体型:用矩形表示,矩形框内写明实体名。
(2)属性:用椭圆形表示,并用无向边将其与相应的实体连接起来。
(3)联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型
7、逻辑模型,面向数据库管理系统。传统逻辑模型(层次、网状、关系)基于记录的模型。层次、网状模型用记录和链接表示数据和联系,关系模型用二维表表示数据,记录值表示表间联系。
面向对象的模型,对象-关系模型都属于逻辑模型,面向对象模型既是概念模型又是逻辑模型。 8、数据库系统的三级模式结构:由外模式、模式和内模式三级构成的。
9、模式(Schema):一个数据库只有一个模式;外模式也称子模式或用户模式,一个数据库可以有多个外模式。外模式是保证数据库安全性的一个有力措施。内模式也称存储模式或物理模式,一个数据库只有一个内模式。
10. 数据库的二层映像与数据性:外模式/模式映像,包含在各自的外模式描述中。外模式/模式映像保证了数据与程序的逻辑性(模式变,外模式不变);模式/内模式映像,包含在模式描述中,模式/内模式映像保证了数据与程序的物理性(物理模式变,模式不变,外模式不变)。
第五章 关系数据库系统
1、关系模型由关系数据结构、关系操作集合和关系完整性约束3部分组成。 2、关系模型中的关系操作的理论依据为关系代数和关系演算。 关系操作的特点是集合操作方式。
3、关系数据语言可以分为如下3类:关系代数语言、关系演算语言(包括元组关系演算语言和域关系演算语言)及具有关系代数和关系演算双重特点的SQL语言。
4、关系模型中有3类完整性约束:实体完整性、参照完整性(引用完整性)和域完整性约束(用户自定义的完整性)
5、关系数据库对关系的限定
当关系作为关系数据模型的数据结构时,关系数据库对关系有如下的。 (1)列是同质的.即每一列中的分量是同一类型的数据,来自同一个域。
(2)不同的列可以出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。 (3)列的顺序无关紧要,即列的次序可以任意交换。 (4)任意两个元组不能完全相同。
(5)行的顺序无关紧要,即行的次序可以任意交换。
(6)每一个属性是不可分解的这是关系数据库对关系的最基本的一条限定。分量必须取原子值,即每一个分量都必须是不可拆分的数据项。
6、关系模型的完整性约束:实体完整性关系的所有主属性都不能取空值,而不仅是主码整体不能取空值 参照完整性规则:外键要么取空值,要么等于被参照关系中某个元组的主码值。 7、域完整性约束(用户有定义的完整性):对其他属性值域的约束,也称为域完整性规则,包括数据类型、精度、取值范围、是否允许空值等。
8、关系代数(了解操作的执行结果)
并、差、笛卡儿积、投影和选择为五种基本运算。
9、传统的集合运算包括并、交、差和广义笛卡儿积4种运算。
10、专门的关系运算包括:对单个关系进行垂直分解(投影操作)或水平分解(选择操作)和对多个关系进行结合(连接操作)等。 11、广义投影
赋值、外连接(左外连接、右外连接)、半连接,聚集:G表示,外部并
第六章 关系数据库标准语言SQL
1、SQL(Structured Query Language)称为结构化查询语言,SQL已经成为关系数据库领域中的一种主流语言,1987年被国际标准化组织(ISO)采纳为国际标准 1992年公布了SQL92(SQL2),1999年公布了SQL93(SQL3,对象-关系SQL),2003年公布SQL2003(SQL4) 2、SQL 特点:SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体 综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供两种使用方式(自含式和嵌入式SQL)、语言简洁,易学易用。
3、SQL数据库体系结构:外模式对应于视图和部分基本表、模式对应于基本表,内模式对应于存储文件 基本表是本身存在的表,一个关系就是一个基本表(存放实际数据),行对应元组,列对应属性;一个基本表可以跨一个或多个存储文件存放,一个存储文件可以存放多个基本表;所有基本表的集合构成了模式;基本表是模式和外模式的一部分。
一个SQL表可以是一个基本表,也可以是一个视图。视图是一个或几个基本表导出的表,数据库中存放视图的定义,视图的数据仍然在基本表中。视图是一个虚表,是外模式的一部分。
一个SQL表可以有若干索引,索引放在存储文件中。存储文件的逻辑结构组成了SQL数据库的内模式。物理结构由操作系统管理,对用户透明。
SQL用户可以是一个应用程序,可以一个SQL用户。
4、SQL的数据类型:预定义数据类型、构造数据类型、用户定义数据类型
5、基本的SQL定义语句:关系数据库的基本对象是模式、表、视图、索引和域 基本对象 模式 基本表 视图 索引 域 创建 CREATE SCHEMA CREATE TABLE CREATE VIEW CREATE INDEX CREATE DOMAIN 删除 DROP SCHEMA DROP TABLE DROP TABLE DROP INDEX DROP DOMAIN 修改 ALTER TABLE 6、基本操作语句 (1)模式的定义与删除 Create Schema <模式名> AUTHORIZATION <用户名>
Drop Schema <模式名>|CASCADE|RESTRICT
(2)基本表的操作:创建:CREATE TABLE[模式名.]<表名>(<列名><数据类型>(列级完整性约束〕
[,<列名><数据类型>[列级完整性约束]„ 〔,<表级完整性约束>〕);
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件 CREATE TABLE S_SC_C.SC
(S# CHAR(8),C# CHAR(8),GRADE INT NOT NULL,
PRIMARY KEY (S#,C#),FOREIGN KEY(S#) REFERENCES STU(S#) );
PRIMARY KEY (S#,C#),FOREIGN KEY(S#) REFERENCES STU(S#)为表完整性约束 修改:ALTER TABLE<表名>
「ADD<新列名><数据类型>[完整性约束〕〕 [DROP <列名>][<完整性约束名>]〕 [MODIFY<列名><数据类型>」;
删除:当某个基本表不再需要时,可以用DROP TABLE语句进行删除,其格式为: DROP TABLE<表名>
基本表一旦被删除,表中的数据、此表上建立的索引和视图都将自动被删除。因此执行删除基本表的操作时一定要格外小心。DROP TABLE <表名> RESTRICT 视图等关联对象没有事先删除则不能执行删除操作 (3)索引操作
建立索引是加快查询速度的有效手段,提供多种存取路径 UNIQUE 唯一索引,建立的索引其值必须唯一
CLUSTER聚簇索引,表示索引值的顺序与表中记录的物理顺序一致,适合在经常查询的列上建立,不适合在经常更新的列上建立
CREATE [UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>〕[,<列名>[<次序>」„」); <次序>指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认值为ASC 如:CREATE UNIQUE INDEX SCno ON SC( Sno ASC,Cno DESC);
删除索引:DROP INDEX<索引名>;删除索引时,系统会同时从数据字典中删去有关该索引的描述 4、SQL的数据操纵语句
SQL语言的数据操纵包括INSERT(插人)、DELETE(删除)、UPDATE(更新)和SELETE(检索,又称查询)4个语句 SELECT语句是数据操作的核心。
(1)数据查询 SELECT[ALLI DISTINCT]<目标列表达式>〔,<目标列表达式>]„ FROM<基本表或视图>[,<基本表或视图>]„ [WHERE<条件表达式>]
[GROUP BY<列名l>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC 1 DESC]];
a.简单查询
简单查询涉及数据库中的一个表,包括以下几种: (1)查询表中的若干列。 (2)查询经过计算的值。
(3)消除取值重复的行。DISTINCT (4)查询满足条件的元组。WHERE (5)利用LIKE的查询。_、%
(6)涉及空值NULL的查询。IS NULL 、IS NOT NULL (7)对查询结果排序。ORDER BY ASC/DESC
(8)使用集函数。Count 、SUM、AVG、MAX、MIN (9)对查询结果分组。Group by having b. 连接查询
外连接的三种类型:左外连接、右外连接、全外连接
左外连接(LEFT OUTER JOIN):结果表中保留连接条件左边关系中的所有元组 右外连接(RIGHT OUTER JOIN): 结果表中保留连接条件右边关系中的所有元组 全外连接(FULL OUTER JOIN): 结果表中保留连接条件左右两边关系中的所有元组 某些系统中用+= 表示左外连接、=+表示右外连接、+=+表示全外连接 c.嵌套查询 (I)由谓词IN引导的子查询:IN是最常用的谓词。 (2)谓词是比较运算符的子查询。
(3)由[NOT]EXISITS谓词引导的子查询。 d.集合查询。
UNION(并)、INTERSECT(交)、EXCEPT(差) 5、SQL的修改语句
(1)插入操作(insert)insert into 表名(字段名,„) values(常量,„) insert into 表名(字段名,„) select … from
(2)删除操作(delete)delete from 表名 [where F] 删除表中的数据,表的结构还存在数据字典中 (3)更新操作(update)update 表名 set 列名=表达式,列名=表达式 where F 6、视图
(1)创建视图CREATE VIEW<视图名>〔(<列名>〔,<列名>„〕
AS<子查询>
〔 WITH CHECK OPTION〕:
其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插人或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
(2)几种特殊的视图:行列子集视图、表达式视图、分组视图、连接视图
(3)查询视图:将对视图的查询转换为对基本表的查询的过程称为视图的消解(View Resolution)。
视图物化(View Materialization):是指在视图第一次被查询的时候物理地建立一个临时的视图表(实表),但必须保证更新基本表时自动更新视图表,保持物化视图的最新性。 (4)修改视图
为防止用户通过视图对数据进行增、删、改操作时,无意或有意操作不属于视图范围内的基本表数据可在定义视图时加上WITH CHECK OPTION子句,这样在视图上增、删、改数据时,DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝执行该操作。
改视图包括插入(INSERT)、删除(DELETE)和更新(UPDATE) 3类操作。行列子集视图可以修改,带表达式视图、连接视图和分组视图不能修改。 (5)视图的作用
(1)能够简化用户的操作。
(2)使用户能以多种角度看待同一数据。
(3)对重构数据库提供了一定程度的逻辑性。
(4)能够对机密数据提供安全保护。
7、数据控制语句和嵌入式SQL
(1)GRANT语句和REVOKE语句实现权限授予和权限回收
GRANT 权限 ON 对象名 to 用户 [with grant option]; with grant option 获得权限的用户允许授予其他用户 (2) REVOKE<权限>[,<权限>]„ [ON<对象类型><对象名>] FROM<用户>[,<用户>]„; (3) SQL语言分为语言和嵌入式语言 SQL语言嵌入主语言解决的3个问题:
SQL语言与主语言的区分:EXEC SQL DBMS可采用两种方法处理嵌入式SQL,一种是预编译,另一种是修改和扩充主语言 (4)动态SQL:程序在执行过程中动态生成SQL语句。动态SQL的两种执行方式:1、立即执行;2、先准备后执行 第七章 关系数据库的规范化理论与数据库设计 1、“不好”的关系模式有以下4个问题: a、数据冗余 b、更新异常 c、插入异常 d、删除异常 2、函数依赖 数据依赖中重要的是函数依赖和多值依赖 (1)函数依赖定义:设R(U)是属性集U上的一个关系模式,X和Y均为U的子集。若对于R(U)的任一个可能的关系r,r中不可能有两个元组在X中的属性值相等,而在Y中的属性值不等,那么称X函数决定Y X->Y,或Y函数依赖于X, X为决定因素(函数中的一一映射关系) (2)函数依赖包括非平凡的函数依赖、平凡的函数依赖、完全函数依赖、部分函数依赖及传递函数依赖 非平凡函数依赖: 如果 X→Y,但 Y X, 则称 X→Y 是平凡的函数依赖 完全函数依赖: 在关系模式 R(U)中,如果X→Y,并且对于 X 的任何一个真子集X’,都有 X’ Y, 则称 Y 完全函数依赖于 X,记作: 部分函数依赖: 若X→Y,但Y不完全函数依赖于X,则称 Y 部分函数依赖于X,记作: 平凡函数依赖: 传递函数依赖: 在关系模式R(U)中,如果X→Y(Y X),Y→X ,Y→Z,则称 Z 传递函数依赖于X。 (3) 函数依赖的逻辑蕴含 设R<U, F>是一个关系模式,X可以由F推导出Y,则称F逻辑蕴含X→Y (4)码:设 K 为关系模式 R中的属性或属性组合。若 ,并且不存在K的真子集决定U,则 K 称为 R 的一个侯选码(Candidate Key)。若关系模式 R 有多个候选码,则选定其中的一个做为主码(Primary key)。 主属性与非主属性 全码(ALL KEY):主码为关系模式所有属性 如何找候选码:a.找出F集合的所有仅出现在左边的属性和左右两边都没出现的属性,组合为U1,U1必包含在候选码中;b.如果U1->U,则U1为一个候选码,否则然后增加其他属性到U1中组成属性组K,使K->U,则K为候选码,再找出其他候选码 (5)函数依赖的公理系统 a.自反律:若Y X U,则X-> Y为F所逻辑蕴含。 b.增广律:若X->Y为F所逻辑蕴含,且Z U,则XZ->YZ为F所逻辑蕴含。 c.传递律:若X- >Y及Y->Z为F所逻辑蕴含,则X->Z为F所逻辑蕴含。 推论 合并规则:X->Y,X->Z,则X->YZ 伪传递规则:X->Y,WY->Z,则XW->Z 分解规则:X->Y及ZY,则X->Z 3、1NF、2NF,3NF,BCNF (1)1NF:1NF的模式是关系数据库的最基本要求 如果关系模式R的所有属性都是不可再分解的,则称R属于第一范式,简称1NF,记做R∈1NF。 (2) 2NF:若R∈ INF,且每一个非主属性完全函数依赖于码,则R∈2NF (3) 3NF: 关系模式R∈2NF,且每个非主属性都不传递依赖于码,则R∈3NF (4) BCNF: 若关系模式R∈1NF,且对于每个非平凡的函数依赖X-> Y都有X包含码,则R ∈BCNF。在函数依赖的范围内,BCNF达到了最高的规范化程度。 4、多值依赖和4NF (1)多值依赖:设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y,多值依赖 X→→Y成立当且仅当对R的任一关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。 平凡多值依赖和非平凡的多值依赖 若X→→Y,而Z=φ,则称 X→→Y为平凡的多值依赖, 否则称X→→Y为非平凡的多值依赖 特性:a.多值依赖具有对称性 若X→→Y,则X→→Z,其中Z=U-X-Y b.函数依赖是多值依赖的特殊情况。若X→Y,则X→→Y。 c. 若函数依赖X→Y在R(U)上成立,则对于任何Y' Y均有X→Y' 成立 多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y' Y有X→→Y' 成立 d. 多值依赖的有效性与属性集的范围有关. 若X→→Y在U上成立,则在W(X YW U)上一定成立;反之则不然,即X→→Y在W(W U)上成立,在U上并不一定成立. (2)4NF关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y X),X都含有候选码,则R∈4NF。 根据定义:不允许有非平凡且非函数依赖的多值依赖,X包含码,即X->Y,实际就是函数依赖 如果R ∈ 4NF, 则R ∈ BCNF 5、关系模式分解 常用的等价标准有要求分解具有无损连接性的和分解是保持函数依赖的两种。 关于模式分解的几个事实 (1)分解具有无损连接性和分解保持函数依赖是两个互相的标准。 (2)若要求分解具有无损连接性,那么模式分解一定可以达到BCNF。 (3)若要求分解保持函数依赖,那么模式分解可以达到3NF,但不一定能达到BCNF。 (4)若要求分解既具有无损连接性,又保持函数数依赖,则模式分解可以达到3NF,但不一定能达到BCNF 6、数据库的分析与设计 (1)数据库设计的6个阶段:需求阶段、概念结构阶段、逻辑结构设计、物理结构设计、数据库实施、运行维护 (2)设计概念结构通常有4类方法:自顶向下、自底向上、由里向外和混合策略。 E-R模型为工具来描述概念结构。最常用的设计策略是自底向上设计策略 E-R方法的步骤 a.设计局部E-R图 b.设计全局E-R图 解决属性冲突、结构冲突、命名冲突 c.全局E-R图的优化 (3) 逻辑结构设计 E-R模型向关系模型转换: a.实体转换为关系,属性转换为关系的属性,实体码转换为关系的码 b.1:1的联系,可以转换为一个关系,也可以与联系的任意一端实体关系模式合并 c.1:n的联系可以转换为一个关系(属性为1端和n端实体的码和联系本身属性)(码为n端实体码),也可以与联系的n端实体关系模式合并(加入1端实体码) d.m:n联系转换为一个关系模式(码为各实体码组合) e.3个或3个以上的多元联系转换为一个关系模式,模式的码由联系的实体码组成。 7、物理结构设计 (1)存储记录的格式设计:记录的垂直分割法、记录的水平分割法。 (2)存储方法设计:顺序存放、散列存放和聚簇存放。 (3)存取方法设计:索引是一种非常重要的存取路径(建立在经常查询和连接的属性组上) 8、规范化理论是数据库设计的理论基础,可以应用到数据库设计的不同阶段。 第8章 数据库系统实现技术 1、数据库管理系统概述 (1)DBMS的基本功能:a. 数据库定义功能(DDL):外模式、模式、内模式、完整性、安全保密、索引、视图定 义,定义存储在数据字典(系统目录),是DBMS运行的基本依据。 b. 数据操纵功能(DML):检索、插入、更新和删除操作。 c.数据存储和管理: d.事务管理:并发和故障恢复。 e. 通信功能和数据转换功能等 (2)DBMS的程序模块:数据定义模块、数据操纵模块、数据库运行管理模块、数据库组织、存储和管理模块、 数据库建立、维护和其他方面模块。 (3)DBMS的层次结构:最上层是应用层位于DBMS核心之外。 (2)第二层是语言翻译处理层它处理的对象是数据库语言 SQL, (3)第三层是数据存取层:该层处理的对象是单个元组。 (4)第四层是数据存储层。该层处理的对象是数据页和系统缓冲区。 (5)操作系统是DBMS的基础。提供的存取原语和基本的存取方法通常作为与DBMS存储层的接口。它处理的对象是数据文件的物理块。 2、数据库管理系统的主要成分: 三个主要成分:存储管理器(负责外存和内存缓冲区管理)、查询处理器(DDL编译、安全定义和查询、完整定义和控制、查询编译优化和执行)、事务管理器(ACID特性,事务管理、并发控制、日志管理和故障恢复) 存储管理器重要模块:存储管理、缓冲区管理、索引/文件/记录管理器 查询处理器重要模块:DDL编译器、查询编译器、执行引擎 事务管理器重要模块:事务管理、日志和恢复、并发控制。 缓冲区和锁表是DBMS管理的重要内存结构。 (1)存储管理器:负责管理的数据包括:目标数据、元数据、索引和日志等。 a.物理存储介质层次:高速缓冲存储器、主存储器、第二级存储器、第三级存储器,依次访问速度降低,价格也降低。 其中高速缓冲存储器、主存储器为基本存储(易失性存储),第二级存储器(例如磁盘)称为辅助存储器或联机存储器,第三级存储器(如磁带、光盘机)也叫脱机存储器。第二级和第三级存储器为外存。 磁盘块为磁盘空间分配的基本单位,也是磁盘与主存传输数据的逻辑单元。 b. 数据组织: 一个数据库映为多个不同文件, 为了将不同大小记录组织在同一个磁盘块中,常采用分槽的页结构,即块开始有块头(包括块中记录个数、块中空闲空间尾指针、记录的位置和大小的数组)、中间为空闲区、尾部为分配的记录。 C. 缓冲区管理:缓冲区替换策略(最近最少使用LRU,先进先出FIFO、时钟算法、系统控制法等. d.数据字典:存储关于数据库的描述信息。必须存储的目录信息包括:关系基本信息、用户信息、索引信息和统计信息。 e. 索引结构:支持对所要求的数据进行快速定位的附加数据结构称为索引。 一个文件可以有多个索引,一个索引包括一个属性和多个属性(查找码或搜索码),以及对应记录的位置。 顺序索引:查找码按顺序存储如B+树索引,在顺序索引中,如果对应的记录也按查找码排列,则称为聚集索引(主索引)。 对单个关系中元组的查询可分为点查询和范围查询: 点查询:查询特定属性上指定值的元组,一般为查询结果为单个记录 比如 select * from student from s#=’001’ 范围查询:查询给定属性值在指定范围的所有元组,一般查询结果为多个记录 select * from student from s# between ‘001’ and ‘009’ 顺序索引支持点查询和范围查询,散列索引支持点查询,不支持范围查询(注意) (2) 查询处理: 查询处理器最主要的模块查询编译器和查询执行引擎. a.查询处理过程:分析查询语句语法(生成语法分析树,翻译为关系表达式,形成初始查询计划)、选择逻辑查询计划(生成逻辑查询计划树或扩展的关系代数表达式)、选择物理查询计划(生成物理查询计划树)、查询执行。 逻辑查询选择:初始查个询计划转化为一个预期执行执行时间较小的等价计划过程。 b.选择逻辑查询计划和选择物理查询计划的步骤通称为查询优化。 物理查询计划选择常采用基于代价的查询计划选择方法(根据选定的逻辑查询计划派生多个不同物理查询计划,并选择代价最小或接近最小的物理查询计划)。 关系代数表达式等价:选择运算对并、交、差具有分配律: σP(E1 ∪ E2)=σP(E1)∪ σP(E2) σP(E1 ∩ E2)=σP(E1)∩ σP(E2) σP(E1 - E2)=σP(E1)- σP(E2) 投影对并运算分配律:∏L(E1 ∪ E2)=∏L(E1) ∪ ∏L(E2) c.查询执行:查询执行的最基本动作是关系运算的执行。选择运算的两种实现方式:全表扫描(依次访问表中的每一块),索引扫描。 (3)事务管理 a.事务的概念:数据库的一些操作的集合通常是一个单元,这种具有性的逻辑单元即是事务 b.事务的特性: 1)原子性(Atomicity )。事务的所有操作在数据库中是不可分割的,或全部反映出来或全部不反映。 2)一致性( Consistency)。事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态。即数据库中只包含成功事务提交的结果。 3)隔离性(Isolation)。事务的执行不能被其他事务所干扰,一个事务内部的操作及使用的数据对其他并发事务是隔离的,互不影响。 4)持久性(Durability)。事务一旦提交并执行后,它对数据库中数据的改变是永久的。 事务特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(durability)。 原子性、持久性:事务管理器中故障恢复机制责任。一致性:应用程序员的责任。隔离性:事务管理器中并发控制部件责任。 (4)事务的并发控制 a.事务的并发执行 并发执行时可能会破坏数据库的一致性,主要问题包括以下三方面: 1)丢失更新。 2)对未提交更新的依赖。(读脏数据) 3)不一致的分析。(不可重复读) b.并发事务的调度 如果多个事务在某个调度下的执行结果与这些事务在某个串行调度下的执行结果相同,则称这个调度为可串行化的调度。若用等价的概念来表示就是指某个调度等价于一个串行调度。 可串行化是多个事务并发执行的正确性准则。 事务的可恢复调度:对于每对事务Ti和Tj,如果Tj读取了Ti所写的数据,则Ti先于Tj提交。 级联回滚:一个事务导致依赖它的一系列事务回滚的现象。 无级联回滚(调度):由于级联回滚导致大量工作撤销,所以对调度加以,避免级联回滚发生,这样的调度为无级联调度。 可串行化且无级联(可恢复)调度保证数据库一致性,是我们所需要的。 (5).封锁 在事务的并发执行过程中为保证数据库的一致性,常采用封锁的方法来其他事务对该事务数据项的访问。对数据项加锁的方式主要有两种。 1)共享锁。如果事务T获得了数据项Q上的共享型锁(记为S),则Ti可读Q但不能写e。 2)排他锁。如果事务Ti获得了数据项Q上的排他型锁(记为X),则T既可读Q又可写Q。 注意:加了共享锁的数据项可以再加共享锁,不能加排他锁。 加了排他锁的数据项不能再加共享锁和排他锁。 简言之:共享锁与共享锁相容,与排他锁不相容 排他锁与任何锁不相容。 两阶段封锁协议保证可串行性,它要求每个事务分两个阶段提出加锁和解锁申请。可保证可串行化。 1)增长阶段。事务可以获得锁,但不能释放锁。 2)缩减阶段。事务可以释放锁,但不能获得新锁。 两阶段封锁增强协议:严格两阶段封锁协议和强两阶段封锁协议 严格两阶段封锁协议:在遵循两阶段封锁协议下,要求事务的排他锁在事务提交后才能释放。 强两阶段封锁协议:在遵循两阶段封锁协议下,要求事务的所有锁在事务提交前不能释放。 两阶段封锁协议不能保证死锁发生。 (6)故障恢复 a.故障的类型 1)事务故障可分为逻辑错误和系统错误,它们都可能造成事务执行失败。事务没有达到预期的终点。 2)系统故障:硬件故障或者是数据库软件或操作系统的错误,致使系统停止运行。主存储器内容丢失,而外存储器完好无损。 3)磁盘故障。数据传送操作过程中由于磁头损坏或故障而造成的数据内容丢失。 b.基于日志的恢复 日志包括事务开始日志记录、更新日志记录、事务提交日志记录和事务终止日志记录。 登记日志记录原则:先写日志原则 发生事务故障后,事务故障恢复的步骤如下: (1)反向扫描日志,查找该事务的更新记录C (2)对事务的更新操作执行逆操作,将日志记录中的“改前值”写人数据库。 (3)反复进行直到恢复到该事务的开始日志,则事务故障恢复结束。 对于系统的故障恢复步骤如下: (1)正向扫描日志文件,将在故障发生前提交的事务的标识记入REDO队列;将故障发生时尚未完成的事务的标识记人UNDO队列。 (2)对UNDO队列中的事务进行反向扫描,执行逆操作。 (3)对REDO队列中的事务进行正向扫描,重新执行日志记录登记操作。 介质故障恢复:系统备份后,装入后备副本和日志副本,由系统恢复。 第9章 主流关系数据库管理系统、工具及新技术 第一部分 主流关系数据库管理系统 1、主要的关系数据库产品:前流行的数据库管理系统绝大多数是关系型数据库管理系统,一般可分为如下3类: (1)以PC机、微型机系统为运行环境的数据库管理系统。 (2)以Oracle为代表的数据库管理系统,这类系统还有IBM DB2,Sybase,Microsoft SQI. Server等,也被称为主流数据库管理系统。 2、新应用需求对关系DBMS的挑战: 高可靠和高安全,多媒体、大容量、复杂数据应用,可伸缩协同服务,高性能管理大系统能力,支持互联能力,联机事务处理和决策、联机分析处理能力。 3、关系DBMS发展趋势:智能化、集成化,支持互联网应用,产品系列化,支持扩展关系,保证安全性。 4、SQL Server 2000 体系结构:支持客户机/服务器体系结构 (1)三部分组成:客户机端组件、服务器端组件和通信服务组件。 (2)客户机端组件:企业管理器、查询分析器、数据传输服务DTS、客户端网络实用工具、联机丛书。 (3)服务端组件:SQL服务器服务、SQL服务器代理、分布式事务协调服务、服务器网络使用工具 通信组件: (4)、SQL Server2000功能特点:1)充分的Web支持 2)高度可伸缩和可靠性 3)完善的数据库功能 4)数据仓库功能 5)易于使用和管理 6)网络无关性 (5)、SQL数据库组成:系统数据库(Master(基本配置信息)、Model(用户数据库模版)、Tempdb(临时表)、Msdb(调度和历史作业)和用户数据库。 (6)SQL Server2000中常用数据库对象:表、数据类型、约束、规则、视图、索引、默认值、触发器、存储过程和用户自定义函数。 SQL Server 2000多版本支持 SQL Server 2000提供了各种不同的版本,包括SQL Server 2000企业版、SQL Server 2000标准版、SQLServer 2000个人版、SQL Server 2000开发人员版,SQL Server 2000企业评估版,SQL Server 2000桌面引擎和SQL Server 2000 Windows CE版。 (7)从Internet访问SQL Server2000数据库:1)Windows2000和IIS作为Internet平台 2)用ISAPI(Internet Server API函数调用集)访问SQL Server 3)ASP(Active Server Pages服务端脚本)访问SQL Server 4)XML(可扩展标记语言,交换数据和文件的标准)访问SQL Server 5、Oracle数据库系统 (1)目前比较新的版本为 Oracle 11g,Oracle最初被设计为关系数据库管理系统,自版本8起,Oracle定位成一个对象-关系数据库管理系统。 (2)Oracle体系结构 Oracle服务器由Oracle数据库(Oracle Database)和Oracle实例(Oracle Instantce)组成。Oracle数据库是存储数据的集合,包括日志文件和控制文件。Oracle实例包括系统进程和该数据库的所有用户进程。 (3)Oracle数据库结构 Oracle数据库的逻辑结构由数据库定义构成,涉及模式对象和多个表空间。 Oracle的表空间、段和盘区用于描述Oracle物理存储结构的术语。 1)数据库、表空间和数据文件的关系 表空间是逻辑存储单元,有如下特性: 每个Oracle数据库由被分成一个或多个表空间,分为一个SYSTEM表空间和至少一个用户表空间。 每个表空间包括一个或多个数据文件,是一对多的关系。 一个Oracle数据库总存储容量是该数据库所有表空间的存储容量之和。 Oracle数据库的物理存储按数据块、盘区和段来组织。Oracle使用以下四种类型段:数据段、索引段、临时段和回滚段。 (5)Oracle实例 Oracle实例:由系统全局区(SGA)、用户进程和Oracle进程(分为服务器进程和后台进程)组成。 (6) Oracle数据库服务器包括标准服务器和许多可选的服务器选件。标准服务器主要具有下列特色:多进程多线索的体系结构、高性能核心技术、高可用性和SQL的实现。 (7)Oracle的系统开发工具及其功能: 1)Developer/2000:包括Oracle Forms(快速基于屏幕的应用), Oracle Reports(快速生成报表),Oracle Graphics(快速生成图形)和Oracle Books(生成联机文档) 2)Designer/2000:CASE工具,BPR、Modellers、Generators等组成。 3)Discoverer/2000:OLAP工具,主要用于支持数据仓库应用。 4)Oracle Office和InterOffice,办公自动化。 (8)Oracle的连接产品及功能:SQL*NET和NET8,客户机与服务器的网络通信产品。Oracle网关、Oracle数据装载器。 (9)Oracle数据仓库解决方案:服务端Oracle Express Server和客户端Oracle Express Objects和Oracle Express Analyzer等 (10)Oracle的Internet解决方案:产品Oracle WebServer,由Oracle WebListener、Oracle WebAgent和Oracle 服务 器三部分组成。 (11)Oracle的对象-关系特性(新增加的内容) Oracle的核心是关系型数据库,面向对象功能通过对关系功能扩充实现 引入抽象数据类型、对象视图、可变数组(表示多值属性)、嵌套表和大对象(BLOB(二进制大对象)、CLOB(字符型大对象)、BFILE(存储在数据库外的只读二进制数据文件,数据库中只存储它的目录名)和NCLOB(固定宽度多字节CLOB)及它们的复合使用来实现对象-关系型数据库。(新增内容) (12)SQL Server和Oracle的安全性共性 1)权限和授权 Oracle权限分为数据库系统权限和数据库对象权限,SQL Server权限分为服务器权限和数据库权限,服务器权限只能授予DBA,数据库权限分为数据库语句权限和数据库对象权限。数据库语句权限对应Oracle数据库系统权限,数据库对象权限对应Oracle数据库对象权限。 2)、角色(数据库系统角色和用户定义角色)3、用户标识和身份认证(系统登录、数据库连接和数据库对象访问):MS SQL Server两种验证模式:Windows模式和混合模式。 4)、自主访问控制(用访问控制矩阵模型实现) 5)、审计(固定和选择两种方式,Oracle的三种审计类型:登录审计、操作审计和对象审计) 6)、视图、存储过程和触发器 第二部分 新一代数据库系统工具 1、数据库系统工具分类:数据库管理工具(加载工具、备份工具、文件重组工具和性能监控工具等)和数据库系统设计和开发工具(CASE工具、应用开发工具、通讯接口)。 4GL语言具有“面向问题”,“非过程化程度高”等特点,如PowerBuilder、Delphi、Visual Basic等。 浏览器/服务器开发面向Internet应用系统,主要工具有:ASP,JSP,PHP等。Web Service解决异构平台互操作。 2、新一代数据库系统工具的特征:支持与多种数据库连接、支持于特定的DBMS开发、支持可视化图形用户 界面、支持面向对象的程序设计、拥有完善的数据对象、支持开放性、功能完备和集成化。 3、应用开发工其的发展趋势:采用3层客户/服务器结构、支持Web应用、开放的、构件式的分布式计算环境。 4、当前开发工具存在的问题: (1)开发过程过于复杂,涉及过多低层技术实现。 (2)难于满足要求稳定的大规模的企业级业务处理。 (3)难于快速适应低层技术的更新和业务逻辑变化。 5、基于浏览器/服务器结构软件开发模式 (1)信息系统的层次结构划分:分为表现层(界面)、应用逻辑层(应用处理逻辑)、数据逻辑层(数据存取),关键是应用逻辑层。 (2)浏览器/服务器模式可归纳为三种结构:以Web服务器为中心、以应用服务器为中心(主流软件结构)、以数据库服务器为中心。 Web服务器为中心的结构是早期Web数据库应用开发最主要方式。应用逻辑在Web服务器扩展程序中(CGI,Web API接口),CGI公共网关接口,进程在服务器运行,Web API动态加载到服务器进程执行,效率高 与传统客户机/服务器比较,有如下缺点:1)、用户界面受HTML语言 2)、Web服务器负载过重 3)、HTTP协议效率低。 以应用服务器为中心的软件结构把web技术与三层客户机/服务器有机结合,是目前信息系统采用的主流软件结构。 该软件结构可分为四部分:客户机、Web服务器、应用服务器、数据库服务器 6、CASE工具 (1) PowerDesigner的6个模块介绍如下: I)PowerDesigner ProcessAnalyst。用于数据分析或数据发现,(产生数据字典、数据流程图等) 2)PowerDesigner DataArchitect。概念层和物理层数据库设计和数据库构造。可生成多种数据库管理系统的数据库。 3)PowerDesigner AppModeler。物理建模和应用对象和敏感组件生成。 4)PowerDesigner MetaWorks。通过模型共享支持高级团队开发。 5)PowerDesigner WarehouseArchitect。数据仓库和数据集市的建模和实现 6)PowerDesigner Viewer。只读、图形化方式访问整个企业模型信息 (2) Delphi支持数据库开发四种技术:BDE、ADO、dbExpress、InterBase技术。 (3) PowerBuilder: PowerBuilder10.0提供对J2EE和Microsoft .NET环境支持, 具有数据窗口(Data Window)”对象专利。为使用.NET开发工具的用户提供了一套DataWindow.NET,为简化应用开发设计,缩短了开发时间,降低对复杂数据处理及对SQL知识的要求。 (4)Microsoft .NET 开发工具:版本:Visual studio .NET 2003(支持. NET 1.1)、Visual studio .NET 2005(支持.NET2.0)、Visual studio .NET 2008(支持.NET3.5) .NET的通用语言框架机制:CLR(Common Language Runtime):在同一项目中支持不同语言开发的组件。 Visual studio .NET 2008新增功能: 1、多定向技术:同一项目绑定多个.NET Framework版本 Visual studio .NET 2008是第一个允许开发人员针对多个.NET Framework版本开发的Visual Studio版本 2、HTML/CSS编辑器 实现Dreamwaver网页编辑功能 3、AJAX和Javascript支持 4、ADO.NET改进(LINQ用来进行数据访问的编程模型。提供对象到关系的映射) 5、Silverlight和XAML(跨平台、跨浏览器的.NET插件,建造丰富的媒体体验和RIA应用)。 6、拼写检查器:加入FXCop拼写检查器 7、数据库发布向导 第三部分 数据库技术的发展 1、数据库技术的发展阶段 (1)第一代数据库系统是指层次模型数据库系统(基于树形结构)和网状模型数据库系统(基于有向图结构) (2)第二代数据库系统指支持关系模型的关系数据库系统(最先由E.F.Codd提出关系模型)。 (3) 面向对象的技术与数据库技术相结合便产生了第三代数据库系统。 2、数据库系统体系结构 (1)集中式数据库系统:数据库的全部功能在一台计算机上运行,不与其他计算机交互。 (2)并行数据库系统:并行操作时,许多操作是同时执行的,通过并行地使用多个CPU来提高处理速度。 所有的处理器共享一个公共的主存储器。并行机器的体系结构模式主要有: 1)共享内存。2)共享磁盘。3)无共享。4)层次模式。它是前几种体系结构的混合。 并行数据库物理存储结构常用的划分技术有轮转法、散列分布和范围分布。 (3)分布式数据库系统 一个分布式数据库系统是一个节点的集合,其中每一个节点是一个的数据库系统节点。 1)特点:每一个节点是一个的数据库系统节点 分布式数据库系统必须看起来像非分布式系统 分布式数据库系统的用户的操作与非分布式系统完全相同 分布式系统的所有问题是内部的、实现级别的问题,而不是外部的、用户级别的问题 2)分布式数据库系统数据管理技术: 分布式数据库系统的分片是全局的,分配是局部的,分片、分配和副本信息保存在全局目录中 3)分布式查询:可以基于半连接的操作 4)分布式系统的并发控制和恢复解决的问题:多个副本的一致性,分布式提交、分布式死锁。分布式系统具有位置透明性、复制透明性和分片透明性 3、客户机/服务器数据库系统体系结构 客户与服务器之间相连要满足一系列的标准(ODBC开放数据库互连标准和面向JAVA的标准JDBC)。 面向WEB应用的数据库系统:客户机、web server、数据库服务器组成,三层体系结构 4、面向对象的数据库系统 (1)面向对象的概念有:对象、属性、方法、消息、封装、类、继承(子类对象拥有超类对象的全部属性和方 法)和多继承等。 (2)对象涉及的概念:对象标识符OID唯一。 对象结构:三种基本类型构造器:原子、元组和集合,其他构造器:列表、包和数组。 (3)继承:多重继承(继承多个超类成员) 复杂对象:结构化复杂对象和非结构化复杂对象。典型的非结构化复杂对象为位图图像和长文本串,BLOB 和字符串 CLOB。 (4)复杂的结构化对象存在两种引用语义:属主语义(is part of)和引用语义(is associate of) 5、对象一关系数据库系统 ODMG(object data management group)定义的对象数据库标准组成:对象模型、对象定义语言(ODL)、对象查询语言OQL、面向对象语言绑定binding. 对象一关系数据库系统:以关系模型为基础,进行面向对象的扩充支持面型对象模型。 6、移动数据库系统 移动数据库是指支持移动计算环境的分布式数据库(应用在掌上电脑、PDA、车载设备 移动电话等嵌入式设备中,也称嵌入式移动数据库系统) 移动环境的计算特征:高通信等待、不连续的连接、有限的电池寿命、客户机位置变化等。 移动数据库安全性保证:1)对终端进行认证 2)对无线通讯进行加密 3)对下载副本进行加密存储 7、多媒体数据库系统 存储不同类型多媒体信息(图像、视频、音频和文档等 对多媒体数据库的检索称为基于内容的检索。识别多媒体内容的两个方法:基于自动分析以识别多媒体内容的数学特征;手动建立索引以识别多媒体信息。 8、数据仓库与数据挖掘 数据仓库:面向主题的、集成的、非易变的、随时间变化的数据集合,用以支持决策。 数据库为事务处理服务。 数据仓库的基本特征包括以下几个方面:1)数据仓库面向主题。2)数据集成。3)数据相对稳定。4)数据反映历史变化。 数据集市是一种更小、更集中的数据仓库,解决数据仓库分析时间长,代价高的确定 数据集市不等于数据仓库,数据集市的简单合并不能成为数据仓库 (1)数据仓库数据模型 数据仓库和OLAP操作基于数据模型。 数据模型概念:度量属性(决策者关心的实际意义的数量)、维属性(观察数据的角度,如时间、地理等)、维的层次(年、月、日为时间维的层次,国家、地区、城市为地理维的层次) 数据:能够模式化为维属性和度量属性的数据统称为数据。数据构成了数据立方体。 存储模型涉及两类表:维表和事实表,常用的模式为星型(一个事实表和多个维表组成)和雪花型(将维表组织为层次结构)模式。 数据仓库利用位图索引实现高性能访问。 (2)数据仓库的体系结构 数据仓库系统组成:数据仓库(DW)、仓库管理和分析工具(查询工具和挖掘工具)。元数据是数据仓库的核心。 三层客户机/服务器结构:数据仓库服务器、OLAP(联机分析服务器,包括关系OLAP(ROLAP),OLAP(MOLAP))和客户端。 (3)联机分析:切片、切块、钻取(向下钻取(取得细节数据),向上钻取(取得综合数据))和旋转(行列交换)等。 (4)数据挖掘 知识发现识别数据库中以前不知道的、新颖的、潜在有用的和最终可被理解的模式的非平凡过程。数据挖掘是知识发现的核心工作和步骤。 知识发现(KDD)过程:数据准备、数据挖掘以及结果的解释和评估。 可视化技术在数据挖掘过程中扮演了重要的作用。 数据挖掘常用的方法包括以下几个方面: (1)关联规则挖掘(支持度:规则代表的事例占全体事例的比例;可信度:规则代表的事例占前提条件事例的比例)。 (2)分类。 (3)聚类分析。(4)预测。(5)优化 WEB挖掘:从WWW的资源和行为中抽取感兴趣的、有用的模式和隐含的信息。可分为三类:Web内容挖掘(从文档内容或文档描述中抽取知识的过程)、Web结构挖掘(从WWW的组织结构和链接关系中挖掘知识,发现重要页面,对页面排序)和Web使用记录挖掘(从Web的访问记录中抽取感兴趣的模式,提供个性化服务)。 1、计算机的硬件基本上由哪五大部分组成? 答:运算器、控制器、存储器、输入设备、输出设备。 2、运算器都可对数据进行哪两种运算? 答:算术运算和逻辑运算。 3、CAD、CAM、CAT、CAI都代表什么? 答:计算机辅助设计(CAD) 计算机辅助制造(CAM) 计算机辅助测试(CAT) 计算机辅助教学(CAI) 4、数据处理是指对数据的(收集)、(存储)、(加工)、(分析)、(传送)的全过程。 5、程序性语言分为(机器语言)、(汇编语言)、(高级语言)三类。 6、能举出哪些是高级语言、哪些是低级语言? 低级语言:汇编语言 高级语言:basic . cobol . c. foxbase等 7、操作系统可分为(批处理操作系统)、(分时操作系统)、(实时操作系统)三种操作系统。 8、解释型程序和编译型程序有什么不同?哪种程序产生目标程序? 编译程序产生目标程序 9、DBMS是什么的? 答:DBMS 是数据库管理系统。 10、计算机系统由(硬件)系统、(软件)系统两部份组成。 11、软件系统分为(系统)软件、(应用)软件两部分。 12、操作系统的特征:(并发性 )、(共享性 )、(随机性 )。 13、没有任何软件支持的计算机称为( 裸机)。 14、操作系统的五大功能( 进程管理)、(存储管理 )、(文件管理 )、(设备管理 )、(作业管理 )。 15、操作系统发展的过程:(手工操作阶段 )、(早期批处理阶段 )、( 执行系统阶段)、(多道程序系统阶段 )、(分时系统 )、(实时系统 )、(通用操作系统 )。 16、Spooling系统是( 批处理)系统。 17、批处理系统有两大特点( 多道)、(成批 )。 18、批处理系统追求的目标是什么? 答:提高系统资源利用率和大作业的吞吐量以作业流量的自动化。 19、分时系统的特点( 多路性)、(交互性 )、(性 )、(及时性 )。 20、分时系统的主要目标? 答:用户响应的及时性。 21、实时系统分为哪两类?并能举出这两类的例子。飞机飞行、弹道发射、预定飞机票、查询航班都是什么系统? 答:实时系统分为实时控制系统和实时信息处理系统。 飞机飞行、弹道发射都是实时控制系统 预定飞机票、查询航班都是实时信息处理系统。 22、实时系统的主要特点是什么? 答:最主要的特点就是及时性,另外的一个特点是高可靠性。 23、个人计算机上的操作系统是(个人计算机)操作系统。 24、操作系统的类型?(批处理操作系统 )、(分时操作系统 )、(实时操作系统 )、(个人计算机操作系统 )、( 网络操作系统)、(分布式操作系统 ) 25、计算机的应用领域包括什么? 答:1、科学计算 2、数据通信与数据处理、3、自动控制 4、计算机辅助设计 5、计算机人工智能 26、计算机的主要技术指标? 答:1、字长 2、运算速度 3、主存容量 4、综合性能 27、CPU的状态 答:CPU交替执行操作系统程序和用户程序。在执行不同程序时,根据运行程序对机器指令的使用权限而 将CPU置为不同的状态,。CPU的状态属于程序状态字PSW的一位。大多数计算机系统将CPU执行划分为管态和目态 28、PCB是什么? 答:是进程控制块。 29、用户组织的逻辑文件有哪两种形式? 答:流式文件、记录式文件 30、WAN、LAN、MAN都代表什么? 答:WAN代表着广域网、LAN代表着局域网、MAN代表着城域网。 31、TCP/IP具有以下几个特点? 答:1、开放的协议标准,于特定的计算机硬件与操作系统。 2、环形特定的网络硬件,可以运行在局域网、广域网、更适用于互联网中。 3、统一的网络地址分配方案,使得整个TCP/IP设备在网中都见有惟一的IP地址。 4、标准化的高层协议。可以提供多种可靠的用户服务。 32、Internet 提供的主要服务? 答:1、 www服务 2、电子邮件服务 33、Internet的基本接接入方式? 答:1、通过ISP接入 2、通过局域网接入 3、通过电话线接入 34、信息安全包括哪几个方面? 答:1、信息的保密性 2、信息的完整性 3、信息的可用性 4、信息的可控性 35、计算机直接执行的程序是(可执行文件),在机器内是以(二进制)编码形式表示的。它编写的程序是(源程序) 汇编语言是(低级语言),一般使用高级程序设计的语言编写的应用程序称为(将高级语言源程序翻译成机器语言程序即目标程序) 36、解释程序是边逐条解释边逐条执行,不保留机器码的(目标程序)。编译方式是使用编译程序把源程序编译成机器代码的(目标程序) 并形成(文件)保留。 37、一般,将中断源分为两大类(强迫性中断)、(自愿性中断)。 38、强迫性中断包括(输入/输出中断)(硬件故障中断)(时钟中断)(控制台中断)(程序性中断)。 39、什么是自愿性中断? 答:这类中断事件是正在运行程序有应是由于程序员在编造程序时,因要求操作系统提供服务而有意思用访管指令或系统调用,从而导致中断的, 所以又称为访管中断。这类中断的发生具有必然性,而且发生位置确定。 40、中断优秀级是鞅硬件规定的,因为不可改变,但通过(中断屏蔽)可以读者中断事件的响应次序 41、中断处理过程分为四个阶段 答:1、保存被中断程序的现场,其目的是为了在中断处理完之后,可以返回的被中断的地方继续执行。 2、分析中断源,确定中断原因。 3、转去执行相应的处理程序。 4、恢复被中断程序现场(己中断返回),继续执行被中断程序。 42、硬件时钟分为哪两类? 答:1、绝对时钟和相对时钟。 43、什么是进程? 答:进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配的一个的单位,进程是动态产生, 动态消亡的,每一个进程都有一个数据结构——进程控制块——记录其执行情况,进程有三种基本状态,随着进程的进展 ,它们在状态之间相互变化。 44、并发进程使用的的共同使用的资源被称为(临界资源)。 45、分逻辑地址空间到物理地址空间的转换被称为(地址映射)。 46、主要的存储管理方案有哪几种? 答:分区管理、段式管理、页式管理、段页式管理。 47、计算机病毒的特征 答:传染性、破坏性、隐蔽性、潜伏性、可激发性。 48、加密和解密方法的操作都是在一种密钥控制下完厂的。他们分别称为(加密密钥)(解密密钥)。 49、软件危机主要表现在哪几方面? 答:1、软件需求增长得不到满足 2、软件生产高成本,价格昂贵。 3、软件生产进度违法控制。 4、软件需求定义不准确,易偏离用户需求。 5、软件质量不易保证。 6、软件可维护性差。 50、20世纪70年代,B.W.Boehm提出了软件生命周期的(瀑布模型)。 51、瀑布模型将软件生命争取划人为八个阶段 答:1、问题定义 2、可行性研究 3、需求分析 4、总体设计 5、详细设计 6、程序编制 7、测试和运行 8、维护 52、瀑布模型的计划期包括(问题定义)、(可行性研究)、(需求分析);开发期包括(总体设计)(详细设计)、(程序设计),其中程序设计包括(编码)和(测试) 运行期包括系统的(使用)和(维护)。 53、软件的开发技术包括(软件开发方法学)、(软件工具)、(软件工程环境)。 54、软件工程管理包括(软件管理),(软件工程经济学)。 55、软件开发技术包括(软件开发方法学)、(工具)和(环境支持),其主体内容是(软件开发方法学)。 56、软件工程管理包括(软件管理学)、(软件工程经济学)。 57、结构化方法将软件生命周期分为(计划)、(开发)、(运行)三个时期。 58、计划期的主要是任务是(问题定义)、(可行性研究)。 59、开发期的主要任务是(需求分析)、(总体设计)、(详细设计)、(编码)、(测试)。 60、运行期的主要任务是软件的(运行)和(维护)。 61、结构化软件开发方法具有以下特点 答:1、阶段性 2、推迟实施 3、文档管理。 62、(问题定义)阶段的任务是要确实软件系统所要解决的任务。 63、可行性研究着重对以下具体方案考虑 答:1、经济可行性 2、技术可行性 3、操作可行性 、软件计划鞅两项任务组成(分析)和(估算)。 65、软件开发工作中的资源包含(人力资源)、(软件资源)、(硬件资源),对每一种资源都应指明三点(资源的描述)、(使用资源的起始时间)、(使用资源的终止时间)。 66、开发软件的人员包括(管理人员)、(分析人员)、(设计人员)以及(编码和测试人员)。 67、软件资源包括(支持软件)和(应用软件)。 68、需要分析的这个亟待的基本任务是,用户和分析人员双方共同来理解系统的需要,并将共同理解形成一份文件,即(软件需要说明书)。 69、用户需求通常包括(功能要求 )、(性能要求)、(可靠性要求)、(安全保密要求)以及(开发费用开发周期,可使用的资源等方面的)。 70、分析亟待是(用户)和(软件人员)双方讨论协商的阶段。 71、数据流图包括哪四种基本的图形符号 答:1、圆框:变换/加工 2、方框:外部实体 3、箭头:数据流 4、直线:数据存储 72、(数据字典)是对数据定义的信息的集合。 73、数据字典中有四种类型的条目:(数据流)、(数据存储)、(数据项)和(加工)。 74、数据字典可通过三种途径实现: 答:1、人过过程 2、自动化过程 3、人机混合过程 75、数据字典具有的特点? 答:1、通过名字能方便地查阅数据的定义 2、没有冗余 3、尽量不重复其他部分已说明的信息 4、能单独处理描述每个名字的信息 5、书写方法简单方便而且严格,容易更新和修改。 76、需要分析的方法通常分为四步? 答:1、理解当前的现实环境 2、将当前系统的具体模型抽象为当前逻辑模型 3、分析新系统与当前系统逻辑上的差别 4、确定新系统的人——机界面和一些补充考虑的细节问题。 77、需要分析的步骤? 答:1、理解 2、分析 3、决策 4、实现 5、复审 78、复审的标准和内容? 答:1、软件需要规格说明中的目标是否与系统规格说明中的目标一致 2、软件需求规格说明中对重要的系统元素接口,所有的数据流和数据文件的定义是否明确,是否有不一致或遗漏 3、每个功能是否已清楚地描述,设计的主要约束是否实现,对未来的可能的软件需要是否有所考虑。 4、是否与用户取得了一致的意见。 5、文档是否取得了一致的意见。 6、软件计划中的估算是否受到影响。 79、(软件需求说明书)是需求分析阶段的最后成果,是软件开发中的重要文档之一。 80、软件需求说明书包括的内容和书写参考格式? 答:1、概述 2、数据描述 3、功能描述 4、性能描述 5、参考文献目录 6、附录 81、软件需求说明书的主要作用? 答:1、作为用户和软件人员之间的共同文件,为双方相互了解提供基础。 2、反映出用户问题的结构,可以作为软件人员进行设计和编码的基础。 3、作为验收的依据,己作为选取测试用例和进行形式验证的依据。 82、结构化设计是以软件需求分析阶段所产生的文档其中包括(数据流程图)(数据字典)为基础。 83、软件结构的度量的术语 答:深度:从根模块到最低层模块的层数。 宽度:控制的总分布。 扇入数:有多少模块直接控制一个给定的模块 扇出数:由一个模块直接控制其他模块数。 上级模块:控制其他模块的模块 从属模块:被另一模块控制的模块。 84、(模块)是数据说明、可执行永久等程序元素的集合。 85、(模块的概念)是模块化、抽象、信息隐蔽和局部化概念的直接结果。 86、模块性是由(内聚性)和(耦合性)两个指标来度量的。 87、耦合是软件结构中(各模块之间相互连接的一种度量)。 88、耦合可以分为哪几种? 他们之间的耦合度由高到低排列? 答:1、内容耦合 2、公共耦合 3、外部耦合 4、控制耦合 5、标记耦合 6、数据耦合 7、非直接耦合 、内聚是从(功能角度)来(衡量模块的联系) 90、内聚有哪一几种,它们之间的内聚度由弱到强的排列是什么? 答:1、偶然内聚 2、逻辑内聚 3、时间内聚4、过程内聚 5、通信内聚 6、顺序内聚 7、功能内聚 91、什么是纳入时间? 答:纳入时间是指一个模块被归并到软件的源语言描述之中的时间。 92、模块的激活机制通常有哪两种? 答:1、通过引用来调用模块的 2、通过中断来调用模块的。 93、在软件结构中,模块可以分成以下的几类? 答:1、顺序模块 2、增量模块 3、并行模块 94、软件系统的扇入和扇出有什么规定? 答:设计好的软件结构通常顶层的扇出比较大,中间扇出比较少,底层模块有大扇入。 96、模块的作用范围是指(受该模块内一个判定影响的所有模块的集合) 97、在总体设计中要用到的几种图? 答:1、层次图和HIPO图 2、结构图 98、一般的把信息流分为(事务流)和(交换流)。 99、什么是事务流? 答:当信息活输入通路到达一个处理,这个处理根据输入数据的类型从若干个动作序列中选出一个来执行,这类数据流归为特殊的一类, 称为事务流。 100、PAD图又称为(问题分析图) 101、PAD图是(二维树形结构)的图形。 102、PAD图是(自顶向下、逐步求精)的方法使用。 103、PDL又称为(伪码)。 104、(软件设计规格说明)是软件设计的最终成果。 105、软件设计规格说明用于两个方面(作为编码人员书写源程序的依据)、(作为测试阶段及维护阶段的一个指 南)。 106、软件设计规格说明的编写可以分为两个阶段 答:1、在总体设计阶段育集中于软件结构的描述 2、详细计算机阶段应集中描述每个软件元素的细节。 107、软件设计规格说明中应该包括哪些内容? 答:1、作用范围 2、参考文档 3、设计说明 4、模块、 5、文件结构和全局数据 6、需要与模块的相互对照表 7、测试的准备 8、装配 9、专门的注释 10、附录 108、设计的复审包括(正规复审)、(非正规复审)。 109、参与复审的人员包括(管理人员)、(技术开发人员)以及(用户)。 110、复审的标准是什么? 答:1、可追溯性 2、风险 3、实用性 4、可维护性 5、接口 6、技术清晰度 7、选择方案 8、 9、其它问题 111、结构化语言的有哪三种控制结构 答:1、顺序 2、循环 3、选择 112、结构化语言的缺点是(目标程序所需要的存储容量和运行时间都有一些增加)。 113、从心理学的观点看,编程语言的性能主要有哪些? 答:1、一致性 2、二义性 3、简洁性 4、局部性和线性 114、从工程的观点看,语言的性能包括如下内容? 答:1、是否易于把设计转换为程序 2、编译效率 3、可移植性 4、是否有开发工具 5、源程序的可维护性 115、高级语言通常人为哪三类? 答:1、基本语言 2、结构化程序语言 3、专用语言 116、当评价可用语言时应该考虑那些因素? 答:1、一般的应用领域 2、算法及运算的复杂性 3、数据结构的复杂性 4、软件运行的环境 5、性能 6、对该语言的熟悉程度 117、可用性语言选择时最主要的考虑什么因素? 答:语言的应用领域。 118、提高程序的可读性和易维护性的关键是(使程序结构简单清晰) 119、大型软件系统的程序内部必须带有(说明性注释)即(内部文档)。 120、软件测试的目的是什么? 答:软件测试的目的是在软件投入生产性运行之前,尽可能多地发现软件中的错误,测试是对软件规格说明, 设计和编码的最后复审。所以软件测试贯穿在整个软件开发期的全过程。 121、好的软件测试方案是(尽可能发现至今尚未发现的错误);(成功的测试则是发现了至今尚未发现的错误) 122、软件测试是软件开发工程的重要阶段,是软件质量保证的重要手段。其任务可归纳为? 答:1、预防软件发生错误 2、发现改正程序错误 3、提供错误诊断信息 123、软件测试的方法有三种? 答:1、动态测试 2、静态测试 3、正确性证明 124、设计测试实例的方法一般有两类(黑箱法)和(白箱法)。 125、黑箱测试即(功能测试)。 126、白箱测试即(结构测试)。 127、什么是静态测试? 答:静态测试一般是指人工评审软件文档或程序,借以发现其中的错误,由于被评审的文档 或程序不必运行,所以称为静态。 128、(软件评审)是保证软件质量的重要措施。 129、软件评审可以分为(需求复审)、(总体设计复审)、(详细设计复审)、(程序复审)。 130、单元是什么? 答:单元是程序中最小的有意义的部分。 131、单元由哪三部分组成? 答:1、数据输入 2、数据加工3、数据输出。 132、黑箱法分为(等价分类法)、(边缘值分析法)、(因果图法)、(错误探测法)。 133、白箱测试包括什么? 答:1、语句测试 2、分支测试 3、路径测试 4、覆盖测试 134、穷举测试又称为(完全测试)。 135、如测试蟆是希望通过测试发现程序的全部错误则属于(完全功能测试) 136、如果设计这样的测试输入数据集,使程序的全部路径都被遍历属于(完全功能测试)。 137、软件测试组成包括哪些? 答:1、单元测试(模块测试) 2、集成测试 3、有效性测试 4、系统测试 5、验收测试 138、单元测试的方法有哪些? 答:1、动态测试 2、静态测试 3、复审 139、集成测试又称为(整体测试或者是结合测试)。 140、系统测试包含(功能测试)和(验收测试)。 141、测试报告的内容主要包括什么? 答:1、引言 2、测试计划和配置 3、接口测试 4、功能测试 5、开发测试 6、交付使用的准备 7、附录 142、软件维护的任务是什么? 答?软件维护是指系统交付使用以后对它所做的改变。也是软件生成周期中最后一个阶段 143、软件维护的分类? 答:1、校正性维护 2、适应性维护 3、完善性维护 4、预防性维护 144、影响软件因素包括什么? 答:1、人员因素 2、技术因素 3、管理因素 4、程序自身的因素。 145、影响软件维护工作量的因素 1、增加维护工作量的因素:软件的年龄和大小,结构的合理性,程序复杂性,用户的总量,应用的变化,文档的质量等都将影响维护的工作量。 2、减少维护工作量的因素:使用新软件,自动工具、数据库技术、新的数据管理软件都对维护工作量减少有帮助 ,维护经验同样对减少维护工作量有益。 146、软件维护的任务包括什么? 答:1、检查用户的要求和说明书 2、同用户和开发者商讨 3、检查程序和文档 4、确定程序错误性质和位置 5、研究程序的修改可行性和修改可能引起的后果。 6、对改变部分进行编码 7、修改程序文档和程序库、数据库。 147、维护的副作用都有什么? 答:1、修改程序的副作用 2、修改数据的哥作用 3、文档资料的副作用 148、与软件产品有关的性能? 答:1、正确性 2、健壮性 3、效率 4、安全性 5、可用性 6、风险 7、可靠性 148、软件管理也称为(项目管理)。 149、软件管理的主要职能包括什么? 答:1、组织管理 2、人员管理 3、资源管理 4、计划管理 5、版本管理 150、软件工程标准化有什么好处? 答:1、有利于软件生产的组织 2、有利于软件生产的规模化和自动化 3、便于培养软件生产人员和提高技术水平 4、能提高软件生存率和保证质量 5、进行开发人员间的有效通信,减少错误。 6、可降低软件生产成本和缩短开发争取 7、有利于提高软件生产的管理的水平。 151、什么是信息? 答:信息是指现实世界事物的存在或运动状态的反映。 152、什么是数据? 答:数据是描述现实世界事物的符号记录,是指用物理符号记录下来的可以鉴别的信息。 153、人就将原始信息表示成数据,称为(源数据),然后对源数据进行汇集、储存、综合、投弹、从这些原始的,无序的,难以理解的数据中抽取或推导出新的数据,称为(结果数据)。 154、数据库中的的数据可分为两类:(用户数据)和(系统数据)。用户数据一般由用户定义和使用;系统数据是数据库系统定义和使用的数据称为(数据字典)。 155、DBMS被称为(数据库管理系统)。 156、数据库管理系统的主要功能是什么? 答:1、数据定义 2、数据操纵 3、数据库的运行管理 4、数据库的建立和维护 157、DBA被称为(数据库管理员)。 158、数据库系统中的人员包括(数据库管理员)、(系统分析员)、(数据库设计人员)、(应用程序员)、(最终用户)。 159、数据库系统的三级模式结构是指(外模式)、(模式)、(内模式)。 160、数据库管理系统通过(数据字典)来管理和(访问数据模式)。 161、模式也称(逻辑模式)或(概念模式)是数据库中全体数据库的逻辑结构和特征的描述。 162、DBMS提供模式数据定义语言(DLL)来描述逻辑模式。己严格地定义数据的名称,特征,相互关系,约束等。逻辑模式的基础是(数据模型)。 163、(外模式)是模式的子集,所以也称子模式或者用户模式。一个数据库可以有多个外模式。 1、内模式也称(物理模式)或(存储模式)。 165、一个数据库只有一个内模式。 166、数据库系统的三级模式对应数据的三个抽象级别,为了能够在内部实现这三个抽象层次之接的联系和转换,数据库管理系统在这三级模式之间提供了两层映像。(外模式/模式映像)、(模式/内模式映像)。 167、数据库结构的基础是(数据模型)。 数据模型是(描述数据)、(数据联系)、(数据操作)、(数据语义)、(以及一致性约束的概念工具的集合)。 168、概念模型也称(信息模型)。 169、著名的实体联系模型(E—R模型)就是概念模型。 170、结构模型也称(逻辑模型)。 171、结构模型包括(层次模型)(网状模型)(关系模型)(面向对象模型)。 172、采用关系模型的数据库系统称为(关系数据库系统)。 173、关系数据模型由(关系数据结构)、(关系操作集合)、(关系完善性约束)三大要素组成。 174、关系模型中数据的逻辑结构是一个(二维表)。 175、关系模型中的行被称为(元组)。 176、关系模型中的列被称为(属性)。 177、属性的个数被称为(元数)。 178、关系模型把关系看成是(行的一个集合),即关系模型建立在集合代数基础上。 179、关系操作的特点是(集合操作方式),即操作的对象和结果都是集合。 180、理解关系模型中用的关系操作其中包括并、交、差、广义笛卡尔简练,选择,投影,连接,除以,及查询操作和增、删、改操作两大部分。 181、SQL语言被称为(结构化查询语言)。 182、SQL语言支持数据库的三级模式结构,在SQL中,模式对应着(基本表),内模式对应于(存储文件),外模式对应于(视图)。 183、在SQL中元组对于表中的(行),属性对应于表中的(列)。 184、数据库需要分析阶段的任务是什么? 答:对现实世界要处理的对象进行详细调查,在了解现行系统的概况 确定新系统功能的过程中,收集支持系统目标的基础数据及其处理方法。 185、数据库需求分析的基本步骤是什么? 答:1、需求的收集。 2、需求的分析整理。 3、数据分析统计。 4、分析围绕数据的各种业务处理功能,并以带说明的系统功能结构图形式给出。 186、数据库概念设计的任务是产生反映企业组织信息需求的数据库概念结构,即(概念模型)。 187、概念模型是不依赖于计算机系统和具体的DBMS的,设计概念模型的过程称为(概念设计)。 188、概念设计的结果称为(概念模型)。 1、概念模型具有哪些特点? 答:1、有丰富的语义表达能力 2、易于交流和理解。 3、易于变动 4、易于向各种数据模型转换。 190、概念设计的策略和主要步骤是什么? 答:1、自顶向下 2、自底向下 3、由里向外。 4、混合策略 191、最常用的设计策略是自底向上的答理,其主要步骤为: 1、进行数据抽象,设计局部概念模式 2、将局部概念模式综合成全局概念模式。 3、进行评审、改进。 192、E—R方法的基本术语 实体与属性 193、实体是什么? 答:实体是客观存在并可互相区分的“事物”。实体必须有一终表征其特征的属性来描述,属性与实体天截然划分的界限。 194、采用E-R方法的数据库概念设计的步骤? 答:1、设计局部E-R模型。 2、设计全局E-R模型。 3、全局E-R模型的优化。 195、逻辑设计的目的是什么? 答:逻辑设计的目的是从概念模型导出特定DBMS可以处理的数据库的逻辑结构(数据库的模式和外模式), 这些模式在功能,性能,完整性和一致性的约束及数据库可扩充性等方面均应满足用户提出的要求。 196、逻辑设计的步骤和内容? 答:1、初始模式形成:把E-R图的实体和联系类型,转换成选定的DBMS支持的记录类型(层次、网络、关系)。 2、子模式设计:子模式是应用程序与数据库的接口,允许有效访问数据库而不破坏数据库的安全性。 3、模式评价:对逻辑数据库结构(模型),根据定量分析和性能测算作出评价,定量分析是指处理频率和数据 容量及其增长情况。性能测算是指逻辑记录访问数目,一个应用程序传输的总字节数和数据库库的总字节数等。 4、修正(优化)模式:为使模式适应信息的不同表示,可利用DBMS性能,如建索引、散列功能等,但不修改数据库的信息。 197、一个实体类型转换成一个关系模式,实体的属性就是(关系的属性),实体的码就是(关系的码)。 198、对于实体之间的联系则有以下不同的情况: 1、一个1:1联系可以转换为一个的关系模式, 2、一个1:n联系可以转换为一个的关系模式。 3、一个m:n联系转换为一个关系模式。 4、三个或三个以上的实体间的多元联系转换为一个关系模式。 199、关系数据库的逻辑设计过程如下: 答:1、从E-R图导出初始关系模式 2、规范化处理。 3、模式评价。 4、优化模式。 200、数据库的物理设计是给己确定的逻辑数据库结构设计沙漠一个有效的、可实现的物理数据库结构。 201、数据库的物理设计的主要任务什么? 答:设计数据库中数据在物理设备上的结构的存放结构和存取方法。数据库物理结构依赖于给定的计算机系统,而且与具体选用的DBMS密切模式。 202、数据库的物理设计的概念: 答:数据库的物理设计是给已确定的逻辑数据库结构设计出一个有效的、可实现的物理数据库结构,的过程。 203、物理设计的步骤和内容? 答:1、存储记录的格式设计 2、存储方法设计 3、访问方法设计 4、完整性和安全性考虑 5、应用设计 6、形成物理设计说明书 204、对数据库的概念、逻辑和物理结构的改变称为(再组织)。 205、其中改变概念或物理结构又称(再构造)。 206、改变物理结构称为(再格式化)。 207、一个好的DBMS应该提供功能骑。易为、易用的数据操纵语言(DML)。 208、数据操纵语言DML有两类,一类是(宿主型语言)、一类是(自立型语言)。前者的永久不能使用,而必须嵌入某种主语言,而后者可以使用,通常供终端用户使用。 209、信息系统设计目标除了满足用户的功能需要外,还应该考虑系统的(性能)和(效率)。 210、DBMS提供的功能完备程度越高,应用系统开发的(效率越高),而且系统的性能和效率越好 2011年3月全国计算机等级考试三级数据库真题和答案 一、选择题(每小题1分,共60分) 下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 1. 现代计算机系统工作原理的核心之一是\"存储程序\",最早提出这一设计思想的是 A. 艾兰·图灵 B. 戈登·摩尔 C. 冯·诺依曼 D. 比尔·盖茨 2. 总线用于在计算机部件之间建立可共享连接的信息传输通道。下列哪一个不属于I/O总线 A. PCI B. DMA C. USB D. 1394 3. 下列关于局域网的叙述中,哪一条是正确的 A. 地理覆盖范围大 B. 误码率高 C. 数据传输速率低 D. 不包含OSI参考模型的所有层 4. 从邮件服务器读取邮件所采用的协议是 A. SMTP B. POP3 C. MIME D. EMAIL 5. 为加强网络之间的安全设置了一项功能,它可以控制和监测网络之间的信息交换和访问,这一功能是 A. 消息认证 B. 访问控制 C. 文件保护 D. 防火墙 6. 通过网络把多个成本相对较低的计算实体整合成一个具有强大计算能力的系统,并借助SaaS、PaaS、IaaS、MSP 等商业模式把该计算能力分布到终端用户手中,这种应用模式称为 A. 云计算 B. 过程控制 C. 计算机辅助系统 D. 人工智能 7. 下列关于数据结构基本概念的叙述中,哪一条是不正确的 A. 数据是采用计算机能够识别、存储和处理的方式,对现实世界的事物进行的描述 B. 数据元素(或称结点、记录等)是数据的基本单位 C. 一个数据元素至少由两个数据项组成 D. 数据项是有含义的数据最小单位 8. 下列与数据的逻辑结构有关的叙述中,哪一条是不正确的 A. 数据的逻辑结构抽象地反映数据元素间的逻辑关系 B. 数据的逻辑结构分为线性结构和非线性结构 C. 树形结构是典型的非线性结构 D. 数据运算的具体实现在数据的逻辑结构上进行 9. 双链表的每个结点包括两个指针域。其中rlink指向结点的后继,llink指向结点的前驱。如果要在p所指结点前面插入q所指的新结点,下面哪一个操作序列是正确的 A. p↑.rlink↑.llink:=q;p↑.rlink:=q;q↑.link:=p;q↑.rlink:=p↑.rlink; B. p↑.llink↑.rlink:=q;P↑.llink:=q;q↑.rlink:=p;q↑.llink:=p↑.llink; C. q↑.llink:=P;q↑.rlink:=p↑.rlink;p↑.rlink↑.llink:=q;p↑.rlink:=q; D. q↑.rlink:=P;q↑.llink:=p↑.llink;p↑.llink↑.rlink:=q;P↑.llink:=q; 10. 下列关于树和二叉树的叙述中,哪些条是正确的 Ⅰ.树是结点的有限集合,这个集合不能为空集 Ⅱ.二叉树是结点的有限集合,这个集合不能为空集 Ⅲ.树的每个结点有m(m>=0)棵子树 Ⅳ.二叉树是树的特殊情况,即每个结点的子树个数都不超过2 Ⅴ.每一棵二叉树都能唯一地转换到它所对应的树(林) A. 仅Ⅰ和Ⅲ B. 仅Ⅰ、Ⅲ和Ⅴ C. 仅Ⅱ和Ⅳ D. 仅Ⅱ、Ⅲ和Ⅴ 11. 设有二维数组A[1..8,1..10],其每个元素占4个字节,数组按列优先顺序存储,第一个元素的存储地址为200,那么元素A[3,4]的存储地址为 A. 292 B. 304 C. 328 D. 396 12. 假定栈用顺序的方式存储,栈类型stack定义如下: TYPE stack=RECORD A:ARRAY[1..m0]OF datatype; t:0..m0; END; 下面是栈的一种基本运算的实现: PROCEDURE xxxx(VAR s:stack); BEGIN IFs.t=0 THEN print(underflow) ELSEs.t:=S.t-1; END; 请问这是栈的哪一种基本运算 A. 栈的推入 B. 栈的弹出 C. 读栈项元素 D. 将栈置为空栈 13. 下列关于散列表的叙述中,哪一条是不正确的 A. 散列法的基本思想是:由结点的关键码值决定结点的存储地址 B. 好的散列函数的标准是能将关键码值均匀地分布在整个地址空间中 C. 在散列法中,处理碰撞的方法基本有两类:拉链法和除余法 D. 散列表的平均检索长度随负载因子的增大而增加 14. 下列哪一个关键码序列不符合堆的定义 A. A、C、D、G、H、M、P、Q、R、X B. A、C、M、D、H、P、X、G、Q、R C. A、D、P、R、C、Q、X、M、H、G D. A、D、C、G、P、H、M、Q、R、X 15. 下列排序方法中,哪一种方法总的关键码比较次数与记录的初始排列状态无关 A. 直接选择排序 B. 直接插入排序 C. 起泡排序 D. 快速排序 16. 下列关于时钟的叙述中,哪一条是不正确的 A. 时钟中断可以屏蔽 B. 时钟是操作系统运行的必要机制 C. 时钟可以分成硬件时钟和软件时钟 D. 利用时钟中断可以实现进程的轮转运行 17. 下列哪一种进程状态转换不会发生 A. 等待态→就绪态 B. 就绪态→运行态 C. 就绪态→等待态 D. 运行态→等待态 18. 在采用最高优先级算法的系统中,若CPU调度方式为不可抢占,则下列哪一个事件的发生不会引起进程切换 A. 有一个优先级更高的进程就绪 B. 时间片到 C. 进程运行完毕 D. 进程在运行过程中变为等待状态 19. Dijkstra提出的银行家算法属于 A. 死锁预防 B. 死锁避免 C. 死锁检测 D. 死锁解除 20. 在可变分区存储管理方案中,在回收一个分区时,若该分区的起始地址+长度=空闲区表中某个登记栏所表示空 闲区的起始地址则说明 A. 该回收分区的上邻分区是空闲的 B. 该回收分区的下邻分区是空闲的 C. 该回收分区的上、下邻分区都是空闲的 D. 该回收分区的上、下邻分区都不是空闲的 21. 实现虚拟存储器的目的是 A. 实现存储保护 B. 让程序运行速度更快 C. 实现程序在内存中的移动 D. 实现让大的应用程序在较小的物理内存中运行 22. 文件的存取方法依赖于 Ⅰ.文件的物理结构 Ⅱ.文件的逻辑结构 Ⅲ.存放文件的设备的物理特性 A. 仅Ⅰ B. 仅Ⅱ C. 仅Ⅰ和Ⅱ D. 仅Ⅰ和Ⅲ 23. 有一个文件包含20个逻辑记录k1、k2、„、k20,块因子为4,文件系统按照记录的成组和分解方式存取文件。若要读取该文件,需要启动几次磁盘 A. 1次 B. 4次 C. 5次 D. 20次 24. 下列关于SPOOLing技术的叙述中,哪一条是不正确的 A. SPOOLing技术未解决CPU的速度与设备速度的不对称问题 B. SPOOLing技术解决了独占设备利用率低的问题 C. SPOOLing技术需要利用磁盘空间作为缓冲 D. SPOOLing技术可用于打印机的管理 25. 下列关于SQL语言的叙述中,哪一条是不正确的 A. SQL语言支持数据库的三级模式结构 B. 一个基本表只能存储在一个存储文件中 C. 一个SQL表可以是一个基本表或者是一个视图 D. 存储文件的逻辑结构组成了关系数据库的内模式 26. 设关系R和S具有相同的属性个数,且相对应属性的值取自同一个域,则:R-(R-S)等价于 A. R∪S B. R∩S C. R×S D. R-S 27. 在关系代数中,从两个关系的笛卡儿积中选取它们属性间满足一定条件的元组的操作称为 A. 投影 B. 选择 C. 自然连接 D. θ连接 28. 在数据库的三级模式结构中,模式/内模式映像 A. 只有1个 B. 只有2个 C. 由系统参数确定 D. 可以有任意多个 29. 数据库是计算机系统中按一定的数据模型组织、存储和使用的 A. 命令集合 B. 程序集合 C. 数据集合 D. 文件集合 30. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,语句ALTERTABLE是实现哪类功能 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制 31. 在SQL语言的SELECT语句中,对投影操作进行说明的是哪个子句 A. SELECT B. FROM C. WHERE D. ORDER BY 32. 设关系R和S具有公共属性集Y,当执行RS时,会丢弃那些在Y属性上没有匹配值的元组。如果不想丢弃那些元组, 应采用下列哪个操作 A. 聚集 B. 赋值 C. 外部并 D. 外连接 33. 如果对关系emp(eno,ename,salary)成功执行下面的SQL语句: CREATE CLUSTER INDEX name_index ON emp(salary) 其结果是 A. 在emp表上按salary升序创建了一个聚簇索引 B. 在emp表上按salary降序创建了一个聚簇索引 C. 在emp表上按salary升序创建了一个唯一索引 D. 在emp表上按salary降序创建了一个唯一索引 34. 设R和S分别是r和s元关系,且R有n个元组,S有m个元组。执行关系R和S的笛卡儿积,记为T=R×S,则 A. T的元数是(r+s),且有(n+m)个元组 B. T的元数是(r+s),且有(n×m)个元组 C. T的元数是(r×s),且有(n+m)个元组 D. T的元数是(r×s),且有(n×m)个元组 35. 在面向对象数据模型中,子类可以从其超类中继承所有的属性和方法,这有利于实现 A. 可移植性 B. 可扩充性 C. 安全性 D. 可靠性 36. 为了考虑安全性,每个部门的领导只能存取本部门员工的档案,为此DBA应创建相应的 A. 表(table) B. 索引(index) C. 视图(view) D. 游标(cursor) 37. 在数据库中,产生数据不一致的根本原因是 A. 数据存储量过大 B. 缺乏数据保护机制 C. 数据冗余 D. 缺乏数据安全性控制 38. 第(38)~(41)题基于“学生—选课—课程”数据库中的三个关系: S(S#,SNAME,SEX,AGE),SC(S#,C#,GRADE),C(C#,CNAME,TEACHER)它们的主码分别是S#、 (S#,C#)、C#。 (38)下列关于保持数据完整性的叙述中,哪一条是不正确的 A. 向关系SC插入元组时,s#或C#中的一个可以是空值(NULL) B. 可以任意删除关系SC中的元组 C. 向任何一个关系插入元组时,必须保证关系主码值的唯一性 D. 不可以任意删除关系C中的元组 39. 为了提高查询速度,对SC表(关系)创建唯一索引,应该创建在哪个(组)属性上 A. S# B. C# C. GRADE D. (S#,C#) 40. 将学生的学号及他的平均成绩定义为一个视图。创建这个视图的语句中使用的子查询将包括下列哪些子句 Ⅰ.SELECT Ⅱ.FROM Ⅲ.WHERE Ⅳ.GROUP BY Ⅴ.ORDER BY A. 仅Ⅰ、Ⅱ和Ⅲ B. 仅Ⅰ、Ⅱ和Ⅳ C. 仅Ⅰ、Ⅱ、Ⅲ和Ⅳ D. 都包括 42. 数据字典又称为 A. 数据模型 B. 系统目录 C. 系统模型 D. 用户口令 43. 下列条目中哪些是非易失性的存储设备 Ⅰ.高速缓冲存储器Ⅱ.主存储器 Ⅲ.第二级存储器Ⅳ.第三级存储器 A. 仅I和Ⅱ B. 仅Ⅱ和Ⅲ C. 仅Ⅰ和Ⅳ D. 仅Ⅲ和Ⅳ 44. 下列关于数据存储组织的叙述中,哪一条是不正确的 A. 一个数据库被映射为多个不同的文件,它们由操作系统来维护 B. 一个文件可以只存储一种固定长度的记录,也可以存储多种长度不同的记录 C. 数据库映射的文件存储于磁盘上的磁盘块中 D. 磁盘块常常采用分槽的页结构,如果一条记录被删除,只需将对应的条目置成被删除状态,而不用对之前的记录进行移动 45. 下列关于故障恢复的叙述中,哪一条是不正确的 A. 系统可能发生的故障类型主要有事务故障、系统故障和磁盘故障 B. 利用更新日志记录中的改前值可以进行UNDO,利用改后值可以进行REDO C. 写日志的时候,一般是先把相应的数据库修改写到外存的数据库中,再把日志记录写到外存的日志文件中 D. 磁盘故障的恢复需要DBA的介入 46. 下列关于SQL Server 2000数据库的叙述中,哪一条是不正确的 A. Master控制用户数据库和SQL Server的整体运行 B. Model为创建新的用户数据库提供模板或原型 C. Msdb为调度信息和作业历史提供存储区域 D. Pubs是系统提供的公共区域 。 47. 下列哪些条目是SQL Server 2000中常用的对象 Ⅰ.表Ⅱ.数据类型Ⅲ.约束Ⅳ.规则 Ⅴ.视图Ⅵ.索引Ⅶ.默认值 A. 仅Ⅰ、Ⅲ、Ⅴ和Ⅵ B. 仅Ⅰ、Ⅱ、Ⅳ和Ⅴ C. 仅Ⅰ、Ⅲ、Ⅴ、Ⅵ和Ⅶ D. 都是 48. 下列关于Oracle数据仓库的叙述中,哪一条是不正确的 A. Oracle Express Server是服务器端的产品 B. Oracle Express Objects和Oracle Express Analyzer是客户端的产品 C. Oracle Express Analyzer是联机分析处理服务器 D. Oracle Express Objects是可视化工具 49. 下列关于Oracle的对象\\|关系特性的叙述中,哪一条是不正确的 A. Oracle对象\\|关系模型的核心是面向对象数据库 B. 对象实体的一些属性是多值的,可使用可变长数组来表示 C. 在对象模型中,对象的某些属性也可以是对象,可使用嵌套表来表示 D. 抽象数据类型由对象的属性及其方法组成,可用于创建对象表 50. 由于关系模式设计不当所引起的更新异常指的是 A. 两个事务并发地对同一数据项进行更新而造成数据库不一致 B. 未经授权的用户对数据进行了更新 C. 关系的不同元组中数据冗余,更新时未能同时更新所有有关元组而造成数据库不一致 D. 对数据的更新因为违反完整性约束条件而遭到拒绝 51. 下列关于数据依赖的叙述中,哪一(些)条是不正确的 Ⅰ.关系模式的规范化问题与数据依赖的概念密切相关 Ⅱ.数据依赖是现实世界属性间相互联系的抽象 Ⅲ.数据依赖极为普遍地存在于现实世界中,是现实世界语义的体现 Ⅳ.数据依赖是通过一个关系中各个元组的某些属性值之间的相等与否体现出来的相互关系 Ⅴ.只有两种类型的数据依赖:函数依赖和多值依赖 A. 仅Ⅰ和Ⅲ B. 仅Ⅱ和Ⅴ C. 仅Ⅳ D. 仅Ⅴ 52. 下面关于非平凡的函数依赖的叙述中,哪一条是正确的 A. 若X→Y,且YX,则称X→Y为非平凡的函数依赖 B. 若X→Y,且YX,则称X→Y为非平凡的函数依赖 C. 若X→Y,且XY,则称X→Y为非平凡的函数依赖 D. 若X→Y,Y→X,则称X→Y为非平凡的函数依赖 53. 设U为所有属性,X、Y、Z为属性集,Z=U-X-Y,下面关于多值依赖的叙述中,哪一条是正确的 A. 设XYWU,若X→→Y在R(W)上成立,则X→→Y在R(U)上成立 B. 若X→→Y在R(U)上成立,且YY,则X→→Y在R(U)上成立 C. 若X→→Y,则X→→Z D. 若X→→X,则X→N 54. 第(54)~(55)题基于以下描述:有关系模式R(S,T,C,D,G),根据语义有如下函数依赖集:F={(S,C.→T,C→D,(S,C.→G,T→C}。 (54)关系模式R的候选关键码 A. 仅有1个,为(S,C) B. 仅有1个,为(S,T) C. 有2个,为(S,C.和(T) D. 有2个,为(S,C.和(S,T) 55. 关系模式R的规范化程度最高达到 A. 1NF B. 2NF C. 3NF D. 4NF 57. 下列关于浏览器/服务器结构软件开发的叙述中,哪一条是不正确的 A. 信息系统一般按照逻辑结构可划分为表现层、应用逻辑层和业务逻辑层 B. 以应用服务器为中心的模式中,客户端一般有基于脚本和基于构件的两种实现方式 C. 以Web服务器为中心的模式中,所有的数据库应用逻辑都在Web服务器端的服务器扩展程序中执行 D. 以数据库服务器为中心的模式中,数据库服务器和HTTP服务器是紧密结合的 58. Power Designer DataArchitect的主要功能是 A. 用于数据分析 B. 用于数据库设计和构造 C. 用于物理建模 D. 用于数据仓库的设计 59. 下列关于分布式数据库系统的叙述中,哪一条是不正确的 A. 分布式数据库系统的数据存储具有分片透明性 B. 数据库分片和副本的信息存储在全局目录中 C. 数据在网络上的传输代价是分布式查询执行策略需要考虑的主要因素 D. 数据的多个副本是分布式数据库系统和集中式数据库系统都必须面对的问题 60. 下列关于数据仓库的叙述中,哪一条是不正确的 A. 数据仓库概念于1992年由W.H.Inmon提出 B. 数据仓库的数据是反映历史变化的 C. 能够模式化为维属性和度量属性的数据统称为数据 D. 数库仓库的操作基于数据模型,维属性是决策者所关心的具有实际意义的数量 二、填空题(每空2分,共40分) 请将答案分别写在答题卡中序号为【1】至【20】的横线上,答在试卷上不得分。 1. 采用IPv4协议的互联网中,IP地址的长度是【1_____】位。 2. 作为一个安全的网络系统提供的基本安全服务功能,【2_____】服务可用于确定网络中信息传送的源结点用户与目的结点用户身份的真实性。 3. 三元组法和十字链表法都可以用于【3_____】矩阵的存储表示。 4. 在有n个结点的二叉树的llink\\|rlink法存储表示中,必定有【4_____】个空指针。 5. m阶B+树的每个非叶结点(除根外)至少有【5_____】个子女。 6. 一个计算机系统中的存储体系由高速缓存、内存和【6_____】组成。 7. 解决进程之间传递大量信息问题有三类方案,分别是共享内存、【7_____】和管道。 8. 【8_____】页面淘汰算法不可能实现,但可以作为衡量其他页面淘汰算法好坏的标准。 9. 由计算机、操作系统、数据库管理系统、数据库、应用程序以及用户等组成的一个整体称为【9_____】。 10. 若一个视图是从单个基本表导出,只是去掉了该基本表的某些行和某些列,并且保留了码,称这类视图为【10_____】视图,这类视图可以如同基本表一样使用。 11. 关系数据模型由关系数据结构、关系操作集合和【11_____】三大要素组成。 12. 将SQL嵌入主语言使用时必须解决三个问题,它们是:区分【12_____】语句与主语言语句、数据库工作单元和程序工作单元之间的通信以及协调SQL语句与主语言语句处理记录的不同方式。 13. 支持对于所要求的数据进行快速定位的附加数据结构称为【13_____】。 14. 事务通过执行LOCK\\|S(Q)指令来申请数据项Q上的【14_____】锁。 15. SQL Server 2000使用【15_____】语言来定义和操作数据,它是对标准SQL\\|92语言的功能扩充。 16. Oracle数据库可以存储极大的对象,CLOB表示【16_____】大对象。 17. 增广律是Armstrong公理系统的推理规则之一,它的含义是:设F是属性组U上的一组函数依赖,若X→Y为F所逻辑蕴含,且ZU,则【17_____】为F所逻辑蕴含。 18. 在数据库设计中,进行E\\|R模型向关系模型的转 19. 对象数据库设计与关系数据库设计的主要区别是如何处理联系和【19_____】,以及操作的指定问题。 20. 数据挖掘是一个从原始数据到信息再到【20_____】的发展过程。换是【18_____】结构设计阶段的任务。 1、答案:C 解析:冯•诺依曼“存储程序”工作原理的核心包含两层含义: ①将编写好的程序和原始数据存储在计算机的存储器中,即“存储程序”。 ②计算机按照存储的程序逐条取出指令加以分析,并执行指令所规定的操作。即“程序控制”。 2、答案:B 解析:目前常见的I/O总线有如下几种: ①PCI总线是一种不依附于某个处理器的局部总线,支持多种外设,并能在高时钟频率下保持高性能。 ②USB通用串行总线是一种连接I/O串行设备的技术标准。 ③1394总线是为家用电器研制的一种高速串行总线标准。 3、答案:D 解析:局域网的技术特点主要表现在: ①局域网覆盖有限的地理范围。 ②提供高数据传输速率(10~1000Mbps)、低误码率的高质量数据传输环境。 ③一般属于一个单位所有,易于建立、维护与扩展。 ④决定局域性的主要技术要素为网络拓扑、传输介质于介质访问控制方法。 ⑤从介质访问控制方法的角度,局域网可分为共享式局域网与交换式局域网。 4、答案:B 5、答案:D 解析:防火墙是网络安全策略的有机组成部分,它通过控制和监测网络之间的信息交换和访问行为来实现对网络安全的有效管理。 6、答案:A 解析:云计算(Cloud Computing)是网格计算(Grid Computing )、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(UtilityComputing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机技术和网络技术发展融合的产物。它旨在通过网络把多个成本相对较低的计算实体整合成一个具有强大计算能力的完美系统,并借助SaaS、PaaS、IaaS、MSP等先进的商业模式把这强大的计算能力分布到终端用户手中。Cloud Computing的一个核心理念就是通过不断提高“云”的处理能力,进而减少用户终端的处理负担,最终使用户终端简化成一个单纯的输入输出设备,并能按需享受“云”的强大计算处理能力。 7、答案:C 解析:一个数据元素可由一个或多个数据项组成。 8、答案:D 解析:数据的运算定义在数据的逻辑结构上,运算的具体实现要在存储结构上进行。 9、答案:D 10、答案:B 11、答案:C 12、答案:D 13、答案:C 解析:散列表的平均检索长度不依赖于元素的个数,平均检索长度不随表中元素的个数增加而增加,而是随负载因子的增大而增加。 14、答案:C 答案:A 15、解析:直接选择排序的基本思想是:每次从待排序的记录中选出关键码值最小(或最大)的记录,顺序放在已排序的最后,直到全部排完。排序时,第一趟从n个关键码中选出最小关键码,需要n-2次排序„„。因此直接选择排序法总的关键码比较次数与记录的初始状态无关,正确答案为选项A。 16、答案:A 17、答案:C 18、答案:A 19、答案:B 解析:银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。 20、答案:B 解析:如果分区起始地址(S)+长度(L)正好等于空闲区表中某个登记的栏目(假定为第i栏)所示分区的起始地址,则表明归还区有一个下临空闲区,需要进行合并,即修改第i栏登记项的内容:起始地址等于S,长度为原长度加上L。 21、答案:D 22、答案:D 23、答案:C 24、答案:A 解析:SPOOLing系统的引入缓和了CPU与设备的速度的不对称,提高了CPU与设备的并行程度。 25、答案:B 26、答案:B 27、答案:D 28、答案:A 解析:数据库中只有一个模式,也只有一个内模式,所以模式/内模式的映像是唯一的,它是定义数据库全局逻辑结构与存储结构之间的对应关系。 29、答案:C 解析:数据库是按一定结构组织、并可以长期存储在计算机内的、具有某些内在含义的、在逻辑上保持一致的、可共享的大量数据集合。 30、答案:B 解析:SQL 语言ALTER TABLE语句扩充和修改基本表,其一般格式为: ALTER TABLE<表名> [ADD<列名><数据类型>[<完整性约束>]][ ADD<完整性约束>] [DROP<列名>{CASCAD︱RESTRICT}][DROP<完整性约束>] [MODIY<列名><数据类型>]; 31、答案:A 解析:select是查询的意思。但查询操作可以分为:选择(select),投影(project ),连接 (join),除(divide),并(union),差(except),交(intersection),笛卡儿积等。其中投影是从关系中选择出若干属性列组成新的关系。例如:select a from table1即为查询table1关系上a属性上的投影。 32、答案:D 33、答案:A 解析:CLUSTER表示要建立的索引是聚簇索引。所谓的聚簇索引是指索引项的顺序于表中记录的物理顺序一致的索引组织。执行题中SQL语句后,将会在emp表的salary列上建立一个聚簇索引,而且emp表中的记录将按照salary值的升序存放。 34、答案:B 35、答案:B 解析:在面向对象模型中,子类不但可以从其超类中继承所有的属性和方法,而且还可以定义自己的属性和方法,这样在已有类的基础上定义新类时,可以只定义特殊的属性和方法,而不必定义父类已有的东西,这有利于实现可扩充性。 36、答案:C 37、答案:C 38、答案:A 39、答案:A 40、答案:B 42、答案:B 解析:在数据库系统中,除了存储关系中的数据外,还需要维护关于数据库的描述信息,这类信息称为数据字典,或系统目录。系统数据也称数据字典或系统目录和元数据。 43、答案:D 解析:第二级和第三级存储器是非易失性存储,即使设备断电,所存的内容也不会丢失。 44、答案:D 45、答案:C 46、答案:D 解析:Pubs提供一个SQL Server的标准数据库,作为练习的工具 47、答案:D 解析:SQL Server 2000中常用的数据库对象包括:表、数据类型、约束、规则、视图、索引、默认值、触发器、存储过程、用户自定义函数。 48、答案:C 解析:Oracle Express Analyzer用于扩充使用Oracle Express Objects编写的应用软件。 49、答案:A 解析:Oracle的核心是关系型数据库,其面向对象的功能是通过对关系功能的扩充而实现的。 50、答案:C 51、答案:D 52、答案:A 53、答案:C 54、答案:D 55、答案:A 57、答案:A 解析:当前在对企业信息系统设计过程中,人们一般将信息系统按照逻辑结构划分为表现层、应用逻辑层和数据逻辑层三层。 58、答案:B 解析:Power Designer DataArchitect可用于两层(概念层和物理层)数据库设计和数据库构造。 59、答案:D 60、答案:D 解析:数据仓库和OLAP操作都是基于数据模型。度量属性是决策者所关心的具有实际意义的数量。 1、答案:【1】32 2、答案:【2】认证 3、答案:【3】稀疏 4、答案:【4】n+1 5、答案:【5】「m/2(6、答案:【6】外存 取上限) 6、答案:【6】外存 7、答案:【7】消息机制 8、答案:【8】最佳6、答案:【6】外存 9、答案:【9】数据库系统 10、答案:【10】行列子集 11、答案:【11】关系完整性约束 12、答案:【12】SQL 13、答案:【13】索引 14、答案:【14】共享锁 15、答案:【15】T\\|SQL 16、答案:【16】字符数据型 17、答案:【17】XZ→YZ 18、答案:【18】逻辑 19、答案:【19】继承 20、答案:【20】知识__ 2011三级数据库技术上机试题题目及答案汇编 1.调用函数rwdata(),从IN.dat文件中读取10组数据(m和k值),并嵌套调用primenum函数分别得出array[]数组。请编写函数primenum(int m,int k,int array[]),该函数的功能是:将紧靠m的k个素数存入数组array并在屏幕上显示。最后把结果输出到文件OUT.dat中。 例如,若输入3 9,则应输出5 7 11 13 17 19 23 29 31。 注意:部分程序已经给出。请勿改动主函数main()和输出数据函数rwdata()的内容。 【答案】 void primenum(int m, int k, int array[]) { int value = m+1; int half, n = 0, i; while(1) { half = value/2; for (i=2; i<=half; i++) if (value%i == 0) break; if (i > half) { array[n] = value; n++; } if (n >= k) break; value++; } } 2.在文件IN.dat中有200个正整数,且每个数均在1000~9999之间。函数RData()读取这200个数存放到数组original中。请编写函数numAscend(),其功能是:要求按每个数的后3位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组result中,如果后3位的数值相等,则按原先的数值进行降序排列。最后调用函数WData(),把结果result输出到文件OUT.dat中。 例如,处理前:6012 5099 9012 7025 8088 处理后:9012 6012 7025 8088 5099 【答案】 void numascend() { int i, j, data; for (i=0; i<199; i++) for (j=i+1; j<200; j++) { if (original[i]%1000 > original[j]%1000) { data = original[i]; original[i] = original[j]; original[j] = data; } else if (original[i]%1000 == original[j]%1000) { if (original[i] < original[j]) { data = original[i]; original[i] = original[j]; original[j] = data; } } } for (i=0; i<10; i++) result[i] = original[i]; } 3.已知文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写函数DescSort(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】 void DescSort() { int i, j; PRO temp; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (strcmp(sell[i].code, sell[j].code) < 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } else if (strcmp(sell[i].code, sell[j].code) == 0) { if (sell[i].sum < sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 4.函数RData()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组str中;请编写encryptChar()函数,其功能是:按给定的替代关系对数组str中的所有字符进行替代,仍存入数组str对应的位置上,最后调用函数WData(),把结果str输出到文件OUT.dat中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于1等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 5.函数RData()实现从文件IN.dat中读取一篇英文文章存入到字符串数组str中,请编写函数DescSort(),其功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组str中,最后调用函数WData(),把结果str输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 例如,原文:dAeBfC. CcbbAA 结果:fedCBA. cbbCAA 【答案】 void DescSort(void) { int i, j, k, strl; char ch; for (i=0; i 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】 void StrCharMove(void) { int i, j, strl; for (i=0; i 7.编写函数findStr(),其功能是:统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为\"asd asasdfg asd as zx67 asd mklo\",子字符串为\"as\",函数返回值是6。 函数ReadWrite()实现从文件IN.dat中读取两个字符串,并调用函数findStr(),最后,把结果输出到文件OUT.dat中。 【答案】 int findStr(char *str, char *substr) { int n; char *p, *r; n = 0; while (*str) { p = str; r = substr; while (*r) if (*r == *p) { r++; p++; } else { break; } if (*r == '\\0') n++; str++; } return n; } 8.请编写函数CountValue(),它的功能是:求n以内(不包括n),同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。 主函数最后调用函数progReadWrite()从IN.dat文件中读取10组数据,分别得出结果,且把结果输出到文件OUT.dat中。 例如,若n为1000时,函数值应为:s=153.9090。 【答案】 double countValue(int n) { double xy = 0.0; int i; for (i=1; i 【答案】 void CalValue(void) { int i; double x, sum = 0; for (i=0; i 10.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数primeNum(),其功能是:求出所有这些四位数中素数的个数count,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数Wdata(),把结果输出到OUT.dat文件中。 例如,5591是素数,则该数满足条件存入数组b中,且个数count=count+1。9812是非素数,则该数不满足条件,不存入数组b中,count值也不加1。 【答案】 void primeNum() { int j, i, value; for (i=0; i<300; i++) if (isP(a[i])) { b[count] = a[i]; count++; } for (i=0; i 11.下列程序的功能是:把s字符串中的所有字符左移一个位置,字符串中的第一个字符移到最后。请编写函数change(char*s)实现程序要求,最后调用函数readwriteDAT()从IN.dat文件中读取50组数据,分别得出结果,且把结果输出到OUT.dat文件中。 例如,s字符串中原有内容为:Mn.123xyZ,调用该函数后结果为:n.123xyZM。 【答案】 void change(char*s) { int i, strl; char ch; strl = strlen(s); ch = *s; for (i=0; i 【答案】 void primeNum() { int i; for(i=2;i<=90;i++) if(isPrime(i) && isPrime(i+4) && isPrime(i+10)) { count++; sum+=i; } } 容 13.函数Rdata()实现从文件IN.dat中读取一篇英文文章存入到字符串数组string中,请编写ConvertCharD()函数,其功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变,最后把已处理的字符串仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。 例如,原文:Adb.Bcdza abck.LLhj 结果:Aca.Bbcyz zabj.LLgi 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void ConvertCharD(void) { int i; char *pf; for (i=0; i 14.请编写函数countValue(),它的功能是:求出1~1000之内能被7或11整除但不能同时被7或11整除的所有整数,将它们放在数组a中,并通过n返回这些数的个数。主函数最后调用函数Wdata()把计算结果输出到OUT.dat中。 【答案】 void countValue(int *a, int *n) { int i; *n = 0; for (i=1; i<=1000; i++) if (i%7==0 && i%11) { *a = i; *n = *n+1; a++; } else if (i%7 && i%11==0) { *a = i; *n = *n+1; a++; } } 15.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数primeCal(),其功能是:求出这些四位数中素数的个数count,再求出所有满足此条件的四位数的平均值Ave1以及不满足此条件的四位数的平均值Ave2。最后调用写函数Wdata(),把结果count、Ave1、Ave2输出到OUT.dat文件中。 例如,5591是素数,则该数满足条件计算平均值Ave1,且个数count=count+1。9812是非素数,则该数不满足条件计算平均值Ave2。 【答案】 void primeCal() { int i; for (i=0; i<300; i++) if (isP(a[i])) { Ave1 += a[i]; count++; } else { Ave2 += a[i]; } Ave1 = Ave1/count; Ave2 = Ave2/(300-count); } 16.下列程序的功能是:寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。所谓回文数是指各位数字左右对称的整数,例如121、676、94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编写函数int palindromevalue(long n)实现功能:如果是回文数,则函数返回1,反之则返回0。最后,把结果输出到文件OUT.dat中。 【答案】 int palindromevalue(long n) { int i, strl, half; char temp[20]; ltoa(n, temp, 10); strl = strlen(temp); half = strl/2; for (i=0; i 17请补充程序,使得程序能实现以下功能: 从文件IN.dat中读取200个整数至数组number中,求出奇数的个数cnt1和偶数的个数cnt2以及数组number下标为偶数的元素值的算术平均值ave(保留2位小数)。把结果cnt1、cnt2、ave输出到OUT.dat中。 【答案】 for (i=0, j=0, cnt1=0, cnt2=0; i 18.函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组string中,请编写函数CharRight(),其功能是:以行为单位把字符串中的最后一个字符的ASCII值右移4位后加倒数第二个字符的ASCII值,得到最后一个新的字符;倒数第二个字符的ASCII值右移4位后加倒数第三个字符的ASCII值,得到倒数第二个新的字符;依此类推,一直处理到第二个字符;第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的字符。得到的新字符分别存放在原字符串对应的位置上,最后已处理的字符串仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】 void CharRight(void) { int i, j, strl; char ch; for (i=0; i 19.已知数据文件IN.dat中存有200个四位数,并已调用读函数rdata()把这些数存入数组a中,请编写函数evenvalue(),其功能是:如果四位数每位上的数字均是0、2、4、6或8,则统计出满足此条件的四位数的个数count,并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void evenvalue() { int bb[4]; int i, j, k, flag; for (i=0; i<200; i++) { bb[0] = a[i]/1000; bb[1] = a[i]%1000/100; bb[2] = a[i]%100/10; bb[3] = a[i]%10; for (j=0; j<4; j++) { if (bb[j]%2 == 0) { flag = 1; } else { flag = 0; break; } } if (flag == 1) { b[count] = a[i]; count++; } } for (i=0; i 结果:n any field.Yu can create an index rd.yu have the crlrectrec 【答案】 void Strmove(void) { int i, j, k; char buf[80]; for (i=0; i 21.函数RData()实现从文件IN.dat中读取一篇英文文章并存入到字符串数组StrResult中,请编写函数StrRes(),其功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组StrResult中,最后调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 例如,原文:You He Me I am a student. 结果:Me He You student a am I 【答案】 char StrRes(void) { int i, j, k, strl, l; for (i=0; i 22.下列程序的功能是:把str字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。 请编写函数CharChange(char*str)实现程序要求,最后调用函数RWData()从IN.dat文件中读取50组数据,分别得出结果,并把结果输出到文件OUT.dat中。 例如,str字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。 【答案】 void CharChange(char *str) { while (*str) { if (*str=='z' || *str=='Z') *str -= 25; else if (isalpha(*str)) *str += 1; str++; } } 23.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中,金额=单价×数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写AscendSort()函数,其功能是:按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】 void AscendSort() { int i, j; PRO temp; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (strcmp(sell[i].name, sell[j].name) > 0) { temp = sell[i]; sell [i] = sell[j]; sell[j] = temp; } else if (strcmp(sell[i].name, sell[j].name) == 0) { if (sell[i].sum > sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 24.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数evenVal(),其功能是:若一个四位数的千位上的数字值小于等于百位上的数字值,百位上的数字值小于等于十位上的数字值,以及十位上的数字值小于等于个位上的数字值,并且该四位数是偶数,则统计出满足此条件的个数count,并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 程序中已定义数组a[200],、b[200],已定义变量count。 【答案】 void evenVal() { int i, j; int a1, a2, a3, a4, k; for (i=0; i a1 <= a2、a2 <= a3、a3 <= a4、a[i]%2 == 0这4个条件同时成立,则a[i]就是要求下列程序的功能是:在三位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;该整数既是完全平方数,又有两个数字相同,例如144、676等。请编写函数SearchVal()实现此功能,满足该条件的整数的个数通过所编写的函数返回。最后调用函数WData(),把结果输出到文件OUT.dat中。 注意:部分源程序已给出。请勿改动主函数main()和写函数WData()的内容。 【答案】 searchVal(int bb[]) { int i, a, b, c, cnt = 0; for (i=10; i*i<1000; i++) { a = i*i/100; b = i*i/10%10; c = i*i%10; if (a==b || b==c || c==a) bb[cnt++] = i*i; } return cnt; } 26.已知数据文件IN.dat中存有300个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于0的数的个数count,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数WData(),把结果输出到OUT.dat文件中。 例如,9123,9-1-2-3>0,则该数满足条件存入数组b中,且个数count=count+1。9812,9-8-1-2<0,则该数不满足条件,忽略。 程序中已定义数组a[300],b[300];已定义变量count。 【答案】 void jsValue() { int i, thou, hun, ten, data, j; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou-hun-ten-data > 0) { b[count] = a[i]; count++; } } for (i=0; i 27函数Rdata()实现从文件IN.dat中读取一篇英文文章存入到字符串数组string中,请编写函数CharLeft(),其功能是:以行为单位把字符串中所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组string中,最后调用函数Wdata(),把结果string输出到文件OUT.dat中。 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】 void CharLeft(void) { int i, j, str; char ch; for (i=0; i 28.已知在文件IN.dat中存有若干个(<200)四位数字的正整数,函数RData()读取这若干个正整数并存入数组original中。请编写函数CalValue(),其功能要求是:①求出这个文件有多少个正整数totNum;②求这些数右移1位后, 产生的新数是偶数的数的个数toteven,以及满足此条件的这些数(右移前的值)的算术平均值totavg。最后调用函数WData()把所求的结果输出到OUT.dat文件中。 【答案】 void CalValue(void) { int i, data; for (i=0; i 29.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数spellVal(),其功能是:把千位数字和十位数字重新组成一个新的二位数ab(新二位数的十位数字是原四位数的千位数字,新二位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的二位数cd(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的百位数字),如果新组成的两个二位数ab-cd≥0且ab-cd≤10且两个数均是奇数,同时两个新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数count。最后main()函数调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void spellVal() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou==0 || data==0) continue; ab = 10*thou+ten; cd = 10*data+hun; if ((ab-cd)>=0 && (ab-cd)<=10 && ab%2==1 && cd%2==1) { b[cnt] = a[i]; cnt++; } } for (i=0; i { int i, j, flag = 0; for (i=0; i 31.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到OUT.dat文件中。 【答案】 void SortDat() { int i, j; PRO temp; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (sell[i].sum < sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } else if (sell[i].sum == sell[j].sum) { if (strcmp(sell[i].code, sell[j].code) < 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 32.请补充完整RData()函数,实现从文件IN.DET中读取1000个十进制整数到数组evennum中,请编写函数Compute()分别计算出evennum中奇数的个数odd,偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及所有偶数的方差totfc的值。最后调用函数WData(),把结果输出到OUT.dat文件中。 计算方差的公式如下: 其中:N为偶数的个数,evennum[i]为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。 【答案】 void Compute(void) { int i, result[MAX]; for (i=0; i<1000; i++) if (evennum[i]%2) { odd++; ave1 += evennum[i]; } else { even++; ave2 += evennum[i]; result[even-1] = evennum[i]; } ave1 /= odd; ave2 /= even; for (i=0; i 说明:在程序中已给出了10个序列,每个序列有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。 例如:序列{6,8,9,1,2,5,4,7,3} 经重排后成为{3,4,5,2,1,6,8,9,7} 【答案】 NumSort(int a[10][9]) { int value, i, j, k, num; for (i=0; i<10; i++) { value = a[i][0]; for (j=0; j<9; j++) if (a[i][j] < value) { num = a[i][j]; for (k=j; k>0; k--) a[i][k] = a[i][k-1]; a[i][0] = num; } } } 34.下列程序的功能是:选出100以上、1000之内所有个位数字与十位数字之和被10除所得余数恰好是百位数字的素数(如293),计算并输出上述这些素数的个数count以及这些素数值的和sum。请编写函数countValue()实现程序要求。最后调用函数WData(),把结果count和sum输出到OUT.dat文件中。 【答案】 void countValue() { int i, j, half, hun, ten, data; for (i=101; i<1000; i++) { hun = i/100; ten = i%100/10; data = i%10; if (hun == (ten+data)%10) { half = i/2; for (j=2; j 35.函数RData()实现从文件IN.dat中读取一篇英文文章,存入字符串数组str中,请编写函数encryptChar(),其功能是:按给定的替代关系对数组str中的所有字符进行替代后,仍存入数组str的对应位置上。最后调用函数WData(),把结果str输出到OUT.dat文件中。 替代关系:f(p)=p*11mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是数字0~9,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 36.函数RData()实现从文件IN.dat中读取一篇英文文章,存入字符串数组str中,请编写函数encryptChar(),其功能是:按给定的替代关系对数组str中的所有字符进行替代后,仍存入数组str的对应位置上。最后调用函数WData(),把结果str输出到OUT.dat文件中。 替代关系:f(p)=p*11mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是数字0~9,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i } 37.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能是:按产品代码从小到大进行排列,若产品代码相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到OUT.dat文件中。 【答案】 void SortDat() { int i, j; PRO temp; for (i=0; i 38.已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数RData()读取若干个正整数并存入数组original中。请编写函数CalValue(),其功能要求是:①求出这个文件有多少个正整数totNum;②求这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totave。最后调用函数WData()把所求的结果输出到OUT.dat文件中。 【答案】 void CalValue(void) { int i, thou, hun, ten, data; int ab; long sum = 0; for (i=0; i if (ab%2 == 0) { totCnt++; sum = sum+original[i]; } } totave = (double)sum/totCnt; } 39.下列程序的功能是:计算出自然数SIX和NINE、它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和sum,请编写函数countValue()实现程序的要求。最后调用函数WData(),把结果cnt和sum,输出到OUT.dat文件中。 其中的S、I、X、N、E各代表一个十进制数。 【答案】 void countValue() { int S, I, X, N, E; int SIX, NINE; for (S=1; S<10; S++) for (I=0; I<10; I++) for (X=0; X<10; X++) for (N=1; N<10; N++) for (E=0; E<10; E++) { SIX = S*100+I*10+X; NINE = N*1000+I*100+N*10+E; if (SIX*3 == NINE*2) { cnt++; sum += SIX+NINE; } } } 40.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】 void SortDat() { int i, j; PRO temp; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (strcmp(sell[i].name, sell[j].name) < 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } else if (strcmp(sell[i].name, sell[j].name) == 0) { if (sell[i].sum < sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 41. 函数RData()实现从文件IN.dat中读取20行数据存放到字符串数组str中(每行字符串长度均小于80)。请编写函数oddSort(),其功能是:以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组str中。最后调用函数WData(),把结果str输出到OUT.dat文件中。 例如,位置 0 1 2 3 4 5 6 7 源字符串 h g f e d c b a 则处理后字符串 h a f c d e b g 【答案】 void oddSort() { int i, j, k, strl; char ch; for (i=0; i<20; i++) { strl = strlen(str[i]); for (j=1; j 42.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数evenVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以前的5个数且该数是偶数(该四位数以前不满5个数,则不统计),则统计出满足此条件的个数count并把这些四位数按从大到小的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void evenVal() { int i, j, flag = 0; for (i=5; i { flag = 1; } else { flag = 0; break; } if (flag==1 && a[i]%2==0) { b[count] = a[i]; count++; } } for (i=0; i 【答案】 void SortDat() { int i, j; PRO temp; for (i=0; i 44.函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入字符串数组str中。请编写函数encryptChar(),其功能是:按给定的替代关系对数组str中的所有字符进行替代后,仍存入数组str的对应位置上。最后调用函数Wdata(),把结果str输出到OUT.dat文件中。 替代关系:f(p)=p*11mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是小写字母,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 45.已知数据文件IN.dat中存有300个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数spellVal(),其功能是:求出千位上的数加个位上的数等于百位上的数加十位上的数的个数count,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数WData(),把结果输出到OUT.dat文件中。 例如,6712,6+2=7+1,则该数满足条件存入数组b中,且个数count=count+1。8129,8+9!=1+2,则该数不满足条件,不存入数组b中,count变量也不加1。 【答案】 void spellVal() { int i, thou, hun, ten, data, j; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou+data == hun+ten) { b[count] = a[i]; count++; } } for (i=0; i 46.已知数据文件IN.dat中存有300个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数diffVal(),其功能是:求出千位上的数减百位上的数减十位上的数减个位上的数大于0的个数count,再求出所有满足此条件的四位数的平均值ave1,以及不满足此条件的四位数的平均值ave2。最后调用写函数WData(),把结果输出到OUT.dat文件中。 例如,9123,9-1-2-3>0,则该数满足条件,计算平均值ave1,且个数count=count+1。9812,9-8-1-2<0,则该数不满足条件,计算平均值ave2。 【答案】 void diffVal() { int i, thou, hun, ten, data, n = 0; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou-hun-ten-data > 0) { count++; ave1 += a[i]; } else { n++; ave2 += a[i]; } } ave1 /= count; ave2 /= n; } 47. 已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数spellNum(),其功能是:把千位数字和十位数字重新组成一个新的二位数(新二位数的十位数字是原四位数的千位数字,新二位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的二位数(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的百位数字),如果新组成的两个二位数均是素数且新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数count。最后main()函数调用写函数Wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void spellNum() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou==0 || data==0) continue; ab = 10*thou+ten; cd = 10*data+hun; if (isprime(ab) && isprime(cd)) { b[count] = a[i]; count++; } } for (i=0; i 设n=100,s=1,m=10。 ①将1到n个人的序号存入一维数组p中;②若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;③重复第②步直至圈中只剩下p[1]为止。 【答案】 void Josegh(void) { int i, j, s1, w; s1 = s; for (i=1; i<=n; i++) p[i-1] = i; for (i=n; i>=2; i--) { s1 = (s1+m-1)%i; if (s1 == 0) s1 = i; w = p[s1-1]; for (j=s1; j<=i-1; j++) p[j-1] = p[j]; p[i-1] = w; } } 49.函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组string中。请编写encryptChar()函数,其功能是:按给定的替代关系对数组string中的所有字符进行替代后,仍存入数组string的对应位置上。最后调用函数Wdata(),把结果string输出到OUT.dat文件中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是大写字母,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 50.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数diffNum(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于0的个数count,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数Wdata(),把结果输出到OUT.dat文件中。 例如,9123,9-1-2-3>0,则该数满足条件存入数组b中,满足条件count加1。9812,9-8-1-2<0,则该数不满足条件,count不变。 【答案】 void diffNum() { int i, thou, hun, ten, data, j; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou-hun-ten-data > 0) { b[count] = a[i]; count++; } } for (i=0; i 51.已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数spellNum(),其功能是:把千位数字和十位数字重新组成一个新的二位数ab(新二位数的十位数字是原四位数的千位数字,新二位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的二位数cd(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的百位数字),如果ab void spellNum() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou==0 || data==0) continue; ab = 10*thou+ten; cd = 10*data+hun; if (ab 【答案】 int numSort() { int i, cnt = 0, j; data ch; for (i=0; i<200; i++) if (aa[i].x2 > aa[i].x1+aa[i].x3) { bb[cnt] = aa[i]; cnt++; } for (i=0; i 【答案】 void CalVal() { int i, thou, hun, ten, data, j; for (i=0; i { data = b[i]; b[i] = b[j]; b[j] = data; } } 54.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WriteDat(),把结果输出到OUT.dat文件中。 注 【答案】 void SortDat() { int i, j; PRO temp; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (sell[i].sum > sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } else if (sell[i].sum == sell[j].sum) { if (strcmp(sell[i].code, sell[j].code) < 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 55.已知在文件IN.dat中存有若干个(不多于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文件中所有的正整数个数totNum;②求这些数中的各位数字之和是奇数的个数totCnt,以及满足此条件的这些数的算术平均值totave。最后调用函数writeDat()把所求的结果输出到OUT.dat文件中。 【答案】 void CalValue(void) { int i, thou, hun, ten, data; for (i=0; i ten = number[i]%100/10; data = number[i]%10; if ((thou+hun+ten+data)%2) { totCnt++; totave += number[i]; } } totave /= totCnt; } 56.下列程序的功能是:计算500~800区间内素数的个数count,并按所求素数的值从大到小的顺序排序,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数„„的值sum。请编写函数primeValue()实现程序的要求。最后调用函数writeDat(),把结果count和sum输出到OUT.dat文件中。 【答案】 void primeValue() { int i, j, half, yy[100]; for (i=800; i>=500; i--) { half = i/2; for (j=2; j 【答案】 void calValue() { int i, thou, hun, ten, data; for (i=5000; i>=1000; i--) { thou = i/1000; hun = i%1000/100; ten = i%100/10; data = i%10; if (thou+hun==ten+data && thou+hun==(data-thou)*10) { count++; sum += i; } } } 58.已知数据文件IN.dat中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请编写函数primecount(),其功能是:如果四位数各个位上的数字均是奇数,则统计出满足此条件的个数count并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数writeDat(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void primecount() { int i, thou, hun, ten, data, j; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou%2!=0 && hun%2!=0 && ten%2!=0 && data%2!=0) { b[count] = a[i]; count++; } } for (i=0; i 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 60.已知数据文件IN.dat中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请编写函数diffVal(),其功能是:把一个四位数的千位数字上的值,减去百位数字上的值,再减去十位数字上的值,最后减去个位数字上的值,如果得出的值大于等于0且原四位数是奇数,则统计出满足此条件的个数count并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数writeDat(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void diffVal() { int i, thou, hun, ten, data, j; for (i=0; i 61.已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文件有的正整数个数totNum;②求这些数右移1位后,产生的新数是奇数的数的个数totCnt以及满足此条件的这些数(右移前的值)的算术平均值totAve。最后调用函数writeDat()把所求的结果输出到OUT.dat文件中。 【答案】 void CalValue(void) { int i, data; for (i=0; i 62.已知数据文件IN.dat中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请编写函数spellNum(),其功能是:把个位数字和千位数字重新组成一个新的二位数(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的二位数(新二位数的十位数字是原四位数的百位数字,新二位数的个位数字是原四位数的十位数字),如果新组成的两个二位数均是偶数并且两个二位数中至少有一个数能被9整除,同时两个新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat(),把结果cnt以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void spellNum() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i 63.在文件IN.dat中有200组数据,每组有3个数,每个数均是三位数。函数Rdata()读取这200组数据存放到结构数组aa中,请编写函数greatSort(),其功能是:要求在200组数据中找出条件为每组中的第1个数大于第2个数加第3个数的和,其中满足条件的组数作为函数greatSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第1个数加第3个数之和的大小进行升序排列(第1个数加第3个数的和均不相等),排序后的结果仍重新存入结构数组bb中。最后调用函数Wdata(),把结果bb输出到OUT.dat文件中。 【答案】 int greatSort() { int i, j, count = 0; data val; for (i=0; i<200; i++) if (aa[i].x1 > aa[i].x2+aa[i].x3) { bb[count] = aa[i]; count++; } for (i=0; i .已知数据文件IN.dat中存有200个四位数,并已调用读函数rData()把这些数存入数组a中,请编写函数spellNum(),其功能是:把个位数字和千位数字重新组成一个新的二位数(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的二位数(新二位数的十位数字是原四位数的百位数字,新二位数的个位数字是原四位数的十位数字),如果新组成的两个二位数一个是奇数,另一个为偶数,并且两个二位数中至少有一个数能被17整除,同时两个新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数count。最后main()函数调用写函数wData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void spellNum() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (data==0 || hun==0) continue; ab = 10*data+thou; cd = 10*hun+ten; if ((ab-cd)%2!=0 && (ab*cd)%17==0) { b[count] = a[i]; count++; } } for (i=0; i 【答案】 void diffCal() { int i, thou, hun, ten, data, j; for (i=0; i 66.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数NumCal(),其功能是:求出千位上的数加个位上的数等于百位上的数加十位上的数的四位数的个数count,再求出所有满足此 条件的四位数的平均值Ave1,以及不满足此条件的四位数的平均值Ave2。最后调用写函数Wdata(),把结果输出到OUT.dat文件中。 例如,6712,6+2=7+1,则该数满足条件计算平均值Ave1,且个数count=count+1。8129,8+9!=1+2,则该数不满足条件计算平均值Ave2。 【答案】 void NumCal() { int i, n = 0, thou, hun, ten, data; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou+data == hun+ten) { count++; Ave1 += a[i]; } else { n++; Ave2 += a[i]; } } Ave1 /= count; Ave2 /= n; } 67.函数Rdata()实现从文件IN.dat中读取一篇英文文章存入字符串数组string中,请编写函数SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到OUT.dat文件中。 例如,原文:dAe,BfC. CcbbAA 结果:,.ABCdef AACbbc 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】 void SortCharA(void) { int i, j, k, strl; char ch; for (i=0; i string[i][k] = ch; } } } 68.已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数NumCal(),其功能是:把一个四位数的千位数字上的值加上个位数字上的值恰好等于百位数字上的值加上十位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数count并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数Wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void NumCal() { int i, thou, hun, ten, data, j; for (i=0; i 69.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数diffVal(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于0的个数count,再求出所有满足此条件的四位数的平均值Ave1,以及不满足此条件的四位数平均值Ave2。最后调用写函数Wdata(),把结果输出到OUT.dat文件中。 例如,1239,9-1-2-3>0,则该数满足条件计算平均值Ave1,且个数count=count+1。8129,9-8-1-2<0,则该数不满足条件计算平均值Ave2。 【答案】 void diffVal() { int i, thou, hun, ten, data, n = 0; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (data-thou-hun-ten > 0) { count++; Ave1 += a[i]; } else { n++; Ave2 += a[i]; } } Ave1 /= count; Ave2 /= n; } 70.函数ReadDat()实现从文件IN.dat中读取1000个十进制整数到数组xx中。编写函数Compute(),其功能是:分别计算出xx数组中奇数的个数odd、奇数的平均值ave1、偶数的个数even、偶数的平均值ave2,以及所有奇数的方差totfc的值。调用函数WriteDat(),把结果输出到OUT.dat文件中。计算方差的公式如下: 其中:N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。 原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。 【答案】 void Compute(void) { int i, yy[MAX]; for (i=0; i<1000; i++) if (xx[i]%2) { odd++; ave1 += xx[i]; yy[odd-1] = xx[i]; } else { even++; ave2 += xx[i]; } ave1 /= odd; ave2 /= even; for (i=0; i 【答案】 max = number[0]; for (i=1, k=0; i for (i=0, cnt=0; i 72.函数RData()实现从文件IN.dat中读取一篇英文文章,存入字符串数组str中,请编写函数encryptChar(),其功能是:按给定的替代关系对数组str中的所有字符进行替代后,仍存入数组str的对应位置上。最后调用函数WData(),把结果str输出到OUT.dat文件中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是大写字母或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 73.函数ReadDat()实现从文件IN.dat中读取1000个十进制整数到数组xx中;请编写函数Compute()分别计算出数组xx中奇数的个数odd、偶数的个数even,以及所有数的平均值aver和方差totfc的值。最后调用函数WriteDat(),把结果输出到OUT.dat文件中。 计算方差的公式如下: 原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。 【答案】 void Compute(void) { int i; for (i=0; i<1000; i++) { if (xx[i]%2) odd++; else even++; aver = aver+xx[i]; } aver /= MAX; for (i=0; i<1000; i++) totfc += (xx[i]-aver)*(xx[i]-aver)/MAX; } 74.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数Rdata()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数Wdata(),把结果输出到OUT.dat文件中。 void SortDat() { int i, j; PRO xy; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (sell[i].sum > sell[j].sum) { xy = sell[i]; sell[i] = sell[j]; sell[j] = xy; } else if (sell[i].sum == sell[j].sum) { if (strcmp(sell[i].code, sell[j].code) > 0) { xy = sell[i]; sell[i] = sell[j]; sell[j] = xy; } } } 75.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数cgVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的5个数且该数是奇数,则统计出满足此条件的个数count并把些四位数按从小到大的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 程序中已定义数组a[200]、b[200],已定义计数变量count。 【答案】 void cgVal() { int i, j, flag = 0; int k; for (i=0; i 76.函数RData()实现从文件IN.dat中读取20行数据存放到字符串数组str中(每行字符串长度均小于80)。请编写函数stringSort(),其功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组str中。最后调用函数WData(),把结果str输出到OUT.dat文件中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如,位置 0 1 2 3 4 5 6 7 8 原字符串 a b c d h g f e 1 2 3 4 9 8 7 6 5 处理后字符串 h g f e d c b a 位置 8 7 6 5 9 4 3 2 1 【答案】 void stringSort() { int i, j, k, strl, half; char ch; for (i=0; i<20; i++) { strl = strlen(str[i]); half = strl/2; for (j=0; j 77.函数RData()的功能是实现从文件IN.dat中读取一篇英文文章存入到字符串数组original中。请编写函数CharAdd(),其功能是:以行为单位把字符串中的第1个字符的ASCII值加第2个字符的ASCII值,得到第1个新字符,第2个字符的ASCII值加第3个字符的ASCII值,得到第2个新字符,以此类推,一直处理到倒数第2个字符,最后1个字符的ASCII值加原第1个字符的ASCII值,得到最后1个新的字符。得到的新字符分别存放在原字符串对应的位置上,最后把已处理的字符串逆转后按行重新存入字符串数组original中。最后调用函数WData(),把结果original输出到OUT.dat文件中。 原始数据文件存放的格式是:每行的宽度均小于 80个字符(含标点符号和空格)。 【答案】 void CharAdd(void) { int i, j, k, str; char ch; for (i=0; i 最后调用函数WData()从IN.dat中读取50个数据t,分别得出结果,且把结果输出到OUT.dat文件中。 例如,当t=1000时,函数值为1597。 【答案】 int FibValue(int t) { int f1 = 0, f2 = 1, fn; fn = f1+f2; while (fn <= t) { f1 = f2; f2 = fn; fn = f1+f2; } return fn; } 79.下列程序的功能是:利用\"Xn+1=cos(Xn)\"迭代方法求方程:cos(X)-X=0的一个实根。 迭代步骤为:①取X1初值为0.0;②X0=X1,把X1的值赋给X0;③X1=cos(X0),求出一个新的X1;④若X0-X1的绝对值小于0.000001,执行步骤⑤,否则执行步骤②;⑤所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。 请编写函数countValue()实现程序的要求,最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】 float countValue() { float X0, X1 = 0.0; while (1) { X0 = X1; X1 = (float)cos(X0); if (fabs(X0-X1) < 1e-6) break; } return X1; } 80.函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组string中;请编写encryptChar()函数,其功能是:按给定的替代关系对数组string中的所有字符进行替代后,仍存入数组string的对应位置上。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或其ASCII值是奇数,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i 81.现有一个10个人的100行选票数据文件IN.dat,其数据存放的格式是每条记录的长度均为10位,第一位表示第1个人的选中情况,第二位表示第2个人的选中情况,以此类推;内容均为字符0或1,1表示此人被选中,0表示此人未被选中,全选或全不选均为无效的选票。给定函数RData()的功能是把选票数据读入字符串数组original中。请编写函数CountRs()来统计每个人的选票数并把得票数依次存入result[0]到result[9]中,把结果result输出到OUT.dat文件中。 【答案】 void CountRs(void) { int i, j = 0, k; char *str; for (i=0; i<10; i++) result[i] = 0; for (i=0; i<100; i++) { str = original[i]; j = 0; while (*str) { if (*str == '1') j++; str++; } if (j!=0 && j!=10) for (k=0; k<10; k++) result[k] += original[i][k]-'0'; } } 82.现有一个10个人的100行选票数据文件IN.dat,其数据存放的格式是每条记录的长度均为10位,第一位表示第1个人的选中情况,第二位表示第2个人的选中情况,以此类推;内容均为字符0或1,1表示此人被选中,0表示此人未被选中,若一张选票人数小于等于5个人时被认为是无效的选票。给定函数Rdata()的功能是把选票数据读入到字符串数组str中。请编写函数CountRs()来统计每个人的选票数并把得票数依次存入result[0]到result[9]中,把结果result输出到OUT.dat文件中。 【答案】 void CountRs(void) { int i, count, j; char *pf; for (i=0; i<10; i++) result[i] = 0; for (i=0; i<100; i++) { pf = str[i]; count = 0; while (*pf) { if (*pf == '1') count++; pf++; } if (count > 5) for (j=0; j<10; j++) result[j] += str[i][j]-'0'; } } 83.函数ReadDat()实现从文件IN.dat中读取20行数据存放到字符串数组str中(每行字符串长度均小于80)。请编写函数charSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组str中。最后调用函数WriteDat(),把结果str输出到文件OUT.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。 例如,位置 0 1 2 3 4 5 6 7 8 原字符串 a b c d h g f e 1 2 3 4 9 8 7 6 5 则处理后字符串 d c b a e f g h 4 3 2 1 9 5 6 7 8 【答案】 void charSort() { int i, j, k, strl, half; char ch; for (i=0; i<20; i++) { strl = strlen(str[i]); half = strl/2; for (j=0; j str[i][k] = ch; } } } 84.在文件IN.dat中有200个正整数,且每个数均在1000~9999之间。函数RData()读取这200个数存放到数组original中。请编写函数DescSort(),其函数的功能是:按每个数的后3位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组result中,如果后3位的数值相等,则按原先的数值进行升序排列。最后调用函数WData(),把结果result输出到OUT.dat文件中。 例如,处理前:9012 5099 6012 7025 8088 处理后:5099 8088 7025 6012 9012 【答案】 void DescSort() { int i, j, data; for (i=0; i<199; i++) for (j=i+1; j<200; j++) { if (original[i]%1000 < original[j]%1000) { data = original[i]; original[i] = original[j]; original[j] = data; } else if (original[i]%1000 == original[j]%1000) { if (original[i] > original[j]) { data = original[i]; original[i] = original[j]; original[j] = data; } } } for (i=0; i<10; i++) result[i] = original[i]; } 85.已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数spellNum(),其功能是:把千位数字和个位数字重新组成一个新的二位数(新二位数的十位数字是原四位数的千位数字,新二位数的个位数字是原四位数的个位数字),以及把百位数字和十位数字组成另一个新的二位数(新二位数的十位数字是原四位数的百位数字,新二位数的个位数字是原四位数的十位数字),如果新组成的两个二位数均是奇数并且两个二位数中至少有一个数能被5整除,同时两个新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数count。最后main()函数调用写函数Wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void spellNum() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou==0 || hun==0) continue; ab = 10*thou+data; cd = 10*hun+ten; if (ab%2==1 && cd%2==1 && (ab%5==0 || cd%5==0)) { b[count] = a[i]; count++; } } for (i=0; i 结果:Aec.Bdeab bcdl.LLik 【答案】 void ConvertCharA(void) { int i, j, str1; for (i=0; i 87.请补充完整程序,使得程序能实现以下功能: 从文件IN.dat中读取200个整数至数组number中,求出奇数的个数cnt1和偶数的个数cnt2,以及数组number中下标为奇数的元素的算术平均值ave(保留2位小数)。把结果cnt1、cnt2、ave输出到OUT.dat文件中。 变量j的值加1。退出循环后变量k的值除以j得到数组number下标为奇数的元素值的算术平均值,再转换成单精度实数赋给变量ave。 【答案】 i = j = k = cnt1 = cnt2 = 0; ave = 0.0; for (i=0; i 88.函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组string中;请编写函数encryptChar(),其功能是:按给定的替代关系对数组string中的所有字符进行替代后,仍存入数组string的对应位置上,最后调用函数Wdata(),把结果string输出到OUT.dat文件中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是数字字符0~9或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar() { int i; char *pf; for (i=0; i .已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数CalVal(),其功能是:若一个四位数的千位数字上的值大于等于百位数字上的值,百位数字上的值大于等于十位数字上的值,以及十位数字上的值大于等于个位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数count并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的数输出到OUT.dat文件中。 【答案】 void CalVal() { int i, thou, hun, ten, data, j; for (i=0; i 90.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写函数AscendSort(),其功能是:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到OUT.dat文件中。 【答案】 void AscendSort() { int i, j; PRO temp; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (strcmp(sell[i].code, sell[j].code) > 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } else if (strcmp(sell[i].code, sell[j].code) == 0) { if (sell[i].sum < sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 91.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数spellVal(),其功能是:把千位数字和十位数字重新组成一个新的二位数ab(新二位数的十位数字是原四位数的千位数字,新二位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的二位数cd(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的百位数字),如果新组成的两个二位数ab-cd≥10且ab-cd≤20,并且两个数均是偶数,同时两个新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数count。最后main()函数调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void spellVal() { int i, thou, hun, ten, data, j; int ab, cd; for (i=0; i<200; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou==0 || data==0) continue; ab = 10*thou+ten; cd = 10*data+hun; if ((ab-cd)>=10 && (ab-cd)<=20 && ab%2==0 && cd%2==0) { b[count] = a[i]; count++; } } for (i=0; i 品名称从大到小进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】 void SortDat() { int i, j; PRO temp; for (i=0; i 93.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数oddVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以前的5个数且该数是奇数,并且该数必须能被7整除(该四位数前不满5个数,则不统计),则统计出满足此条件的个数count并把这些四位数按从大到小的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】 void oddVal() { int i, j, flag = 0; for (i=5; i } for (i=0; i 例如,7153,7+1=5+3,则该数满足条件计算平均值Ave1,且个数count=count+1。8129,8+1!=2+9,则该数不满足条件计算平均值Ave2。 【答案】 void NumCal() { int i, thou, hun, ten, data, n = 0; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (thou+hun == ten+data) { count++; Ave1 += a[i]; } else { n++; Ave2 += a[i]; } } Ave1 /= count; Ave2 /= n; } 95.函数ReadDat()实现从文件IN.dat中读取一篇英文文章,存入字符串数组str中。请编写函数encryptChar(),其功能是:按给定的替代关系对数组str中的所有字符进行替代后,仍存入数组str的对应位置上。最后调用函数WriteDat(),把结果str输出到文件OUT.dat中。 替代关系:f(p)=p*13 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或其ASCII值是偶数,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】 void encryptChar()
因篇幅问题不能全部显示,请点此查看更多更全内容