人人范文网 范文大全

数据结构课设

发布时间:2020-03-02 23:22:41 来源:范文大全 收藏本文 下载本文 手机版

数据结构课设 大整数计数器 1.问题描述

实现大整数(200位以内的整数)的加、减、乘、除运算。 2.设计要求

设计程序实现两个大整数的四则运算,输出这两个大整数的和、差、积、商及余数。

3.数据结构

本课程设计采用顺序串来实现。 4.问题分析

由于整数数据存储位数有限,因此引入串的概念,将整型数据用字符串进行存储,利用字符串的一个字符存储大整数的一位数值,然后根据四则运算规则,对相应位依次进行相应运算,同时保存进位,从而实现大整数精确的运算。 具体设计思路如下:

(1)计算大整数加法时,采用数学中列竖式的方法,从个位(即字符串的最后一个字符)开始逐位相加,超过或达到10则进位,同时将该位计算结果存到另一个字符串中,直至加完大整数的所有位为止。

(2)计算大整数减法时,首先调用库函数strcmp判断这两个大整数是否相等,如果相等则结果为0,否则用compare函数判断被减数和减数的大小关系,进而确定结果为正数还是负数,然后对齐位依次进行减法,不够减则向前借位,直至求出每一位减法之后的结果。

(3)计算大整数乘法时,首先让乘数的每一位都和被乘数进行乘法运算,两个乘数之积与进位相加作为当前位乘积,求得当前位的同时获取进位值,进而实现大整数的乘法运算。

(4)计算大整数除法时,类似做减法,基本思想是反复做减法,从被除数里最多能减去多少次除数,所求得的次数就是商,剩余不够减的部分则是余数,这样便可计算出大整数除法的商和余数。

需求分析 (1) 任何一个表达式都是由操作数、运算符和界限符组成的,我们称之为单词.(2) 表达式求值首先要符合四则运算规则: ① 先乘除,后加减 ② 从左到右进行运算 ③ 先括号内,后括号外 (3) 功能实现: ① 若当前单词为数字串,则压入数值栈 ② 若当前单词为运算符并大于运算栈的栈顶符号,则进栈 ③ 若当前单词为运算符并等于运算栈的栈顶符号,去括号,输出 ④ 若当前单词为运算符并小于运算栈的栈顶符号,则进行运算

课程设计的目的 通过课程设计全面掌握《C语言程序设计》关键知识点,掌握C语言中数组、指针、结构体、文件等方面的基本知识。

通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C程序的

调试过程。

培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。

课程设计的任务和要求 任务: 编程求出输入的两个正整数之和,这两个正整数的可能达到200位。

要求:

输入:

共有两行,第一行为第1个正整数;第二行为第2个正整数。

输出:

2个正整数之和。

主要参与成员

姓 名 学 号

系 别 班 级 主要作用(分工)

成果形式

设计 软件 作品 其他:

完成情况及以后的拓展设想 通过用C语言编写函数基本实现了大整数相加这个程序,但该程序仍存在一些不足,还可以加上一些语句使程序具有容错功能,并且可以正确计算一个负数和一个正数相加。

课 程 设 计 鉴 定 情 况 表 小组鉴定意见

小组长签名:

年 月 日

指导教师意见

教师签名:

课程设计成绩 优 良 及格 不及格 教研室意见

年 月 日 备注 《C语言程序设计》课程设计报告书 作者:廖 序 课程设计概述 课程设计名称

大整数相加 任务要求: 编程求出输入的两个正整数之和,这两个正整数的可能达到200位。

输入:

共有两行,第一行为第1个正整数;第二行为第2个正整数。

输出:

2个正整数之和。 开发环境: C语言。C语言是目前世界上流行、使用最广泛的高级程序设计语言。1972年,C语言在美国贝尔实验室里问世,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSIC标准。

目前,在微机上广泛使用的C语言编译系统有MicrosoftC、Turbo C、Borland C等。这些C语言版本不仅实现了ANSIC标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。

C语言的特点: C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。 C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。

由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。

此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上

,从而形成了多种版本的C语言。

参考资料

李铮、叶艳冰、汪德俊,C语言程序设计基础与应用,清华大学出版社,2005 [2]CSDN技术中心

二、概要设计

为了实现大整数相加这个程序,将程序划分为了三个模块: 输入数据。 运算。 输出结果。

首先定义了子函数Input()来存储用户输入的两个加数,为了满足任意位数的两个大整数相加,在子函数Input()中嵌套调用子函数Init()使sum数组里面存放的数初始化为”0”。

然后定义子函数Long_Add()使两个大整数作加法运算,从后面往前面相加,附带进位。定义子函数Output()实现输出结果。

最后如下图所示,在主函数main中调用Input(),Long_Add(),Output()三个子函数实现程序。

三、详细设计

程序的流程图:

四、调试过程 第一次 测试数据a=1234567893456767,b=111111 编译运行后不能输出结果,检查函数后编译正确。再次分析,发现如果直接把a,b,sum定义为unsigned int型的话,计算出来的和的范围只能在0~65535之间,否则就会出现错误。 尝试将a,b,sum存放到字符数组中,从个位开始,一位一位相加。

第二次 测试数据a=1234567893456767,b=111111 编译运行后仍不能输出结果。分析原因,在用于输出的子函数Output()中,输出数组字符数组sum[]前未确定和的最高非零位。

尝试加入for(i=0;i

第三次 测试数据a=99999919,b=99 编译运行后发现计算出来结果不正确。经过分析,函数中没有对最后

一个进位进行处理。

尝试加入while(carry > 0) 语句,再次进行调试。

{ tempsum = sum[i]-\'0\'+carry ; sum[i] = tempsum%10+\'0\'; carry = tempsum/10; i--; } 第四次 测试数据a=99999919,b=99 编译运行后得到正确结果。

第五次 随意输入几组数据进行测试,结果都是正确的。程序得到实现。

五、结论与体会

通过不断的调试、修改,本课程设计最终实现了200位以内的两个大整数相加,但程序还

可以进一步完善,程序中仍存在一些不足之处,比如缺少容错功能,不能准确计算负整数加正整数,等等问题

虽然C语言程序设计在上学期做为我们的必修课已经学习过了,但书到用时方恨少,这次课程设计的学习程序设计中暴露出的我自身的问题更是非常明显。

一开始看到题目认为非常简单,直接将两个数都定义为整型。编写程序并运行后发现并不能达到题目的要求,计算出来的和只能小于等于65535,否则就会出现错误。分析后,将数据作为字符串来处理,用for循环语句从存数的字符数组中一位一位的取数出来,按照数位对齐,从个位开始,按位相加,逢十进一的运算规则进行运算。最后用字符输出函数putchar()输出计算出来的结果。由于程序偏大且较复杂,将程序划分为了输入数据、运算、输出数据三个子程序。数次编译调试后,最终使程序得以实现。

经过三个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,让我能够进一步的掌握和运用C语言来编写程序。要想学好C语言要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处和薄弱环节。

首先,基础掌握不牢固,对于C语言中的许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,查阅课本,设计效率很低。

其次,经典算法掌握不牢。在完成作业的过程中还需查阅书籍和借鉴他人。

再次,程序量过大的时候,头绪理不清。杂乱无章,无系统性,不便调试和阅览,自己也易于出错。

并且对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

六、源程序清单 #include #include &l

t;string.h> #define Max 1000 char sum[Max+1]; /*和*/ char a[Max],b[Max]; /*两个加数*/ int len1,len2; void Input(char a[],char b[]) { int i,len; void Init(char a[]); /*对Init()函数进行声明*/ printf(\"Please enter two integer:\\n\"); scanf(\"%s %s\",a,b); len1=strlen(a); len2=strlen(b); Init(sum); len=strlen(a); for(i=len-1; i>=0; i--) sum[Max+i-len] = a[i]; } void Init(char a[])

{ int i; for(i=0; i

void Long_Add(char sum[],char new[]) { int i,j; int len; int tempsum; int carry = 0; /*进位*/ len = strlen(new); /*从个位开始,按位相加,逢十进一*/ for(i=Max-1,j=len-1; i>=0,j>=0; i--,j--) { tempsum = sum[i]-\'0\'+new [j]-\'0\'+carry; sum[i] = tempsum%10+\'0\'; carry = tempsum/10; } while(carry > 0) /*处理最后一个进位*/ {

tempsum = sum[i]-\'0\'+carry ; sum[i] = tempsum%10+\'0\'; carry = tempsum/10; i--; } return; } void Output(char sum[]) {int i,n; /*寻找和的最高非零位*/ for(i=0;i

Long_Add(sum,b); Output(sum); getch(); return 0;

数据结构课设报告

操作系统课设

单片机课设

EDA课设

计算机网络课设

课设心得体会

Matlab课设

课设规范

课设说明

课设小结

数据结构课设
《数据结构课设.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档