📄 习题4-打印扬辉三角系数.c
字号:
#include "datastru.h"
#include <stdio.h>
#include <malloc.h>
DATATYPE1 dellinkqueue(LINKQUEUE *q)
{/*删除队头元素并返回*/
LINKQLIST *p;
DATATYPE1 v;
if(q->front == q->rear)
{ printf("队列空\n");
v = 0;}
else
{ p = (q->front)->next;
(q->front)->next = p->next;
if(p->next == NULL)
q->rear = q->front;
v = p->data;
free(p);}
return v;
}
DATATYPE1 getlinkqueue(LINKQUEUE *q)
{/*返回队头元素*/
DATATYPE1 v;
if(q->front == q->rear)
{printf("队列空\n"); v = 0;}
else v = (q->front)->next->data;
return v;
}
void enlinkqueue(LINKQUEUE *q, DATATYPE1 x)
{/*元素x 入队列*/
(q->rear)->next = (LINKQLIST *)malloc(sizeof(LINKQLIST));
q->rear = (q->rear)->next;
(q->rear)->data = x;
(q->rear)->next = NULL;
}
void initlinkqueue(LINKQUEUE *q)
{/*链队列初始化*/
q->front = (LINKQLIST *)malloc(sizeof(LINKQLIST));
(q->front)->next = NULL;
q->rear = q->front;
}
void main(){
LINKQUEUE lq, *q;
int n, s, t, k, i, m, j;
printf("打印扬辉三角形,输入行数 : ");
scanf("%d",&n);
q = &lq;
initlinkqueue(q); /*链队列初始化*/
enlinkqueue(q, 1); /*预先放入第一行的两个系数1*/
enlinkqueue(q, 1);
s = 0; /*计算下一行系数时用到的工作单元*/
for(i = 1; i <= n; i++) { /*逐行处理*/
printf("\n"); /*换行*/
for(m = i; m <= n; m++) printf(" ");
enlinkqueue(q, 0); /*各行之间插入一个0*/
for(j = 1; j <= i + 2; j++) { /*处理第i行的i+2个系数(包括一个0)*/
t = getlinkqueue(q); /*取队头元素*/
k = dellinkqueue(q); /*删除队头元素*/
enlinkqueue(q, s+t); /*计算下一行的系数,入队列*/
s = t;
if(j != (i+2)) printf("%d ",s); /*打印一个系数,第i+2个是0,不显示*/
}
printf("\n");
}
printf("\n\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -