《本科毕业设计论文--数据结构课程设计报告1数组实现两个矩阵的相乘运算2成绩分析问题.doc》由会员分享,可在线阅读,更多相关《本科毕业设计论文--数据结构课程设计报告1数组实现两个矩阵的相乘运算2成绩分析问题.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、山东建筑大学课 程 设 计 成 果 报 告题 目: 1.数组实现两个矩阵的相乘运算 2. 成绩分析问题课 程: 数据结构A课程设计院 (部): 管理工程学院专 业: 信息管理与信息系统 班 级: 信管*学生姓名:*学 号:*指导教师: *完成日期: 2016年12月29日目录目录2一、课程设计概述3二、课程设计题目一3用数组实现两个矩阵的相乘运算32.1问题描述32.2要求及提示:42.3详细设计42.4调试分析52.5运行结果及分析6三、课程设计题目二6成绩分析问题63.1问题描述63.2概要设计73.3存储结构73.4流程图73.5详细设计83.6调试分析83.7运行结果及分析22四、参考
2、文献:25一、课程设计概述本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。使用语言:C编译环境:vc6.0二、课程设计题目一用数组实现两个矩阵的相乘运算2.1问题描述 #include “stdio.h” int r66; void mult(int a66 , int b66) main() int i,j; int num166,num266; printf(“请输入第一个矩阵的值:”,); for(i=1;i=6;i+) for(j=1;j=6;j+) scanf(“%d”,&num1ij); printf(“请输入第二个矩阵的值:”,); for(i=1;i
3、=6;i+) for(j=1;j=6;j+) scanf(“%d”,&num2ij); mult(num1,num2); printf(“n两个矩阵相乘后的结果为:”); for(i=1;i=6;i+) for(j=1;j=6;j+) printf(“%4d”,rij); printf(“n”);2.2要求及提示:1、 要求完善函数mult( ),2、 现有A,B两个矩阵,要求用上述程序求出A与B相乘后的运行结果, 4 1 3 6 9 0 3 1 0 1 2 4 7 3 1 4 2 1 1 3 1 0 5 2 0 1 0 2 9 1 1 9 2 1 3 0A= 4 1 0 2 6 0 B= 9
4、 1 2 4 0 0 1 2 1 0 1 5 3 0 0 1 0 1 3 0 0 5 1 2 2 1 0 6 8 92.3详细设计#include int r66;/得到的结果矩阵 void mult(int a66 , int b66) int i,j; int k; int sum; for (i = 0; i 6; i+) for (j = 0; j 6; j+) sum = 0; for (k = 0; k 6; k+) sum += aik*bkj; rij = sum; main() int i,j; int num166,num266; printf(请输入第一个6*6矩阵的值:
5、n); for(i=0;i6;i+) for(j=0;j6;j+) scanf(%d,&num1ij); printf(请输入第二个6*6矩阵的值:n); for(i=0;i6;i+) for(j=0;j6;j+) scanf(%d,&num2ij); mult(num1,num2); printf(n两个矩阵相乘后的结果为:n);for(i=0;i6;i+)for(j=0;j6;j+)printf(%4d ,rij);printf(n); 2.4调试分析问题一:现象:输入的时候输入七行共42个数据才到下一个矩阵的输入原因:在scanf的时候,scanf(%d,&num2ij);%d后面多了一
6、个空格2.5运行结果及分析三、课程设计题目二成绩分析问题3.1问题描述录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。需求分析1.通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat2.对文件input.dat中的数据进行处理,要求具有如下功能:a.按各门课程成绩排序,并生成相应的文件输出b.计算每人的平均成绩,按平均成绩排序,并生成文件c.求出各门课程的平均成绩、最高分、最低分、不及格人数、6069分人数、7079分人数、8089分人数、90分以上人数d.根据姓名或学号查询某人的各门课成绩,重名也要能处理3.界面美观测试数据学号姓名数学英语计算机001王放787790
7、002张强896788003李浩566678004黄鹂兵898685005李浩678876006陈利风455467007尚晓7876703.2概要设计-=ADT=-void menu();/菜单void show(student stu,int n);/显示学生数据void readFile(student stu,int n);/读取数据void math(student stu,int n);/对数学成绩排序void english(student stu,int n);/对英语成绩排序void computer(student stu,int n);/对计算机成绩排序void avera
8、ge(student stu,int n);/对平均成绩排序int degree(int num);/等级分级void scoreAnalyse(student stu,int n);/成绩分析void search_no(student stu,int n);/按照学号查找void search_name(student stu,int n);/按照姓名查找void closeSystem();/关闭程序) 3.3存储结构typedef struct char no12;/学号char name16;/姓名int math;/数学成绩int english;/英语成绩int computer
9、;/计算机成绩int average;/平均成绩 student;3.4流程图 开始键盘输入学生信息,并保存到文件中从文件读取学生信息显示菜单执行功能 结束输入选项=0?NY3.5详细设计#include#include#define N 7static int num=0;/已录入的学生人数static int select=0;/输入选择的菜单项typedef structchar no12;/学号char name16;/姓名int math;/数学成绩int english;/英语成绩int computer;/计算机成绩int average;/平均成绩 student;studen
10、t stuN;/定义结构体数组student studN;/备份结构体数组用来排序/*菜单等方法的原型声明*void menu();/菜单void show(student stu,int n);/显示学生数据void writeFile(student students,int n);/写入学生数据void readFile(int n);/读取学生数据void math(student stu,int n);/对数学成绩排序void english(student stu,int n);/对英语成绩排序void computer(student stu,int n);/对计算机成绩排序vo
11、id average(student stu,int n);/对平均成绩排序int degree(int num);/等级分级void scoreAnalyse(student stu,int n);/成绩分析void search_no(student stu,int n);/按照学号查找void search_name(student stu,int n);/按照姓名查找void closeSystem();/关闭程序/*主函数*void main()/定义学生体,存放键盘输入的学生信息student studentsN;/向文件输入学生的数据writeFile(students,7);/
12、从文件读取学生数据readFile(7);while(1)menu();/输入菜单项scanf(%d,&select);switch(select)case 1:math(stu,7);break;case 2:english(stu,7);break;case 3:computer(stu,7);break;case 4:average(stu,7);break;case 5:scoreAnalyse(stu,7);break;case 6:search_no(stu,7);break;case 7:search_name(stu,7);break;case 8:show(stu,N);br
13、eak;case 0:closeSystem();break;default:printf(错误的数据 n);/*写入学生数据*void writeFile(student students,int n)int i;FILE *fi;/键盘输入学生的成绩for(i=0;in;i+)printf(输入第%d个学生的学号,姓名,数学成绩,英语成绩,计算机成绩: ,i+1);scanf(%s %s %d %d %d,&stui.no,&stui.name,&stui.math,&stui.english,&puter);fi=fopen(D:VC6.0VC+6.0testinput.dat,wb);
14、/以只写方式打开或新建一个二进制文件,只允许写数据。if(fi=NULL)printf(打开input.dat文件失败n);exit(1);/exit(0)表示异常退出,exit(1)表示异常退出.for(i=0;in;i+)/将学生的成绩写入input.dat文件fwrite(&studentsi,sizeof(student),1,fi);printf(数据写入成功n);/*文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄露和在下次访问文件时出现问题。 *文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦,如fp = NULL。*
15、/fclose(fi);/必须有,不然只能保存在缓冲区,数据不能存入system(pause);/等待用户按一个键,然后返回/*读取学生数据*void readFile(int n)int i;FILE *fi;fi=fopen(D:VC6.0VC+6.0testinput.dat,rb);/以只读方式打开或新建一个二进制文件,只允许读取数据。if(fi=NULL)printf(打开input.dat文件失败n);exit(1);for(i=0;in;i+)fread(&stui,sizeof(student),1,fi);printf(读取input.dat文件成功n);/*菜单*void
16、menu()printf(-n);printf(-欢迎进入学生成绩分析系统,输入相应的序号实现功能-n);printf(-成绩分析菜单-n);printf( 0-退出系统n);printf( 1-按数学成绩排序,并生成相应的文件输出n);printf( 2-按英语成绩排序,并生成相应的文件输出n);printf( 3-按计算机成绩排序,并生成相应的文件输出n);printf( 4-按平均成绩排序,并生成文件n);printf( 5-各科成绩分布n);printf( 6-按学号查询n);printf( 7-按姓名查询n);printf( 8-显示新学生信息n);printf(-n);/*显示学生
17、数据*void show(student stu,int n)int i;/system(cls);/清屏printf(-学生成绩-n);printf(t学号|t姓名|t数学|t英语|t计算机 n);for(i=0;in;i+)printf(t%s|t%s|t%d|t%d|t%d| n,stui.no,stui.name,stui.math,stui.english,puter);printf(-n);system(pause);/等待用户按一个键,然后返回/*按数学成绩排序*void math(student stu,int n)FILE *fm;int i=0;int k,j;studen
18、t t;/排序时用来当做临时变量for(i=0;in;i+)studi=stui;fm=fopen(D:VC6.0VC+6.0testmath.txt,wb);/以只写方式打开或新建一个二进制文件,只允许写数据。if(fm=NULL)printf(打开math.txt文件失败n);exit(1);printf(打开math.txt文件成功n);for(k=0;kn-1;k+)/数学成绩从小到大排序法for(j=0;jstudj+1.math)t=studj;studj=studj+1;studj+1=t;printf(*按数学成绩排序*n);printf(t学号|t姓名|t数学|t英语|t计算
19、机| n);fprintf(fm,t%st%st%st%st%s n,no,name,math,english,computer);for(i=0;in;i+)printf(t%s|t%s|t%d|t%d|t%d| n,studi.no,studi.name,studi.math,studi.english,puter);fprintf(fm,t%st%st%dt%dt%d n, studi.no,studi.name,studi.math,studi.english,puter);/将学生排序后的信息写入printf(-按数学成绩排序已录入-n);fclose(fm);system(paus
20、e);/*按英语成绩排序*void english(student stu,int n)FILE *fe;int i=0;int k,j;student t;/排序时用来当做临时变量for(i=0;in;i+)studi=stui;fe=fopen(D:VC6.0VC+6.0testenglish.txt,wb);/以只写方式打开或新建一个二进制文件,只允许写数据。if(fe=NULL)printf(打开english.txt文件失败n);exit(1);printf(打开english.txt文件成功n);for(k=0;kn-1;k+)/英语成绩从小到大排序法for(j=0;jstudj+
21、1.english)t=studj;studj=studj+1;studj+1=t;printf(*按英语成绩排序*n);printf(t学号|t姓名|t数学|t英语|t计算机| n);fprintf(fe,t%st%st%st%st%s n,no,name,math,english,computer);for(i=0;in;i+)printf(t%s|t%s|t%d|t%d|t%d| n,studi.no,studi.name,studi.math,studi.english,puter);fprintf(fe,t%st%st%dt%dt%d n, studi.no,studi.name,s
22、tudi.math,studi.english,puter);/将学生排序后的信息写入printf(-按英语成绩排序已录入-n);fclose(fe);system(pause);/*按计算机成绩排序*void computer(student stu,int n)FILE *fc;int i=0;int k,j;student t;/排序时用来当做临时变量for(i=0;in;i+)studi=stui;fc=fopen(D:VC6.0VC+6.0testcomputer.txt,wb);/以只写方式打开或新建一个二进制文件,只允许写数据。if(fc=NULL)printf(打开comput
23、er.txt文件失败n);exit(1);printf(打开computer.txt文件成功n);for(k=0;kn-1;k+)/计算机成绩从小到大排序法for(j=0;jstudj+puter)t=studj;studj=studj+1;studj+1=t;printf(*按计算机成绩排序*n);printf(t学号|t姓名|t数学|t英语|t计算机| n);fprintf(fc,t%st%st%st%st%s n,no,name,math,english,computer);for(i=0;in;i+)printf(t%s|t%s|t%d|t%d|t%d| n,studi.no,stud
24、i.name,studi.math,studi.english,puter);fprintf(fc,t%st%st%dt%dt%d n, studi.no,studi.name,studi.math,studi.english,puter);/将学生排序后的信息写入printf(-按计算机成绩排序已录入-n);fclose(fc);system(pause);/*按平均成绩排序*void average(student stu,int n)FILE *fa;int i=0;int k,j;student t;/排序时用来当做临时变量/计算每个人的平均成绩for(i=0;in;i+)stui.a
25、verage=(stui.math+puter+stui.english)/3;for(i=0;in;i+)studi=stui;fa=fopen(D:VC6.0VC+6.0testaverage.txt,wb);/以只写方式打开或新建一个二进制文件,只允许写数据。if(fa=NULL)printf(打开average.txt文件失败n);exit(1);printf(打开average.txt文件成功n);for(k=0;kn-1;k+)/平均成绩从小到大排序法for(j=0;jstudj+1.average)t=studj;studj=studj+1;studj+1=t;printf(*按
26、平均成绩排序*n);printf(t学号|t姓名|t数学|t英语|t计算机|t平均成绩 n);fprintf(fa,t%st%st%st%st%st%s n,no,name,math,english,computer,average);for(i=0;in;i+)printf(t%s|t%s|t%d|t%d|t%d|t%dn,studi.no,studi.name,studi.math,studi.english,puter,studi.average);fprintf(fa,t%st%st%dt%dt%dt%d n, studi.no,studi.name,studi.math,studi.
27、english,puter,studi.average);/将学生排序后的信息写入printf(-按平均成绩排序已录入-n);fclose(fa);system(pause);/*各门成绩分析*void scoreAnalyse(student stu,int n)int i;FILE *fscoreAnalyse;/0、平均成绩 1、最高分 2、最低分 3、不及格人数 4、6069分人数 5、7079分人数 6、8089分人数 7、90分以上人数int math8,english8,computer8;/分别用三个数组整合三门课课程的分析结果并初始化int mathAnalyze;int e
28、nglishAnalyze;int computerAnalyze;for(i=0;i8;i+)/初始化数据mathi=0;englishi=0;computeri=0;if(i=2)/最低成绩的默认值为第一个学生的成绩mathi=stu1.math;englishi=stu1.english;computeri=puter;/system(cls);fscoreAnalyse=fopen(D:VC6.0VC+6.0testscoreAnalyse.txt,wb);/以只写方式打开或新建一个二进制文件,只允许写数据。if(fscoreAnalyse=NULL)printf(打开scoreAna
29、lyse.txt文件失败n);exit(1);printf(打开scoreAnalyse.txt文件成功n);for(i=0;imath1)math1=stui.math;if(stui.englishenglish1)english1=stui.english;if(putercomputer1)computer1=puter;/各门课统计最低if(stui.mathmath2)math2=stui.math;if(stui.englishenglish2)english2=stui.english;if(putercomputer2)computer2=puter;/分段统计mathAna
30、lyze=degree(stui.math);switch(mathAnalyze)case 0:math3+;break;/不及格人数case 1:math4+;break;/6069分人数case 2:math5+;break;/7079分人数case 3:math6+;break;/8089分人数case 4:math7+;break;/90分以上人数englishAnalyze=degree(stui.english);switch(englishAnalyze)case 0:english3+;break;case 1:english4+;break;case 2:english5+
31、;break;case 3:english6+;break;case 4:english7+;break;computerAnalyze=degree(puter);switch(computerAnalyze)case 0:computer3+;break;case 1:computer4+;break;case 2:computer5+;break;case 3:computer6+;break;case 4:computer7+;break;/计算各门课的平均成绩math0=math0/n;english0=english0/n;computer0=computer0/n;/保存到文件中
32、fprintf(fscoreAnalyse,t%st%st%st%st%st%st%st%st%s n,科目,平均成绩,最高分,最低分,不及格,6069,7079,8089,90以上);fprintf(fscoreAnalyse,t%st%dt%dt%dt%dt%dt%dt%dt%d n,数学, math0,math1,math2,math3,math4,math5,math6,math7);fprintf(fscoreAnalyse,t%st%dt%dt%dt%dt%dt%dt%dt%d n,英语,english0,english1,english2,english3,english4,english5,english6,english7);fprintf(fscoreAnalyse,t%st%dt%dt%dt%dt%dt%dt%dt%d n,计算机,computer0,computer1,computer2,computer3,computer4,computer5,computer6,computer7);/输出printf(-以下为学生各门课程的分析统计所得分数以及人数-n);printf(t科目t平均t最高t最