图形创意实践实验报告

2023-03-09

很多人对于写报告感到头疼,不了解报告的内容与格式,该怎么写出格式正确、内容合理的报告呢?今天小编给大家找来了《图形创意实践实验报告》,仅供参考,希望能够帮助到大家。

第一篇:图形创意实践实验报告

机构创意组合设计实验报告格式

机构创意组合设计实验

一、实验目的

1、认识典型机构

2、设计实现满足不同运动要求的传动机构系统

3、设计拼装机构系统

二、实验原理

机械传动系统的设计是机械设计中极其重要的一个环节,其中了解常用传动机构,合理设计传动系统是一个认识和创新的过程。为了实现执行机构工作的需求(运动,动力),我们必须利用不同机构的组合系统来完成。因此对于常用机构,如杆机构,齿轮传动机构,间歇运动机构,带,链传动机构的结构及运动特点应有充分的了解,在此基础上,我们可以利用它们所在组合成我们需要的传动系统。执行机构常见的运动形式有回转运动,直线运动和曲线运动,传动系统方案的设计将以此为目标。执行机构的运动不仅仅有运动形式的要求,而且有运动学和动力学的要求。因此我们必须对设计好的传动系统中的重要运动构件进行运动学和动力学分析(速度,加速度分析),使执行构件满足运动要求(如工作行程与回程的速度要求,惯性力要求,工作行程要求等)。任何传动机构系统都有其特点,适应于不同的工作要求和安装位置,我们应该学会在设计和拼装中进行系统分析和评估。

三、实验台的组成

机械组成:

该实验台主要由机柜(安装平台)、固定架、活动架、横梁、传动轴、联接轴、各类传动构件,电机、传感器等组成。

可拼装平面机构包括:四杆机构、六杆机构、平面凸轮机构、间歇机构、齿轮传动、带(链)传动、组合机构等机构,其中间歇机构包含槽轮机构、不完全齿轮机构、棘轮机构等机构。

87695101.可移动联接座12件2.固定盖板12件3.滑块4.滑块盖板5.推杆固定架6.传动轴开口套件7.δ=212件8.δ=54件轴间隔套轴间隔套9.δ=110件轴间隔套δ=263件轴间隔套δ=8件12.δ=133件δ=2件δ=2件轴端套轴端套端挡开口卡环19传动轴Ⅲ=1020传动轴Ⅱ=91传动轴Ⅰ=7722联接轴Ⅰ=2323.联接轴Ⅱ(L=3联接轴Ⅲ(L=425.滑块轴Ⅱ(L52.滑块27线位移联接轴轴Ⅰ(L=.5)28导杆销(L=235)29曲柄销(L=215)传感器联接轴

15、17.短连杆、导杆36.带轮Ⅱφ125)

16、18.长连杆、导杆4321 38.齿条=36棘爪31滚子从动件32推杆37.齿轮Ⅳ=4033.凸轮齿轮Ⅲ(z=2)51.推杆拉簧52.棘爪轴53.止回棘爪轴35.棘轮44.齿轮Ⅱ(z24)54.固定螺母55.支架螺母56.弹性联接套槽轮轴套62.线位移联接轴长齿轮Ⅰ(z=6)47.电机带轮48.电机链轮41.齿轮Ⅴ(z44)43.小链轮(z17)45.槽轮曲柄44.槽轮42大链轮(z=3小(大)链轮带轮Ⅰ(D=φ9549.不完全齿从动轮50.不完全齿主动轮57.传感器支架带轮Ⅰ图

一、安装平台

1、脚轮

2、支撑脚

3、机柜

4、零件安置架

5、固定螺栓

6、横梁

7、固定架

8、滑块

9、活动架

10、减速电机

该实验台由图一所示的零部件组成。脚轮(1)用于短距离移动试验台。支撑脚(2) 用于支撑试验台并调整水平。零件安置架(4)用于安放暂时不拼装的零件,并可在机柜(3)内的轨道内移动。活动架(9)可在两个固定架(7)组成的框架内沿纵向(z向)移动,用于调整两组横梁之间的距离并通过固定螺栓(5)固定。横梁(6)可根据拼装的需要通过固定螺栓(5)固定在固定架(7)和活动架(9)的槽内适当的位置。减速电机(10)通过螺钉固定在走条上并可根据在走条直槽长度范围内移动。滑块(8)可根据使用的需要在横梁(6)上移动或固定。 检测系统:

本实验的实验系统框图如下图(2)所示,它由以下设备组成:

本系统由一片高性能的单片机组成,完成对主(原)动件的角位移、速度及从

动件的直线位移或角位移的测量采集;与PC机进行异步串行通讯交换数据、执行命令;产生一路频率较高的脉冲宽度调制波(PWM),通过直流电机驱动模块方便地控制电机的运行;在LED数码显示器上实时显示主(原)动件的转速以及扫描按键灵活地控制电机的转速等主要功能。

从动件光栅角位移传感器分辨率为1000p/n(脉冲个数每转)输出两路相位差90度、频率与机构运动速度成正比、电平0-5V的脉冲,直接接入微处理器,通过微处理器进行判断处理运算后送入PC机,再通过相应的软件系统即可得到机构的运动曲线和数据;从动件光栅角位移传感器测量直线位移时需通过实验台配套的齿轮齿条模块转换;测量角位移时把传感器和专用的轴相配合即可。

主动件光栅角位移传感器同样输出两路信号直接输入微处理器,它的分辨率为360p/n(脉冲个数每转),即为每1度输出一个角度脉冲,其中一路便是此脉冲信号,用于定角度采样,另外一路是零位脉冲,用于标定采样数据时的零点位置。 机构主(原)动件的角位移,速度由微处理器直接测出,加速度数据由速度经过数值微分和数字滤波得到,而从动件的直线(角)速度、直线(角)加速度则是由直线(角)位移经数值微分和数字滤波得到。与分别采用位移、速度、加速度测量仪器的系统相比,具有测试系统简单,性能稳定可靠,分辨率高,动态响应好等优点。 测试软件:

测试系统与实验台配套使用,在每台实验台的实验项目中改系统有对应的实验选项(见图测试软件结构图),实验开始后通过选择实验选项后,系统将会对实验台上传的数据进行分析处理,通过利用曲线与图形结合的方式让实验者能直观,具体的观测到实验结果以便分析实验结果。

程序主体文件设置实验选项帮助学生信息登记退出串口设置串口信息凸轮机构测试…平面机构仿真实验指导实验台介绍关于系统

四、实验台的主要配置

1、 零件存放柜一只。

2、 机构安装台架1架

3、 拼装机构零件库一套

4、 直线位移传感器一个:

光栅角位移传感器一个;

5、 驱动电机:单相交流旋转变速电机两台

6、 数据采集箱一个;

7、 配套教学软件一套;

8、 上下位机软件均开源,货物安装到位验收前给最终使用方提供全套的培训和指导服务。

五、主要技术指标

1)、电机参数:

单相交流旋转变速电机:90W 2)、直线位移传感器 行程150mm 精度

角位移传感器 360栅/转 精度 3)、实验台零件数量为150件以上 4)、实验台提供的拼装基本机构主要类型 平面杆机构:

1、曲柄摇杆机构

2、曲柄滑块机构

3、六杆机构(摇块)

4、六杆机构(滑块)

5、六杆机构(摇杆) 平面齿轮传动

6、(一级、二级、三级)齿轮传动

7、齿轮齿条传动 平面带链传动

10、

11、(一级、二级)带传动

12、带—链传动

13、

14、(一级、二级)链传动 平面间歇机构

15、棘轮机构

16、槽轮机构

17、槽轮机构—链传动

18、不完全齿轮传动

19、平面凸轮机构

含:直线运动凸轮、拋物线运动凸轮、余弦运动凸轮,多项式 平面复合机构

上述机构的

一、二级组合机构 20、凸轮—摇杆机构

5)、检测系统单片机型号为mage系列 6)、数据通讯口类型为:RS232 7)、台架尺寸:为1200×1000×600 1台架重量为:150kg

机构创意组合设计实验报告格式

一、实验目的

二、实验原理

三、机构创意组合设计(粘贴设计拼装的机构)

四、心得体会

第二篇:计算机图形学实验报告

实 验 报 告

一、 实验目的

1、掌握有序边表算法填充多边形区域;

2、理解多边形填充算法的意义;

3、增强C语言编程能力。

二、 算法原理介绍

根据多边形内部点的连续性知:一条扫描线与多边形的交点中,入点和出点之间所有点都是多边形的内部点。所以,对所有的扫描线填充入点到出点之间所有的点就可填充多边形。

判断扫描线上的点是否在多边形之内,对于一条扫描线,多边形的扫描转换过程可以分为四个步骤:

(1)求交:计算扫描线与多边形各边的交点; (2)排序:把所有交点按x值递增顺序排序;

(3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边 形的一个相交区间; (4)着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。

p1,p3,p4,p5属于局部极值点,要把他们两次存入交点表中。 如扫描线y=7上的交点中,有交点(2,7,13),按常规方法填充不正确,而要把顶点(7,7)两次存入交点表中(2,7,7,13)。p2,p6为非极值点,则不用如上处理。

为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)。

对每一条扫描线都建立一个与它相交的多边形的活性边表(AET)。每个AET的一个节点代表一条活性边,它包含三项内容

1. x -当前扫描线与这条边交点的x坐标;

2. Δx -该边与当前扫描线交点到下一条扫描线交点的x增量; 3. ymax -该边最高顶点相交的扫描线号。

每条扫描线的活性边表中的活性边节点按照各活性边与扫描线交点的x值递增排序连接在一起。

当扫描线y移动到下一条扫描线y = y+1时,活性边表需要更新,即删去不与新扫

描线相交的多边形边,同时增加与新扫描线相交的多边形边,并根据增量法重新计算扫描线与各边的交点x。

当多边形新边表ET构成后,按下列步骤进行:

① 对每一条扫描线i,初始化ET表的表头指针ET[i]; ② 将ymax = i的边放入ET[i]中;

③ 使y =多边形最低的扫描线号; ④ 初始化活性边表AET为空; ⑤ 循环,直到AET和ET为空。

 将新边表ET中对应y值的新边节点插入到AET表。  遍历AET表,将两两配对的交点之间填充给定颜色值。

 遍历AET表,将 ymax= y的边节点从AET表中删除,并将ymax> y的各边节点的x值递增Δx;并重新排序。  y增加1。

三、 程序源代码

#include "graphics.h" #define WINDOW_HEIGHT 480 #define NULL 0 #include "alloc.h" #include "stdio.h" #include "dos.h" #include "conio.h" typedef struct tEdge /*typedef是将结构定义成数据类型*/ { int ymax; /* 边所交的最高扫描线号 */ float x; /*当前扫描线与边的交点的x值 */ float dx; /*从当前扫描线到下一条扫描线之间的x增量*/ struct tEdge *next; }Edge;

typedef struct point{int x,y;}POINT; /*将结点插入边表的主体函数*/

void InsertEdge(Edge *list,Edge *edge)/*活性边edge插入活性边表list中*/ { Edge *p,*q=list; p=q->next; /*记住q原来所指之结点*/ while(p!=NULL) /*按x值非递减顺序增加边表*/ {

if(edge->xx) /*要插入的边的x较大不应该在当前插入*/

p=NULL;

else /*要插入的边的x较小应该在当前插入*/

{q=p;

p=p->next;

} } edge->next=q->next; /*使欲插入之结点edge指向q原来所指之结点*/ q->next=edge; /*使q指向插入之结点*/ }

int yNext(int k,int cnt,POINT *pts) /*对于多边形中的某个顶点序号k(0,1...6),返回下一顶点的纵坐标,如果这2个顶点所在边是 水平的,则顺延,即返回第(k+2)个顶点的纵坐标),cnt是顶点个数+1,pts指向多边形顶点结构体的指针*/

{ int j; if((k+1)>(cnt-1))/*当前顶点为最后一个顶点,则下一个顶点为第0个顶点 */

j=0; else

j=k+1; /*当前顶点不是最后一个顶点,下一个顶点为数组下标加一*/ while(pts[k].y==pts[j].y) /*扫描线扫过平行顶点,需分情况找到当前顶点下下个顶点*/ if((j+1)>(cnt-1))

j=0;

else

j++; return(pts[j].y); /*返回下一个顶点的y值 */ }

/* 计算增量,修改AET*/ /*生成边表结点,并插入到边表中的主体函数*/ void MakeEdgeRec(POINT lower,POINT upper,int yComp,Edge *edge,Edge *edges[]) /*把边结点edge,放到lower.y扫描线所在的边结点指针数组edges[]中 */ {edge->dx=(float)(upper.x-lower.x)/(upper.y-lower.y); edge->x=lower.x; if(upper.yymax=upper.y-1; /*缩短上层顶点*/ /*奇点,应该把这点当作两个点而分开,所以把y的最大值减一,向下移动*/ else edge->ymax=upper.y; /*不是奇点,不需改变y值 */ insertEdge(edges[lower.y],edge); /*插入一个边缘扫描线,插入到列表 */ }

/*创建边表的主体函数*/ void BuildEdgeList(int cnt,POINT *pts,Edge *edges[]) /*建立新边表,cnt:多边形顶点个数+1,edges[]:指向活性边结点的指针数组*/ { Edge *edge; POINT v1,v2; int i,yPrev=pts[cnt-2].y; /*当前顶点的前一个顶点的y值,在当前顶点不是奇点时使用该参数*/ v1.x=pts[cnt-1].x; v1.y=pts[cnt-1].y; for(i=0;i

edge=(Edge *)malloc(sizeof(Edge));

edge=(Edge*)malloc(sizeof(Edge)); if(v1.y

yNext*/ MakeEdgeRec(v1,v2,yNext(i,cnt,pts),edge,edges); /*确定v1,v2边较高端点的开闭*/

else

MakeEdgeRec(v2,v1,yPrev,edge,edges); /*当前顶点

是奇点*/ } yPrev=v1.y; v1=v2; } }

/*建立活性边表的主体函数:建立第scan条扫描线的活性边表*/ void BuildActiveList(int scan,Edge *active,Edge *edges[]) /*建立扫描线scan的活性边表,把活性边结点放入扫描线scan的结点指针数组 edges[scan]中*/ { Edge *p,*q; p=edges[scan]->next; /*查找当前扫描线对应的y桶*/ while(p) /*y桶不空*/

{q=p->next; /*找到最后一个边结点,插入*/

InsertEdge(active,p); /*把更新后的边表重新插入边表中保存*/

p=q;

} }

/*填充一对交点的主体函数*/ void FillScan(int scan,Edge *active,int color) /*填充扫描线:填充扫描线上,且在下一结点到再下一结点之间的点*/ { Edge *p1,*p2; int i; p1=active->next; while(p1) {

p2=p1->next;

for(i=p1->x;ix;i++)

putpixel((int)i,scan,color); /*画出图形内部的点*/ p1=p2->next; /*活性表的下一条边表 */ } }

void DeleteAfter(Edge *q) /*删除链表中结点,删除边结点q的后续结点p*/ { Edge *p=q->next; q->next=p->next; /*删除结点*/ free(p); } /* 删除 y=ymax 的边 */

/*填充完后,更新活动边表的主体函数*/ void UpdateActiveList(int scan,Edge *active) /*删除扫描线scan完成交点计算的活性边,同时更新交点x域*/ { Edge *q=active,*p=active->next; while(p) if(scan>=p->ymax) /*扫描线超过边的最大y值,此条边的节点应该删掉*/ { p=p->next; deleteAfter(q); } else /*扫描线未超过边的最大y值,相应的x值增加*/ { p->x=p->x+p->dx; q=p;p=p->next; } }

/*对活性边表结点重新排序的主体函数*/ void ResortActiveList(Edge *active) /*活性边表active中的结点按x域从小到大重新排序*/ { Edge *q,*p=active->next; active->next=NULL; while(p) {q=p->next; InsertEdge(active,p); /*把更新后的边表重新插入边表中保存 */ p=q; } }

/*多边形填充的主体程序*/ void ScanFill(int cnt,POINT *pts,int color) /*填充函数,输入:多边形顶点个数+1=cnt, 指向多边形顶点的指针数组pts*/

{ Edge *edges[WINDOW_HEIGHT],*active; int i,scan,scanmax=0,scanmin=WINDOW_HEIGHT; for(i=0;i

{if(scanmax

if(scanmin>pts[i].y)scanmin=pts[i].y;

} for(scan=scanmin;scan<=scanmax;scan++) /*初始化每条扫面线的边链表*/ {edges[scan]=(Edge *)malloc(sizeof(Edge)); /*建

edges[scan]->next=NULL;

} BuildEdgeList(cnt,pts,edges); /*建立有序边表*/ active=(Edge *)malloc(sizeof(Edge)); “桶”*/ active->next=NULL; for(scan=scanmin;scan<=scanmax;scan++) /*扫描每条扫描线,求活性表*/ {

BuildActiveList(scan,active,edges); /*建立活性边表*/

if(active->next) /*活性边表不为空*/

{ FillScan(scan,active,color); /*填充当前扫描线*/ UpdateActiveList(scan,active); /*更新活化边表*/ ResortActiveList(active); /*重排活化边表*/

} } }

/*开始菜单*/ void main() { POINT pts[7]; /*保存数组*/ int gdrive=DETECT,gmode; pts[0].x=100;pts[0].y=40; /*多边形顶点x、y坐标*/ pts[1].x=220;pts[1].y=140; pts[2].x=280;pts[2].y=80; pts[3].x=350;pts[3].y=300; pts[4].x=200;pts[4].y=380; pts[5].x=50;pts[5].y=280; pts[6].x=100;pts[6].y=40; /*合并桶中的新边,按次序插入到 AET 中*/ initgraph(&gdrive,&gmode,"C:TC3.0BGI"); /*设置graphic模式*/ ScanFill(7,pts,2); getch(); }

四、 实验结果

图1 用有序边表算法生成的多边形

五、 总结与体会

实验步骤

1) 分析多边形区域扫描线填充算法的原理,确定算法流程

① 初始化:构造边表,AET表置空

② 将第一个不空的ET表中的边插入AET表

③ 由AET表取出交点进行配对(奇偶)获得填充区间,依次对这些填充区间着色

④ y=yi+1时,根据x=xi+1/k修改AET表所有结点中交点的x坐标。同时如果相 应的ET表不空,则将其中的结点插入AET表,形成新的AET表 ⑤ AET表不空,则转(3),否则结束。 2) 编程实现

① 首先确定多边形顶点和ET/AET表中结点的结构

② 编写链表相关操作(如链表结点插入、删除和排序等)

③ 根据1)中的算法结合上述已有的链表操作函数实现多边形区域扫描线填充的主体功能

④ 编写主函数,测试该算法 通过运用C语言环境下的图像显示设置,本次实验我学会了多边形区域扫描线填充的有序边表算法,设计相关的数据结构(如链表结构、结点结构等),并将实现的算法应用于任意多边形的填充,为深一步的学习做好了铺垫。

六、 参考文献

[1]张家广 等编著.计算机图形学(第3版).北京:清华大学出版社,1998年9月.

[2]陈传波,陆枫主编,《计算机图形学基础》,电子工业出版社,

2002年3月.

第三篇:java图形用户界面实验报告

南京工程学院

课程名称 JAVA基础 实验项目名称 图形用户界面设计

实验学生班级 实验学生姓名 学

号 同组学生姓名 无 实验时间 2012年11月 实验地点

实验成绩评定 指导教师签字 年 月 日

一、实验目的和要求

1.目的:掌握java AWT及Swing组件的使用方法,包括窗口、框架、对话框、布局方式、面板、文本编辑器、按钮、组合框等,合理利用委托事件处理模型,掌握不同组件,不同事件的事件处理方法,设计出能够响应事件的java图形用户界面。

2.要求:设计图形用户界面,事件处理,异常处理并弹出对话框,提示重新输入信息。

二、实验题目

验证哥德巴赫猜想,添加图形用户界面

三、实验方法与步骤(需求分析、算法设计思路、流程图等)

1.添加图形用户界面

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GDBH extends Frame implements ActionListener //窗口框架响应单击事件,利用awt组件设计框架 { private Button button; //按钮 private TextField text1; //文本行 private TextArea text2; //文本区 public GDBH() { super("验证哥德巴赫猜想"); //设置框架窗口标题

this.setBounds(450, 200, 350, 400); //设置框架的位置和尺寸 this.setResizable(false); // 设置框架大小不可改变 this.setBackground(Color.lightGray); // 设置窗口背景颜色

this.setLayout(new FlowLayout()); // 默认窗口流布局 中对齐 this.add(new Label("输入一个整数")); text1=new TextField("",20); this.add(text1); button=new Button("验证哥德巴赫猜想"); this.add(button); button.addActionListener(this); //为按钮注册单击事件监听器,委托当前对象处理事件

this.setLayout(new FlowLayout()); //默认中对齐 text2=new TextArea(20,25); text2.setEditable(false); this.add(text2); this.setVisible(true); //设置组件可见

this.addWindowListener(new WinClose()); // 为框架注册窗口事件监听器,委托WinClose对象处理事件

} 2.实现单击事件和窗口事件监听器接口

public void actionPerformed(ActionEvent e)

//单击事件处理方法,实现ActionListener接口

{ String str =text1.getText(); //获得文本行的字符串 try { long num = Long.parseLong(str); // 将字符串转化成长整形 text2.setText(yz(num)); } catch(NumberFormatException n) { JOptionPane.showMessageDialog(this, """+str+""字符串不能转换成整数,请重新输入!!"); return; } }

class WinClose implements WindowListener //实现窗口事件监听器接口 { public void windowClosing(WindowEvent e) // 窗口关闭事件处理方法

{

System.exit(0); //程序运行结束 }

public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} } 3.异常处理

若文本行中的字符串不能转化成长整形,将弹出对话框“字符串不能转换成整数,请重新输入!!";另外如果所输入的整数为小于等于2或大于2小于等于5 也会弹出一个对话框“输入错误!必须是大于2的偶数或大于5的奇数!!”(该窗口代码设置在yz()函数中)。

try { long num = Long.parseLong(str); text2.setText(yz(num)); } catch(NumberFormatException n) { JOptionPane.showMessageDialog(this, """+str+""字符串不能转换成整数,请重新输入!!"); 弹出对话框

return; }

四、实验原始纪录(源程序、数据结构等)

源程序如下

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GDBH extends Frame implements ActionListener { private Button button; private TextField text1; private TextArea text2; public GDBH() {

super("验证哥德巴赫猜想"); this.setBounds(450, 200, 350, 400); this.setResizable(false); this.setBackground(Color.lightGray); this.setLayout(new FlowLayout()); this.add(new Label("输入一个整数")); text1=new TextField("",20); this.add(text1); button=new Button("验证哥德巴赫猜想"); this.add(button); button.addActionListener(this); this.setLayout(new FlowLayout()); text2=new TextArea(20,25); text2.setEditable(false); this.add(text2); this.setVisible(true); this.addWindowListener(new WinClose()); } public static void main(String args[]) { new GDBH(); } public void actionPerformed(ActionEvent e) { String str =text1.getText();

try { long num = Long.parseLong(str); text2.setText(yz(num)); } catch(NumberFormatException n) {

JOptionPane.showMessageDialog(this, """+str+""字符串不能转换成整数,请重新输入!!"); return; } } public String yz(long num) {

String str1 = ""; if(num>2&&num%2==0) { for (long i = 2;i<= num / 2; i++) { for(long j=num/2;j

if(num==i+j) { str1+=num + " = " + i + " + " + j + "; "; } } } } } else if(num>5&&num%2!=0) { for(long i=2;i

{ for(long j=i;j

for(long k=j;k

{

if (Prime(i) && Prime(j)&&Prime(k)) {

if(num==i+j+k)

{ str1 += num + " = " + i + " + " + j + " + "+k+" ; ";

} }

} } } } else { JOptionPane.showMessageDialog(this, "输入错误!必须是大于2的偶数或大于5的奇数!!");

} return str1;

} public boolean Prime(long t) { for(long i=2;i

} } class WinClose implements WindowListener {

public void windowClosing(WindowEvent e) { System.exit(0); { if(t%i==0) { return false; } } return true; } public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {}

public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} }

五、实验结果及分析(计算过程与结果、数据曲线、图表等)

1.当文本行中的字符串不能转化成长整形,抛出异常

2. 当输入的整数为小于等于2或大于2小于等于5,弹出对话框

3.当输入偶数时,显示结果如图

4.当输入奇数时,显示结果如图

注:在函数yz()中,验证奇数时应规定3个素数的大小顺序(i ≤j≤k),否则会出现数据重复

六、实验总结与思考

通过本次实验,基本上掌握了使用awt与swing组件设计图形用户界面的方法,包括对窗口,对话框等工具的合理利用。此外,在注册单击事件监听器与窗口事件监听器时,一定要注意响应事件,为其提供事件处理方法。另外,在输入字符串时,要注意抛出异常,当字符串不能转化成整数或所输入的整数不符合规则时,弹出对话框,显示输入错误,重新输入。还有,在窗口的文本区中,所显示的数据要注意其正确性与不重复性,在函数中设定3个素数的大小顺序就可保证数据不重复。

教师评语:

第四篇:《创新实践》实验报告封面

创新实践课程 实验报告

项目名称:

姓名学号专业班级姓名学号专业班级姓名学号专业班级姓名学号专业班级姓名学号专业班级

指导教师:

报告提交时间:年月日

第五篇:C语言课程实践-实践1实验报告

实验报告

1. 程序源代码

程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大还是小,然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。 #include #include #include void main() {

int input_number;

int random_number; srand( (unsigned)time( NULL ) ); random_number = rand()%100+1; printf("输入您想猜的0~100之间的数:"); scanf("%d",&input_number); if (input_number >= 0 && input_number <= 100) {

if (input_number == random_number)

{

printf(" right!");

}

else if (input_number > random_number)

{

printf(" 您猜的数过大 ");

}

else

{

printf(" 您猜的数过小 ");

} }

else

{

printf(" 您猜的数应在0~100之间"); } } 程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。 #include #include #include void main() {

int input_number;

int random_number; int n; srand( (unsigned)time( NULL ) ); random_number = rand()%100+1; for(n=1;;n++) {

printf("输入您想猜的0~100之间的数:"); scanf("%d",&input_number); if (input_number >= 0 && input_number <= 100)

if (input_number == random_number)

{

printf(" right! ");

if(n==1)

{

printf(" 您猜了%d次,太牛逼了. ",n);break;

}

else if(n>1&&n<6)

{

printf(" 您一共猜了%d次,水平还行. ",n);break;

}

else

{

printf(" 您一共猜了%d次,才猜对,很勉强啊. ",n);break;

}

}

else if (input_number > random_number)

printf(" 您猜的数过大 ");

else

printf(" 您猜的数过小 ");

else

printf(" 您猜的数应在0~100之间"); } } 程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。

#include #include #include void main() {

int input_number;

int random_number; int n; srand( (unsigned)time( NULL ) ); random_number = rand()%100+1; for(n=1;n<=10;n++) {

printf("输入您想猜的0~100之间的数:"); scanf("%d",&input_number); if (input_number >= 0 && input_number <= 100)

if (input_number == random_number)

{

printf(" right! ");

if(n==1)

{

printf(" 您猜了%d次,太牛逼了. ",n);break;

}

else if(n>1&&n<6)

{

printf(" 您一共猜了%d次,水平还行. ",n);break;

}

else

{

printf(" 您一共猜了%d次,才猜对,很勉强啊. ",n);break;

}

}

else if (input_number > random_number)

printf(" 您猜的数过大,您还有%d次机会 ",10-n);

else

printf(" 您猜的数过小,您还有%d次机会 ",10-n);

else

printf(" 您猜的数应在0~100之间"); } if(n==11)

printf(" 你输了! "); }

程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。 #include #include #include void main() {

int input_number;

int random_number; int n,i=1;

game: srand( (unsigned)time( NULL ) ); random_number = rand()%100+1; for(n=1;n<=10;n++) {

printf("第%d轮游戏,输入您想猜的0~100之间的数:",i); scanf("%d",&input_number); if (input_number >= 0 && input_number <= 100)

if (input_number == random_number)

{

printf(" right! ");

if(n==1)

{

printf(" 您猜了%d次,太牛逼了. ",n);break;

}

else if(n>1&&n<6)

{

printf(" 您一共猜了%d次,水平还行. ",n);break;

}

else

{

printf(" 您一共猜了%d次,才猜对,很勉强啊. ",n);break;

}

}

else if (input_number > random_number)

printf(" 您猜的数过大,您还有%d次机会 ",10-n);

else

printf(" 您猜的数过小,您还有%d次机会 ",10-n);

else

printf(" 您猜的数应在0~100之间"); }

} if(n==11) { printf(" 你输了! "); i=i+1; goto game; } 2. 遇到的问题及解决方法

问题1:随机数如何调用?

解决方法:运用srand( (unsigned)time( NULL ) )函数。

问题2:”直到人猜对为止”功能如何实现? 解决办法:运用一个“无穷循环”,另游戏能够不断进行,并运用break语句停止于猜对情况。

问题3: “以此来反映猜数者“猜”的水平”功能的实现?

解决办法:在猜对情况下的if语句中嵌套if语句实现“猜数次数”的判断,分支输出“猜”的水平。

问题4:“每次运行程序可以反复猜多个数”功能的实现?

解决办法:此功能比较困难,但反复阅读程序后,发现代码并不复杂,运用goto语句和if语句的运用进行循环,即可实现此功能,且不会因为运用goto语句造成程序模块的混乱。

3. 总结(心得体会)

这是“C语言课程实践”的第一次实践,由于平时并没接触过Microsoft Visual C++ 6.0这个编译软件,因此刚开始还存在操作方面的苦难。经过一两节课的实践,能够熟悉界面和学会新建工程。

此次实践题目是“猜数游戏”,题目分成4个部分,其实内容相同,只是功能逐渐增加。鉴于这种题目,编写程序中需要思考预留部分,比如运用if语句嵌套时,要注意把“猜对”、“猜错”和“误猜”分支出来,使程序容易阅读也容易进行修改。

在编写程序过程中,遇到几个核心问题,通过学习后把困难一个个突破,并成功实现题目所要求的功能。

最后,我对编程有进一步认识,而且在编程调试过程中,能够从中发现问题并解决问题,这是程序能够走向成功的必经之路,也是带来成功喜悦必不可少的过程。

上一篇:通信系统课程设计要求下一篇:通讯员培训班培训教材