求100以内的素数 微机原理与汇编技术课程设计
- 格式:doc
- 大小:501.50 KB
- 文档页数:20
少儿编程教学资料,仅供参考,需要可下载并修改后使用!
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。
例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】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的“简单选择排序”是一种较简单的方法)分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。
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之间的素数?
素数是指只能被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之间的素数学院计算机科学与技术专业计算机科学与技术班级姓名指导教师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以内素数(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 中把数据取出。
c 素数问题课程设计一、课程目标知识目标:1. 学生能够掌握素数的定义及基本性质;2. 学生能够运用筛选法、分解质因数等方法找出100以内的素数;3. 学生能够理解合数与素数之间的关系,并能够进行简单的应用。
技能目标:1. 学生能够运用所学知识解决实际问题,提高解决问题的能力;2. 学生能够通过合作探究的方式,提升团队协作和沟通表达能力;3. 学生能够运用数学思维,对问题进行分析、归纳和总结。
情感态度价值观目标:1. 学生对数学产生浓厚的兴趣,培养探究精神;2. 学生在学习过程中,养成勤奋、严谨的学习态度;3. 学生通过数学学习,认识到数学在现实生活中的重要作用,增强实践意识。
本课程针对五年级学生,结合教材内容,注重培养学生的基本数学素养,提高学生解决实际问题的能力。
课程设计中,充分考虑学生的年龄特点和认知水平,以激发兴趣、培养技能、提升素养为目标,使学生在轻松愉快的氛围中学习数学,感受数学的魅力。
通过本课程的学习,期望学生能够达到上述具体的学习成果,为后续的数学学习打下坚实基础。
二、教学内容本章节教学内容以“素数问题”为主题,结合教材第五章“数的认识”相关内容,进行如下安排:1. 素数的定义与性质:讲解素数的概念,引导学生探讨素数的基本性质,如只有两个正因数、除了1和它本身外没有其他因数等。
2. 100以内的素数:指导学生运用筛选法、分解质因数等方法,找出100以内的素数,并观察其分布规律。
3. 合数与素数的关系:讲解合数与素数的联系,通过实例分析,使学生理解合数可以分解为几个素数的乘积。
4. 素数在实际问题中的应用:举例说明素数在日常生活、密码学等领域的应用,提高学生的数学应用意识。
教学内容安排如下:第一课时:素数的定义与性质,以及100以内的素数筛选;第二课时:分解质因数,找出合数与素数的关系;第三课时:素数在实际问题中的应用,巩固所学知识。
本章节教学内容的安排旨在保证科学性和系统性,通过由浅入深、循序渐进的方式,使学生掌握素数相关知识,为后续数学学习打下基础。
c语言求素数课程设计一、课程目标知识目标:1. 学生能理解素数的定义,掌握判断素数的基本方法。
2. 学生能运用C语言编写程序,实现求素数的功能。
3. 学生了解素数在数学和计算机科学中的应用。
技能目标:1. 学生掌握C语言循环、判断等基本语法结构,能独立编写求素数的程序。
2. 学生能运用调试工具检查并修正程序中的错误,提高程序的正确性和效率。
3. 学生通过上机实践,提高编程能力和问题解决能力。
情感态度价值观目标:1. 学生对编程产生兴趣,培养良好的编程习惯。
2. 学生在团队协作中,学会沟通、分享和互助,增强团队意识。
3. 学生通过解决实际问题,认识到编程在生活中的应用,激发对计算机科学的热爱。
课程性质:本课程为C语言编程实践课,注重培养学生的编程能力和问题解决能力。
学生特点:学生已具备C语言基本语法知识,有一定的编程基础,但对素数判断方法及编程应用尚不熟悉。
教学要求:教师应结合学生特点,采用任务驱动、启发式教学等方法,引导学生主动探索、实践,提高学生的编程技能和实际应用能力。
在教学过程中,注重培养学生的团队合作意识和情感态度价值观。
通过本课程的学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
二、教学内容1. 素数概念介绍:通过讲解素数的定义,让学生理解什么是素数,以及素数在数学中的重要性。
2. 判断素数的方法:分析并介绍常见的判断素数的方法,如试除法、埃拉托斯特尼筛法等,为学生编写程序打下基础。
3. C语言编程基础:回顾C语言中的循环结构(for、while)、条件判断(if-else)、函数定义等基本语法,为编写求素数程序提供支持。
4. 编写求素数程序:根据素数判断方法,引导学生使用C语言编写求素数的程序,并针对不同范围(如100以内的素数)进行讨论。
5. 程序调试与优化:教授学生如何使用调试工具(如GDB)查找并修正程序中的错误,提高程序的正确性和效率。
6. 素数应用拓展:介绍素数在密码学、计算机科学等领域的应用,激发学生深入学习的兴趣。
微机原理与汇编技术课程设计(论文) 求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以内的素数,动态的删除合数,并且以红色的字输出素数的平均值。
起初以为这个课题比较简单,通过查书和资料可以很快做出来,结果开始做却发现不是那么回事,发现了很多的问题。