✅ 操作成功!

杨辉三角c语言

发布时间:2023-06-12 作者:admin 来源:文学

杨辉三角c语言

杨辉三角c语言

-

2023年3月16日发(作者:师徒结对协议)

---《杨辉三角》

专业:自动化

班级:自动化05

姓名:陈绍清

学号:10054112

指导教师:蔡忠闵刘美兰

2011.12.20

实验目的:逐行打印二项展开式(a+b)i的系数

杨辉三角形(Pascal’striangle)

11i=1

1212

13313

146414

151010515

问题描述:

编写程序,根据输入的行数,屏幕显示杨辉三角。

基本要求:

(1)行数不大于20行。

(2)基于队列的操作来实现杨辉三角的不断生成过程。(注:

不要用其它的公式计算的方法或者二维数组来实现)

(3)基于数组实现队列的物理数据结构

需求分析:

1、输入形式:输入一个整数n,0<=n<=20

2、输出形式:打印出来前(n+1)行的杨辉三角数列

3、功能实现:输出前20层的杨辉三角序列

实验内容:

1.采用类c语言定义相关的数据类型

ADTQueue{

数据对象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}

数据关系:R1={|ai-1,ai∈D,i=2,...,n}

约定an端为对列尾,a1端为对列头

基本操作:

{

InitQueue(&Q)//构造一个空对列

DestroyQueue(&Q)//销毁对列

ClearQueue(&Q)//将S清为空对列

QueueEmpty(Q)//判断是否为空对列,是则返回True

QueueLength(Q)//返回对列的长度

GetHead(Q,&e)//返回队头元素

EnQueue(&Q,e)//插入元素e为新的队尾元素

DeQueue(&Q,&e)//删除队头元素,并用e返回

QueueTraverse(Q,visit())//对每个元素都调用visit函

数,如调用失败,则操作失效

}2.各模块的流程图及伪码算法

StatusInitQueue(SqQueue&Q)

{

=(QElemType*)malloc(MAXQSIZE*sizeof(QElemTy

pe));

//分配队列的存储空间;

if(!)exit(OVERFLOW);

==0;//队头、尾指针清0

returnOK;

}

StatusEnQueue(SqQueue&Q,QElemTypee)

{

if(((+1)%MAXQSIZE)==)

return(ERROR);

[]=e;

=((+1)%MAXQSIZE);

returnOK;

}//EnQueue;

typedefstructQnode{

QElemTypedata;

structQnode*next;

}Qnode;

typedefstruct{

Qnode*front;

Qnode*rear;

}LinkQueue;

voidYangHui(intn)//n为需要输出的杨辉三角形的行数

{SqQueueq;ints=0,t;

InitQueue(q);EnQueue(q,1);

EnQueue(q,1);

for(inti=1;i<=n;i++)//逐行计算

{printf(“n”);EnQueue(q,0);

for(intj=1;j<=i+2;j++)//根据上行系数求下行系数

{DeQueue(q,t);

EnQueue(q,s+t);

s=t;

if(j!=i+2)

printf(“%3d”,s);//不输出每行结尾的0

}

}

}

3.算法思路:

概要设计:

既然要用到队列来打印杨辉三角,那么肯定会利用到队

列FILO的性质(FirstInLaseOut),由于是要打印一个

数列,那么肯定要利用已经进队的元素在其出队之前完成杨

辉三角的递归性----即利用要出队的元素来不断地构造新

的进队的元素,即在第N行出队的同时,我们来构造杨辉三

角的第N+1行,从而实现打印杨辉三角的目的。

详细设计:

算法思想已经在概要设计中提到了,现在通过基于队列

基本操作的函数以及程序的模块化思想来实现杨辉三角的

打印输出问题。

算法函数描述:

voidEnterQueue(Queue&Q,intx)//入队

intDeleteQueue(Queue&Q,int&x)//出队

voidGetHead(Queue&Q,int&x)//得到队首元素

voidYangHui(intn)//打印杨辉三角数表

通过在voidYangHuiTriangle(intn)中反复的调用

voidGetHead(Queue&Q,int&x)、intDeleteQueue(Queue

&Q,int&x)、voidEnterQueue(Queue&Q,intx)来实现打

印.

调试分析:

调试了很久很久啊,小的错误总是那么的多,主要遇到的

问题有:typedef用法不很清楚,刚开始用指针实现的时候

出现了问题;没有在基本操作中采用“传引用”的方式传参,

导致很长的时间内,根本就没有相应的输出;刚开始在每一

行中总是没有出现最后一个1,导致问题的结果是没有相应

的入队操作导致后面的杨辉三角很是紊乱!

实验结果调试:

设计总结

我的这次数据结构课程设计的题目是:《杨辉三角》,通

过对该题目的设计,我加深了对数据结构及存储结构的理解,

进一步地理解和掌握了课本中所学的各种数据结构,尤其是

对单循环链表上基本运算的实现,学会了如何把学到的知识

用于解决实际问题,锻炼了自己动手的能力。

在此过程我深深地意识到自己知识的严重不足!不断地

充实自己才是目前的当务之急!三周的课程设计很短暂,但

其间的内容是很充实的,在其中我学习到了很多平时书本中

无法学到的东西,积累了经验,锻炼了自己分析问题,解决

问题的能力,并学会了如何将所学的各课知识融会,组织起

来进行学习,总而言之这三周中我学到很多,收益匪浅同时

一定程度上提高了自己程序设计和阅读程序的能力。本次课

程设计提高了我们的专业知识,使自己所学的内容运用到实

际中来,也增强了实际操作能力,为以后的工作学习提供了

一个良好的铺垫。

通过本次课程设计的实践学习,我认识到了学好计算机

要重视实践操作,所以在以后的学习过程中,我会更加注重

实践操作,使自己更好地学好计算机。

参考文献

1严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版

社.

2严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学

出版社.

3谭浩强.《c语言程序设计》.清华大学出版社.

4.李春葆编著《数据结构教程(上机实验指导)》清华大

学出版社

5.叶核亚主编《数据结构(C++版)》机械工业出版社

致谢

课程设计完成之际,除了感到一种轻松以外,马上想到

的就是对老师以及在课程设计过程中帮助我的同学们,因为

他们的指导和鞭策,才使我下定决心,集中精力投入到课程

设计的建设。

首先感谢我的指导老师刘美兰老师,他在我的课程设计

过程中提出了指导性的方案和架构,比如让我把密码设计成

自动和手动两种方式,使我在不熟悉的领域中仍能迅速掌握

新的技术。

感谢我的数据结构老师蔡忠闵老师在以往的基础课学

习中为我打下良好的基础,这是我这次课程设计能够顺利完

成的前提。

我的同学在这次课设中也给予了我一些好的建议!在此,

也谢谢他们!

附录一:C程序:

#defineMAXSIZE50

#include

typedefintdatatype;

typedefstruct

{intdata[MAXSIZE];

intfront;

intrear;

}SeqQueue;

SeqQueue*InitQueue()

{SeqQueue*q;

q=(SeqQueue*)malloc(sizeof(SeqQueue));

q->front=q->rear=0;

returnq;

}

voidEnQueue(SeqQueue*q,datatypex)

{

if((q->rear+1)%MAXSIZE==q->front)

{

printf("ERROR");exit(1);

}

q->data[q->rear]=x;

q->rear=(q->rear+1)%MAXSIZE;

}

datatypeDeQueue(SeqQueue*q)

{

datatypex;

if(q->front==q->rear)

{

printf("nERROR");exit(1);

}

x=q->data[q->front];

q->front=(q->front+1)%MAXSIZE;

returnx;

}

intQueueEmpty(SeqQueue*q)

{

return(q->front==q->rear);

}

intGetHead(SeqQueue*q)

{

inte;

if(q->front==q->rear)

e=0;

else

e=q->data[q->front];

returne;

}

voidYangHui(intn)

{

SeqQueue*q;

inti,j,s,t;

for(i=1;i<=n;i++)

printf("");

printf("1n");

q=InitQueue();

EnQueue(q,0);

EnQueue(q,1);EnQueue(q,1);

for(j=1;j

{

for(i=1;i

printf("");

EnQueue(q,0);

do

{

s=DeQueue(q);

t=GetHead(q);

if(t)printf("%5d",t);

elseprintf("n");

EnQueue(q,s+t);

}

while(t!=0);

}

DeQueue(q);

printf("%3d",DeQueue(q));

while(!QueueEmpty(q))

{

t=DeQueue(q);

printf("%5d",t);

}

}

main()

{

intn;

scanf("%d",&n);

printf("%d”,nn");

YangHui(n);

}

👁️ 阅读量:0