ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:408.29KB ,
资源ID:25986920      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25986920.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c语言程序设计报告超大数据的运算.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c语言程序设计报告超大数据的运算.docx

1、c语言程序设计报告超大数据的运算C语言课程设计报告题目: #1 超大数据的运算 学 院: 班 级: 学 生: tax 学 号: 提交日期: 目录1、需求分析.3 1.题目要求.3 2.限制条件及具体目标.32、总体设计.3 1.完成过程.3 2.问题与解决方法.3 3.程序设计思想.43、详细设计.5 1.函数列表.5 2.函数关系调用图.54、程序运行结果测试与分析.55、结论与心得.9附源代码.91、需求分析1.题目要求 对超大型数据(考虑负数和小数)进行存储、运算和输出打印。运算具体要求如下:1) 进行四则运算;2) 整数型超大数据的阶乘;3) 超大型数据某范围内孪生质数的判断输出;4)

2、 超大型数据文件的存储和读取。2.限制条件及具体目标1) 将数据要求为超大型且考虑负数与小数,即各种数据类型都要考虑,并处理超出各种数据类型所能表示范围的数据;2) 运算要求包括四则运算、阶乘、孪生质数的判断;3) 程序要求支持文件的存储和读取。二、总体设计1.完成过程 本程序的目标是完成超大数据(以下简称大数)的运算,考虑负数和小数意味着数据类型要带符号并且包括浮点数据,所谓超大,即超出数据类型所能保存的范围,会发生溢出的情况,其次是大数的正常显示也无法通过一般数据类型实现,主要思想是利用字符串对大数进行保存,然后分析各种要求的四则运算,阶乘运算,孪生质数判断的过程,接下来模拟运算过程编写算

3、法即可。在各个算法的编写过程中插入文件的创建打开与写入,从而实现文件的存储和读取。至此本程序的功能基本编写完成。2.问题与解决方法 运算过程分析与模拟算法的编写本身比较复杂。因为考虑负数的要求,就必须有判断符号的过程,体现在加减法的运算中,就要求程序要能根据符号的正负来选择运算方式,从而得出正确的结果,体现在乘除法的运算中,则判断是否异号进而决定计算结果的符号,并且在余数的计算中还有更复杂的进位分析,再加上考虑小数的要求,问题的复杂度就又提高一层,在乘除运算中,可以通过将浮点大数转换为整数,记录两数小数位数,计算得到的基础上再加上相应小数点即可。在加减法中小数点位置不会改变,将小数点对齐后再进

4、行运算即可。阶乘运算在分析清算法后较容易实现,即实现循环的乘法。孪生质数则通过接受要求范围后循环进行素数判断(利用根号)至循环结束即可。3.程序设计思想三、详细设计1.函数列表void jianfa(int a,int b,int f)void jiafa(int a,int b,int f)void chengfa( int a, int b)void chufa(char *beichu, char *chu, char *shang, char *yu)void si_ze()void jie_cheng()void luansheng_zhishu()int main()2.函数的调用

5、关系图4、程序运行结果测试与分析 经大量具代表性的数据测试,本程序已能实现预期功能,符合课程题目要求,能实现超大数据的四则运算、阶乘运算以及范围内孪生质数的判断输出,并将数据存储到指定文件中,程序演示效果如下:表格 1 四则运算演示表格 2 阶乘计算演示表格 3 孪生质数演示表格 4 数据文件存储演示五、结论与心得 我主要负责阶乘运算的实现,并和小组成员一起实现其他运算功能 1、刚开始考虑进位问题过于简单,导致测试数据时多次出错;2、分析运算方式并将其编写为算法的过程中花费了很大的功夫理解和编写,发现自己的编程思维还有待提升;3、开始写程序时源程序没有严格按单元模块结构编写,可读性较差。4、由

6、于初次进行大规模的程序设计,层次结构划分不太合理,应在以后的设计中强化此思维,逐渐与高效简练的程序设计接轨。附源代码如下#include #include #include #include #include#define MAX 101#define N 1000#define M 250000/*函数功能:利用字符串实现超长数加减法运算 */void jianfa(int a,int b,int f); int lena,lenb,da=1,db=1; /* 把lena,lenb设为全局变量,lena纪录第一个超长型数组的位数,lenb纪录第二个超长型数组的位数*/char b1MAX,

7、b2MAX; /*纪录需要计算的两个超长型数据 */void input(int a1,int a2) /*函数input为输入函数,用来纪录两个待计算的超型数据,以数组首地址为参数.以实现返回两个超长型数据*/ FILE *fp1; if(fp1=fopen(xxx.txt,a+)=NULL) printf(n cannot creat!); exit(0); int i,fa=1,fb=1; printf(请输入第一个数:n); scanf ( %s, b1); fputs(b1,fp1); fputs( , ,fp1); printf(请输入第二个数:n); /*输入两个超长型数据*/

8、scanf(%s,b2); fputs(b2,fp1); lena = strlen( b1 ); /*lena纪录b1的位数*/ lenb = strlen( b2 ); /*lenb纪录b2的位数*/ if(b10=-) lena-; da=-1;fa=0; /*判断数组的符号*/ if(b20=-) lenb-; db=-1;fb=0; for (i=0; ilena; i+,fa+) a1i=b1lena-fa-0; /*把字符形数据b1转为整数形数据,同样用数组纪录*/ for (i=0; i0|f) if(lenalenb) s=lena; else s=lenb; /*用s纪录结

9、果的最大位数*/ for(i=0;is;i+) ci=ai+bi+ci; ci+1=(int)ci/10; /*ci+1代表进位*/ ci=(int)ci%10; /*超长数加法运算过程*/ if(cs) s+; /*判断最后结果的位数*/ fputs(n两者之和:n,fp1); if(da0&f|da=0;i-) printf(%d,ci); fprintf(fp1,%d,ci); /*输出结果*/ else jianfa(a,b,1); void jianfa(int a,int b,int f) /*超长数减法运算*/ FILE *fp1; int i,u=0,cMAX+1=0,s; i

10、f(fp1=fopen(xxx.txt,a+)=NULL) printf(n cannot creat!); exit(0); fputs(n两者之差:n,fp1); if(da*db0|f) if(lenalenb) s=lena; else /*用s纪录结果的最大位数*/ s=lenb; for(i=s;ai=0;i-) if(aibi) u=1; /*u纪录结果符号*/ if(!u) /*超长数减法运算过程*/ for(i=0;is;i+) if(aibi) ai+1-; ai+=10; ci=ai-bi; else /*当ab时的处理*/ for(i=0;is;i+) if(bi1)

11、s-; /*判断最后结果的位数*/ if(f&(da0&u|da0&(db0&u|u&!f) printf(-);fputc(-,fp1); if(da0&db=0;i-) printf(%d,ci);fprintf(fp1,%d,ci); else jiafa(a,b,1); /*超长型数据乘除法运算 */void chengfa( int a, int b) /*超长数乘法运算*/ FILE *fp1; int i, j, c2*MAX = 0,s; s = lena + lenb - 1; /*用s纪录结果的最大位数*/ if(fp1=fopen(xxx.txt,a+)=NULL) pr

12、intf(n cannot creat!); exit(0); fputs(n两者之积:n,fp1); for(i = 0; i lena; i+) /*超长数乘法运算过程*/ for(j = 0;j lenb; j+) ci+j = ai * bj + ci+j; ci+j+1 = ci+j / 10 + ci+j+1; ci+j = ci+j % 10; while(!cs) s-; /*判断最后结果的位数*/ if(da*db= 0; i-) printf(%d,ci);fprintf(fp1,%d,ci); /*输出结果*/ /比较两个用字符串存储的超长数的大小,若ab,返回1;a=b

13、,返回0;a lenB ? 1 : -1;else return strcmp(a,b);/超长正数的减法,且被减数大于减数void cha(char *beijian, char *jian, char *chas)int cBMAX = 0;/用来存储被减数的整型数组int cJMAX = 0;/用来存储减数的整型数组int cCMAX = 0;/用来存储两数之差的整型数组int lenM = strlen(beijian), lenS = strlen(jian);/被减数和减数字符串的长度int i;/逆序复制减数和被减数到整型数组(因为减法运算是从低位开始),保证cB大于cJ for

14、 (i=0; ilenM; i+) cBi = beijianlenM-1-i - 0; for (i=0; ilenS; i+) cJi = jianlenS-1-i - 0;for (i=0; i= cJi)/被减数大于减数,直接相减 cCi = cBi - cJi; else /否则要向前借位 cCi = cBi + 10 - cJi; -cBi+1; while (cCi-1 = 0) i-;int j = 0;int k;for (k=i-1; k=0; k-,j+)/逆序存储两数之差到字符串chas chasj = cCk + 0;chasj = 0;void chufa(char

15、 *beichu, char *chu, char *shang, char *yu) /超长型数据的整除,求余运算 int lenv=strlen(beichu),lens=strlen(chu); if(beichu0=-) da=-1; /判断数组的符号 for(int i=0;ilenv;i+) beichui=beichui+1; lenv-; if(chu0=-) db=-1; for(int i=0;ilens;i+) chui=chui+1; lens-; if (Compare(beichu, chu) = 0)/被除数等于除数 strcpy(shang, 1); strcp

16、y(yu, 0); return ;if (strcmp(chu, 0) = 0 | Compare(beichu, chu) = 0)/连减试商 s+; cha(yu, chu, yu); shangk+ = s + 0;/记录每一位得到的商值 if (strcmp(yu, 0) = 0) strcpy(yu, ); /使余数的值为空,去掉多余的0shangk = 0; /去掉多余的0int j;for (i=0; shangi=0; i+) ;for (j=i; j=k; j+) shangj-i = shangj;void put_chufa() FILE *fp1; if(fp1=fo

17、pen(xxx.txt,a+)=NULL) printf(n cannot creat!); exit(0); char cMAX = 0, dMAX = 0; chufa( b1, b2,c,d); puts(两者之商:); fputs(n两者之商:n,fp1); if(da*db0&strcmp(c,0) printf(-);fputc(-,fp1); puts(c); fputs(c,fp1); puts(余数:); fputs(n余数:n,fp1); puts(d); fputs(d,fp1); fputc(n,fp1);void si_ze() int aMAX=0,bMAX=0;

18、input(a,b); printf(n两者之和:n,b1,b2);jiafa(a,b,0); printf(n两者之差:n,b1,b2);jianfa(a,b,0); printf(n两者之积:n,b1,b2);chengfa(a,b); printf(n); getchar(); put_chufa(); /*超大数阶乘运算 */void jie_cheng() FILE *fp1; char c=n; int n; int i,j; int aM; /存数运算结果 int p,h; /p存储当前结果的位数,h为进位 a1=1; printf(输入所要求的整数:); scanf(%d,&n

19、); if(fp1=fopen(xxx.txt,a+)=NULL) printf(n cannot creat!); exit(0); fputs(n阶乘:n,fp1); p=1; for(i=2;i=n;i+) /循环与2,3,4.n相乘 for(j=1,h=0;j0) /如果h不为0 aj = h % 10 ; h = h / 10 ; j+; p = j - 1 ; /将当前的位数赋给p printf(%d!=,n); fprintf(fp1,%d,n); fputs(!=,fp1); for(i=p;i=2;i-) printf(%d,ai); fprintf(fp1,%d,ai);

20、printf(%dn,ai); fprintf(fp1,%d,ai); fputc(c,fp1); fclose(fp1);/*超大数据范围内孪生质数的输出 */ int prime(long int n) long int r,i; r=(int)sqrt(n); for(i=2;i=r;i+) if(n%i=0) /此处n%i=0,说明不是素数,立刻跳出循环 return 0; return 1; void luansheng_zhishu() FILE *fp1; long int m,n,i,t=0; if(fp1=fopen(xxx.txt,a+)=NULL) printf(n ca

21、nnot creat!); exit(0); printf(请输入范围m,nn); scanf(%d%d,&m,&n); fprintf(fp1,%d,m); fputc(,fp1); fprintf(fp1,%d,n); fputc(n,fp1); fputs(范围内孪生质数有:n,fp1); for(i=m;i=n-2;i+) /此处限制i=n-2,不然prime(i+2)超过范围;另外i每次自加1, /不能加2 if (prime(i)&prime(i+2) t+=1; printf(%d,%d)n,i,i+2); fputc(,fp1); fprintf(fp1,%d,i); fputc(,fp1); fprintf(fp1,%d,i+2); fputc(),fp1); fputc(n,fp1); printf(%dn,t); fprintf(fp1,%d,t); fputc(n,fp1); if(t=0) printf(无孪生素数!); /这个输出格式应该在循环外判定 fputs(无孪生素数!,fp1); /getch(); /*主函数*/int main() int n; printf(选择想要进行的运算:1、四则运算,2、阶乘,3、孪生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1