当前位置:文档之家› 电子科大实验3-三维图形程序设计

电子科大实验3-三维图形程序设计

电子科大实验3-三维图形程序设计
电子科大实验3-三维图形程序设计

.

资料

课程名称:三维图形设计

学院:计算机科学与工程

专业:计算机科学与技术

指导教师:周川

学生姓名:

学号:

实验成绩:

日期:2014 年5月19日

电子科技大学计算机学院实验中心

.

资料

电子科技大学实验报告

一、实验三:OpenGL光照与材质编程实验

二、实验室名称:主楼A2-412 实验时间:2014年5月19日

三、实验目的:

1、理解OpenGL光照模型的相关原理,掌握与光照参数和对象材质设置相关的OpenGL API函数的用法,熟悉光照与材质参数设置的基本技巧;

2、理解OpenGL混合(融合)的基本原理,掌握与混合相关的OpenGL API函数的用法。

四、实验原理:

1. openGL图形编程技术原理

2. 选择与拾取、光照与材质、混合与透明、纹理贴图、菜单。

五、实验内容:

(一)编程任务1——绘制一个具有光照的房间

1、建立光照场景并为场景中的几何对象设置材质属性——void CreateWorld()

a.四面墙壁 void CreateWall()

b.屋顶 void CreateCeiling()

c.地板 void CreateGround()

d.一个圆锥体和一个球体 void CreateFurnishings()

e.在房间中创建并放置两个光源 void CreateLightAndProxy(void)

a)一个是点光源

b)一个是聚光灯;

c)为光源创建代理几何体(Proxy),可以通过鼠标拖动光源代理来交互式的

移动光源;

2、绘制场景

——void DrawWorld(void)

a.绘制四面墙壁 void DrawWall()

b.绘制屋顶 void DrawCeiling()

c.绘制地板 void DrawGround()

d.绘制屋内物品 void DrawFurnishings()

.

资料

e.绘制光源代理 voidDrawLightProxy()

其它要求:

1、可交互式移动光源;

2、可用右键菜单交互式的开启或关闭场景光照;

3、可利用键盘快捷键调整球的材质属性,如辉度系数(GL_SHININESS)等。分析材质是如何影响几何对象的光照效果的。

(二)编程任务2——绘制一个具有地板反光效果的房间

利用OpenGL混合功能可以模拟地板反光效果,这需要将地板和场景中其它物体分开处

理,其基本思路如下:

1、首先以上下颠倒的方式来绘制出地板镜像场景(即沿着地板面将光源和场景进行镜像);

2、接者利用混合在上述镜像场景之上绘制出半透明的地板;

3、最后以正常的光源和场景位置来绘制场景。

参考代码如下:

void RenderScene(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();

// 光源镜像移动到地板下,以照射这个“镜像”场景

glLightfv(GL_LIGHT0, GL_POSITION, fLightPosMirror);

glPushMatrix();

//场景被镜像,同时交换正反面

glFrontFace(GL_CW);

glScalef(1.0f, -1.0f, 1.0f);

DrawWorldExGround();

glFrontFace(GL_CCW);

glPopMatrix();

// 在镜像场景上绘制一个半透明的地板

glDisable(GL_LIGHTING);

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

DrawGround();

glDisable(GL_BLEND);

glEnable(GL_LIGHTING);

// 恢复正常的光照,并正确绘制场景

glLightfv(GL_LIGHT0, GL_POSITION, fLightPos);

DrawWorldExGround();

glPopMatrix();

glutSwapBuffers();

}

六、实验器材(设备、元器件):

电脑型号戴尔 System Inspiron N4110 笔记本电脑

操作系统 Windows 8 专业版 64位 ( DirectX 11 )

软件环境 Microsoft Visual Studio Express 2012 for Windows Desktop

OpenGL Glut3.7

.

七、实验步骤:

1.做出具有两个光照的房间

2.利用拾取做出交互的光照代理

3.做出其他相关附加需求如菜单

4.利用透明与变换做出反光地板

八、实验数据及结果分析:

(一)交互光照房间

1. 代码:

#include

#include

#define W 500//窗口宽

#define H 500//窗口高

#define D 50.0//因为鼠标移动数据太大,而世界坐标设定得太小,所以用D将鼠标移动增量进行缩小映射int hits,hitx,hity;//命中次数、坐标

GLint viewport[4];

GLuint selectBuf[512];

//材质属性结构定义

typedef struct matattr{

GLfloat ambient[4];

GLfloat diffuse[4];

GLfloat specular[4];

GLfloat shininess;

}matattr;

//各种材质数据设置

matattr ball={

{0.2,0.3,0.3,1.0},

{0.3,0.3,0.85,1.0},

{0.5,0.5,0.81,1.0},

50.0

};

matattr cone={

{0.3,0.0,0.0,1.0},

{0.6,0.0,0.0,1.0},

{0.8,0.6,0.6,1.0},

50.0

};

资料

matattr wall={

{0.2,0.5,0.5,1.0},

{0.2,0.5,0.5,1.0},

{0.9,0.9,0.9,1.0},

100.0

};

matattr ceiling={

{0.5,0.5,0.7,1.0},

{0.5,0.5,0.9,1.0},

{0.9,0.9,0.9,1.0},

100.0

};

matattr ground={

{0.9,0.0,0.4,1.0},

{0.9,0.0,0.4,1.0},

{0.9,0.9,0.9,1.0},

100.0

};

matattr light={

{1.0,1.0,0.1,1.0},

{1.0,1.0,0.1,1.0},

{0.8,0.8,0.2,1.0},

50.0

};

//0光照(点光源)属性

GLfloat position0[]={-2.0,3.0,8.0,1.0};

GLfloat ambient0[]={0.1,0.1,0.1,1.0};

GLfloat diffuse0[]={1.0,1.0,0.8,1.0};

GLfloat specular0[]={1.0,1.0,1.0,1.0};

//1光照(聚光灯)属性

GLfloat position1[]={-2.0,-2.0,8.0,1.0};

GLfloat ambient1[]={0.1,0.1,0.1,1.0};

GLfloat diffuse1[]={1.0,1.0,0.8,1.0};

GLfloat specular1[]={1.0,1.0,1.0,1.0};

GLfloat direction1[]={0.0,0.0,-1.0};

//法向量

GLfloat

normals[][3]={{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,-1.0,0.0},{0.0,-1.0,0.0},{0.0,0.0,-1.0},{0.0,0.0 ,1.0}};

//全局光照参数设置(不使用默认的全局光)

GLfloat global_ambient[]={0.5,0.5,0.5,1.0};

.

//图片贴图数组

GLubyte image[4][4][3];

GLUquadric *p;

//======================================================================================= //=======================================================================================

//赋予材质函数

void evmat(matattr *mat)

{

glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,mat->ambient);

glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat->diffuse);

glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat->specular);

glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,mat->shininess);

}

//创建房间

void CreateWall()

{

evmat(&wall);

glNormal3fv(normals[0]);

glBegin(GL_POLYGON);//前面

glVertex3f(-5.0,-5.0,0.0);

glVertex3f(-5.0,5.0,0.0);

glVertex3f(-5.0,5.0,10.0);

glVertex3f(-5.0,-5.0,10.0);

glEnd();

glNormal3fv(normals[1]);

glBegin(GL_POLYGON);//左边

glVertex3f(5.0,-5.0,0.0);

glVertex3f(5.0,-5.0,10.0);

glVertex3f(-5.0,-5.0,10.0);

glVertex3f(-5.0,-5.0,0.0);

glEnd();

glNormal3fv(normals[2]);

glBegin(GL_POLYGON);//右边

glVertex3f(5.0,5.0,0.0);

glVertex3f(-5.0,5.0,0.0);

glVertex3f(-5.0,5.0,10.0);

glVertex3f(5.0,5.0,10.0);

glEnd();

glNormal3fv(normals[3]);

glBegin(GL_POLYGON);//后面

glVertex3f(5.0,-5.0,0.0);

资料

glVertex3f(5.0,5.0,0.0);

glVertex3f(5.0,5.0,10.0);

glVertex3f(5.0,-5.0,10.0);

glEnd();

}

void CreateCeiling()

{

evmat(&ceiling);

glNormal3fv(normals[4]);

glBegin(GL_POLYGON);

glVertex3f(-5.0,-5.0,10.0);

glVertex3f(5.0,-5.0,10.0);

glVertex3f(5.0,5.0,10.0);

glVertex3f(-5.0,5.0,10.0);

glEnd();

}

void CreateGround()

{

evmat(&ground);

glNormal3fv(normals[5]);

glBegin(GL_POLYGON);

glTexCoord2f(0.0,0.0);

glVertex3f(-5.0,-5.0,0.0);

glTexCoord2f(0.0,15.0);

glVertex3f(5.0,-5.0,0.0);

glTexCoord2f(15.0,15.0);

glVertex3f(5.0,5.0,0.0);

glTexCoord2f(0.0,15.0);

glVertex3f(-5.0,5.0,0.0);

glEnd();

}

void CreateFurnishings()

{

evmat(&cone);

glPushMatrix();

glTranslatef(-4.0,-2.0,0.0);

glutSolidCone(1.0,2.0,80,50);

evmat(&ball);

glTranslatef(1.0,2.0,1.0);

gluSphere(p,1.0,80,50);

glPopMatrix();

}

void CreateLightAndProxy(GLenum mode)

{

glLightfv(GL_LIGHT0,GL_POSITION,position0);

.

资料glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse0);

glLightfv(GL_LIGHT0,GL_SPECULAR,specular0);

glLightfv(GL_LIGHT0,GL_AMBIENT,ambient0);

glLightfv(GL_LIGHT1,GL_POSITION,position1);

glLightfv(GL_LIGHT1,GL_DIFFUSE,diffuse1);

glLightfv(GL_LIGHT1,GL_SPECULAR,specular1);

glLightfv(GL_LIGHT1,GL_AMBIENT,ambient1);

glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,direction1); glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30);

glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,1.0);

evmat(&light);

if(mode == GL_SELECT) glLoadName(1);//1是矩形,点光源glPushMatrix();

glTranslatef(position0[0],position0[1],position0[2]); glBegin(GL_POLYGON);

glVertex3f(0,-0.25,-0.25);

glVertex3f(0,-0.25,0.25);

glVertex3f(0,0.25,0.25);

glVertex3f(0,0.25,-0.25);

glEnd();

glPopMatrix();

if(mode == GL_SELECT) glLoadName(2);//2是三角形,聚光灯glPushMatrix();

glTranslatef(position1[0],position1[1],position1[2]); glBegin(GL_TRIANGLES);

glVertex3f(0,-0.25,-0.25);

glVertex3f(0,0.0,0.5);

glVertex3f(0,0.25,-0.25);

glEnd();

glPopMatrix();

}

void CreateWorld()

{

CreateLightAndProxy(GL_RENDER);

CreateWall();

CreateCeiling();

CreateGround();

CreateFurnishings();

}

//主display函数

void display()

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(80.0,1.0,1.0,100.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(4.5,0.0,5.0, 0.0,0.0,5.0, 0.0,0.0,1.0);

CreateWorld();

glutSwapBuffers();

}

//鼠标移动回调

void Motion(int x,int y)

{

if (hits==1)

{

if (selectBuf[3]==1)//矩形

{

position0[1]+=(x-hitx)/D;

position0[2]+=(hity-y)/D;//注意y是相反的,屏幕坐标和世界坐标原点位置不同}

else//三角形

{

position1[1]+=(x-hitx)/D;

position1[2]+=(hity-y)/D;

}

}

else if (hits==2)

{

position0[1]+=(x-hitx)/D;

position0[2]+=(hity-y)/D;

position1[1]+=(x-hitx)/D;

position1[2]+=(hity-y)/D;

}

hitx=x;//拖动后新点作为击中点

hity=y;

glutPostRedisplay();

}

//鼠标操作回调

void mouse(int button, int state, int x, int y)

{

if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) //选择模式设置,3像素精度

{

hitx=x;

hity=y;

glGetIntegerv (GL_VIEWPORT, viewport);

.

glSelectBuffer (512, selectBuf);

glRenderMode(GL_SELECT);

glInitNames();

glPushName(0);

glMatrixMode (GL_PROJECTION);

glPushMatrix ();//利用流水线投影变换,取得鼠标点击形成的小视锥里面的图元

glLoadIdentity ();

gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y), 3.0, 3.0,viewport); gluPerspective(80.0,1.0,1.0,100.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(4.5,0.0,5.0, 0.0,0.0,5.0, 0.0,0.0,1.0);

CreateLightAndProxy(GL_SELECT);

glMatrixMode (GL_PROJECTION);

glPopMatrix ();

glutSwapBuffers();

hits = glRenderMode (GL_RENDER);

glutPostRedisplay();

}

}

//键盘回调,设置材质球参数

void mykey (unsigned char key,int x, int y)

{

switch(key)

{

case'w':ball.shininess=(ball.shininess>90)?100:(ball.shininess+10);break;

case'a':ball.ambient[0]=(ball.ambient[0]>0.95)?1:(ball.ambient[0]+0.05);

ball.ambient[1]=(ball.ambient[1]>0.95)?1:(ball.ambient[1]+0.05);

ball.ambient[2]=(ball.ambient[2]>0.95)?1:(ball.ambient[2]+0.05);

break;

case's':ball.specular[0]=(ball.specular[0]>0.95)?1:(ball.specular[0]+0.05);

ball.specular[1]=(ball.specular[1]>0.95)?1:(ball.specular[1]+0.05);

ball.specular[2]=(ball.specular[2]>0.95)?1:(ball.specular[2]+0.05);

break;

case'd':ball.diffuse[0]=(ball.diffuse[0]>0.95)?1:(ball.diffuse[0]+0.05);

ball.diffuse[1]=(ball.diffuse[1]>0.95)?1:(ball.diffuse[1]+0.05);

ball.diffuse[2]=(ball.diffuse[2]>0.95)?1:(ball.diffuse[2]+0.05);

break;

}

glutPostRedisplay();

}

资料

//菜单

void mainmenu(int id)

{

switch(id)

{

case 1:glDisable(GL_LIGHT0);break;

case 2:glEnable(GL_LIGHT0);break;

case 3:glDisable(GL_LIGHT1);break;

case 4:glEnable(GL_LIGHT1);break;

//复原

case 5:glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);

position0[0]=-2.0;position0[1]=3.0;position0[2]=8.0;

position1[0]=-2.0;position1[1]=-2.0;position1[2]=8.0;

ball.ambient[0]=0.2;ball.ambient[1]=0.3;ball.ambient[2]=0.3;

ball.diffuse[0]=0.3;ball.diffuse[1]=0.3;ball.diffuse[2]=0.85;

ball.specular[0]=0.5;ball.specular[1]=0.5;ball.specular[2]=0.81;

ball.shininess=50;

}

glutPostRedisplay();

}

//初始化函数

void init()

{

int i,j,t;

glEnable(GL_DEPTH_TEST);

//选0号,1号光照

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glEnable(GL_LIGHT1);

p=gluNewQuadric();

gluQuadricDrawStyle(p, GLU_FILL);

//计算贴图数组

for (i=0;i<4;i++)

for (j=0;j<4;j++)

{

t=0;

if ((i<2 &&j<2)||(i>=2 &&j>=2))

t=255;

image[i][j][0]=(GLubyte)t;

image[i][j][1]=(GLubyte)t;

image[i][j][2]=(GLubyte)t;

}

//贴图参数设置

glEnable(GL_TEXTURE_2D);

.

资料glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,4,4,0,GL_RGB,GL_UNSIGNED_BYTE,image);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

//可以给绘制每个图元时用glTexEnvf(GL_TEXTURE_2D,GL_TEXTURE_ENV_MODE,GL_MODULATE);

//设置相应的纹理环境,这里使用默认的纹理环境:调制

glLightModelfv(GL_LIGHT_MODEL_AMBIENT,global_ambient);

//创建菜单

glutCreateMenu(mainmenu);

glutAddMenuEntry("关闭点光源",1);

glutAddMenuEntry("开启点光源",2);

glutAddMenuEntry("关闭聚光灯",3);

glutAddMenuEntry("开启聚光灯",4);

glutAddMenuEntry("复位",5);

glutAttachMenu(GLUT_RIGHT_BUTTON);

}

void main(int argc,char **argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);

glutInitWindowSize(500,500);

glutInitWindowPosition(100,100);

glutCreateWindow("201206007 ");

glutDisplayFunc(display);

glutMouseFunc (mouse);

glutMotionFunc(Motion);

glutKeyboardFunc(mykey);

init();

glutMainLoop();

}

2. 结果:

初始效果图

.

资料

移动点光源

移动聚光灯

.

资料

只开聚光灯

只开点光源

c语言实验报告4 循环结构程序设计

《C程序设计》课程实验报告 学院:班级:姓名:学号: 实验设备:计算机1台实验日期:2011年3月1日 实验项目名称循环结构程序设计 实验目的 掌握使用三种循环语句实现循环结构的方法。 实验要求:能用while~ do~while for 三种循环语句实现循环结构,编写简单的程序,掌握这三种循环语句。 实验内容(包括步骤):1.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半另一个,以后每天早晨都吃剩下的一半另一个,到第十天早晨再想吃时,就剩一个桃子。问第一天共摘了多少桃子。 要求:分别用三种语句编写程序。 2.编写程序验证下列结论:任何一个自然数n的立方都等于n个连续奇数之和。例如:13=1;23=3+5;33=7+9+11;43=13+15+17+19。 要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0时止。 3.编写程序,求1-3+5-7+…-99+101的值。 4.编写程序,求e的值。e ≈ 1+1/1!+1/2!+1/3!+1/4!+…+1/n! (1)用for循环,计算前50项。 (2)用while循环,要求直至最后一项的值小于10-6。 5.编写程序,输出从公元1600年至2000年所有闰年的年号。每输出5个年号换一行。判断公元年是否为闰年的条件是:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。 (2)公元年数如能被400整除也是闰年。 6.编写程序,打印以下图形: * *** ***** ******* ***** *** * 7.输入一行字符,统计输入的字符中字母‘a’出现的次数(包括大小写)。 8.我国1991年有11.6亿人口,要求根据人口平均年增长率,计算从1991年算起经过多少年后我国的人口增加到15亿。 9.有一个四位数F=BBAA,前二位数相同,后二位数相同,此数又是某个自然数T的平方,求此数。 10.分解一个正整数的所有质因数 调试与结果测试:部分程序出现错误经过调整后调试正常,达到题目要求的结果,运行正常。

大学程序设计基础实验报告 (2)

**大学程序设计基础实验报告 实验名称:实验三分支结构 实验目的: 1、掌握IF-ELSE语句使用。 2、掌握ELSE-IF语句使用。 3、熟悉SWITCH语句使用。 实验内容: 在本地电脑中新建一个文件夹,用于存放C程序,文件夹的名字要求是“学号姓名-实验序号”,如E:\ 1920115555张三-03。启动C-Free,完成如下各题。 1、编程题:输入参数a,b,c,求一元二次方程ax2+bx+c=0的根(①a、b、c都为0,②a 和b为0,c不为0,③a为0,b不为0,c任意,④a不为0,且a、b、c满足b2-4ac ≥0,⑤a不为0,且a、b、c满足b2-4ac<0)。 2、编程题:输入职工的月薪salary,计算并输出应缴纳的个人所得税tax。tax=rate * (salary –850),rate的计算方式如下: 当salary <= 850,则rate = 0; 当850 < salary <= 1350,则rate = 5%; 当1350 < salary <= 2850,则rate = 10%; 当2850 < salary <= 5850,则rate = 15%; 当salary > 5850,则rate = 20%;。 3、编程题:根据输入的3个边长a、b、c,判断它们是否能构成三角形,若能构成三 角形,则进一步判断此三角形是哪种类型的三角形(等边三角形、等腰三角形、直角三角形和一般三角形。等腰直角算作等腰)。 4、编程题:输入一个形式如“操作数运算符操作数”的表达式,对2个整数进行乘、 除或求余运算。【请分别用if语句和switch语句实现此题功能】 上交作业的方法: 1.将程序代码及注释和运行程序的窗口复制到实验结果下方对应的题号上,并把这 次实验上机操作中遇到的问题及解决方法、心得等填好完成实验报告。 2.保存以上所有按要求已调试通过,并形成.c(或.cpp)和.exe文件到以自己的“学 号姓名-03”命名的文件夹中,并将以自己的“学号姓名”命名的文件夹压缩后上 交到ftp://10.172.250.252:1161中的“作业上传”文件夹下的“报告上交02”文件 夹下的子文件夹“源文件压缩上交”中,同时把以“学号姓名-03”命名的word 文档上交到“报告上交03”文件夹下的另一子文件夹“word文件上交”中。 特别提醒:每次上传的文件名一定要是“学号姓名-实验序号. doc”(如1720115555张

循环结构程序设计(C语言实验报告)

仲恺农业工程学院实验报告纸 信息学院(院、系) 专业 班 C 语言程序设计 课 实验目的: (1)熟练掌握用三种循环语句实现循环的方法。 (2)掌握在程序设计中用循环方法实现的一些常用算法。 (3)进一步学习调试程序。 实验内容与总结: 编程练习 1、打印出所有“水仙花数”——教材P129-6.6 程序如下: #include void main() { int i,j,k,n; for(n=100;n<1000;n++) { i=n/100; j=(n-i*100)/10; k=n-i*100-j*10; if(n==i*i*i+j*j*j+k*k*k) printf("水仙花数为:%d\n",n); } } (1)程序编制要点: ①用for 语句实现循环; ②立方的表示; ③if 语句的表达。 (2)该题目涉及的知识点和难点: ①for 语句的输入与使用; ②if 语句的使用。 2、用迭代法求a x = 。求平方根的公式为:)(211n n n x a x x +=+ 程序如下:

#include #include void main () { float x1,x2=1,a; printf("请输入求平方跟的数a="); scanf("%f",&a); do { x1=x2; x2=(x1+a/x1)/2; } while (fabs(x2-x1)>1e-5); printf("x的平方根是:%f\n",x2); } (1)程序编制要点: ①用do…while语句实现循环; ②平方根公式的输入; ③前后两次求出的x的差的绝对值小于1E-5。 (2)该题目涉及的知识点和难点: ①scanf函数,求绝对值函数fabs; ②do…while语句的输入与使用。 3、猜数字:编程先由计算机“想”一个1到100之间的整数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。 程序如下: #include #include /*使用srand和rand函数*/ #include /*使用time函数*/ void main() { int magic,guess,count=0; srand(time(NULL)); magic = rand() % 100 + 1; /*magic得到一个1到100的随机数*/ printf("请输入一个1到100之间的数,你共有10次机会:\n"); do { scanf("%d",&guess); count++; if((guess<=0)||(guess>=100))

C语言程序设计实验3

一、实验目的 1. 掌握简单的程序设计,能正确写出顺序结构的源程序。 2. 掌握数据的输入输出方法,能正确使用各种格式转换符。 二、实验内容(程序清单及运行结果) (一)阅读程序 1.先读下列程序,写出程序运算结果,再将该程序输入并运行,观察运行结果 与你所写的结果是否相同。 ①int main() { int x,y,z; x=y=2;z=3; y=x++-1; printf("%d\t%d\t",x,y); y=++x-1; printf("%d\t%d\t",x,y); y=z--+1; printf("%d\t%d\t",z,y); y=--z+1; printf("%d\t%d\n",z,y); return 0; } ②int main() { char c1='a',c2='b',c3='c',c4='\101',c5='\116'; printf("a%cb%c\tc%c\tabc\n",c1,c2,c3); printf("\tb%c%c",c4,c5); return 0; } 2.以下各程序需要输入数据,请写出输入数据的格式和变量的值并上机验证。

①#include int main() { int a,b,c; printf("input a,b,c\n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); return 0; } ②main() { int i, j; printf("i, j=?\n"); scanf("%d, %d", &i, &j); } ③scanf(“%d,%*d,%d”,&a,&b); 若输入:3,4,5 a=? b=? ④scanf(“%3d%2d”,&a,&b); 若输入:12345 a=?b=?

实验四分支和循环程序设计实验(精)

实验四分支和循环程序设计实验 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言分支程序基本指令的使用方法; 3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法; 4.了解汇编语言循环程序设计的基本流程; 5.熟悉汇编语言循环基本指令的使用方法; 6.掌握利用汇编语言的循环指令完成循环程序设计方法。 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 在实际应用中,经常根据一些条件来选择一条分支执行。汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。 1.无条件转移指令 JMP 无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。 2.条件转移指令 JXX 条件转移指令可分为三大类: 1).简单条件转移指令指令。根据单个标志位的状态判断转移条件。标志位指令转移条件意义 CF JC CF=1 有进位/借位 JNC CF=0 无进位/借位 ZF JE/JZ ZF=1 相等/等于 0 JNE/JNZ ZF=0 不相等/不等于 0 SF JS SF=1 是负数 JNS SF=0 是正数 OF JO OF=1 有溢出 JNO OF=0 无溢出 PF

JP/JPE PF=1 有偶数个 1 JNP/JPO PF=0 有奇数个 1 2).无符号数条件转移指令。 假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下: 指令转移条件意义 JA/JNBE CF=0 AND ZF=0 A>B JAE/JNB CF=0 OR ZF=1 A>=B JB/JNAE CF=1 AND ZF=0 AB JGE/JNL SF=OF OR ZF=1 A>=B JL/JNGE SF OF AND ZF=0 A

分支与循环程序设计实验报告

分支与循环程序设计实验-报告

————————————————————————————————作者: ————————————————————————————————日期:

实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 光电1406 姓名 段昳晖 学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits 符号数X 存于外部RA M单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 264/2 106410 X X Y X X X X ?≥? =<

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

C程序设计实验三实验报告

实验报告 工学院土木工程专业09级2011至2012学年度第1学期学号:xxxxxx姓名:xxxxxx 2011 年10月08日第3~4节综合楼325教室 实验目的:

a的字节数为sizeof (a)或sizeof (int ),用printf 函数语句输出各类型变 量的长度(字节数)。 ①输入程序如下 in clude int mai n() {int a,b,i,j,k,r,s,t,u,v,w,x,y,z; float d,e; char c1,c2; double f,g; long m, n; un sig ned int p,q; a=61;b=62; c1='a';c2='b'; d=3.56;e=-6.78; m=50000;n=-60000; p=32768;q=40000; i=sizeof(a);j=sizeof(b); k=sizeof(d);r=sizeof(e); s=sizeof(c1);t=sizeof(c2); u=sizeof(f);v=sizeof(g); w=sizeof(m);x=sizeof( n); y=sizeof(p);z=sizeof(q); prin tf("a=%d,b=%d\nd=%d,e=%d\nc 1= %d,c2=%d\n",i,j,k,r,s,t); prin tf("f=%d,g=%d\nm=%d, n=%d\nmp=%d,q=%d\n",u,v,w,x,y,z); } 结 果如 下: (2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体 积。编程序,用scanf输入数据,输出计算结果。输出时要有文字说明,去小数点后两位数字。 ①编写程序如下: #i nclude int mai n() {float h,r,l,s,sq,vq,vz; float pi=3.141526; prin tf("Please in put r,h:"); sca nf("%f,%f",&r,&h); l=2*pi*r; s=r*r*pi; sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h; prin tf("The circumfere nce:l=%6.2f\n",l); prin tf("The area of thee circle:s=%6.2f\n ",s); prin tf("The superficial area of the ball:sq=%6.2f\n ",sq); prin tf("The volume of the ball:v=%6.2f\n",vq); prin tf("The volume of the cyli nder:vz=%6.2f\n ",vz); return 0; L

循环结构程序设计实验报告

嘉应学院计算机学院 实验报告 课程名称程序设计基础实验名称实验地点 指导老师实验时间提交时间 班级姓名座号 一、实验目的和要求 (1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调试程序。 二、实验环境和方法 实验方法: (一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错, 及时改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”, 根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果 是否正确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容:编译以下题目的程序并调试运行。 (1)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。 编写程序如下: #include int main() { char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:\n"); while((c=getchar())!='\n')

实验二 MATLAB程序设计 含实验报告

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器(Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因 c b a 、、的不同取值而定) ,这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2?1 3?10?5?16?8?4?2?1 6?3?10?5?16?8?4?2?1 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. 的值,调用该函数后,

C语言循环结构程序设计实验报告

甘肃政法学院 本科生实验报告 ( 五) 姓名:赵明翔 学院:公安技术学院 专业:安全防范工程 班级: 2015级安全防范工程班 实验课程名称:程序设计 实验日期:2016年月日 开课时间:2015学年第二学期

(2)输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字李方和等于该数本身。例如,153是水仙花数,因为153=12+53+33程序如下: #include int main() { int i,j,k,n; printf("paicissus numbers are"); for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d",n); } printf("\n"); return 0; } 运行结果: (3)猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又

多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下了1个桃子了。求第一天共摘了多少桃子。 程序如下: #include int main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n",x1); return 0; } 运行结果: (4)①用牛顿迭代法求方程0634223=-+-x x x 在1.5附近的根. #include #include int main() {double x1,x0,f,f1; x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1;

循环程序设计实验

循环程序设计实验 实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 实验预习要求 复习比较指令、条件转移指令和循环指令。 复习循环程序的结构、循环控制方法等知识。 读懂“实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。 根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 从“实验习题”中任选一道题目,编写源程序,以便上机调试。 实验内容 计算1+2+……n=,其中n通过键盘输入。要求在屏幕上提供如下信息: Please input a number(1627): ;出现此信息后通过键盘输入一个小于628的无符号整数 1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和 程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。编程指导 键盘输入的十进制数如 368在计算机中是以 33H,36H,38H形式存 放的,如何将它们转换 为一个二进制数0B,以 便对累加循环的循环次 数进行控制是本程序首 先要解决的问题。将键 盘输入的十进制数转换为二进制数的程序清单如下: DATA SEGMENT INF1 DB "Please input a number (0-65535):$" IBUF DB 7,0,6 DUP() DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV A X, DATA MOV DS, AX MOV DX, OFFSET INF1 MOV AH, 09H INT 21H MOV DX, OFFSET IBUF ;键入一个十进制数(<65535) MOV AH, 0AH INT 21H MOV CL, IBUF+1 ;十进制数的位数送CX MOV CH, 0 MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)

C#程序设计实验报告

学生实验报告 (理工类) 课程名称: C#程序设计专业班级:M11计算机科学与技术(专转本)学生学号: XXXXXXXX 学生姓名: XXX 所属院部:信息技术学院指导教师: XXX 2012 — 2013学年第 1 学期 金陵科技学院教务处制

实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:C#基础编程实验学时: 6 同组学生姓名:实验地点: A205 实验日期: 9月17日-9月24日实验成绩: 批改教师:批改时间:

实验1 C#基础编程 一、实验目的 1、熟悉Visual Studio .NET开发环境; 2、掌握C#应用程序的基本操作过程; 3、掌握C#的数据类型,运算符以及表达式的使用; 4、掌握分支和循环语句的使用方法; 5、掌握一维数组,二维数组及数组型数组的使用。 二、实验要求 (1)编写程序要规范、正确,上机调试过程和结果要有记录; (2)做完实验后给出本实验的实验报告。 三、实验设备、环境 安装有Visual Studio .NET软件。 四、实验步骤 1、分析题意; 2、根据题目要求,新建项目; 3、编写并输入相关的程序代码; 5、运行与调试项目; 6、保存项目。 五、实验内容 1、编写一个简单的控制台应用程序,打印一行文字(如你的姓名)。using System; using System.Collections.Generic; using System.Text; namespace Test1_1 { class Program { static void Main(string[] args) { Console.WriteLine("1121412016 张明星!"); Console.ReadLine(); } } } 2、编写一个简单的Windows应用程序,在标签中显示你的姓名。 Form窗体的代码: using System; using System.Collections.Generic;

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

循环程序设计实验

2.4 循环程序设计实验 2.4.1 实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 2.4.2 实验预习要求 1、复习比较指令、条件转移指令和循环指令。 2、复习循环程序的结构、循环控制方法等知识。 3、读懂“2.4.3 实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。 4、根据“2.4.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 5、从“2.4.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.4.3 实验内容 计算1+2+……n=?,其中n通过键盘输入。要求在屏幕上提供如下信息: Please input a number(1 627): ;出现此信息后通过键盘输入一个小于628的无符号整数 1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和 程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示 的范围)。 1、编程指导 (1)键盘输入的十进 制数如368在计 算机中是以 33H,36H,38H 形式存放的,如 何将它们转换为 一个二进制数 101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。将键盘输入的十进制数转换为二进制数的程序清单如下: DA TA SEGMENT INF1 DB "Please input a number (0-65535):$" IBUF DB 7,0,6 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET INF1 MOV AH, 09H INT 21H MOV DX, OFFSET IBUF ;键入一个十进制数(<65535) MOV AH, 0AH INT 21H MOV CL, IBUF+1 ;十进制数的位数送CX MOV CH, 0

微机原理实验报告——分支程序设计

实验三 分支程序设计 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言分支程序基本指令的使用方法; 3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法。 二、软硬件环境 1.硬件环境:微机CPU 486以上,500MB 以上硬盘,32M 以上内存; 2.软件环境:装有MASM 5.0、DEBUG 、LINK 和EDIT 等应用程序。 三、实验涉及的主要知识单元 在实际应用中,经常根据一些条件来选择一条分支执行。汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号和相减而导致的结果来进行。下面就有符号数转移指令来了解在汇编语言程序设计方法。 四、实验内容与步骤 1.实验内容 (1)编写计算下面函数值的程序: ?? ? ??<-=>=0,10,00,1x x x y 设输入数据为X 、输出数据Y ,且皆为字节变量,使用Debug 查看X 、Y 两个变量 的数据 (2)以ARRAY 为首地址的内存单元中,存放5个8位的不带符号数,找出5个数中的最大数,并将结果存入RESULT 字节单元中。 2.实验步骤 a.实验流程图 (1)计算函数值的流程图

b.编写程序 (1)计算函数值的实验代码 DATA SEGMENT X DB 12 Y DB ? DATA ENDS STACK SEGMENT STACK'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 ;把AX 与0比较 JGE BIGPR ;0≥AL 转入BIGPR MOV Y,0FFFFH ;0AL 则1=Y JMP EXIT EQUPR: MOV Y,0 ;0=AL 则0=Y EXIT: MOV AL,Y RET CODE ENDS END START

微机原理与汇编语言_实验3_循环程序设计实验汇总

微机原理与汇编语言 实验报告 姓名x x x学号xxxxxx 专业班级计科x班 课程名称微机原理与汇编语言实验日期2014.10.22 实验名称循环程序设计实验成绩 一、实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 二、实验内容 1、实验原理 (1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题 (2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数 2、实验步骤 (1)流程图 (2)实验源码 .model small .stack ;定义堆栈段 .data ;定义数据段 inf1 db "Please input a number(1-627):$" inf2 db 0ah, 0dh, "1+2+......+$" ibuf db 7, 0, 6 dup(0) obuf db 6 dup(0) .code start: mov ax, @data mov ds, ax mov dx, offset inf1 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中 mov ah, 09h int 21h mov dx, offset ibuf mov ah, 0Ah int 21h mov cl, ibuf+1 mov ch, 0 mov si, offset ibuf+2 mov ax, 0 loop1: mov dx, 10 mul dx and byte ptr [si], 0Fh add al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中 开始 结束 素、、 (CX)-1=0 累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和) BX送1(BX存放每次循环累加的数,每循环一次,BX值加1) ADD AX,BX INC BX 累加和(在AX中)转换为十进制数并 显示 Y N

循环程序设计实验报告

学号:0740303104 姓名:雷凤 循环程序设计实验报告 一、实验目的: 1、了解和掌握比较循环程序的组成部分,重复控制指令的功能、作用和方法。 2、学会循环程序设计的方法。 3、学习汇编语言输出输入语句的设计。 二、实验要求: 1、具体了解和掌握循环程序的组成部分,重复控制指令的使用和在使用时应注意的问题 2、学习循环序设计的一般方法。 三、实验内容 1、实验任务 设有N个学生的某科成绩(百分制),已按学号的次序存放在以STUD 为首址的字单元数组中,现要求按成绩的高低记入名次,并把名次填入成绩所在的字单元的高字节中。 字单元的格式为 名次成绩 2、实验的原理 这个实验要用循环的嵌套,内外循环都循环6次,刚开始时将所有的

名次都置1,外循环从第一个成绩开始依次与每一个学生(包括自己)的成绩比较大小,要是小于,相应的名次就加1,再将第二个成绩与所有的分数依次比较大小,一直循环6次,就能得出名次排序了,将相应的名次分别保存在dl低字节中,也便于输出名次。 3、程序设计流程图

四、实验步骤 1、编辑源程序,建立一个以后缀为.ASM的文件. DATAS SEGMENT ;此处输入数据段代码 STUD DW 78,65,89,90,58,99 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,STUD MOV CX,6 ;设置计数器 LOP1: PUSH CX MOV dl,1 ;dl用来存放名次 MOV AL,[BX] ;BX的内容送给AL MOV CX,6 LEA SI,STUD ;取偏移地址 LOP2: CMP AL,[SI] ;比较大小 JL LOP3 ;小于就转 JMP A ;LOOP LOP LOP3: INC dl ;小于,名次加1 A: INC SI ;修改地址 INC SI LOOP LOP2 POP CX mov [BX+1], dl;把结果保存到高地址 INC BX ;修改地址 INC BX

实验3简单的程序设计

实验3简单的程序设计 实验目的: 1.掌握表达式、赋值语句的正确书写规则。 2.掌握VB变量的定义和使用,表达式和常用函数的使用。 3.掌握InputBox与MsgBox的使用。 实验3.1函数考察 实验任务: 考察下列函数的值。 Round(-3.5) Round(3.5) Chr(66) Asc ("c") Asc(Chr(99)) Chr(Asc("K")) Ucase$("abcdefg") Lcase(“ABC”) Str(123.45) Val(“123AB”) Len(“123程序设计ABC”) LenB(“123程序设计ABC”) Ltrim(“ ABC”) String(3, “ABC”) Instr(“EFABCDEFG”, “ef”) Instr(2,“EFABCDEFG”, “ef”,1) Date() Now() Time() 实验步骤: 先自己分析以上函数的功能和可能的结果,然后在立即窗口用Print方法求出相应函数的值,对照比较自己的判断。 22

实验3.2表达式考察 实验任务: 考察下列表达式的值。 Dateadd(“m”,1,#1/30/2000#) Datediff(“y”,#12/03/1999#,#1/03/2000#) ‘计算时间间隔多少日 123 + Mid(“123456”,3,2) 123 & Mid(“123456”,3,2) Ucase(Mid(“abcdefgh”,3,4)) 16 / 4 – 2 ^ 5 * 8 / 4 MOD 5 \ 2 实验步骤: 先自己分析表达式的功能和可能的结果,然后在立即窗口用Print方法求出相应表达式的值,对照比较自己的判断。 实验3.3简单打印图形 实验任务: 使用Print方法、Tab函数和String函数设计一个过程,显示如图3-1所示的图形,并将结果保存到文件中。 图3-1 实验3.2运行界面 参考代码如下: Private Sub Form_Load() Print Tab(15); String(1, "1") Print Tab(14); String(3, "2") Print Tab(13); String(5, "3") Print Tab(12); String(7, "4") End Sub 操作提示: 应先将Form窗体的AutoRedraw属性值设为True。

相关主题
文本预览
相关文档 最新文档