1、大数相乘目录:系统功能分析3基本要求.3功能需求.3开发工具 3程序说明.3大数相乘总括 4源程序4测试与结论 5创新及难点.6程序设计总结心得体会62011-6-9正文内容如下:一、 系统功能分析功能分析:大数相乘可以实现对两个任意大的正数相乘。用户可以通过本程序对无法实现的两数进行相乘,其意在方便用户,方便群众。二、1编写基本目的要求:分析程序开发过程的具体问题,构架程序的功能,同时使该程序的使用者对本程序有一定的了解,为实现功能的编码做好基础,对数据结构有一个更深入的了解。1、背景: a.开发的软件系统的名称:大数相乘。 b.本项目的任务提出者 汤亚玲;开发者:陈浩。2、 功能需求:根据
2、大数相乘的实际需求,分析系统应该设计的功能,其中应该包括对于超过整型大数的输入,存储,运算,输出。实现乘法的一般功能。3、数据需求:运行环境及知识要求: 运行环境要求:windows xp/visita/7 知识要求:1 熟悉vc+6.0编译系统2 熟悉AISCC3 熟练掌握字符与数字之间的转换4分析及实现简介: 由于大数相乘问题相对简单,我只写了一个主函数实现了其功能。大数用字符数组存储,用AISCC数字之间转换进行运算。二、程序的说明: 首先定义两个字符数组存储两个大数,在定义两个数组,一个用与保存结果,另一个为辅助只用,具体的思想是a b 两个大数 用b的个位一次乘a的每一位结果保存在辅
3、助数组temp中,在进位取余得到正常的10进制数,用sum数组的temp的求和,用flag标记,以便temp的错位相加。用while可以控制大数运行的次数。三、模块分析及源程序:/* 大数相乘问题 */ #includestring.h#define MAX 10000int main() int n,i,j,t,s; char a100,b100,temp105=0,sumMAX=0; /*定义两个字符数组a,b用来存储大数 temp为辅助*/ int lena,lenb,flag,m=0; printf(输入运算的次数n:n); scanf(%d,&n); /*输入运算的次数n*/ whi
4、le(n-) m+; flag=0; /*设置标志flag*/ printf(输入将要运算的两数a,b;用回车键相分隔n scanf(%s%s,a,b); /*输入两要相乘的大数用回车键相分隔*/ lena=strlen(a); lenb=strlen(b); /*求两数的长度*/ for(j=lenb-1;j=0;j-) for(t=lena,i=lena-1;ii-,t-) tempt=(ai-48)*(bj-48); /*依次从低位开始求的b的某一位与a的乘积*/ for(t=lena;t=1;t-) if(tempt9) tempt-1+=tempt/10; tempt%=10; /*
5、 进位取余*/ for(s=lena+lenb-flag,t=lena;t-,s-) /*标志flag确保错位相加*/ sums+=tempt; tempt=0; /*辅助数组复位志零*/ for(s=lena+lenb;ss-) if(sums sums-1+=sums/10; sums%=10; /* s 进位取余*/ flag+; sumlena+lenb+1=0; for(s=0;s=lena+lenb;s+) sums=sums+48; /* 数值还原,48对应0字符*/lena+lenb; if(sum0=48) for(t=0;t=lena+lenb-s;t+) sumt=sum
6、t+1; /* 高位有零向前移位,防止输出的数第一位为零*/ else break;Case %d:,m); /输出结果;%s * %s = %sn,a,b,sum); if(n!=0) for(s=lena+lenb+1;s-) /*sum字符数组复位志零等待下一轮while循环*/ sums=0; return 0; 测试与结论:进过我的反复测试,只要是两个正整数相乘结果正确,程序稳定性好,可以运算任意大是数。运行结果抓图如:”四、创新及难点: 1、创新:只有一个主函数,while循环实现大数相乘,使得程序简短高效。使用temp辅助字符数组,降低了运算是难度,程序清晰易懂。系统在操作提示上
7、较多,用户与系统间的信息交互比较方便,便于操作。 2、难点:要用一个大数的各个位去乘一个大数并把的到的数反向存储且使得数字每一位不大于9。因为相乘每一位权重不一样,要错位相加。得数求余,变换。四、心得体会:通过为一学期的数据结构课程设计实验课使我了解到了一个程序开发的过程,虽然规模不大,但为我以后的编程学习打下了基础。在编程的过程中,我体会到了学习编程的辛苦,为了一个算法的实现而思考,为了一个小小的编译错误而花时间去寻找,这需要很大的毅力和耐心,而且要有良好的思维,这才使得我完成这个任务,也使我感到一分喜悦,毕竟自己完成了一个有模有样的程序。于此,我也发现自己的一些不足,良好的编程习惯的养成,
8、坚定的毅力和耐心仍是我要加强的,同别人的交流也是必须的,这样才能不断使我进步。题目二:马的遍历系统功能分析9基本要求9程序说明.9创建标志矩阵函数模块9巡游子函数模块.9赋值子函数模块.11主程序函数模块11测试运行与结论 12程序设计总结心得体会13流程图 系统功能分析:问题描述:设计一个国际象棋上的马的遍历棋盘的演示过程的程序。基本要求:将马任意放在国际棋盘的8x8的棋盘board88的某个方格内,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上的全部64个方格。编制程序,求出马的行走路线,并按求出的行走路线,将数字1,2,。64依次填入一个8x8的方阵,输出之。程序说明:首先,国
9、际象棋是8*8的棋盘,马的走法是“马走日”,忽略“蹩脚马”的情况。其次,这个题目采用的是递归,算法当中的深度优先算法和回溯法:在“走到”一个位置后要寻找下一个位置,如果发生“阻塞”的情况,就是后面走不通的情况,则向后回溯,重新寻找。在寻找下一步的时候,对周围的这几个点进行比较,从而分出优劣程度,即看它们周围可以走的点谁最少,然后就走那条可走路线最少的那条。经过这样的筛选后,就会为后面的路径寻找提供方便,从而减少回溯次数。最后,本程序的棋盘和数组类似,因而采用数组进行存储,同时还有八个方向的数组,和为栈设计的每个点周围的八个方向那些可以走的数组。数据初始定义如下: /* 马 的 变 遍 历 问
10、题 */#include int f1111 ; /*定义一个矩阵来模拟棋盘*/int adjm121121; /*标志矩阵,即对于上述棋盘,依次进行编号 1-121(行优先)可以从一个棋盘格i跳到棋盘格j时,adjmij=1*/void creatadjm(void); /*创建标志矩阵函数声明*/void mark(int,int,int,int); /*将标志矩阵相应位置置1*/void travel(int,int); /*巡游函数声明*/int n,m; /*定义矩阵大小及标志矩阵的大小*/创建标志矩阵子函数:/*创建标志矩阵子函数*/void creatadjm() int i,j; for(i=1;i=n;i+) /*遍历矩阵初始化*/ for(j=1;jj+) fij=0;=m;i+) /*标志矩阵初始化*/ adjmij=0;i+)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1