动态矩阵的产生与管理一综述.docx
《动态矩阵的产生与管理一综述.docx》由会员分享,可在线阅读,更多相关《动态矩阵的产生与管理一综述.docx(11页珍藏版)》请在冰豆网上搜索。
动态矩阵的产生与管理一综述
沈阳航空工业学院
课程设计
学号__200604111013__
班级__6411101__
姓名__崔献威__
指导教师__王晓岩_
2008年3月12日
沈阳航空工业学院
课程设计任务书
材料科学与工程学院金属材料工程专业6411101班学号200604111013
课程设计题目:
动态矩阵的产生与管理一
二、课程设计工作自2008年3月3日起至2008年3月7日止
三、课程设计内容:
用C语言编写软件完成以下任务:
利用链表的方法,产生任意行数和列数的矩阵,用于存储某个二维矩阵。
行数和列数由用户从键盘输入,从而体现动态性。
提示:
先用链表动态管理1行的数据,有了基础之后再设计管理二维的数据
四、课程设计要求:
程序质量:
●贯彻结构化的程序设计思想。
●用户界面友好,功能明确,操作方便。
●用户界面中的菜单至少应包括“输入矩阵的行数和列数”、“输入矩阵元素”、“打印矩阵”、“退出”4项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
●。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
________学生签名:
________
目录
一、需求分析1
二、程序流程图1
三、核心技术的实现说明及相应程序段4
四、个人总结10
五、参考文献10
六、源程序11
一、需求分析
动态矩阵的产生有几个步骤组成,1输入动态矩阵的维数2用链表建立一个动态矩阵3输出动态矩阵
1输入动态矩阵的维数输入矩阵的行数和列数
2产生动态矩阵首先在内存开辟一个空间并且输入一个元素,判断行数和列数是否满足要求,当满足要求继续开辟内存空间,并且与前一个元素相连,直到行数和列数不满足要求
3输出动态矩阵输出矩阵的元素
二、程序流程图
1、程序总体结构图
表1
2、产生矩阵流程图
表2
3输出矩阵
表3
三、核心技术的实现说明及相应程序段
#include
#include
#include
#defineNULL0
#defineLENsizeof(structnumber)
定义结构体,用来存储一个结点数据
structnumber
{
intnum;
structnumber*next;
};
introw;
inttier;
structnumber*head;
structnumber*creat()
{
inti,n,m;
structnumber*p1,*p2,*p3;
n=0;
for(i=0;i{
printf("\n第%d行",i+1);
n=0;
if(i==0)
在内存中开辟一段空间
p1=p2=(structnumber*)malloc(sizeof(LEN));
else
p1=(structnumber*)malloc(sizeof(LEN));
printf("\n请输入数据:
");
scanf("%d",&p1->num);
while(n{
n=n+1;
if(n==1&&i==0){head=NULL;head=p1;}
elsep2->next=p1;
p2=p1;
if(n!
=tier)
{
p1=(structnumber*)malloc(sizeof(LEN));
printf("\n请输入数据:
");
scanf("%d",&p1->num);
}
}
}
p2->next=NULL;
p3=head;
returnhead;
}
voidprint(structnumber*head)
{
intn;
structnumber*p;
p=head;
if(head!
=NULL)
{
do
{
printf("%d\t",p->num);
p=p->next;
n++;
if(n%tier==0)
printf("\n");
}while(p!
=NULL);
}
}
输入函数
voidinput_row_tier()
{
printf("\n请输入行数:
");
scanf("%d",&row);
printf("\n请输入列数:
");
scanf("%d",&tier);
}
voidmain()
{
intmm;
while
(1)
{
printf("\n1输入行和列");
printf("\n2录入");
printf("\n3输出");
printf("\n4退出\n\t");
scanf("%d",&mm);
switch(mm)
{
case1:
input_row_tier();break;
case2:
creat();break;
case3:
print(head);break;
case4:
exit(0);break;
}
}
}
四、个人总结
在C语言中,数组的长度是固定的。
但是在有时,不知道究竟使用多少元素的时候,就必须定义足够长的数组,这样不仅浪费内存资源,而且在程序编写过程中很容易出现一些不可意料的错误。
C语言中提供的内存管理程序可以帮助我们开辟固定长度的内存空间,这样我们根据内存空间、利用链表的相关知识可以创建动态数组。
在编制程序的过程中,使我学会了链表的有关操作,掌握了动态内存管理的方法,虽然只是一个小的程序,但是我是通过自己的努力一步步完成的,使我受益很深。
。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#defineNULL0
#defineLENsizeof(structnumber)
structnumber
{
intnum;
structnumber*next;
};
introw;
inttier;
structnumber*head;
structnumber*creat()
{
inti,n,m;
structnumber*p1,*p2,*p3;
n=0;
for(i=0;i{
printf("\n第%d行",i+1);
n=0;
if(i==0)
p1=p2=(structnumber*)malloc(sizeof(LEN));
else
p1=(structnumber*)malloc(sizeof(LEN));
printf("\n请输入数据:
");
scanf("%d",&p1->num);
while(n{
n=n+1;
if(n==1&&i==0){head=NULL;head=p1;}
elsep2->next=p1;
p2=p1;
if(n!
=tier)
{
p1=(structnumber*)malloc(sizeof(LEN));
printf("\n请输入数据:
");
scanf("%d",&p1->num);
}
}
}
p2->next=NULL;
p3=head;
returnhead;
}
voidprint(structnumber*head)
{
intn;
structnumber*p;
p=head;
if(head!
=NULL)
{
do
{
printf("%d\t",p->num);
p=p->next;
n++;
if(n%tier==0)
printf("\n");
}while(p!
=NULL);
}
}
voidinput_row_tier()
{
printf("\n请输入行数:
");
scanf("%d",&row);
printf("\n请输入列数:
");
scanf("%d",&tier);
}
voidmain()
{
intmm;
while
(1)
{
printf("\n1输入行和列");
printf("\n2录入");
printf("\n3输出");
printf("\n4退出\n\t");
scanf("%d",&mm);
switch(mm)
{
case1:
input_row_tier();break;
case2:
creat();break;
case3:
print(head);break;
case4:
exit(0);break;
}
}
}
|
|