免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
. 序号: 学号:- 课 程 设 计设计课程名称: C语言课程设计 题 目: 矩阵的运算 学 生 姓 名: * 学 院(系): * 专 业 班 级: * 指 导 教 师: * 专业技术职务: 设计时间: * 年 * 月 * 日 *年 * 月 *日 目录1. 矩阵运算任务书32. 描述及绘制出系统的功能结构框图73. C语言程序代码84. 使用说明155. 设计日志及心得体会16矩阵运算任务书一、目的要求 本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成一个矩阵运算子程序集,并能最终实现本系统的功能要求。二、功能要求【题目描述】矩阵运算是大多数科学运算的必要工具。假定所有矩阵均以文本文件形式保存,试编写程序,处理简单的矩阵运算。矩阵文件每一行以文本保存矩阵中一行数据每个数据之间以一个或者多个空格隔开。目前矩阵仅保存整数值。下面是一个矩阵文件例子:文件名:matrix1.txt1 1 2 3 -43 1 -1 4 52 0 0 5 65 6 7 8 910 11 12 14 13你的程序需要实现以下功能:1矩阵加法。2矩阵转置3矩阵乘法【程序要求】(1)程序正确。能够严格实现任务书中描述的功能;(2)界面友好。尽可能使界面友好、直观、易操作;(3)风格友好。源程序应有良好的编码风格,使程序容易阅读。(4) 从文件中读矩阵,将矩阵写入文件,矩阵3个操作均需要以子程序形式编写。【输入/输出要求】 (1)每项功能在选择后,应提示用户输入源矩阵所在文件名,并检验该文件是否存在,但是并不读取该文件内容。然后再提示用户输入结果矩阵文件名。通过子程序读取矩阵数据,将运算结果同时输出到文件和屏幕上。 (2)所有源矩阵均可使用记事本生成。 (3)若main函数带有参数repeat则所有读取矩阵和运算函数操作均需重复10000次。【课程设计报告内容要求】(1)封面:统一采用常州大学课程设计说明书封面(2)内容提要(3)目录(4)“课程设计报告”正文格式1)概述所作系统的主要功能;2)分析和描述任务书的基本要求与内容;3)描述及绘制出系统的功能结构框图;4)C语言程序代码;5)使用说明;6)设计日志以及心得体会三、难点提示1、 输入矩阵没有限定大小,不能采用静态数组来实现,需要使用动态数组技术。2、 main函数参数的检测和使用参见教材相应内容。3、菜单部分样例代码可参阅网络课堂里相关帮助顶层菜单设计框架。概述系统的主要功能假定矩阵文件每一行以文本形式保存,矩阵中的一行数据中每个数据之间以一个或多个空格隔开,目前矩阵仅保存整数值。本程序通过文件操作及动态内存分配技术实现简单的矩阵运算,包括矩阵加法(Plus),矩阵转置(Transpose),矩阵乘法(Multiply)。运行程序时,首先提示用户选择相应功能选项,每项功能在选择后,提示用户输入源矩阵所在文件名,程序检验该文件是否存在,但不读取该文件内容。然后再提示用户输入结果矩阵所在文件名,通过子程序读取矩阵数据,将运算结果同时输到文件和屏幕上。 描述及绘制出系统的功能结构框图首先选择相应的功能,打开文件,读取数据,进行各项功能的操作,输出结果,关闭文件,再次选择相应的功能。功能选择加法转置相乘打开所要执行的文件输出数据关闭相应文件退出C语言程序代码#include #include #include void Plus()FILE *fp1,*fp2,*fp3;printf(请输入两个源矩阵所在文件名:n);char filename115,filename215,filename315;scanf(%s%s,filename1,filename2);if(fp1=fopen(filename1,r)=NULL|(fp2=fopen(filename2,r)=NULL)printf(cant open file);exit(0);printf(请输入结果矩阵所在文件名:n);scanf(%s,filename3);fp3=fopen(filename3,w);int *p,C=0,R=0,l=0,r=0,i,j,jk1,jk2,jk3;printf(n);char ch;ch=fgetc(fp1);while(!feof(fp1)ch=fgetc(fp1);if(ch= ) C+;if(ch=n)R+;C=C/R+1;printf(R=%d,C=%dn,R,C); rewind(fp1); ch=fgetc(fp2);while(!feof(fp2)ch=fgetc(fp2);if(ch= ) l+;if(ch=n)r+;l=l/r+1;printf(r=%d,l=%dn,r,l); rewind(fp2);fscanf(fp1,%d,&jk1);fscanf(fp2,%d,&jk2);if(jk1!= &jk1!=n)jk3=jk1+jk2; printf(%dt,jk3);fprintf(fp3,%dt,jk3);printf(n);fprintf(fp3,n);free(p);fclose(fp1);fclose(fp2);fclose(fp3);printf(*按任意键继续*n);getch();else exit(0);void Transpose()FILE *fp1,*fp2;printf(请输入一个源矩阵所在文件名:n);char filename115,filename215;scanf(%s,filename1);if(fp1=fopen(filename1,r)=NULL) /判断是否能打开文件printf(cannot open file);exit(0);printf(请输入结果矩阵所在名:n);scanf(%s,filename2);fp2=fopen(filename2,w);int *p,C=0,R=0,t=0,i,j,jk1;printf(n);char ch;ch=fgetc(fp1);while(!feof(fp1) /算出矩阵的行列数ch=fgetc(fp1);if(ch= )C+;if(ch=n)R+;C=C/(R+1)+1;R=R+1; rewind(fp1); p=(int*)malloc(R*sizeof(int*); /申请动态内存分配for(i=0;iR;i+) pi=(int*)malloc(C*sizeof(int); for(j=0;jC;j+) fscanf(fp1,%d,&jk1); if (jk1!= )&(jk1!=n) pij=jk1; for(i=0;iC;i+)for(j=0;jR;j+)printf(%dt,pji);fprintf(fp2,%dt,pji);printf(n);fprintf(fp2,n);for(i=0;iR;i+) free(pi); free(p);fclose(fp1);fclose(fp2);printf(*按任意键继续*n);getch();void Multiply()FILE *fp1,*fp2,*fp3;printf(请输入两个院矩阵所在文件名:n);char filename115,filename215,filename315;scanf(%s%s,filename1,filename2);if(fp1=fopen(filename1,r)=NULL|(fp2=fopen(filename2,r)=NULL)/判断矩阵是否能打开printf(cannot open file);exit(0);printf(请输入结果矩阵所在文件名:n);scanf(%s,filename3);fp3=fopen(filename3,w);int *p1,*p2,C=0,R=0,l=0,r=0,sum=0,a,i,j,jk1;printf(n);char ch;ch=fgetc(fp1);while(!feof(fp1) /算出矩阵的行列数ch=fgetc(fp1);if(ch= ) C+;if(ch=n) R+;C=C/(R+1)+1;R=R+1; rewind(fp1); ch=fgetc(fp2);while(!feof(fp2)ch=fgetc(fp2);if(ch= ) l+;if(ch=n) r+;l=l/(r+1)+1;r=r+1; rewind(fp2); p1=(int*)malloc(R*sizeof(int*); /申请动态内存分配 for(i=0;iR;i+) p1i=(int*)malloc(C*sizeof(int); for(j=0;jC;j+) fscanf(fp1,%d,&jk1); if (jk1!= )&(jk1!=n) p1ij=jk1; p2=(int*)malloc(r*sizeof(int*); for(i=0;ir;i+) p2i=(int*)malloc(l*sizeof(int); for(j=0;jl;j+) fscanf(fp2,%d,&jk1); if (jk1!= )&(jk1!=n) p2ij=jk1; for(i=0;iR;i+)for(a=0;al;a+)sum=0; for(j=0;jC;j+) sum+=p1ij*p2ja; printf(%dt,sum); fprintf(fp3,%dt,sum);printf(n);fprintf(fp3,n);for(i=0;iR;i+) free(p1i); free(p1); for(i=0;ir;i+) free(p2i); free(p2);fclose(fp1);fclose(fp2);fclose(fp3);printf(*按任意键继续*n);getch();void main()char i;loop:system(cls);printf(*n);printf( 矩阵 运算 n);printf(* 请输入运算方式* n);printf( 1:加法 n);printf( 2:转置 n);printf( 3:乘法 n);printf( 4:退出 n);printf(n);printf(请输入选项1234:n);while(i=getch()switch (i)case 1:Plus();goto loop;case 2:Transpose();goto loop;case 3:Multiply();goto loop;case 4:exit(0);goto loop;for(j=0;jC;j+)fscanf(fp1,%d,&jk1);fscanf(fp2,%d,&jk2);if(jk1!= &jk1!=n)jk3=jk1+jk2; printf(%dt,jk3);fprintf(fp3,%dt,jk3);printf(n);fprintf(fp3,n);free(p);fclose(fp1);fclose(fp2);fclose(fp3);printf(*按任意键继续*n);getch();l=l/r+1;printf(r=%d,l=%dn,r,l); rewind(fp2);if(l=C&r=R) p=(int*)calloc(R,C*sizeof(int);for(i=0;iR;i+)for(j=0;jC;j+)fscanf(fp1,%d,&jk1);fscanf(fp2,%d,&jk2);if(j=C-1) printf(%d,jk1+jk2);fprintf(fp3,%d,jk1+jk2);continue; if(jk1!= &jk1!=n)jk3=jk1+jk2; printf(%d ,jk3);fprintf(fp3,%d ,jk3);printf(n);fprintf(fp3,n);free(p);fclose(fp1);fclose(fp2);fclose(fp3);printf(*按任意键继续*n);getch();else printf(两个矩阵不能相加);exit(0);void Transpose()FILE *fp1,*fp2;printf(请输入一个源矩阵所在文件名:n);char filename115,filename215;scanf(%s,filename1);if(fp1=fopen(filename1,r)=NULL)printf(cant open file);exit(0);printf(请输入结果矩阵所在名:n);scanf(%s,filename2);fp2=fopen(filename2,w);int *p,C=0,R=0,t=0,i,j,jk1;printf(n);char ch;ch=fgetc(fp1);while(!feof(fp1)ch=fgetc(fp1);if(ch= ) C+;if(ch=n)R+;C=C/R+1; rewind(fp1); p=(int*)malloc(R*sizeof(int*);for(i=0;iR;i+) pi=(int*)malloc(C*sizeof(int); for(j=0;jC;j+) fscanf(fp1,%d,&jk1); if (jk1!= )&(jk1!=n) pij=jk1; for(i=0;iC;i+)for(j=0;jR;j+)if(j=R-1)printf(%d,pji);fprintf(fp2,%d,pji);continue; printf(%d ,pji);fprintf(fp2,%d ,pji);printf(n);fprintf(fp2,n);for(i=0;iR;i+) free(pi); free(p);fclose(fp1);fclose(fp2);printf(*按任意键继续*n);getch();void Multiply()FILE *fp1,*fp2,*fp3;printf(请输入两个源矩阵所在文件名:n);char filename115,filename215,filename315;scanf(%s%s,filename1,filename2);if(fp1=fopen(filename1,r)=NULL|(fp2=fopen(filename2,r)=NULL)printf(cant open file);exit(0);printf(请输入结果矩阵所在文件名:n);scanf(%s,filename3);fp3=fopen(filename3,w);int *p1,*p2,C=0,R=0,l=0,r=0,sum=0,a,i,j,jk1;printf(n);char ch;ch=fgetc(fp1);while(!feof(fp1)ch=fgetc(fp1);if(ch= ) C+;if(ch=n) R+;C=C/R+1; rewind(fp1); ch=fgetc(fp2);while(!feof(fp2)ch=fgetc(fp2);if(ch= ) l+;if(ch=n) r+;l=l/r+1; rewind(fp2); if(C=r)/判断两个矩阵能否相乘 p1=(int*)malloc(R*sizeof(int*); for(i=0;iR;i+) p1i=(int*)malloc(C*sizeof(int); for(j=0;jC;j+) fscanf(fp1,%d,&jk1); if (jk1!= )&(jk1!=n) p1ij=jk1; p2=(int*)malloc(r*sizeof(int*); for(i=0;ir;i+) p2i=(int*)malloc(l*sizeof(int); for(j=0;jl;j+) fscanf(fp2,%d,&jk1); if (jk1!= )&(jk1!=n) p2ij=jk1; for(i=0;iR;i+)for(a=0;al;a+)sum=0; for(j=0;jC;j+) sum+=p1ij*p2ja; if(a=l-1) printf(%dt,sum); fprintf(fp3,%dt,sum); continue; printf(%d ,sum); fprintf(fp3,%d ,sum);printf(n);fprintf(fp3,n);for(i=0;iR;i+) free(p1i); free(p1); for(i=0;ir;i+) free(p2i); free(p2);fclose(fp1);fclose(fp2);fclose(fp3);printf(*按任意键继续*n);getch(); else printf(两个矩阵不能相乘); exit(0); getch(); else printf(两个矩阵不能相乘); exit(0); void main()char i;loop:system(cls);printf(*n);printf( 矩阵 运算 n);printf(* 请输入运算方式* n);printf( 1:加法 n);printf( 2:转置 n);printf( 3:乘法 n);printf( 4:退出 n);printf(n);printf(请输入选项1234:n);while(i=getch()switch (i)case 1:Plus();goto loop;case 2:Transpose();goto loop;case 3:Multiply();goto loop;case 4:exit(0);goto loop;使用说明1. 在相应的文件中输入数据。注意:矩阵每行数据中的各个数据间以空格隔开,一行数据输入完成按回车键,切记最后一行数据输入完成后要按回车键。2. 运行程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 169社区突发公共事件应急演练方案设计考核试卷
- 2025年RISC-VUWB定位处理器技术考核试卷
- 邮政报亭买卖协议书
- 白条卡服务协议书
- 企业分立咨询协议书
- snmp网络协议书视频
- 2025年互联网行业跨境电商供应链协同平台搭建与应用能力测试考核试卷
- 2025年航空航天行业航天材料新技术应用案例研究报告及未来发展趋势预测
- 2025年导游服务能力(节假日旅游服务)考核试卷
- 2025年环保行业环保技术与废弃物处理研究报告及未来发展趋势预测
- 2025年《养老护理员》高级练习题+参考答案
- 2026云天化集团高层次人才校园招聘笔试考试参考试题及答案解析
- 全国大学生职业规划大赛《护理》专业生涯发展展示【高职(专科)】
- 2026年中考备考工作方案
- 蒙牛产品发布会方案
- 体育场馆改造项目方案
- 普通货物道路运输企业安全生产责任制
- 2025消防宣传月专题宣讲课件
- 2025-2026学年三年级上册数学第五单元(线和角)测试卷(人教版)及答案(三套)
- 乐高大颗粒课件大摆锤
- 压力性损伤诊疗及护理规程
评论
0/150
提交评论