用c语言打印杨辉三角前十行左对齐
时间: 2023-08-27 21:06:57 浏览: 234
以下是使用C语言打印杨辉三角前十行左对齐的代码:
```c
#include <stdio.h>
int main() {
int i, j, n = 10;
int arr[n];
for (i = 0; i < n; i++) {
arr[0] = 1;
arr[i] = 1;
for (j = i - 1; j > 0; j--) {
arr[j] = arr[j - 1] + arr[j];
}
for (j = 0; j <= i; j++) {
printf("%-4d", arr[j]);
}
printf("\n");
}
return 0;
}
```
输出结果为:
```
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
```
相关问题
c语言利用链队列结构或循环队列结构完成打印输出杨辉三角形的前7行。(杨辉三角形每行可以左对齐)
在C语言中,我们可以使用链队列结构或循环队列结构来构建并打印杨辉三角形。这里我们以循环队列为例,因为它的操作更直接,插入和删除元素更高效。首先,我们需要创建一个结构体表示节点,并维护两个指针用于队首和队尾。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
struct Node *next;
} Node;
Node* createNode(int val) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = val;
newNode->next = NULL;
return newNode;
}
void enqueue(Node** queue, int val) {
Node* newNode = createNode(val);
if (*queue == NULL) {
*queue = newNode;
(*queue)->next = (*queue);
} else {
Node* last = *queue;
newNode->next = *queue;
*queue = newNode;
last->next = newNode;
}
}
void printTriangle(int n) {
Node* queue = NULL;
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= n - i; ++j) {
if (j > 0) {
enqueue(&queue, 0); // 填充空位
}
printf("%d ", queue->value); // 打印当前节点值
}
printf("\n");
Node* temp = queue;
while (temp != queue->next) { // 移除已打印节点
Node* nextTemp = temp->next;
free(temp);
temp = nextTemp;
}
queue = queue->next; // 更新队首
}
}
int main() {
printTriangle(7);
return 0;
}
```
这段代码首先定义了一个循环队列结构`Node`,然后实现了入队`enqueue`和打印杨辉三角形的函数`printTriangle`。在`main`函数中调用`printTriangle(7)`即可打印出前7行的杨辉三角形。
用C语言写:试利用链队列结构或循环队列结构完成打印输出杨辉三角形的前7行。(杨辉三角形每行可以左对齐)
可以使用循环队列结构来完成打印输出杨辉三角的前7行。以下是用C语言实现的示例代码:
#include <stdio.h>
#define MAXSIZE 200
typedef struct Queue{
int data[MAXSIZE];
int front, rear;
}Queue;
void InitQueue(Queue *Q){
Q->front = Q->rear = 0;
}
int QueueEmpty(Queue Q){
if(Q.front == Q.rear){
return 1;
}
return 0;
}
int QueueFull(Queue Q){
if((Q.rear+1) % MAXSIZE == Q.front){
return 1;
}
return 0;
}
void EnQueue(Queue *Q, int x){
if(QueueFull(*Q)){
printf("Queue is Full!\n");
return;
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear+1) % MAXSIZE;
}
void DeQueue(Queue *Q, int *x){
if(QueueEmpty(*Q)){
printf("Queue is Empty!\n");
return;
}
*x = Q->data[Q->front];
Q->front = (Q->front+1) % MAXSIZE;
}
void PrintYangHui(int n){
Queue q1, q2; // 两个队列轮流存储杨辉三角的每一行
InitQueue(&q1);
InitQueue(&q2);
EnQueue(&q1, 1); // 初始化第一行为1
for(int i=1;i<=n;i++){
if(i%2 != 0){ // 第奇数行存储在q1中,打印后放入q2
while(!QueueEmpty(q1)){
int x;
DeQueue(&q1, &x);
printf("%-3d", x);
EnQueue(&q2, x);
if(!QueueEmpty(q1)){ // 除最后一个数外,每个数都是本行的值加上上一行的值
int y;
DeQueue(&q1, &y);
EnQueue(&q2, x+y);
}
}
printf("\n");
}
else{ // 第偶数行存储在q2中,打印后放入q1
while(!QueueEmpty(q2)){
int x;
DeQueue(&q2, &x);
printf("%-3d", x);
EnQueue(&q1, x);
if(!QueueEmpty(q2)){ // 除最后一个数外,每个数都是本行的值加上上一行的值
int y;
DeQueue(&q2, &y);
EnQueue(&q1, x+y);
}
}
printf("\n");
}
}
}
int main(){
PrintYangHui(7);
return 0;
}
阅读全文