c语言parent用法

Python094

c语言parent用法,第1张

C++继承是通过定义类时实现的。比如上面的代码段,定义类A时,使A继承其父类B, 方括号内的C是定义的类成员,它与A,B都没有继承关系 正确的关系是:A的parent 是B,而C是A的成员函数

#include <stdio.h>

#include <stdlib.h>

//1 根据二叉树的性质5,结点按完全二叉树来编号,则根据结点编号,

// 就可算出其双亲结点的编号,以及该结点是左孩子还是右孩子,

// 这样一来,就可把该结点的指针赋予双亲结点的相应指针域。

// 怎样找到双亲结点呢?,在输入双亲结点的同时要把结点的指针

// 保存起来。也就是说,要设计一个指针数组,来保存每个结点指针。

// 这样,当输入下层结点时,才能找到它的双亲。

//2 回想单链表的建立过程,单链表建立过程中,只需把当前结点,

// 当成前驱结点,故只需设计一个指针变量即可。

typedef char ElementType

typedef struct node //二叉树链表结点

{

ElementType data

struct node *lchild,*rchild//左、右孩子指针

}BinNode,*BinTree //结点和结点指针的标识符

BinNode * creat(void) //建二叉树链表(返回根结点的指针)

{

int i,j

ElementType x

BinNode *q,*s[20]//结点指针、辅助数组(存放结点的指针,该结点有可能是双亲结点)

BinNode *t=NULL //根结点指针(目前是空树,生成树后要返回根结点指针)

printf("\n 请输入结点编号i和结点值x")

printf("\n 如:1A 2B 3C 4D 5E 7F 00(全为0,输入结束)")

printf("\n 或:1A 2B 3C 4D 6F 7G 00(全为0,输入结束)")

printf("\n 或:1A 2B 3C 5E 7G 15M 00(全为0,输入结束)\n")

scanf("%d%c",&i,&x)//输入结点编号及结点值

while((i!=0)&&(x!=0))

{

q=(BinNode *)malloc(sizeof(BinNode))//申请结点内存

q->data=x //保存数据

q->lchild=NULL

q->rchild=NULL

s[i]=q//s[i]存放第i号结点的指针

if(i==1)//1号结点是根结点

t=q //保存根结点指针,以备返回

else

{

j=i/2 //由该结点号求双亲结点号

if((i%2)==0)

s[j]->lchild=q//i为偶数是左孩子,该结点指针存入双亲结点的左孩子指针

else

s[j]->rchild=q//i为奇数是右孩子,该结点指针存入双亲结点的右孩子指针

}

scanf("%d%c",&i,&x)//继续输入结点编号和结点值

}

return t //返回根结点的指针(二叉链表的指针)

}

void DisplayBinTree(BinTree T)//用缩进表示二叉树

{

BinTree stack[100],p//栈(结点指针数组)、当前结点指针

int level[100] //栈(每层根结点对应的空格 数 )

int flag[100] //栈(flag[]=0,1,2分别表示是根结点、左子树、右子树 )

int top,n,i //栈顶指针,空格个数,循环变量

if(T!=NULL)//若有根结点

{

top=1 //1号结点(根结点 )

stack[top]=T //入栈(保存根结点指针)

level[top]=1 //显示空格的个数

flag[top]=0 //根结点

while(top>0)//有根结点

{

p=stack[top] //取根结点指针

n=level[top] //取显示空格的个数

for(i=1i<=ni++)//显示空格(缩进)

printf(" ")

if(flag[top]==0) //若是根结点

printf("T:%c\n",p->data)//显示根结点

else //不是根结点

{

if(flag[top]==2) //是右子树根结点

printf("R:%c\n",p->data)//显示右子树根结点

if(flag[top]==1) //是左子树根结点

printf("L:%c\n",p->data,top)//显示左子树根结点

}

top-- //显示一个(出栈一个)结点,top-1

if(p->rchild!=NULL)//若有右孩子

{

top++ //保存一个根结点,top+1

stack[top]=p->rchild//保存右子树根结点

level[top]=n+3

flag[top]=2

}

if(p->lchild!=NULL)//若有左孩子

{

top++

stack[top]=p->lchild//保存左子树根结点

level[top]=n+3

flag[top]=1

}

// printf("level[top]=%d\n",level[top])

}

}

}

main()

{

BinNode *T //根结点的指针

T=creat() //建二叉树

printf("\n用缩进表示二叉树的层次(如ppt62所示):\n")

DisplayBinTree(T)

getch()

}

之所以跳过去了,是因为scanf自动附上‘\n’的值了,理论我也讲不清楚

#include <stdio.h>

int main(i)

{

double moheight,faheight,height

char sex,diet,sport

printf("ENTER SEX\n")

scanf("%c",&sex)

printf("ENTER parents height\n")

scanf("%lf%lf",&moheight,&faheight)

if(sex=='m'||sex=='M')

//类似sex=='m'||'M',这样的写法是行不通的,帮你修改下

{

height=(faheight+moheight)*0.54

printf("%lf\n",height)

}

else if(sex=='f'||sex=='F')

{

height=(faheight*0.923 + moheight)/2

printf("%lf\n",height)

//这里也要输出的吧,不能搞性别歧视啊

}

printf("whether like sport\n")

fflush(stdin)

//关键点,加了这个清空缓存,程序就可以正常运行了

scanf("%c",&sport)

if(sport=='y'||sport=='Y')

{

height=height*1.02

printf("%lf\n",height)

}

else

printf("whether good diet\n")

fflush(stdin)

//关键点,加了这个清空缓存,程序就可以正常运行了

scanf("%c",&diet)

if(diet=='y'||diet=='Y')

{

height=height*1.015

}

else

printf("%lf\n",height)

system("PAUSE")

return 0

}