武汉理工大学 汇编课设 1-5000之间的素数
c语言课程设计-素数探求

C语言课程设计学院班级设计人 __ 成绩 ____一、题目:素数探求二、目的与要求1.目的:(1)培养学生综合利用C语言进行程序设计的能力;(2)熟悉函数设计、循环的控制方法及测试方法,理解模块化程序设计的优点和意义。
2.基本要求:(1)要求用C编程语言实现算法,完成程序的设计,在VC++6.0 开发环境运行算法;(2)用多个函数实现;(3)源代码程序要求必要的注释。
3.创新要求在基本要求达到后,可以进行创新设计,如优化人机界面、将输出结果存放在文件里等。
4.书写设计报告的要求课程设计报告1)课程设计题目、内容、要求。
2)总体设计(包含几大功能模块)。
3)详细设计(各功能模块的具体实现算法——流程图)4)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。
5)调试分析(包含各模块的测试用例,及测试结果。
)6)总结(课程设计完成了哪些功能,还有哪些地方需要改进,及通过课程设计有何收获,调试程序的体会等)三、设计方法和基本原理1.问题描述:从键盘任意输入一个整数m:(1)若m不是素数,则对m进行质因数分解,并将m以质因数从小到大的顺序排列的乘积形式输出;否则输出“m 是质数!”。
例如:用户输入90,则程序输出为2*3*3*5。
(2)若m是素数,则按降序输出小于m的所有素数。
2.问题的解决方案:根据问题的描述,可以按照要求的功能采用结构化的设计思想。
四、主要技术问题的描述根据以上的分析,主要解决的技术问题在于:素数的判断,单独用一个函数完成;两个问题分别用两个函数完成。
设计程序:#include "stdio.h"int isprime(int);void f1(int);void f2(int); /*函数说明语句*//*************************主函数***************************/main(){int m;printf("从键盘任意输入一个整数m:\n");scanf("%d",&m);if(isprime(m)){printf("%d是素数\n",m);f1(m);}else{printf("%d不是素数\n可以进行质因数分解如下:\n",m);f2(m);}}/******************定义函数判断是否为素数******************/int isprime(int a){int i;for(i=2;i<=a/2;i++)if(a%i==0) return 0; /*a若能被某个数整除,即不是素数,返回0*/ return 1; /*a不能被2到a/2的任意数整除,返回1*/}/****************定义函数输出小于m的所有素数***************/ void f1(int b){int i;printf("小于%d的素数有: \n",b);for(i=b-1;i>=2;i--){if(isprime(i))printf("%d ",i);}printf("\n");}/**************定义函数对m进行质因数分解*******************/ void f2(int n){int i;for(i=2;i<=n;i++)while(n!=i){if(n%i==0){printf("%d*",i);n=n/i;}elsebreak;}printf("%d",n);printf("\n");}。
判断一个数是素数

如何判断一个数是素数?
C/C++
基本思想
判断一个整数m是否为素数,只需用2~m-1之 间的每一个整数去除,如果都不能被整除,那 么m就是一个素数。 其实可以简化,m不必被2~m-1之间的每一个 整数去除,只需被2~ m 之间的每个数去除就 可以了。例如判别17是否为素数,只需使2~4 之间的每一个整数去除。为什么可以做如此简 化呢?因为如果m能被2~m-1之间任意整数整 除,如果这个数大于 m ,那这个数必定对应 的还有一个比 m 小的因子(以16为例,2、8是 它的因子,8大于4,2小于4)。
• • • • • • • • • • • • • • • •
else
{
printf("FALSE\n"); } return 0; } char isPrime(int n) { int i; char c=TRUE; if(n==2){ c=TRUE;} else if(n>2) { if(n%2==0) {c=FALSE;}
• if (t%5==0) //每输出5个素数后换行; • printf ("\n"); //字符输出函数; • } • } • printf("\n"); • • printf("1-100内共有以上%d个质数(素数)。\n", t);
求素数表中1~1000之间的所有素数

求素数表中1~1000之间的所有素数*问题分析与算法设计素数就是仅能衩1和它自身整除的整数。
判定一个整数n是否为素数就是要判定整数n能否被除1和它自身之外的任意整数整除,若都不能整除,则n为素数。
程序设计时i可以从2开始,到该整数n的1/2为止,用i依次去除需要判定的整数,只要存在可以整除该数的情况,即可确定要判断的整数不是素数,否则是素数。
*程序说明与注释#include<stdio.h>int main(){int n1,nm,i,j,flag,count=0;do{printf("Input START and END=?");scanf("%d%d",&n1,&nm); /*输入求素数的范围*/}while(!(n1>0&&n1<nm)); /*输入正确的范围*/printf("………..PRIME TABLE(%d–%d)…………\n",n1,nm);if(n1==1||n1==2) /*处理素数2*/{printf("%4d",2);n1=3;count++;}for(i=n1;i<=nm;i++) /*判定指定范围内的整数是否为素数*/{if(!(i%2))continue;for(flag=1,j=3;flag&&j<i/2;j+=2)/*判定能否被从3到整数的一半中的某一数所整除*/if(!(i%j))flag=0; /*若能整除则不是素数*/if(flag) printf(++count%15?"%4d":"%4d\n",i);}}。
一级VF题库

一级程序设计题库1 编程序求出1-200以内的能被7整除的数的平方和。
377986cleas=0m=0for i=1 to 200if i%7=0m=i^2s=s+mendifendfor?s2 编程序求1~99的平方根的和并输出结果。
(保留小数点两位)661.46 cleas=0for i=1 to 99s=s+sqrt(i)endfor?round(s,2)3 编程序求1~55的平方根的和并输出结果。
(保留小数点两位)275.43 cleas=0for i=1 to 55s=s+sqrt(i)endfor?round(s,2)4 编程序统计1~1000能被3整除的数的个数。
333cleas=0for n=1 to 1000if n%3=0s=s+1endifendfor?s7 编程序求出1到5000之间的能被5整除的前若干个偶数之和,当和大于500 时程序退出。
550clea s=0for n=10 to 5000 step 10s=s+nif s>500exitendifendfor?s8 编程序求在3000以内被17或者23整除的正整数数的个数。
299 cleas=0for n=1 to 3000if n%17=0 or n%23=0s=s+1endifendfor?s9 序求在1000以内被17或者23整除的正整数数的个数。
99cleas=0for n=1 to 1000if n%17=0 or n%23=0s=s+1endifendfor?s10 编程序求在5000以内被17或者23整除的正整数数的个数。
499cleas=0for n=1 to 5000if n%17=0 or n%23=0s=s+1endifendfor?s11 编程序求出1-100以内的能被3整除的数的平方和。
112761cleas=0for n=1 to 100if n%3=0s=s+n^2endifendfor?s12 已知一个数列的前3个数为0,0,1,以后每个数为前3个数的和,编程序求此数列的第36个数。
c语言课程设计素数问题

c语言课程设计素数问题一、教学目标本课程旨在通过C语言编程,让学生掌握素数问题的算法设计与实现。
具体目标如下:1.理解素数的基本概念。
2.掌握素数生成算法。
3.理解素数在计算机科学中的应用。
4.能够使用C语言编写简单的素数生成程序。
5.能够对已有的素数生成算法进行分析和改进。
情感态度价值观目标:1.培养学生对数学和计算机科学的兴趣。
2.培养学生独立思考和解决问题的能力。
二、教学内容1.素数的概念和性质。
2.素数生成算法介绍。
3.C语言编程基础。
4.素数问题的C语言实现。
5.素数生成算法的改进和优化。
6.C语言基础知识(第一章)。
7.素数的概念和性质(第二章)。
8.素数生成算法介绍(第三章)。
9.素数问题的C语言实现(第四章)。
10.素数生成算法的改进和优化(第五章)。
三、教学方法针对不同的教学内容,采用多种教学方法,如讲授法、案例分析法、实验法等。
1.素数的概念和性质:采用讲授法,通过讲解和示例让学生理解素数的基本概念和性质。
2.素数生成算法介绍:采用案例分析法,通过分析已有的素数生成算法,让学生理解其原理和优缺点。
3.C语言编程基础:采用实验法,让学生动手编写C语言程序,掌握C语言的基本语法和编程技巧。
4.素数问题的C语言实现:采用项目驱动法,让学生独立完成素数生成程序的设计和实现。
5.素数生成算法的改进和优化:采用讨论法,让学生分组讨论和分析不同算法的优劣,并提出改进和优化的方案。
四、教学资源1.教材:《C语言程序设计》。
2.参考书:《C语言编程思想》。
3.多媒体资料:教学PPT、视频教程。
4.实验设备:计算机。
以上教学资源将贯穿整个教学过程,为学生提供丰富的学习材料和实践机会。
五、教学评估本课程的教学评估将采用多元化评价方式,全面客观地评估学生的学习成果。
具体评估方式如下:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。
2.作业:布置适量的编程作业,评估学生的编程能力和对知识的掌握程度。
C语言求素数问题算法

1.自然数是0,1,2……2.素数是2,3,5……(不包括1的只能背1和它本身整除的自然数)【1】求10000以内的所有素数。
素数是除了1和它本身之外再不能被其他数整除的自然数。
由于找不到一个通项公式来表示所有的素数,所以对于数学家来说,素数一直是一个未解之谜。
像著名的哥德巴赫猜想、孪生素数猜想,几百年来不知吸引了世界上多少优秀的数学家。
尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓。
自从有了计算机之后,人们借助于计算机的威力,已经找到了2216091以内的所有素数。
求素数的方法有很多种,最简单的方法是根据素数的定义来求。
对于一个自然数N,用大于1小于N的各个自然数都去除一下N,如果都除不尽,则N为素数,否则N为合数。
但是,如果用素数定义的方法来编制计算机程序,它的效率一定是非常低的,其中有许多地方都值得改进。
第一,对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不必再用其他的数去除。
第二,对于N来说,只需用小于N的素数去除就可以了。
例如,如果N能被15整除,实际上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。
第三,对于N来说,不必用从2到N一1的所有素数去除,只需用小于等于√N(根号N)的所有素数去除就可以了。
这一点可以用反证法来证明:如果N是合数,则一定存在大于1小于N的整数d1和d2,使得N=d1×d2。
如果d1和d2均大于√N,则有:N=d1×d2>√N×√N=N。
而这是不可能的,所以,d1和d2中必有一个小于或等于√N。
基于上述分析,设计算法如下:(1)用2,3,5,7逐个试除N的方法求出100以内的所有素数。
(2)用100以内的所有素数逐个试除的方法求出10000以内的素数。
首先,将2,3,5,7分别存放在a[1]、a[2]、a[3]、a[4]中,以后每求出一个素数,只要不大于100,就依次存放在A 数组中的一个单元中。
c语言课程设计素数对
c语言课程设计素数对一、教学目标本章节的教学目标是让学生掌握C语言编程中的素数对概念,并能够使用C语言编写程序来找出给定范围内的素数对。
具体目标如下:1.了解素数对的定义和性质。
2.掌握C语言的基本语法和数据类型。
3.掌握循环结构和条件语句的使用。
4.能够使用C语言编写程序来找出给定范围内的素数对。
5.能够对程序进行调试和优化。
情感态度价值观目标:1.培养学生的逻辑思维能力和解决问题的能力。
2.培养学生对编程的兴趣和热情。
二、教学内容本章节的教学内容主要包括素数对的定义和性质、C语言的基本语法和数据类型、循环结构和条件语句的使用。
具体内容如下:1.素数对的定义和性质:介绍素数对的定义,解释素数对的性质和重要性。
2.C语言的基本语法和数据类型:介绍C语言的基本语法和数据类型,包括整型、浮点型、字符型等。
3.循环结构和条件语句的使用:介绍循环结构和条件语句的概念和使用方法,包括for循环、while循环和if-else语句。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过讲解素数对的定义和性质、C语言的基本语法和数据类型、循环结构和条件语句的使用,帮助学生建立知识体系。
2.讨论法:学生进行小组讨论,让学生通过合作和交流来加深对素数对概念的理解。
3.案例分析法:通过分析实际编程案例,让学生掌握如何使用C语言编写程序来找出给定范围内的素数对。
4.实验法:安排编程实验,让学生亲自动手编写程序,培养学生的实际编程能力和解决问题的能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,将选择和准备以下教学资源:1.教材:选择一本与C语言编程相关的教材,用于学生学习和参考。
2.参考书:提供一些与C语言编程相关的参考书籍,供学生深入学习和拓展知识。
3.多媒体资料:制作PPT和教学视频,用于讲解和展示素数对的概念和编程实例。
求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之间的素数,并打印这个结果。
汇编课设-二进制数和十进制数相互转换
课程设计题目二进制数和十进制数相互转换学院计算机科学与技术学院专业计算机科学与技术班级姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学与技术学院题目: 二进制数和十进制数相互转换初始条件:理论:学完“汇编语言程序设计”、“高级语言程序设计”和“数字逻辑”。
实践:计算机学院科学系实验中心提供计算机和软件平台。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)。
(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
(4)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。
时间安排:设计时间一周:周1:查阅相关资料。
周2:系统分析,设计。
周3~4:编程并上机调试。
周5:撰写课程设计报告。
设计验收安排:17周星期五8:00起到计算机学院科学系实验中心进行上机验收。
设计报告书收取时间:17周的星期五下午5:00之前。
指导教师签名: 2011年12月25日系主任(或责任教师)签名: 2011年12月 25日二进制数和十进制数相互转换1 设计题目二进制数和十进制数相互转换2设计要求2.1用汇编语言实现二进制数和十进制数相互转换。
2.2程序要有三个功能(0:退回DOS,1:十进制转化为二进制,2:二进制转化为十进制)。
2.3功能号输入错误时给出提示,并且可以让用户重新选择。
2.4要求输入的十进制数在0-65535之间,输入的二进制数在0-1111111111111111之间。
c素数问题的课程设计
c 素数问题的课程设计一、课程目标知识目标:1. 理解素数的定义,掌握素数的基本性质和特点;2. 学会使用试除法、筛法等基本方法来判断一个数是否为素数;3. 了解素数分布的规律和素数定理的基本概念。
技能目标:1. 能够运用不同的方法判断一个数是否为素数,提高解决问题的能力;2. 能够运用数学语言和符号进行素数问题的表达和交流;3. 能够运用素数知识解决实际问题,如密码学中的素数应用。
情感态度价值观目标:1. 培养学生对数学的兴趣,激发学习热情,形成积极的学习态度;2. 培养学生的逻辑思维能力和团队合作精神,增强解决问题的信心;3. 增强学生对我国古代数学家在素数研究方面成果的认识,培养民族自豪感。
课程性质:本课程为数学学科的一节探究性课程,旨在通过素数问题的学习,提高学生的数学思维能力,培养学生的探究精神和创新意识。
学生特点:六年级学生具备一定的数学基础,具有较强的求知欲和好奇心,喜欢探究性问题。
教学要求:注重启发式教学,引导学生主动参与课堂,通过实际操作和合作交流,提高学生的数学素养。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 素数的定义与性质:介绍素数的概念,探讨素数的基本性质,如唯一分解定理、欧几里得定理等。
2. 素数的判断方法:学习试除法、筛法等基本方法,掌握其原理和应用。
- 试除法:讲解从2开始逐个试除的步骤,探讨优化方法。
- 筛法:介绍埃拉托斯特尼筛法的原理,学会运用筛法找出一定范围内的素数。
3. 素数分布与素数定理:探讨素数分布的规律,介绍素数定理的基本概念。
4. 素数的实际应用:结合课本内容,分析素数在密码学、信息安全等领域的应用。
教学内容安排与进度:第一课时:素数的定义与性质,试除法判断素数。
第二课时:筛法判断素数,素数分布规律。
第三课时:素数定理,素数的实际应用。
教材章节:《数学》六年级下册第四章“数的认识”第2节“素数与合数”。
教学内容遵循科学性和系统性原则,结合课程目标,注重培养学生的数学思维能力和实际应用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 设计题目求1~5000之间的所有素数2. 问题描述应用子程序结构设计友好用户界面,以进一步熟悉开发工具MASM并理解和掌握较复杂程序的设计方法,具体的设计任务及要求如下:(1) 熟悉汇编语言循环结构;(2)打印出1-5000之间的素数;(3)程序采用子程序结构,结构清晰;(4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
3. 设计3.1问题总体思路题目要求输出1~5000之间的素数,解决问题时用一个main程序和两个子程序来完成不同的功能。
在我写的这个程序里,不把数据固定为5000,而是对2到10000中的所有数据都可找出小于该数的所有素数,增加了灵活性。
在这个问题中需要完成的功能为输入一个符合要求的数据,找出小于其是否为素数,若是素数则输出。
因此需要完成的功能是输入数据,判断数据是否符合要求,判断数据是否为素数,输出符合条件的素数以及错误提示等。
在这里用main程序和inputnumber子程序和printf子程序来完成以上功能。
3. 2主要算法设计(1) 主程序main的算法设计思路在界面上显示选单0和1,让用户选择是开始查询素数还是退出程序。
若用户输入1,则调用输入函数(此处还加了一小段代码,为用户输入不是0和1时的交互程序,若输入既不是0,又不是1,则继续选择0或1),若输入数据符合条件,则调用printf函数,找出并显示小于该数的素数。
其自然语言算法如下:Start:1 显示选单(0,退出程序;1,开始查询)2 If(choice=0)3 Exit4 Else if (choice!=1&&choice!=0)重新选择5 Else if (choice=1)调用inputnumber函数,输入数据6 If 数据不符合题意,exit7 Else 调用printf函数(2) 子程序inputnumber的设计思路该子程序主要功能为数据的输入。
在界面上显示 input a number between 1~~10000:,用户输入数字字符输入数据存入缓存区,(其中需要牢记掌握键盘输入数据到缓存区的时候DS:DX为缓冲区首地址,(ds:dx+1)存储的是实际输入的字符数),然后利用缓存区对每位数字加权算出对应数据并存储在bx中,此处的异常处理为当输入不是数据时,将just置0,表示输入异常。
其自然语言算法如下:事先初始化bx中数据为0,初始quan为1,权的增量quanrise为10 Start:1 显示 input a number between 1~~10000:;2 键盘输入数据到缓冲区;3 si=buf[1] ; buf[1]存储的是实际输入的字符数4 If 输入的不是数字字符5 Just=0;(exit)6 Else7 For(buf[i=5];si>0;i--)8 {9 Quan=quan*quanrise;10 and Buf[i],000fh;11 Ax=Buf[i]*quan;12 Bx=bx+ax;13 }(3)子程序printf的设计思路改程序的主要功能为找出所有小于输入数据的素数并输出。
采用的方法为试除法,即从2开始检查,从小到大依次让查找范围内的所有数,然后除以比它小而大于等于2的所有数,如果全部都不能除尽不能除尽的话则是素数,在屏幕上打印。
其自然语言算法如下1 把quan初始化为输入数值的最高位权值2 CX=bx(输入的数值),SI=13 for(i=2;i<=cx;i++)4 if(cx%i==0)break;5 Else6 if(i>k)该数为素数,对其输出4 程序清单datasg segmentbuf db 10db?db 10 dup(?) ;定义12个数的数组,作为缓冲区存储数据just db 1quanrise dw 10 ;权的增量quan dw 1str db 13,10,'input a number between 1~~10000:',13,10,'$';字符串的初始化,13 是回车、10 是换行str_select db 13,10,'select! 0:exit, 1:start',13,10,'$'str_error db 13,10,'input number charaters !',13,10,'$'str_input db 13,10,'$'str_output db 13,10,'numbers needed are:',13,10,'$'datasg endscodesg segmentassume cs:codesg,ds:datasgstart:mov ax,datasg ; datasg为段地址mov ds,ax; 段地址只能通过ds送到段寄存器,必须通过寄存器来传送main proc far ;main函数p1:lea dx,str_select;原操作数有效地址送入寄存器,此处作用为选单,是开始解决问题还是结束mov ah,09hint 21h ;显示str_select存储的内容,即选单int 21h ;输入0或1选择开始解决问题cmp al,'0'je p3 ;若输入的数等于0,cmp al,'1'jne p1 ;若若输入的数不等于1,call inputnumbercmp just,0je p2call printfjmp p1p2:lea dx,str_errormov ah,09hint 21hjmp p1p3: retpop axpop dsmov ax,4c00hint 21hmain endpinputnumber procmov bx,0mov quan,1mov quanrise,10 ;初始化mov ah,09hint 21h ;显示Please input a number between 1~~10000: lea dx,buf ;buf传送地址,DS:DX为缓冲区首地址mov ah,0ahint 21h ;键盘输入数据到缓冲区mov al,buf[1] ;(ds:dx+1)存储的是实际输入的字符数 cbwmov si,ax ;字符数并传值给siSum:mov al,buf[si+1]cmp al,'0'jb g1 ;<0,cmp al,'9'ja g1 ;异常处理and ax,000fh ;将字符转化为数mul quan ;每位乘以权add bx,ax ;存储在bx中mov ax,quanmul quanrisemov quan,ax ;权增加10倍dec sijnz Summov just,1jmp g2 ;循环4位执行g1: mov just,0 ;说明输入的不是数字,重新输入 g2:retinputnumber endpprintf proclea dx,str_inputmov ah,09hint 21h ;ds:dx为串地址,显示输入字符串lea dx,str_outputmov ah,09hint 21h ; ;ds:dx为串地址,显示输出字符串mov ax,quancwddiv quanrisemov quan,ax ;输入数的权mov cx,bx ;bx为要输出的数据mov si,1a:mov ax,sib:inc axcmp ax,cxja Exitmov bx,2abc:cmp bx,axjnb continue ;大于等于mov si,axcwddiv bxcmp dx,0000Hje ainc bxmov ax,sijmp abccontinue:mov bx,axand dx,0mov di,quand:div diadd ax,30h ;转化为对应大小的数字mov si,dxmov dl,almov ah,2int 21hmov ax,dicwddiv quanrisemov di,axmov ax,sicwdcmp di,0hjne dmov dl,20hmov ah,2hint 21hmov ax,bxcmp ax,cxjb bExit:retprintf endpcodesg endsend start4. 运行结果(1) 初始界面(2)开始执行(3)输入范围5000(4)输出结果(5)输入另一个数2000(6)输入过大的数6. 心得体会通过本次课程设计,进一步巩固了我对masm编译环境的认识,而且对之前所学的课本知识有了进一步的了解和认知,本来感觉对课本知识掌握的不错,但这次课程设计让我发现自己并没有对汇编语言设计有一个很好的了解,对子程序还有很多DOS功能调用掌握的并不好,以至于很多东西都要翻书查找相关内容,重新学习,才能做好程序。
在编译过程中,难免会出现了很多意想不到的各种逻辑,语法,运行上的错误从而得不到正确的结果,特别是在跳转发生是寄存器内容的变化方面需要进行细致的处理,稍有不留心就会出现错误,遇到这些错误时,我们一定要耐心调试,才能够发现其中的错误。
在汇编语言程序设计中,因为是基于底层的语言,有各种跳转语句和控制语句,因此进行程序设计时,我们一定要养成规划程序的总体机构的好习惯,画出程序执行流程图,根据每个功能的分布情况,形成了程序的框架设计,总之通过这次课程设计,我认识到平时应该多练习编写经典程序,只有这样才能熟练掌握汇编语言,因为编写程序时会遇到各种编译,运行错误,这些都是我们在平常的书本学习遇不到的问题,毕竟遇到问题才能解决问题,才能让我们的水平有质的提升。
参考文献:【1】沈美明,温冬婵,2001,IBM-PC汇编语言程序设计(第二版),清华大学出版社,201【2】沈美明,温冬婵,2001,IBM-PC汇编语言程序设计实验教程,清华大学出版社,88。