当前位置:文档之家› 实验二一维数组与二维数组

实验二一维数组与二维数组

实验二一维数组与二维数组
实验二一维数组与二维数组

实验二一维数组与二维数组

一、实验目的和要求

1. 掌握一维数组的定义、初始化赋值、数组元素的引用方法;

2. 掌握二维数组、字符数组的定义、初始化赋值、数组元素的引用方法。

二、实验设备及分组

1. Windows 7以上操作系统;

2. Visual C++ 2015集成开发环境;

3. PC或台式电脑。

三、实验内容和步骤

1. 验证分析程序

(1)使用一维数组,设计一个C++程序对10个整数进行冒泡排序,使其按照从大到小的顺序输出。

源程序如下:

#include

using namespace std;

int main()

{

int a[10];

int i, j, temp;

cout << "输入数据: " << endl;

for (i=0; i <=9; i++)

{

cout << "a[" << i + 1 << "]=";

cin >> a[i];

}

for (i = 0; i <=8; i++)

{

for (j = i + 1; j <= 9; j++)

{

if (a[i] < a[j])

{

temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

}

cout << "排序结果为:" << endl;

for (i = 0; i <= 9; i++)

{

cout << "a[" << i + 1 << "]=" << a[i] << " " << endl;

}

system("pause");

return 0;

}

(2)设计C++程序,使用二维数组打印如下图所示杨辉三角。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

源程序如下:

#include

#include

using namespace std;

int main ()

{

int a[5][5];

int i, j, n = 5;

for (i = 0; i

{

a[i][0] = 1;

a[i][i] = 1;

}

for (i = 2; i

{

for (j = 1; j

{

a[i][j] = a[i - 1][j - 1] + a[i - 1][j];

}

}

for (i = 0; i

{

for (j = 0; j <= i; j++)

{

cout<

}

cout << endl;

}

system("pause");

return 0;

}

setw()函数的使用:

C++函数std::setw的行为与在流上调用n作为参数的成员宽度一样,它作为操纵器插入/提取(在输入流或输出流上插入/提取)。

它用于设置要在输出操作上使用的字段宽度。

setw()是C ++中的库函数。

setw()在#include 中声明

setw()将设置字段宽度。

setw()设置要用作下一个插入操作的字段宽度的字符数。

思考:添加C++语句,使得输出如下图所示:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

#include

#include

using namespace std;

int* YangHuiData(int n); //n是杨辉三角形的行数

void YangHuiShow(int *pData, int n);//在屏幕上打印杨辉三角形

int main()

{

int n; cout << "请输入杨辉三角形的行数: ";

cin >> n; //计算杨辉三角并保存到二维数组

int *pData = YangHuiData(n); //在屏幕上打印等腰三角形的杨辉三角

YangHuiShow(pData, n); //n是杨辉三角形的行数

}

int* YangHuiData(int n)

{

int *a = new int[n*n]; //完成杨辉三角形的计算,没有显示的位置填0

int i, j;

for (i = 0; i

{

a[i] = 0;

}

a[0] = 1;

a[n] = 1;

a[n + 1] = 1;

for (i = 2; i

{

a[i*n] = 1;

a[i*n + i] = 1;

for (j = 1; j

{

a[i*n + j] = a[(i - 1)*n + j - 1] + a[(i - 1)*n + j];

}

}

return a;

}

void YangHuiShow(int *a, int n)

{ //根据数据a指向的二维数组在屏幕上打印//杨辉三角形,每行前面填充合适的空格//以显示成等腰三角形,左右对称

int i, j;

for (i = 0; i

{

for (j = 0; j

cout << setw(3) << " ";//前导空格,为单个数据的一半宽度

for (j = 0; j <= i; j++)

cout << setw(6) << a[i*n + j];

cout << endl;

}

}

2. 完成实验项目

某班有30个学生,进行了“高等数学”、“大学英语”、“C++语言”等课程的考核,编写C++程序:

a. 将成绩输入一个二维数组;

b. 分别求每个课程的平均成绩、不及格学生数目及最高分与最低分;

c. 求每位学生的平均成绩、总分与不及格课程数;

d. 将每个学生的平均成绩由高到低排序。

四、课后作业

1. 令A1,A2,A3为三个元素均为整数的n行m列矩,设计C++加法程序,完成矩阵加法操作,即A3= A1+A2。注意:n和m均用define定义为常量,其值由用户自定义。

2. 撰写实验报告。

课后作业代码:

#include

#include

using namespace std;

#define m 4

#define n 3

void main(void)

{

int a1[m][n], a2[m][n], a3[m][n]; // 定义三个数组

int i, j; //其中m为行,n为列

cout <<"请输入a1[m][n]:"<< endl; //输入数组a1

for (i = 0; i < m; i++)

for (j = 0; j < n; j++)

cin >> a1[i][j];

cout <<"请输入a2[m][n]:"<< endl; //输入数组a2

for (i = 0; i < m; i++)

for (j = 0; j < n; j++)

cin >> a2[i][j];

cout <<"得出a3[][]为:"<< endl;

for (i = 0; i < m; i++) //循环相加得出a3的各个元素for (j = 0; j < n; j++)

a3[i][j] = a1[i][j] + a2[i][j];

for (i = 0; i < m; i++) {

for (j = 0; j < n; j++)

cout << setw(6) << a3[i][j]; //利用setw函数

cout << endl;

}

}

实现稀疏矩阵(采用三元组表示)的基本运算实验报告

实现稀疏矩阵(采用三元组表示)的基本运算实验报告 一实验题目: 实现稀疏矩阵(采用三元组表示)的基本运算二实验要求: (1)生成如下两个稀疏矩阵的三元组 a 和 b;(上机实验指导 P92 )(2)输出 a 转置矩阵的三元组; (3)输出a + b 的三元组; (4)输出 a * b 的三元组; 三实验内容: 稀疏矩阵的抽象数据类型: ADT SparseMatrix { 数据对象:D={aij| i = 1,2,3,….,m; j =1,2,3,……,n; ai,j∈ElemSet,m和n分别称为矩阵的行数和列数} 数据关系: R={ Row , Col } Row ={ | 1≤i≤m , 1≤j ≤n-1} Col ={| 1≤i≤m-1,1≤j ≤n} 基本操作:

CreateSMatrix(&M) 操作结果:创建稀疏矩阵 M PrintSMatrix(M) 初始条件:稀疏矩阵M已经存在 操作结果:打印矩阵M DestroySMatrix(&M) 初始条件:稀疏矩阵M已经存在 操作结果:销毁矩阵M CopySMatrix(M, &T) 初始条件:稀疏矩阵M已经存在 操作结果:复制矩阵M到T AddSMatrix(M, N, &Q) 初始条件:稀疏矩阵M、N已经存在 操作结果:求矩阵的和Q=M+N SubSMatrix(M, N, &Q) 初始条件:稀疏矩阵M、N已经存在 操作结果:求矩阵的差Q=M-N TransposeSMatrix(M, & T) 初始条件:稀疏矩阵M已经存在 操作结果:求矩阵M的转置T MultSMatrix(M, N, &Q) 初始条件:稀疏矩阵M已经存在

数据结构稀疏矩阵基本运算实验报告

课程设计 课程:数据结构 题目:稀疏矩阵4 三元组单链表结构体(行数、列数、头) 矩阵运算重载运算符优 班级: 姓名: 学号: 设计时间:2010年1月17日——2010年5月XX日 成绩: 指导教师:楼建华

一、题目 二、概要设计 1.存储结构 typedef struct{ int row,col;//行,列 datatype v;//非0数值 }Node; typedef struct{ Node data[max];//稀疏矩阵 int m,n,t;//m 行,n 列,t 非0数个数 … … 2.基本操作 ⑴istream& operator >>(istream& input,Matrix *A)//输入 ⑵ostream& operator <<(ostream& output,Matrix *A){//输出 ⑶Matrix operator ~(Matrix a,Matrix b)//转置 ⑷Matrix operator +(Matrix a,Matrix b)//加法 ⑸Matrix operator -(Matrix a,Matrix b)//减法 ⑹Matrix operator *(Matrix a,Matrix b)//乘法 ⑺Matrix operator !(Matrix a,Matrix b)//求逆 三、详细设计 (1)存储要点 position[col]=position[col-1]+num[col-1]; 三元组表(row ,col ,v) 稀疏矩阵((行数m ,列数n ,非零元素个数t ),三元组,...,三元组) 1 2 3 4 max-1

数据结构实验4-2

实验2稀疏矩阵的表示和转置 实验人:学号:时间:2019.4.8 一、实验目的 1.掌握稀疏矩阵的三元组顺序表存储结构 2.掌握稀疏矩阵的转置算法。 二、实验内容 采用三元组表存储表示,求稀疏矩阵M的转置矩阵T。(算法5.1) 三、实验步骤: 1.构建稀疏矩阵M。 2.求稀疏矩阵M的转置矩阵T。 3.输出稀疏矩阵M和稀疏矩阵T。 四、算法说明 1.首先应输入矩阵的行数、列数和非零个数。 2.其次输入你所构建的稀疏矩阵,采用三元组顺序表存储表示,并判别给出的两个矩 阵的行、列数进行稀疏矩阵的转置时要做到,将每个三元组的i,j相互调换;并且重排三元组之间的次序便可实现矩阵的转置。 3.主函数设置循环和选择语句进行运算循环和选择,进行稀疏矩阵的转置。 五、测试结果

六、分析与探讨 这次实验是稀疏矩阵的表示和转置编写的程序题,但是有关稀疏矩阵的写法在我平时上课时我就感觉有点难消化,以及对于矩阵的相关知识和三元组表的相关知识方面已经有些遗忘了。所以在编写实验内容之前我把数据结构书上有关稀疏矩阵的内容反反复复又看了两遍,了解了三元组顺序表、行逻辑链接的顺序表以及十字表的方法。在这次程序编写中我用到了三元组顺序表的方法。首先,根据实验内容采用三元组表存储表示,求稀疏矩阵M的转置矩阵T所围绕的程序算法5.1进行编程以及调试;其次,根据课程设计的要求进行实验目的以及实验意义的分析;最后,根据实验步骤对主函数main 进行编写,将项目设计的算法思想,基本算法,主函数调用一一呈现出来。主函数中主要包含构建稀疏矩阵M,输出构建稀疏矩阵M以及转置矩阵T三个部分。在整个课程设计中总是在编写程序中发生一些很小的错误,比如对元素缺少定义、缺个分号以及大小写方面。在编写的时候总会很粗心,有时会很没耐性,但都被我一一克服了,同时还有认真仔细,尽量保证不出现错误,看到自己的代码错误少了,也会更有信心和动力。最后,编程时要注意要有条理,这样有利于修改错误,减少时间的花费。 七、附录:源代码 源代码列在附录中,要求程序风格清晰易理解,有充分的注释。有意义的注释行不 少于30%。 #include #define MAXSIZE 5 #define MAXMN 200 #define OK 1 typedef struct { int i,j; //该非零元的行下标和列下标 int e; }Triple; typedef struct { Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用 int mu,nu,tu; //矩阵的行数、列数和非零个数 }TSMatrix; //行逻辑连接的顺序表 int FastTransposeSMatrix(TSMatrix M,TSMatrix &T)

实现稀疏矩阵(采用三元组表示)的基本运算实验分析报告

实现稀疏矩阵(采用三元组表示)的基本运算实验报告

————————————————————————————————作者:————————————————————————————————日期: 2

实现稀疏矩阵(采用三元组表示)的基本运算实验报告 一实验题目: 实现稀疏矩阵(采用三元组表示)的基本运算二实验要求: (1)生成如下两个稀疏矩阵的三元组 a 和 b;(上机实验指导 P92 )(2)输出 a 转置矩阵的三元组; (3)输出a + b 的三元组; (4)输出 a * b 的三元组; 三实验内容: 3.1 稀疏矩阵的抽象数据类型: ADT SparseMatrix { 数据对象:D={aij| i = 1,2,3,….,m; j =1,2,3,……,n; ai,j∈ElemSet,m和n分别称为矩阵的行数和列数 } 数据关系 : R={ Row , Col } Row ={ | 1≤ i≤m , 1≤ j≤ n-1} Col ={| 1≤i≤m-1,1≤j≤n} 基本操作: CreateSMatrix(&M) 操作结果:创建稀疏矩阵M PrintSMatrix(M) 初始条件:稀疏矩阵M已经存在 操作结果:打印矩阵M DestroySMatrix(&M) 初始条件:稀疏矩阵M已经存在 操作结果:销毁矩阵M CopySMatrix(M, &T) 初始条件:稀疏矩阵M已经存在 操作结果:复制矩阵M到T AddSMatrix(M, N, &Q) 初始条件:稀疏矩阵M、N已经存在 操作结果:求矩阵的和Q=M+N SubSMatrix(M, N, &Q) 3

稀疏矩阵的运算(完美版)

专业课程设计I报告(2011 / 2012 学年第二学期) 题目稀疏矩阵的转换 专业软件工程 学生姓名张鹏宇 班级学号 09003018 指导教师张卫丰 指导单位计算机学院软件工程系 日期 2012年6月18号

指导教师成绩评定表

附件: 稀疏矩阵的转换 一、课题内容和要求 1.问题描述 设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。 2.需求分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 二、设计思路分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 三、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主

控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。 2.存储结构设计 本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。 3.系统功能设计 本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType 实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。 (1)稀疏矩阵的加法: 此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。 (2)稀疏矩阵的乘法: 此功能由函数void Xiangcheng( )实现。当用户选择该功能,系统提示输

数据结构实验报告(实验五 稀疏矩阵运算器)

韶关学院 学生实验报告册 实验课程名称:数据结构与算法 实验项目名称:实验五数组及其应用 稀疏矩阵运算器 实验类型(打√):(基础、综合、设计√) 院系:信息工程学院计算机系专业:***** 姓名:*** 学号:***** 指导老师:陈正铭 韶关学院教务处编制

一、实验预习报告内容

二、实验原始(数据)记录 实验时间:2007 年 5 月30日(星期三第7,8 节)实验同组人:

三、实验报告内容 2007年 5 月30 日

注:1、如有个别实验的实验报告内容多,实验报告册页面不够写,或有识图,画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。 2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。

【源程序】 #include #include #include #define maxsize 100 #define maxrow 100 #define OK 1 #define ERROR -1 typedef struct{ int row; //行数 int col; //列数 int v; //非零元素值 }triplenode; typedef struct{ triplenode data[maxsize+1]; //非零元三元组 int rowtab[maxrow+1]; //各行第一个非零元的位置表 int mu,nu,tu; //矩阵的行数、列数和非零元个数}rtripletable; void creat(rtripletable &A) //创建稀疏矩阵 { int k=1,sum=1,loop,p,t; int num[maxrow+1]; cout<<"请输入矩阵的行数和列数:"<>A.mu; cout<<"列数:";cin>>A.nu; cout<<"非零元素个数:";cin>>A.tu; cout<<"请按行,列和值的形式输入该矩阵的非零元.并以全零为结束标记!"<>A.data[loop].row>>A.data[loop].col>>A.d ata[loop].v; //输入三元组的行数,列数和非零元素值 } for(p=1;p<=A.mu;p++) num[p]=0; //A三元组每一列的非零元素个数 for(t=1;t<=A.tu;t++) ++num[A.data[t].row]; //求A中每一列含非零元个数 A.rowtab[1]=1; //求第p列中第一个非零元在A.data中的序号for(t=2;t<=A.mu;t++) A.rowtab[t]=A.rowtab[t-1]+num[t-1]; return; } void print(rtripletable A) //输出稀疏矩阵 { int result[maxrow+1][maxrow+1]; //定义一个二维数组 int loop1,loop2; for(loop1=1;loop1<=A.mu;loop1++) for(loop2=1;loop2<=A.nu;loop2++) result[loop1][loop2]=0; //初始化为0 for(loop1=1;loop1<=A.tu;loop1++) result[A.data[loop1].row][A.data[loop1].col]=A.dat a[loop1].v; for(loop1=1;loop1<=A.mu;loop1++) { cout<<"|"; for(loop2=1;loop2<=A.nu;loop2++) cout<

稀疏矩阵的运算(完美版)

专业课程设计I报告( 2011 / 2012 学年第二学期) 题目稀疏矩阵的转换 专业软件工程 学生姓名张鹏宇 班级学号 09003018 指导教师张卫丰 指导单位计算机学院软件工程系 日期 2012年6月18号

指导教师成绩评定表

附件: 稀疏矩阵的转换 一、课题内容和要求 1.问题描述 设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。 2.需求分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 二、设计思路分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 三、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。

2.存储结构设计 本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。 3.系统功能设计 本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType 实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。 (1)稀疏矩阵的加法: 此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。 (2)稀疏矩阵的乘法: 此功能由函数void Xiangcheng( )实现。当用户选择该功能,系统提示输入要进行相乘的两个矩阵的详细信息。然后进行相乘,最后得到结果。 (3)稀疏矩阵的转置: 此功能由函数void Zhuanzhi( )实现。当用户选择该功能,系统提示用户初始

稀疏矩阵基本操作实验报告

稀疏矩阵基本操作实验报告 一、实验内容 稀疏矩阵的压缩储存结构,以及稀疏矩阵的三元组表表示方法下的转置、相加、相 乘等算法 二、实验目的 1. 熟悉数组、矩阵的定义和基本操作 2. 熟悉稀疏矩阵的储存方式和基本运算 3. 理解稀疏矩阵的三元组表类型定义,掌握稀疏矩阵的输入、输出和转置算法 三、实验原理 1. 使用三元组储存矩阵中的非零元素(三元组分别储存非零元素的行下标,列下标和 元素值)。除了三元组表本身,储存一个稀疏矩阵还需要额外的三个变量,分别储 存矩阵的非零元个数,矩阵的行数和矩阵的列数。 2. 稀疏矩阵的创建算法: 第一步:根据矩阵创建一个二维数组,表示原始矩阵 第二步:取出二维数组中的元素(从第一个元素开始取),判断取出元素是否为非零元素,如果为非零元素,把该非零元素的数值以及行下标和列下表储存到三元数 组表里,否则取出下一个元素,重复该步骤。 第三步:重复第二步,知道二维数组中所有的元素已经取出。 3. 稀疏矩阵倒置算法:

第一步:判断进行倒置的矩阵是否为空矩阵,如果是,则直接返回错误信息。 第二步:计算要倒置的矩阵每列非零元素的数量,存入到num 数组(其中num[i] 代表矩阵中第i 列非零元素的个数)。以及倒置后矩阵每行首非零元的位置,存入cpot 数组中(其中cpot 表示倒置后矩阵每行非零元的位置,对应表示原矩阵每列中第 一个非零元的位置)。 第三步:确定倒置后矩阵的行数和列数。 第四步:取出表示要导致矩阵中三元组表元素{e, I, j} (第一次取出第一个,依次取出下一个元素),从第二步cpot 数组中确定该元素倒置后存放的位置(cpot[j] ),把该元素的行下标和列下标倒置以后放入新表的指定位置中。cpot[j] 变量加一。 第五步:重复第四步,直到三元组表中所有的元素都完成倒置。 第六步:把完成倒置运算的三元组表输出。 4. 稀疏矩阵加法算法: 第一步:检查相加两个矩阵的行数和列数是否相同,如果相同,则进入第二步,否 则输出错误信息。 第二步:定义变量i 和j,用于控制三元组表的遍历。 第三步:比较变量矩阵M 中第i 个元素和矩阵N 中第j 个元素,如果两个元素是同一行元素,如果不是则进入第四步,如果是,再继续比较两个元素是否为同一列元 素,如果是,把两个元素值相加,放到三元组表中;否则把列下表小的元素依次放 到三元组表中。进入第五步 第四步:如果矩阵M 中第i 个元素的行下标大于矩阵N 中第j 个元素的行下标,则把矩阵N 中第j 个元素所在行的所有非零元素添加到三元组表中;如果矩阵M 中第

字符串、稀疏矩阵实验(实验四)

实验四字符串、稀疏矩阵实验 一.实验目的及要求 (1)熟悉字符串类型的实现方法,并完成串的一些基本操作; (2)掌握稀疏矩阵的三元组顺序表存储表示,并实现矩阵的转置运算。 二.实验内容: (1)编程实现两个串S1和S2的比较。(要求自己设计串的存储结构,并编写比较函数,不要调用系统提供的函数) (2)编程实现稀疏矩阵的三元组顺序表示方法及基本操作的实现(建立、输出、转置等)。 (3)编程实现稀疏矩阵的十字链表存储表示及基本操作的实现(建立、输出等)。三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现两个串S1和S2的比较。(要求自己设计串的存储结构,并编写比较函数,不要调用系统提供的函数) 程序代码: 头文件 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define dayu 1 #define xiaoyu -2 #define dengyu 0 typedef int Status; typedef struct{ char *ch; int length; }HString; Status StrAssign(HString &S); Status StrCompare(HString S,HString T); 主函数: #include"stdio.h" #include"stdlib.h" #include"1.h" int main() { char c;//用于读取换行符,便于StrAssign函数中gets读取串的操作 HString S,T;

printf("请确定第一个字符串的长度\n"); scanf("%d",&S.length); c=getchar(); StrAssign(S);//初始化S的ch部分 printf("请确定第二个字符串的长度\n"); scanf("%d",&T.length); c=getchar(); StrAssign(T);//初始化T的ch部分 printf("两字符串的比较结果为:\n"); int a;//承载比较结果 a=StrCompare(S,T);//字符串比较函数 if(a==-2) { printf("第一个字符串小于第二个字符串\n"); } else if(a==0) { printf("第一个字符串等于第二个字符串\n"); } else if(a==1) { printf("第一个字符串大于第二个字符串\n"); } else { printf("比较程序出错\n"); return ERROR; } return OK; } 功能函数: #include"stdio.h" #include"stdlib.h" #include"1.h" //初设S,T Status StrAssign(HString &S) { S.ch=(char *)malloc(sizeof(char)*(S.length+1)); if(!S.ch) exit(OVERFLOW); printf("请输入相应长度的字符串\n"); gets(S.ch);

实验四 稀疏矩阵及其他特殊数组具体操作

实验四稀疏矩阵及其他特殊数组操作 一、实验目的 1.掌握生成多维数组的方法及其标识 2.掌握稀疏矩阵的创建及运算 3.使用元胞数组和结构数组 二、实验内容 1.多维数组 生成多维数组可以直接输入元素赋值生成,也可以由低维数组或由函数生成。 >>a=1:9 >>b=reshape(a,3,3) >>c=cat(3,b,b) >>c(18)=[] %删除第18个元素 查看三维数组c的元素存放顺序,可以看出三维数组是把第3维视做1页,先存放第1页的元素,在1页中先存放第1列的元素,再存放第2列的元素。练习: 1>通过“全下标”元素赋值方式创建一个3行2列3页的三维数组。 2>由函数ones,zeros,rand和randn直接创建2行3列2页的三维数组。 3>已知三维数组A。 A(:,:,1) = 6 5 3 2 4 4 2 5 A(:,:,2) = 3 2 3 6 4 5 6 4 (1)将三维数组A中第13个元素的重新赋值为1。用单下标及全下标两种方式赋值。A(13)=1 A(1,3,2)=1 (2)将三维数组A中第2行第4列所有页的元素重新赋值为9。

A(2,4,:)=9 (3) 求数组A 各维的大小以及返回数组A 行数或列数的最大值。 [x,y,z]=size(A) length(A) (4) 将该数组A 中第10个元素删除,观察数组A 的变化。 A(10)=[] 4> 创建三维数组B ,第一页为??????8764,第二页为??????0153,第三页为?? ????3291。重排生成数组C 为2行,3列,2页。 B(2,2,1)=[4 6;7 8] B(2,2,2)=[3 5;1 0] B(2,2,3)=[1 9;2 3] C=reshape(B,2,3,2) 2、稀疏矩阵 (1) 创建稀疏矩阵 >>s=sparse([1 2 2 3 3 4],[1 1 2 2 3 3],[1 2 3 4 5 6]) (2) 将稀疏矩阵与全元素矩阵转换 >>f=full(s) >>k=f+s %稀疏矩阵与全元素矩阵的运算,注意结果的显示方式。 >>h=f.*s %稀疏矩阵与全元素矩阵的运算,注意结果的显示方式。 >>whos %查看各变量 (3) 用图形观看稀疏矩阵的非零元素分布情况。 >>nnz(s) %返回非零元素个数 >>spy(s) (4) 根据表示稀疏矩阵的矩阵A(A 为具有稀疏特征的带状矩阵),产生一个稀疏 存储方式矩阵C 。

稀疏矩阵的运算

数据结构课程设计稀疏矩阵的运算 学生姓名: 学号: 指导教师: 完成日期:

目录: 1、分析问题和确定解决方案 (3) 1.1问题描述 (3) 1.2 输入的形式和输入值的范围 (3) 1.3 输出的形式 (3) 1.4 程序所能达到的功能 (3) 1.5 测试数据 (3) 1.6 确定解决方案 (4) 1.7所有抽象数据类型的定义 (4) 2、详细设计 (5) 2.1稀疏矩阵加法运算思路 (5) 2.2稀疏矩阵减法运算思路 (7) 2.3稀疏矩阵转置运算思路 (9) 2.4创建稀疏矩阵 (11) 3、系统调试与测试 (12) 3.1程序的菜单界面 (12) 3.2 实现加法运算 (12) 3.3 实现减法运算 (13) 3.4实现转置运算 (14) 4、结果分析 (15) 4.1、算法的时空分析 (15) 4.2、经验和体会 (15) 5、参考文献 (15)

1、分析问题和确定解决方案 1.1问题描述 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计 算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。用三元组实现稀疏矩阵的相加、相减,转置; 1.2输入的形式和输入值的范围 以三元组的形式输入,首先应输入矩阵的行数和列数,并判别给出的两个 矩阵的行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20; 例如:输入的三元组为:((1,1,10),(2,3,9),(3,1,-1))其对应的稀疏矩阵为: ???? ??????-0019000010 1.3 输出的形式 运算结果的矩阵以通常的阵列形式输出; 1.4程序所能达到的功能 该程序可以实现以三元组形式输入两个矩阵,求出两个矩阵的和、差、转置; 并可根据输入的矩阵的行列数不同判别是否可以进行相加、减、转置,并重新输 入正确的矩阵; 1.5测试数据 测试的数据及其结果如下: 矩阵M 矩阵N 矩阵Q 加法: ???? ??????-0019000010 + ????? ?????--301100000 = ????? ?????-3008000010 减法: ???? ? ?????-0190010 - ???? ? ?????--311000 = ???? ??????-32100010 转置:

稀疏矩阵的存储及运算

稀疏矩阵的存储及运算 存储 什么是稀疏矩阵?人们无法给出确切的定义,它只是一个凭人们的直觉来了解的概念。假若在m*n的矩阵中,非零元个数num<

实验六、稀疏矩阵的建立与转置(答案)

实验六、稀疏矩阵的建立与转置 一、实验目的: 1、了解稀疏矩阵的三元组存储形式。 2、熟悉掌握三元表存储矩阵的转置算法。 二、实验内容: 矩阵是很多的科学与工程计算中研究的数学对象。在此,我们感兴趣的是,从数学结构这门学科着眼,如何存储矩阵的元从而使矩阵的各种运算有效的进行。 本来,用二维数组存储矩阵,在逻辑上意义是很明确的,也很容易理解,操作也很容易和方便。但是在数值分析中经常出现一些阶数很高的矩阵,同时,在矩阵中又有很多值相同或者都为零的元素,可以对这种矩阵进行压缩存储:对多个值相同的元素只分配一个存储空间;对零元素不分配空间。 稀疏矩阵的定义是一个模糊的定义:即非零元个数较零元个数较少的矩阵。例如下图所示的矩阵: 012 9 0 0 0 0 00 0 0 0 0 0 30 0 0 0 14 0 00 24 0 0 0 0 018 0 0 0 0 0 150 0 -7 0 0 0 为一个稀疏矩阵。 为了实现稀疏矩阵的这种存储结构,引入三元组这种数据结构。三元组的线性表顺序存储形式如下图: A,B:ARRAY[1。。。MAXNUM]OF TUPLE3TP

三、实验步骤 看懂书上的算法,参考书上的程序编写程序上机调试、输入数据、检验结果。 四、程序流程图 四、参考程序 struct tuple3tp /*稀疏矩阵的建立和转置*/ { int i,j;

int v; }; struct sparmattp{ int mu,nu,tu; struct tuple3tp data[31]; }; struct sparmattp a,b; void crt_sparmat() { int i; printf("输入稀疏矩阵行值,列值,最大非零元个数:"); scanf("%d%d%d",&a.mu,&a.nu,&a.tu); for(i=1;i<=a.tu;i++){ printf("输入行坐标,列坐标,非零元"); scanf("%d%d%d",&a.data[i].i,&a.data[i].j,&a.data[i].v); } } void trans_sparmat() { int col,p,q; b.mu=a.nu; b.nu=a.mu; b.tu=a.tu; if(b.tu!=0){ q=1; for(col=1;col<=a.nu;col++) for(p=1;p<=a.tu;p++) if (a.data[p].j==col) { b.data[q].i=a.data[p].j; b.data[q].j=a.data[p].i;

数据结构_实验四_字符串、稀疏矩阵实验

实验编号:4四川师大《数据结构》实验报告2016年11月12日 实验四字符串、稀疏矩阵实验_ 一.实验目的及要求 (1)熟悉字符串类型的实现方法,并完成串的一些基本操作; (2)掌握稀疏矩阵的三元组顺序表存储表示,并实现矩阵的转置运算。 二.实验内容 (1)编程实现两个串S1和S2的比较。(要求自己设计串的存储结构,并编写比较函数,不要调用系统提供的函数) (2)编程实现稀疏矩阵的三元组顺序表示方法及基本操作的实现(建立、输出、转置等)。 (3)编程实现稀疏矩阵的十字链表存储表示及基本操作的实现(建立、输出等)。 注:(2)必做,(1)(3)选做。 三.主要仪器设备及软件 (1)PC机 (2)Dev C++ ,Visual C++, VS2010等 四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现两个串S1和S2的比较。(要求自己设计串的存储结构,并编写比较函数,不要调用系统提供的函数) 代码部分: //Main.cpp: #include"SString.h" int main() { SString T1,T2; int i,n; T1[0]=T2[0]=0; cout<<"input T1 size:"; cin>>n; T1[0]=n;

cout<<"input T1 data:"; for(i=1;i<=n;i++) { cin>>T1[i]; } cout<<"input T2 size:"; cin>>n; T2[0]=n; cout<<"input T2 data:"; for(i=1;i<=n;i++) { cin>>T2[i]; } cout<<"T1"<T2[0]) { return '>'; } else if(T1[0]

实验报告稀疏矩阵加法

北京服装学院商学院 上机实验报告 实验名称:稀疏矩阵加法实验 学生姓名:璐璐 班级学号: 2014130410177 指导教师:冯老师 实验日期: 2014 年11 月 23 日

一、实验名称 稀疏矩阵加法实验 二、实验目的 (1)掌握稀疏矩阵的基本操作算法 (2)灵活运用稀疏矩阵的基本算法设计算法解决具体问题的方法三、实验内容 (1)设计解决稀疏矩阵加法的算法 (2)根据算法编写程序实现算法,调试程序 (3)编写实验报告 四、实验环境 硬件:学生机房 软件:TC2.0 五、实验过程和结果 1.算法: 建立矩阵,输入行序为主序,不能随意输入 输入第一行元素 输入每一个三元组 比较矩阵大小 大小一致大小不一致

矩阵相加不能相加,输出"两个矩阵不一样,不能相加" 输出矩阵 2.程序: (1)矩阵的建立 linklist bulid(linklist list) //建立矩阵,输入行序为主序,不能随意输入 { int n,m,i,t; int row,col,val; linklist p,r; r=list;p=list; printf("请输入第一行元素:\n"); scanf("%d%d%d",&n,&m,&i); //n是行数,m是列数,i是非0元个数 list=(linklist)malloc(sizeof(node)); //建立链表第一个元素 list->row=n; list->col=m; list->value=i; list->link=NULL; p=list; for(t=0;t

稀疏矩阵的压缩存储及运算

稀疏矩阵的压缩存储及运算 一、实验内容 实现稀疏矩阵的压缩存储方法以及在特定存储方法下的基本运算 二、实验母的 掌握数组的应用,包括稀疏矩阵、特殊矩阵的压缩存储方法。矩阵的基本运算的实现,包括矩阵相加、转置、乘法等。 三、问题描述 1)用行逻辑链接顺序表和十字链表分别实现稀疏矩阵的压缩存储 2)编程实现矩阵的转置运算和乘法运算(运用行逻辑链接顺序表或十字链表作为存储结构) 四、问题的实现 稀疏矩阵的抽象数据类型定义: ADT SpareseMatrix{ 数据对象:;,,2,1;,,2,1|{n j m i D a ij === },,列数分别称为矩阵的行数和和n m ElemSet a j i ∈ 数据关系: :}1,11|,{} 11,1|,{} ,{,1,1,,n j m i Col n j m i Row Col Row R a a a a j i j i j i j i ≤≤-≤≤><=-≤≤≤≤><==++ 基本操作: CreateSMatrix(&M); 操作结果:创建稀疏矩阵M 。 PrintSMatrix(M); 初始条件:稀疏矩阵M 存在。 操作结果:输出稀疏矩阵M 。 AddSMatrix(M ,N ,&Q); 初始条件:稀疏矩阵M 和N 的行数和列数对应相等。 操作结果:求稀疏矩阵的和Q=M+N 。 MultSMatrix(M ,N ,&Q); 初始条件:稀疏矩阵M 的列数等于N 的行数。 操作结果:求稀疏矩阵乘积Q=M*N 。 TransposeSMatrix(M,&T); 初始条件:稀疏矩阵M 存在。 操作结果:求稀疏矩阵M 的转置矩阵T 。 }ADT SpareseMatrix 五、主要源程序代码 #include using namespace std; #define MAXSIZE 100;

MATLAB实验报告矩阵计算

实验名称 矩阵的计算 实验目的和要求: 1、矩阵的创建、引用和运算。 2、掌握MATLAB 向量矩阵数组的基本运算。 3、掌握数学运算函数的用法。 实验内容和步骤: 1. 创建一个三维矩阵A : 输入程序: A(:,:,1)=[1 2 3;2 3 1;3 2 1]; A(:,:,2)=[2 4 6;4 6 2;6 4 2]; 显示结果为: A(:,:,1)= 1 2 3 2 3 1 3 2 1 A(:,:,2)= 2 4 6 4 6 2 6 4 2 2.令A 为: A=?????? ? ??1003214321 然后执行下列命令: average=mean(A),med=median(A),dev=std(A) 返回得到: average= 2.5000 26.5000 med= 2.5000 2.5000 dev= 2.5 49.0068 3.假设定义如下变量; x= ????? ??111 y=???? ? ??221 z=????? ??-110 (a)通过下列命令来求得方差:

输入:varx=cov(x),vary=cov(y),vary=cov(z) 得到:varx= vary= 0.3333 varz= 1 (b)协方差为: 输入:Cvxy=cov(x,y),Cvxz=cov(x,z),Cvyz=cov(y,z) 运行得到: Cvxy= 0 0 0 0.3333 Cvxz= 0 0 0 1 Cvyz= 0.3333 0 0 1.0000 4.在M AT L A B 中求解下列方程组: ???=+=+9 47322121x x x x 先找出系数矩阵和右边的b : A=???? ??1432 B=???? ??97 解向量是X=(1x ,2x ),可以用A x =/B 来求得: X= 2 1 5、用矩阵求下列方程组的解x=[x1,x2,x3],A=????? ??---318752436 B=???? ? ??-743 执行下列命令: A=[6 3 4;-2 5 7;8 -1 -3]; B=[3;-4;7]; x=[A\B] 运行结果: x = 0.7400 -0.0000

相关主题
文本预览
相关文档 最新文档