java计算器实验报告(精选11篇)
班级:
学号:
姓名:
一、实验目的
1.掌握java图形用户界面(GUI)的设计原理和程序结构 2.能设计复核问题要求的图形用户界面程序 3.掌握常用组件的事件接口
4.应用awt和swing组件进行应用程序设计
二、实验条件
1.计算机一台 2.java软件开发环境
三、实验步骤
1、编写代码:
mport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JCalculator extends JFrame implements ActionListener {
private static final long serialVersionUID =-***457L
private class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent we){
System.exit(0);
}
}
int i;
private final String[] str = { “7”, “8”, “9”, “/”, “4”, “5”, “6”, “*”, “1”,“2”, “3”, “-”, “.”, “0”, “=”, “+” };
JButton[] buttons = new JButton[str.length];
JButton reset = new JButton(“CE”);
JTextField display = new JTextField(“0”);
public JCalculator(){
super(“Calculator”);
JPanel panel1 = new JPanel(new GridLayout(4, 4));
for(i = 0;i < str.length;i++){
buttons[i] = new JButton(str[i]);
panel1.add(buttons[i]);
}
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add(“Center”, display);
panel2.add(“East”, reset);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(“North”, panel2);
getContentPane().add(“Center”, panel1);
for(i = 0;i < str.length;i++)
buttons[i].addActionListener(this);
reset.addActionListener(this);
display.addActionListener(this);
addWindowListener(new WindowCloser());
setSize(800, 800);
setVisible(true);
pack();
}
public void actionPerformed(ActionEvent e){
Object target = e.getSource();
String label = e.getActionCommand();
if(target == reset)
handleReset();
else if(“0123456789.”.indexOf(label)> 0)
handleNumber(label);
else
handleOperator(label);}
boolean isFirstDigit = true;
public void handleNumber(String key){
if(isFirstDigit)
display.setText(key);
else if((key.equals(“.”))&&(display.getText().indexOf(“.”)< 0))
display.setText(display.getText()+ “.”);
else if(!key.equals(“.”))
display.setText(display.getText()+ key);
isFirstDigit = false;
}
public void handleReset(){
display.setText(“0”);
isFirstDigit = true;
operator = “=”;
}
double number = 0.0;
String operator = “=”;
public void handleOperator(String key){
if(operator.equals(“+”))
number += Double.valueOf(display.getText());
else if(operator.equals(“-”))
number-= Double.valueOf(display.getText());
else if(operator.equals(“*”))
number *= Double.valueOf(display.getText());
else if(operator.equals(“/”))
number /= Double.valueOf(display.getText());
else if(operator.equals(“=”))
number = Double.valueOf(display.getText());
display.setText(String.valueOf(number));
operator = key;
isFirstDigit = true;
}
public static void main(String[] args){
new JCalculator();
} }
2、运行结果,见截图
计算测试:123+456=579结果正确,程序无误。
计算测试:10X10X10=1000,结果正确,程序无误。
四、实验总结
通过对计算器窗体的编写我熟悉
关键词:Java;实验教学;教学方法
中图分类号:TP312.1-4 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01
Java语言作为一门面向对象的编程语言,已经成为高校的一门必修课程,在进行Java语言的教学过程中,理论教学面向全体学生,主要采用教师课堂讲解(讲解基本语法,知识内容,编程技巧,学生随堂练习,教师边讲边操作),学生互动的授课方式,让学生掌握基础知识。而实验教学必须辅以实训实习和课程设计来提升教学的深度和广度,让学生将所学理论知识通过实验进行深化,加深理论知识的掌握,同时也锻炼了自己的实践操作能力。在Java语言的整个实验教学过程中,教师要根据学生的实际能力,采用以学生为主体、教师为主导、逐步引导、启发式的教学方法,充分发挥学生自主学习的能力。采用“项目驱动,案例教学,一体化课堂”的教学模式,让学生多进行上机演练,让学生通过动手练习发现问题、提出疑问,首先自己思考解决问题,解决不了再找教师帮助,根据学生提出的问题教师进行综合答疑,最后根据实验过程进行全面总结。这种方法已在本校的实践教学中进行应用,取得了较好的效果。
一、教师需做必要的实验准备
首先,应该充分了解教学大纲的内容,因为教学大纲是教师进行教学的指导棒,它对于理论教学有指导的作用,并且,对于实验教学也有一定的指导意义。也就是说教学大纲无论是理论教学还是实验都是非常重要的。如果要想做好实验前的准备事项,必须充分掌握教学大纲中涉及到的知识点。详细说来,应该设计出实验题目,实验题目要满足两个要求,第一个要求,学生在实验前必须能够掌握必要的基础知识,以便为下一步的学习打下一定的基础。第二个要求,设计的题目要有深度,为开发实用程序提供可能。
其次,作为教师,应该在实验的教学之前备课,备课主要包括实验内容的确定,教学目的的确定。在实验课以前,必须要让学生清楚的知道每次实验课都要做什么、学什么;除此之外,实验内容的设计也是非常重要的,因为实验内容必须围绕大纲,内容必须紧靠大纲,必须使得学生充分了解教学大纲中的重点和难点。另外,作为一个教师,必须在实验课上课前提前把给学生做的题目做一遍以便做到心中有数,在做题过程当中,对于不同的题目难易系数也要做到心中有数,以便学生在做题过程当中遇到问题时能够及时帮助其解决,这样能够节省课堂时间。因为Java的实验性很强,多联系能发现很多问题。在开始上课之前教师还要对实验室机房的机器进行调试,确保机器和软件都能正常运行。
最后,教师应该了解学生状态,做到因材施教。因材施教是教学中非常重要的原则,如果想上好计算机Java语言实验课,这是一个的重要前提条件。不同学生的实际情况不同,有的同学喜欢编程,并且具有一定的编程基础(其他语言),但是,有的同学对编程知识了解的较少,甚至一无所知,这就需要教师在教学过程中采用因材施教的方法,而不能采用填鸭式的一鞭子赶,也就是说,在教学中要避免注入式教学,采用启发性教学。应该启发学生学习Java,让学习的学习动机变成内部动机,使得学生主动学习,主动思考如何解决问题。可以根据学生的情况,将学生分组进行教学,编程基础较好的同学可以去设计一些小项目做一下,基础一般的同学可以联系相对难的题目,基础较差的同学需要巩固基础,多加练习,总结经验,为进一步学习做准备。
二、教师的实验教学方法
对于编程语言的初学者来说,因为Java语言是一门面向对象的课程,所以对于学生而言是相当难理解的。他们缺少编程的思想和模式,编程对学生而言就是新鲜的。所以,在实验课要指导学生在学习过程中逐步建立编程理念和编程模型,要比让学生机械的把程序敲入电脑,查看程序结果修改程序重要的多。因此如何通过实验课提高学生对Java语言的学习兴趣,如何建立编程思想才是教师上实验课应该考虑的重要内容。具体的讲课过程如下:首先简要复习一下理论上所学的知识,加深学生对Java理论知识重点和难点的理解,实验操作需要有扎实的理论知识作基础,只有深入透彻的理解了理论知识才能上好实验课;其次让学生进行预习,针对学生遇到的不好理解,不好掌握的问题,教师要进行重点详细的讲解,然后再针对实验教学计划进行实验课的教学。教师应该布置比较有综合性的题目,将题目用到的重点知识进行讲解,引导学生思考解题思路,留给学生足够的时间自己思考,自己练习,在这其间老师可以进行指导,学生遇到问题,引导学生进行解决,不仅可以加深学生对基本知识的理解,还可以培养学生的编程思路。
三、让学生动手,强化实践环节
当学生掌握了一定的Java编程基础知识以后,学生缺少的是实际的开发经验和全面应用Java技术的能力。该能力可以通过实际项目来锻炼提升,首先对所学知识进行巩固复习,然后通过做项目来获取实际的开发经验,尽快达到实际锻炼的要求。比较典型的实验项目有纸牌游戏,在线购物系统,图书馆系统等,需要学生自己进行课题设计。学生可以几个人一组完成一个课题,每个课题都要有新穎性,在设计性实验中,为了使得学生充分了解自己的进展,把每个作业分成几大块,规定每一个学时中应完成的内容,给出每个块要完成的功能,并给出详细描述,要求学生编写相应代码。学生在实际项目的开发中,不可避免的会遇到各种问题,这就需要教师在教室内巡视,学生一旦遇到问题,教师要给学生进行讲解指导,对于普遍性问题,需要进行归纳总结,统一讲解。这种方法比较符合学生的现状,在实际教学中取得了教的效果,比较值得推广。
四、结束语
Java语言教学重点培养学生面向对象的编程思想和实际的应用开发能力,注重培养学生自主学习能力和独立思考能力,独立解决问题能力,为更深入的学习打基础,教学过程中要采用多媒体,并且引入项目驱动。以上是对Java教学问题的一点简单概述,提出了自己的观点和意见,并实际应用于Java教学,取得了很好的效果。
参考文献:
[1]耿祥义,张跃平.Java 2实用教程(3版)[M].北京:清华大学出版社,2006:95.
(三)班级:
学号:
姓名:
指导老师:
一、实验题目
熟悉Java程序框架 掌握循环语句的用法
二、实验内容
1.编写程序,计算10的阶乘并输出运算结果。
2.编写程序,计算1、2、3...的累加和,条件是和小于50。
3.编写程序在终端打印1~100之间的素数。
4.编写程序,输出下列图案:
*
***
*****
*******
三、实验步骤(给出源程序)1:
public class Test_jc { public static void main(String[] args){
}
} long jc=1;int i;for(i=1;i<=10;){
} jc=jc*i;i++;System.out.println(“jc=”+jc);
2:public class Test_lj {
public static void main(String[] args){
int i;int sum=0;for(i=1;;i++){
}
} sum=sum+i;if(sum>=50)break;}
System.out.println(“sum=”+(sum-i));3:public class Test_su {
} public static void main(String[] args){
} int i,j;label: for(i=1;i<=100;i++){ for(j=2;j
} if(i%j==0)continue label;System.out.print(“ ”+i);4:public class Test_x {
} public static void main(String[] args){
} int i,j;for(i=1;i<=4;i++){ for(j=0;j<2*i-1;j++)System.out.print(“*”);System.out.println();}
四、实验结果(程序运行结果截图)
1:
2:
3:
4:
专业
信息与算科学
班级
112
姓名
刘红军
学号
2011062064
协作队员
实验日期
2013
年 10月30 日
星期
成绩评定
教师签名
批改日期
题目
一、问题提出 4中产品指标如下 X1 =(37,38,12,16,13,12)X2=(69,73,74,22,64,17)X3=(73,86,49,27,68/,39)X4=(57,58,64,84,63,28)
二、模型建立相关数学建立相似矩阵,用传递闭包进行模糊聚类
三、求解方法
四、输出结果
关键词:项目驱动教学法 Java实验课程 改革 应用
【分类号】TP312.1-4
目前,我国大部分高校都设立了Java语言程序设计课程,其教学任务的核心在于培养学生的动手能力和实践能力。Java课程包括理论和实验教学两个方面,着重强调在实践中运用理论知识,通过实践来强化理论。当前,在高校Java实验课程过程中,笔者发现,在实验项目和内容上仍以单一的验证型实验为主,缺乏综合的设计型实验,只强调对已有知识的验证,在这种“非项目式”的教学模式下,学生并没有可以自主、创新的空间。因此,探究项目教学法在Java课程的实验课改革中的应用是一个非常重要的课题。
一、项目驱动式的Java实验课程的特点分析
当前,在Java实验课程中,高校仍然以非项目式的教学模式,与非项目式实验课程针对性、可控性、重复性的特点相比,项目驱动式的Java实验课程具有以下几个特点:
(一)综合性,以项目来驱动的实验教学方式有助于学生在操作和解决问题过程中进行综合性的训练,包括对需求与可行性、设计及后期维护的分析及能力培养,特别是项目驱动的实验课程必须有效得借助于软件工程的理论、步骤进行实验操作,这就间接得帮助学生在Java程序设计中得软件工程知识。
(二)合作性,在项目教学中,学生学习的形式是以小组为单位,小组中学生水平不同、兴趣和特点不同,通过合作学习方式共同参与和完成一项实验项目,加强了學生之间的沟通和交流,有效培养了学生的合作能力和语言表达能力。
(三)系统性,项目驱动式的实验教学要求学生能够系统的掌握Java这一语言程序设计的特定设计规则和操作规则,从整体上把握软件工程的思想,实现理论与实践的无缝对接,使学生通过系统性的实验学习,将来能够自主完成程序的设计与开发。
二、项目驱动式教学法在Java课程的实验课改革中的应用
以项目导入驱动方式进行系统性的实验程序设计训练,是给予学生更多自由发挥空间,培养学生对实验课程的主动性和积极性,提高实验教学效果的重要手段。笔者认为,项目驱动式教学法在Java课程的实验课改革中的应用由以下几个方面组成:
(一)选择实验项目。在实验课准备阶段,教师应当选取具有基础性、针对性、可行性、综合性的软件设计与开发项目。
(二)进行学生分组。项目驱动式的实验教学与非项目式实验教学之间的差异就在于前者强调实验必须具有系统型、设计型的项目,必须由学生合作完成,后者重在验证型的实验,是对已有知识的重复,可以由学生独立完成。此外,教师在进行分组时,还必须考虑每个学生的能力、水平、特点,每组成员一般为3-6人,由组长负责项目并分配任务。这种分组方式,有助于培养学生之间的协作、配合能力,促进学生之间的共同进步。
(三)教师过程引导。在项目实验教学中,学生是主体地位,但是项目完成情况以及质量如何,也与教师在项目过程中引导有着直接的关系。教师首先应当提供项目开发所需要背景材料、项目要求、操作步骤、注意情况等,并在实验过程中,针对学生的共性和个性问题进行有针对性的引导、启发。
(四)项目总结及评价。在项目完成之后,小组组员之间进行交流之后,选出代表进行展示,并就存在的问题和取得的经验进行总结。其次,由教师或者小组之间按照评价标准进行评价。
(五)真实模拟训练。最后,教师可以结合当前市场程序开发需求进行模拟训练,在教师的辅导和启发下,学生根据自己掌握的理论知识和积累的实践经验,通过小组合作、交流,明确项目要求,确定项目难点,分析、解决问题。在项目开发过程中,进一步巩固已学知识,并学习新知识和技能。
总而言之,项目驱动是建立在建构主义理论上的一种教学方法和模式,强调学习者自己建构知识的过程,在实际的Java实验教学过程中,以项目的方式驱动学生在实验中更多运用理论来解决实际问题,这对于提高学生的动手能力、自学能力、创新能力都发挥着至关重要的作用。
参考文献
[1]侯占军,刘泽洪.项目驱动教学法在Java实验课程教学中的应用研究 [J].科技与生活,2010(18).
[2] 朱小英.以项目方式驱动Java实验课程教学的创新 [J].成都大学学报,2008(08).
1.了解LAN中常用的几种传输介质、连接器的性能及各自特点。
2.学习双绞线、同轴电缆网线的制作和掌握网线制作工具,电缆测试仪的使用。
二、实验任务
1.掌握LAN中常用的几种传输介质、连接器的连接方法与实际使用。
2.独立制作一根合格的双绞线或同轴电缆的网线。
三、实验设备
实验所需设备有5类双绞线,RJ-45头,细缆,BNC接头,T型头,端接器、同轴电缆、收发器、AUI电缆、双绞线、同轴细缆压线钳,电缆测试仪,剥线钳、剪刀等。
四、相关基本知识
1.电子电路,数字逻辑电路。
2.微型计算机工作原理,计算机接口技术。
3.计算机网络拓扑结构,网络传输介质等基础知识。
五、实验内容与步骤
(一)实验原理
目前计算机网络的有线通信大多采用铜芯线或光纤作为传输介质。常用的传输介质有同轴粗缆与细缆,无屏蔽双绞线(UTP)、光纤等。网络中计算机之间的信息交换,通过网络终端设备将要传输的信息转化成相关传输介质所需的电信号或光信号,然后通过传输介质、网络设备进行传输。不同的传输介质具有不同的电气特性、机械特性、和信息传输格式,因此,它们也就具有不同的传输方式、传输速率,传输距离等。在组建局域网时,要根据具体情况 (如覆盖范围、应用对象、性能要求、资金情况等)来决定采用何种网络拓扑结构、传输介质及相关的网络连接设备等。
双绞线:双绞线是由两根绝缘金属线互相缠绕而成,这样的一对线作为一条通信链路,由四对双绞线构成双绞线电缆。双绞线点到点的通信距离一般不超过100米。目前,计算机网络上用的双绞线有三类(最高传输率为10 Mbps)、五类线(最高传输率为10 0 Mbps)、超五类线和六类线(传输速率至少为250 Mbps)、七类线(传输速率至少为600 Mbps)。双绞线电缆的连接器一般为RJ-45.
(二)实验步骤
1.首先用压线钳的剪线刀口剪裁出计划需要使用到的双绞线长度。
2.抽出外套层,可以利用压线钳的剪线刀口将线头剪齐,再将线头放到剥线专用的刀口,稍微用力握紧压线钳慢慢旋转,让刀口慢慢划开双绞线的保护胶皮,然后剥掉外套层。
3.排序,根据实际需要按照标准将线排序。
4.整理,排序后应尽量将线头拉直理平,然后用压线钳将多余的线头剪掉。
5.插入水晶头,将排序后的双绞线线头插入部分插入到水晶头中,插入后用力压住双绞线,尽力的将双绞线头向水晶头中推,以保证线头充分的插入水晶头中。
6.压线,经过上述步骤后,只要使用压线钳将线压紧即可。
(三)回答思考题。
1)双绞线、细缆、粗缆三种传输介质各有什么特点
同轴线和双绞线的区别主要是网络拓扑不同,同轴电缆只能是总线型结构,而双绞线则是星型结构。三种介质传输的最大带宽不同,粗缆传输带宽最宽,其次,细缆,最宅的双绞线。不过双绞线抗干扰能力强,可靠性高,传输距离比细缆和粗缆长。
2)A线序和B线序有何区别若不遵循上述标准,是否所做的网线不可用。
两端的线序相同叫直通线,都遵循568B标准,不同类型设备之间连接使用直通线,如网卡到交换机,网卡到ADSL modem,交换机到路由器等;而一端为568B线序,一端为568A线序的为交叉线,即1-3、2-6调换,用于相同设备之间的连接,如两台电脑的网卡连接,交换机与交换机之间的连接,交换机与集线器连接等。
得益于健全的数通产品线,HP ProCurve的无线控制器既包含MSM760zl这样独立的设备,也有以模块形态存在的产品。本次送测的MSM765zl就是这样一个无线控制模块,可以直接安装在多个型号的HP ProCurve以太网交换机上,利用传统的有线网络管控超过200个接入点。实际上,该模块采用的硬件完全符合ProCurve ONE规范所定义的标准,在稳定性、兼容性及售后支持等方面有着良好的保障。
集中控管是无线控制器最核心的功能。只要无线控制器被接入网络,所有接入点都会统一受控于它,确保整个无线网络提供服务的一致性。企业级应用在可用性和可控性上对无线控制器提出了更高的要求,尤其是在安全方面。我们在MSM765zl上看到了认证服务、数据加密和VLAN等多种保障无线局域网安全的功能特性,除了以WPA或WEP的方式对无线网络进行加密、根据用户实施的VLAN映射及控制器/接入点身份验证外,网络边缘还可实施基于802.1x、MAC地址或Web登录认证等准入控制策略,以确保数据安全性与完整性。
与此同时,MSM765zl丰富的访问控制功能为稳固的无线安全提供了良好的补充,各种服务管理策略也令产品的业务应用范围更加宽泛,不仅可以针对不同类型的部署定制强制网络门户,并按用户或地址支持动态内容,还可以通过访问列表的形式允许用户在网络上划分公共区域和受保护区域,实现基于站点、用户组和单个用户三个级别的访问控制,在用户配额和带宽管理上也具备着充分的灵活性和自由度,同时基于标准的RADIUS接口集成了安全的远程认证、授权和计费功能,支持各种免费或收费服务模式,通过跟踪数据量和会话时间的方式对用户进行计费统计,因此能够作为大型多址网络的集中式AAA、强制网络门户和计费功能接口。MSM控制器的零配置服务接口非常适合客户端设备配置,与后端服务能够轻松地进行集成整合,实现即插即用的网络传输到后端服务,并保护热点与NOC之间的验证和管理流量。
控制器将这些针对服务质量、身份认证、加密以及访问策略的设置通过虚拟服务社区(VSC)的方式分发给以Group为组织形式的接入点,有效地简化了提供一致服务的管理流程。统一的策略部署模式将接入点在逻辑上变成一个单纯的物理层,即便是支持不同无线规格的接入点,也可以提供同样的服务。而正如我们之前所描述的,得益于智能型接入点架构的优越性,大量的数据传输可以在接入点与接入点或接入点与有线节点间独立完成,只有NAT、防火墙等功能实现才会让流量通过控制器。高效的流量路径使得控制器的可扩展性大大增强,在从802.11 a/b/g向802.11n进行迁移时最大程度地避免了接口或设备间的带宽瓶颈,帮助用户降低了无线实施的总体拥有成本。
本次实验的名称。
2.问题描述
对本次实验要解决的问题的描述。
例子:处理汉诺塔问题时,描述什么是汉诺塔问题。
3.解决思路
采用什么方法;为什么可以采用这个方法; 例子:处理棋盘覆盖问题时,采用什么方法:采用递归分治的方法处理;
为什么可以采用递归分治方法的原因(P21页图2-6下面一段,理解之后用自己的话表述):由于将棋盘横、纵各一分为二之后,特殊方格必然位于四个小的棋盘之一,那么剩余的其余三个小棋盘是没有方格的,如果采用某种L型骨牌覆盖没有特殊方格的三个小棋盘的中心相连部分(参见图2-6的b),则三个小棋盘都各有1个特殊方格所覆盖。因此,这样处理之后,原来大棋盘覆盖的问题,就转化为四个小棋盘覆盖的问题,因此可以采用分治策略进行递归处理。
4.算法设计与分析
给出算法设计的基本思想,如:伪算法描述,递归方程等。并分析算法的时间复杂度(空间复杂度)。注意,一定要有文字说明。例子:快速排序 伪算法描述
QuickSort(int a[], int p, int r){ 如果待排序数组a[]中只有一个元素则直接返回; 如果待排序数组a[]中不止一个元素,则进行如下处理 {
对数组a[p:r]进行Partition划分,使得a[p:r]以a[p]为标准,划分为三个部分,即:
左半部分a[p:q-1];划分基准a[q]=a[p];右半部分a[q+1:r];
对左半部分快速排序QuickSort(a, p, q-1);
对右半部分快速排序QuickSort(a, q+1, r); } }
例子:0-1背包问题
递归关系或者递归方程。
给出P72页“2.递归关系”中的递归表达式,并给出文字说明。注意:伪算法描述,或者递归方程不一定全部需要。根据问题的不同,只给出伪算法,或者只给出递归方程都可以。两者同时给出也是可以的。
5.程序实现
依据第4部分,给出C语言(其他语言亦可)的程序实现,并进行算法时间(空间)复杂度分析。
程序实现部分要包括:程序代码、程序注释、程序运行结果(或者截图)。
例子:快速排序的partition函数 int Partition(Type a[], int p, int r){
int i=p, j= r+1;
int x = a[p];//x=a[p]是对数组a进行划分的标准;
/* 以下循环将数组a[p:r]以a[p]为标准进行划分,在划分完毕之后,* a[p]调整到数组a[p:r]的中间位置q,有a[q]=a[p];q左边所有的* 元素均小于a[p],即a[p:q-1]中的任意元素都小于a[p];q右边
* 所有的元素均大于a[p],即a[q+1:r]中的元素都大于a[p]。
* /
while(true){ /* i用来从数组a[p:r]的左边向右边扫描,如果a[++i]中的元素总是 * 小于基准元素的,则是符合划分标准的,因此,不用额外处理,* 循环一直继续,直到第一个不满足划分标准的a[++i](即a[++i]>=i)* 出现,或者整个数组a[p:r]扫描完毕(即i while(a[++i] „„ 6.总结 1.顺序表的建立、插入、删除。 2.带头结点的单链表的建立(用尾插法)、插入、删除。 二、提交到个人10m硬盘空间的内容及截止时间 1.分别建立二个文件夹,取名为顺序表和单链表。 2.在这二个文件夹中,分别存放上述二个实验的相关文件。每个文件夹中应有三个文件(.c文件、.obj文件和.exe文件)。 3.截止时间:12月28日(18周周日)晚上关机时为止,届时服务器将关闭。 三、实验报告要求及上交时间(用a4纸打印) 1.格式: 《计算机软件技术基础》上机实验报告 用户名se××××学号姓名学院 ① 实验名称: ② 实验目的: ③ 算法描述(可用文字描述,也可用流程图): ④ 源代码:(.c的文件) ⑤ 用户屏幕(即程序运行时出现在机器上的画面): 2.对c文件的要求: 程序应具有以下特点:a 可读性:有注释。 b 交互性:有输入提示。 c 结构化程序设计风格:分层缩进、隔行书写。 3.上交时间:12月26日下午1点-6点,工程设计中心三楼教学组。请注意:过时不候哟! 四、实验报告内容 0.顺序表的插入。 1.顺序表的删除。 2.带头结点的单链表的插入。 3.带头结点的单链表的删除。 注意:1.每个人只需在实验报告中完成上述4个项目中的一个,具体安排为:将自己的序号对4求余,得到的数即为应完成的项目的序号。 例如:序号为85的同学,85%4=1,即在实验报告中应完成顺序表的删除。 2.实验报告中的源代码应是通过编译链接即可运行的。 计算机科学与技术学院 《计算机图形学》实验报告 班级: 211923班 学号: 21190928 姓名: 林星宇 2021-2022学年第1学期 实验项目1 边标志算法的实现 实验性质 □演示性实验 验证性实验 □操作性实验 综合性实验 实验地点 计算机楼B212 机器编号 一、实现的功能 编写应用程序,采用鼠标输入顶点的方法确定待填充多边形(多边形最后一点双击);实现边标志算法完成对该多边形的填充,要求 完成使用自己学号的后四位数字对多边形内部进行填充。 二、采用的图形学算法及实现 (算法的实现函数是什么(函数名,参数,返回值,函数功能等)以及采用了哪些数据结构(数组,链表等)) 要求使用边标志算法的原理和实 现方法,所以使用了EdgeMarkFill函数,即边标志算法: void CMFCDrawTestView::EdgeMarkFill(CDC* pDC, CArray pDC为设备环境变量指针,plist为多边形点表,color为传入的RGB()值。 int zima[16][32]为学号后4位二维数组。 X1,x2,y1,y2分别为多边形上的最小最小大,y值 三、采用的交互方式及实现 (采用了哪些交互方式来完成绘制,这些交互方式应用到了哪些系统消息,是如何实现的) 边填充的实现:编写应用程序,采用鼠标输入顶点的方法确定待填充多边形(多边形最后一点双击);实现边标志算法完成对该多边形的填充,要求 完成使用自己学号的后四位数字对多边形内部进行填充。 易知,在画完多边形后,即双击左键(OnLButtonUp)后,使用EdgeMarkFill函数。 Type=2时,在OnLButtonUp中,调用EdgeMarkFill(pDC,&(obj->points), RGB(r, 0, 0)); 四、实验结果 (程序的运行结果) 应用程序运行后,标志算法完成对该多边形的填充的图形结果如下: 五、遇到的问题及解决办法 问题1:(在实现过程中遇到了什么样的问题,及采用了何种解决办法) 在获取下x1,x2,y1,y2时,因为Dos界面x、y大小颠倒的原因,获取时出现了问题。 首先,通过for(int i = 1;i < plist->GetSize();i++){ CPoint p = plist->GetAt(i); if(x1 > p.x)x1 = p.x; if(x2 < p.x)x2 = p.x; if(y1 > p.y)y1 = p.y; if(y2 < p.y)y2 = p.y; } 获取x1,x2,y1,y2.在遍历多边形过程中: int count = plist->GetSize(); for(int i = 0;i < count;i++){ CPoint p1 = plist->GetAt(i); CPoint p2 = plist->GetAt((i + 1)% count); if(p1.y == p2.y) continue; if(p1.y > p2.y) { CPoint p;p = p1;p1 = p2;p2 = p; } xs = p1.x; dxs =(p2.x-p1.x)/(double)(p2.y-p1.y); //dys = abs(p2.y-p1.y)/(p2.y-p1.y); for(ys = p1.y;ys!= p2.y;ys += 1) { Ixs = int(xs + 0.5); MARK[ys][Ixs] =!MARK[ys][Ixs]; xs = xs + dxs; } 黄线处即为处理x1,x2,y1,y2的大小。 问题2:通过数组zima[][]来确定多边形区域填充学号后4位时,zima[y ][x ]未%其字长,即zima[y % 16][x % 32]。后改为: for(y = y1;y <= y2;y++) { bool inside = false; for(x = x1;x <= x2;x++) { if(MARK[y][x]) inside =!inside; if(inside) { if(zima[y % 16][x % 32]) pDC->SetPixel(x, y, RGB(255, 0, 0)); } } } 实验项目2 立方体的比例、平移、旋转变换及投影显示 实验性质 □演示性实验 验证性实验 □操作性实验 综合性实验 实验地点 计算机楼B212 机器编号 一、实现的功能 建立立方体的数据模型;编写应用程序,利用菜单和键盘结合的方式完成对立方体的移动、比例和旋转变换,并显示透视或斜二测投影结果。要求应用程序具有如下功能: 1、通过菜单选择的方式,选择对三维空间中的立方体作斜二测投 影或透视投影; 2、通过键盘按键或鼠标移动的方式,完成对三维空间中的立方体 进行平移变换(上下左右前后),比例变换(放大或缩小)以及 旋转变换(绕 x,y,z 轴),并同时显示变换后的投影结果 3、创建对话框,通过对话框设置透视投影时候的投影中心,以及旋转变换时候的旋转轴(可以设置成分别绕 x 轴,y 轴,z 轴进 行旋转) 二、采用的图形学算法及实现 (算法的实现函数是什么(函数名,参数,返回值,函数功能等)以及采用了哪些数据结构(数组,链表等)) 题目要求实现立方体的移动、比例和旋转变换,并显示透视或斜二测投影结果。 对要求1:在菜单选TY项中选择斜二测投影(斜二=1)或透视投影(透视=1)。然后在OnDraw中调用Draw_Cubic(CDC* pDC)画出立方体。 对要求2:在OnKeyDown中调用函数,即在键盘上按“S”使立方体变小,“B”使立方体变大,“←”“→”“↑”“↓”使立方体左右上下移动。 对要求3:在菜单XYZ中选择旋转的x,y,z轴,即x=1或y=1或z=1,然后在OnKeyDown中调用函数,即按键盘上的“T”或“P”. 三、采用的交互方式及实现 (采用了哪些交互方式来完成绘制,这些交互方式应用到了哪些系统消息,是如何实现的) 由题目要求1,易知需要一个函数Draw_Cubic(CDC* pDC)画出立方体的斜二测投影或透视投影并且建立一个菜单栏TY(投影)。即在菜单选TY项中选择斜二测投影(斜二=1)或透视投影(透视=1)。然后在OnDraw中调用Draw_Cubic(CDC* pDC)画出立方体。 由题目要求2:易知直接在OnKeyDown函数上添加使立方体变大变小,前后左右平移的功能。即即在键盘上按“S”使立方体变小,“B”使立方体变大,“←”“→”“↑”“↓”使立方体左右上下移动。 由题目要求3:建立一个菜单XYZ决定旋转的轴。 四、实验结果 (程序的运行结果) 斜二测投影: 斜二测投影平移到左上角: 斜二测投影平移到右下角: 斜二测投影变大: 斜二测投影变小: 斜二测投影变为透视投影: 斜二测投影绕z轴旋转: 五、遇到的问题及解决办法 (在实现过程中遇到了什么样的问题,及采用了何种解决办法) 问题1:一开始建立立方体时,没有建立边表,导致投影困难。 后来建立了点表和对应的边表。 问题2:一开始Draw_Cubic中x1, y1,z1, x2, y2,z2定义为了int型。 实验项目3 用矩形窗口对多边形进行裁剪 实验性质 □演示性实验 验证性实验 □操作性实验 综合性实验 实验地点 计算机楼B212 机器编号 一、实现的功能 编写应用程序实现多边形裁剪。要求首先采用鼠标确定裁剪区域(矩形区域),然 后用鼠标输入待裁剪的多边形(可分别使用鼠标左键和右键来确定裁剪区域和待裁剪 的多边形)。多边形绘制完毕后进行裁剪,以不同颜色显示被裁剪对象位于窗口内(此 部分应保证多边形的完整性)及外部的部分。 二、采用的图形学算法及实现 (算法的实现函数是什么(函数名,参数,返回值,函数功能等)以及采用了哪些数据结构(数组,链表等)) 因为要编写应用程序实现多边形裁剪。要求首先采用鼠标确定裁剪区域(矩形区域),然 后用鼠标输入待裁剪的多边形(可分别使用鼠标左键和右键来确定裁剪区域和待裁剪 的多边形)。所以要使用多边形裁剪算法,即Cut_Top(),Cut_Bottom(),Cut_Left(),Cut_Right()四个函数。 Cut()函数为用绿色显示被裁剪对象位于窗口内部分。 存在int type的变量; 当type=1时,在OnLButtonUp中画出矩形框。 当type=2时,画出多边形,在左键双击后,在OnLButtonDblClk中调用如下函数:Cut_Top();Cut_Right();Cut_Bottom();Cut_Left();Cut(); 裁剪多边形在,并标出在矩形内部的部分。 三、采用的交互方式及实现 (采用了哪些交互方式来完成绘制,这些交互方式应用到了哪些系统消息,是如何实现的) 编写应用程序实现多边形裁剪。要求首先采用鼠标确定裁剪区域(矩形区域),然 后用鼠标输入待裁剪的多边形(可分别使用鼠标左键和右键来确定裁剪区域和待裁剪 的多边形)。多边形绘制完毕后进行裁剪,以不同颜色显示被裁剪对象位于窗口内(此 部分应保证多边形的完整性)及外部的部分。 根据以上绘制方法,可知需要处理WM_OnLButtonDblClk(左键双击)及WM_LButtonUp(左键抬起)消息,为了绘制橡皮线,还需处理调用WM_MouseMove(鼠标移动)消息。 因为可以用鼠标画出矩形和多边形,所以这么规定,当type=1时画矩形,即: DDALine(pDC,lx,by,lx,ty,RGB(r, g, b)); DDALine(pDC, lx, by, rx, by, RGB(r, g, b)); DDALine(pDC, rx, by, rx, ty, RGB(r, g, b)); DDALine(pDC, lx, ty, rx, ty, RGB(r, g, b)); 当type=2时画多边形,而后裁剪,即: for(int i = 0;i < pointList.GetSize();i++) { p1 = pointList.GetAt(i); p2 = pointList.GetAt((i+1)% count); DDALine(pDC, p1.x, p1.y, p2.x, p2.y, RGB(0,255,0)); } 四、实验结果 (程序的运行结果) 裁剪结果如下图所示,黑色为裁剪窗口,红色为多边形被裁剪的部分,绿色为多边形裁剪后的部分: 五、遇到的问题及解决办法 (在实现过程中遇到了什么样的问题,及采用了何种解决办法) 问题1:我在裁剪使一开始对多边形做上下左右裁剪时,这四个步骤是分别对原图形裁剪,而不是对图形接连进行裁剪。后来在裁剪函数上先除去之前图形,然后把已裁剪多边形重新构建。如下: pointList.RemoveAll(); for(int i = 0;i < m;i++) pointList.Add(CP[i]); 问题2:在多边形被矩形裁剪的部分显现不同颜色花费了挺多时间,后来我直接让裁剪的部分颜色被覆盖就可以了。如下: for(int i = 0;i < pointList.GetSize();i++) { p1 = pointList.GetAt(i); p2 = pointList.GetAt((i+1)% count); DDALine(pDC, p1.x, p1.y, p2.x, p2.y, RGB(0,255,0)); 班 级: 电子信息 专业 级 班 学 号: 姓 名: 实验项目名称: 计算机网络原理实验 实验项目性质: 设计性(验证性) 实验所属课程: 计算机网络 实验室(中心): 软件实验室 指 导 教 师 : 实验完成时间: 2016 年 6 月 29 实验1 控制台网络操作的基本命令 实验目的: 掌握和使用控制台网络操作的基本命令:ipconfig,ping,tracert,arp,dhcp,nslookup,netstat。 实验环境: Windows7,使用命令提示符 实验步骤: ipconfig 使用ipconfig/all查看自己计算机的网络配置,尽可能明白每行的意思。分析:你和旁边的计算机是否处于同一子网,为什么? Ping 练习ping命令,掌握反馈的意思。 通过ping/?了解ping命令的各种选项并实际使用。Tracert/pathping 使用tracert或pathping进行路由追踪。思考为何能进行路由追踪?请实际验证。Arp 以arp –a命令,查看当前arp缓存,并通过网络获得查看缓存的变化。以arp –s命令将网关设置为静态arp。Dhcp 使用ipconfig/release释放自动获取的网络配置,并用ipconfig/renew重新获取,了解DHCP。 如果你不能释放,请思考如何处理。常用端口号 打开C:WINDOWSsystem32driversetcservices文件,了解常用的端口号分配。Netstat 练习netstat命令,查看当前的网络连接状况。Nslookup 练习nslookup命令,进行命令行的DNS解析。Hosts文件 打开C:WINDOWSsystem32driversetchosts文件,思考如何屏蔽浏览网页和观看视频时的广告? 实验内容: ipconfig Ping tracert/pathping arp Dhcp netstat nslookup hosts文件 实验结果与分析 1.是同一子网 因为默认网关是同一个子网里面取出来的一个ip地址作为的,既然默认网关都一样,那就是在同一个子网之内,也就是处于同一个网络。 如果不在同一个网络之内的两台电脑肯定是拥有不一样的网关的。 2.Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间(TTL)字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 3.利用系统文件hosts,在该文件后面添加广告地址屏蔽 实验2 Wireshark实验 本部分实验在Wireshark中进行。请访问 Wireshark图文教程 和 中国协议分析网 熟悉其使用。 DNS解析 进行一个DNS解析,用Wireshark进行分析,了解UDP和DNS的使用。 这是捕获的通过百度得到的“无线路由器设置细节详解” 下图是进行DNS缓存清除 实验3 Cisco Packet Tracer实验 本部分实验在Cisco Packet Tracer软件中完成。请同学们先了解VLSM、CIDR、RIP、OSPF、VLAN、STP、NAT及DHCP等概念,以进行网络规划和配置。 CPT软件使用简介 了解和熟悉CPT软件的使用。请先阅读使用简介 用交换机连接PC构建LAN 构建如下所示的拓扑结构。进行各PC的基本网络配置,要求相互能ping通。 实验结果 如图是我构建的拓扑结构 上图中的PC和多路交换机中的节点是绿色的,表示该连接是畅通的;当它是红色的时候,表示该连接是阻塞的; CLI信息 VLAN设置 RIP设置 思考: 1、这些PC处于同一个子网吗?不在同一个子网能否通信? 答:这些PC是处于同一子网。它们虽然不在同一子网,但是不影响它们之间的通信。 2、测试如PC1的IP为192.168.1.1/24,而PC2的IP为192.168.2.1/24能否通信? 3、测试如PC1的IP为192.168.1.1/16,而PC2的IP为192.168.2.1/24能否通信? 4、设置网关了吗?为什么? 答:我未设置网关。因为可分配给主机的第一个地址被PC占有。 思考: 集线器Hub是只工作在物理层的设备,它与交换机的区别何在?请在CPT软件中进行实际验证。 答:1.从工作方式来看:集线器是一种广播模式,容易产生广播风暴,而当交换机工作的时候,只有发出请求的端口和目的端口之间相互相应而不影响其它端口,因此交换机就能够隔离冲突与病有效的抑制广播风暴的产生。 2.从带宽来看:集线器所有端口都是共想一条带宽,是总线型拓扑结构;而对于交换机而言,每个端口都有一条独占的带宽。 验证:将左边的交换机2960替换为集线器hub。 用PC0 ping PC1,用PC2 ping PC3,模拟结果如下图所示 实验4 静态路由配置 静态路由是非自适应性路由计算协议,是由管理人员手动配置的,不能够根据网络拓扑的变化而改变。因此,静态路由非常简单,适用于非常简单的网络。 在当前这个简单的拓扑结构中我们可以使用静态路由,即需要直接告诉路由器到某网络该怎么走。在上述配置情况如下添加如下命令: 交通大学路由器: Router(config)#ip route 192.168.3.0 255.255.255.0 192.168.2.2 //到3.0这个网络的下一跳是2.2 Router(config)#exit //退到全局配置模式 Router#show ip route //查看路由表 同理,重庆大学路由器: Router(config)#ip route 192.168.1.0 255.255.255.0 192.168.2.1 //到1.0这个网络的下一跳是2.1 Router(config)#exit //退到全局配置模式 Router#show ip route //查看路由表 VLAN间通信 构建如下拓扑结构: 其中,两个2960交换机和核心的3560交换机使用Gbit口相连。 Cisco 3560交换机是局域网中的核心交换机,将其作为VTP Server,VLAN在其上创建。配置如下: Switch(config)#hostname 3560 //更改交换机名称 3560(config)#vtp domain cqjtu //设置VTP(VLAN中继协议)域名称 3560(config)#vtp mode server //设置其为VTP服务器 3560(config)#vlan 2 //新建VLAN2(缺省的,交换机所有端口都属于VLAN1,不能使用) 3560(config-vlan)#name computer //别名 3560(config-vlan)#exit 3560(config)#vlan 3 //再建VLAN3 3560(config-vlan)#name communication //别名 3560(config-vlan)#exit 3560(config)#int vlan 2 //配置接口VLAN2,它将是该子网的网关 3560(config-if)#ip address 192.168.1.1 255.255.255.0 3560(config-if)#exit 3560(config)#int vlan 3 //配置接口VLAN2,它将是该子网的网关 3560(config-if)#ip address 192.168.2.1 255.255.255.0 两个Cisco 2960交换机是作为局域网中的汇聚层/接入层交换机,将其作为VTP Client,自己决定哪些端口划入哪个VLAN。左边交换机配置如下: Switch(config)#hostname 2960A //更改交换机名称 2960A(config)#vtp domain cqjtu //加入名为cqjtu的VTP域 2960A(config)#vtp mode client //设置其为VTP客户 2960A(config)#int g1/1 //配置与核心交换机连接的端口 2960A(config-if)#switchport mode trunk //设置该端口为中继(trunk)模式 2960A(config-if)#switchport trunk allowed vlan all //允许为所有的VLAN中继 2960A(config-if)#exit 2960A(config)#int f0/1 //将接口1划分到VLAN2 2960A(config-if)#switchport mode access 2960A(config-if)#switchport access vlan 2 2960A(config-if)#exit 2960A(config)#int f0/2 //将接口2划分到VLAN3 2960A(config-if)#switchport mode access 2960A(config-if)#switchport access vlan 3 右边交换机2960B与此类似,请参照配置。此时在3个交换机的特权模式下,都可使用show vtp status命令查看VTP状态,使用show vlan命令查看VLAN状态 各PC基本配置如下: 机器名 PC0 PC1 PC2 PC3 连接的端口 2960A-F0/1 2960A-F0/2 2960B-F0/1 2960B-F0/2 所属VLAN VLAN 2 VLAN 3 VLAN 2 VLAN 3 IP 192.168.1.2 192.168.2.2 192.168.1.3 192.168.2.3 子网掩码 255.255.255.0 255.255.255.0 255.255.255.0 255.255.255.0 网关 192.168.1.1 192.168.2.1 192.168.1.1 192.168.2.1 基本配置完成。同VLAN可以ping通,而不同VLAN不行(即使配置为同一子网),且得到统一规划和管理。 目前的问题是:广播风暴抑制了,但VLAN间的正常通信如何进行? 此时我们需要所谓的独臂路由器为其进行转发!因为我们的核心交换机是个3层交换机,也称路由交换机,即具有路由功能,因此配置如下 3560(config)#int g0/1 //配置该接口 3560(config-if)#switchport trunk encapsulation dot1q //封装VLAN协议 3560(config-if)#switchport mode trunk //中继模式 3560(config-if)#switchport trunk allowed vlan all //转发所有VLAN 3560(config-if)#exit 3560(config)#int g0/2 //配置该接口 3560(config-if)#switchport trunk encapsulation dot1q //封装VLAN协议 3560(config-if)#switchport mode trunk //中继模式 3560(config-if)#switchport trunk allowed vlan all //转发所有VLAN 3560(config-if)#exit 【java计算器实验报告】推荐阅读: 《计算机导论》实验报告05-23 计算机实验课实验报告10-29 计算机基础课程实验报告11-09 计算机网络综合实验报告参考05-28 计算机基础实验报告单(例文)09-12 大学计算机基础第一次实验报告作业11-13 计算机科学导论实验10-13 计算机网络原理实验二06-18 计算机基础实验任务一07-17 计算机网络实验思想总结11-24java计算器实验报告 篇9
《计算机图形学》实验报告 篇10
计算机网络原理实验报告 篇11