编程技术基础实训.docx
- 文档编号:30541093
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:15
- 大小:117.58KB
编程技术基础实训.docx
《编程技术基础实训.docx》由会员分享,可在线阅读,更多相关《编程技术基础实训.docx(15页珍藏版)》请在冰豆网上搜索。
编程技术基础实训
成绩评定表
学生姓名
Xxx
班级学号
专业
电子信息科学与技术
课程设计题目
编程技术基础实训
评
语
组长签字:
成绩
日期
2016年7月1日
学院
信息科学与工程学院
专业
电子信息科学与技术
学生姓名
Xxx
班级学号
xxx
课程设计题目
编程技术基础实训
实践教学要求与任务:
题目一:
稀疏矩阵的运算
1.稀疏矩阵A采用三元组表示。
2.求出A的转置矩阵D,输出D。
题目二:
杨辉三角队列的实现
利用循环顺序队列打印杨辉三角。
杨辉三角的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。
所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。
在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行元素并入队列。
打印的杨辉三角形如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
工作计划与进度安排
第1天:
1、指导教师布置课程设计题目及任务
2、查找相关资料
第2~4天:
1、根据具体设计题目进行具体分析
2、对设计题目进行编码和调试
3、指导教师进行验收
第5天:
1、指导教师针对课程设计进行答辩
2、完成课程设计报告
指导教师:
崔宁海张德慧
2016年7月1日
专业负责人:
程磊
2016年7月1日
学院教学副院长:
2016年7月1日
目录
一、课程设计目的------------------------------------------------------------1
二、课程设计内容和要求---------------------------------------------------1
三、题目一设计过程---------------------------------------------------------2
四、题目二设计过程---------------------------------------------------------5
五、设计总结------------------------------------------------------------------9
六、参考文献------------------------------------------------------------------9
题目
(1)稀疏矩阵的运算
(2)杨辉三角队列的实现
一、课程设计的目的
本学期我们对《数据结构》这门课程进行了学习。
这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。
这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具备一定的C语言基础和编程能力。
(1)题目一的目的:
1.掌握多维数组的逻辑结构和存储结构
2.掌握稀疏矩阵的压缩存储及基本操作
(2)题目二的目的:
1.掌握队列的顺序存储结构
2.掌握队列先进先出运算原则在解决实际问题中的应用
二、课程设计的内容和要求
(1)题目一的内容和要求:
1.稀疏矩阵A采用三元组表示。
2.求出A的转置矩阵D,输出D。
(2)题目二的内容和要求:
利用循环顺序队列打印杨辉三角。
杨辉三角的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。
所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。
在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行元素并入队列。
打印的杨辉三角形如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
三、题目一设计过程
1、题目分析
(1)以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现稀疏矩阵的转置运算。
(2)稀疏矩阵的输入形式采用三元组表示,运算结果则以通常的阵列形式列出。
(3)首先提示用户输入矩阵的行数、列数、非零元个数,再采用三元组表示方法输入矩阵,然后进行转置运算。
2、算法描述
采用三元组表示法输入数据创建一个稀疏矩阵,再进行矩阵的转置操作,并以通常的阵列形式输出结果。
主要实现以下功能。
(1)创建稀疏矩阵。
采用带行逻辑连接信息的三元组表表示法,提示用户输入矩阵的行数、列数、非零元个数以及各非零元所在的行、列、值。
(2)矩阵转置。
采用一般算法进行矩阵的转置操作,再以阵列形式输出转置矩阵D。
3、源代码
#include
#include
#include
#defineOK1
#defineERROR0
#defineMAXSIZE100
#defineMAXRC100
typedefintElemType;
typedefstruct
{
inti,j;
ElemTypee;
}Triple;
typedefstruct
{
Tripledata[MAXSIZE+1];//非零元三元组
intrpos[MAXRC+1];//各行第一个非零元的位置表
intmu,nu,tu;//矩阵的行数、列数和非零元个数
}RLSMatrix;
CreateSMatrix(RLSMatrix&M)//创建稀疏矩阵M
{
inti,m,n;
ElemTypee;
intk,j;
printf("输入矩阵的行数、列数、非零元的个数:
");
scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
M.data[0].i=0;
for(i=1;i<=M.tu;i++)
{
j=0;
do
{
j++;
if(j>3)//控制跳出死循环
{
printf("本次输入失败!
");
returnERROR;
}
printf("按行序输入第%d个非零元素所在的行(1~%d)列(1~%d)值:
",i,M.mu,M.nu);
scanf("%d%d%d",&m,&n,&e);
k=0;
if(m<1||m>M.mu||n<1||n>M.nu)//行或列超出范围
k=1;
if(m k=1; }while(k); M.data[i].i=m; M.data[i].j=n; M.data[i].e=e; } printf("\n"); return(OK); } voidprint(RLSMatrixA)//打印矩阵函数,以通常形式输出矩阵 { intk=1,a,b; printf("稀疏矩阵A的转置矩阵D为: \n"); intM[MAXSIZE][MAXSIZE]; for(a=0;a { for(b=0;b M[a][b]=0; } while(k<=A.tu) { M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e; k++; } for(a=0;a { printf("|"); for(b=0;b printf("%d",M[a][b]); printf("|\n"); } } TransposeSMatrix(RLSMatrixA,RLSMatrix&D)//求稀疏矩阵A的转置矩阵D { intp,q,col; D.mu=A.nu; D.nu=A.mu; D.tu=A.tu; if(D.tu) { q=1; for(col=1;col<=A.nu;++col)//按列序求转置 for(p=1;p<=A.tu;++p) if(A.data[p].j==col) { D.data[q].i=A.data[p].j; D.data[q].j=A.data[p].i; D.data[q].e=A.data[p].e; ++q; } } returnOK; } voidmain() { RLSMatrixA,D; printf("创建矩阵A: "); if((CreateSMatrix(A))==0) exit(ERROR); printf("求A的转置矩阵D: \n"); TransposeSMatrix(A,D); print(D); printf("\n\n"); } 4、运行结果 四、题目二设计过程 1、题目分析 (1)采用链表队列,这种实现方式是利用了杨辉三角的性质,即三角内的某一个数等于其“头顶”上两个数相加而得。 本程序实现杨辉三角,是对链队的一个应用。 (2)二维数组来实现杨辉三角,是基于队列的操作来实现杨辉三角的不断生成过程。 2、算法描述 利用循环顺序队列打印杨辉三角。 杨辉三角的特点是: (1)两个腰上的数字都为1; (2)其它位置上的数字是其上一行中与之相邻的两个整数之和。 所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。 在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行元素并入队列。 3、源代码 #include #include #defineOK1 #defineERROR0 typedefintstatus; typedefintelemtype; typedefstructqnode { elemtypedate; structqnode*next; }*qptr; typedefstruct { qptrhead; qptrrear; }linkq; voidinitqueue(linkq&s) {//初始化队列 s.head=(qptr)malloc(sizeof(qnode)); if(! s.head)printf("空间分配失败"); s.head->next=NULL; s.rear=s.head; s.rear=NULL; } voidinsert(linkq&s,elemtypee) {//向对中插入元素 qptrnewbase; newbase=(qptr)malloc(sizeof(qnode)); newbase->date=e;newbase->next=NULL; if(s.rear==NULL)//若原始队列为空 { s.rear=newbase; s.head=s.rear; s.rear->next=NULL; } else//若原始队列非空 { s.rear->next=newbase; s.rear=s.rear->next; s.rear->next=NULL; } } voidoutput(linkqs) {//输出队列中元素 qptrp,q; if(s.head==NULL) printf("队列为空\n"); else { if(s.head==s.rear) printf("%d",s.rear->date); else { p=s.head; do { printf("%d",p->date); q=p; p=p->next; }while(q! =s.rear); } } printf("\n"); } elemtypedequeue(linkq&s,elemtype&headelem) {//队首出队列,并用e返回队首值 qptrp; headelem=s.head->date; p=s.head; s.head=p->next; free(p); returnheadelem; } voidyhsj(linkq&s,intN) {//输出N行杨辉三角 inti,m; qptrp,q,h,r; elemtypee,a; if(N==1)output(s); if(N>1) { for(m=1;m<=N;m++)//打印前空格 printf(""); output(s); insert(s,1); p=s.head;q=p->next; for(i=1;i<=N;i++) { r=s.rear; for(m=1;m<=N-i;m++)//打印后空格 printf(""); output(s); while(p! =r) { e=p->date+q->date;//头顶两数之和 insert(s,e); p=q; q=q->next; dequeue(s,a); } e=p->date; insert(s,e); } } } voidmain() { intflag=1,N; elemtypee,headelem; linkqs; initqueue(s); insert(s,1); printf("请输入要输出的杨辉三角的行数N="); scanf("%d",&N); yhsj(s,N); } 4、运行结果 五、设计总结 这几天的学习,使我们在巩固了原有的理论知识上,又培养了灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我们体会到自身知识和能力在实际中的应用和发挥。 其次,它激发了我们创新意识,开发创造的能力和培养沟通能力。 另外,让我们进一步熟悉了数据结构的设计应用。 每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我们数据结构的学习和提高很有益处,并且使我们明白了程序设计过程,如解决一些实际问题,从解决实际问题的角度,我们可以这样来看: 第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过程——算法,通过在编译环境中的编译与调试,可到最终的程序。 最后,在这次的实训过程中,我们深刻的认识到了自己在学习方面的不足之处,我知道我还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。 六、参考文献 1.杨路明.C语言程序设计教程.北京邮电大学出版。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 技术 基础