c语言大数运算课程设计,《C语言课程设计》课程设计报告--大数乘法运算.doc

《C语言课程设计》

课程设计×10k-1+a[k-1]×10k-2+…+a[2]×10+a[1]

其中a[0]保存该大数的位数。

实现两个大数相乘;

在此基础上实现两个大数相除。

4、设计目标

用数组表示每一个大数,同时实现大数相乘和两个大数相除

概要设计

问题解决的思路概述

首先是确定结构化程序设计的流程图,利用已存在的数据结构来构造一个存储大数的结构,接着把运算分成乘、除两个主要的模块:实现乘法的模块、实现除法的模块,然后各个模块里面还要分成若干种情况来考虑并通过函数的嵌套调用来实现其功能。最后,编写main主函数以实现大整数的正确输入与正确输出,调试程序并将不足的地方加以修改。总而言之,就是先用自顶向下、逐步细化的设计方法来分析并画出程序设计流程图;然后用自下而上、逐步积累的设计方法来写出程序。

2、本程序下定义的相关函数

1、void jia(char *ch1 , char *ch2 , char *ch3)//大数相加函数,作用为将ch1、ch2之和存入ch3

2、void cheng(char *ch1 , char *ch2 , char *ch3) //定义函数cheng用来算乘法,ch1,ch2,ch3分别是被乘数字符串、乘数字符串、和结果字符串的首指针

4、void chu (char *ch1 , char *ch2 , char *ch3)

3、void Mod (char *ch1 , char *ch2);

/*声明存储两个操作数的字符串ch1,ch2

声明各个子函数*/

3、主程序的流程基函数调用说明

1)、主程序的简要流程图:

详细设计

1、数字存储的实现

大数计算的因数和结果精度一般是少则数十位,多则几万位。在C语言中定义的类型中精度最多只有二十多位,此次程序采取定义一个结构体类型存贮的方式来存放大数符号。

二则运算算法

在大数二则运算的程序设计中,每一部分都会调用一些其他其它函数来辅助完成运算(例如:对结构体变量的初始化,比较两个数的大小,将字符型数据转换成结构体类型数据和将结构体类型数据转换成字符型数据等),在这里主要说明二则运算的程序设计,其它函数的程序设计和具体调用关系请查看程序清单。

2.1乘法运算的实现

初始化游标i,j、字符串ch1和ch2的长度len1,len2、结果字符串的长度len3、临时变量temp、整形数组num1 num2 num3,并将其值全部初始化为0,利用两次for循环将字符数组中的每个值都转化为整型并存放至数组num1、num2中对应的位置, 将数组num1和num2中的各位数字依次相乘并向前进位,结果存入数组num3中, 检测两数相乘的结果的长度,并将各位转化为字符后存入字符串ch3中.在字符串的最后添上结束标志'\0'

程序如下:

2.2除法运算的实现

比较两字符串所代表数值的大小,ch1大则返回1,ch2大返回-1,相等时返回0,优先比较长度,长度相等时,从高位向低位依次比较大小,若全部相等返回0,初始化结果字符串为0,复制ch2的内容到ch5

程序如下:

用户使用说明

将程序导入Visual C++ 6.0;通过VC运行后你会看到以下情形:

此时输入:888888888888888888

再输入:444444444444444444

测试结果

如上图所示:在输入18个8和18个4后结果如下图所示:

实验程序

#include

#include

#define LIMIT 200

void jia(char *ch1 , char *ch2 , char *ch3)//大数相加函数,作用为将ch1、ch2之和存入ch3

{

int len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , i , tmp , num1[LIMIT]={0} , num2[LIMIT]={0} , num3[LIMIT]={0};

//定义两字符串的长度len1,len2,游标i,临时变量tmp,初始化整型数组num1、num2、num3,所有成员全部为0,以便后面的操作

for (i=len1-1;i>=0;i--)

num1[len1-1-i] = ch1[i] - 48;

for (i=len2-1;i>=0;i--)

num2[len2-1-i] = ch2[i] - 48;

//利用循环将字符串中的每个字符转化为整型后存入数组num1,num2

i = 0 , tmp = 0 , len3 = len1 > len2 ? len1 : len2;

//将len1和len2中较大的值赋给len3

wh

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
密码学分为两类密码:对称密码和非对称密码。对称密码主要用于数据的加/解密,而非对称密码则主要用于认证、数字签名等场合。非对称密码在加密和解密时,是把加密的数据当作一个大的正整数来处理,这样就涉及到大整数的加、减、乘、除和指数运算等,同时,还需要对大整数进行输出。请采用相应的数据结构实现大整数的加、减、乘、除和指数运算,以及大整数的输入和输出。 【基本要求】 1.要求采用链表来实现大整数的存储和运算,不允许使用标准模板类的链表类(list)和函数。 同时要求可以从键盘输入大整数,也可以文件输入大整数,大整数可以输出至显示器,也可以输出至文件。大整数的存储、运算和显示,可以同时支持二进制和十进制,但至少要支持十进制。大整数输出显示时,必须能清楚地表达出整数的位数。测试时,各种情况都需要测试,并附上测试截图;要求测试例子要比较详尽,各种极限情况也要考虑到,测试的输出信息要详细易懂,表明各个功能的执行正确。 2.要求大整数的长度可以不受限制,即大整数的十进制位数不受限制,可以为十几位的整数,也可以为500多位的整数,甚至更长;大整数的运算和显示时,只需要考虑正的大整数。如果可能的话,请以秒为单位显示每次大整数运算的时间。 3.要求采用类的设计思路,不允许出现类以外的函数定义,但允许友元函数。主函数中只能出现类的成员函数的调用,不允许出现对其它函数的调用。 4.要求采用多文件方式:.h文件存储类的声明,.cpp文件存储类的实现,主函数main存储在另外一个单独的cpp文件中。如果采用类模板,则类的声明和实现都放在.h文件中。 5.不强制要求采用类模板,也不要求采用可视化窗口;要求源程序中有相应注释。 6.要求采用Visual C++ 6.0及以上版本进行调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值