虚心吴 2022-05-23 23:43 采纳率: 100%
浏览 30
已结题

循环队列输出杨辉三角时循环不能停止,求帮助

问题遇到的现象和发生背景

上机课时,用循环队列输出杨辉三角时循环不能停止,求帮助!

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<malloc.h>
#define max 100
typedef int elemtype;
typedef struct
{
    elemtype data[max];
    int front,rear;
} sqqueue;
void initqu(sqqueue *&qu)
{
    qu=(sqqueue *)malloc(sizeof(sqqueue));
    qu->front=qu->rear=0;
}
bool enqu(sqqueue *&qu,elemtype e)
{
    if((qu->rear+1)%max==qu->front)
        return false;
    else
    {
        qu->rear=(qu->rear+1)%max;
        qu->data[qu->rear]=e;
        return true;
    }
}
bool dequ(sqqueue *&qu,elemtype &e)
{
    if(qu->front==qu->rear)
        return false;
    else
    {
        qu->front=(qu->front+1)%max;
        e=qu->data[qu->front];
        return true;
    }
}
int main()
{
    sqqueue *qu;
    int i,N,n,x,y,t;
    initqu(qu);
    printf("输入杨辉三角的行数:");
    scanf("%c",&N);
    enqu(qu,1);
    printf("%3d\n",1);
    for(n=2;n<N;n++)
    {
        x=0;
        for(i=1;i<n;i++)
        {
            dequ(qu,y);
            t=x+y;
            printf("%3d",t);
            enqu(qu,t);
            x=y;
        } 
        printf("%3d\n",1);
        enqu(qu,1);
    } 
    return 0;
}

运行结果及报错内容

循环不能停止

img

我的解答思路和尝试过的方法

试过多种方法都未改变

  • 写回答

2条回答 默认 最新

  • 李林罡 2022-05-24 13:59
    关注

    简单改了下,错误给你标出来了,功能留给你自己完善了

    希望能帮到你

    
    #include<stdio.h>
    #include<malloc.h>
    #define max 100
    typedef int elemtype;
    typedef struct
    {
        elemtype data[max];
        int front,rear;
    } sqqueue;
    //形参不需要地址操作符 sqqueue *&qu  改为 sqqueue *qu 
    void initqu(sqqueue *qu)
    {
        qu=(sqqueue *)malloc(sizeof(sqqueue));
        qu->front=qu->rear=0;
    }
    //形参不需要地址操作符 sqqueue *&qu  改为 sqqueue *qu 
    //bool 改为int 
    int enqu(sqqueue *qu,elemtype e)
    {
        //第一次调用 
        //qu->{.data[100]={},.front=0,.rear=0}  e->1 
        //2%100->2  != 0  条件不符合 走else   
        
        //第二次调用 
        //qu->{.data[100]={ [2]=>1 },.front=1,.rear=2} e->1  返回true
        // 3%100->3 !=1  条件不符合 走else 
        if((qu->rear+1)%max==qu->front)
            return 0;
        else
        {
            qu->rear=(qu->rear+1)%max;//qu->{.data[100]={},.front=0,.rear=2}  e->1   第二次调用 qu->{.data[100]={[2]=>1 },},.front=1,.rear=3}  e->1
            qu->data[qu->rear]=e;//qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  e->1  第二次调用 qu->{.data[100]={[2]=>1,[3]=>1 },},.front=1,.rear=3}  e->1
            return 1;
        }
    }
    //形参不需要地址操作符 sqqueue *&qu  改为 sqqueue *qu   elemtype &e 改为*e 
    //bool 改为int 
    int dequ(sqqueue *qu,elemtype *e)
    {
        //qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  
        //不符合走else 
        if(qu->front==qu->rear)
            return 0;
        else
        {
            qu->front=(qu->front+1)%max;//qu->{.data[100]={ [2]=>1 },.front=1,.rear=2}
            (*e)=qu->data[qu->front];//使用指针接收 e->1 
            return 1;
        }
    }
    int main()
    {
        sqqueue *qu;
        int i,N,n,x,y,t;
        initqu(qu);//qu->{.data[100]={},.front=0,.rear=0} 
        printf("输入杨辉三角的行数:");
        scanf("%c",&N);//假如输入3 
        enqu(qu,1);//qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  返回true 
        printf("%3d\n",1); 
        for(n=2;n<N;n++)
        {
            x=0;
            for(i=1;i<n;i++)
            {
                //qu->{.data[100]={ [2]=>1 },.front=0,.rear=2}  返回true 
                //  y是一个函数回写的变量 传地址进去 函数用指针接收 
                dequ(qu,&y);//qu->{.data[100]={ [2]=>1 },.front=1,.rear=2}   y->1
                t=x+y;//t=0+1 t->1
                printf("%3d",t);// 1
                enqu(qu,t);//qu->{.data[100]={[2]=>1,[3]=>1 },},.front=1,.rear=3}
                x=y;//x->1
            } 
            printf("%3d\n",1);
            enqu(qu,1);
        } 
        return 0;
    }
    
    

    img

    最后可以参考下这个 http://c.biancheng.net/view/495.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统