651990851 发表于 2020-11-25 16:21:59

为什么当行数超过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");
}
}

巴巴鲁 发表于 2020-11-25 19:25:36

打印函数的问题,再增加文本宽度

风过无痕1989 发表于 2020-11-26 14:22:06

昨天就看到你的问题了,但不能确定你就是要输出杨辉三角形。因为你前面一大堆代码,不知道你要干什么。下面是一个输出杨辉三角形的程序,你参考一下:
#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]
查看完整版本: 为什么当行数超过11时会出现这种问题