山东建筑大学
课程设计成果报告
题目: 1.数组实现两个矩阵的相乘运算
2.成绩分析问题
课程:数据结构A课程设计
院(部):管理工程学院
专业:信息管理与信息系统
班级:信管***
学生姓名:***
学号:********
指导教师:*******
完成日期:2016年12月29日
目录
目录 (2)
一、课程设计概述 (3)
二、课程设计题目一 (3)
用数组实现两个矩阵的相乘运算 (3)
2.1[问题描述] (3)
2.2[要求及提示]: (3)
2.3[详细设计] (4)
2.4[调试分析] (5)
2.5[运行结果及分析] (5)
三、课程设计题目二 (6)
成绩分析问题 (6)
3.1[问题描述] (6)
3.2[概要设计] (6)
3.3[存储结构] (7)
3.4[流程图] (7)
3.5[详细设计] (8)
3.6[调试分析] (8)
3.7[运行结果及分析] (22)
四、参考文献: (25)
一、课程设计概述
本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。
使用语言:C
编译环境:vc6.0
二、课程设计题目一
用数组实现两个矩阵的相乘运算
2.1[问题描述]
#include “stdio.h”
int r[6][6];
void mult(int a[6][6] , int b[6][6]){ }
main(){
int i,j;
int num1[6][6],num2[6][6];
printf(“请输入第一个矩阵的值:”,);
for(i=1;i<=6;i++)
for(j=1;j<=6;j++)
scanf(“%d”,&num1[i][j]);
printf(“请输入第二个矩阵的值:”,);
for(i=1;i<=6;i++)
for(j=1;j<=6;j++)
scanf(“%d”,&num2[i][j]);
mult(num1,num2);
printf(“\n两个矩阵相乘后的结果为:”);
for(i=1;i<=6;i++)
{for(j=1;j<=6;j++)
printf(“%4d”,r[i][j]);
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 0
A= 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 9 2.3[详细设计]
2.4[调试分析]
问题一:
现象:输入的时候输入七行共42个数据才到下一个矩阵的输入
原因:在scanf的时候,scanf("%d",&num2[i][j]);%d后面多了一个空格2.5[运行结果及分析]
三、课程设计题目二
成绩分析问题
3.1[问题描述]
录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。
[需求分析]
1.通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat
2.对文件input.dat中的数据进行处理,要求具有如下功能:
a.按各门课程成绩排序,并生成相应的文件输出
b.计算每人的平均成绩,按平均成绩排序,并生成文件
c.求出各门课程的平均成绩、最高分、最低分、不及格人数、
60-69分人数、70-79分人数、80-89分人数、90分以上人数
d.根据姓名或学号查询某人的各门课成绩,重名也要能处理
3.界面美观
3.2[概要设计]
3.3[存储结构]
3.4[流程图]
3.5[详细设计]
3.6[调试分析]
本程序主要的操作对象是记录数组,使用的存储结构是结构体数组。
另外还有对C语言中关于文件的操作,这是本程序中的一个重点也是难点,是此程序出现问题的主要原因之一:
问题一:
现象:输出的成绩不是正确的数字,而是一些类似于地址值的数字。
原因:程序中对各数组的下标操作不统一。
因为程序要分别对三个科目的成绩进行统计,所以程序中就要有一个临时数组来存放成绩值,然而在将学科成绩存放在临时数组的过程中如果出现了下标不统一的情况,即在原记录数组中是1…n号元素存放数据,在临时数组中却是0…n-1号元素存放数据。
就会引起程序的错误。
解决的方法是将整个程序中相互有关的数组使用统一的下标存放数据,就可以避免这种问题。
问题二:
现象:存放文件的时候,在对应目录的文件中没有数据
原因:由于C是缓冲写所以要在关闭或刷新后才能看到文件内容。
所在在执行文件操作之后,一定要关闭文件fclose(fscoreAnalyse);
问题三:
现象:使用fwrite存放的文件数据出现乱码
原因:其实并不是乱码,而是fwrite函数的作用是将内存中的二进制数据原样写入文件中,所以打开记事本现实的比较混乱,然后为了方便我查看写入文件的数据,更换了另一种文件写入的方式fprintf。
3.7[运行结果及分析]
(1)键盘输入学生成绩,按数学成绩从小到大排序
(2)按数英语、计算机成绩从小到大排序
(3)按平均成绩从小到大排序,成绩分析
(4)按学号查询学生的成绩
(5)按姓名查询学生的成绩
四、参考文献:
[1].《C程序设计》第二版,谭浩强著。
北京:清华大学出版社,2004年。
[2].《数据结构》严蔚敏、吴伟民。
北京:清华大学出版社,2005年。
五、课程设计心得
这次课程设计,在选择的两个题目都是和数组相关的,实际是使用链表和数组都可以完成需要的功能,但是我更喜欢用数组,所以都用数组解决的。
在编写的时候,第一个矩阵相乘的问题不大,三个for循环就能解决。
在编写第二个问题的时候,相对来说就困难了写。
首先她的功能比较多,其次还涉及到我没有学过的关于C语言对文件的操作。
在对文件的操作这一部分上面,写入文件的时候,最初我使用的是fread方法,但是后面打开生成的文件的时候发现会导致乱码,又改成了fprintf方法写入文件。
在文件读取的时候,使用fread 读取文件,并存放在数据中。
之后的操作包括排序、分类等都是通过数组进行的。
通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。
需要多花时间上机练习。
这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。
总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。