求100以内的素数 微机原理与汇编技术课程设计
实验报告(输出100以内的所有素数。)(一)

组别
第一组
学号
班级
实验地点
软件实验室二
指导教师
实验时间
2012-2-27
(注:一到五条在实验预习时填写,六、七条在实验当中或之后填写)
一、实验项目名称:
实验一熟悉实验环境
(一)实验目的:1.了解和使用Visual C++ 6.0的集成开发环境。
2.熟悉Visual C++ 6.0环境的基本命令和功能键,熟悉常用的菜单命令。
3.学习使用Visual C++ 6.0环境的帮助。
4.学习完整的C++程序开发过程(编辑、编译、连接、调试、运行、查看结果)
(二)实验要求:输出100以内的所有素数。
三、实验环境及要求:
多媒体计算机一台
Windows XP操作系统
Visual C++6.0
四、实验原理及步骤:
1.明确素数的定义,确定求解方法。
六、实验数据记录:
七、结果分析与讨论:
(1)C语言是基础的编程语言,但他的很多细节都必须注意,特别是符号的漏写很可能导致程序无法运行。
(2)100以内的素数虽不多,但应该考虑到输出的格式。应使输出的数清晰,看着格式很舒服。
八、教师批阅意见:
成绩:指导教师签名:年月日
if(m%i==0)
break;
if(i>=k+1)
{
printf("%d ",m);
n++;
}
if(n%10==0)
printf("\n");
}
printf("\n");
}Hale Waihona Puke 五、实验注意事项:(1)选择合适的方法计算100以内的所有素数,
少儿编程scratch算法练习-找素数

少儿编程教学资料,仅供参考,需要可下载并修改后使用!
scratch算法练习-找素数
题目:找出100以内的素数(2-99)。
质数又称素数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
思路:从2开始依次判断每个数是不是素数,如果是的话就加入到列表里。
难点在于如何判断一个数是不是素数,根据素数的定义,需要使用重复执行,只要能被1和自身之外的数整除(余数=0),那么就不是素数,停止本次循环,然后去判断下一个自然数是不是素数。
1、添加变量num表示100以内的自然数,从2开始,依次递增,挨个判断是否为素数
2、添加变量i作为除数(取值为2到num)用来判断是否为素数
3、添加变量“是否为素数”标记num是否是素数(初识默认这个数是素数,通过重复执行除以i,如果被整除那么就改变值为0,即不是素数,停止本次重复执行)
4、如何停止本次重复执行?通过修改变量的值,使重复执行结束的条件成立,这样就可以减少不必要的计算次数。
放飞自我梦想起航 1
5、每个自然数num重复执行除法判断结束后根据变量“是否为素数”来确定最终结果,如果等于1,那么就是素数,将该数添加进列表。
放飞自我梦想起航 2。
27-100内质数表全新scratch3.0课件年课体系PPT课程程序入门到精通

(2)
列表中的数据可以鼠标右键点export导出成文本文档
4
巩固扩展
尝试用程序列出指定范围内比如 321-459 之间的所有 质数。
源码测试
4
巩固扩展
答案:
解析: 程序会从321开始计算,并到460停止,列出来 的质数为:
源码测试
A T H
2. 判断一个数是否是质数
2. 如果能被2或其他比自己小的数整数,那么它就是质数,否则就是合数。
1和自身不需要判断,所以这里减2次
如果能被任何一个因数整除说明不是质数
如果判断不是质数就停止脚本不再循环
如果循环结束条件依然不满足,这个数就一定是质数
3
逻辑编程
3. 设计自制积木
1. 理解 质数 的判断方法后,开始创建 自制积木 (也就是通常说的函数):
3
逻辑编程
3. 设计自制积木
2. 完善自定义积木,逻辑和前面判断单个数是否是质数是一致的:
质数标记初始为0
是合数就标记为0
是质数就标记为1
3
逻辑编程
4. 设计主程序
1. 创建列表用于保存质数,并初始化变量
先清空列表 从2开始判断
3
逻辑编程
4. 设计主程序
2. 控制程序的循环变量,并且将符合的质数添加到列表中
3
逻辑编程
1.创建变量
1. 创建程序中需要用到的变量:自然数、因素、质数标记。
3
逻辑编程
2. 判断一个数是否是质数
1. 输入一个数,用程序判断是否是质数,首先让用户输入一个数,并赋值给初始变量。
2是最小的质数且是唯一的偶数 把用户输入的值赋给变量“自然数”用来后续判断 因数从2开始增加
例6、用筛法求出100以内的全部素数,并按每行五个数显示

例6、用筛法求出100以内的全部素数,并按每行五个数显示。
【问题分析】⑴把2到100的自然数放入a[2]到a[100]中(所放入的数与下标号相同);⑵在数组元素中,以下标为序,按顺序找到未曾找过的最小素数minp,和它的位置p(即下标号);⑶从p+1开始,把凡是能被minp整除的各元素值从a数组中划去(筛掉),也就是给该元素值置0;⑷让p=p+1,重复执行第②、③步骤,直到minp>Trunc(sqrt(N)) 为止;⑸打印输出a数组中留下来、未被筛掉的各元素值,并按每行五个数显示。
用筛法求素数的过程示意如下(图中用下划线作删去标志):①2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {置数}②2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被2整除的数}③2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被3整除的数}……2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被整除的数}Program Exam53;const N=100;type xx=1 .. N; {自定义子界类型xx(类型名)}V ar a: array[xx] of boolean; i,j: integer;BeginFillchar(a,sizeof(a),true);a[1] := False;for i:=2 to Trunc(sqrt(N)) doif a[I] thenfor j := 2 to N div I doa[I*j]:= False;t:=0;for i:=2 to N doif a[i] thenBeginwrite(a[ i ]:5); inc(t);if t mod 5=0 then writelnend;End.【例3】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的“简单选择排序”是一种较简单的方法)分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。
汇编100以内的素数

data segmenttishi1 db 0dh,0ah,'****************************','$'tishi2 db 0dh,0ah,'Class:jk0902','$'tishi3 db 0dh,0ah,'Name:Zhang Huamin','$'tishi4 db 0dh,0ah,'ID:0909090814','$'tishi5 db 0dh,0ah,'***************************',0dh,0ah,0dh,0ah,'$'su db 100 dup(0);存储素数tishisu db 'sushu:','$';显示素数count dw 0;素数的个数tishicount db 0dh,0ah,'count:',0dh,0ah,'$';显示素数个数,0d回车,0a换行sum dw 0;素数的和tishisum db 0dh,0ah,'sum:',0dh,0ah,'$';显示素数和data ends;********************************************************code segmentassume ds:data,cs:code ;伪指令,指出ds指向数据段,cs指向代码段main proc far ;主函数开始mov ax, data ;使ds指向数据段mov ds, ax;*************************************************mov dx,offset tishi1; 显示作者mov ah,9int 21hmov dx,offset tishi2mov ah,9int 21hmov dx,offset tishi3mov ah,9int 21hmov dx,offset tishi4mov ah,9int 21hmov dx,offset tishi5mov ah,9int 21h;***********************************************mov di,offset su ;使di指向素数存储单元的偏移地址mov bh,0 ;由于是0-100以内的素数,所以只用bl底8位就行,把bh高8置0mov bl,2; 2是第一个素数,bl从2到100变化L1:cmp bl,100 ;bl从0变化到100,对其中的每一个bl值监测其是否是素数,当bl大于100时ja L5mov dl,2;dl从2变化到bl-1,只要bl能被其中的一个数整除则bl的值就不是素数L2:cmp dl,bl ;当dl大于等于bl时证明应该测试的数已经测试完jae L3 ;当dl增大到bl时证明bl是素数,跳到L3,进行素数处理mov ax,bx ;否则把bx中的数(bh=0,实际上是bl中的数,因为出发的被除数是ax,16位数,所以要用bx,所以把bh置为0)转移到ax中div dl ;ax除以dl,cmp ah,0 ;商放在al中,余数放在ah中。
用c语言编写编写输出1到100之间的素数?

用c语言编写编写输出1到100之间的素数?
素数是指只能被1和自身整除的正整数,而其他正整数则被称为合数。
在本问题中,我们需要编写一个程序,以输出1到100之间的素数。
编写程序的步骤如下:
Step 1:了解1到100之间的素数的定义以及判断方法。
在这里,我们需要先明确什么是素数。
一个正整数n是否为素数,可以通过判断它是否可以被2到n-1的任意整数整除来得到。
如果n能被任意一个2到n-1的整数整除,那么它就不是素数,否则就是素数。
Step 2:开始编写程序
我们可以通过以下代码来实现1到100之间的素数输出:
```
#include <stdio.h>
该程序中,我们首先定义了两个循环变量i和j,用来枚举1到100之间的所有数。
然后,在外层循环中,我们假设当前枚举的数是素数,即flag=1。
在内层循环中,我们枚举2到i-1之间的所有数,并判断i是否能被这些数整除。
如果存在可以整除的数,则将flag 设置为0,即当前枚举的数不是素数。
最后,在外层循环结束后,当flag=1时,我们输出当前枚举的数。
这样,就完成了1到100之间的素数输出。
Step 3: 总结
在本问题中,我们学习了如何在C语言中编写程序来输出1到100之间的素数。
我们需要用到循环结构和条件语句来进行判断和输出。
同时,我们也需要熟悉素数的定义,以便能够在程序中进行判断。
希望这里的程序代码和思路能够对大家的学习和实践有所帮助。
求1-5000的素数 汇编课程设计

学号:课程设计题目求1-5000之间的素数学院计算机科学与技术专业计算机科学与技术班级姓名指导教师2012 年 6 月29 日武汉理工大学《汇编语言课程设计》课程设计说明书课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学与技术学院题目: 求1-5000之间的素数初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。
具体的设计任务及要求:1)熟悉汇编语言循环结构;2)打印出1-5000之间的素数;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名:年月日系主任(或责任教师)签名:年月日武汉理工大学《汇编语言课程设计》课程设计说明书目录1、课程设计问题描述及问题分析1.1 课程设计问题描述1.2 问题分析2、课程设计要求3、程序设计3.1 设计思路3.1.1设计模块3.1.1.1 主模块main3.1.1.2 find模块3.1.1.3 print模块3.2算法设计3.2.1 主程序main的程序框图3.2.2 子程序find的程序框图3.2.3 子程序print的程序框图4、程序调试过程5、运行结果及说明5.1创建程序主界面5.2 输入查找素数的范围5.3 求1-5000之间的素数(以xxxx的格式:“0002”)5.4求1-5000之间的素数(以数字正常格式:“2”)6、经验总结7、参考文献8、附:课程设计源程序8.1 以xxxx的格式:“0002”(全程序)8.2 以xxxx的格式:“2”(只附print模块)求1-5000之间的素数1、课程设计问题描述及问题分析1.1 课程设计问题描述试用汇编语言写一个程序,求1-5000之间的素数,并打印这个结果。
求100以内的素数 微机原理与汇编技术课程设计

微机原理与汇编技术课程设计(论文) 求100以内素数(2)院(系)名称专业班级学号学生姓名指导教师起止时间:2015.12.21—2015.12.31课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:计算机科学与技术本科生课程设计(论文)目录第1章前言 (1)1.1背景 (1)1.2基本功能要求 (2)第2章程序设计 (3)2.1题目的基本内容 (3)2.2 程序流程图 (4)2.3课程设计的具体内容说明 (7)2.4课程设计中关键内容的分析设计说明 (8)2.5运行结果 (13)第3章课程设计总结 (16)参考文献 (17)第1章前言1.1背景汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。
在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。
普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。
有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。
在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。
驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
汇编语言的另一个特点就是它所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,因为既然数据是存放在寄存器或存储器中,那么必然就存在着寻址方式,也就是用什么方法找到所需要的数据。
例如上面的例子,我们就不能像高级语言一样直接使用数据,而是先要从相应的寄存器AX、BX 中把数据取出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与汇编技术课程设计(论文) 求100以内素数(2)院(系)名称专业班级学号学生姓名指导教师起止时间:2015.12.21—2015.12.31课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:计算机科学与技术本科生课程设计(论文)目录第1章前言 (1)1.1背景 (1)1.2基本功能要求 (2)第2章程序设计 (3)2.1题目的基本内容 (3)2.2 程序流程图 (4)2.3课程设计的具体内容说明 (7)2.4课程设计中关键内容的分析设计说明 (8)2.5运行结果 (13)第3章课程设计总结 (16)参考文献 (17)第1章前言1.1背景汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。
在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。
普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。
有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。
在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。
驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
汇编语言的另一个特点就是它所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,因为既然数据是存放在寄存器或存储器中,那么必然就存在着寻址方式,也就是用什么方法找到所需要的数据。
例如上面的例子,我们就不能像高级语言一样直接使用数据,而是先要从相应的寄存器AX、BX 中把数据取出。
这也就增加了编程的复杂性,因为在高级语言中寻址这部分工作是由编译系统来完成的,而在汇编语言中是由程序员自己来完成的,这无异增加了编程的复杂程度和程序的可读性。
1.2基本功能要求由于DOS的9号调用输出的是ASCⅡ码,因此我们在输出到屏幕的时候一定要将其先转换为ASCⅡ码再使用9号调用输出。
考虑到ASCⅡ码转化为数字较为麻烦,因此可以定义两个组数据buf、buf1,其中buf用于存放1~99,buf1用于存放1~99的ASCⅡ码。
这段程序运用的两次loop循环分别实现把0~99送到buf、将0~99的ASCⅡ码送到buf1。
在循环完毕后,采用dos的9号调用将buf1的数据输出到屏幕上,即1~99输出到屏幕上。
完成这段程序后,跳到下一个模块,即删除合数保留素数并显示模块。
然后跳转到下一模块。
求和,最后到求平均数模块。
第2章程序设计2.1题目的基本内容设计题目:求100以内的素数具体要求:(1)求出这些素数。
(2)在屏幕上显示出求素数的动态过程(在屏幕上先显示出100以内的所有数,再动态地删去不符合要求的数,删除的过程要明显)。
(3)计算这些素数的平均值(取整,四舍五入),以十进制形式输出,并让改制以红色显示。
(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。
(5)要使用子程序2.2 程序流程图图2.1 显示素数程序流程图图2.2 删除合数保留素数程序流程图图2.3 求和程序流程图图2.4 求平均数程序流程图2.3课程设计的具体内容说明把0~99送到buf、将0~99的ASCⅡ码送到buf1。
在循环完毕后,采用dos的9号调用将buf1的数据输出到屏幕上,即1~99输出到屏幕上。
算法描述:(1)开始,输出素数。
(2)判断是否q退出,不退出则到(3)。
(3)按任意键继续程序。
(4)输出0-100全部数据。
(5)按任意键,每按一次删除一个非素数。
(6)删除完毕,输出平均数。
(7)结束,退出程序。
2.4课程设计中关键内容的分析设计说明程序:data segmentinput1 db 0ah,0dh,'if you want to quit,please press Q/q! 'db 0ah,0dh,'if you want to print 0~99,please press any otherkey!',0ah,0dh,' $'input2 db 0ah,0dh,'if you want to quit,please press Q/q! 'db 0ah,0dh,'if you want to find the prime number ,please press anyother key!',0ah,0dh,0ah,0dh,'$'input3 db 0ah,0dh,'if you want to quit,please press Q/q! 'db 0ah,0dh,'if you want to get the avreage of the primenumbers ,please press any other key!',0ah,0dh,0ah,0dh,'$'input4 db 0ah,0dh,'the avreage of the prime numbers is:','$'input5 db 0ah,0dh,'press any key to quit!','$'buf db 99 dup(?),0 ;用于存0~99buf1 db 99 dup(?,?,','),0dh,0ah,'press any key to continue!',0dh,0ah,'$' ;用于放1~99 buf2 db ?,?,0dh,0ah,'$'data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axlea dx,input1mov ah,9int 21hmov ah,08hint 21hcmp al,'Q'jE exitje exitlea bx,bufmov ax,0mov al,1mov cx,99loop1: mov [bx],alinc alinc bxloop loop1mov cx,99lea si,buf1lea bx,bufloop2:mov ax,0mov al,[bx]mov dl,10div dladd al,30h ;十位asc码add ah,30h ;个位asc码mov [si],almov [si+1],ahadd si,3add bx,1loop loop2lea dx,buf1mov ah,9int 21hmov ah,08hint 21h ;显示0~100 jmp bbexit:mov ax,4c00hint 21h ;退出bb:lea dx,input2int 21hmov ah,08hint 21hcmp al,'Q'jE exitcmp al,'q'je exitmov cx,0lea bx,buflea si,buf1a1: mov dl,1a2: and ax,0mov al,[bx+3]dec alinc dlcmp al,dljz a3inc aldiv dlcmp ah,0jnz a2mov [si+9],ahmov [si+10],ahjmp a4a3: inc cxa4: lea dx,buf1mov ah,9int 21hmov ah,08hint 21hadd si,3inc bxmov dl,[bx+3]cmp dl,0 ;跳出循环jnz a1lea dx,input3int 21hmov ah,08hint 21h ;输入提示cmp al,'Q'jE exitcmp al,'q'je exitmov di,cxadd di,3 ;计数送到dimov cx,99and si,0lea bx,buf1loop3: mov al,[bx] ;十位and ax,00ffhmov dh,[bx+1] ;个位cmp al,0jz c1sub dh,30hsub al,30hmov dl,10mul dladd al,dhadd si,axc1: add bx,3loop loop3lea dx,input4mov ah,9int 21hmov ah,08hint 21hmov ax,si ;和送到axmov bx,di ;个数送到bxand bx,00ffhdiv bland ax,00ffhmov bx,10and bx,00ffhdiv bladd al,30hadd ah,30h ;将平均值转化为asc码,al为十位,ah为个位lea bx,buf2mov [bx],almov [bx+1],ahmov ah,09·mov al,0mov bh,00mov cx,2mov bl,4int 10hlea dx,buf2mov ah,9int 21hmov ah,08hint 21hlea dx,input5mov ah,9int 21hmov ah,08hint 21hexit1:mov ax,4c00hint 21hcode endsend start2.5运行结果图2.5 初始界面图2.6 显示1~99图2.7 选择是否继续求素数图2.8 动态删除合数保留素数图2.9 选择是否求平均值图2.10 将素数平均值以红色字输出到屏幕第3章课程设计总结这次的微机原理课程设计,求100以内的素数,在数学的学习中,我们会经常接触到素数这个概念。
素数又称质数。
指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。
因为合数是由若干个质数相乘而得来的,所以,没有质数就没有合数,由此可见素数在数论中有着很重要的地位。
比1大但不是素数的数称为合数。
1和0既非素数也非合数。
这个学期我们刚好学了《微机原理与接口技术》这门课,并且初步的了解了汇编语言知识,并且可以编写简单的代码。
因此,我们可以运用汇编语言来编写程序,求取100以内的素数,动态的删除合数,并且以红色的字输出素数的平均值。
起初以为这个课题比较简单,通过查书和资料可以很快做出来,结果开始做却发现不是那么回事,发现了很多的问题。