教案1-C语言实验报告_第1页
教案1-C语言实验报告_第2页
教案1-C语言实验报告_第3页
教案1-C语言实验报告_第4页
教案1-C语言实验报告_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教案1-C语言实验报告

第一篇:教案1-C语言实验报告机电学院机械专业—XXC语言程序设计(A)(2011-2012-1)实验报告1教学班级:机械091学号:09姓名:熊烨华课程教师:胡春安实验辅导教师:胡春安江西理工大学1机电学院机械专业—XX教案1Pxx-yy1:/*Pxx-yy1表示第xx页第yy1题*/实验前的源程序:(P16-11)#includeusingnamespacestd;voidmain(){inta,b,c,d;coutcin>>a;coutcin>>b;c=a+(b%7);&&少了分号if(ccoutelse{d=c-7;&&少了分号cout[Error]C:\DocumentsandSettings\Administrator\MyDocuments\C-Free\Temp\未命名1.cpp:9:parseerrorbeforecharacter0311实验后的源程序:#includeusingnamespacestd;voidmain(){inta,b,c;coutcin>>a;coutcin>>b;c=a+(b%7);if(c>=7)c=c-7;cout江西理工大学机电学院机械专业—XX方法二:#includeusingnamespacestd;voidmain(){inta,b,c;coutcin>>a;b=a%7;switch(b){case0:coutcase1:coutcase2:coutcase3:coutcase4:coutcase5:coutcase6:cout}Pxx-yy2:Pxx-yy3:江西理工大学

第二篇:实验1-C语言实验报告C语言程序设计(A)(2011-2012-1)实验报告1教学班级:机械094学号:01姓名:谭亮恩课程教师:曹瑛实验辅导教师:曹瑛江西理工大学P6-4:/*P6-4表示第6页第四题*/intmain(){floatr,s;r=15.5;s=2*3.14*r;printf("r=%4.2f,s=%f",r,s);return0;}结果是:r=15.5s=97.34P32-3-1:/*P32-3-1表示第6页第四题第一小题*/#includeintmain(){printf("this\tis\tc\bC\tprogram.\rT\n");return0;}结果是:ThisisCprogram.P32-3-2:/*P32-3-2表示第6页第四题第二小题*/#includeintmain(){printf("*\abd\bc\t\r\*ABCD\105\x46*");return0;}结果是:\*ABCDEF*\江西理工大学

第三篇:C语言实验报告C语言第一学期实验:第1次实验:时间2010-9-15项目名称:创建第一个C语言程序实验程序:2、在菜单中选择“文件”“新建”,在“工程”选项卡中选择“Win32ConsoleApplication”,输入一个名称,点“确定”,新建一个新的工程。3、再选择“文件”“新建”命令,在“文件”选项卡中选择“C++SourceFile”,输入一个名称,点“确定”,新建一个C++源文件。由于C++全面支持C,因此可以在此输入C语言的源代码,进行实验。4、在代码框中输入如下代码:#includevoidmain(){inta,b,sum;a=123;b=456;sum=a+b;printf("sumis%d\n",sum);}5、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:sumis579讨论:本实验让我们了解了如何创建一个C语言的控制台应用程序,并学会了C语言程序的基本构架和个别特殊语句如“main”“printf”等。实验地点:3B-203第2次实验:时间:2010-10-6项目名称:顺序结构程序设计实验(书89页4.9题,先把题抄下来)实验程序:(自己写代码)2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„讨论:„„实验地点:3B-203第3次实验:时间:2010-10-27项目名称:选择语句switch的使用(书111页5.6题,先抄题)(自己写代码)2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„讨论:„„实验地点:3B-203第4次实验:时间:2010-11-17项目名称:循环语句for的使用(书129页6.1,先抄题)(自己写代码)2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”实验结果:„„讨论:„„实验地点:3B-203第5次实验:时间:2010-12-8项目名称:数组的应用(书134页例题7.3,先抄题)2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”实验结果:„„讨论:„„实验地点:3B-203第二学期实验:第1次实验:时间2011-2-25项目名称:编写函数(在主函数中输入两个数,分别调用四个自定义函数,实现两个数的加、减、乘、除并输出结果。)intadd(intx,inty);intsub(intx,inty);intmul(intx,inty);floatdiv(intx,inty);intc,a,b;floatd;scanf("%d,%d",&a,&b);c=add(a,b);printf("%d+%d=%d\n",a,b,c);c=sub(a,b);printf("%d-%d=%d\n",a,b,c);c=mul(a,b);printf("%d*%d=%d\n",a,b,c);d=div(a,b);printf("%d/%d=%f\n",a,b,d);}intadd(intx,inty){returnx+y;}intsub(intx,inty){}returnx-y;intmul(intx,inty){}{returnx*y;floatdiv(intx,inty)return(float)x/(float)y;}2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„讨论:„„。实验地点:3B-201第2次实验:时间:2011-3-11项目名称:指针的应用(书278页10.3,先抄题)2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„讨论:„„实验地点:3B-203第3次实验:时间:2011-4-8项目名称:顺序结构程序设计实验(书318页11.3题,先把题抄下来)(自己写代码)2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„讨论:„„实验地点:3B-2039.1#include#defineS(A,B,T)T=A;A=B;B=Tvoidmain(){}9.6#include#definePRprintf#defineNL"\n"inta,b,t;scanf("%d,%d",&a,&b);S(a,b,t);printf("%d,%d\n",a,b);#defineF"%6.2f"#defineF1FNL#defineF2FFNL#defineF3FFFNLvoidmain(){floata,b,c;a=1;b=2;c=3;PR(F1,a);PR(F2,a,b);PR(F3,a,b,c);}作业:#include#includevoidmain(){voidfun1(floata,floatb,floatc);voidfun2(floata,floatb,floatc);voidfun3(floata,floatb,floatc);floata,b,c,disc;scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;if(disc>0)fun1(a,b,c);elseif(disc==0)fun2(a,b,c);elsefun3(a,b,c);}voidfun1(floata,floatb,floatc){floatd=b*b-4*a*c;floatx1,x2;x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf("%f,%f\n",x1,x2);}voidfun2(floata,floatb,floatc){floatd=b*b-4*a*c;floatx1,x2;x1=x2=(-b)/(2*a);printf("%f,%f\n",x1,x2);}voidfun3(floata,floatb,floatc){printf("此函数无解");}P278#includevoidmain(){voidaa(intx[],intn);inti,a[10];for(i=0;iprintf("交换前:\n");for(i=0;iprintf("交换后:\n");for(i=0;iprintf("%d,",a[i]);printf("\n");}voidaa(intx[],intn){int《指针》C语言实验报告C语言实验报告《指针》学号:__________姓名:__________班级:__________日期:__________指导教师:__________成绩:__________实验五指针一、实验目的1、掌握指针的概念、会定义和使用指针变量2、掌握指向数组的指针变量3、掌握字符串指针的'使用二、实验内容1、输入3个字符串,按由小到大的顺序输出。(习题10.2)2、写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(习题10.6)3、完善程序,要求使用函数功能:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。#include#includelongfun(char*p)填写程序voidmain()chars[6];longn;printf("Enterastring:");gets(s);n=fun(s);printf("%ld",n);三、实验步骤与过程四、程序调试记录

第一篇:二叉排序树节点的插入和删除实验设计报告(用C语言实现)二叉排序树节点的插入和删除实验设计报告1程序功能描述:用二叉树的所学知识建立二叉排序树,对已建立的排序二叉树进行遍历(先序,中序,后序),插入,查找,删除。2主要数据结构描述:二叉排序树若不为空树,那么相比于其他的树,它具有一下特性:1.、左儿子永远小于双亲结点;2、右儿子永远大于双亲结点。其中结点由一个存放信息的空间和两个指针构成。3程序结构描述:以C语言为工具,在主函数外部定义二叉排序树的遍历(先序,中序,后序),插入,删除函数,在主函数中调用,其中主函数中用switch…case…结构,有选择性的进行功能的实现。4算法描述:二叉排序树插入结点的算法:1若建立的二叉排序树中已有与欲插入的数相同的结点则无须插入;2以while(p)控制循环变量,若欲插入的数比根结点小的话,执行P=P->lchild;若大于p->data;则执行P=P->rchild;,直至p为空。此过程中一直用指针F记录前一步p的位置。3在第2歩确定了的位置的基础上进行插入,若与插入的数小于F->data,则执行F->lchild=S;若大于F->data,则执行F->rchild=S;二叉排序树的建立:通过对插入函数的调用即T=InsertBST(T,k);以while(k!=-1)控制循环,递归的进行插入直至生成二叉排序树。二叉排序树的遍历算法:1、先序遍历:先输出根结点的信息;然后调用函数PreOrderTraverse(T->lchild),递归的输出左子树的信息;最后调用函数PreOrderTraverse(T->rchild),递归输出有子树的信息。2、中序遍历:先调用函数PreOrderTraverse(T->lchild),递归的输出左子树的信息;然后输出根结点的信息;最后调用函数PreOrderTraverse(T->rchild),递归输出有子树的信息。3、后序遍历:先调用函数PreOrderTraverse(T->lchild),递归的输出左子树的信息;然后调用函数PreOrderTraverse(T->rchild),递归输出有子树的信息,最后输出根结点的信息。二叉排序树的删除算法:通过*f,*p,*q,*c;四个指针,先对二叉排序树查找,用f,q指针跟谁p指针,通过q->data=p->data,掩盖与删除的信息;再借助指针c,通过语句f->lchild=c和free(p)或f->rchild=c和free(p),删除结点p,此时结点的删除得以实现。5程序测试方案与测试结果描述:功能1:二叉树的遍历输入节点信息:36841-1;先序遍历31648中序遍历13468后序遍历14863截图如下:功能2:向原有的二叉树中插入一个结点插入2插入后遍历如下:先序遍历:312648中序遍历:123468后序遍历:214863截图如下:功能3:删除一个结点:删除4删除后遍历结果如下:先序遍历:31268中序遍历:12368后序遍历:21863截图如下:功能0:输入0显示:退出。截图如下:

第二篇:实验报告:二叉树实验报告二叉树一实验目的1、进一步掌握指针变量,动态变量的含义;2、掌握二叉树的结构特性以及各种存储结构的特点及适用范围。3、掌握用指针类型描述、访问和处理二叉树的运算。4、熟悉各种存储结构的特征以及如何应用树结构解决具体问题。二实验原理树形结构是一种应用十分广泛和重要的非线性数据结构,是一种以分支关系定义的层次结构。在这种结构中,每个数据元素至多只有一个前驱,但可以有多个后继;数据元素之间的关系是一对多的层次关系。树形结构主要用于描述客观世界中具有层次结构的数据关系,它在客观世界中大量存在。遍历二叉树的实质是将非线性结构转为线性结构。三使用仪器,材料四实验步骤【问题描述】建立一个二叉树,请分别按前序,中序和后序遍历该二叉树。【基本要求】从键盘接受输入(按前序顺序),以二叉链表作为存储结构,建立二叉树(以前序来建立),并采用递归算法对其进行前序,中序和后序遍历,将结果输出。【实现提示】按前序次序输入二叉树中结点的值(一个整数),0表示空树,叶子结点的特征是其左右孩子指针为空。五实验过程原始记录1基本数据结构描述;2函数间的调用关系;3用类C语言描述各个子函数的算法;附录:源程序。六试验结果分析将实验结果分析、实验中遇到的问题和解决问题的方法以及关于本实验项目的心得体会,写在实验报告上。

第三篇:家谱的设计与实现(二叉树)家谱的设计与实现(树,查找)家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下:(1)家谱中每个成员的信息包括:姓名、性别。(2)家谱祖先数据的录入(树的根结点)。(3)家庭成员的添加:即添加某人的儿女(包括姓名和性别),儿女的数目由控制台端给出,然后输入相应的儿女姓名和性别(此处所有儿女的姓名不能重名)。(4)家庭成员的修改:可以修改某一成员的姓名。(5)家庭成员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。(6)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。#include#include#include#include#defineMAX10typedefstructnode{//定义data存储结构charname[MAX];//姓名charsex;//性别intgeneration;//代目}node;typedefstructft{//创建结构体structnodel;//家谱中直系家属structft*brother;//用来指向兄弟structft*child;//用来指向孩子}ft;ft*root;//root是结构体ft的指针ft*search(ft*p,charch[])//搜索指针函数{ft*q;if(p==NULL)returnNULL;//没有家谱,头指针下为空if(strcmpi(p->,ch)==0)returnp;//家谱不为空,头指针下有这个人if(p->brother){q=search(p->brother,ch);//在兄弟中找if(q)returnq;//找到}if(p->child){q=search(p->child,ch);//在孩子中找if(q!=NULL)returnq;}returnNULL;//没有找到}ft*parent(ft*p,ft*q,int*flag)//通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子{if(p==NULL)returnNULL;//没有家谱,头指针下为空if(p->child==NULL){flag=0;returnNULL;}else{if(p->brother==q){*flag=1;returnp;}else{if(p->child==q){*flag=-1;returnp;}else{if(p->brother!=NULL){parent(p->brother,q,*&flag);}if(p->child!=NULL){parent(p->child,q,*&flag);}}}}}intgeneration(ft*p,charch[])//获得搜索到的成员的代目的返回值{ft*q;if(p==NULL)returnNULL;}if(strcmpi(p->,ch)==0)returnp->l.generation;//家谱不为空,头指针下有这个人if(p->brother){q=search(p->brother,ch);//在兄弟中找if(q)returnq->l.generation;//找到}if(p->child){q=search(p->child,ch);//在孩子中找if(q!=NULL)returnq->l.generation;}returnNULL;voidsaves(ft*p,charb[],charc,intd)//建立家谱孩子结点创建结点并对l赋值保存{for(inti=0;[i]=b[i];p->l.sex=c;p->l.generation=d;}voiddisp(ft*n)//搜索到数据的输出{ft*t=NULL;printf("此人姓名:%s性别%c为第%d代\n",n->,n->l.sex,n->l.generation);printf("\n");printf("此人的子女:");//子女输出if(n->child==NULL){printf("此人无子女!");}else{if(n->child->brother==NULL){printf("姓名:%s性别:%c\t",n->child->,n->child->l.sex);}else{printf("姓名:%s性别:%c\t",n->child->,n->child->l.sex);t=n->child->brother;while(t!=NULL){printf("姓名:%s性别:%c\t",t->,t->l.sex);t=t->brother;}}}printf("\n");printf("\n");printf("此人的同辈成员:");//同辈输出if(n->brother==NULL){printf("此人无同辈成员!");}else{if(n->brother->brother==NULL){printf("姓名:%s性别:%c\t",n->brother->,n->brother->l.sex);}else{printf("姓名:%s性别:%c\t",n->brother->,n->brother->l.sex);t=n->brother->brother;while(t!=NULL){printf("姓名:%s性别:%c\t",t->,t->l.sex);t=t->brother;}}}printf("\n");}voidInitTree()//初始化{charb[MAX],c;inta;printf("请输入始祖的姓名性别:");free(root);//释放root(ft)空间root=(ft*)malloc(sizeof(ft));//创建一个ft结构体大小的空间然后强制转换为ft*类型的指针然后赋值给root//这时root指向一个structdictree结构体大小的新空间scanf("%s%c",&b,&c);a=1;//输入姓名,性别root->child=NULL;//清空左右孩子root->brother=NULL;saves(root,b,c,a);//存入结构printf("家谱重构成功!\n");}voidManu(){printf("*********************************************\n");}printf("*****请选择对家谱的操作:*****\n");printf("*****0.退出*****\n");printf("*****1.添加*****\n");printf("*****2.查找*****\n");printf("*****3.修改*****\n");printf("*****4.删除*****\n");printf("*****5.重构*****\n");printf("*********************************************\n");voidAdd()//添加{ft*n,*m,*t=NULL;charb[MAX],c,d[MAX];inti;printf("请输入要添加子女的上一辈的姓名:\n");//判断是否有重名scanf("%s",&d);n=search(root,d);inta=generation(root,d);while(n==NULL){printf("此人不在家谱内,请重新输入姓名:\n");scanf("%s",&d);n=search(root,d);}//孩子信息添加if(n->child==NULL){printf("孩子姓名与性别输入:\n");scanf("%s%c",&b,&c);a++;m=search(root,b);if(m!=NULL){printf("出现重名,添加失败!\n");}else{n->child=(ft*)malloc(sizeof(ft));n->child->brother=NULL;n->child->child=NULL;saves(n->child,b,c,a);printf("添加成功!\n");}}else{n=n->child;while(n->brother!=NULL)n=n->brother;printf("孩子姓名与性别输入:\n");scanf("%s%c",&b,&c);a++;m=search(root,b);if(m!=NULL)printf("出现重名,添加失败!\n");else{t=(ft*)malloc(sizeof(ft));saves(t,b,c,a);t->brother=NULL;t->child=NULL;n->brother=t;printf("添加成功!\n");}}}voidSearch()//查询{ft*n;chard[MAX];}printf("输入姓名,查找相关信息:\n");scanf("%s",&d);n=search(root,d);while(n==NULL){printf("此人不存在,请再次输入:\n");scanf("%s",&d);n=search(root,d);}disp(n);voidChange()//修改{chara[MAX],r[MAX],c;ft*n;printf("请输入要修改人的姓名:");scanf("%s",&a);n=search(root,a);while(n==NULL){}printf("此人不存在,请重新输入姓名:\n");scanf("%s",&a);n=search(root,a);printf("此人存在,请输入新信息:");scanf("%s%c",&r,&c);for(inti=0;[i]=r[i];n->l.sex=c;printf("修改成功!\n");}voidDel()//删除{ft*n,*m;intflag;chard[MAX],a[MAX];printf("请输入要删除人的姓名:");scanf("%s",a);n=search(root,a);while(n==NULL){printf("此人不存在,请重新输入姓名:\n");scanf("%s",&a);n=search(root,a);}printf("\n");printf("此人已找到!\n");printf("\n");m=parent(root,n,&flag);if(flag>0){m->brother=n->brother;printf("删除成功!\n");}elseif(flagchild=n->brother;printf("删除成功!\n");}}intmain(){InitTree();for(;;){system("pause");system("cls");Manu();intchoice;scanf("%d",&choice);switch(choice){case0:exit(0);break;//退出case1:Add();break;//添加case2:Search();break;//查找case3:Change();break;//修改case4:Del();break;//删除case5:InitTree();break;//初始化}}}return0;

第四篇:数据结构实验报告-二叉树的实现与遍历《数据结构》第六次实验报告学生姓名学生班级学生学号指导老师重庆邮电大学计算机学院计算机专业实验中心一、实验内容1)采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。2)输出树的深度,最大元,最小元。二、需求分析遍历二叉树首先有三种方法,即先序遍历,中序遍历和后序遍历。递归方法比较简单,首先获得结点指针如果指针不为空,且有左子,从左子递归到下一层,如果没有左子,从右子递归到下一层,如果指针为空,则结束一层递归调用。直到递归全部结束。下面重点来讲述非递归方法:首先介绍先序遍历:先序遍历的顺序是根左右,也就是说先访问根结点然后访问其左子再然后访问其右子。具体算法实现如下:如果结点的指针不为空,结点指针入栈,输出相应结点的数据,同时指针指向其左子,如果结点的指针为空,表示左子树访问结束,栈顶结点指针出栈,指针指向其右子,对其右子树进行访问,如此循环,直至结点指针和栈均为空时,遍历结束。再次介绍中序遍历:中序遍历的顺序是左根右,中序遍历和先序遍历思想差不多,只是打印顺序稍有变化。具体实现算法如下:如果结点指针不为空,结点入栈,指针指向其左子,如果指针为空,表示左子树访问完成,则栈顶结点指针出栈,并输出相应结点的数据,同时指针指向其右子,对其右子树进行访问。如此循环直至结点指针和栈均为空,遍历结束。最后介绍后序遍历:后序遍历的顺序是左右根,后序遍历是比较难的一种,首先需要建立两个栈,一个用来存放结点的指针,另一个存放标志位,也是首先访问根结点,如果结点的指针不为空,根结点入栈,与之对应的标志位也随之入标志位栈,并赋值0,表示该结点的右子还没有访问,指针指向该结点的左子,如果结点指针为空,表示左子访问完成,父结点出栈,与之对应的标志位也随之出栈,如果相应的标志位值为0,表示右子树还没有访问,指针指向其右子,父结点再次入栈,与之对应的标志位也入栈,但要给标志位赋值为1,表示右子访问过。如果相应的标志位值为1,表示右子树已经访问完成,此时要输出相应结点的数据,同时将结点指针赋值为空,如此循环直至结点指针和栈均为空,遍历结束。三、详细设计源代码:#include#defineMAX100//表示栈的最大容量#defineFULL99//表示栈满#defineEMPTY-1//表示栈空typedefstructTnode//定义结点{chardata;//存储结点数据structTnode*left;//定义结点左子指针structTnode*right;//定义右子指针}Tnode,*Pnode;//声明Tnode类型的变量和指针typedefstructStack//定义栈{Pnodepnode[MAX];//存放数据intp;//栈顶指针}Stack,*Pstack;//定义Stack类型的变量和指针voidPush(Pstackpstack,Pnodepnode)//入栈{}PnodePop(Pstackpstack)//出栈{}PnodeTop(Pstackpstack)//看栈顶元素{}intIsempty(Pstackpstack)//栈判空{}intIsfull(Pstackpstack)//栈满{}voidInitstack(Pstackpstack)//初始化栈if(pstack->p==FULL)elsereturn0;return1;if(pstack->p==EMPTY)elsereturn0;;return1;returnpstack->pnode[pstack->p];returnpstack->pnode[pstack->p--];pstack->p++;pstack->pnode[pstack->p]=pnode;//赋值{}voidInittnode(Pnoderoot,Pnodeleft,Pnoderight,chardata)//初始化结点{}voidPreorderR(Pnodeproot)//递归先序遍历算法{}voidInorderR(Pnodeproot)//递归中序遍历算法{}voidPostorderR(Pnodeproot)//递归后序遍历算法{}voidPreorderI(Pnodeproot,Pstackpstack)//非递归先序遍历算法{Initstack(pstack);//初始化栈while(proot||!Isempty(pstack))//如果栈空并且结点指针空,则结束循环{if(proot){printf("%2c",proot->data);if(proot){}PostorderR(proot->left);PostorderR(proot->right);printf("%2c",proot->data);if(proot){}InorderR(proot->left);printf("%2c",proot->data);InorderR(proot->right);if(proot){}printf("%2c",proot->data);PreorderR(proot->left);PreorderR(proot->right);root->left=left;root->right=right;root->data=data;pstack->p=EMPTY;}}}else{}if(Isfull(pstack))//如果栈满不能执行入栈操作{}Push(pstack,proot);//入栈proot=proot->left;//指针指向左子printf("栈满,不能执行入栈操作!!");return;if(Isempty(pstack))//栈空时不能出栈{}proot=Pop(pstack);//执行出栈操作proot=proot->right;//指针指向右子printf("栈空,不能执行出栈操作!!");return;voidInorderI(Pnodeproot,Pstackpstack)//非递归中序遍历算法{Initstack(pstack);//初始化栈while(proot||!Isempty(pstack))//循环结束条件{if(proot){}else{if(Isempty(pstack)){}proot=Pop(pstack);//出栈printf("%2c",proot->data);//打印数据printf("栈空,不能执行出栈操作!!");return;if(Isfull(pstack)){}Push(pstack,proot);//执行入栈操作proot=proot->left;//指针指向左子printf("栈满,不能执行入栈操作!!");return;}}}proot=proot->right;//指针指向右子voidPostorderI(Pnodeproot,Pstackpstack)//非递归后续遍历算法{}voidmain(){intflags[MAX];//定义标志位栈intp=-1;//初始化标志位栈intflag;//存放标志位Initstack(pstack);//初始化栈while(proot||!Isempty(pstack))//循环结束条件{}if(proot){}else{}proot=Pop(pstack);//指针出栈flag=flags[p--];//相应标志位出栈if(flag==0)//如果标志位为0表示右子还未访问过{}else{}printf("%2c",proot->data);//打印数据proot=NULL;//将结点指针置空flag=1;//将标志位置1,右子已访问flags[++p]=flag;//标志位入栈Push(pstack,proot);//结点入栈if(Isfull(pstack)){}flags[++p]=0;//标志位置0,并入栈Push(pstack,proot);//结点入栈proot=proot->left;//指针指向左子printf("栈满,不能执行入栈操作!!");return;proot=proot->right;//指针指向右子TnodeA,B,C,D,E,F,G;//声明结点变量Stackstack;//声明栈Inittnode(&A,&B,&C,'A');//初始化结点Inittnode(&B,NULL,&D,'B');Inittnode(&C,&E,&F,'C');Inittnode(&D,NULL,NULL,'D');Inittnode(&E,NULL,NULL,'E');Inittnode(&F,&G,NULL,'F');Inittnode(&G,NULL,NULL,'G');printf("你定义的树的结构是:\n");printf("A(B(D)C(EF(G)))\n");printf("=====================下面是遍历结果====================\n");printf("=====================递归先序遍历:====================\n");PreorderR(&A);printf("\n");printf("=====================非递归先序遍历:==================\n");PreorderI(&A,&stack);printf("\n");printf("=====================递归中序遍历:====================\n");InorderR(&A);printf("\n");printf("=====================非递归中序遍历:==================\n");InorderI(&A,&stack);printf("\n");PostorderR(&A);printf("\n");PostorderI(&A,&stack);printf("\n");/*一下是调用相应的函数输出遍历结果*/}printf("=====================递归后序遍历:====================\n");printf("=====================非递归后序遍历:==================\n");五、遇到的问题及解决办法这部分我主要遇到如下两个问题,其内容和解决方法如下所列:执行程序时程序停止运行,其效果如图:解决方法:看到程序停止运行,推测可能的原因:遇到死循环、参数设置不合理或者结构体没有造好。首先对结构体进行了检查,各个成员声明正常无误,在对程序进行调试,程序正常跳出循环,因此最可能是自定义函数的参数设置的不合理,因此对调用的自定义函数进行相应的改动,将参数由具体类型改为指针类型后,程序正常运行。程序不停的输出同一个结点的数据,其效果入图:解决方法:分析运行结果可知,第一不停的输出证明遇到了死循环,第二输出的是同一个结点的数据,表示指针没有按预期进行指向,首先对程序进行调试,发现程序没有添加循环结束条件,添加循环结束条件后,只能输出树的部分结点的数据,对标志位进行修改后,程序运行正常,也能正确输出遍历结果。六、心得体会通过这次作业真的受益匪浅,感触良多:首先,要提高编程能力,必须多动手,多实践,而不是仅仅局限在书本上,更不能眼高手低。眼高手低,懒得动手,这就犯了编程人员的大忌。大一我们开始接触C语言,这是我们接触到的第一种编程语言,但是当时徒有对编程的兴趣,却没有付诸行动,动手少,结果考试险过,通过这次作业,我再次看了C语言课本,边看边写代码,理解快,印象深刻,思维也活跃许多,状态也好,真正的意识到,编程能力需要靠实践来提升。当自己写出意想的程序后,真的有些成就感。再者,在吴老师的指导和要求下,我们改掉了很多的编程坏习惯的同时也养成了良好的编程习惯,另一方面我们态度端正了很多,认真完成好每一项任务,这样无形中提高了对自己的要求,同时也增强了我们的动手能力和编程能力。七、附录运行结果截图。

第五篇:c语言实验二实验报告一、实验目的1、2、3、4、掌握关系表达式和逻辑表达式的使用。掌握选择结构程序设计的一般方法。熟练使用if语句进行程序设计。掌握使用switch语句实现多分支选择结构。二、实验内容有一分段函数如下:编写程序,输入(x实数)的值,输出以如下格式:x=??.??,y=??.??(即小数部分保留2位)程序代码:#include"stdio.h"intmain(){floatx,y;scanf("%f",&x);if(xy=x*x;if(x>=1&&xy=5*x-1;if(x>=10)y=2*x+4;printf("x=%.2f,y=%.2f\n",x,y);return0;}2、从键盘输入三个实数,输出最大数和最小数。样例输入:1.233.455.67样例输出:5.671.23程序代码:#include"stdio.h"intmain(){floata,b,c,max,min;scanf("%f%f%f",&a,&b,&c);if(a>b){max=a;min=b;}else{max=b;min=a;}if(a>c)if(b>c){min=c;}else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论