1、本科毕业设计论文数据结构课程设计报告1数组实现两个矩阵的相乘运算2成绩分析问题山东建筑大学课 程 设 计 成 果 报 告题 目: 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、2概要设计 73.3存储结构 73.4流程图 73.5详细设计 83.6调试分析 83.7运行结果及分析 22四、参考文献: 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=
3、6;j+) scanf(“%d”,&num1ij); printf(“请输入第二个矩阵的值:”,); for(i=1;i=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、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 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 = s
5、um; main() int i,j; int num166,num266; printf(请输入第一个6*6矩阵的值: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调试分析 问题一:
6、现象:输入的时候输入七行共42个数据才到下一个矩阵的输入 原因:在scanf的时候,scanf(%d,&num2ij);%d后面多了一个空格2.5运行结果及分析 三、课程设计题目二成绩分析问题3.1问题描述 录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。需求分析 1.通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat 2.对文件input.dat中的数据进行处理,要求具有如下功能: a.按各门课程成绩排序,并生成相应的文件输出 b.计算每人的平均成绩,按平均成绩排序,并生成文件 c.求出各门课程的平均成绩、最高分、最低分、不及格人数、 6069分人数、7079分人数
7、、8089分人数、90分以上人数 d.根据姓名或学号查询某人的各门课成绩,重名也要能处理 3.界面美观测试数据学号姓名数学英语计算机001王放787790002张强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(st
8、udent stu,int n);/对英语成绩排序void computer(student stu,int n);/对计算机成绩排序void 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();/关闭程序) 3.3存储结构typedef s
9、truct char no12;/学号 char name16;/姓名 int math;/数学成绩 int english;/英语成绩 int computer;/计算机成绩 int average;/平均成绩 student;3.4流程图NY3.5详细设计#include#include#define N 7static int num=0;/已录入的学生人数static int select=0;/输入选择的菜单项typedef struct char no12;/学号 char name16;/姓名 int math;/数学成绩 int english;/英语成绩 int comput
10、er;/计算机成绩 int average;/平均成绩 student;student 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);/对英语成绩排序vo
11、id computer(student stu,int n);/对计算机成绩排序void 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
12、studentsN; /向文件输入学生的数据 writeFile(students,7); /从文件读取学生数据 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);
13、break; case 7:search_name(stu,7);break; case 8:show(stu,N);break; 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,&st
14、ui.math,&stui.english,&puter); fi=fopen(D:VC6.0VC+6.0testinput.dat,wb);/以只写方式打开或新建一个二进制文件,只允许写数据。 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); /* *文件操作完成后,需要将文件关闭,一定要注意,否则会造成文
15、件所占用内存泄露和在下次访问文件时出现问题。 *文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦,如fp = NULL。 */ 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); e
16、xit(1); for(i=0;in;i+) fread(&stui,sizeof(student),1,fi); printf(读取input.dat文件成功n);/*菜单*void menu() printf(-n); printf(-欢迎进入学生成绩分析系统,输入相应的序号实现功能-n); printf(-成绩分析菜单-n); printf( 0-退出系统n); printf( 1-按数学成绩排序,并生成相应的文件输出n); printf( 2-按英语成绩排序,并生成相应的文件输出n); printf( 3-按计算机成绩排序,并生成相应的文件输出n); printf( 4-按平均成绩排序
17、,并生成文件n); printf( 5-各科成绩分布n); printf( 6-按学号查询n); printf( 7-按姓名查询n); printf( 8-显示新学生信息n); printf(-n);/*显示学生数据*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,put
18、er); printf(-n); system(pause);/等待用户按一个键,然后返回/*按数学成绩排序*void math(student stu,int n) FILE *fm; int i=0; int k,j; student 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); f
19、or(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计算机| 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); fp
20、rintf(fm,t%st%st%dt%dt%d n, studi.no,studi.name,studi.math,studi.english,puter);/将学生排序后的信息写入 printf(-按数学成绩排序已录入-n); fclose(fm); system(pause);/*按英语成绩排序*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,
21、wb);/以只写方式打开或新建一个二进制文件,只允许写数据。 if(fe=NULL) printf(打开english.txt文件失败n); exit(1); printf(打开english.txt文件成功n); for(k=0;kn-1;k+)/英语成绩从小到大排序法 for(j=0;jstudj+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
22、,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,studi.math,studi.english,puter);/将学生排序后的信息写入 printf(-按英语成绩排序已录入-n); fclose(fe); system(pause);/*按计算机成绩排序*void computer(student stu,int n) FI
23、LE *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(打开computer.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)