鱼C论坛

 找回密码
 立即注册
查看: 4707|回复: 2

为什么当行数超过11时会出现这种问题

[复制链接]
发表于 2020-11-25 16:21:59 | 显示全部楼层 |阅读模式
8鱼币
#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 20
typedef struct
{        int datas[MAXSIZE];
        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[Q->rear]=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[i]);                       
                }
        }
        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");
  }
}

3.PNG
1.PNG
2.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-25 19:25:36 | 显示全部楼层
打印函数的问题,再增加文本宽度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-26 14:22:06 | 显示全部楼层
昨天就看到你的问题了,但不能确定你就是要输出杨辉三角形。因为你前面一大堆代码,不知道你要干什么。下面是一个输出杨辉三角形的程序,你参考一下:
#include <stdio.h>
#define N 25
void main()
{
        int i, j, k, n = 0, a[N][N];  /*定义二维数组a[14][14]*/
        while (n <= 0 || n >= 24) {  /*控制打印的行数不要太大,过大会造成显示不规范*/
                printf("请输入要打印的行数:");
                scanf("%d", &n);
        }
        printf("%d行杨辉三角如下:\n", n);
        for (i = 1;i <= n;i++)
                a[i][1] = a[i][i] = 1;  /*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/
        for (i = 3;i <= n;i++)
                for (j = 2;j <= i - 1;j++)
                        a[i][j] = a[i - 1][j - 1] + a[i - 1][j];  /*除两边的数外都等于上两顶数之和*/
        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[i][j]);

                printf("\n");  /*当一行输出完以后换行继续下一行的输出*/
        }
        printf("\n");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表