读书人

一个不会断点调试的初学者 寻求帮助 函

发布时间: 2012-06-03 16:59:40 作者: rapoo

一个不会断点调试的菜鸟 寻求帮助 函数不能会主页面了
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<string.h>
#define MAXLEN 100
#define NLAYER 5
typedef char Etype;
typedef struct BiTNode //定义了一个二叉树 lch date rch
{
Etype data[30];
char peiou[100];
int age;
struct BiTNode *lch,*rch;
}BiTNode;
//建立二叉树完成


//申明 二叉树的存储结构为链表
BiTNode *Creat_bt();//创建节点
BiTNode *FindNode(BiTNode *bt,char vv[]);//查询
void Add(BiTNode *bt,char vv[]);//添加
void Change(BiTNode *bt);//修改
void TranslevelPrint(BiTNode *bt);//树状的表示
void Display(BiTNode *bt,char vv[]);//输出显示
void Children(BiTNode *bt);//寻找 孩子
void Parents(BiTNode *bt);//双亲1

void numb(BiTNode *p);

BiTNode *t=NULL;//链表为空
int n,n0,n1,n2;
//申明结束


/* 模仿先序递归遍历方法,建立二叉树 */
BiTNode *Creat_bt()
{

BiTNode *t;
char ch;
int age;
t=(BiTNode *)malloc(sizeof(BiTNode));//创建链表 使用的是链表的作用

printf("请输入信息;姓名 年龄 (没有的话就打个#吧)\n");
scanf("%s %d",t->data,&t->age);
if(t->age>=22)
{
if(strcmp(t->data,"#")!=0)
{
printf("请输入%s的配偶",t->data);
scanf("%s",t->peiou);
t->lch=NULL;//左右孩子为空
t->rch=NULL;
if(strcmp(t->data,"#")==0)
t=NULL;
else
{
printf("输入%s的第一个孩子",t->data);
t->lch=Creat_bt();
printf("输入%s的第二个孩子",t->data);
t->rch=Creat_bt();
}
}
ch=getchar();

}
else
{
t->lch=NULL;//左右孩子为空
t->rch=NULL;

}




} /* 建立二叉树结束*/


void Add(BiTNode *bt,char vv[]) //添加一个人入族谱 通过父亲节点进行添加 貌似比较正规
{
BiTNode *q,*p;
q=FindNode(bt,vv);
if(q->lch==NULL)
{
p=q->lch;
p=(BiTNode *)malloc(sizeof(BiTNode));
printf("请输入要添加的人的姓名");
scanf("%s",p->data);
p->lch=NULL;
p->rch=NULL;
q->lch=p;
}
else if(q->rch==NULL)
{
p=(BiTNode *)malloc(sizeof(BiTNode));
printf("请输入要添加的人的姓名");
scanf("%s",p->data);
p->lch=NULL;
p->rch=NULL;
q->rch=p;
}
else printf("注意 注意 此人需要去计划生育办公室交钱了");
}

BiTNode *FindNode(BiTNode *bt,char vv[]) //(子函数)采用先序递归算法找name为vv的结点
{
BiTNode *p;
p=bt;
if(p==NULL)
return(NULL);
else
{
if(strcmp(p->data,vv)==0)
return(p);
else
{
bt=FindNode(p->lch,vv);
if(bt!=NULL)
return(bt);
else
return(FindNode(p->rch,vv));
}
}
}

void Change(BiTNode *bt) //修改某人的信息
{
char vv[15];
BiTNode *p;
printf("输入要修改的那个人的名字:");
scanf("%s",vv);
p=FindNode(bt,vv);
//有空再添加显示
printf("输入其修改后的名字:");
scanf("%s",p->data);
printf("输入其修改后的年龄:");


scanf("%d",p->age);//年龄也需要再输过
}

void TranslevelPrint(BiTNode *bt)//显示家谱成员
{ //本算法实现二叉树的按层打印
struct node
{
BiTNode *vec[MAXLEN]; // 存放树结点
int layer[MAXLEN]; // 结点所在的层
int locate[MAXLEN]; // 打印结点的位置
int front,rear;
}q; // 定义队列q
int i,j,k;
int nLocate;
j=1;
k=0;
q.front=0; // 初始化队列q队头,队尾
q.rear=0;
printf(" ");
q.vec[q.rear]=bt; // 将二叉树根节点入队列
q.layer[q.rear]=1;
q.locate[q.rear]=20;
q.rear=q.rear+1;
while(q.front<q.rear)
{
bt=q.vec[q.front];
i=q.layer[q.front];
nLocate=q.locate[q.front];
if(j<i) // 进层打印时换行
{
printf("\n");
printf("\n");
j=j + 1;
k=0;
while(k<nLocate)
{
printf(" ");
k++;
}
}
while(k<(nLocate-1)) // 利用结点深度控制横向位置
{
printf(" ");
k++;
}
printf("%s",bt->data);
q.front=q.front + 1;
if(bt->lch!=NULL) // 存在左子树,将左子树根节点入队列
{
q.vec[q.rear]=bt->lch;
q.layer[q.rear]=i + 1;
q.locate[q.rear]=(int)(nLocate-pow(2, NLAYER-i-1));
q.rear=q.rear +1;
}
if(bt->rch!= NULL) // 存在右子树,将右子树根节点入队列
{
q.vec[q.rear]=bt->rch;
q.layer[q.rear]=i + 1;
q.locate[q.rear]=(int)(nLocate + pow(2, NLAYER-i-1));
q.rear=q.rear+1;
}
}
}

void Display(BiTNode *bt,char vv[]) //查看某人的信息
{
BiTNode *cc,*p;
cc=FindNode(bt,vv);
if(cc==NULL) printf("查无此人");
else
{
printf("%s人的生平:\n%d %s",cc->data,cc->age,cc->peiou);
}
}

void Children(BiTNode *bt) //输出某人的儿子
{
char vv[10];
BiTNode *p;
printf("请输入老豆是谁。。。:");
scanf("%s",vv);
p=FindNode(bt,vv);
if(p==NULL) return;
else
{
if(p->lch!=NULL)
{
printf("%s的儿子是%s\t",p->data,p->lch->data);
}
if(p->rch!=NULL)
{
printf("%s的儿子是%s\t",p->data,p->rch->data);
}
}
}

void Parents(BiTNode *bt) //查找双亲
{
/*
BiTNode *p;
char vv[10];
printf("输入姓名");
scanf("%s",vv);
p=FindNode(bt,vv);
if(p!=NULL)

else
printf("不存在");*/
}

void numb(BiTNode *p)
{
if(p==NULL) return;
else
{
numb(p->lch);
{
printf("%s",p->data);
n++;
if(p->lch==NULL && p->rch==NULL) n0++;
if((p->lch==NULL && p->rch!=NULL)||(p->lch!=NULL && p->rch==NULL))
n1++;
if(p->lch!=NULL && p->rch!=NULL) n2++;
} /* 把访问的功能扩大了 */
numb(p->rch);
}
}

//主函数
int main()
{
int k; char ch;
char ww[30];
int yourchoice;
printf("\n=============================================================================\n");
printf("\n------------------------欢迎使用3GZ的家谱查询系统----------------------------\n");
printf("\n---------------(本系统完全符合中华人民共和国计划生育政策)------------------\n");
printf("\n 菜 单 选 择 \n");


printf(" \\ / \n");
printf(" 一:文件操作模块 -->*<-- 二:家谱操作模块 \n");
printf(" 1. 输入家谱记录 /o\\ 5. 查询家族中某人 \n");
printf(" 2. 添加家谱成员 /_\\_\\ 6. 查询某人的孩子 \n");
printf(" 3. 修改家谱成员 /_/_0_\\ 7. 查询某人的双亲 \n");
printf(" 4. 显示家谱成员 /_o_\\_\\_\\ 8. 查询家族中的人数 \n");
printf(" /_/_/_/_/o\\ \n");
printf(" /@\\_\\_\\@\\_\\_\\ \n");
printf(" [_____] 0.退出 \n");
printf("\n=============================================================================\n");
printf("\n-------------------------(对计划生育政策不了解的,请自行通过百度关键字搜索)\n");
printf("\n---------------------------谢谢!!PS:如果不用百度,谷歌也是可以的 o(v)o\n");
printf("\n=============================================================================\n");
printf("请输入你的选择:");
scanf("%d",&yourchoice);
while(!(yourchoice==0||yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6
||yourchoice==7||yourchoice==8))
{
printf("输入选择不明确,请重输\n");
scanf("%d",&yourchoice);
}
while(1)
{
switch(yourchoice)//选择语句
{
case 0:exit(0);
case 1:
{
system("cls");
printf("输入家谱记录:\n");
printf("\n 通过百度关键字搜索可以得知天朝的计划生育政策的规定 \n");
t=Creat_bt();
system("pause");
} break;
case 2:
{
system("cls");
printf("添加家谱成员:\n");
printf("请输入你要添加的那个人的父亲(通过父亲进行添加):\n");
scanf("%s",ww);
Add(t,ww);
system("pause");
}break;
case 3:
{
system("cls");
printf("修改家谱成员:\n");
Change(t);
printf("\n");
system("pause");
}break;
case 4:
{
printf("显示家谱成员:\n");
TranslevelPrint(t);
printf("\n");
system("pause");
}break;
case 5:
{
printf("查询家族中某人:\n");
printf("请输入你要查看的人的姓名");
scanf("%s",ww);
Display(t,ww);
printf("\n");
system("pause");
} break;
case 6:
{
printf("查询某人的孩子:\n");
Children(t);
printf("\n");
system("pause");
} break;
case 7:
{system("cls");
printf("查询某人的双亲:\n");

printf("\n");
system("pause");
} break;
case 8:
{
printf("查询家族中的人数:\n");
numb(t);
printf("\n 家族中人员的总数 n=%d",n);
printf("\n 没有儿子的人数 n0=%d",n0);
printf("\n 有一个儿子的人数 n1=%d",n1);
printf("\n 有两个儿子的人数 n2=%d",n2);
printf("\n");
system("pause");


}break;

}//选择语句结束
}
}//主函数结束


[解决办法]
http://apps.hi.baidu.com/share/detail/32777366
这里有一篇文章详细的介绍了VC6.0集成开发环境下的调试方法,

读书人网 >C语言

热点推荐