数据结构课程设计成绩分析问题用数组实现两个矩阵的相乘问题山东建筑大学分解

合集下载

两个矩阵相乘课程设计

两个矩阵相乘课程设计

两个矩阵相乘课程设计一、课程目标知识目标:1. 让学生掌握矩阵乘法的基本概念,理解两个矩阵相乘的数学规则。

2. 学会运用矩阵乘法解决实际问题,如线性方程组求解、变换等。

3. 了解矩阵乘法在计算机科学、物理学等领域的应用。

技能目标:1. 培养学生熟练运用矩阵乘法法则进行计算的能力。

2. 培养学生运用矩阵乘法解决实际问题的能力,提高问题分析、解决能力。

3. 提高学生的数学思维能力和逻辑推理能力。

情感态度价值观目标:1. 培养学生对矩阵乘法及其应用的好奇心和求知欲,激发学习兴趣。

2. 培养学生主动参与课堂讨论,积极思考问题,形成合作、探究的学习氛围。

3. 引导学生认识到数学知识在实际生活中的重要性,增强学习的责任感和使命感。

课程性质:本课程属于数学学科,以矩阵乘法为核心内容,旨在培养学生的数学思维能力和实际问题解决能力。

学生特点:学生处于高中年级,具备一定的数学基础和逻辑思维能力,对新鲜事物充满好奇心。

教学要求:结合学生特点,注重启发式教学,引导学生主动参与课堂,注重理论与实践相结合,提高学生的实际操作能力。

在教学过程中,关注学生的个体差异,因材施教,使每个学生都能达到课程目标。

通过课程学习,使学生能够熟练掌握矩阵乘法,并将其应用于实际问题中。

二、教学内容本课程教学内容以人教版高中数学教材《数学》选修2-2第二章“矩阵与变换”为基础,结合课程目标,对以下内容进行组织与安排:1. 矩阵乘法的基本概念与法则:介绍矩阵乘法的定义、性质及计算法则,让学生理解矩阵乘法的本质和运算规律。

2. 矩阵乘法的实际应用:通过线性方程组求解、变换等实际问题的引入,使学生掌握矩阵乘法在实际问题中的应用。

3. 矩阵乘法的计算方法:讲解矩阵乘法的步骤及注意事项,培养学生熟练进行矩阵乘法计算的能力。

4. 矩阵乘法的拓展与应用:探讨矩阵乘法在计算机科学、物理学等领域的应用,拓展学生的知识视野。

教学大纲安排如下:第一课时:矩阵乘法的基本概念与法则第二课时:矩阵乘法的计算方法与练习第三课时:矩阵乘法在求解线性方程组中的应用第四课时:矩阵乘法在变换中的应用第五课时:矩阵乘法的拓展与应用教学内容与教材章节对应关系:1. 矩阵乘法的基本概念与法则:教材第二章第一节2. 矩阵乘法的计算方法:教材第二章第二节3. 矩阵乘法的实际应用:教材第二章第三节、第四节4. 矩阵乘法的拓展与应用:教材第二章第五节三、教学方法针对本章节内容,采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:在讲解矩阵乘法的基本概念、法则及计算方法时,采用讲授法,结合教材内容,以清晰的逻辑顺序进行讲解,突出重点、难点,帮助学生建立完整的知识体系。

数据结构课程设计报告---矩阵的运算

数据结构课程设计报告---矩阵的运算

数据结构课程设计报告题目:专业:班级:学号:姓名:指导老师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算”;所涉及的知识点主要是:1、利用数组的形式来储存数据,在main函数里面,实现对于数据的输入操作,利用switch语句进行选择来执行操作,利用for语句与do……while语句来实现功能的循环操作。

2、矩阵的加法、减法、乘法、数乘、转置的基本算法方式。

3、通过switch语句进行选择来执行操作,来实现每个算法的功能。

二、课程设计思路及算法描述设计思路:用程序实现矩阵能够完成矩阵的转置运算;矩阵的数乘运算;矩阵的加法运算;矩阵的减法运算;矩阵的乘法运算;这几种矩阵的简单的运算。

用数组把将要运算的矩阵储存起来,然后实现矩阵的这几种运算。

在main函数里面,来实现对于数据的输入操作,利用switch语句进行选择来执行操作,利用for语句来实现功能的循环操作。

算法:算法1:矩阵的转置运算;首先是把将要运算的矩阵存放在数组中,矩阵的转置运算,就是把你将要进行运算的A矩阵的行ar和列ac,把A矩阵的行ar作为B矩阵的bc,A矩阵的列ac作为B矩阵的br,这样得到的新矩阵B的行br和列bc就是矩阵A的转置。

算法如下:for(i=0;i<ar;i++)for(j=0;j<ac;j++)B[j][i]=A[i][j];算法2:矩阵的数乘运算;首先是把将要运算的矩阵存放在数组中,矩阵的数乘运算,就是实现用一个实数k 去A矩阵。

实数k去乘矩阵的每一行和每一列,得到的一个新的矩阵B,这样就解决了矩阵的数乘运算。

算法如下:for(i=0;i<ar;i++)for(j=0;j<ac;j++)B[i][j]=k*A[i][j];算法3:矩阵的加法运算;首先是把将要运算的矩阵存放在数组中,矩阵的加法运算,就是要实现A矩阵与B 矩阵进行加法运算。

事实上就是A矩阵的每一行ar与B矩阵的每一行br进行加法运算,而得到的一个新的矩阵C的每一行cr就是A矩阵的ar行与B矩阵的br行的和;A矩阵的每一列ac与B矩阵的每一列bc进行加法运算,而得到的一个新的矩阵C的每一列cc 就是A矩阵的ac列与B矩阵的bc列的和。

数据结构课程设计(矩阵的运算)

数据结构课程设计(矩阵的运算)

数据结构课程设计报告题目:_____________________________________专业:_____________________________________班级:_____________________________________学号:_____________________________________姓名:_____________________________________指导老师:__________________________________时间:_____________________________________、课程设计题目及所涉及知识点设计题目是“矩阵的运算” ,所涉及的知识点主要是:1、数据结构中的对于结构体的定义,用typedef struct 来实现,根据所设计的问题在结构体里面定义数据类型及其变量,用define 定义数组的大小,然后利用typedef 来实现对于变量的未知类型确定正确的类型。

2、利用数组的形式来储存数据,在实现不同操作过程中,有的用一维结构体数组(三元组顺序表)来存储,有的用二维数组来储存。

3、转置的过程中利用的是快速转置的方法,附设了num 和cpot 两个辅助变量。

4、矩阵的加法、减法、乘法、逆运算的基本算法方式。

5、通过调用每个函数,来实现每个算法的功能。

、课程设计思路及算法描述设计思路:1、首先是对于转置的考虑,要运用快速转置的方法实现,必须用三元组顺序表来储存数据,所以在第一个结构体中存在int 类型的行数(mu )列数(nu )以及非零元素的个数(tu );然后第二个结构体中分别有非零元素的行下标(i)、列下标(j)和元素数值(e),最后在第一个结构体中实现对第二个结构体成为数组结构体类型。

2、对于其余加法、减法、乘法和逆运算则是运用另一个结构体来实现,里面只有矩阵的行数、列数和一个二维数组(用float 来定义类型)。

离散数学矩阵相乘

离散数学矩阵相乘

离散数学矩阵相乘矩阵相乘是离散数学中的一个重要概念,它涉及到矩阵的运算和变换。

在实际应用中,矩阵相乘常用于图像处理、信号处理、机器学习等领域。

本文将介绍矩阵相乘的基本原理和计算方法,并探讨矩阵相乘在离散数学中的应用。

一、矩阵相乘的基本原理矩阵相乘是指将两个矩阵相乘得到一个新的矩阵。

矩阵相乘的基本原理是:对于两个矩阵 A 和 B,它们的乘积矩阵 C 的每个元素C[i][j] 等于 A 的第 i 行和 B 的第 j 列对应的元素相乘之和。

即: C[i][j] = ∑[k=1 to n] A[i][k] * B[k][j]其中,n 为矩阵 A 和 B 的列数,∑表示求和符号。

二、矩阵相乘的计算方法矩阵相乘的计算方法有多种,其中最常见的是逐行相乘法和逐列相乘法。

1. 逐行相乘法逐行相乘法是指将矩阵 A 的每一行分别与矩阵 B 的每一列相乘,然后将乘积相加得到矩阵 C。

具体步骤如下:1) 初始化一个和矩阵 C,将 C 的每个元素都设置为 0。

2) 对于矩阵 A 的每一行 i,从矩阵 B 的第一列开始,依次将 B 的每个元素与 A 的第 i 行相乘,并将乘积累加到 C 的第 i 行对应的元素中。

3) 重复步骤 2),直到矩阵 A 的所有行都与矩阵 B 相乘完毕。

此时,矩阵 C 就是矩阵 A 和矩阵 B 的乘积。

2. 逐列相乘法逐列相乘法是指将矩阵 A 的每一列分别与矩阵 B 的每一行相乘,然后将乘积相加得到矩阵 C。

具体步骤如下:1) 初始化一个和矩阵 C,将 C 的每个元素都设置为 0。

2) 对于矩阵 A 的每一列 i,从矩阵 B 的第一行开始,依次将 B 的每个元素与 A 的第 i 列相乘,并将乘积累加到 C 的第 i 列对应的元素中。

3) 重复步骤 2),直到矩阵 A 的所有列都与矩阵 B 相乘完毕。

此时,矩阵 C 就是矩阵 A 和矩阵 B 的乘积。

三、矩阵相乘在离散数学中的应用矩阵相乘在离散数学中有广泛的应用,下面列举了几个常见的应用场景:1. 图像处理在图像处理中,矩阵相乘常用于图像的增强和变换。

Excel高级技巧使用数组公式进行矩阵运算和数据分析

Excel高级技巧使用数组公式进行矩阵运算和数据分析

Excel高级技巧使用数组公式进行矩阵运算和数据分析Excel高级技巧:使用数组公式进行矩阵运算和数据分析Excel是一款广泛应用于数据处理与分析的软件工具,在日常工作中经常会遇到需要对大量数据进行矩阵运算和数据分析的情况。

为了提高工作效率,掌握Excel高级技巧是非常有必要的。

本文将介绍如何利用Excel的数组公式来进行矩阵运算和数据分析。

请按照下面的格式书写文章。

1. 矩阵运算在Excel中,矩阵运算可以通过数组公式实现。

数组公式是一种特殊的Excel公式,它可以将多个数据区域作为一个整体来处理。

下面以矩阵乘法为例,介绍如何使用数组公式进行矩阵运算。

步骤一:创建两个矩阵首先,创建两个矩阵A和B,分别输入数据并选择一个空的区域C 作为结果区域。

步骤二:输入数组公式选中结果区域C,然后在输入公式的编辑栏中输入以下内容,并按下Ctrl+Shift+Enter组合键,将公式转化为数组公式:{=MMULT(A1:B3,D1:E2)}这里的MMULT函数用于求解两个矩阵的乘积,A1:B3和D1:E2分别为矩阵A和矩阵B的区域。

步骤三:查看结果你将发现结果区域C中显示了矩阵乘积的结果。

2. 数据分析Excel的数组公式还可以应用于数据分析,帮助我们快速处理和分析大量数据。

下面以数据排序和汇总为例,介绍如何通过数组公式进行数据分析。

步骤一:数据排序假设你有一份销售数据表格,其中包含了产品名称、销售量和销售额等信息。

现在你需要按照销售额从高到低的顺序对数据进行排序。

首先,选中销售额列的区域,并在公式编辑栏中输入以下数组公式:{=SORT($B$2:$C$10,2,-1)}这里的SORT函数用于对指定区域的数据进行排序,$B$2:$C$10为销售量和销售额的区域,2表示按照销售额列进行排序,-1表示按照降序排列。

按下Ctrl+Shift+Enter组合键,将公式转化为数组公式。

你将发现销售额列的数据按照从高到低的顺序排列。

山东大学-数据结构实验报告-矩阵与散列表

山东大学-数据结构实验报告-矩阵与散列表

山东大学计算机科学与技术学院数据结构课程实验报告了Input函数和Output函数。

对问题三,仿课本所述,定义Term类作为SparseMatrix类的友元类,包含行、列、值三个要素的成员变量,用Term类的数组实现稀疏矩阵的行主映射存储。

查找行为的实现方式是,找到位于目标元素前一行的最后一个元素,再从这个元素开始向下搜索,直到找到和目标元素同一行但是列数小于目标元素的元素a[k-1],然后决定下一步的行为————插入一个新项Term作为a[k]并将已有元素向后移位,还是修改已存在的项a[k]。

以此原理编写了Store和Retrieve函数,并扩展编写了Input函数和Output函数。

对问题四,仿照课本例子编写了有序链表类SortedChain、开放寻址的散列表类HashTable、基于有序链表链接的散列表类ChainHashTable,并对这三个类分别扩展编写了Output函数。

3.测试结果(测试输入,测试输出)问题一:问题二:上图显示了输入不符合下三角方阵约束时,抛出异常并退出程序。

上图是正常运行的结果。

问题三:普通的输入和输出操作如下:矩阵相加:矩阵转置:问题四:以上图的数据为例。

从346就应该在链表链接的散列表上看到开放寻址解决冲突的例子。

返回开放寻址的输出段,可以看到符合预期的结果:4.实现源代码(程序风格清晰易理解,有充分的注释)/** TridiagonalMatrix.h** Created on: Nov 22, 2015* Author: xudp*/#ifndef TRIDIAGONALMATRIX_H_#define TRIDIAGONALMATRIX_H_#include<iostream>usingnamespace std。

template<class T>class TridiagonalMatrix {public:// 1、创建三对角矩阵类,采用按列映射方式,提供 store 和 retrieve 方法。

数据结构课程设计报告大数相乘与多项式相乘

数据结构课程设计报告大数相乘与多项式相乘

数据结构课程设计报告大数相乘与多项式相乘一、引言数据结构是计算机科学中非常重要的一门课程,它涉及到数据的存储、组织和处理方法。

在本次课程设计报告中,我们将重点讨论大数相乘和多项式相乘两个问题,并给出相应的解决方案。

二、大数相乘1. 问题描述大数相乘是指两个超过计算机所能表示范围的整数相乘的问题。

在实际应用中,大数相乘时常浮现在密码学、数值计算和科学计算等领域。

2. 解决方案为了解决大数相乘的问题,我们可以采用分治算法。

具体步骤如下:- 将两个大数分别划分为高位和低位部份,例如将大数A划分为A1和A0,将大数B划分为B1和B0。

- 分别计算A1 * B1、A0 * B0和(A1 + A0) * (B1 + B0)的结果。

- 将上述三个结果通过适当的位移和加法运算得到最终的结果。

3. 算法实现下面是使用分治算法实现大数相乘的伪代码:```function multiply(A, B):if A 或者 B 是小数:直接返回 A * Belse:将 A 和 B 分别划分为高位和低位部份A1, A0 = 高位部份B1, B0 = 低位部份X = multiply(A1, B1)Y = multiply(A0, B0)Z = multiply(A1 + A0, B1 + B0)结果 = (X << n) + ((Z - X - Y) << n/2) + Y返回结果```4. 实例分析以A = 123456789 和 B = 987654321为例,我们可以通过上述算法得到它们的乘积为 121932631137021795。

三、多项式相乘1. 问题描述多项式相乘是指两个多项式相乘的问题。

在实际应用中,多项式相乘时常浮现在信号处理、图象处理和机器学习等领域。

2. 解决方案为了解决多项式相乘的问题,我们可以采用传统的乘法算法。

具体步骤如下:- 将两个多项式分别表示为系数和指数的形式,例如多项式A可以表示为A =a0x^0 + a1x^1 + ... + anx^n。

矩阵相乘算法实验报告

矩阵相乘算法实验报告

矩阵相乘算法实验报告引言矩阵相乘是一种常见的数学运算。

在很多领域,如图像处理、机器学习等都会用到矩阵相乘。

因此,优化矩阵相乘的算法对加快计算速度具有重要意义。

本实验旨在比较不同算法在矩阵相乘问题中的性能表现,并探讨其优化的方法。

实验设计实验目的本实验主要有以下几个目的:1. 了解常见的矩阵相乘算法,包括传统的三重循环算法和Strassen算法;2. 比较不同算法的计算性能并分析其优缺点;3. 探讨优化矩阵相乘算法的方法,提高计算速度。

实验流程1. 设计矩阵相乘函数,实现传统的三重循环算法;2. 设计矩阵相乘函数,实现Strassen算法;3. 设计测试用例,并分别用三重循环算法和Strassen算法进行计算;4. 计算并比较两种算法的运行时间、计算复杂度和空间复杂度;5. 分析并探讨优化矩阵相乘算法的方法。

实验结果与分析传统的三重循环算法三重循环算法是最简单直观的矩阵相乘算法。

其思想是通过嵌套循环,对两个矩阵的每个元素进行相乘累加,最终得到结果矩阵。

这个算法的时间复杂度为O(n^3),空间复杂度为O(n^2)。

Strassen算法Strassen算法是一种分治法的思想,它把矩阵相乘的问题转化为更小规模的子问题。

它通过将大矩阵分解成四个小矩阵,然后利用递归的方法求解,最后将四个小矩阵合并得到结果矩阵。

Strassen算法的时间复杂度为O(n^log2(7)),空间复杂度为O(n^2)。

实验结果假设设定矩阵的大小为n*n,我们随机生成了n=100、n=500、n=1000大小的两个矩阵进行实验。

实验结果表明,当矩阵较小(n=100)时,三重循环算法的运行时间略微快于Strassen算法。

但是随着矩阵规模的增大,Strassen算法的计算时间明显优于三重循环算法,尤其是在n=1000时,Strassen算法的优势更加明显。

对于计算复杂度,三重循环算法具有较高的时间复杂度,而Strassen算法的时间复杂度较低,这也是导致Strassen算法在大规模矩阵相乘时性能更好的原因之一。

数据结构课程设计报告1数组实现两个矩阵的相乘运算2成绩分析问题

数据结构课程设计报告1数组实现两个矩阵的相乘运算2成绩分析问题

山东建筑大学课程设计成果报告题目: 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 47 3 1 4 2 1 1 3 1 0 5 20 1 0 2 9 1 1 9 2 1 3 0A= 4 1 0 2 6 0 B= 9 1 2 4 0 01 2 1 0 1 5 3 0 0 1 0 13 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[问题描述]录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。

数据结构课程设计报告n维矩阵乘法

数据结构课程设计报告n维矩阵乘法

数据结构课程设计报告设计题目:n维矩阵乘法:A B-1专业计算机科学与技术班级计051本学生林垂敏学号29指导教师潘崇起止时间2007-2008 学年第I学期一、具体任务功能:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。

分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:建立一个文件,可完成2维矩阵的情况;3.进一步要求:通过键盘输入维数n。

有兴趣的同学可以自己扩充系统功能。

要求:1.界面友好,函数功能要划分好2.总体设计应画一流程图3.程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

二、软件环境Microsoft Visual C++ 6.0三、问题的需求分析程序以二维数组作为矩阵的存储结构,通过键盘输入矩阵维数n,动态分配内存空间,创建n维矩阵。

矩阵建立后再通过键盘输入矩阵的各个元素值;也可以通过文件读入矩阵的各项数据(维数及各元素值)。

当要对矩阵作进一步操作(A*B或A*B^(-1))时,先判断内存中是否已经有相关的数据存在,若还未有数据存在则提示用户先输入相关数据。

当要对矩阵进行求逆时,先利用矩阵可逆的充要条件:|A| != 0 判断矩阵是否可逆,若矩阵的行列式|A| = = 0 则提示该矩阵为不可逆的;若|A| !=0 则求其逆矩阵,并在终端显示其逆矩阵。

四、算法设计思想及流程图1.抽象数据类型ADT MatrixMulti{数据对象:D = {a(I,j)|i = 1,2,3,…,n;j = 1,2,…,n;a(i,j)∈ElemSet,n为矩阵维数}数据关系: R = {Row,Col}Row = {<a(i,j),a(i,j+1)>| 1 <= i <= n , 1 <= j <= n-1}Col = {<a(i,j),a(i+1,j)>| 1 <= i <= n-1 , 1 <= j <= n} 基本操作:Swap(&a,&b);初始条件:记录a,b已存在。

山东建筑大学结构力学矩阵法1

山东建筑大学结构力学矩阵法1

v1
-
v2
Y1
6EI l2
1 2
12EI l3
v1
-
v2
Y2
-
6EI l2
1 2
-
12EI l3
v1
-
v2
X1 e
Y1
M1
X
2
EA l 0
0 - EA
l
Y2
M 2
0 0
0
12EI
l3 6EI
l2
0
-
12E l3
I
6EI
l2
0
6EI l2 4EI
27
.8
10
-3
,
6EI1 l12
6.94
10
-3
,
12 EI1 l13
2.31 10-3

A2
0.63m2, I2
1 12
m4, l2
12m,
EA2 l2
52.5 10-3,
EI 2 l2
6.94 10-3
2 EI 2 l2
13.9 10-3, 4EI2 l2
27
.8
10
-3
,
6
EI l22
2
3.47
10
-3
,
12 EI l23
2
0.58 10-3
局部坐标下的单元 刚度矩阵
单元1和3
83.3
0
[k–]1 =
[k–]3 =10-3×
0 - 83.3
0
0
0 2.31 6.94
0 - 2.31 6.94
0 6.94 27.8
0 - 6.94 13.9
- 83.3 0 0

数学实验知到章节答案智慧树2023年山东建筑大学

数学实验知到章节答案智慧树2023年山东建筑大学

数学实验知到章节测试答案智慧树2023年最新山东建筑大学绪论单元测试1.传统的数学实验包括测量手工操作制作模型实物或者教具演示等等。

参考答案:对2.现代的数学实验以计算机软件应用为平台结合数学模型来模拟实验环境。

参考答案:对第一章测试1.,则下列语句输出结果正确的是()参考答案:>>B=A.*A↙2.要输入数组b=(3,4,5,6,7,8,9,10),下列语句不正确的是()参考答案:b=10:-1:33.命令format rat, 0.5输出的结果是()参考答案:ans=1/24.清除工作空间(workspace)的命令是().参考答案:clear5.如果x=1: 2 : 8,则x(1)和x(4)分别是()参考答案:1, 76.MATLAB表达式2*2^3^2的结果是()参考答案:1287.sort([3,1,2,4])的运行结果是()参考答案:1 2 3 48.参考答案:feval(‘sin’, 0.5*pi)9.数组运算符与矩阵运算符是一样的。

参考答案:错10.在输入矩阵时需要先定义矩阵的行数和列数。

参考答案:错第二章测试1.在图形指定位置加标注的命令是()参考答案:text(x,y,‘y=sin(x)’)2.用来绘制二维条形统计图的命令是()参考答案:bar3.绘制三维曲线下列语句组中有错误的语句是()参考答案:>>z=t*sin(t)*cos(t);4.meshgrid函数的作用是()参考答案:生成网格坐标矩阵5.为了使两个plot的图形在同一个坐标显示,可以使用()命令进行图形保持.参考答案:hold on6.下列命令中中不是用来绘制曲面的是()参考答案:plot37.ezplot命令用来绘制隐函数的图形。

参考答案:对8.text命令用来给绘制的图形添加图例。

参考答案:错9.plot函数的输入参数只能是数组形式。

参考答案:错10.plot(x,y,’b:’)绘制出的曲线线型为()参考答案:蓝色虚线第三章测试1.下面哪种结构不是 MATLAB中程序的控制结构?()参考答案:逻辑结构2.下列哪个不是循环结构语句?()参考答案:swich3.在循环结构中跳出循环,但继续下次循环的命令为()。

数据结构课程设计报告大数相乘与多项式相乘

数据结构课程设计报告大数相乘与多项式相乘

目录1、问题描述…………………………………………………2、设计思路…………………………………………………3、数据构造设计……………………………………………4、功能函数设计……………………………………………5、程序代码…………………………………………………6、运行与测试………………………………………………7、设计心得…………………………………………………一、大数相乘1、问题描述:<1>输入两个相对较大的正整数,能够通过程序计算出其结果2、设计思路:<1>首先考虑设计将两个大数按照输入顺序存入分别存入数a[ ],b[ ]中.<2>把这个数组中的每一位数字单独来进展乘法运算,比方我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。

这就是乘法运算的过从低位往高位依次计算,同时确定每一列的项数,确定每一位上的结果存入数组c[ ]中.<3>找到最高位在数组中的项c[i],然后依次输出各位上的数值<4>通过主函数来调用其它各个函数。

3、数据构造设计:<1>输入阶段采用一维数组a[ ],b[ ]在输入阶段当大数输入时,大数a,b从高位到低位分别依次存入数组a[ ],b[ ]。

<2>调用函数计算阶段采用一维数组c[ ]在调用sum(a,b,m,n)函数中,在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c[ ]中。

4、功能函数设计:<1>找出每一列的所有项首先找规律,如下所示进展乘法:a[0] a[1] a[2]b[0] b[1] b[2]b[2]a[0] b[2]a[1] b[2]a[2]b[1]a[0] b[1]a[1] b[1]a[2]b[0]a[0] b[0]a[1] b[0]a[2]下标之和0 1 2 3 4i=4 i=3 i=2 i=1 i =0(循环时的i的数值)即有下标之和=m+n-2-i,由此限定条件可设计循环得出每一列的所有项。

数据结构课程设计报告---大数阶乘运算

数据结构课程设计报告---大数阶乘运算

数据结构课程设计报告题目:专业:班级:学号:姓名:指导老师:时间:一、课程设计题目及所涉及知识点设计题目是:大数阶乘运算。

所涉及的知识点主要是:数组的运用、嵌套循环的使用、进数思想等二、课程设计思路及算法描述定义一个数组a[MAX]用来储存运算结果,通过更改MAX的数值来改变储存空间的大小以免造成内存的浪费以及内存不足的问题;首先把数组a[0]赋值为1;然后利用进数的思想进行阶乘计算;外加一个循环实现循环计算;三、课程设计中遇到的难点及解决办法难点:刚开始的时候储存不够合理造成了无法完成部分计算等解决办法:查阅相关资料以及咨询老师等通过多种途径终于解决了遇到的问题四、总结通过本次课程设计让我更加理解到只有当知识运用到实际中才会发现许多问题,以及发现本身知识的不足,本次课程设计使我受益匪浅,在完成老师布置的课业的同时也在不断地完善了自我。

五、附录—主要源程序代码及运行结果#include<stdio.h>#define MAX 100000int main(){int b;do{int n;printf("请输入要计算的阶乘数:\n");scanf("%d",&n);int a[MAX];int digit=1;a[0]=1;for(int i=2;i<=n;++i){for(int j=1,c=0;j<=digit;++j){int temp=a[j-1]*i+c;a[j-1]=temp%10;c=temp/10;}while(c){a[++digit-1]=c%10;c/=10;}}printf("结果是:\n%d!=",n);for( i=digit;i>=1;--i){printf("%d",a[i-1]);}printf("结果一共有%d位数!\n",digit);printf("是否要继续运算:是按1,否按2。

矩阵相乘的算法设计

矩阵相乘的算法设计

数据结构与算法设计课程实验报告课题矩阵相乘的算法设计专业班级网工专业1405班学号14144501352姓名陈晓露指导教师陶跃进目录一、问题描述二、问题分析1、分析最优解的结构2、建立递归关系3、递归实现的复杂性4、算法迭代实现三、结果输出四、实验总结一、问题描述给定n个矩阵{A1,A2,... ,An},其中这n个矩阵是可相乘的,i=1,2,...,n-1。

算出这n个矩阵的相乘积A1A2 。

An。

补充:如果两个矩阵A和B是可相乘的,那么A的列数要和B的行数是相同的,否则,这两个矩阵是不可相乘的。

它们的相乘结果矩阵C的行数是A的行数,而列数是B的列数。

设A1,A2,…,An为矩阵序列,Ai为Pi-1×Pi阶矩阵,i = 1,2,…,n. 确定乘法顺序使得元素相乘的总次数最少.输入:向量P = <P0, P1, … , Pn>实例:P = <10, 100, 5, 50> A1: 10 × 100, A2: 100 × 5, A3: 5 × 50乘法次序:(A1 A2)A3: 10 × 100 × 5 + 10 ×5 × 50 = 7500A1(A2 A3): 10 × 100 × 50 + 100 × 5 × 50 = 75000搜索空间的规模先将矩阵链加括号分为两部分,即P=A1*A2*...*An=(A1*A2...*Ak)*(Ak+1*...An),则有f(n)=f(1)*f(n-1)+f(2)*f(n-2)+...+f(n-1)*f(1)种方法。

动态规划算法输入P=< P0, P1, …, Pn>,Ai..j 表示乘积 AiAi+1…Aj 的结果,其最后一次相乘是:m[i,j] 表示得到Ai..j的最少的相乘次数。

递推方程:为了确定加括号的次序,设计表s[i,j],记录求得最优时最一位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东建筑大学课程设计成果报告题目: 1.用数组实现两个矩阵的相乘运算2.成绩分析问题课程:数据结构A课程设计院(部):管理工程学院专业:信息管理与信息系统班级:信管112学生姓名:王楷仁学号:2011021686指导教师:陈兆柱完成日期:2014年1月1日目录一、课程设计概述 (3)二、课程设计题目一 (3)[问题描述] (3)[详细设计] (3)[调试分析] (4)[运行结果及分析] (4)三、课程设计题目二 (5)[问题描述] (5)[需求分析] (5)[概要设计] (5)[存储结构] (6)[流程图] (7)[详细设计] (7)[调试分析] (21)[运行结果及分析] (21)四、参考文献: (27)课程设计报告一、课程设计概述本次数据结构课程设计共完成三个题:1、用数组实现两个矩阵的相乘问题;2、成绩分析问题。

使用语言:C编译环境:vc6.0二、课程设计题目一[问题描述]程序结构:#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”);}}要求及提示:1、要求完善函数mult( ),2、现有A,B两个矩阵,要求用上述程序求出A与B相乘后的运行结果,[详细设计]#include <stdio.h>int r[6][6];void mult(int a[6][6] , int b[6][6]){int m,n;for(m=0;m<6;m++){for(n=0;n<6;n++){r[m][n]=a[m][n]*b[n][m];}}}main(){int i,j;int num1[6][6],num2[6][6];printf("请输入第一个矩阵的值: \n ");for(i=0;i<6;i++)for(j=0;j<6;j++)scanf("%d",&num1[i][j]);printf("请输入第二个矩阵的值: \n ");for(i=0;i<6;i++)for(j=0;j<6;j++)scanf("%d",&num2[i][j]);mult(num1,num2);printf("\n两个矩阵相乘后的结果为:\n");for(i=0;i<6;i++){for(j=0;j<6;j++)printf("%4d",r[i][j]);printf("\n");}}[调试分析]本程序通过定义二维数组来存储矩阵,利用循环结构来完成运算,再通过调用函数完成运算。

问题一:现象:矩阵的第一行和第一列无法完成正常的矩阵运算后的输出。

原因:在原题目中,程序给出输出循环体的控制变量赋值错误。

[运行结果及分析]三、课程设计题目二成绩分析文档资料[问题描述]录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。

[需求分析]1.通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat2.对文件input.dat中的数据进行处理,要求具有如下功能:a.按各门课程成绩排序,并生成相应的文件输出b.计算每人的平均成绩,按平均成绩排序,并生成文件c.求出各门课程的平均成绩、最高分、最低分、不及格人数、60-69分人数、70-79分人数、80-89分人数、90分以上人数d.根据姓名或学号查询某人的各门课成绩,重名也要能处理3.界面美观[概要设计]-=ADT=-{Void initlinklist();//单链表初始化,建立链表void creat();//录入学生信息void prnt(linklist *p);//输出单条记录void search();//查找指定学号的学生void mathp(linklist *p);//输出数学void engp(linklist *p);//输出英语void comp(linklist *p);//输出计算机void g_d();//输出最高最低分void aver();//输出平均成绩void mathinfo();// 数学成绩分段void enginfo();// 英语成绩分段void cominfo();// 计算机成绩分段void sortmath();//数学成绩排序void sorteng();//英语成绩排序void sortcom();//计算机成绩排序void main();//主函数,调用其他功能函数)[存储结构]typedef struct STUDENT{char no[7];char name[9];int math;int eng;int com;struct STUDENT *next;}linklist;//定义结构体linklist *findn(linklist *head,char *no){linklist *p;p=head->next;while(p){if(strcmp(p->no,no)==0)return p;p=p->next;}return NULL;} //查找指定学号的学生,返回该结点的地址,用于检验该组数据是否存在linklist *findm(linklist *head,char *name){linklist *p;p=head->next;while(p){if(strcmp(p->name,name)==0)return p;p=p->next;}return NULL;}//查找指定姓名的学生,返回该结点的地址,用于检验是否存在该数据[流程图]int Partition(KeyWord* RL, int low, int high) //快速排序第一趟[详细设计]#include <stdio.h>#include <stdlib.h>#include <string.h>struct STUDENT{char no[7];char name[9];int math;int eng;int com;struct STUDENT *next;};typedef struct STUDENT linklist;linklist *head=NULL;void initlinklist() //单链表的初始化,生成一个空的单链表{head=(linklist *)malloc(sizeof(linklist)); //生成头结点head->next=NULL;}linklist *findm(linklist *head,char *name)//查找指定姓名的学生,返回该结点的地址,用于检验是否存在该数据{linklist *p;p=head->next;while(p){if(strcmp(p->name,name)==0)return p;p=p->next;}return NULL;}linklist *findn(linklist *head,char *no) //查找指定学号的学生,返回该结点的地址{linklist *p;p=head->next;while(p){if(strcmp(p->no,no)==0)return p;p=p->next;}return NULL;}void creat(){//录入学生信息struct STUDENT *p;while(1){p=(struct STUDENT *)malloc(sizeof(struct STUDENT));printf("学号:");fflush(stdin);//清除缓存gets(p->no);printf("姓名:");fflush(stdin);gets(p->name);printf("数学成绩:");fflush(stdin);scanf("%d",&(p->math));printf("英语成绩:");fflush(stdin);scanf("%d",&(p->eng));printf("计算机成绩:");fflush(stdin);scanf("%d",&(p->com));p->next=head->next;head->next=p;printf("是否要继续录入?(y/n)");fflush(stdin);if(getchar()=='n')break;}}void prnt(linklist *p) //输出单条记录{printf("\n---------------------------------------------------\n");printf(" 学号:%s",p->no);printf("\t姓名:%s",p->name);printf("\t数学:%d",p->math);printf("\t英语:%d",p->eng);printf("\t计算机:%d",p->com);printf("\n---------------------------------------------------\n");}void search() //查找指定学号或姓名的学生{char no[7];char name[9];linklist *p=NULL;printf("学号查询请输入1,姓名查询输入0: ");fflush(stdin);if(getchar()=='1'){printf("按学号查询:\n");printf("请输入要查询的学号:");fflush(stdin);gets(no);p=findn(head,no);if(p==NULL)printf("对不起,没有找到满足条件记录!\n");p=head->next;while(p!=NULL){if(strcmp(p->no,no)==0){printf("\n---------------------------------------------------\n");printf(" 学号:%s",p->no);printf("\t姓名:%s",p->name);printf("\t数学:%d",p->math);printf("\t英语:%d",p->eng);printf("\t计算机:%d",p->com);printf("\n---------------------------------------------------\n");}p=p->next;}}else{printf("按姓名查询:\n");printf("请输入要查询的姓名:");fflush(stdin);gets(name);//=============================================p=findm(head,name);if(p==NULL)printf("对不起,没有找到满足条件记录!\n");p=head->next;while(p!=NULL){if(strcmp(p->name,name)==0){printf("\n---------------------------------------------------\n");printf(" 学号:%s",p->no);printf("\t姓名:%s",p->name);printf("\t数学:%d",p->math);printf("\t英语:%d",p->eng);printf("\t计算机:%d",p->com);printf("\n---------------------------------------------------\n");}p=p->next;}}}void mathp(linklist *p) //输出数学{printf(" 学号:%s",p->no);printf("\t姓名:%s",p->name);printf("\t数学:%d",p->math);}void engp(linklist *p) //输出英语{printf(" 学号:%s",p->no);printf("\t姓名:%s",p->name);printf("\t英语:%d",p->eng);}void comp(linklist *p) //输出计算机{printf(" 学号:%s",p->no);printf("\t姓名:%s",p->name);printf("\t计算机:%d",p->com);}void g_d() //从高到低成绩排序{int i,j,temp,N=0;linklist *p;//数学p=head->next;int a[1000]; //调用了一个足够大的一维数组作为临时数据存放for(i=0;p!=NULL;i++){a[i]=p->math;p=p->next;}a[i]=999;//存放结束标志for(i=0;a[i]!=999;i++)N++;N=N-1;for(j=0;j<N-1;j++) //j<N //冒泡排序,由大到小{for(i=0;i<N-j-1;i++) //i<N-jif(a[i]<=a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}i=N;//-1printf("数学最低分:%d",a[i]);printf("\n");i=0;printf("数学最高分:%d",a[i]);printf("\n");//英语N=0;p=head->next;for(i=0;p!=NULL;i++){a[i]=p->eng;p=p->next;}a[i]=1000; //调用了一个足够大的一维数组作为临时数据存放for(i=0;a[i]!=1000;i++) N++; //冒泡排序,由大到小N=N-1;for(j=0;j<N-1;j++){for(i=0;i<N-j-1;i++)if(a[i]<=a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}i=N;printf("英语最低分:%d",a[i]);printf("\n");i=0;printf("英语最高分:%d",a[i]);printf("\n");//计算机N=0;p=head->next;for(i=0;p!=NULL;i++){a[i]=p->com;p=p->next;}a[i]=1000; //调用了一个足够大的一维数组作为临时数据存放for(i=0;a[i]!=1000;i++) N++; //冒泡排序,由大到小N=N-1;for(j=0;j<N-1;j++){for(i=0;i<N-j-1;i++)if(a[i]<=a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}i=N;printf("计算机最低分:%d",a[i]);printf("\n");i=0;printf("计算机最高分:%d",a[i]);printf("\n");}void aver(){int n=0,add=0;linklist *p;p=head->next;while(p){add+=p->math;n++;p=p->next;}printf("数学平均成绩:%d",add/n);printf("\t\t");n=0;add=0;p=head->next;while(p){add+=p->eng;n++;p=p->next;}printf("英语平均成绩:%d",add/n);printf("\t\t");n=0;add=0;p=head->next;while(p){add+=p->com;n++;p=p->next;}printf("计算机平均成绩:%d",add/n);printf("\t\t");}void mathinfo(){int n=0,m=0,k=0,l=0,o=0;linklist *p;p=head->next;while(p!=NULL){if(p->math>=90)n++;else if(p->math>=80)m++;else if(p->math>=70)k++;else if(p->math>=60)l++;else o++;p=p->next;}printf("数学成绩在90分以上的人数:%d\n",n);printf("数学成绩在80-90分的人数:%d\n",m);printf("数学成绩在70-80分的人数:%d\n",l);printf("数学成绩在60-70分的人数:%d\n",k);printf("数学成绩在60分以下的人数:%d\n",o); }void enginfo(){int n=0,m=0,k=0,l=0,o=0;linklist *p;p=head->next;while(p!=NULL){if(p->eng>=90)n++;else if(p->eng>=80)m++;else if(p->eng>=70)k++;else if(p->eng>=60)l++;else o++;p=p->next;}printf("英语成绩在90分以上的人数:%d\n",n);printf("英语成绩在80-90分的人数:%d\n",m);printf("英语成绩在70-80分的人数:%d\n",l);printf("英语成绩在60-70分的人数:%d\n",k);printf("英语成绩在60分以下的人数:%d\n",o); }void cominfo(){int n=0,m=0,k=0,l=0,o=0;linklist *p;p=head->next;while(p!=NULL){if(p->com>=90)n++;else if(p->com>=80)m++;else if(p->com>=70)k++;else if(p->com>=60)l++;else o++;p=p->next;}printf("计算机成绩在90分以上的人数:%d\n",n);printf("计算机成绩在80-90分的人数:%d\n",m);printf("计算机成绩在70-80分的人数:%d\n",l);printf("计算机成绩在60-70分的人数:%d\n",k);printf("计算机成绩在60分以下的人数:%d\n",o);}void sortmath(){int i,j,N=0;linklist *p;p=head->next;linklist a[1000],temp; //调用了一个足够大的一维数组作为临时数据存放for(i=0;p!=NULL;i++){strcpy(a[i].no,p->no);strcpy(a[i].name,p->name);a[i].math=p->math;a[i].eng=p->eng;a[i].com=p->com;p=p->next;}a[i].math=999;for(i=0;a[i].math!=999;i++) N++; //通过N确定总共有多少学生的成绩信息for(j=0;j<N-1;j++){for(i=0;i<N-j-1;i++)if(a[i].math<=a[i+1].math){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}printf("数学:\n");for(i=0;i<N;i++){printf(" 学号:%s",a[i].no);printf("\t姓名:%s",a[i].name);printf("\t数学:%d",a[i].math);printf("\n");}printf("\n");}void sorteng(){int i,j,N=0;linklist *p;p=head->next;linklist b[1000],temp; //调用了一个足够大的一维数组作为临时数据存放for(i=0;p!=NULL;i++){strcpy(b[i].no,p->no);strcpy(b[i].name,p->name);b[i].math=p->math;b[i].eng=p->eng;b[i].com=p->com;p=p->next;}b[i].eng=999;for(i=0;b[i].eng!=999;i++) N++; //冒泡排序,由大到小for(j=0;j<N-1;j++){for(i=0;i<N-j-1;i++)if(b[i].eng<=b[i+1].eng){temp=b[i];b[i]=b[i+1];b[i+1]=temp;}}printf("英语:\n");for(i=0;i<N;i++){printf(" 学号:%s",b[i].no);printf("\t姓名:%s",b[i].name);printf("\t数学:%d",b[i].eng);printf("\n");}printf("\n");}void sortcom(){int i,j,N=0;linklist *p;p=head->next;linklist c[1000],temp; //调用了一个足够大的一维数组作为临时数据存放for(i=0;p!=NULL;i++){strcpy(c[i].no,p->no);strcpy(c[i].name,p->name);c[i].math=p->math;c[i].eng=p->eng;c[i].com=p->com;p=p->next;}c[i].com=999;for(i=0;c[i].com!=999;i++) N++; //冒泡排序,由大到小for(j=0;j<N-1;j++){for(i=0;i<N-j-1;i++)if(c[i].com<=c[i+1].com){temp=c[i];c[i]=c[i+1];c[i+1]=temp;}}printf("计算机:\n");for(i=0;i<N;i++){printf(" 学号:%s",c[i].no);printf("\t姓名:%s",c[i].name);printf("\t数学:%d",c[i].com);printf("\n");}printf("\n");}void save(linklist *head){FILE *fp; //定义文件指针linklist *p; //定义辅助指针p,用于对单链表进行访问p=head->next; //p指向首元结点if((fp=fopen("d:\\input.dat","wb+"))==NULL) //打开磁盘文件d:\input .dat{ printf("不能打开文件!\n");exit(0);}while(p) //如果结点不为空{fwrite(p,sizeof(linklist),1,fp); //将当前节点p,写入磁盘文件中p=p->next; //p指向下一个结点}printf("存盘成功!\n");fclose(fp); //关闭磁盘文件}void load(){FILE *fp;struct STUDENT *p;;if((fp=fopen("d:\\input.dat","rb+"))==NULL){ printf("不能打开文件!\n");exit(0);}int i=0; //???//头结点已经生成了while(!feof(fp)){p=(struct STUDENT *)malloc(sizeof(struct STUDENT));fread(p,sizeof(struct STUDENT),1,fp);if(feof(fp))break;p->next=head->next;head->next=p;}fclose(fp);}void main(){printf("\t *************成绩分析记录表*************\n");initlinklist();int sel,sel2,sel1;do{printf("\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t1 学生信息录入\n");printf("\t\t\t2 学生信息查找\n");printf("\t\t\t3 最高最低\n");printf("\t\t\t4 平均成绩\n");printf("\t\t\t5 各科排序\n");printf("\t\t\t6 各科成绩分段\n");printf("\t\t\t7 信息存盘\n");printf("\t\t\t8 信息读取\n");printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t0 退出系统\n");printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("请选择:");scanf("%d",&sel);switch(sel){case 1:creat();break;case 2:search();break;case 3:g_d();break;case 4:aver();break;case 5:{do{printf("请输入你要查询的科目:\n1、数学\n2、英语\n3、计算机\n0、退出\n");scanf("%d",&sel1);switch(sel1){case 1:sortmath();break;case 2:sorteng();break;case 3:sortcom();break;case 0:break;default:printf("输入指令非法");break;}}while(sel1!=0);break;}case 6:{do{printf("请输入你要查询的科目:\n1、数学\n2、英语\n3、计算机\n0、退出\n");scanf("%d",&sel2);switch(sel2){case 1:mathinfo();break;case 2:enginfo();break;case 3:cominfo();break;case 0:break;default:printf("输入指令非法");break;}}while(sel2!=0);break;}case 7:save(head);break;case 8:load();break;case 0:printf("\n\n\t\t\t\t***程序已关闭***\n\n\n");break;}}while(sel!=0);}[调试分析]本程序主要的操作对象是记录数组,使用的存储结构是结构体数组。

相关文档
最新文档