上机课时,用循环队列输出杨辉三角时循环不能停止,求帮助!
#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;
}
循环不能停止
试过多种方法都未改变
简单改了下,错误给你标出来了,功能留给你自己完善了
希望能帮到你
#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;
}
最后可以参考下这个 http://c.biancheng.net/view/495.html
scanf("%d",&N);
用%c的话N保存是9的ascii码了