文档库 最新最全的文档下载
当前位置:文档库 › 题目:输入一个正数n,输出所有和为n连续正数序列。

题目:输入一个正数n,输出所有和为n连续正数序列。

题目:输入一个正数n,输出所有和为n连续正数序列。
题目:输入一个正数n,输出所有和为n连续正数序列。

题目:输入一个正数n,输出所有和为n连续正数序列。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

分析:这是网易的一道面试题。

这道题和本面试题系列的第10题有些类似。我们用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2。如果从small到big的序列的和大于n的话,我们向右移动small,相当于从序列中去掉较小的数字。如果从small到big的序列的和小于n的话,我们向右移动big,相当于向序列中添加big的下一个数字。一直到small等于(1+n)/2,因为序列至少要有两个数字。

基于这个思路,我们可以写出如下代码:

void PrintContinuousSequence(int small, int big);

///////////////////////////////////////////////////////////////////// ////

// Find continuous sequence, whose sum is n

///////////////////////////////////////////////////////////////////// ////

void FindContinuousSequence(int n)

{

if(n < 3)

return;

int small = 1;

int big = 2;

int middle = (1 + n) / 2;

int sum = small + big;

while(small < middle)

{

// we are lucky and find the sequence

if(sum == n)

PrintContinuousSequence(small, big);

// if the current sum is greater than n,

// move small forward

while(sum > n)

{

sum -= small;

small ++;

// we are lucky and find the sequence

if(sum == n)

PrintContinuousSequence(small, big);

}

// move big forward

big ++;

sum += big;

}

}

///////////////////////////////////////////////////////////////////// ////

// Print continuous sequence between small and big

///////////////////////////////////////////////////////////////////// ////

void PrintContinuousSequence(int small, int big)

{

for(int i = small; i <= big; ++ i)

printf("%d ", i);

printf("\n");

}

本文已经收录到《剑指Offer——名企面试官精讲典型编程题》一书中,有改动,书中的分析讲解更加详细。

一种运用数学规律的解法

假定有k个连续的正整数和为N,其中连续序列的第一个数为x,则有

x+(x+1)+(x+2)+...+(x+k-1) = N。从而可以求得x = (N - k*(k-1)/2) / k。当x的值小于等于0时,则说明已经没有正整数序列的和为N了,此时循环退出。初始化k=2,表示2个连续的正整数和为N,则可以求出x的值,并判断从x开始是否存在2个连续正整数和为N,若不存在则k++,继续循环。

微机原理及应用第七章输入输出接口

第七章: 输入, 输出接口 §7.1 输入, 输出(I/O)接口 一: I/O接口的作用 1: 高速CPU与低速外设数据传送的同步及配合 2: 并行数据传送与串行数据传送之间的转换 二: I/O接口中的信息流 1: 数据信息 A: 方向CPU ←→I/O接口←→外设双向 B: 类型1): 数据量二进制形式的数据 例: CPU ←→磁盘 CPU ←→键盘 CPU ←→显示器 2): 开关量两种状态的物理量 例: 开关的通断, 水位的高低 3): 模拟量连续变化的物理量 例: 交流电, 温度, 气压 2: 状态信息 A: 方向CPU ←―I/O接口←―外设单向 B: 方式 1): 对输入接口, CPU是否准备好接收数据, READY 准备好吗. 2): 对输出接口, 外设是否准备好接收数据, BUSY 外设忙吗. 3: 控制信息 A: 方向CPU ―→I/O接口―→处设单向 B: 方式 1): CPU要求外设开始工作, 即启动外设 2): CPU要求外设终止工作, 即停止外设 注: 数据信息是CPU与外设经I/O接口传送的有用信息, 状态, 控制信息是CPU经I/O接与外设传送的配合信息, 为了CPU与外设间的数据传送, 加入握手信息(状态, 控制) 是必要的 三: I/O接口芯片的特点 I/O接口芯片是构成I/O接口电路的关键 1: 类型A: 并行接口芯片与串行接口芯片 B: 通用接口芯片与专用接口芯片 C: 不可编程接口芯片与可编程接口芯片

2: 可编程接口芯片对信息的处理 A: 可编程接口芯片有多个不同应用的寄存器 B: 控制寄存器用于存放CPU 写入的控制字 C: 数据寄存器用于存放CPU 与外设交换的有用信息 状态, 控制寄存器用于存放CPU 与外设间的配合信息 3: 可编程接口芯片寄存器的使用 A: 访问外设即访问对应的芯片寄存器 B: 不同的寄存器有不同的端口地址,即用地址访问,而非用名访问 C: 编程中使用 IN, OUT 指令访问寄存器 4: 接口与端口 A: 接口 — 接口芯片或完成一个外设的操作所用的接口电路 B: 端口 — 一个接口中不同信息流传送所需的地址通道 注: 一个接口中有多个端口 §7.2 CPU 与外设数据传送的控制方式 一: 程序控制方式 ? 无条件程控方式 — 无需状态,控制信息配合,仅有数据信息传送 ? 有条件程控方式 — 需状态, 控制信息配合, 三种信息均要传送 1: 无条件程控方式 A: 应用条件 1): 外设输入的物理量变化缓慢, 即无跳变信号输入 2): CPU 输出的数据外设可直接使用 B: 接口特点 1): CPU 的DB ―→ I/O 接口(输出锁存器) ―→ 外设 2): CPU 的DB ←― I/O 接口(输入缓冲器) ←― 外设 C: 例7.1 用DB 中的 D0, D1, D2 获得 A, B, C 三路波形 硬件: 电路: 数据输入 波形输出 A7 A0 口地址 = 8CH

汇编语言实现字符串逆序输出

北京邮电大学 微机原理与接口技术实验报告 学院:电子工程学院 班级:2012211203 学号:2012210876 姓名:邱启哲

字符串的逆序存储实验 一、题目要求 实现将STRING1起始存取单元中的字符串’ABCDEFGHIJKLM’逆序存放到STRING2的存储单元中,并在屏幕上显示结果。 二、设计思路 在数据段定义时,将字符串’ABCDEFGHIJKLM’存入STRING1中,并定义一个空字符串数组STRING2用于存放字符。将指针[STRING1+BP]指向字符串数组STRING1的最后一个字符,指针[STRING2+BX]指向STRING2的起始字符对其进行赋值,每次赋值后STRING1的指针减一,STRING2的指针加一,循环赋值13次。赋值完成后用系统调用实现STRING2中内容的循环输出。 三、程序代码 DATA SEGMENT STRING1 DB 'ABCDEFGHIJKLM' STRING2 DB 13DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DA TA MOV DS,AX MOV CX,13 MOV BX,0 MOV BP,12 LOOP1:;此循环用于实现对STRING2的赋值功能MOV AL,[STRING1+BP];通过AL实现STRING1对STIRNG2的赋值 MOV [STRING2+BX],AL INC BX DEC BP LOOP LOOP1 MOV CX,13;将CX值复员以便进入下一个循环 MOV BX,OFFSET STRING2;使BX指向STRING2的起始字符LOOP2: MOV AH,2 ;调用2号系统调用,输出STRING2 MOV DL,[BX];用STRING2中的字符为DL赋值 INT 21H INC BX;BX加一,向后移一位 LOOP LOOP2 MOV AH,4CH;程序结束 INT 21H CODE ENDS END START

第7章输入输出与中断

第7章输入/输出与中断 一、自测练习题 ㈠选择题 1.一微机系统有10根地址线用于I/O端口寻址,因而具有I/O空间的范围是( )字节。 A) 1024 B) 10K C) 0.5M D) 1M 2.8086CPU读/写一次存储器或I/O端口所需的时间称为一个( )。 A) 总线周期B) 指令周期C) 时钟周期D) 基本指令执行时间 3.微型计算机的输入/输出有三种不同的控制方法,其中以( )控制的输入/输出是微机进行I/O的一种最主要的控制方式。 A) 程序控制B) 中断控制C) DMA控制 D) 以上均可 4.程序查询I/O方式的工作流程是按( )的次序完成一个字符的传输。 A) 写数据端口,读/写控制端口 B) 读状态端口,读/写数据端口 C) 写控制端口,读状态端口,写数据端口 D) 随I/O接口的具体要求而定 5.在CPU与外设的I/O传送控制方式中,效率高、实时性强的方式是( )。 A) 同步传送B) 查询传送C) 无条件传送D) 中断传送 6.在CPU与外设的I/O传送控制方式中,传送速度最快的方式是( )。 A) 无条件传送B) 查询传送C) 中断传送D) DMA传递 7.用具有两个状态(“0”和“1”态)的一组开关作简单输入设备时,应采用( )传送方式来输入信息。 A) 无条件B) 查询C) 中断D) DMA 8.用一组发光二极管作为简单输出设备时,应采用( )传送方式来输出信息。 A) DMA B) 无条件C) 查询D) 中断 9.在微机系统中引入中断技术,可以( )。 A) 提高外设速度B) 减轻主存负担 C) 提高处理器的效率D) 增加信息交换的精度 10.CPU响应中断请求的时刻是在( )。 A) 执行完成正在执行的程序以后B) 执行完正在执行的指令以后 C) 执行完本时钟周期以后D)执行完正在执行的机器周期以后 11.8086/8088CPU向应两个硬中断INTR和NMI时,相同的必要条件是( )。 A) 允许中断B) 当前I/O操作执行结束 C) 总线空闲D) 当前访问内存操作结束 12.在微型计算机系统中,高速外设与内存储器进行批量数据传送时,应采用( )。 A) 无条件传送B) 程序查询控制 C) 中断控制D) 直接存储器存取 l3.在进入DMA作方式之前,DMA控制器是被当作CPU总线上的一个( )。 A) 主处理器B) I/O设备C) I/O接口D) 主控制器 14.当微机系统工作在DMA方式时,该系统的地址信号是由( )提供的。 A) 微处理器B) DMA控制器C) 中断控制器D) 总线控制器

一维数组习题

一维数组 【例1】输入50个数,要求程序按输入时的逆序把这50个数打印出来;也就是说,请你按输入相反顺序打印这50个数 分析:我们可定义一个数组a用以存放输入的50个数,然后将数组a内容逆序输出,源程序如下 program ex5_1; type arr=array[1..50]of integer; {说明一数组类型arr} var a:arr; i:integer; begin writeln('Enter 50 integer:'); for i:=1 to 50 do read(a[i]);{从键盘上输入50个整数} readln; for i:=50 downto 1 do {逆序输出这50个数} write(a[i]:10); end. 【例2】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的―简单选择排序‖是一种较简单的方法) 分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。同理,第二步,将第二个数与其后各个数再依次比较,又可得出次大的数。如此方法进行比较,最后一次,将第九个数与第十个数比较,以决定次小的数。于是十个数的顺序排列结束。 例如下面对5个进行排序,这个五个数分别为829105。按选择排序方法,过程如下: 初始数据:82910 5 第一轮排序:82910 5 92810 5 10289 5 10289 5 第二轮排序:10829 5 10928 5 10928 5 第三轮排序:10982 5 10982 5 第四轮排序:10985 2 对于十个数,则排序要进行9次。源程序如下: program ex5_2; var a:array[1..10]of integer; i,j,t:integer; begin writeln('Input 10 integers:'); for i:=1 to 10 do read(a[i]);{读入10个初始数据} readln; for i:=1 to 9 do{进行9次排序} begin for j:=i+1 to 10 do{将第i个数与其后所有数比较}

二维数组的输入输出倒序

#include #define N 3 #define M 3 int main() { int a[N][M]; int i,t,j; for(i=0;i #define N 3 #define M 3 int main() { int a[N][M]; int i,t,j; for(i=0;i

for(i=0;i #define N 3 #define M 3 int main() { int a[N][M]; int i,t,j; for(i=0;i

判断某个数是否素数

判断某个数是否素数: 1.定义为一个function函数过程 第一种方法: Function prime(ByVal x As Integer) As Boolean 注1 For i = 2 To x – 1 注2 If x Mod i = 0 Then Exit For Next i If i > x - 1 Then prime = True 注3 End Function 注1:这里注意形参前面有ByVal,不要ByVal也是可以的,为什么? 因为在function中并未改变x的值,所以加不加ByVal都正确 注2:此句也可以这样写:For i = 2 To x/2 或 For i = 2 To sqr(x) 注3:此句也可以这样写:If i > x - 1 Then prime = True Else prime = False 思考:为什么不要Else prime = False 程序运行也是正确的 另外注意此处的条件i > x – 1的实际含义 调用的时候(调用函数时,最好不要用带call关键字的调用方法) If prime(x) then……… 第二种方法: Function prime(ByVal x As Integer) As Boolean Prime=false 注1 For i = 2 To x – 1 If x Mod i = 0 Then Exit Function注2 Next i prime = True 注3 End Function 注1 此句要不要都可以,思考为什么 注2和注3两条语句与第一种方法的区别 调用的时候 If prime(x) then……… 第三种方法: Function prime(ByVal x As Integer) As integer Prime=0 For i = 2 To x – 1 If x Mod i = 0 Then Exit Function Next i prime = 1 End Function 此方法与上述方法的区别 调用的时候 If prime(x)=1 then………

第七章 输入输出(IO)系统

一、选择 1、计算机所配置的显示器中,若显示控制卡上双薪存储器 的容量是1MB,则当采用800×600像素的分辨率时,每个像素最多可以有(C)种不同的颜色。 A.256 B.65536 C.16M D.4096 2、CRT的分辨率为1024×1024像素,像素的颜色数为256, 则刷新存储器的容量约为(B) A.256M B.1M C.256KB D.32MB 3、CRT的分辨率为1024×1024像素,像素的颜色总数为 256色,则刷新存储器每单元字长是(A) A.1个字节 B.2个字节 C.256个字节 D.1024个字节 4、若计算机屏幕上每个像素的灰度级为256,则刷新存储 每个单元的宽度是。 5、显示汉字采用点阵字库,若每个汉字用16×16的点阵表 示,7500个汉字的字库容量是240KB 。 6、磁盘存储器的等待时间通常是磁盘旋转半周所用的时间。 7、某磁盘的转速为7200r/min,传输速度为4MN/s,控制 器开销为1ms,要保证读或写一个512B的扇区的平均时间为11.3ms。那么,该磁盘的平均寻道时间不超过(D) A.3.9ms B.4.7ms C.5.5ms D.6.1ms 8、一个磁盘的转速为7200转/分,每个磁道有160个扇区,每扇区有512字节,那么理想情况下,其数据传输率为(C)A.7200×160KB/s B.7200KB/s C.9600KB/s D.19200KB/s 9、某计算机系统中,假定硬盘以中断方式与处理机进行数据输入输出,以16位为传输单位,传输率为50KB/s,每次传输的开销(包括中断)为100个CPU时钟,处理器的主频为50MHz,请问软盘数据传送时占处理器的时间比例是 10、设一个磁盘盘面共有200个磁道,盘面总存储容量60MB,磁盘旋转一周的时间为25ms,每磁道有8个扇区,各扇区之间有一间隙,磁头通过每个间隙需 1.25ms。则磁盘通道所需最大传输率是 11、下列有关程序中断I/O方式的叙述中,错误的是(D) A. 程序中断I/O方式是CPU和外设能够并行工作 B. 中断I/O方式下,外设和CPU直接交换数据 C. 中断I/O方式下,CPU会有额外的开销用于断点、现场 的保护和回复等 D. 中断I/O方式适用于像磁盘一类的高速设备 12、指令执行结果出现异常而引起的中断是(B) A.I/O中断 B.程序性中断 C.机器校验中断 D.外中断 13、主存故障引起的中断是(C) A.I/O中断 B.程序性中断 C.机器校验中断 D.外中断

习题五--数组

一、A类程序设计题 1、求一个4x4矩阵对角线元素之和。 2、用数组的方法求Fibonacci数列的值(要求输出前20个数)。 3、将一个3x4矩阵转置(行列互换)存放。 4、将一个数组中的数按逆序存放,例如原来的顺序为8,7,6,4,2,要求改为2,4,6,7,8。 5、用选择法对10个整数进行降序排序。 6、用冒泡法对10个整数进行升序排序。 7、编写一个简单程序,要求:(1)从键盘上输入8个整数放入数组a[8]中(用for循环实现);(2)求出数组元素的最大值及数组的平均值。 8、求3×4矩阵中每一列元素的最大值并输出。 9、求4×4矩阵中每一行元素的最小值并输出。 10、某班有30个学生,进行了数学考试,编写程序将考试成绩输入一维数组,并求数学的平均成绩及不及格学生的人数。 11、有一个3x4矩阵,求出最大元素,以及其所在的行号和列号。 12、从键盘上输入10个实数,然后按输入顺序的逆序输出这10个数。 13、从键盘输入10个整数,找出其中最大值和最小值。 14、输入10个学生的姓名、学号和成绩,将其中不及格者的姓名、学号和成绩输出。 15、输入字符串 s,统计出 s 中共出现了多少个数字字符。 二、B类程序设计题 1、对一个已按由小到大排好顺序的整型数组,若从键盘输入一个数x,现要查询该数是否在此整型数组中,若存在则删除该数,否则显示“不存在”信息。 2、对一个已按由小到大排好顺序的整型数组,若从键盘输入一个数x,现要将该数插入到该数组中,使其插入后整个数组排序规律不变。 3、编写一程序,要求从键盘上输入10个整数放入一个数组中(用for循环实现),并编写求最大值的函数max,在主程序调用这个函数实现输出数组中10个整数的最大值,要求用数组名作为函数参数。 4、输入一个4行4列的二维数组,编程实现: (1) 求出其中的最大值和最小值及其对应的行列位置; (2) 求出对角线上各元素之和。 5、用筛选法求100之内的素数。 6、对一个整形数组进行由小到大排序。要求:用函数调用实现排序过程。 7、将一个数组中的元素按逆序存放。要求:用函数调用实现。 8、编写一个strlen函数,它能对一个字符串测出其长度,函数返回值就是字符串的长度(说明:长度不包括字符串结束标志’\0’)。 9、设有5 行5 列的数组b,其元素b[i][j]=2*i+3*j-8(i、j = 0,1,2,3,4)。编写程序实现: (1)求第4 行的5 个元素之累加和。 (2)求第5 列的5 个元素之平均值。 (3)求主对角线(“\”状对角线)以及反斜对角线(“/”状对角线)上各有多少个负数。、

素数的几种判断方法和实现

PS:本来没有决心把这个东西写完的,结果早上写到一半,出去吃个饭,没保存,回来手一抖直接关掉了,好不容易写了一大半了,只能重新写了,坑爹啊,但就是这个插曲,本来还没有决心的我,一下子却坚定了信念,一点要把这个东西写完。就这样开始吧 BY:Lee 下面,我们重新开始 ═══════════════════════════════════════════ 如何判断一个数是否是素数呢 ═══════════════════════════════════════════也许你会认为这是一个简单的问题,但事实上,世界上任何一个问题,都没有你想象中的那么简单1 + 1 是否等于2 ,这便是一个简单而又复杂的问题,呵呵。 突然想把这个东西换一种风格来写了,就这样扯淡扯下去吧。扯的时候文章中多少有内容来自于网络,没有侵权的意思,如果作者看到还请见谅。 ═══════════════════════════════════════════下面正式进入正题 ═══════════════════════════════════════════ 一、朴素判断素数 ═══════════════════════════════════════════1. 这种方法被誉为笨蛋的做法: 一个数去除以比它的一半还要大的数,一定除不尽的,这还用判断吗?? 很容易发现的,这种方法判断素数,对于一个整数n,需要n-2 次判断,时间复杂度是O(n)在n非常大或者测试量很大的时候,这种笨蛋做法肯定是不可取的。

2. 改进一下下小学生的做法: 3. 再改进一下聪明的小学生的做法 对于一个小于n的整数X,如果n不能整除X,则n必定不能整除n/X。反之相同一个明显的优化,就是只要从2枚举到√n 即可。 因为在判断2的同时也判断了n/2。到√n时就把2到n-1都判断过了。 在这里,这个聪明的小学生还用了i*i <= n 来代替sqrt(n), 这里是避免了调用函数sqrt(),其消耗时间很大, 特别是在大量数据测试的时候消耗很明显。 这个算法的时间复杂度,与最前面的笨蛋做法就好多了, 不过这里好像用sqrt()也没问题啊,,,,这个就不太清楚了。 但是做一个测试发现,如果是这样额话,每一次判断都要计算i*i,

第7章输入输出习题参考解答

第7章思考题与习题参考答案 1.计算机的I/O系统的功能是什么?它由哪几个部分组成? 答:计算机的I/O系统,主要用于解决主机与外部设备间的信息通讯,提供信息通路,使外围设备与主机能够协调一致地工作。 计算机的I/O系统由I/O硬件和I/O软件两大部分组成。其中I/O硬件包括:系统总线、I/O接口、I/O设备及设备控制器。I/O软件包括:用户的I/O程序、设备驱动程序、设备控制程序。 2.I/O硬件包括哪几个部分?各部分的作用是什么? 答:I/O硬件包括:系统总线、I/O接口、I/O设备及设备控制器。 系统总线的作用是为CPU、主存、I/O设备(通过I/O接口)各大部件之间的信息传输提供通路。 I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的控制软件。它用于在系统总线和外设之间传输信号,并起缓冲作用,以满足接口两边的时序要求。 I/O设备的作用是为主机与外部世界打交道提供一个工具。 设备控制器用来控制I/O设备的具体动作,不同的I/O设备需要完成的控制功能不同。 3.什么是用户I/O程序?什么是设备驱动程序?什么是设备控制程序? 答:用户I/O程序是指用户利用操作系统提供的调用界面编写的具体I/O设备的输入输出程序。例如用户编写的用打印机输出文本的程序。 设备驱动程序是一种可以使计算机和设备通信的特殊程序。可以说相当于操作系统与硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 设备控制程序就是驱动程序中具体对设备进行控制的程序。设备控制程序通过接口控制逻辑电路,发出控制命令字。命令字代码各位表达了要求I/O设备执行操作的控制代码,由硬件逻辑解释执行,发出控制外设的有关控制信号。 4.说明设计I/O系统的三个要素的具体内容。 答:设计I/O系统应该考虑如下三个要素: ①数据定位: I/O系统必须能够根据主机提出的要求进行设备的选择,并按照数据在设备中的地址找到相应的数据。 ②数据传输:I/O系统必须对数据传送的数量、速率及方向进行控制。 ③同步:I/O系统必须保证主机与外设间的同步,或称为协调工作。仅当设备准备好时主机才能输出数据;当数据可用时主机才能输入数据。 5.说明主机与I/O设备间的三种连接方式:总线型方式、通道方式及I/O处理机方式的优缺点。 答:①总线型连接方式 CPU通过系统总线与主存储器、I/O接口电路相连接,通过I/O接口电路进一步实现对外设的控制。 总线连接的优点:结构简单、标准化、I/O接口扩充方便。 总线连接的缺点:系统中部件之间的信息交换,均依赖于总线,总线成为系统中的速度瓶颈,因而对于配置大量外设的系统不适合。 ②通道方式 输入/输出通道是一个独立于CPU的,专门管理I/O的处理机,它具有自己的指令和程序,专门负责数据输入输出的控制和管理。通道控制方式可以做到一个通道控制多台设备与

计算机组成原理(第七章 输入输出系统

第七章输入输出系统 第一节基本的输入输出方式 一、外围设备的寻址 1.统一编址:将输入输出设备中控制寄存器、数据寄存器、状态寄存器等与内存单元一样看待,将它们和内存单元联合在一起编排地址,用访问内存的指令来访问输入输出设备接口的某个寄存器,从而实现数据的输入输出。 2.单独编址:将输入输出设备中控制寄存器、数据寄存器、状态寄存器单独编排地址,用专门的控制信号进行输入输出操作。 3.CPU与外围设备进行通信有三种类型: (1)CPU向外围设备发出操作控制命令。 (2)外围设备向CPU提供状态信息。 (3)数据在CPU与外围设备之间的传递。 历年真题 1.对外设统一编址是指给每个外设设置一个地址码。(2002年) 【分析】CPU与外设之间的信息传送是通过硬件接口来实现的,各种外设的硬件接口上又都包含有多个寄存器,如控制寄存器、数据寄存器、状态寄存器等。统一编址是将外设接口上的各种寄存器等同于内存储器的存储单元,通过使用访问内存单元的指令来访问外设接口上的各个寄存器,这样就可以使用访存指令来访问外设,输入输出操作简单,程序设计比较简便。由于外设接口上的寄存器种类和数量通常不止一个,所以一个外设至少对应一个以上的内存地址。 【答案】对外设统一编址是将外设接口上的寄存器等同内存单元,给每个外设设置至少一个地址码。 二、外围设备的定时 1.外围设备的定时方式有异步传输方式和同步定时方式两种。 2.实现输入输出数据传输的方式主要有:程序控制方式、直接存储访问(DMA)方式、通道方式。程序控制方式又可分为程序查询方式和中断方式两种。 历年真题 1.对I/O数据传送的控制方式,可分为程序中断控制方式和独立编址传送控制方式两种。(2001年)【分析】对1/O数据传送的控制方式,可分为程序直接控制方式、程序中断控制方式、DMA控制方式、通道控制方式等。程序中断控制方式只是其中的一种方法,独立编址是指对1/O设备的控制寄存器、数据寄存器、状态寄存器等单独进行地址编排,使用专门的指令对其进行操作,可用在各种数据传送的控制方式中。 【答案】对1/O数据传送的控制方式,可分为:程序控制方式、DMA方式、通道控制方式等 三、程序查询输入输出方式 了解程序查询输入输出过程即可(从未考过)。 第二节中断 一、中断的基本概念 1.中断:是指CPU在接到随机产生的中断请求信号后,暂停原程序,转去执行相应的中断处理程序,以处理该随机事件,处理完毕后返回并继续执行原程序。 2.中断方式的特点:中断方式的输入输出操作可以减少CPU等待外围设备的时间,提高CPU的工作效率。 3.中断方式的应用范围:中断方式主要应用于处理复杂随机事件、控制中低速1/O。

素数判断程序测试范例

问题描述:键盘输入m和n(10 #include using namespace std; int main() { int m,n,i; static int k=0; cout<<"输入m,m(其中10>m>>n; while(m<=10||m>=n||n>2000) { cout<<"输入数据有误,请再次输入:"<>m>>n; } for(i=m;i<=n;i++) { int x=(int)sqrt((double)i); for(int j=2;j<=x;j++) { if(i%j==0) { break; } else if(j==x) { cout<

一.控制流测试1、控制流图如下:

2、根据以上控制流图: 因为控制流的1-2-3-2部分为用户输入的m,n的重复赋值过程,与输入数据密切相关且每次取值不同,关系到控制流测试,所以将此独立出来:以为节点“2”的复合谓词为或的关系,全为false时只有一种情况,而为true 时有7种情况,对“2”的复合谓词(m<=10||m>=n||n>2000)为真假时其表1如下: 设A:m<=10; B:m>=n; C:n>2000 但是对于节点“2”的情况,并非所有可能都会取到,因为当A为真时,就不会执行B,依此,生成下表2: 根据表2,得出此部分的取值及路径为:

C语言整数逆序输出

C语言整数逆序输出 将一个从键盘输入的整数存放到一个数组中,通过程序的运行按照数组中的逆序输出该整数,利用递归的方法解决问题。 算法思想 设计函数实现数据的逆序存放,设定形参数组接收实参数组的地址,来存储数据的每一位。 函数体采用递归的方式解决问题,因此考虑递归进行的条件。例如,把数据 n 存放到数组s 中,若 n 是一位数,则存放 n 到数组中;若 n 不是一位数,则存放 n/10 到数组中。 问题解决的难点在于找到数据的存放地址,通过不断地取余和整除10 来得到数据的每一位。为了实现数据的逆序存放,每一次整除 10 的时候,同时把存放数据的数组地址后移,这样得到的第一位数存放在数组的最后一位……通过依次前移,即递归的回归,实现整个数据的存放。通过函数 convert() 实现字符串中的数字的逆序转换。 程序代码 1.#include<> 2.int convert(char s[],int n) 3.{ 4.int i; 5.if((i=n/10)!=0) 6.convert(s+1,i); 7.*s=n%10+'0'; 8.return0; 9.} 10. 11.int main() 12.{ 13.int num; 14.char str[10]=" ";

15.printf("input integer data:"); 16.scanf("%d",&num); 17.convert(str,num); 18.printf("output string:\n"); 19.puts(str); 20.return0; 21.} 调试执行结果 当输入整数为 9 时,其程序运行结果如下所示: 当输入整数为 9 时,逆序转换输出结果如下所示:

判断一个数是质数还是合数的方法

判断一个数是质数还是合数的方法 单位:平川区黄峤教管中心双铺中心小学张彦娟 一、质数和合数的意义: 质数:一个数只有1和它本身两个因数,这个数叫作质数。(除2以外所有的质数都是奇数。) 备注: 1、最小的质数是2。 2、既是偶数又是质数的数是2。 3、两个质数相乘的积一定是合数。 合数:一个数除了1和它本身以外还有其他的因数,这个数叫作合数。 备注: 1、最小的合数是4。 2、最大的一位合数是9。 3、1既不是质数,也不是合数。 二、判断一个数是质数还是合数有两种方法: 方法一:⑴判断一个数是质数还是合数需要看这个数的因数的个数,只有2个因数的数一定是质数,有3个或3个以上因数的数是合数。 ⑵个位上是0,2,4,6,8和5的数(除了0,2和5)一定不是质数,质数个位上的数字只能是1,3,7和9。 方法二:判断一个自然数是不是质数,可以用所有比它小的质数

从小到大依次去除它,除到商比除数小,而且还有余数,它就是质数,否则不是质数。 三、问题解析: 下面哪些数是合数?哪些数是质数? 2 25 9 21 31 91 57 42 1、方法解析:因为除了1和它本身以外还有其他的因数的数是合数,所以先根据“2,5和3的倍数特征”来判断这些数除了1和它本身两个因数以外是否有因数2,5,3,如果有就为合数。 2和42有因数2,但2只有1和2两个因数,所以2是质数,42是合数。9,21,57有因数3,它们都是合数。25有因数5,也是合数。91有因数7,是合数。只有31除了1和它本身之外再没有其他的因数,所以31是质数。 2、解答:25,9,21,91,57,42是合数,2,31是质数。 四、100以内的质数: 100以内的质数有:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,共25个。

汇编实验-合并两组数组后逆序输出

汇编第一次实验 计网112班田凯飞1107300215 1.实验题目: 分别输入两组顺序排列的数组,合并在一起后逆序输出。 2.实验代码: data segment num1 db 10 dup(?) num2 db 10 dup(?) num3 db 20 dup(?) num4 db 10 dup(?) shift db 13,10,'$' empt db ' ','$' hint1 db 'Please enter the first group of number:',13,10,'$' hint2 db 'Please enter the second group of number:',13,10,'$' hint3 db 'The first group of number is:',13,10,'$' hint4 db 'The second group of number is:',13,10,'$' hint5 db 'The result is:',13,10,'$' data ends code segment main proc far assume ds:data,cs:code start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ah,9 ;提示输入第一组数 lea dx,hint1 int 21h mov cx,10 ;输入第一组数 mov si,0 l1:call input mov num1[si],bl inc si loop l1

call huanhang mov ah,9 ;提示输出第一组数lea dx,hint3 int 21h mov cx,10 ;输出第一组数 mov si,0 l2:mov al,num1[si] call output call kongge inc si loop l2 call huanhang mov ah,9 ;提示输入第二组数lea dx,hint2 int 21h mov cx,10 ;输入第二组数 mov si,0 l3:call input mov num2[si],bl inc si loop l3 call huanhang mov ah,9 ;提示输出第二组数lea dx,hint4 int 21h mov cx,10 ;输出第二组数 mov si,0 l4:mov al,num2[si] call output call kongge inc si loop l4 call huanhang

从键盘输入5个数到数组中,并将5个数倒序输出。C++

从键盘输入5个数到数组中,并将5个数倒序输出。#include void main() { int a[5],i; for(i=0;i<5;i++) cin>>a[i]; for(i=4;i>=0;i--) cout< int *reverse(int *arr, int len) { int i=0; int p; for(i=0;i<(len+1)/2;i++) { p=arr[i]; arr[i]=arr[len-i-1]; arr[len-i-1]=p; } return arr; } int main(int argc, char **argv) { int i; int a[5]; for(i=0;i<5;i++) scanf("%d",&a[i]); reverse(a,sizeof(a)/sizeof(int)); for(i=0;igcc -g -Wall reverse2.c -o reverse2

C:\mypro>reverse2 4 3 5 7 1 1 7 5 3 4 C:\mypro> #include"stdio.h" void main() { int a[5]; for(int n=0;n<5;n++) { printf("请输入%d个的数",n+1); scanf("%d",&a[n]); } for(int m=4;n>=0;n--) { printf("%d ",a[m]); } } import java.util.Scanner; public class Test{ public static void main(String[] ars){ int[] arr = new int[5]; Scanner in = new Scanner(System.in); int max = 0; for(int i = 0;i<5;i++){ arr[i] = in.nextInt(); if(max

C语言考试系统题库-5-数组

5—数组 1.输出平均值 1.1.题目要求:求平均值 输入一个正整数n (1表示,括号内是说明) (1)输入:3 <回车>(n=3) 1 2 -6 <回车> 输出:average = -1.00 (2)输入:5 <回车>(n=5) 12 2 5 4 0 <回车> 输出:average = 4.60

2.求最大值及其下标 2.1.题目要求 输入一个正整数n (1表示) (1)输入:3 1 6 4<回车> 输出:max=6,index=1 (2)输入:3 10 8 1<回车> 输出:max=10,index=0 (3)输入:5 1 2 5 4 0<回车> 输出:max=5,index=2

3.逆序输出 3.1.题目要求 输入一个正整数n (1表示) (1)输入:4 10 8 1 2<回车> 输出:2 1 8 10 (2)输入:5 1 2 5 4 0<回车> 输出:0 4 5 2 1

4.交换最小值和最大值 4.1.题目要求: 输入一个正整数n (1表示) (1)输入:5 4 3 5 1 2<回车> 输出:1 3 2 4 5 (2)输入:4 1 5 6 7<回车> 输出:1 5 6 7 (3)输入:5 5 4 3 2 1<回车> 输出:1 4 3 2 5

第七章、输入输出系统总结

第7章输入输出系统 7.1 I/O设备 一、外设的地位和作用 外设是计算机系统的重要组成部分。 外设是人机对话的工具。 外设是完成数据媒体变换的装置。 外设是系统软件及信息的驻在地。 外设是计算机推广应用的桥梁。 二、外设的特点 速度慢:机电混合装置,ms级。 多样性及复杂性:涉及机电光磁声等学科,传输速率差异大,方式各不相同。S 三、外设的分类 1. 人机交互设备键盘鼠标打印机显示器 2. 信息驻留设备磁盘光盘磁带 3. 机—机通信设备调制解调器网卡路由器 四、输入设备 1.键盘 2. 鼠标 3. 触摸屏 五、输出设备 1. 显示器 2. 打印机 六、其他 1. A/D、D/A 模拟/数字(数字/模拟)转换器 2. 终端由键盘和显示器组成完成显示控制与存储键盘管理及通信控制 3. 汉字处理汉字输入、汉字存储、汉字输出 七、多谋体技术 八、I/O操作的特点 1.异步性 2.实时性 3.IO操作的实现与设备的无关性 7.2 I/O系统的发展

1.早期阶段:以运算器为中心,分散连接 2.接口模块和DMA 阶段:总线连接 3.具有通道结构的阶段 通道是用来负责管理IO设备以及实现主存与IO设备之间交换信息的部件,可看作是一种具有特殊功能的处理器。具有专用的通道指令,可以独立运行程序,但受制于CPU,是从属于CPU的一个专用处理器 4.具有I/O 处理机的阶段 7.3 I/O 接口 IO接口通常是指主机与外设之间的一个硬件电路及其相应的软件控制。 而端口是指这些接口电路中的一些寄存器,包含有数据端口、控制端口和状态端口,若干个端口加上控制逻辑才能组成接口。 一、概述 1. 实现设备的选择 2. 实现数据缓冲达到速度匹配 3. 实现数据串—并格式转换 4. 实现电平转换 5. 传送控制命令 6. 反映设备的状态(“忙”、“就绪”、“中断请求”) 二、接口的功能和组成 1、总线连接方式的I/O 接口电路 (1) 设备选择线 (2) 数据线 (3) 命令线 (4) 状态线 2.接口的功能和组成 1)、功能

第六章:数组

一维数组: 1、定义一个10个元素的整数数组,赋值为1-10,按如下格式输出数组中的全部数据。 a[0]=1 a[1]=2 ………… 2、打印出Fibonacci数列:从第3个数开始的每个数的值为前两个数之和。 1 1 2 3 5 8 …… 3、输入10个学生的成绩到一个数组中,查找出最低分数及最高分数,计算出总分以及平 均分,计算出及格人数以及成绩在平均分以上的人数。 4、有一个数组,内放10个整数。要求找出最小的数和它的下标,然后把它和数组中最前 面的元素对换位置,找出最大的数和它的下标,然后把它和数组中最后面的元素对换位置。 5、利用随机函数产生10个1-100随机数,并存入数组中。 注解:产生随机数的方法 1)包含库文件#include "Stdlib.h" 使用用randomize()随机种子函数及随机数生产函数random(101),参数表示范围2)使用用randomize()随机种子函数 随机数生产函数rand (),无参数,产生int数据类型范围内的随机数 6、将数组中所有元素的值向后移动一位,最后一个元素的值移动到第一个元素中;(将数 组中所有元素的值向前移动一位,第一个元素的值移动到最后一个元素中) 7、将数组中元素的值先按原序输出,逆置(第一个与最后一个交换,第二个与倒数第二个 交换,依次类推)后再输出一次; 8、将一个数组中的元素反向复制到另一个数组中,输出这两个数组。 9、编程输入一个小写字母,以该字母为第一个字母按字母表逆序输出字母表中所有小写字 母。(例:输入m ,则输出:mlkjihgfedcbazyxwvutsrqpon)(利用数组或不利用数组两种方式编程) 10、输入一个数,在数组中找到第一个比它大的数,将输入的数据插入到这个数的前面。 11、将两个数组中的元素交叉复制到一个新的数组中。 12、定义一个整数数组,求出奇数和偶数个数 13、有30个0-9之间的数字,分别统计0-9出现的次数 14、用筛选法求100之内的素数 筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。 15、下面的程序从键盘接收任意5个数放入数组A中,假设这5个数为:8 1 4 2 5,则要输 出一个具有如下内容的方阵。 16、十五个猴子围成一圈选大王,依次1-7 循环报数,报到7 的猴子被淘汰,直到最后一

相关文档
相关文档 最新文档