用C语言编写5行`杨辉三角~~急````

如题所述

#include "stdlib.h"

//声明队列类型
typedef struct node
{
int data[21];
int head,rear;
}sequeue;

int num;//杨辉三角的层数

//队列的初始化
void initial(sequeue *sq)
{
sq->head=-1;
sq->rear=-1;
}

//进队操作
void ensequeue (sequeue *sq,int data1,int data2)
{
sq->rear++;
sq->data[sq->rear]=data1+data2;
}

//出队操作
int desequeue(sequeue *sq)
{
return sq->data[++sq->head];
}

//求扬辉三角的第n行,将其存入队列sq2指向的结点中
sequeue * fun(int n,sequeue *sq1)
{
int data1,data2=0,i;
sequeue *sq2;

sq2=(sequeue *)malloc(sizeof(sequeue));
initial(sq2);

//输出每行前的空格以形成三角格式
for (i=0;i<num-n;i++)
printf(" ");

//输出存储在队列中的某行元素,并计算下一行数
while(sq1->head!=sq1->rear)
{
data1=desequeue(sq1);

//处理两树之间的间隔距离
if (data1<10) printf(" %d",data1);
else if (data1<100) printf(" %d",data1);
else if (data1<1000) printf(" %d",data1);
else printf(" %d",data1);

ensequeue(sq2,data1,data2);
data2=data1;
}
sq2->data[++sq2->rear]=1;
printf("\n");
free(sq1);
return sq2;
}

int main(int argc,char *argv[])
{
int i;
sequeue *sq=(sequeue *)malloc (sizeof(sequeue));
initial(sq);
sq->rear++;
sq->data[sq->rear]=1; //将第一行存入队列中,第一行只有1一个元素

printf("please put in a integer number(no more then 15)!\n\t");
scanf("%d",&num);

//fun()函数实现输出一行元素并计算出下一行各个元素,经过num次调用fun函数输出num层杨辉三角
for (i=0;i<num;i++)
sq=fun(i,sq);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-18
#include<stdio.h>
#define N 5

main()
{ int i,j,k,a[N][N];
for(i=0;i<N;i++)
{ a[i][0]=a[i][i]=1;
if(i>1)
{ for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<N;i++)
{ for(k=0;k<=N-i;k++)
printf(" ");
for(j=0;j<=i;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
相似回答