为什么当行数超过11时会出现这种问题
#include<stdio.h>#include<stdlib.h>
#define MAXSIZE 20
typedef struct
{ int datas;
int front,rear;
}SqQueue;
//初始化队
void InitQueue(SqQueue *Q)
{ Q->front=Q->rear=-1;
}
int EmptyQueue_C(SqQueue *Q)
{//若队列为空,返回1,否则返回0
if(Q->rear==Q->front) return 1;
else return 0;
}//EmptyQueue_C
// 取对头元素
char GetQueue_C(SqQueue *Q)
{//若队列不为空,则返回队首元素,否则返回NULL
int e;
if(EmptyQueue_C(Q))
{printf("Queue is empty\n");
return(0);}
else
{e=Q->datas[(Q->front+1)%MAXSIZE];
return e;}
}//GetQueue_C
//入队
int EnQueue_C(SqQueue *Q, int e)
{//将元素e插入到队列中,作为新的队尾。操作成功返回1,否则返回0
if(Q->front==(Q->rear+1)%MAXSIZE)//队满
{printf("Queue is full.\n");
return 0;}
else
{Q->rear=(Q->rear+1)%MAXSIZE;
Q->datas=e;
return 1;}
}//EnQueue_C
//出队
int DeQueue_C(SqQueue *Q)
{//删除队头元素,若操作成功返回1,否则返回0
if(EmptyQueue_C(Q))
{printf("Queue is empty.\n");
return 0;}
else
{Q->front=(Q->front+1)%MAXSIZE;
return 1;}
}//DeQueue_C
//输出队
void PRINT(SqQueue *Q)
{
int i;
if(Q->front!=Q->rear)
{
printf("当前循环队列中从头到尾的元素为:");
i=Q->front;
while(i!=Q->rear)
{
i=(i+1)%MAXSIZE;
printf("%d ",Q->datas);
}
}
else
printf("当前循环队列为空!");
putchar('\n');
}
main()
{
SqQueue *Q;
int n;
int i,j,k,s1,s2;
Q=(SqQueue *)malloc(sizeof(SqQueue));
InitQueue(Q);
EnQueue_C(Q,1);
printf("请输入杨辉三角的层数:\n");
scanf("%d",&n);
for(k=0;k<n-1;k++)
printf(" ");
printf("1\n");
for(i=2;i<=n;i++)
{ for(k=0;k<n-i;k++)
printf(" ");
for(j=1,s1=0;j<i;j++)
{ int s2;
s2=GetQueue_C(Q);
DeQueue_C(Q);
printf("%d",s1+s2);
printf(" ");
EnQueue_C(Q,s1+s2);
s1=s2;
}
printf("1");
EnQueue_C(Q,1);
printf("\n");
}
}
打印函数的问题,再增加文本宽度 昨天就看到你的问题了,但不能确定你就是要输出杨辉三角形。因为你前面一大堆代码,不知道你要干什么。下面是一个输出杨辉三角形的程序,你参考一下:
#include <stdio.h>
#define N 25
void main()
{
int i, j, k, n = 0, a;/*定义二维数组a*/
while (n <= 0 || n >= 24) {/*控制打印的行数不要太大,过大会造成显示不规范*/
printf("请输入要打印的行数:");
scanf("%d", &n);
}
printf("%d行杨辉三角如下:\n", n);
for (i = 1;i <= n;i++)
a = a = 1;/*两边的数令它为1,因为现在循环从1开始,就认为a为第一个数*/
for (i = 3;i <= n;i++)
for (j = 2;j <= i - 1;j++)
a = a + a;/*除两边的数外都等于上两顶数之和*/
for (i = 1;i <= n;i++) {
for (k = 1;k <= n - i;k++)
printf(" ");/*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/
for (j = 1;j <= i;j++)/*j<=i的原因是不输出其它的数,只输出我们想要的数*/
printf("%6d", a);
printf("\n");/*当一行输出完以后换行继续下一行的输出*/
}
printf("\n");
}
页:
[1]