第一篇:材料科学基础实验报告三
实验三
铁碳合金平衡组织的显微观察与分析 课程名称:
实验题目:
一、实验目的:
二、实验仪器及材料:
三、实验内容:
四.实验结果及分析:
四.实验结果及分析
第二篇:科学实验报告
凸透镜成像规律实验报告
提出问题:凸透镜成像的规律是什么
所需器材:蜡烛、光具座和光屏
猜想与假设:凸透镜成像的规律分为实像与虚像
步骤:把可发光物放在距凸透镜比较远的地方,然后逐渐移近,观察成像的情况.物距大到什么程度成实像,小到什么时候成虚像,大概不同的凸透镜会有不同,要有一个参照距离才便于研究.实验原理 在物理上 凹镜和凸镜都是利用光的折射的原理成像
现象:物距(u)像距(v)像的性质倒正 大小 虚实
u>2f f u=2f v=2f 倒 等 实 —— f2f 倒 大 实 u=f —— —— —— —— —— u 结论: 1、一焦分虚实,二焦分大小 (一倍焦距以内是虚象,一倍以外是实象,不包括一倍焦距) 2、虚象同侧正,实象异侧倒 (虚象在同一侧,是正立的象,实象在异侧,是倒立的) 3、物小象变大,物大象变小 (物距变小,象变大,物距变大,象变小) 评估:上网验证,结论正确 应用:u>2f f u=2f v=2f 倒 等 实 —— f2f 倒 大 实 幻灯机 u=f —— —— —— —— —— u 伏安法测电阻实验报告 1.伏安法测电阻实验器材:电源、开关、可调电阻、电压表、电流表 各一个,连接导线若 干。以及被测电阻。2.实验步骤: ①电路连接:电压表并联在被测的电阻两端。然后所有的器件都串联后接在电源上。②.闭合开关。 ③记录电压表读数 U1,电流表读数 I1,调节可变电阻。在记录U2 I2,再调节可变电阻。再记录 U3 I3 ④多次测量,取平均值,算出电阻 3.实验总结 洋葱内表皮实验报告(1)在载玻片上_滴一滴清水。 (2)用小刀切一块0.25平方厘米鳞片,用镊子撕下一层洋葱表皮。 (3)放在载玻片的清水中,并用镊子展平。 (4)盖上盖玻片不留气泡,并用红墨水或碘酒进行染色。 (5)观察:若视野中有黑圈说明有气泡,细胞重叠很多说明所撕的表皮太厚,需将装片重做,观察时两眼同时张开。绘生物图时,标线要与底边平行,明暗亮度用小点的浓密表示。 下表皮附近的叶肉内的叶绿体的数量比较少,可以透过较多的光线。 显微镜操作实验报告 1. 调节亮度:由暗调亮,可以用大光圈,凹面镜,调节反光镜的角度。 2. 将临时装片在载物台上适当位置固定好。 3. 低倍物镜对准通光孔,使用粗准焦螺旋将镜筒自上而下的调节,眼睛在侧面观察,避免物镜镜头接触到玻片而损坏镜头和压破玻片。 4. 左眼通过目镜观察视野的变化,同时调节粗准焦螺旋,使镜筒缓慢上移,直至视野清晰为止。 5. 如果在视野中没有被观察对象,可以移动装片,原则为欲上反下,欲左反右。 6. 如果不够清晰,可以用细准焦螺旋进一步调节。 7. 如果需要在高倍物镜下观察,可以转动转换器调换物镜。如果视野较暗,可通过1的方法调节;如果不够清晰,可通过6的方法调节,但是不可以用4的方法。 8. 使用完毕后,请调节转换器,使空镜头孔对着通光孔,将镜筒调至最低后装入镜箱。; 实验课题:观察月相 实验目的:通过对月相的观察,使学生了解月相变化的规律,养成长期观察的习惯。 实验器材:黄色彩纸(每组十五张)、剪刀(每组一个) 实验原理:月球在圆缺变化过程中会出现各种不同的形状。 实验步骤: 1.对月亮在一个月内的变化进行观察并记录 2.根据记录用剪刀剪出不同时间月相的样子 3.制作月相规律图 实验现象:一个月中月相的变化规律是:初二向左弯,初八右半边明亮,十五月圆,二十二左半边明亮,二十八向右弯。经历:新月上弦月圆月下弦月残月的过程。 实验结果:月相的变化有一定的规律性。 实验课题:“环形山”成因模拟实验 实验目的:通过模拟试验,对“环形山”的成因进行猜测,养成学生科学的思考问题的习惯 实验器材:沙子(每组若干)、注射器、胶管(每组一套)、重球(每组一个)、学生自己准备的用具 实验原理:环形山是流星、陨石撞击月球后留下来的。 实验步骤: 1.将注射器连接胶管并把胶管插入沙子底部 2.用力将注射器中的水推出,观察现象 3.用重球砸向沙堆,观察现象并记录 实验现象:注射器中的水会穿出沙堆,形成火山状;重球砸向沙堆,沙堆会出现类似环形山的凹坑。 实验结果:沙堆会出现类似环形山的凹坑。 实验课题:放大镜下的发现 实验目的:知道放大镜的使用方法及其作用。 实验器材:放大镜、报纸、书本、树叶 实验原理:放大镜能把物体的像放大。 实验步骤: 1、用放大镜观察树叶,把看到的记录下来。 2、用放大镜观察报纸、书本,把看到的记录下来。 实验现象:在放大镜下观察到的物体比用肉眼看到的物体更大。 实验结果:放大镜可以把物体的像放大。 实验课题:放大镜的放大倍数 实验目的:知道放大镜把物体放大了多少倍。 实验器材:不同放大倍数的放大镜、布、纸、邮票 实验原理:通过观察、记录和测量,可以算出放大镜的放大倍数。 实验步骤: 1、把放大镜放在有格的纸上或放在书上,看看它能把物体放大多少倍。 2、用放大镜观察布、邮票的某部分,并把观察到的内容记录下来,看看它能把物体放大多少倍。 实验现象:同一放大镜的最大放大倍数是一定的。 实验结果:通过观察、测量和计算,算出了不同放大镜的放大倍数。 实验课题:用放大镜观察晶体 实验目的:了解白糖、食盐等晶体的形状如何 实验器材:白糖、食盐、碱面、味精、玻璃片、放大镜 实验原理:在放大镜下能更清晰地看到晶体的形状。 实验步骤: 1、用放大镜观察白糖,把看到的内容记录下来。 2、用放大镜观察碱面、味精,并把看到的内容记录下来。 3、制作一些较浓的溶液,滴在玻璃片上,待水分自然蒸发后,用放大镜观察它们留下的痕迹,看看又是什么样的。 实验现象:在放大镜下看到的晶体的形状很有规则,有的像雪花,有的是立方体,有的像金字塔。 实验结果:每种晶体的形状都很规则。 实验课题:自制显微镜 实验目的:了解简易显微镜的制作方法 实验器材:放大镜、挂历纸、剪刀、胶水 实验原理:一个放大镜能把另一个放大镜所成的像进一步放大,这样明显提高了放大能力。 实验步骤: 1、上下移动调整两个放大镜之间的距离,直到划到物体最清楚的图像。 2、用挂历纸卷成纸筒。 3、用纸筒和胶带纸把两个放大镜固定下来。 4、试一试:做成后的显微镜是否能把物体的图像放得更大了。 实验现象:自制显微镜能把物体的图像放得更大。 实验结果:自制显微镜的放大倍数明显增加了。 教科版五年级科学下册实验报告 (三)第三单元 时间的测量 实验名称: 用光影来计时 实验器材: 阳光、细木棒、尺、指南针 实验步骤: 1、将一根细木棒竖直插在有阳光的地上。 2、测量记录细木棒的长度和方向。 3、每隔一定的时间重复测量一次。 现象和结论: 上午,阳光下的物体影子会越来越短,正午达到最短,下午物体影子又会逐渐变长。一天中阳光下的物体影子方向从西逐渐向北再向东。阳光下物体的影子、方向随着时间的变化会慢慢地发生变化。实验名称: 滴漏实验 实验器材: 盖上有小孔的饮料瓶、量筒、铁架台、计时器 实验步骤: 1、把一个透明塑料饮料瓶去掉底部,倒过来盛水,在瓶盖上扎一个小孔,让水可以从小孔中缓慢流出。 2、在瓶子里装300毫升的水,下面用量筒接住从瓶子中漏出的水。 3、观察记录从瓶中漏出100毫升的水需要的时间,重复两次。 4、观察记录量筒的水积聚到10毫升和50毫升时,分别需要的时间。 5、观察记录漏完全部300毫升的水需要的时间。 现象和结论: 从瓶中漏出100毫升的水需要的时间基本相同。量筒的水积聚到50毫升的时间比积聚到10毫升所需的时间的5倍还要多。漏完300毫升的水的时间比漏完100毫升水的时间的3倍还要多。水滴漏的速度是不均匀的,会越来越慢。 实验名称: 观察我们的摆 实验器材: 铁架台、线、螺帽、秒表等 实验步骤: 1、利用螺帽和线做一个摆并固定在铁架台上。 2、让摆自由摆动,记录每隔10秒摆动的次数。 3、整理记录有关数据,进行分析。 现象和结论: 同一个摆,相同时间摆动的次数相同。不同的摆,相同时间摆动的次数不同。 实验名称: 摆锤重量与摆的快慢的研究 实验器材: 铁架台、线、螺帽三个、秒表 实验步骤: 1、把细绳固定在挂钩上,下端挂1个螺帽,让摆小幅度自由摆动。 2、测出用1个螺帽做摆锤的摆在15秒内摆动的次数,重复3次。 3、测出用2个螺帽做摆锤的摆在15秒内摆动的次数,重复3次。 4、测出用3个螺帽做摆锤的摆在15秒内摆动的次数,重复3次。现象和结论: 摆的快慢和摆锤的重量无关。 实验名称: 摆绳的长短与摆的快慢的研究 实验器材: 铁架台、线、螺帽、秒表 实验步骤: 1、测出摆绳长是15厘米的摆在15秒内摆动的次数,重复3次。 2、测出摆绳长是30厘米的摆在15秒内摆动的次数,重复3次。现象和结论: 摆的快慢和摆绳的长度有关,同一个摆,摆绳越短摆动越快。实验名称: 金属圆片对摆的快慢的影响 实验器材: 铁架台、线、木条、金属圆片、图钉、秒表 实验步骤: 1、用长木条做一个摆,然后测出15秒内摆动的次数,重复3次。 2、在长木条的最下端固定一块金属圆片,然后测出固定住金属圆片的摆15秒内摆动的次数。 3、在长木条的中段固定一块金属圆片,然后测出固定住金属圆片的摆15秒内摆动的次数。 4、在长木条的最上端固定一块金属圆片,然后测出固定住金属圆片的摆15秒内摆动的次数。 现象和结论: 加金属圆片会影响摆摆动的速度。金属圆片在最下端时摆摆动的速度最慢。 《软件开发技术基础》 实验报告 学院:XX学院 班级:XX 姓名: XX 学号:XX 《软件开发技术基础》实验报告 实验名称:实验一 顺序表的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、掌握顺序表结构的实现方式; 2、掌握顺序表常用算法的实现; 3、熟悉利用顺序表解决问题的一般思路; 4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。 二、实验要求: 1、掌握顺序表的特点及常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务: (1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。 (3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。 2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。 四、程序要求: 1、采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。 2、写出完整的程序并能调试运行。 五、实验结果: 1、顺序表的结果: 2、电话簿的结果: 六、实验中遇到的问题及解决方法: 1.在删除数据的时候如果有两个一样的数时要怎样解决? 解决方法:用while进行判断。 2.在删除操作中,删除函数中的l是指针,所以用->指向,而在主函数中l是结构体,用“.”。3.在查找的时候有一个返回值,而这个返回值是指针,所以在写查找函数的时候要把返回值类型写上。 七、实验心得体会: 一开始不知所措,首先应该有一个大的方向,把主程序编号,再逐步求精,落实到每一个函数的编写。对于c语言要熟练掌握,要熟悉循环等得操作,要熟练掌握顺序表中的插入,删除,查找,的基本函数。在此的基础上灵活使用。附: 1、顺序表的程序: #include struct Seqlist { };Seqlist *init(){ } void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:”);scanf(“%d”,&num);if(num<1)printf(“键入的数据个数错误!n”);Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;int data[MAXSIZE];int length;else { printf(“键入数据为:n”);for(;num>0;num--){ p->length++;scanf(“%d”,p->data+p->length-1); } } } if(p->length==MAXSIZE){ } printf(“数组已满n”);break;getchar();void deletee(Seqlist *p){ } int find(Seqlist *p){ int i=0;printf(“请输入要删除元素的位置:”);scanf(“%d”,&i);if(i<1||i>p->length)printf(“表中没有第%d个元素!n”,i);else { } getchar();for(int j=i;j<=p->length-1;j++)p->data[j-1]=p->data[j];p->length--; } int x;printf(“请输入要查找的数据:”);scanf(“%d”,&x);for(int i=0;i length;i++){ } if(i>=p->length)printf(“数组中没有此数据!n”);if(p->data[i]==x){ } printf(“此数据位于第%d个位置n”,i+1);return i+1;getchar();return 0;void display(Seqlist *p){ } int main(void){ Seqlist *p;for(int i=0;i length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar(); p=init();char flag;printf(“1-插入 2-删除 3-查找 4-显示 0-退出n”);while(1){ printf(“请输入操作:”);switch(flag=getchar()){ case '1':insert(p);putchar('n');break;case '2':deletee(p);printf(“删除后数据为:”);display(p);putchar('n');getchar();break;case '3':find(p);putchar('n');getchar();break;case '4':printf(“显示数据为:”);display(p);putchar('n');break;case '0':free(p);return 0;} } } 2、电话簿的程序: #include string name;string phonenumber;string phone;contact *next;}CNT;class Phonebook { public: Phonebook();CNT *Input();CNT *Turn_to_end();void Add();void Delete();void Showmenu();CNT *Find();void Show_item(CNT *p);void Display();void Modification();private: }; Phonebook::Phonebook(){ head=new CNT;CNT *head; } head->next=NULL;void Phonebook::Show_item(CNT *p){ cout<<“|----姓名----|--电话号码--|-------------地址------------|”< } void Phonebook::Display(){ CNT *p;cout<<“|----姓名----|--电话号码--|-------------地址------------|”< } cout<<“|------------------------|”< CNT *Phonebook::Input(){ } CNT *Phonebook::Turn_to_end(){ } CNT *temp=head;while(temp->next!=NULL){ } cout<<“n”;return temp;temp=temp->next;CNT *temp;temp=new CNT;cout<<“请输入姓名:”;cin>>temp->name;cout<<“请输入手机号码:”;cin>>temp->phonenumber;cout<<“请输入固定电话:”;cin>>temp->phone;temp->next=NULL;cout<<“n”;return temp; void Phonebook::Add(){ } void Phonebook::Delete(){ CNT *p,*q;q=p=head;string data;cout<<“请输入要删除联系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;CNT *temp,*p;temp=Input();p=Turn_to_end();p->next=temp;cout<<“n”;p=p->next) q=p;if(p!=NULL){ q->next=p->next;delete p; } } else cout<<“该信息不存在”< } CNT *Phonebook::Find(){ CNT *p=head;string data;cout<<“请输入要查找或要修改的联系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;cout<<“ 电话簿”< if(p!=NULL)Show_item(p);else } cout<<“不存在该信息”< } int main(){ int select;Phonebook phbook;CNT *p;p=Find();if(p!=NULL){ } cout<<“n”;cout<<“请输入姓名:”;cin>>p->name;cout<<“请输入手机号码:”;cin>>p->phonenumber;cout<<“请输入固定电话:”;cin>>p->phone; phbook.Showmenu();while(1){ cout<<“n请输入要选择的操作(0~6):”;cin>>select;getchar();switch(select){ case 0: exit(0);break;case 1: phbook.Add();break;case 2: phbook.Display();break;case 3: phbook.Delete();break;case 4: phbook.Find();break;case 5: phbook.Modification();break; } } } return 0; 实验名称:实验二 链表的操作 (一)班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、掌握单链表结构的实现方式; 2、掌握单链表常用算法的实现。 二、实验要求: 1、掌握链表的特点及常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、设计一个链表,要求编程实现如下任务: (1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。 (3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。 (4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法: 问题:在查找数据时显示的是一样的? 解决方法:在查找函数前要标明返回值的类型lnode *find。 七、实验心得体会: 首先要把书上的关于单链表的定义理解,在这个的基础上使用它。单链表通过结点在数据后附加后继元素的指针信息,可以更灵活的添加,删除,查找,插入,元素。要清楚指针的指向。首先要定义一个头结点,并且指针域要为空。将各个操作分别编写函数,有利于分块使用而且可以多次使用。附: #include { cout<<“请输入数组的个数(小于50):”;cin>>leng;cout<<“请输入数据:”;for(int i=0;i } for(int j=i;j { if(a[i]==temp){ x=i+1;cout<<“你要查找的数是数组的第”< } } if(x==0)cout<<“数组中没有你要查找的数”;} 实验名称:实验三 链表的操作 (二)班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、熟悉利用线性链表解决问题的一般思路; 2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。 二、实验要求: 1、熟练掌握链表的使用,并能运用其解决些常规问题。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。要求实现菜单、初始化、添加、删除和显示等功能。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法: 1.实验结果版面不好看 解决方法:反复调试执行,每次都对自己不满意的地方进行一些改正。2.怎样比较name与s->name? 解决方法:用string.h中的strcmp函数。3.在传递数据时有问题? 解决方法:返回的值要注意数据类型,是指针还是整数等。 七、实验心得体会: 在应用中可以利用while实现选择,并根据选择用switch来完成选择。为了简化编程,结点插入操作可仅仅在头部进行。单链表的方法使添加操作更加简便。不需要事先分配结点空间,而是在需要时动态的申请,节省了空间。、附: #include void show_menu(){ puts(“1添加 2删除 3查找 4插入 5显示 0退出”);} void show_item(STU *p){ printf(“|编号| 学号 | 姓名 | 电话号码 |n”);printf(“|1 |%-12s|%-12s|%-12s|n”,p->stu_number,p->stu_name,p->stu_phone); } STU *init(){ STU *p;p=(STU *)malloc(sizeof(STU));p->next=NULL;return p;} void display(STU *head){ int i;STU *p;p=head->next;printf(“|编号| 学号 | 姓名 | 电话号码 |n”);for(i=1;p!=NULL;i++,p=p->next){ printf(“|%-4d|%-12s|%-12s|%-12s|n”,i,p->stu_number,p->stu_name,p->stu_phone);} } STU *turn_to_end(STU *head){ STU *p;for(p=head;p->next!=NULL;p=p->next);return p;} STU *putin(){ STU *temp;temp=(STU *)malloc(sizeof(STU));printf(“请输入姓名:”);gets(temp->stu_name);printf(“请输入学号:”);gets(temp->stu_number);printf(“请输入电话号码:”);gets(temp->stu_phone);temp->next=NULL;return temp;} void add(STU *head){ STU *temp,*p;p=head;temp=putin();p=turn_to_end(head);p->next=temp;} STU *find(STU *head,int i){ STU *p;if(i<1) puts(“输入错误”);else { for(p=head;p->next!=NULL&&i>0;i--,p=p->next); if(i>0) { puts(“不存在该结点”); return NULL; } } return p;} STU *find_stu(STU *head,char *data){ STU *p,*q;q=p=head;for(p=head->next;p!=NULL&&strcmp(p->stu_name,data)!=0&&strcmp(p->stu_number,data)!=0&&strcmp(p->stu_phone,data)!=0;p=p->next) q=p;if(p!=NULL) return q;else { puts(“不存在该信息”); return p;} } void delet(STU *head,char *data){ STU *p,*q;p=q=head;q=find_stu(head,data);if(q!=NULL){ p=q->next; q->next=p->next; free(p);} } void insert(STU *head,int i) { STU *p,*q,*temp;q=p=head;if(i<0) puts(“输入错误”);else if(i==0){ temp=putin(); temp->next=p->next; q->next=temp; } else if(find(head,i)!=NULL){ q=find(head,i); p=q->next; temp=putin(); q->next=temp; temp->next=p;} else return;} int main(void){ STU *head,*temp;int selct,node;char data[12];head=init();show_menu();while(1){ printf(“请选择操作:”); scanf(“%d”,&selct); getchar(); switch(selct) { case 1: add(head); putchar('n'); break; case 2: display(head); printf(“请输入要删除学生的学号、姓名或电话号码:”); } scanf(“%s”,data); getchar(); delet(head,data); display(head); putchar('n'); break;case 3: puts(“请输入要查找的数据”); scanf(“%s”,data); getchar(); if(temp=find_stu(head,data)) { show_item(temp->next); } else puts(“ 不存在该信息”); putchar('n'); break;case 4: puts(“请输入要插入结点的位置”); scanf(“%d”,&node); getchar(); insert(head,node); putchar('n'); break;case 5: display(head); putchar('n'); break;case 0: exit(0); break;} } return 0; 实验名称:实验四 栈的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握栈的的定义和运算,了解栈的应用。 二、实验要求: 1、掌握栈的特点及常见算法。 2、参照给定的栈的程序样例,验证给出的栈的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、堆栈的测试和应用。要求: 设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 四、程序要求: 1、栈的长度自行确定。 2、重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果: 六、实验中遇到的问题及解决方法: 七、实验心得体会: 栈是后进先出表,只允许在栈顶进行插入和删除。要掌握顺序栈初始化,出栈,入栈的基本程序,在理解得基础上加以运用。要清楚栈和单链表的区别。附: #include void Sqstack::push(){ int temp;if(top>=maxsize-1){ cout<<“堆栈已满”< cout<<“请输入要进栈数的值”< cin>>temp; top++; *(data+top)=temp;} } void Sqstack::pop(int &e){ if(top>-1){ e=*(data+top); top--; cout< cout<<“堆栈已空”;} cout< i=top; for(;i>=0;i--) cout<<*(data+i)<<“ ”;} else cout<<“空栈”;cout< void Sqstack::modify(){ int temp;cout<<“请输入栈的长度”< maxsize=temp;else cout<<“输入错误栈的长度必须>0”< int main(){ Sqstack test;int temp,select;cout<<“1.进栈 2.出栈 3.显示 4修改栈长度 0.退出”< cout<<“请选择操作:”; cin>>select; switch(select) { case 1: test.push(); break; case 2: test.pop(temp); break; case 3: test.display(); break; case 4: test.modify(); break; case 0: exit(0); break; default: cout<<“输入错误按任意键重新输入”< getch(); break; } } return 0;} 实验名称:实验五 队列的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握队列的定义及其运算,了解队列的应用。 二、实验要求: 1、掌握队列的特点及常见算法。 2、参照给定的队列的程序样例,验证给出的队列的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、队列测试和应用。要求: 设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。 四、程序要求: 1、队列的长度由自行确定。 2、重点理解队列的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果 六、实验中遇到的问题及解决方法: 七、实验心得体会: 队列是只允许在一端进行删除操作的线性表。在操作时会有假溢出的情况出现,可以将存放队列元素的数组守卫相接,形成循环队列。即:rear=(rear+1)%m;Front=(front+1)%m 附: #include typedef struct Temp { int data; struct Temp *next;}T;class Linksqueue { private: T *front,*rear;public: Linksqueue();void Enqueue();void Dequeue(T *);void display();}; Linksqueue::Linksqueue(){ front=rear=new(T);front->next=NULL;} void Linksqueue::Enqueue(){ T *temp;temp=new(T);cout<<“请输入入队元素的值:”< void Linksqueue::Dequeue(T *s){ T *temp;if(front->next!=NULL){ temp=front; front=front->next; *s=*front; cout<<“出队元素的值:n”< delete temp;} else cout<<“队列已空”< void Linksqueue::display(){ T *temp;if(front==rear) cout<<“空队”< cout<<“队列所有元素为 front-> ”; for(temp=front->next;temp->next!=NULL;temp=temp->next) { cout< } cout< cout<<“->rear”< int main(){ Linksqueue temp;T * a;a=new(T);int select;cout<<“1入队 2出队 3显示 0退出”< cout<<“请选择操作:”; cin>>select; switch(select) { case 1: temp.Enqueue(); break; case 2: temp.Dequeue(a); break; case 3: temp.display(); break; case 0: } exit(0); break;default: cout<<“输入错误按任意键重新输入”< getch(); break;} } return 0; 实验名称:实验六 二叉树的生成与遍历 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、熟悉二叉树节点的定义和生成方式; 2、熟悉二叉树链式结构的生成方式; 3、掌握二叉树遍历算法的实现。 二、实验要求: 1、掌握二叉树的常见算法。 2、参照给定的二叉树的程序样例,验证给出的有关二叉树的常见算法,并实现有关的操作。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.设计实现二叉树的建立及遍历算法,要求: (1)编写创建二叉链式存储结构的二叉树程序并输出。(2)编写递归实现二叉树的先序、中序、后序遍历算法。 (3)编写主函数测试以上二叉树的创建和遍历函数。2.假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。 四、实验结果: 五、实验中遇到的问题及解决方法: 调试的时候显示没有错误但是程序运行不出来? 在if语句中的相等要用“==”。要注意!! 六、实验心得体会: 二叉树的遍历有先序,中序,后序遍历。这三种遍历都是用递归的形式实现的。而二叉树的插入结点的算法与许多因素有关,我们要在理解二叉树结构的基础上根据需要来编写程序。我在实验中使用的二叉排序树可以作为静态查找表使用也可以作为动态查找表。附: #include front=1;rear=0;printf(“请输入二叉树的各节点,@表示虚节点,#表示节点:n”);scanf(“%c”,&ch);while(ch!='#'){ putchar(ch); s=NULL; if(ch!='@') { s=(bitree *)malloc(sizeof(bitree));s->data=ch; s->lchild=NULL; s->rchild=NULL; } rear++; Q[rear]=s; if(rear==1)root=s; else {if(s&&Q[front]) if(rear%2==0) Q[front]->lchild=s; else Q[front]->rchild=s; if(rear%2==1) front++; }scanf(“%c”,&ch);} return root;} void preorder(bitree *p){ if(p!=NULL){ printf(“%c”,p->data); preorder(p->lchild); preorder(p->rchild);} return;} void inorder(bitree *p){ if(p!=NULL){ inorder(p->lchild); printf(“%c”,p->data); inorder(p->rchild);} return;} void postorder(bitree *p){ if(p!=NULL){ postorder(p->lchild); postorder(p->rchild); printf(“%c”,p->data);} return;} int yzjd(bitree *t){ if(t==NULL)return(0);if(t->lchild==NULL&&t->rchild==NULL)return(1); return(yzjd(t->lchild)+yzjd(t->rchild));} void main(){ bitree *root;root=CREATREE(); printf(“n先序遍历结果如下:n”);preorder(root);printf(“n中序遍历结果如下:n”);inorder(root);printf(“n后序遍历结果如下:n”);postorder(root);printf(“n叶子节点的个数为:%dn”,yzjd(root)); printf(“n”);} 实验名称:实验七 查找算法实现 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握各种查找算法的特点,测试并验证查找常见算法。 二、实验要求: 1、参照各种查找算法程序样例,验证给出的查找常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.建立有序表,采用折半查找实现某一已知的关键字的查找。 2.利用折半查找算法在一个有序表中插入一个元素,并保持表的有序性。 四、实验结果: 五、实验中遇到的问题及解决方法: 六、实验心得体会: 本实验使用的是折半法查找,优点是查找效率高,在编程的时候要设置low,high,mid,分别表示区间和中间位置的值。 附: #include }; Seqlist * init()int data[MAXSIZE];int length; { } void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:n”);if(num<1){ } int temp;for(int i=1;i length;i++) for(int j=0;j length-i;j++) if(p->data[j]>p->data[j+1]){ } temp=p->data[j];p->data[j]=p->data[j+1];p->data[j+1]=temp;printf(“请输入数据:n”);for(;num>0;num--){ } p->length++;scanf(“%d”,p->data+p->length-1);if(p->length==MAXSIZE){ } printf(“数组已满n”);break;printf(“输入个数有误n”);else Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;scanf(“%d”,&num); } getchar();int binsearch(Seqlist *p){ } void display(Seqlist *p){ } int main(void){ Seqlist *p;char flag;p=init();int i;for(i=0;i length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();int low,high,mid,key;low=0;high=p->length-1;printf(“请输入要查找的数据:n”);scanf(“%d”,&key);getchar();while(low<=high){ } return 0;mid=(low+high)/2;if(key==p->data[mid]){ } else if(key data[mid])high=mid-1;else low=mid+1;printf(“此数据位于第%d位置n”,mid+1);return mid+1; } printf(“1-插入 2-折半法查找 3-显示 0-退出n”);while(1){ } return 0;printf(“请输入操作:”);switch(flag=getchar()){ case '1' : insert(p);break;case '2' : binsearch(p);break;case '3' : printf(“所有数据为:”);display(p);break;case '0' : free(p);return 0;} 实验名称:实验八 排序综合实验 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 参照各种排序算法程序样例,验证给出的排序常见算法。 二、实验要求: 1、掌握各种排序算法的特点,测试并验证排序的常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 输入一组关键字序列分别实现下列排序,并将上述几种排序的算法编写成菜单,根据输入的数字不同执行对应的排序算法(任选两种排序方法实现)。 1、直接插入排序。 2、希尔排序。 3、冒泡排序。 4、直接选择排序。 5、快速排序。 6、堆排序。 7、归并排序。 8、基数排序。 四、实验结果: 五、实验中遇到的问题及解决方法: 怎样实现待排序数据长度从键盘输入? 解决方法:设置一个n,从键盘输入n的值。 六、实验心得体会: 排序的常用方法有直接插入排序,简单选择排序,冒泡排序,快速排序。我在实验中用了冒泡排序和快速排序,冒泡排序的程序比较简单容易理解而快速排序则比较复杂。快速排序要先划分序列然后建立在划分基础上进行排序,这个排序是由递归实现的。但是快速排序的优点是排序比较快。附: #include Seqlist * init(){ Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;} void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:n”);scanf(“%d”,&num);if(num<1) printf(“输入个数有误n”);else{ printf(“请输入数据:n”); for(;num>0;num--) { p->length++; scanf(“%d”,p->data+p->length-1); if(p->length==MAXSIZE) printf(“数组已满n”); } } getchar();} void bublesort(Seqlist *p){ int temp;for(int i=1;i length;i++) for(int j=0;j length-i;j++) if(p->data[j]>p->data[j+1]) { temp=p->data[j]; p->data[j]=p->data[j+1]; p->data[j+1]=temp; } } void insertsort(Seqlist *p){ int i,j,temp;for(i=1;i length;i++){ temp=p->data[i]; j=i; while(j>0&&temp data[j-1]) { p->data[j]=p->data[j-1]; j--; } p->data[j]=temp;} } void display(Seqlist *p){ int i;for(i=0;i length;i++) printf(“%-5d”,p->data[i]);putchar('n');getchar();} int main(void){ Seqlist *p,*q;char flag;p=init();q=(Seqlist *)malloc(sizeof(Seqlist));q->length=0;printf(“1-输入数据 2-直接插入排序 3-冒泡排序 4-显示 0-退出n”);while(1){ printf(“请输入操作:”); switch(flag=getchar()) { case '1' : insert(p);break; case '2' : *q=*p;insertsort(q);printf(“直接插入排序后的数据为:”);display(q);break; case '3' : *q=*p;bublesort(q);printf(“冒泡排序后的数据为:”);display(q);break; case '4' : printf(“原数据为:”);display(p);break; case '0' : free(p);return 0; } } return 0;}第三篇:科学实验报告
第四篇:科教版五年级科学下册实验报告(三)
第五篇:软件技术基础实验报告