啊哈c语言计算机编程一道题:利用循环命令for,就是输入一个数,它就会出现第一行一颗星,第二行三颗

Python015

啊哈c语言计算机编程一道题:利用循环命令for,就是输入一个数,它就会出现第一行一颗星,第二行三颗,第1张

#incldue <stdio.h>

int main()

{

int i,j,k,n

scanf("%d", &n)

for (i=0i<ni++)

{for (j=0j<=2-ij++)

printf(" ")

for (k=0k<=2*ik++)

printf("*")

printf("\n")

}

return 0

}

数字大点的时候不对 ,在看

http://zhidao.baidu.com/link?url=LpE5M8_jdWMqeYajDS7W4cY-5N8-ZYxxMdBxDUNtFvmk3-EVUvZez1kWxfiLT__DAOmRRqaEV5zO61rBLYw27a

#include<stdio.h>

#include<malloc.h>

#define DEGREE 5 //树的高度

#define NULL 0

#define QUEUESIZE 10

#define MAX_NODE_NUM 100

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@树和二叉树的结构体@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

typedef struct st1//树节点的类型

{

char data//数据域,采用char星

struct st1 *children[DEGREE]//指向孩子节点的指针域

}CTreeNode

typedef struct st2

{

char data//数据域

struct st2 *lchild,*rchild//左右孩子节点的指针

}BTreeNode

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@查找树的节点@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

CTreeNode *SearchCTree(CTreeNode *root ,char data)

{

int i

CTreeNode *returnNode

if(root->data==data)

return root

else

{

for(i=0i<DEGREEi++)

{

if(root->children[i]==NULL)

return NULL

else

{

returnNode=SearchCTree(root->children[i],data)//递归查找

if(returnNode!=NULL)

return returnNode

}

}

}

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@生成树@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

CTreeNode *CreateSTree()

{

int i,j,k

char data, parent

CTreeNode *root,*parentNode,*node

printf("请输入树的节点的数量:")

scanf("%d",&j)

fflush(stdin)//清除键盘缓存

if(j==0)

return NULL//空树,结束函数

printf("请输入根节点的数据:")

scanf("%c",&data)

fflush(stdin)

root=(CTreeNode *)malloc(sizeof(CTreeNode))

root->data=data

for(i=0i<DEGREEi++)

root->children[i]=NULL

for(i=2i<=ji++)//依次输入每个节点的信息

{

printf("请输入第%d个节点的数据及其父节点的数据:",i)

scanf("%c%c",&data,&parent)//切记当以%c号格式输入数据时候,不要输入空格

fflush(stdin)

node=(CTreeNode *)malloc(sizeof(CTreeNode))

node->data=data

for(k=0k<DEGREEk++)

node->children[k]=NULL

//printf("验证parent=%c\n",parent)

parentNode=SearchCTree(root,parent)//查找指定数据的节点

for(k=0k<DEGREEk++)

{

if(parentNode->children[k]==NULL)

{

parentNode->children[k]=node

break

}

}

}

return root

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@树的遍历@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

void preorderTree(CTreeNode *ctroot)//遍历每个节点的操作就是输出该节点的data域

{

CTreeNode *ctchild

int i

printf("%c",ctroot->data)//先遍历根节点

for(i=0i<DEGREEi++)//依次先序遍历孩子节点

{

ctchild=ctroot->children[i]

if(ctchild==NULL)

break//孩子节点遍历结束,退出

else

preorderTree(ctchild)//递归先序遍历

}

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@结构体类型@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

//树队列结构体类型

typedef struct nodeCTree

{

CTreeNode *CTreeArray[MAX_NODE_NUM]//结构体指针数组,存放节点的地址

//struct nodeCTree *next

int CTreeFront,CTreeRear

}QueueCTree

//二叉树队列结构类型

typedef struct nodeBTree

{

BTreeNode *BTreeArray[MAX_NODE_NUM]//结构体指针数组,存放节点的地址

//struct nodeBTree *next

int BTreeFront,BTreeRear

}QueueBTree

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@初始化队列@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

//初始化树队列

void initQueueCTree(QueueCTree *&q)

{

q=(QueueCTree *)malloc(sizeof(QueueCTree))

q->CTreeFront=q->CTreeRear=0

}

//初始化二叉树队列

void initQueueBTree(QueueBTree *&q)

{

q=(QueueBTree *)malloc(sizeof(QueueBTree))

q->BTreeFront=q->BTreeRear=0

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@入队列@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

//树队列元素入队

int addQueueCTree(QueueCTree *&q,CTreeNode *ctroot)//

{

if((q->CTreeRear+1)%MAX_NODE_NUM==q->CTreeFront)//队满

return 0

q->CTreeRear=(q->CTreeRear+1)%MAX_NODE_NUM

q->CTreeArray[q->CTreeRear]=ctroot

return 1//入队列

}

//二叉树队列元素入队

int addQueueBTree(QueueBTree *&q,BTreeNode *btroot)

{

if((q->BTreeRear+1)%MAX_NODE_NUM==q->BTreeFront)//队满

return 0

q->BTreeRear=(q->BTreeRear+1)%MAX_NODE_NUM

q->BTreeArray[q->BTreeRear]=btroot

return 1//入队列

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@队列判空@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

//树的队列判空

int QueueCTreeEmpty(QueueCTree *q)

{

return(q->CTreeFront==q->CTreeRear)

}

//二叉树队列判空

int QueueBTreeEmpty(QueueBTree *q)

{

return(q->BTreeFront==q->BTreeRear)

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@出队列@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

//树队列元素出队

CTreeNode *delQueueCTree(QueueCTree *&q)

{

CTreeNode *ctroot

if(q->CTreeFront==q->CTreeRear)//队空

return NULL//返回空指针

q->CTreeFront=(q->CTreeFront+1)%MAX_NODE_NUM

ctroot=q->CTreeArray[q->CTreeFront]

return ctroot//返回节点

}

//二叉树队列元素出队

BTreeNode *delQueueBTree(QueueBTree *&q)

{

BTreeNode *btroot

if(q->BTreeFront==q->BTreeRear)//队空

return NULL//返回空指针

q->BTreeFront=(q->BTreeFront+1)%MAX_NODE_NUM

btroot=q->BTreeArray[q->BTreeFront]

return btroot//返回节点

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@树转化为二叉树@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

void TreeToBTree(CTreeNode *ctroot,BTreeNode *&btroot)//树转化为二叉树ctroot指向树的根节点,btroot,指向二叉树的跟

{

QueueCTree *VisitedCTreeNodes

QueueBTree *VisitedBTreeNodes//辅助队列

initQueueCTree(VisitedCTreeNodes)

initQueueBTree(VisitedBTreeNodes)//初始化队列

CTreeNode *ctnode

BTreeNode *btnode,*p,*LastSibling

int i

btroot=(BTreeNode *)malloc(sizeof(BTreeNode))//添加开辟内存空间语句

btroot->data=ctroot->data//树的根节点作为二叉树的根节点

btroot->lchild=btroot->rchild=NULL

addQueueCTree(VisitedCTreeNodes,ctroot)//树的跟节点入队

addQueueBTree(VisitedBTreeNodes,btroot)//二叉树的跟节点入队

while(!QueueCTreeEmpty(VisitedCTreeNodes))

{

ctnode=delQueueCTree(VisitedCTreeNodes)//树节点出队

btnode=delQueueBTree(VisitedBTreeNodes)//二叉树节点出队

for(i=0i<DEGREEi++)//访问节点所有的孩子节点

{

if(ctnode->children[i]==NULL)//孩子节点访问完毕

break

p=(BTreeNode *)malloc(sizeof(BTreeNode))//分配二叉树节点

p->data=ctnode->children[i]->data

p->lchild=p->rchild=NULL

if(i==0)

btnode->lchild=p//长子,作为父节点的做孩子

else

LastSibling->rchild=p//作为上一个兄弟节点的右孩子

LastSibling=p

addQueueCTree(VisitedCTreeNodes,ctnode->children[i])//树节点进队列

addQueueBTree(VisitedBTreeNodes,p)//二叉树节点进门队列

}

}

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@二叉树的遍历@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

void Preorder(BTreeNode *T)

{

if(T)

{

printf("%2c",T->data)

Preorder(T->lchild)

Preorder(T->rchild)

}

}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@主函数调用@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

int main()

{

CTreeNode *Tree

BTreeNode *BTree

printf("创建一棵树\n")

Tree=CreateSTree()

printf("树的先序遍历结果为:")

preorderTree(Tree)

printf("\n")

TreeToBTree(Tree,BTree)

printf("转换后的二叉树,先序遍历的结果为:")

Preorder(BTree)

printf("\n")

return 0

}

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define OVERFLOW -2

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define NULL 0

typedef int status

typedef struct bitnode{ /*二叉树的结点*/

char data

struct bitnode *lchild,*rchild

}bitnode,*bitree

bitree t

status createbitree(bitree *t) /*按先序次序输入值建立二叉树*/

{

char ch

scanf("%c",&ch)fflush(stdin)/*清除缓存区里的回车*/

if(ch=='*') *t=NULL/*这里以星号作为结束标志*/

else{

if(!(*t=(bitnode *)malloc(sizeof(bitnode))))exit(OVERFLOW)

(*t)->data=ch

createbitree(&((*t)->lchild))

createbitree(&((*t)->rchild))

}

return OK

}

status visit(char ch) /*对二叉树每个结点元素的访问操作*/

{

printf("%c",ch)

return OK

}/*你这个visit函数好像没什么作用?可以删掉*/

status preordertraverse(bitree t) /*按先序访问二叉树*/

{

if(t)

{

printf("%c",t->data)

if(preordertraverse(t->lchild))

if(preordertraverse(t->rchild))return OK

return ERROR

}else return OK

}

status jh(bitree t)

{

bitree x

x=t->lchild

t->lchild=t->rchild

t->rchild=x

return OK

}

status exchange(bitree t) /*交换二叉树中所有结点的左、右子树*/

{

if(t)

{

jh(t)

if(jh(t->lchild)) /*这里是最重要的地方,你好像写错了吧*/

if(jh(t->rchild))return OK

return ERROR

}else return OK

}

void main()

{

printf("input to create binary tree:\n")

createbitree(&t)/*按先序建立二叉树*/

printf("create ok")/*提示createbitree函数没有出问题*/

exchange(t)/*交换每个结点的左、右子树*/

printf("\n")/*输出一个换行*/

preordertraverse(t)/*按先序访问修改后的二叉树*/

getch()

}

我试过了,可以