题目要求:

规定这样一种形状的三角形,如图7-36所示为一个符号三角形:

c语言打印正三角形(c语言打印符号三角形)(1)

#include "stdio.h" typedef struct QNode{ /*定义队列结点类*/ char data; struct QNode *next; } QNode , *QueuePtr; typedef struct{ /*定义一个链队列*/ QueuePtr front; /*队头指针*/ QueuePtr rear; /*队尾指针*/ }LinkQueue; initQueue(LinkQueue *q){ /*初始化一个空队列*/ q->front = q->rear = (QueuePtr)malloc(sizeof(QNode)); /*创建一个头结点,队头队尾指针指向该结点*/ if( !q->front) exit(0); /*创建头结点失败*/ q->front->next = NULL; /*头结点指针域置NULL*/ } EnQueue(LinkQueue *q, char e){ /*入队列操作*/ QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode)); /*创建一个队列元素结点*/ if( !q->front) exit(0); /*创建头结点失败*/ p->data = e; /*将元素e入队列*/ p->next = NULL; /*修改队尾指针*/ q->rear ->next = p; q->rear = p; } DeQueue(LinkQueue *q, char *e){ /*如果队列q不为空,删除q的队头元素,用e返回其值*/ QueuePtr p; if(q->front == q->rear) return; /*队列为空,返回*/ p = q->front->next; *e = p->data; q->front->next = p->next; if(q->rear == p) q->rear = q->front;/*如果队头就是队尾,则修改队尾指针*/ free(p); } printTriangle(int n){ LinkQueue q; char e,a,b ; int i,j; initQueue(&q); /*初始化队列*/ printf("Input the the charecter( /-) of the row.1\n"); for(i=0;i<n;i ){ /*输入第一行的符号,并入队列*/ scanf("%c",&e); EnQueue(&q,e); } printf("The charecter triangle is like\n"); for(i=0;i<n;i ){ /*控制符号三角形的行数*/ for(j=0;j<i;j ) printf(" "); /*控制输出格式,打印成倒三角形状*/ DeQueue(&q,&a); /*出队列,打印每行的第一个符号*/ printf("%c ",a); for(j=0;j<n-i-1;j ) /*控制输出每一行,第i行输出n-i个符号*/ { DeQueue(&q,&b); /*出队列*/ printf("%c ",b); if(a == b) EnQueue(&q,' '); /*向队尾插入新元素*/ else EnQueue(&q,'-'); a = b; } printf("\n"); /*控制输出格式,打印成倒三角形状*/ } } main() { int n; printf("Please input the number of ' ' or '-' of the row.1 \n"); scanf("%d",&n); /*输入符号三角形中第一行的元素个数*/ getchar(); printTriangle(n); /*打印符号三角形*/ getche(); }

运行结果:

c语言打印正三角形(c语言打印符号三角形)(2)

运行结果

,