计算机图形学实验报告2

计算机图形学实验报告2
计算机图形学实验报告2

计算机图形学实验报告

实验二、三维网格模型光顺

一、实验目的与基本要求:

(1)掌握Obj文件的读入;

(2)利用给定的数据结构类,建立读入网格模型数据结构;

(3)利用OpenGL类库,对三维模型进行绘制;

(4)利用OpenGL类库,增加采用鼠标交互方式对三维模型进行旋转、放缩、平移等操作;

(5)实现Laplacian方法的三维模型光顺操作,并观察三维模型光顺过程;

二、实验设备(环境)及要求

1. 操作系统:Windows XP 或Windows 7

2. 编程环境:Microsoft Visual Studio 2010,OpenGL 库函数

3. 界面框架:Win32,MFC,QT选择其中一种

三、实验内容与步骤

实验分为以下几个步骤:

(1)掌握Obj文件的读入顶点和面的个数;

(2)建立数组存储点的坐标及面上的点数;

(3)存储顶点的邻接面数,并记录每个顶点周围的邻接点

(4)计算每个面的法向

利用OpenGL类库,增加采用鼠标交互方式对三维模型进行旋转、放缩、平移等操作;(5)利用面法向及顶点坐标进行绘制几何体

(6)实现鼠标对物体旋转、平移、缩放的算法

(7)实现Laplacian方法的三维模型光顺操作,并观察三维模型光顺过程;

四、实现过程说明及成果展示:

(1)掌握Obj文件的读入顶点和面的个数;

由于obj文件的存储形式是

v x1 x2 x3;

f v1 v2 v3;

这种形式,所以在记录点和面的数量时,只需按行读取,然后再判断首字母是v/f即可

实现代码如下:

(2)建立数组存储点的坐标及面上的点数;

数组的大小由点数和面数决定,点数组和面数组均由0开始记录,故后面再用面对应点的时候,由于面上点是从1开始记录,故需要减1然后使用,代码如下:

(3)存储顶点的邻接面数,并记录每个顶点周围的邻接点

记录点邻接面的是新建一个数组,在读面的时候,将该面的序号存入对应点的数组中,然后再在每个面上取一点,记录到点的邻接点数组中,在每个面上取得的点为向外右手方向的下一个点,实现代码如下:

(4)计算每个面的法向

计算面的法向方式为面上右手方向上的两向量的叉乘得到,即

所用代码为:

(8)利用面法向及顶点坐标进行绘制几何体

用法向绘制的方式是

先用glNormal3fv(v)指出面的法向;再用glVertex3f传入面上点的坐标;由于我将glNormal3fv(v)中写在算法向所以我直接对此直接调用即可,代码如下:

(9)实现鼠标对物体旋转、平移、缩放的算法

平移:利用Transform函数和键盘事件来改变参数,w,s,a,d分别控制绘制的kitty猫的上下左右的移动:实现代码如下:

旋转:利用gllookat();函数设定了观察角度,并用鼠标事件改变参数,用实现观察视角的变化实现物体的旋转,代码如下:

缩放:运用glScalef方法和键盘事件改变参数,实现物体的放大和缩小,代码如下:

(10)实现Laplacian方法的三维模型光顺操作,并观察三维模型光顺过程;

Laplacian方法的原理是利用目标点与其所有邻接点平均后的点的差向量,对目标点的坐标进行变换的过程,具体方法是:

①建立每个点的邻接顶点数组,存储每个点的邻接点

②对每个顶点的邻接点进行求平均,即将邻接点的坐标求和后除以邻接点个数,从而得到邻接平均点

③得到优化向量

优化向量= 邻接平均点-目标点

④设定优化度参数λ,得到优化后的新坐标

新坐标= 目标点+ λ*优化向量

在程序中,对于第num个顶点,我设定的变量为

目标点vArr

邻接平均点v0

优化向量l

新坐标数组vNewArr

具体代码如下:

五、结果展示及说明

计算面法向后直接绘制(未光顺):

光顺进行一次后

光顺多次后

利用点绘制结果为

旋转后

缩放后

平移后

六、心得体会

(1)计算面法向时法向量的方向没有运用右手方向,导致有的面法向向里,从而出现雪花

(2)在运用Laplacian算法进行求邻接平均点时未初始化邻接平均点数组,导致平均点的累加从而出现越光顺越粗糙的现象

(3)在obj文件中面对应顶点数和顶点数组的标号相差1.在运用的时候需减1,面从1开始记顶点,顶点数组从0开始记顶点

七、实验代码

#define GLUT_DISABLE_ATEXIT_HACK

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int v_num = 0; //记录点的数量

int f_num = 0; //记录面的数量

int vn_num = 0;//记录法向量的数量

int vt_num = 0;

GLfloat **vArr; //存放点的二维数组

GLfloat **vNewArr;//存放点的二维数组

int **fvArr; //存放面顶点的二维数组

GLfloat **fnArr;//存放面法向量的二维数组

int **ftArr;

int **vfArr;//存放顶点临接的面数的数组

int **nextVArr;//存放下一个临界顶点的数组

GLfloat **vnArr;//存放点法向量的二维数组

string s1, s2, s3, s4;

GLfloat f2, f3, f4;

int num1, num2, num3;

typedef GLfloat point3[3];

point3 x, y,l;//平面上的两个向量x,y和拉普拉斯向量l

static GLfloat theta[] = { 0.0,0.0,0.0 };

static GLint axis = 2;

static GLdouble viewer[] = { 0.0, 0.0, 5.0 }; /* initial viewer location */ static GLdouble Tran[] = { 0.0,0.0,0.0 };

static GLdouble sca = 1.0;

void getLineNum(string addrstr) //获取点和面的数量

{

ifstream infile(addrstr.c_str()); //打开指定文件

if (!infile) {

cout <<"open error!"<< endl;

exit(1);

}

string sline;//每一行

int i = 0, j = 0;

while (getline(infile, sline)) //从指定文件逐行读取

{

if (sline[0] == 'v')

{

v_num++;

}

if (sline[0] == 'f')

{

f_num++;

}

}

}

int readfile(string addrstr) //将文件内容读到数组中去

{

//getLineNum(addrstr);

//new二维数组

vArr = new GLfloat*[v_num];

for (int i = 0; i < v_num; i++) {

vArr[i] = new GLfloat[3];

}

vNewArr = new GLfloat*[v_num];

for (int i = 0; i < v_num; i++) {

vNewArr[i] = new GLfloat[3]; }

vnArr = new GLfloat*[vn_num];

for (int i = 0; i < vn_num; i++) {

vnArr[i] = new GLfloat[3];

}

vfArr = new int*[v_num];

for (int i = 0; i < v_num; i++) {

vfArr[i] = new int[10];

for (int j = 0; j < 10; j++) { vfArr[i][j] = -1;

}

}

nextVArr = new int*[v_num];

for (int i = 0; i < v_num; i++) {

nextVArr[i] = new int[10];

for (int j = 0; j < 10; j++) { nextVArr[i][j] = -1;

}

}

fvArr = new int*[f_num];

fnArr = new GLfloat*[f_num];

ftArr = new int*[f_num];

for (int i = 0; i < f_num; i++) {

fvArr[i] = new int[3];

fnArr[i] = new GLfloat[3];

ftArr[i] = new int[10];

}

ifstream infile(addrstr.c_str()); if (!infile) {

cout <<"open error!"<< endl;

exit(1);

}

string sline;//每一行

int ii = 0, jj = 0, kk = 0, mm = 0;

while (getline(infile, sline))

{

if (sline[0] == 'v')//存储点

{

istringstream sin(sline);

sin >> s1 >> f2 >> f3 >> f4;

vArr[ii][0] = f2;

vArr[ii][1] = f3;

vArr[ii][2] = f4;

ii++;

}

if (sline[0] == 'f') //存储面

{

istringstream in(sline);

GLfloat a;

in >> s1>>num1>>num2>>num3;//去掉f

fvArr[kk][0] = num1;

fvArr[kk][1] = num2;

fvArr[kk][2] = num3;

for (int i = 0; i < 10; i++) {

if (vfArr[num1-1][i] == -1) {

vfArr[num1-1][i] = kk;

nextVArr[num1-1][i] = num2;

break;

}

}

for (int j = 0; j < 10; j++) {

if (vfArr[num2-1][j] == -1) {

vfArr[num2-1][j] = kk;

nextVArr[num2-1][j] = num3;

break;

}

}

for (int i = 0; i < 10; i++) {

if (vfArr[num3-1][i] == -1) {

vfArr[num3-1][i] = kk;

nextVArr[num3-1][i] = num1;

break;

}

}

kk++;

}

}

return 0;

}

//计算面法向

void nomal(point3p) {

/*矢量的归一化*/

//double sqrt();

float d = 0.0;

int i;

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

d += p[i] * p[i];

d = sqrt(d);

if (d > 0.0)

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

p[i] /= d;

}

void getFaceNormal(point3A, point3B, point3C) { x[0] = C[0] - A[0];

x[1] = C[1] - A[1];

x[2] = C[2] - A[2];

y[0] = A[0] - B[0];

y[1] = A[1] - B[1];

y[2] = A[2] - B[2];

point3 v;

v[0] = x[1] * y[2] - x[2] * y[1];

v[1] = x[2] * y[0] - x[0] * y[2];

v[2] = x[0] * y[1] - x[1] * y[0];

nomal(v);

glNormal3fv(v);

}

void Laplacian() {

for (int num = 0; num < v_num; num++) {

int m = 0;

//求得点的邻接面数

for (int i = 0; i < 10; i++) {

if (nextVArr[num][i] != -1) {

m++;

}

else {

break;

}

}

point3 v0;

for (int i = 0; i < 3; i++) {

v0[i] = 0;

}

for (int i = 0; i < m; i++) {

v0[0] += vArr[nextVArr[num][i] - 1][0];

v0[1] += vArr[nextVArr[num][i] - 1][1];

v0[2] += vArr[nextVArr[num][i] - 1][2];

}

if (m != 0) {

for (int i = 0; i < 3; i++)

v0[i] /= m;

}

l[0] = v0[0] - vArr[num][0];

l[1] = v0[1] - vArr[num][1];

l[2] = v0[2] - vArr[num][2];

vNewArr[num][0] = vArr[num][0] + l[0] * 0.3;

vNewArr[num][1] = vArr[num][1] + l[1] * 0.3;

vNewArr[num][2] = vArr[num][2] + l[2] * 0.3;

}

for (int i = 0; i < v_num; i++) {

vArr[i][0] = vNewArr[i][0];

vArr[i][1] = vNewArr[i][1];

vArr[i][2] = vNewArr[i][2];

}

}

void init(void)

{

getLineNum("H:\\kitten_noisy.obj");

readfile("H:\\kitten_noisy.obj");

double viewer[] = { 0.0, 0.0, 8.0 }; /* initial viewer location */

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

GLfloat mat_shininess[] = { 50.0 };//材料的镜面指数,其值越大越精细

GLfloat light_position[] = { 1.0, 1.0f, 1.0, 0.0 };

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

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

glClearColor(0.0, 0.0, 0.0, 0.0);

glShadeModel(GL_SMOOTH);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glLightfv(GL_LIGHT0, GL_POSITION, light_position);//光源位置

glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);//漫反射光源

glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);//镜面反射光源

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);//环境光源

// glEnable(glMaterialf);

glEnable(GL_LIGHTING);//启动光照

glEnable(GL_LIGHT0);//启用0度光源

glEnable(GL_DEPTH_TEST);//启动深度测试

/*

glShadeModel(GL_SMOOTH); // Enable Smooth Shading

glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // 黑色背景

glClearDepth(1.0f);

// 深度缓冲区设置

glEnable(GL_DEPTH_TEST); // 允许深度测试

glDepthFunc(GL_LEQUAL);

// 定义深度测试类型

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculation

*/

}

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //设置观察的位置

glRotatef(theta[0], 1.0, 0.0, 0.0);

glRotatef(theta[1], 0.0, 1.0, 0.0);

//glRotatef(theta[2], 0.0, 0.0, 1.0);

glTranslatef(Tran[0], Tran[1], Tran[2]);

glScalef(sca, sca, sca);

//glPolygonMode(GL_FRONT_AND_BACK, GLU_FILL);

glBegin(GL_TRIANGLES);

//getFaceNormals();

for (int i = 0; i

{

getFaceNormal(vArr[fvArr[i][0] - 1], vArr[fvArr[i][1] - 1], vArr[fvArr[i][2] - 1]);

glVertex3f(vArr[fvArr[i][0] - 1][0], vArr[fvArr[i][0] - 1][1],

vArr[fvArr[i][0] - 1][2]);

glVertex3f(vArr[fvArr[i][1] - 1][0], vArr[fvArr[i][1] - 1][1],

vArr[fvArr[i][1] - 1][2]);

glVertex3f(vArr[fvArr[i][2] - 1][0], vArr[fvArr[i][2] - 1][1],

vArr[fvArr[i][2] - 1][2]);

}

glEnd();

/*

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_POINTS);

glColor3f(1.0, 1.0, 1.0);

for (int i = 0; i < v_num; i++) {

glVertex3fv(vArr[i]);

glNormal3fv(fnArr[i]);

}

glEnd();

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

数据库设计性实验报告

数据库系统概论实验报告 一、实验题目 小型CMS博客系统的设计与实现 二、实验要求 利用学习的数据库设计的方法和步骤,为选择的应用设计数据库、必要的索引、视图、编写应用程序。 三、总的设计思想,及环境语言、工具等 1、建立系统的目的,系统总体概况的介绍 进行博客系统开发的主要目的是为了提高自己的实践能力、学会自主开发独立程序,学会将所学知识应用于实践中,并在实践中不断学习。在大学里本人所学的知识大多数是从课本上得到的,而这次是要通过动手来实践,实习对本人来说是一次很好的锻炼。 本人所要实现的是一个小型CMS博客系统,用户在注册后可以实现在后台操作数据库更改网站标题、版本号、管理博客、管理日志分类等,在前台可以查看已公开的博客等。本次课程设计初步目标是实现博客的基本功能,在这个基础上对功能进行扩充。 2、选用的语言 利用WINDOWS XP结合DREAMWEAVER和access搭建ASP的环境平台,语言采用强大的vbscript。采用了IIS5.1。 3、需求分析的方法和结果 通过对现行博客系统的基本功能进行调查,明确了CMS博客系统由查看博客、发表博客、回复博客、管理员通过后台管理登录管理日志分类、修改删除博客、发表新文章、设置主页信息等等。用户对系统的描述如下。 a)用户基本功能 1)匿名用户可以查看用户公开的博客,并且可以通过注册申请成为正式用户。 b)管理员基本功能 1)发表新文章。 2)管理文章、如添加删除等。 3)管理分类,如添加、删除、重命名。 4)设置主页上显示的博客条数或者版本号。 数据流图

数据库逻辑模型 将图书馆管理系统的E-R图转换为关系数据库的数据模型,其关系模式为: 博客用户(用户,密码,邮箱),其中用户为主码; 版本信息(版本ID,URL,主页底部信息,副标题),其中版本ID为主码; 日志分类信息(编号,分类名称,基本表述(在鼠标放到分类上后显示的小标签)) 将CMS系统的数据库名定为“SimpleCMS” 数据库模式的规范化 各表的函数依赖集: F博客用户={用户→密码}; F类别={分类ID→名称,分类ID→基本描述}; F版本信息={编号→网站名,编号→网址,编号→底部信息,编号→副标题信息}; 上述关系模式中不存在对非码依赖的表达式,所有的非主属性对码完全并直接依赖,由此证明,博客数据库中各表均服从BCNF,其规范化程度较高,数据库设计合理。 4、E-R图

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++6.0。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架

(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。 (5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。 图1-2 信息程序基本 3.编辑菜单资源 设计如图1-1所示的菜单项。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表1-1中的定义编辑菜单资源。此时VC已自动建好程序框架,如图1-2所示。 表1-1菜单资源表 菜单标题菜单项标题标示符ID 直线DDA算法生成直线ID_DDALINE Bresenham算法生成直线ID_BRESENHAMLINE 中点算法生成直线ID_MIDPOINTLINE 4.添加消息处理函数 利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据表1-2建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。 表1-2菜单项的消息处理函数 菜单项ID消息消息处理函数ID_DDALINE CONMMAN OnDdaline

数据库系统设计实验报告

数据库系统设计实验报告 ――教务管理系统 学院:计算机科学与技术 专业:软件工程 班级: 学号: 姓名: 指导老师:

一、概述 项目背景:数据库课程设计 系统名称:教务管理系统 开发环境:SQL Server 2008 二、需求分析 1、系统的概述 ?一个学校由很多个学院组成,每个学院有多个专业,每个专业有1个或 者多个班级。一个学生只属于1个班级,学生有姓名、学号、性别、身 份证号、入学时间等属性。 ?每个专业的每个年级都有对应的教学计划。教学计划指定了这个专业这 个年级的某门课程在那个学期上,学分、学时是多少。每个学院都设置 有1个教务秘书,这些信息都由教务秘书进行输入。每个院系的课程都 有自己的唯一编码,比如计算机系上的C语言,和电子系上的C语言, 虽然都是同一门课,但是编码是不同的。但是同一个院系中的相同的课 程,课程代码是唯一的。比如计算机学院的07计算机软件专业和计算机 学院的07计算机科学专业都有C语言课程,这两门课程的课程代码是相 同的。 ?教务秘书在每个学期的中间时刻,为下一个学期进行排课,排课的内容 根据教学计划,比如08计算机软件专业的学生,在2009-2010年第2 学期上的课程,可以通过教学计划得知要上什么课程,然后对这些课程 安排上课教师(比如陈越)、上课时间(比如星期2,第1-2节)和地点 (理工楼234),有的课程是单周上,有的双周,也有是每周都上的。 ?在每个学期期末,学生登录到网站上选择下一个学期需要上的课,选择 的时刻,可以选择是否需要教材,如果某门课程的人数选满了,则不能 给任何学生选择了。 ?学生根据选择的课程进行上课,参加考试。每个老师可以用自己的用户 名和密码登陆网站,选择这个学期自己所教的课程(一个老师可以上多 个班级的课程),输入这个班级的成绩,成绩分为期末考试成绩、期中考 试成绩、平时成绩、实验成绩以及总评成绩。这些成绩都需要进行存储。 ?为了保证安全性,老师输入的成绩并不是直接放到最终的成绩表中,而 是放在一个临时的表中,只有当教务秘书审核过后,才导入到最终的成 绩表中。

计算机图形学实验报告实验2

大学实验报告 学院: 计算机科学与信息专业:计算机科学与技术班级:计科101 喻志华学号1008060024 实验组实验时间2013/3/30 指导教师吴云成绩实验项目名称圆和椭圆的生成算法 实 验目的 根据圆的Brensenham算法、中点算法和中点改进算法,以及椭圆的中点算法,编写程序,实现圆与椭圆的绘制。 实 验要求1.圆、椭圆的中点算法 2.圆的优化后的算法:二次差分法 3.编制源程序; 4.对于一些较为重要的算法,可以摘抄在报告中; 实验原理 1.中点算法 A.构造函数 F(X,Y)=X2+Y2-R2,则可知 F(M)< 0:M在圆,取T F(M)≥ 0:M在圆外,取 B B.第一个M点的值有: (一)DM0 = F(M0)= F(1,R-0.5)= 12+(R-0.5)2-R2=1.25-R 若 D=d-0.25 则判别式d<0等价于D<-0.25。即DM0=1-R与DM0=1.25-R等价。 (二)如果dM<0,表示下一中点M在圆,选择T点,且: dMT= F(MT)= F(xp+2,yp-0.5) 则: ?dMT= dMT - dM=2xp+3 (三)如果dM>0,表示下一中点M在圆外,选择B点,且: dMB= F(xMB,yMB)= F(xp+2,yp-1.5)则: ?dMB= dMB - dM=2xp-2yp +5 2.中点改进算法——增量算法

设圆上某点I(xi,yi);则下一点为J点,坐标为(xi+1,yj)dT=2xp+3; dB=2(xp-yp)+5; d1=d2=0; 因为x每次加1,所以 dj点 A.将增量?dMT=2(xi+1)+3=dT+2=dT+d1; (d1=d1+2) B.将增量?dMB=2(xi+1)-2yj+5=dB+d1+d2; dj较之于di,x部分增量增加相同的量,y部分两种情况 1.取T点,yj不减1,y部分增量的增量无变化 2.取B点,yj减1,y部分增量的增量加 2. 所以当y—时,d2=d2+2 因此,d<0, d=d+dT+d1; d>0, d=d+dB+d1+d2; 3.Brensenham算法 1.基本思想: 当|D(Ti)|≥|D(Bi)|,则Bi更接近于圆周,选择Bi; 当|D(Ti)|<|D(Bi)|,则Ti更接近于圆周,选择Ti; 若令D=|D(Ti)|-|D(Bi)| 则D≥0,取Bi; D<0,取Ti; 2.三种情况 A.设x0=0,y0=R;则T1为(1,R),B1为(1,R-1), d1=(12+R2-R2)+[(12+(R-1)2-R2]=3-2R B.若di<0,则取Ti作为下一点,即Pi(xi-1+1,yi-1); d(i+1)=di+4xi-1+6 C.若di≥0,则取Bi作为下一点,即Pi(xi-1+1,yi-1-1), d(i+1)=di+4(xi-1-yi-1)+10 4.椭圆的中点算法

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

实验二实验报告

上海建桥学院本科《数据结构》实验报告(二) 课程名称:数据结构 实验类型:综合 实验室名称:机房 开课系:信息技术系 学生姓名: 专业: 学号: 指导老师:

实验二:线性表应用——顺序表 实验日期:2011 年9 月日评阅成绩: 实验目的及要求 1. 熟练掌握线性表的基本操作在顺序存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的顺序存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数调用的参数传递、指针类型的应用)。 实验内容 已知程序文件seqlist.cpp已给出学生身高信息顺序表的类型定义和基本运算函数定义。(1)顺序表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; (2)基本运算函数原型 void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/ 任务一 阅读程序seqlist.cpp(见电子文档),理解顺序表类型Seqlist和基本运算函数。 任务二 1.题目要求 创建一个新的程序文件sy2.cpp,请调用seqlist.cpp提供的功能函数(以#include

单片机实验报告2

实验报告 二、实验地点:图书馆816-2 三、实验目的:掌握中断控制单元的设置方法及中断的编程方法。 四、实验内容 1.内容及要求: (1)用单次脉冲信号申请中断,在中断处理程序中对输出信号进行翻转,在此实验中使用P1.0口接一发光二极管显示。程序如下: ORG 0000H LJMP START ORG 0013H LJMP INT ORG 1000H START: SETB P1.0 SETB EX1 SETB PX0 SETB IT1 SETB EA INT: CPL P1.0 RETI END (2)用单次脉冲信号申请中断,要求程序中对每次中断进行计数,并将计数结果显示在发光二极管上。在本实验中用P1口接了八个发光二极管来实现。程序如下: ORG 0000H LJMP START ORG 0013H LJMP INT ORG 1000H START: MOV A,#00H MOV P1,A

SETB EX1 SETB PX0 SETB IT1 SETB EA INT: INC P1 RETI END 2.流程图如下: 图1 信号翻转流程图

图2 计数器加1流程图 3.实验步骤 (1.1)将P3.2与单脉冲用导连接,P1.0接一个发光二极管,用二极管的亮、灭来显示翻转。 (1.2)打开试验箱,编写中断程序。 (1.3)编译、运行中断程序并观测试验箱。若试验箱中的发光二极管随着单脉冲按键进行着亮灭亮灭,即说明实现了输出信号的翻转,实验成功。 (2.1)关闭试验箱,将P1.0至P1.7对应连接八个发光二极管,单脉冲连接P3.3。(2.2)打开试验箱,编写中断和累加的程序。 (2.3)编译、运行实验程序并观测试验箱。若八个发光二极管显示的数值等于按下单脉冲键的次数,则实验成功。 五、实验中遇到的问题及解决方法 问题1:实验时,将P3.2口接单脉冲,编写程序时,却写成了0013H,允许中断

实验一 数据库模式设计及建立实验报告

长春大学计算机学院科学与技术专业 数据库原理实验报告 实验名称:实验一数据库模式设计及建立 班级:姓名:学号: 实验地点:日期: 一、实验目的: 1.了解SQL SERVER 2005/2008系统或KingBase ES V7.0的使用; 2.基本掌握SQL的数据定义。 二、实验内容、要求和环境: 【实验要求】 注:将完成的实验报告重命名为:班级+学号+姓名+(实验一),(如:041540538张三(实验一)),提交到SPOC学堂。 1.实验课要携带教材、学习辅导、老师下发的实验报告文档等。 2.课前要对实验内容和步骤部分进行预习。 3.将本次实验所建的数据库做好备份,以备以后实验使用。 【实验环境】 1.SQL SERVER 2005/20085; 1.KingBase ES V7.0 ,人大金仓。 【实验内容和步骤】 1.熟悉SQL SERVER 2005/2008系统。 (1)启动“SQL Server Managemet Studio”,新建数据库和关系(表) ①鼠标单击“开始/所有程序/Microsoft SQL server 2008/SQL Server Managemet Studio”启动“SQL Server Managemet Studio”,SQL Server Managemet Studio(SSMS)是一个集成环境,用于访问、配置、控制、管理和开发SQL Server 的所有组件,SSMS将大量图形工具与丰富的脚本编辑器相结合,使各种技术水平的开发人员和管理员都可以访问SQL Server; ②在“SQL Server Managemet Studio”中左窗口“对象资源管理器”中,单击“SQLEXPRESS”的左侧“+”,弹出下拉菜单; ③在上一步的下拉菜单中,鼠标右键单击“数据库”,在弹出的菜单中选择“新建数据库”,在弹出的对话框中,输入数据库名,同时可以进行存储位置的设置; ④在数据库文件夹下,出现新建的数据库文件夹; ⑤点击所建数据库文件名左侧的“+”,弹出下拉菜单; ⑥在上一步弹出的下拉菜单中,鼠标右键单击“表”,弹出下拉菜单,单击“新建表”即可在此数据库文件夹中建立关系(表)了。 (2)在“对象资源管理器”的上方有一个“新建查询”图标,单击“新建查询”,可使用SQL 语言进行对关系的操作 ①单击“新建查询”后,在“对象资源管理器”窗口上部出现一个工具栏,右侧弹出一个窗

计算机图形学实验二

太原工业学院

实验拓展:绘制颜色渐变的三角形和四边形。 void CTriangle::Draw(CDC* pDC)//画出来一个三角形 { pDC->MoveTo(point0.x,point0.y); pDC->LineTo(point1.x,point1.y); pDC->LineTo(point2.x,point2.y); pDC->LineTo(point0.x,point0.y); } void CTriangle::GouraudShader(CDC* pDC) { SortVertex();//point0点为y坐标最小的点,point1点为y坐标最大的点,point2点的y坐标位于二者之间。如果y值相同,取x最小的点//定义三角形覆盖的扫描线条数 int nTotalScanLine = point1.y - point0.y + 1; //定义span的起点与终点数组 SpanLeft = new CPoint2[nTotalScanLine];//跨度左边数组 SpanRight = new CPoint2[nTotalScanLine];//跨度右边数组 //判断三角形与P0P1边的位置关系,0-1-2为右手系 int nDeltz = (point1.x - point0.x) * (point2.y - point1.y) - (point1.y - point0.y) * (point2.x - point1.x);//点矢量叉积的z坐标 if(nDeltz > 0)//三角形位于P0P1边的左侧 { nIndex = 0; DDA(point0, point2, TRUE); DDA(point2, point1, TRUE); nIndex = 0; DDA(point0, point1, FALSE); }

计算机图形学实验报告

计算机图形学 实验报告 学号:20072115 姓名: 班级:计算机 2班 指导老师:何太军 2010.6.19

实验一、Windows 图形程序设计基础 1、实验目的 1)学习理解Win32 应用程序设计的基本知识(SDK 编程); 2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构; 5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 6)学习使用MFC 的图形编程。 2、实验内容 1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务) 2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,This is my first SDI Application"。(必选任务) 3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制; 3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。 4、实验结果 正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图: 5、实验体会 通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

实验报告二

《大学计算机基础》课程 实验报告手册 学院外国语学院年级2013 专业英语师范 姓名麦尔耶姆·伊敏学号222013310011149 任课教师吕家恪上机地点 (以上由学生填写) 实验教师(签字) 西南大学计算机与信息科学学院 计算机基础教育系 年月日

《大学计算机基础》课程实验报告二 实验题目:Word中文档的录入编辑、排版与图文混排 一、实验目的: 掌握WORD中文档处理的基本步操作骤,熟练掌握各种排版技术与技巧 二、实验主要内容及过程(实验主要内容的介绍、主要的操作步骤) 1.熟悉Word环境,并输入文字保存文件 2.打开文档WL11.doc,为文档添加“提高windows系统内存效率的优化方法”,并将其设置为“黑体、二号、粗体红色、字符缩放80%、任意选择一种动态效果、居中”。 3。将正文文字设置为“小四号、楷体、两端对齐、行间距18磅、段间距后各一行”,利用格式刷将所有英文字体设置为“arial”。点击“格式—段落—行距—固定值”进行设置行间距。 4.将以数字编号开头的文字另起一段,即全文共分为四段,并设置各段首行进行缩进,设为“2个字符”。将文档存盘,命名为“WL21.doc”。 5. 利用格式刷将正文中第2—4段的小标题设置为“黑体、小四号、粗体、蓝色、字间距加宽2磅、加边框、设置浅绿色底纹效果”。 6. 将文中所有“页面文件” 一词改为“红色、粗斜体、波浪线、字符缩放80%、字间距为紧缩一

磅”。 研 2014/11/9 13:00:54 1.观察word2003的页面设置的默认值,并对文档进行页面设置:16开纸张、左右上下边距均为1.5厘米,页眉和页脚距边界均为1厘米。 2.将文档存盘,并另存为为“WL22”。 3.打开文档wl11.doc,并另存为wl3.doc. 4.将文档的样式设置为系统样式‘标题1’,将3个小标题设置为标题3样式,然后分别在各种视图中(特别是大纲视图中)查看结果 5.将第一段设置为首字下沉2行 6.将文档的第2段分为两行,中间加分隔线,等宽;将文档分为3栏,第一栏栏宽为18个字符,第二栏栏宽为9个字符,栏宽间距为2个字符。 7.设置页眉(文字和标题相同)为“五号、仿宋_GB2312斜体、居中”,页脚插入页码,设置为“小五号、右对齐”,格式为“-1-”形式。

数据库课程设计实验报告一

一、需要实现得功能 1、1录入学生基本信息得功能 学生基本信息主要包括:学号、姓名、性别、年龄、出生地、专业、班级、总学分,在插入时,如果数据库则已经存在该学号,则不能再插入该学号。 1、2修改学生基本信息得功能 在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。 1、3查询学生基本信息得功能 可使用“姓名”对已存有得学生资料进行查询。 1、4删除学生基本信息得功能 在管理员模式下,只要选择表格中得某个学生,就可以删除该学生. 1、5用户登陆 用不同得登录权限可以进入不同得后台界面,从而实现权限操作。 1、6用户登陆信息设置 可以修改用户登陆密码 二、设计得目得 课程设计就是学习完该课程后进行得一次较全面得综合练习。其目得在于通过实践加深学生对面向对象程序设计得理论、方法与基础知识得理解,掌握使用Java语言进行面向对象设计得基本思路与方法;加强学生研发、调试程序得能力;培养学生分析、解决问题得能力;提高学生得科技论文写作能力。 三、总体设计 3、1功能图

3、2 Use Case图

3、3系统执行流程图 3、4、数据库设计

主要就是E-R 图与数据库二维表得设计 3、4、1数据库E-R 模型 3、4、2数据库关系模型—-二维表 学生表(s tu dent ) 字段 数据类型 说明 st uId nvarc har(30) 学号 s tuName n varchar(30) 姓名 st uSe x nva rchar(30) 性别 stuAg e i nt 年龄 s tuJg nvar char (30) 籍贯 stuZy n var cha r(30) 专业 cl as sId nvarch ar(30) 班号 stuSour se numeric(5,2) 总学分 学号 姓名 性别 年龄 出生地 专业 班级 总学分 登陆用户管理 账号 密码 职位 学 生

计算机图形学实验报告

计算机图形学(computer graphics)的基本含义是使用计算机通过算法和程序在显示设备上构造图形。图形是人们通过计算机设计和构造出来的,不是通过摄像机、扫描仪等设备输入的图像。这里的图形可以是现实中存在的图形,也可以是完全虚拟构造的图形。以矢量图的形式呈现,更强调场景的几何表示,记录图形的形状参数与属性参数。例如,工程图纸(drawing),其最基本的图形单元是点、线、圆/弧等,其信息包含图元的几何信息与属性信息(颜色、线型、线宽等显式属性和层次等隐式属性)。 图像处理(image processing)则是研究图像的分析处理过程,图像处理研究的是图像增加、模式识别、景物分析等,研究对象一般为二维图像。图像以点阵图形式呈现,并记录每个点的灰度或色彩。例如,照片、扫描图片和由计算机产生的真实感和非真实感图·形等,最基本的图像单元(pels,picture elements)是点—像素(pixel),其信息实际上是点与它的属性信息(颜色、灰度、亮度等)。 计算机视觉(computer vision)包括获取、处理、分析和理解图像或者更一般意义的真实世界的高维数据方法,它的目的是产生决策形式的数字或者符号信息。

计算机图形学和计算机视觉是同一过程的两个方向。计算机图形学将抽象的语义信息转化成图形,计算机视觉则从图形中提取抽象的语义信息,图像处理研究的则是一个图像或一组图像之间的相互转化和关系,与语义信息无关。下表从输入和输出的角度对三者的区别进行辨析: 表2 图像处理&计算机视觉&计算机图形学对比 计算机图形学,输入的是对虚拟场景的描述,通常为多边形数组,而每个多边形由三个顶点组成,每个顶点包括三维坐标、贴图坐标、RGB 颜色等。输出的是图像,即二维像素数组。 计算机视觉,输入的是图像或图像序列,通常来自相机、摄像头或视频文件。输出的是对于图像序列对应的真实世界的理解,比如检测人脸、识别车牌。图像处理,输入的是图像,输出的也是图像。

计算机图形学实验二

实验报告 课程名称:计算机图形学 实验项目:区域填充算法 实验仪器:计算机 系别:计算机学院 专业:计算机科学与技术 班级姓名:计科1602/ 学号:2016011 日期:2018-12-8 成绩: 指导教师:

一.实验目的(Objects) 1.实现多边形的扫描线填充算法。 二.实验内容 (Contents) 实现多边形的扫描线填充算法,通过鼠标,交互的画出一个多边形,然后利用种子填充算法,填充指定的区域。不能使用任何自带的填充区域函数,只能使用画点、画线函数或是直接对图像的某个像素进行赋值操作;

三.实验内容 (Your steps or codes, Results) //widget.cpp //2016CYY Cprogramming #include"widget.h" #include #include #include using namespace std; #define H 1080 #define W 1920 int click = 0; //端点数量 QPoint temp; QPoint first; int result = 1; //判断有没有结束 int sign = 1; //2为画线 int length = 5; struct edge { int ymax; float x; float dx; edge *next; }; edge edge_; QVector edges[H]; QVector points;//填充用 bool fin = false; QPoint *Queue = (QPoint *)malloc(length * sizeof(QPoint)); //存放端点的数组 Widget::Widget(QWidget *parent) : QWidget(parent) { } Widget::~Widget() { } void Widget::mouseMoveEvent(QMouseEvent *event) { setMouseTracking(true); if (click > 0 && result != 0) { startPt = temp; endPt =event->pos(); sign = 2; update(); } } void Widget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { } else if (event->button() == Qt::RightButton) { sign = 2;

实验2 实验报告

南昌大学实验报告 学生姓名:刘鑫学号:6103113093 专业班级:计科133 实验类型:□验证□√综合□设计□创新实验日期:实验成绩: 一、实验项目名称 数据类型、运算符和表达式 二、实验目的 1.了解C++语言中数据类型的意义; 2.掌握不同数据类型之间的赋值的规律; 3.学会有关C++语言的有关运算符,以及包含这些运算符的表达式,特别是是++和—运算符的使用。 4.进一步熟悉C++程序的编辑环境。 三.实验内容 1.整型 整型数据有短整型(short)、整型(int)、长整型(long)3种,无符号(unsigned)整型也相应有3种,它们在内存中的存储方式均相同,区别在于字长(所占内存字节数)以及符号位。本实验通过观察整型数据的输出变化,体会整型的存储方式。 i.输入以下程序: #include using namespace std; int main() { short a, b; unsigned c, d; long e, f; a = 100; b = -100; e = 50000; f = 32767; c = a; d = b; printf(“%d, %d\n”, a, b); printf(“%u, %u\n”, c, d); c = a = e; d = b = f; printf(“%d, %d\n”, a, b); printf(“%u, %u\n”, c, d); } ii.编译并运行之,观察其输出结果。并思考以下问题: a.将一个负整数赋给无符号的变量,会发生什么结果?为什么? b.将一个大于32767的长整数赋给整型变量,会发生什么结果?为什么? c.将一个长整数赋给无符号变量,会发生什么结果?为什么? iii.改变程序中各变量的值: a = 65580; b = -40000; e = 65535; f = 65580; 再次运行程序并分析结果。 2、算术与逻辑运算

数据库设计实验报告模板

XX学院 数据库原理与应用 实 验 报 告 姓名:(小四居中)学号:(小四居中) 系别:(小四居中)专业班级:(小四居中)成绩: 指导教师:

实验一:基本表的定义删除与修改【40分】 1. 实验特点: 熟悉SQL Server 2014,掌握数据库、基本表的定义、删除与修改。 类型:验证类别:专业基础计划学时:2学时每组人数:1人 2. 实验目的与要求: 实验目的:熟练掌握数据库、基本表的定义、删除与修改,为后继学习打好基础。 基本要求:掌握数据库、基本表的定义、删除与修改。 3. 实验内容: (1)在查询分析器中建立数据库的命令、建立的数据库截图【10分】 (2)创建三个基本表的命令、各表结构截图、各表数据的截图【27分】 (3)建库、表过程中出现过的错误及解决方法(写出1-2个即可)【3分】

实验二:SQL的数据查询【30分】 1. 实验特点:简单查询、连接查询、嵌套查询和集合查询 类型:验证类别:专业基础计划学时:2学时每组人数:1人2. 实验目的与要求: 实验目的:熟练掌握查询语句的使用 基本要求: (1)掌握查询语句的一般格式 (2)掌握无条件、有条件查询及查询结果的排序与分组 3. 实验内容:【每小题3分】 (1)无条件单表查询 (2)有条件单表查询 (3)单表嵌套(一层)查询 (4)复合条件多表查询 (5)使用COUNT()的单表查询 (6)使用AVG()的单表查询 (7)查询结果分组 (8)查询结果排序 (9)使用通配符的查询 (10)使用换码字符的单表查询

实验三:SQL的数据更新、视图【30分】 1. 实验特点:数据更新、视图定义查询更新。 类型:验证类别:专业基础计划学时:2学时每组人数:1人 2. 实验目的与要求: 实验目的:熟练掌握SQL数据插入、修改和删除,掌握视图定义查询更新。 基本要求: (1)掌握SQL数据插入、修改和删除语句的一般格式 (2)掌握SQL数据插入、修改和删除的使用方法 (3)掌握SQL视图的建立、修改和删除的使用方法 3. 实验内容:【每小题5分】 (1)插入单个元组 (2)插入子查询结果 (3)修改某个元组的值 (4)修改多个元组的值 (5)删除一个元组的值 (6)建立视图

相关文档
最新文档