实验四 数组的应用实验报告
- 格式:doc
- 大小:157.00 KB
- 文档页数:7
一、实验背景本次实验旨在通过学习数组的相关知识,掌握数组的定义、初始化、赋值、引用等方法,以及数组的操作和应用。
通过本次实验,我对数组有了更深入的理解,同时也对编程思维和算法设计有了更全面的提升。
二、实验过程1. 实验一:一维数组的定义与初始化实验过程中,我首先学习了如何定义一维数组,以及如何对数组进行初始化。
通过实验,我掌握了以下知识:(1)一维数组的定义格式:类型符数组名[常量表达式];(2)一维数组的初始化方法:在定义数组时,可以在方括号内指定数组的长度,并为数组元素赋初值。
2. 实验二:二维数组的定义与初始化在实验二,我学习了二维数组的定义与初始化。
通过实验,我掌握了以下知识:(1)二维数组的定义格式:类型符数组名[常量表达式1][常量表达式2];(2)二维数组的初始化方法:可以在定义数组时,指定数组的行数和列数,并为数组元素赋初值。
3. 实验三:数组元素的引用与赋值在实验三,我学习了如何引用数组元素,以及如何为元素赋值。
通过实验,我掌握了以下知识:(1)数组元素的引用方法:数组名[下标];(2)数组元素的赋值方法:使用赋值运算符“=”。
4. 实验四:数组的操作与应用在实验四,我学习了数组的操作与应用,包括冒泡排序、选择排序等。
通过实验,我掌握了以下知识:(1)冒泡排序算法:通过比较相邻元素的大小,将较大的元素交换到后面,直到整个数组有序。
(2)选择排序算法:通过比较相邻元素的大小,选择最小(或最大)的元素放到数组的起始位置,然后继续对剩余的元素进行排序。
三、实验反思1. 数组的定义与初始化在实验过程中,我深刻体会到了数组在编程中的重要性。
数组作为一种数据结构,可以有效地存储和操作一组具有相同数据类型的元素。
通过对数组的定义与初始化,我学会了如何创建一个符合实际需求的数组,并为数组元素赋初值。
2. 数组元素的引用与赋值在实验过程中,我学会了如何引用数组元素,以及如何为元素赋值。
这使我更加熟练地掌握了数组的使用方法,为后续的编程实践打下了基础。
php实验报告总结与体会php实验报告总结与体会1. 引言在经过一学期的学习和实践,我有幸进行了一系列的php实验,通过编写代码和实践项目,掌握了php语言的基本语法和特性。
在这篇文章中,我将对我进行的实验进行总结和回顾,分享我对php的个人观点和理解。
2. 实验一:入门实验实验一是我对php语言的第一次接触和学习实践。
通过编写简单的“Hello World”程序,我了解了php的基本语法和语义。
我发现php是一种简单易学的语言,语法规则清晰,代码结构简洁。
通过实验一,我对php的基本语法有了初步的了解,为后续的学习奠定了基础。
3. 实验二:变量与数据类型实验二主要围绕php的变量和数据类型展开。
我学习了php的基本数据类型,包括整数、浮点数、字符串、布尔值等,并掌握了变量的定义和使用。
通过实践运用,我发现php的变量赋值和使用非常灵活,可以方便地进行运算和操作。
php的数据类型转换也是一个重要的概念,我学到了如何将一个数据类型转换为另一个数据类型,为写出高质量的php代码提供了便利。
4. 实验三:条件语句与循环控制实验三是我对php条件语句和循环控制的实践。
通过掌握if语句、switch语句和for循环、while循环等,我学习了如何根据条件执行不同的代码块和如何针对一定条件进行循环操作。
这些控制流程的语法和用法都非常简单明了,使我能够通过编写php代码实现各种复杂的逻辑操作。
5. 实验四:函数的定义与使用实验四是对php函数的实践。
通过学习函数的定义和使用,我了解了php函数的作用和用法。
我发现函数是一个非常重要的概念,可以帮助我们将一段代码块进行封装和复用。
通过函数,我们可以提高代码的可读性和可维护性,同时也可以减少代码的重复性。
在实验四中,我还学习了php函数的参数传递和返回值的使用,更加深入地理解了函数的灵活性和便利性。
6. 实验五:数组与文件操作实验五是对php数组和文件操作的实践。
数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。
学习基本的查找和排序技术。
让我们在实际上机中具有编制相当规模的程序的能力。
养成一种良好的程序设计风格。
实验教材:数据结构题集(C语言版)清华大学出版社2007年实验项目:实验一、栈和循环队列㈠、实验内容:①栈掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。
本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。
②循环队列掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。
本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。
㈡、实验代码①栈程序代码:#include <stdio.h>#include <malloc.h>#define Stack_Size 6#define ERROR 0#define OK 1typedef int SElemType;typedef struct SNode{SElemType data;struct SNode *next;}SNode,*LinkStack;int CreatTwo(LinkStack &head,int n){int i;SNode *p;head=(LinkStack)malloc(sizeof(SNode));head->next=NULL;printf("请输入数据(数字):\n");for(i=n;i>0;--i){p=(SNode *)malloc(sizeof(SNode));scanf("%d",&p->data);p->next=head->next;head->next=p;}return 1;}int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}int Push(LinkStack &top,SElemType e){SNode *q;q=(LinkStack)malloc(sizeof(SNode));if(!q){printf("溢出!\n");return(ERROR);}q->data=e;q->next=top->next;top->next=q;return(OK);}int Pop(LinkStack &top,SElemType &e){SNode *q;if(!top->next){printf("error!\n");return(ERROR);}e=top->next->data;q=top->next;top->next=q->next;free(q);return(OK);}void main(){ int e;LinkStack top;printf("1.初始化一个栈;\n2.PUSH;\n3.POP;\n4.显示所有栈里的元素;\n5.结束;\n");while(1){switch(menu_select()){case 1:if(CreatTwo(top,Stack_Size))printf("Success!\n");break; case 2:printf("Push:\n");scanf("%d",&e);if(Push(top,e))printf("Success!\n");break;case 3:if(Pop(top,e))printf("Success!\n");printf("%d\n",e);break;case 4:LinkStack p;printf("所有栈里的元素:\n");p=top;while(p->next){p=p->next;printf("%7d",p->data);}printf("\n");break;case 5:return;}}}运行结果:②循环队列程序代码:#include<stdlib.h>#include<stdio.h>#define OVERFLOW -1#define OK 1#define ERROR 0#define MAXSIZE 100typedef struct{int *elem;//队列存储空间int front;int rear;}SqQueue;//判断选择是否正确int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}//参数(传出)SqQueue &Q,循环队列(空)int InitQueue(SqQueue &Q){Q.elem=(int *)malloc(MAXSIZE*sizeof(int));if(!Q.elem)exit(OVERFLOW);Q.front=Q.rear=-1;for(int i=0;i<MAXSIZE;i++)Q.elem[i]=-1;return OK;}//返回Q的元素个数int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}//显示队列的元素void Display(SqQueue Q){for(int i=0;i<=QueueLength(Q);i++)if(Q.elem[i]!=-1)printf("%d ",Q.elem[i]);printf("\n");}//入队int EnQueue(SqQueue &Q,int e){Q.rear=(Q.rear+1)%MAXSIZE;if(Q.rear==Q.front)return ERROR;Q.elem[Q.rear]=e;return OK;}//出队int DeQueue(SqQueue &Q,int &e){if(Q.front==Q.rear)return ERROR;e=Q.elem[Q.front+1];Q.elem[Q.front+1]=-1;Q.front=(Q.front+1)%MAXSIZE;return OK;}void main(){SqQueue Q;InitQueue(Q);int elem,e;printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);printf("1.初始化一个队列;\n2.入队;\n3.出队;\n4.显示队列的所有元素;\n5.队列长度:\n6.结束;\n");while(1){switch(menu_select()){case 1:printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);fflush(stdin);break;case 2:scanf("%d",&elem);EnQueue(Q,elem);printf("队列为:\n");Display(Q);fflush(stdin);break;case 3:DeQueue(Q,elem);printf("队列为:\n");Display(Q);break;case 4:printf("\n队列的所有元素:\n");Display(Q);break;case 5:printf("%d\n",QueueLength(Q));break;case 6:return;}}}运行结果:实验二、数组㈠、实验内容:数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。
实验四搜索实验报告一、实验目的本次实验的主要目的是深入了解和掌握不同的搜索算法和技术,通过实际操作和分析,提高对搜索问题的解决能力,以及对搜索效率和效果的评估能力。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验中所需的数据集和相关库函数均从网络上获取和下载。
三、实验原理1、线性搜索线性搜索是一种最简单的搜索算法,它从数据的开头开始,依次比较每个元素,直到找到目标元素或者遍历完整个数据集合。
2、二分搜索二分搜索则是基于有序数组的一种搜索算法。
它每次将数组从中间分割,比较目标值与中间元素的大小,然后在可能包含目标值的那一半数组中继续进行搜索。
3、广度优先搜索广度优先搜索是一种图搜索算法。
它从起始节点开始,逐层地访问相邻节点,先访问距离起始节点近的节点,再访问距离远的节点。
4、深度优先搜索深度优先搜索也是一种图搜索算法,但它沿着一条路径尽可能深地访问节点,直到无法继续,然后回溯并尝试其他路径。
四、实验内容及步骤1、线性搜索实验编写线性搜索函数,接受一个列表和目标值作为参数。
生成一个包含随机数的列表。
调用线性搜索函数,查找特定的目标值,并记录搜索所用的时间。
2、二分搜索实验先对列表进行排序。
编写二分搜索函数。
同样生成随机数列表,查找目标值并记录时间。
3、广度优先搜索实验构建一个简单的图结构。
编写广度优先搜索函数。
设定起始节点和目标节点,进行搜索并记录时间。
与广度优先搜索类似,构建图结构。
编写深度优先搜索函数。
进行搜索并记录时间。
五、实验结果与分析1、线性搜索结果在不同规模的列表中,线性搜索的时间消耗随着列表长度的增加而线性增加。
对于较小规模的列表,线性搜索的效率尚可,但对于大规模列表,其搜索时间明显较长。
2、二分搜索结果二分搜索在有序列表中的搜索效率极高,其时间消耗增长速度远低于线性搜索。
即使对于大规模的有序列表,二分搜索也能在较短的时间内找到目标值。
3、广度优先搜索结果广度优先搜索能够有效地遍历图结构,并找到最短路径(如果存在)。
一、实验目的1. 理解数组的基本概念和应用场景。
2. 掌握数组的创建、初始化和访问方法。
3. 学会使用数组实现简单的菜单制作功能。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 开发工具:PyCharm三、实验内容本次实验通过使用数组实现一个简单的菜单制作功能,主要分为以下几个步骤:1. 创建数组存储菜单项2. 打印菜单3. 获取用户输入并处理4. 根据用户选择执行相应操作四、实验步骤1. 创建数组存储菜单项```pythonmenu = ["1. 添加商品", "2. 查看商品", "3. 修改商品", "4. 删除商品", "5. 退出"]```2. 打印菜单```pythonprint("欢迎使用商品管理系统!")for i in range(len(menu)):print(f"{i + 1}. {menu[i]}")```3. 获取用户输入并处理```pythonwhile True:choice = input("请选择操作(1-5):")if choice == '5':print("感谢使用,再见!")breakelif choice in ['1', '2', '3', '4']:print(f"您选择了:{menu[int(choice) - 1]}") # 这里可以添加相应操作的具体实现else:print("输入有误,请重新输入!")```4. 根据用户选择执行相应操作```pythonif choice == '1':# 添加商品passelif choice == '2':# 查看商品passelif choice == '3':# 修改商品passelif choice == '4':# 删除商品pass```五、实验结果1. 运行程序后,首先显示欢迎信息,然后打印出菜单。
c语言课程实验报告C语言课程实验报告引言:C语言作为一门广泛应用于计算机科学领域的编程语言,具有简洁高效的特点,被广泛用于系统软件、嵌入式设备等领域。
在C语言课程中,我们进行了一系列的实验,旨在通过实践提升我们的编程能力和理解C语言的各种特性。
本报告将对我们进行的实验进行总结和分析。
实验一:基本语法和数据类型在第一次实验中,我们学习了C语言的基本语法和数据类型。
通过编写简单的程序,我们熟悉了C语言的变量定义、运算符、控制语句等基本概念。
同时,我们也了解了C语言中常用的数据类型,如整型、浮点型、字符型等,并学会了如何进行类型转换和输入输出操作。
实验二:数组和字符串处理在第二次实验中,我们深入学习了C语言中的数组和字符串处理。
通过编写程序,我们掌握了数组的定义、初始化和访问方法,了解了一维数组和多维数组的特点。
同时,我们也学会了使用C语言提供的字符串处理函数,如strlen、strcpy、strcat等,实现字符串的复制、连接和比较等操作。
实验三:函数和指针第三次实验是函数和指针的学习。
我们学习了如何定义和调用函数,了解了函数的参数传递和返回值的相关知识。
同时,我们也深入研究了指针的概念和用法,掌握了指针的声明、初始化和使用方法。
通过实验,我们发现指针在C语言中具有重要的作用,可以提高程序的效率和灵活性。
实验四:文件操作和结构体在第四次实验中,我们学习了C语言中的文件操作和结构体。
通过使用文件读写函数,我们能够实现对文件的读取和写入操作,实现数据的永久存储。
同时,我们也学会了定义和使用结构体,实现对复杂数据的封装和处理。
这些知识对于实际项目的开发非常重要。
实验五:动态内存分配和链表在第五次实验中,我们学习了动态内存分配和链表的使用。
通过使用malloc和free函数,我们能够在程序运行时动态分配和释放内存,提高了内存的利用效率。
同时,我们也学会了使用链表数据结构,实现对数据的动态存储和管理。
链表在数据结构和算法中有着广泛的应用,对于解决实际问题非常有帮助。
java实验报告--数组Java实验报告 - 数组引言:Java是一种广泛应用于软件开发的编程语言,其强大的数组功能使得它成为处理大量数据的理想选择。
本实验报告将探讨Java中数组的基本概念、使用方法以及一些常见的应用场景。
一、数组的定义与初始化在Java中,数组是一种用于存储多个相同类型元素的数据结构。
数组可以存储基本数据类型(如整数、浮点数等)或者对象。
声明一个数组需要指定元素的类型和数组的名称,然后使用关键字"new"来创建数组对象。
二、数组的访问与操作通过索引(index)可以访问数组中的元素,索引从0开始计数。
例如,对于一个长度为10的整数数组,可以使用arr[0]来访问第一个元素,arr[1]来访问第二个元素,以此类推。
数组的长度可以通过arr.length来获取。
三、数组的遍历与排序遍历数组是指逐个访问数组中的元素。
常用的遍历方法有使用for循环和foreach循环。
对于需要对数组进行排序的情况,可以使用Java提供的排序算法(如快速排序、冒泡排序等)或者使用Arrays类中的sort方法。
四、多维数组除了一维数组,Java还支持多维数组。
多维数组可以看作是数组的数组,可以用于存储表格、矩阵等结构化数据。
在声明多维数组时,需要指定每一维的长度。
五、数组的应用场景1. 数据存储与处理:数组可以用于存储和处理大量数据,如学生成绩、员工工资等。
通过数组,可以方便地进行数据的查找、排序和统计等操作。
2. 图像处理:图像可以用二维数组表示,每个元素代表一个像素点的颜色值。
通过对数组的操作,可以实现图像的旋转、缩放等功能。
3. 算法实现:许多算法的实现都需要使用数组,如查找算法、排序算法等。
数组的高效访问和操作使得算法的实现更加简洁和高效。
六、实验案例:数组的查找与统计为了更好地理解数组的应用,我们设计了一个实验案例:数组的查找与统计。
假设有一个整数数组,我们需要找到其中的最大值、最小值、平均值以及某个特定元素的出现次数。
C语言程序设计实验报告一、引言C语言程序设计是计算机科学与技术专业中的一门基础课程。
通过实验学习,我深入了解了C语言的基本语法和程序设计的思想,掌握了一定的编程能力。
本文将详细介绍我在C语言程序设计实验中所进行的实验项目、实验结果和实验心得。
二、实验项目1. 实验一:C语言程序设计基础在这个实验中,我编写了一个简单的C语言程序,实现了对用户输入的两个整数进行相加并输出结果的功能。
在程序设计中,我正确使用了C语言的基本语法,包括变量定义、输入输出函数的调用等。
2. 实验二:条件语句和循环结构这个实验要求我编写一个C语言程序,实现对用户输入的分数进行等级评定的功能。
根据用户输入的分数,程序将输出相应的等级,如优秀、良好、及格等。
为了实现这个功能,我灵活运用了条件语句和循环结构,使程序具有良好的交互性。
3. 实验三:数组和字符串在这个实验中,我学习了C语言中数组和字符串的使用方法,并编写了一个程序,实现了对一个整数数组的排序功能。
通过实验,我进一步掌握了数组的声明、初始化和遍历等操作,提高了我对C语言程序设计的理解。
4. 实验四:函数和指针实验四要求我编写一个C语言程序,实现对一个数组中的元素求和的功能。
在这个实验中,我了解了函数的定义和调用、指针的基本概念以及函数指针的使用。
通过编写程序,我加深了对函数和指针的理解,并提高了程序的运行效率。
三、实验结果通过以上实验项目的设计与实现,我得到了如下实验结果:1. 实验一的结果是可以正确进行数值相加并输出结果。
2. 实验二的结果是根据输入的分数得到相应的等级评定。
3. 实验三的结果是对输入的整数数组进行排序,并输出排序后的结果。
4. 实验四的结果是对数组中的元素进行求和,并输出求和结果。
四、实验心得通过整个实验过程,我深刻认识到了C语言程序设计的重要性和应用广泛性。
C语言不仅是其他高级编程语言的基础,也是培养程序设计思维和逻辑思维的重要工具。
通过实验,我不仅掌握了C语言的基础知识和编程技巧,还培养了自己解决问题和分析问题的能力。
深圳大学实验报告课程名称:计算机基础实验名称:电子表格处理学院:建筑与城市规划学院专业:建筑学报告人:XXX学号:2015XXXX班级:XXXXXX同组人:指导教师:李炎然实验时间:2015.11.16实验报告提交时间:2015.11.22教务处制一.实验目的1.掌握工作表和工作簿的基本操作。
2.掌握公式和函数的使用方法。
3.掌握数据清单的管理方法。
4.掌握数据分析工具和VBA编程方法。
二.实验步骤与结果5.2实验环境1.硬件环境:微机2.软件环境:Windows8中文版,WPS表格20165.3实验内容1.Excel的基本操作⑴Excel工作窗口的组成执行“开始”菜单的“所有程序”/“WPS Office2016”/“WPS表格”命令(如图5-1所示),图5-1“开始”菜单或双击桌面上的“WPS 表格”快捷图标。
点击按钮打开菜单后单击“新建”新建空白表格文件,同时在该工作簿中新建了一个名为“sheet1”的空工作表,该工作表就是默认的当前工作表,如图5-2和图5-3所示。
(2)单元格的操作图5-2新建空工作表图5-3WPS 表格2016工作窗口①选择单元格选择一个单元格,直接单击相应的单元格即可。
若选择一行或一列单元格,将鼠标移动到相应行或列对应的数字或字母处,单击即可。
若选择多行或多列单元格,将鼠标移动到相应行或列对应的数字或字母处,然后拖动到适当的位置松开即可。
②清除单元格选择要清除的单元格,按Delete或单击右键选择“清除内容”命令即可,如图5-4所示。
图5-4快捷菜单③修改单元格内容双击需要修改内容的单元格,然后输入新的内容,单击Enter即可。
④插入单元格首先在要插入单元格的地方选择单元格,选择单元格的数目和即将要插入的单元格。
然后在选择的区域右击,选择“插入”命令,从弹出的对话框中选择要插入的方式。
⑤删除单元格首先在要删除单元格的地方选择单元格,选择单元格的数目和即将要删除的单元格。
实验四数组的应用实验报告
班级姓名:
一、设计要求
实现稀疏矩阵的基本运算。
二、算法分析
1、算法:将一个稀疏矩阵对应存储到一个一维数组中,然后在进行矩阵的加减运算时依次扫描矩阵的行值和列值,并以行优先。
2、稀疏矩阵的存储:以一维数组顺序存放非零元素的行号、列号和数值,行号用-1表示结束标志。
三、代码分析
#include <stdio.h>
#define m 2 //定义矩阵行数为2,此处可修改并进行不同规模矩阵的调试
#define n 2 //定义矩阵列数为2,此处可修改并进行不同规模矩阵的调试
#define max 50
//转存稀疏矩阵的算法
void creatematrix(int a[m][n],int b[50])
{
int i,j,k=0;
for (i=0;i<m;i++) //m为矩阵行数
for (j=0;j<n;j++) //n为矩阵列数
if (a[i][j]!=0) //当元素为非零元素时
{
b[k]=i;k++; //存放元素的行号
b[k]=j;k++; //存放元素的列号
b[k]=a[i][j];k++; //存放元素的数值
}
b[k]=-1; //结束标志
}
//稀疏矩阵的加法
void matrixadd(int a[max],int b[max],int c[max])
{
int i=0,j=0,k=0;
while (a[i]!=(-1)&&b[j]!=(-1)) //结束标志未出现时进入循环
{if (a[i]==b[j]) //当矩阵A中与矩阵B中两元素行号相等时{if (a[i+1]==b[j+1]) //判断两元素列号是否相等
{c[k]=a[i];
//矩阵相加后,行号依然为原矩阵A、B中元素的行号
c[k+1]=a[i+1];
//列号依然为原矩阵A、B中元素的行号
c[k+2]=a[i+2]+b[j+2];
//相加后元素值为矩阵A、B中元素值相加
k=k+3;
//依次储存存完行号、列号、数值需三个数组元素空间
//储存3个值后进入下一循环
i=i+3; //同上
j=j+3; //同上
}
else if (a[i+1]<b[j+1])
//当矩阵A元素列号小于矩阵B元素列号时
{c[k]=a[i];
//矩阵相加后,得到的矩阵行号为矩阵A元素的行号
c[k+1]=a[i+1]; //列号为矩阵A元素的列号
c[k+2]=a[i+2]; //相加后元素为矩阵A中的元素值
k=k+3; //储存后循环
i=i+3; //储存后循环
}
else //当矩阵A元素列号大于矩阵B元素列号时的情况
{c[k]=b[j];
c[k+1]=b[j+1];
c[k+2]=b[j+2];
k=k+3;
j=j+3;
}
}
else if (a[i]<b[j]) //当矩阵A元素行号小于矩阵B元素行号时情况
{c[k]=a[i];
c[k+1]=a[i+1];
c[k+2]=a[i+2];
k=k+3;
i=i+3;
}
else
{c[k]=b[j];
c[k+1]=b[j+1];
c[k+2]=b[j+2];
k=k+3;
j=j+3;
}
}
if (a[i]==-1)
while (b[j]!=-1)//当矩阵A行计算结束而矩阵B行计算未结束时情况
{c[k]=b[j];
c[k+1]=b[j+1];
c[k+2]=b[j+2];
k=k+3;
j=j+3;
}
if (b[j]==-1)
while (a[i]!=-1) //当矩阵B行计算结束而矩阵A行计算未结束时情况
{c[k]=a[i];
c[k+1]=a[i+1];
c[k+2]=a[i+2];
k=k+3;
i=i+3;
}
c[k]=-1; //计算结束
}
//主函数
void main()
{
int e[m][n],f[m][n],a[max],b[max],c[max];
int i,j,k;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
scanf("%d",&e[i][j]); //输入矩阵A并储存
for (i=0;i<m;i++)
for (j=0;j<n;j++)
scanf("%d",&f[i][j]); //输入矩阵B并储存
creatematrix(e,a); //将矩阵A转化为一维数组
creatematrix(f,b); //将矩阵B转化为一维数组
matrixadd(a,b,c); //将矩阵A、B相加
i=0;j=0;k=0;
printf("\n数组A的内容:\n");
while (a[i]!=-1)
{
printf("%5d,%5d,%5d\n",a[i],a[i+1],a[i+2]);
//依次打印矩阵A各元素的行号、列号、元素值
i=i+3;
}
printf("\n数组B的内容:\n");
while (b[j]!=-1)
{
printf("%5d,%5d,%5d\n",b[j],b[j+1],b[j+2]); //依次打印矩阵B各元素的行号、列号、元素值j=j+3;
}
printf("\n数组C的内容:\n");
while (c[k]!=-1)
{
printf("%5d,%5d,%5d\n",c[k],c[k+1],c[k+2]); //依次打印矩阵A+B各元素的行号、列号、元素值k=k+3;
}
}
四、程序调试
① 2*2矩阵的相加
② 3*3矩阵的相加
② 5*3矩阵的相加输入状态:
输出状态:
五、程序编写
以上已对稀疏矩阵的加法的代码进行分析,对于稀疏矩阵的基本运算也是基于这个理论进行的。
①稀疏矩阵的减法,只需修改在
while (a[i]!=(-1)&&b[j]!=(-1))
{if (a[i]==b[j])
{if (a[i+1]==b[j+1])}
条件下,将所在行c[k+2]=a[i+2]-b[j+2];中加号运算符改为减号即可。
修改后代码:
while (a[i]!=(-1)&&b[j]!=(-1))
{if (a[i]==b[j])
{if (a[i+1]==b[j+1])
{c[k]=a[i];
c[k+1]=a[i+1];
c[k+2]=a[i+2]-b[j+2];
k=k+3;
i=i+3;
j=j+3;
}
以下是对稀疏矩阵的减法程序进行的调试。
输入2*2矩阵进行相减:
②稀疏矩阵乘法,与加减法规律有所不同的是,乘法有一个限定条件,即当矩阵A的列数=矩阵B的行数时才可进行相乘。
矩阵A行各个元素与矩阵B列各个元素相乘后求和存放入C矩阵中。
矩阵C的行数=矩阵A的行数,矩阵C的列数=矩阵B的列数。